parent
76d45f2563
commit
de04905983
@ -0,0 +1,80 @@ |
||||
#include "Monster.h" |
||||
#include "DEFINES.h" |
||||
#include "Crawler.h" |
||||
#include "MonsterStrategyHelpers.h" |
||||
|
||||
INCLUDE_BULLET_LIST |
||||
INCLUDE_game |
||||
|
||||
void Monster::STRATEGY::RUN_AWAY(Monster&m,float fElapsedTime,int strategyNumber){ |
||||
m.targetAcquireTimer=std::max(0.f,m.targetAcquireTimer-fElapsedTime); |
||||
m.attackCooldownTimer=std::max(0.f,m.attackCooldownTimer-fElapsedTime); |
||||
geom2d::line line(m.pos,game->GetPlayer()->GetPos()); |
||||
if(m.targetAcquireTimer==0&&m.queueShotTimer==0){ |
||||
m.targetAcquireTimer=1; |
||||
if(line.length()<24.f*ConfigInt("Range")/100.f){ |
||||
m.target=line.upoint(-1.2); |
||||
if(m.canMove){ |
||||
m.SetState(State::MOVE_AWAY); |
||||
} else { |
||||
m.SetState(State::NORMAL); |
||||
} |
||||
} else |
||||
if(line.length()>24.f*ConfigInt("CloseInRange")/100.0f){ |
||||
m.target=line.upoint(1.2); |
||||
m.SetState(State::MOVE_TOWARDS); |
||||
} else { |
||||
m.SetState(State::NORMAL); |
||||
} |
||||
} |
||||
m.canMove=true; |
||||
geom2d::line moveTowardsLine=geom2d::line(m.pos,m.target); |
||||
bool pathfindingDecision=false; |
||||
switch(m.state){ |
||||
case State::MOVE_TOWARDS:{ |
||||
if(moveTowardsLine.length()>1){ |
||||
vf2d newPos=m.pos+moveTowardsLine.vector().norm()*100*fElapsedTime*m.GetMoveSpdMult(); |
||||
bool movedX=m.SetX(newPos.x); |
||||
bool movedY=m.SetY(newPos.y); |
||||
pathfindingDecision=movedX|movedY; |
||||
m.canMove=movedX&&movedY; |
||||
} |
||||
if(!pathfindingDecision){ |
||||
m.StartPathfinding(2.5); |
||||
}else |
||||
if(line.length()<=24.f*ConfigInt("CloseInRange")/100.0f){ |
||||
m.SetState(State::NORMAL); |
||||
} |
||||
if(moveTowardsLine.vector().x>0){ |
||||
m.facingDirection=RIGHT; |
||||
} else { |
||||
m.facingDirection=LEFT; |
||||
} |
||||
m.PerformJumpAnimation(); |
||||
}break; |
||||
case State::MOVE_AWAY:{ |
||||
if(moveTowardsLine.length()>1){ |
||||
vf2d newPos=m.pos+moveTowardsLine.vector().norm()*100*fElapsedTime*m.GetMoveSpdMult(); |
||||
bool movedX=m.SetX(newPos.x); |
||||
bool movedY=m.SetY(newPos.y); |
||||
pathfindingDecision=movedX|movedY; |
||||
m.canMove=movedX&&movedY; |
||||
} |
||||
if(!pathfindingDecision){ |
||||
m.StartPathfinding(2.5); |
||||
}else |
||||
if(line.length()>=24.f*ConfigInt("Range")/100.f){ |
||||
m.SetState(State::NORMAL); |
||||
} |
||||
if(moveTowardsLine.vector().x>0){ |
||||
m.facingDirection=RIGHT; |
||||
} else { |
||||
m.facingDirection=LEFT; |
||||
} |
||||
m.PerformJumpAnimation(); |
||||
}break; |
||||
case State::PATH_AROUND:{ |
||||
m.PathAroundBehavior(fElapsedTime); |
||||
}break; |
||||
} |
||||
} |
Loading…
Reference in new issue