v1.4.4
This commit is contained in:
commit
9c94d113d3
10260 changed files with 1237388 additions and 0 deletions
125
attic/npcs/toxicfly/behavior.lua
Normal file
125
attic/npcs/toxicfly/behavior.lua
Normal file
|
@ -0,0 +1,125 @@
|
|||
--------------------------------------------------------------------------------
|
||||
function init()
|
||||
self.sensors = sensors.create()
|
||||
|
||||
self.state = stateMachine.create({
|
||||
"idleState",
|
||||
"moveState",
|
||||
"attackState"
|
||||
})
|
||||
self.state.enteringState = function(stateName)
|
||||
self.state.shuffleStates()
|
||||
end
|
||||
|
||||
self.state.leavingState = function(stateName)
|
||||
entity.setAggressive(false)
|
||||
end
|
||||
|
||||
entity.setAggressive(false)
|
||||
end
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
function update(dt)
|
||||
if util.trackTarget(30) then
|
||||
self.state.pickState({ targetId = self.targetId })
|
||||
end
|
||||
|
||||
if not self.state.update(dt) then
|
||||
mcontroller.controlFly({ 0, 0 })
|
||||
end
|
||||
|
||||
if self.state.stateDesc() ~= "attackState" then
|
||||
if mcontroller.onGround() then
|
||||
entity.setAnimationState("movement", "idle")
|
||||
else
|
||||
entity.setAnimationState("movement", "fly")
|
||||
end
|
||||
end
|
||||
|
||||
self.sensors.clear()
|
||||
end
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
function damage(args)
|
||||
if entity.health() > 0 then
|
||||
self.state.pickState({ targetId = args.sourceId })
|
||||
end
|
||||
end
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
idleState = {}
|
||||
|
||||
function idleState.enter()
|
||||
if mcontroller.onGround() or self.sensors.idleLandSensor.collisionTrace.any(true) then
|
||||
return { timer = entity.randomizeParameterRange("idleTimeRange") }
|
||||
end
|
||||
|
||||
return nil
|
||||
end
|
||||
|
||||
function idleState.update(dt, stateData)
|
||||
if not mcontroller.onGround() then
|
||||
if not self.sensors.idleLandSensor.collisionTrace.any(true) then
|
||||
return true, entity.configParameter("idleCooldown")
|
||||
end
|
||||
|
||||
mcontroller.controlFly({0, -entity.flySpeed() / 2 })
|
||||
end
|
||||
|
||||
stateData.timer = stateData.timer - dt
|
||||
if stateData.timer <= 0 then
|
||||
return true, entity.configParameter("idleCooldown")
|
||||
end
|
||||
end
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
moveState = {}
|
||||
|
||||
function moveState.enter()
|
||||
return {
|
||||
timer = entity.randomizeParameterRange("moveTimeRange"),
|
||||
direction = util.randomDirection()
|
||||
}
|
||||
end
|
||||
|
||||
function moveState.update(dt, stateData)
|
||||
if self.sensors.blockedSensors.collision.any(true) then
|
||||
stateData.direction = -stateData.direction
|
||||
end
|
||||
|
||||
local delta = { stateData.direction, 0 }
|
||||
if self.sensors.moveGroundSensor.collisionTrace[1].value then
|
||||
delta[2] = 0.5
|
||||
elseif self.sensors.moveCeilingSensor.collisionTrace[1].value then
|
||||
delta[2] = -0.5
|
||||
end
|
||||
|
||||
delta = vec2.mul(vec2.norm(delta), entity.flySpeed())
|
||||
mcontroller.controlFly(delta)
|
||||
|
||||
stateData.timer = stateData.timer - dt
|
||||
if stateData.timer <= 0 then
|
||||
return true
|
||||
end
|
||||
|
||||
return false
|
||||
end
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
attackState = {}
|
||||
|
||||
function attackState.enterWith(args)
|
||||
if args.targetId ~= nil then
|
||||
return nil -- TODO
|
||||
end
|
||||
|
||||
return nil
|
||||
end
|
||||
|
||||
function attackState.enteringState(stateData)
|
||||
entity.setAggressive(true)
|
||||
end
|
||||
|
||||
function attackState.update(dt, stateData)
|
||||
return true -- TODO
|
||||
end
|
Loading…
Add table
Add a link
Reference in a new issue