Merge conflict

pull/28/head
sigonasr2 2 years ago
commit 745a85aa55
  1. 5
      Crawler/Crawler.h
  2. 6
      Crawler/Player.cpp
  3. 4
      Crawler/Player.h
  4. 44
      Crawler/Ranger.cpp
  5. 1
      Crawler/State.h
  6. 0
      Crawler/loc.sh

@ -52,13 +52,12 @@ private:
void InitializeClassAbilities(); void InitializeClassAbilities();
public: public:
Crawler(); Crawler();
bool OnUserCreate() override;
bool OnUserUpdate(float fElapsedTime) override;
public: public:
geom2d::rect<int>NO_COLLISION={}; geom2d::rect<int>NO_COLLISION={};
vi2d WORLD_SIZE={120,8}; vi2d WORLD_SIZE={120,8};
TileTransformedView view; TileTransformedView view;
bool OnUserCreate() override;
bool OnUserUpdate(float fElapsedTime) override;
void InitializeLevel(std::string mapFile,MapName map); void InitializeLevel(std::string mapFile,MapName map);
void LoadLevel(MapName map); void LoadLevel(MapName map);
void HandleUserInput(float fElapsedTime); void HandleUserInput(float fElapsedTime);

@ -319,7 +319,7 @@ void Player::Update(float fElapsedTime){
} }
auto AllowedToCast=[&](Ability&ability){return !ability.precastInfo.precastTargetingRequired;}; auto AllowedToCast=[&](Ability&ability){return !ability.precastInfo.precastTargetingRequired&&GetState()!=State::ANIMATION_LOCK;};
//If pressed is set to false, uses held instead. //If pressed is set to false, uses held instead.
auto CheckAndPerformAbility=[&](Ability&ability,HWButton key){ auto CheckAndPerformAbility=[&](Ability&ability,HWButton key){
if(ability.name!="???"){ if(ability.name!="???"){
@ -439,7 +439,7 @@ vf2d Player::GetVelocity(){
} }
bool Player::CanMove(){ bool Player::CanMove(){
return state!=State::CASTING; return state!=State::CASTING&&state!=State::ANIMATION_LOCK;
} }
bool Player::HasIframes(){ bool Player::HasIframes(){
@ -581,6 +581,7 @@ void Player::SetVelocity(vf2d vel){
} }
void Player::SetAnimationBasedOnTargetingDirection(float targetDirection){ void Player::SetAnimationBasedOnTargetingDirection(float targetDirection){
if(GetClass()==Class::RANGER){
if(targetDirection<=PI/4&&targetDirection>-PI/4){ if(targetDirection<=PI/4&&targetDirection>-PI/4){
UpdateAnimation(AnimationState::RANGER_SHOOT_E); UpdateAnimation(AnimationState::RANGER_SHOOT_E);
} else } else
@ -593,4 +594,5 @@ void Player::SetAnimationBasedOnTargetingDirection(float targetDirection){
if(targetDirection>=-3*PI/4&&targetDirection<-PI/4){ if(targetDirection>=-3*PI/4&&targetDirection<-PI/4){
UpdateAnimation(AnimationState::RANGER_SHOOT_N); UpdateAnimation(AnimationState::RANGER_SHOOT_N);
} }
}
} }

@ -89,6 +89,10 @@ protected:
float ghostRemoveTimer=0; float ghostRemoveTimer=0;
float retreatTimer=0; float retreatTimer=0;
std::vector<vf2d>ghostPositions; std::vector<vf2d>ghostPositions;
float rapidFireTimer=0;
int remainingRapidFireShots=0;
const float RAPID_FIRE_SHOOT_DELAY=0.1;
const int RAPID_FIRE_SHOOT_AMOUNT=4;
public: public:
Player(); Player();
//So this is rather fascinating and only exists because we have the ability to change classes which means we need to initialize a class //So this is rather fascinating and only exists because we have the ability to change classes which means we need to initialize a class

@ -29,7 +29,38 @@ AnimationState Ranger::walk_w=RANGER_WALK_W;
SETUP_CLASS(Ranger) SETUP_CLASS(Ranger)
void Ranger::OnUpdate(float fElapsedTime){ 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(){ 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))); 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); SetState(State::SHOOT_ARROW);
SetAnimationBasedOnTargetingDirection(angleToCursor); SetAnimationBasedOnTargetingDirection(angleToCursor);
return false; return true;
} }
void Ranger::InitializeClassAbilities(){ void Ranger::InitializeClassAbilities(){
#pragma region Ranger Right-click Ability (???) #pragma region Ranger Right-click Ability (Retreat)
Ranger::rightClickAbility.action= Ranger::rightClickAbility.action=
[](Player*p,vf2d pos={}){ [](Player*p,vf2d pos={}){
geom2d::line mouseDir{game->GetWorldMousePos(),p->GetPos()}; geom2d::line mouseDir{game->GetWorldMousePos(),p->GetPos()};
@ -61,10 +92,13 @@ void Ranger::InitializeClassAbilities(){
return true; return true;
}; };
#pragma endregion #pragma endregion
#pragma region Ranger Ability 1 (???) #pragma region Ranger Ability 1 (Rapid Fire)
Ranger::ability1.action= Ranger::ability1.action=
[](Player*p,vf2d pos={}){ [](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 endregion
#pragma region Ranger Ability 2 (???) #pragma region Ranger Ability 2 (???)

@ -14,4 +14,5 @@ enum State{
PREP_CAST, PREP_CAST,
SHOOT_ARROW, SHOOT_ARROW,
RETREAT, RETREAT,
ANIMATION_LOCK,
}; };
Loading…
Cancel
Save