#include "Monster.h" #include "DEFINES.h" #include "Crawler.h" #include "MonsterStrategyHelpers.h" INCLUDE_game INCLUDE_MONSTER_DATA void Monster::STRATEGY::RUN_TOWARDS(Monster&m,float fElapsedTime,int strategyNumber){ m.targetAcquireTimer=std::max(0.f,m.targetAcquireTimer-fElapsedTime); if(m.targetAcquireTimer==0){ m.targetAcquireTimer=ConfigFloat("WaitTime"); auto desiredTargetLine = geom2d::line(m.pos,game->GetPlayer()->GetPos()); if(desiredTargetLine.length()>=ConfigInt("MaxDistance")/100.f*24){ //Trim to max distance desired. m.target=desiredTargetLine.rpoint(ConfigInt("MaxDistance")/100.f*24); } else { m.target=desiredTargetLine.upoint(1.2); } m.SetState(MOVE_TOWARDS); m.hasHitPlayer=false; } switch(m.state){ case MOVE_TOWARDS:{ if(geom2d::line(m.pos,m.target).length()>100*fElapsedTime*m.GetMoveSpdMult()){ vf2d newPos=m.pos+geom2d::line(m.pos,m.target).vector().norm()*100*fElapsedTime*m.GetMoveSpdMult(); if(!m.SetX(newPos.x)||!m.SetY(newPos.y)){ m.StartPathfinding(4); } m.PerformJumpAnimation(); } else { m.SetState(NORMAL);//Revert state once we've finished moving towards target. m.UpdateAnimation(MONSTER_DATA[m.id].GetIdleAnimation()); } }break; case PATH_AROUND:{ m.PathAroundBehavior(fElapsedTime); }break; default:{ } } }