|
|
|
@ -29,7 +29,38 @@ AnimationState Ranger::walk_w=RANGER_WALK_W; |
|
|
|
|
SETUP_CLASS(Ranger) |
|
|
|
|
|
|
|
|
|
void Ranger::OnUpdate(float fElapsedTime){ |
|
|
|
|
|
|
|
|
|
if(GetState()==SHOOT_ARROW){ |
|
|
|
|
if(attack_cooldown_timer<=ARROW_ATTACK_COOLDOWN-0.3){ |
|
|
|
|
SetState(NORMAL); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
if(retreatTimer>0){ |
|
|
|
|
SetZ(6*sin(PI/RETREAT_TIME*retreatTimer)); |
|
|
|
|
retreatTimer-=fElapsedTime; |
|
|
|
|
if(retreatTimer<=0){ |
|
|
|
|
SetVelocity({}); |
|
|
|
|
SetZ(0); |
|
|
|
|
SetState(State::NORMAL); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
if(ghostRemoveTimer>0){ |
|
|
|
|
ghostRemoveTimer-=fElapsedTime; |
|
|
|
|
if(ghostRemoveTimer<=0){ |
|
|
|
|
if(ghostPositions.size()>0){ |
|
|
|
|
ghostPositions.erase(ghostPositions.begin()); |
|
|
|
|
if(ghostPositions.size()>0){ |
|
|
|
|
ghostRemoveTimer=RETREAT_GHOST_FRAME_DELAY; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
if(ghostFrameTimer>0){ |
|
|
|
|
ghostFrameTimer-=fElapsedTime; |
|
|
|
|
if(ghostFrameTimer<=0&&GetState()==State::RETREAT){ |
|
|
|
|
ghostPositions.push_back(GetPos()+vf2d{0,-GetZ()}); |
|
|
|
|
ghostFrameTimer=RETREAT_GHOST_FRAME_DELAY; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
bool Ranger::AutoAttack(){ |
|
|
|
@ -40,11 +71,11 @@ bool Ranger::AutoAttack(){ |
|
|
|
|
BULLET_LIST.push_back(std::make_unique<Arrow>(Arrow(GetPos(),extendedLine,vf2d{cos(angleToCursor)*250,float(sin(angleToCursor)*250-PI/8*250)}+movementVelocity,12,GetAttack(),OnUpperLevel(),true))); |
|
|
|
|
SetState(State::SHOOT_ARROW); |
|
|
|
|
SetAnimationBasedOnTargetingDirection(angleToCursor); |
|
|
|
|
return false; |
|
|
|
|
return true; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void Ranger::InitializeClassAbilities(){ |
|
|
|
|
#pragma region Ranger Right-click Ability (???) |
|
|
|
|
#pragma region Ranger Right-click Ability (Retreat) |
|
|
|
|
Ranger::rightClickAbility.action= |
|
|
|
|
[](Player*p,vf2d pos={}){ |
|
|
|
|
geom2d::line mouseDir{game->GetWorldMousePos(),p->GetPos()}; |
|
|
|
@ -61,10 +92,13 @@ void Ranger::InitializeClassAbilities(){ |
|
|
|
|
return true; |
|
|
|
|
}; |
|
|
|
|
#pragma endregion |
|
|
|
|
#pragma region Ranger Ability 1 (???) |
|
|
|
|
#pragma region Ranger Ability 1 (Rapid Fire) |
|
|
|
|
Ranger::ability1.action= |
|
|
|
|
[](Player*p,vf2d pos={}){ |
|
|
|
|
return false; |
|
|
|
|
p->remainingRapidFireShots=p->RAPID_FIRE_SHOOT_AMOUNT; |
|
|
|
|
p->rapidFireTimer=p->RAPID_FIRE_SHOOT_DELAY; |
|
|
|
|
p->SetState(State::ANIMATION_LOCK); |
|
|
|
|
return true; |
|
|
|
|
}; |
|
|
|
|
#pragma endregion |
|
|
|
|
#pragma region Ranger Ability 2 (???) |
|
|
|
|