124 lines
3.6 KiB
Lua
124 lines
3.6 KiB
Lua
REGISTER_GOAL(GOAL_COMMON_LiftOff, "LiftOff")
|
|
REGISTER_GOAL_NO_INTERUPT(GOAL_COMMON_LiftOff, true)
|
|
function LiftOff_Activate(ai, goal)
|
|
goal:AddSubGoal(GOAL_COMMON_Attack, 10, 9520, TARGET_NONE, DIST_None)
|
|
return
|
|
end
|
|
|
|
function LiftOff_Update(ai, goal)
|
|
local goalDistY = 5
|
|
local curDistY = ai:GetDistY(TARGET_ENE_0)
|
|
local resultSubGoal = goal:GetLastSubGoalResult()
|
|
if (resultSubGoal == GOAL_RESULT_Success or resultSubGoal == GOAL_RESULT_Failed) and (not not ai:IsLanding() or curDistY < goalDistY) then
|
|
goal:AddSubGoal(GOAL_COMMON_Attack, 10, 9520, TARGET_NONE, DIST_None)
|
|
end
|
|
local isLanding = ai:IsLanding()
|
|
if not isLanding and goalDistY <= curDistY then
|
|
return GOAL_RESULT_Success
|
|
else
|
|
return GOAL_RESULT_Continue
|
|
end
|
|
end
|
|
|
|
function LiftOff_Terminate(ai, goal)
|
|
return
|
|
end
|
|
|
|
function LiftOff_Interupt(ai, goal)
|
|
return false
|
|
end
|
|
|
|
REGISTER_GOAL(GOAL_COMMON_Landing, "Landing")
|
|
REGISTER_GOAL_NO_UPDATE(GOAL_COMMON_Landing, true)
|
|
REGISTER_GOAL_NO_INTERUPT(GOAL_COMMON_Landing, true)
|
|
function Landing_Activate(ai, goal)
|
|
local landingPoint = goal:GetParam(0)
|
|
ai:SetAIFixedMoveTarget(landingPoint, TARGET_SELF, 0)
|
|
local successRange = goal:GetParam(1)
|
|
goal:AddSubGoal(GOAL_COMMON_Landing_Move, 10, successRange)
|
|
if 0 < ai:GetDistYSigned(TARGET_ENE_0) then
|
|
goal:AddSubGoal(GOAL_COMMON_ApproachTarget, 10, POINT_AI_FIXED_POS, 0.1, TARGET_SELF, false, -1)
|
|
else
|
|
goal:AddSubGoal(GOAL_COMMON_Landing_Landing, 10)
|
|
end
|
|
return
|
|
end
|
|
|
|
function Landing_Update(ai, goal)
|
|
return GOAL_RESULT_Continue
|
|
end
|
|
|
|
function Landing_Terminate(ai, goal)
|
|
return
|
|
end
|
|
|
|
function Landing_Interupt(ai, goal)
|
|
return false
|
|
end
|
|
|
|
REGISTER_GOAL(GOAL_COMMON_Landing_Move, "Landing_Move")
|
|
REGISTER_GOAL_UPDATE_TIME(GOAL_COMMON_Landing_Move, 0.5, 0.5)
|
|
REGISTER_GOAL_NO_INTERUPT(GOAL_COMMON_Landing_Move, true)
|
|
function Landing_Move_Activate(ai, goal)
|
|
local successRange = goal:GetParam(0)
|
|
goal:AddSubGoal(GOAL_COMMON_ApproachTarget, 10, POINT_AI_FIXED_POS, successRange, TARGET_SELF, false, -1)
|
|
return
|
|
end
|
|
|
|
function Landing_Move_Update(ai, goal)
|
|
local distXZ = ai:GetDistXZ(POINT_AI_FIXED_POS)
|
|
if distXZ < 1 then
|
|
return GOAL_RESULT_Success
|
|
elseif ai:IsLanding() then
|
|
return GOAL_RESULT_Failed
|
|
else
|
|
return GOAL_RESULT_Continue
|
|
end
|
|
end
|
|
|
|
function Landing_Move_Terminate(ai, goal)
|
|
return
|
|
end
|
|
|
|
function Landing_Move_Interupt(ai, goal)
|
|
return false
|
|
end
|
|
|
|
REGISTER_GOAL(GOAL_COMMON_Landing_Landing, "Landing_Landing")
|
|
REGISTER_GOAL_UPDATE_TIME(GOAL_COMMON_Landing_Landing, 0.5, 0.5)
|
|
REGISTER_GOAL_NO_INTERUPT(GOAL_COMMON_Landing_Landing, true)
|
|
function Landing_Landing_Activate(ai, goal)
|
|
goal:AddSubGoal(GOAL_COMMON_Attack, goal:GetLife(), 9510, TARGET_NONE, DIST_None)
|
|
return
|
|
end
|
|
|
|
function Landing_Landing_Update(ai, goal)
|
|
if ai:IsLanding() then
|
|
local cnt = goal:GetNumber(0)
|
|
if 10 < cnt then
|
|
return GOAL_RESULT_Success
|
|
end
|
|
goal:SetNumber(0, cnt + 1)
|
|
end
|
|
local resultSubGoal = goal:GetLastSubGoalResult()
|
|
if (resultSubGoal == GOAL_RESULT_Success or resultSubGoal == GOAL_RESULT_Failed) and not ai:IsLanding() then
|
|
goal:AddSubGoal(GOAL_COMMON_Attack, goal:GetLife(), 9510, TARGET_NONE, DIST_None)
|
|
end
|
|
if 1 < ai:GetDistYSigned(POINT_AI_FIXED_POS) then
|
|
ai:PrintText("[Landing_Landing_Update]ターゲットより高さが下になりました。失敗を返します。")
|
|
return GOAL_RESULT_Failed
|
|
else
|
|
return GOAL_RESULT_Continue
|
|
end
|
|
end
|
|
|
|
function Landing_Landing_Terminate(ai, goal)
|
|
return
|
|
end
|
|
|
|
function Landing_Landing_Interupt(ai, goal)
|
|
return false
|
|
end
|
|
|
|
return
|