v1.4.4
This commit is contained in:
commit
9c94d113d3
10260 changed files with 1237388 additions and 0 deletions
99
attic/npcs/allergen/behavior.lua
Normal file
99
attic/npcs/allergen/behavior.lua
Normal file
|
@ -0,0 +1,99 @@
|
|||
function init()
|
||||
self.dead = false
|
||||
self.sensors = sensors.create()
|
||||
|
||||
self.state = stateMachine.create({
|
||||
"idleState",
|
||||
"shootState",
|
||||
})
|
||||
self.state.leavingState = function(stateName)
|
||||
entity.setAnimationState("default", "idle")
|
||||
end
|
||||
|
||||
entity.setDamageOnTouch(true)
|
||||
entity.setAggressive(true)
|
||||
entity.setAnimationState("default", "idle")
|
||||
end
|
||||
|
||||
function update(dt)
|
||||
if util.trackTarget(entity.configParameter("shoot.seedShotDistance")) then
|
||||
self.state.pickState({ targetId = self.targetId })
|
||||
end
|
||||
self.state.update(dt)
|
||||
self.sensors.clear()
|
||||
end
|
||||
|
||||
function damage(args)
|
||||
if entity.health() <= 0 then
|
||||
self.state.pickState({ die = true })
|
||||
else
|
||||
self.state.pickState({ targetId = args.sourceId })
|
||||
end
|
||||
end
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
idleState = {}
|
||||
|
||||
function idleState.enter()
|
||||
return { }
|
||||
end
|
||||
|
||||
function idleState.update(dt, stateData)
|
||||
entity.setAnimationState("default", "idle")
|
||||
|
||||
return true
|
||||
end
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
shootState = {}
|
||||
|
||||
function shootState.enterWith(args)
|
||||
if args.targetId == nil then return nil end
|
||||
|
||||
local targetPosition = world.entityPosition(args.targetId)
|
||||
if targetPosition == nil then return nil end
|
||||
|
||||
return {
|
||||
targetId = args.targetId,
|
||||
targetPosition = targetPosition,
|
||||
shotFired = false,
|
||||
timer = entity.configParameter("shoot.fireTime"),
|
||||
recoilTimer = entity.configParameter("shoot.recoilTime"),
|
||||
}
|
||||
end
|
||||
|
||||
function shootState.update(dt, stateData)
|
||||
entity.setAnimationState("default", "shoot")
|
||||
|
||||
stateData.timer = stateData.timer - dt
|
||||
if stateData.timer <= 0 then
|
||||
if not stateData.shotFired then
|
||||
local randDir = math.random() * math.pi -- 0 to pi
|
||||
local direction = {
|
||||
math.cos(randDir),
|
||||
math.sin(randDir)
|
||||
}
|
||||
local oldTid = self.targetId
|
||||
self.targetId = nil
|
||||
if util.trackTarget(entity.configParameter("shoot.pollenShotDistance")) then
|
||||
-- entity.setFireDirection({0, 0}, direction)
|
||||
-- entity.startFiring("pollen")
|
||||
else
|
||||
self.targetId = oldTid
|
||||
-- entity.setFireDirection({0, 0}, direction)
|
||||
-- entity.startFiring("seed")
|
||||
end
|
||||
stateData.shotFired = true
|
||||
else
|
||||
-- entity.stopFiring()
|
||||
end
|
||||
stateData.recoilTimer = stateData.recoilTimer - dt
|
||||
end
|
||||
|
||||
if stateData.recoilTimer <= 0 then
|
||||
self.targetId = nil
|
||||
return true
|
||||
end
|
||||
|
||||
return false
|
||||
end
|
Loading…
Add table
Add a link
Reference in a new issue