diff --git a/Crawler/Ability.h b/Crawler/Ability.h index 2b5606c4..ab36841a 100644 --- a/Crawler/Ability.h +++ b/Crawler/Ability.h @@ -19,7 +19,7 @@ struct Ability{ int manaCost=0; Pixel barColor1,barColor2; PrecastData precastInfo; - std::functionaction=[&](){return false;}; + std::functionaction=[&](vf2d){return false;}; Ability(); Ability(std::string name,float cooldownTime,int manaCost,Pixel barColor1=VERY_DARK_RED,Pixel barColor2=DARK_RED,PrecastData precastInfo={}); }; \ No newline at end of file diff --git a/Crawler/Crawler.cpp b/Crawler/Crawler.cpp index 885cf087..8dd18b74 100644 --- a/Crawler/Crawler.cpp +++ b/Crawler/Crawler.cpp @@ -568,7 +568,7 @@ void Crawler::RenderWorld(float fElapsedTime){ } if(player->GetState()==State::PREP_CAST){ float precastSize=GetPlayer()->castPrepAbility->precastInfo.size; - view.DrawDecal(GetWorldMousePos()-vf2d{precastSize/6,precastSize/6},GFX_Circle.Decal(),{precastSize/3,precastSize/3},{255,0,0,192}); + view.DrawDecal(GetWorldMousePos()-vf2d{precastSize/4.5f,precastSize/4.5f},GFX_Circle.Decal(),{precastSize/3,precastSize/3},{255,0,0,192}); } #pragma region Foreground Rendering for(TileGroup&group:foregroundTileGroups){ diff --git a/Crawler/Player.cpp b/Crawler/Player.cpp index c74b268a..0b330f41 100644 --- a/Crawler/Player.cpp +++ b/Crawler/Player.cpp @@ -166,7 +166,7 @@ void Player::Update(float fElapsedTime){ if(castInfo.castTimer>0){ castInfo.castTimer-=fElapsedTime; if(castInfo.castTimer<=0){ - if(castPrepAbility->action()){ + if(castPrepAbility->action(castInfo.castPos)){ castPrepAbility->cooldown=castPrepAbility->COOLDOWN_TIME; mana-=castPrepAbility->manaCost; } @@ -307,7 +307,7 @@ void Player::Update(float fElapsedTime){ auto CheckAndPerformAbility=[&](Ability&ability,HWButton key){ if(ability.cooldown==0&&GetMana()>=ability.manaCost){ if(key.bPressed||key.bReleased&&&ability==castPrepAbility&&GetState()==State::PREP_CAST){ - if(AllowedToCast(ability)&&ability.action()){ + if(AllowedToCast(ability)&&ability.action({})){ ability.cooldown=ability.COOLDOWN_TIME; mana-=ability.manaCost; }else @@ -495,7 +495,7 @@ std::vectorPlayer::GetBuffs(BuffType buff){ } void Player::CastSpell(Ability&ability){ - castInfo={ability.name,ability.precastInfo.castTime,ability.precastInfo.castTime}; + castInfo={ability.name,ability.precastInfo.castTime,ability.precastInfo.castTime,game->GetWorldMousePos()}; SetState(State::CASTING); } diff --git a/Crawler/Player.h b/Crawler/Player.h index 2425631b..19982d52 100644 --- a/Crawler/Player.h +++ b/Crawler/Player.h @@ -13,6 +13,7 @@ struct CastInfo{ std::string name; float castTimer; float castTotalTime; + vf2d castPos; }; struct Player{ diff --git a/Crawler/Ranger.cpp b/Crawler/Ranger.cpp index cd532d89..11db4bb8 100644 --- a/Crawler/Ranger.cpp +++ b/Crawler/Ranger.cpp @@ -37,25 +37,25 @@ bool Ranger::AutoAttack(){ void Ranger::InitializeClassAbilities(){ #pragma region Ranger Right-click Ability (???) Ranger::rightClickAbility.action= - [&](){ + [&](vf2d pos={}){ return false; }; #pragma endregion #pragma region Ranger Ability 1 (???) Ranger::ability1.action= - [&](){ + [&](vf2d pos={}){ return false; }; #pragma endregion #pragma region Ranger Ability 2 (???) Ranger::ability2.action= - [&](){ + [&](vf2d pos={}){ return false; }; #pragma endregion #pragma region Ranger Ability 3 (???) Ranger::ability3.action= - [&](){ + [&](vf2d pos={}){ return false; }; #pragma endregion diff --git a/Crawler/Thief.cpp b/Crawler/Thief.cpp index bfc25cbe..f84439c0 100644 --- a/Crawler/Thief.cpp +++ b/Crawler/Thief.cpp @@ -37,25 +37,25 @@ bool Thief::AutoAttack(){ void Thief::InitializeClassAbilities(){ #pragma region Thief Right-click Ability (???) Thief::rightClickAbility.action= - [&](){ + [&](vf2d pos={}){ return false; }; #pragma endregion #pragma region Thief Ability 1 (???) Thief::ability1.action= - [&](){ + [&](vf2d pos={}){ return false; }; #pragma endregion #pragma region Thief Ability 2 (???) Thief::ability2.action= - [&](){ + [&](vf2d pos={}){ return false; }; #pragma endregion #pragma region Thief Ability 3 (???) Thief::ability3.action= - [&](){ + [&](vf2d pos={}){ return false; }; #pragma endregion diff --git a/Crawler/Trapper.cpp b/Crawler/Trapper.cpp index ce7100ac..6d15206e 100644 --- a/Crawler/Trapper.cpp +++ b/Crawler/Trapper.cpp @@ -37,25 +37,25 @@ bool Trapper::AutoAttack(){ void Trapper::InitializeClassAbilities(){ #pragma region Trapper Right-click Ability (???) Trapper::rightClickAbility.action= - [&](){ + [&](vf2d pos={}){ return false; }; #pragma endregion #pragma region Trapper Ability 1 (???) Trapper::ability1.action= - [&](){ + [&](vf2d pos={}){ return false; }; #pragma endregion #pragma region Trapper Ability 2 (???) Trapper::ability2.action= - [&](){ + [&](vf2d pos={}){ return false; }; #pragma endregion #pragma region Trapper Ability 3 (???) Trapper::ability3.action= - [&](){ + [&](vf2d pos={}){ return false; }; #pragma endregion diff --git a/Crawler/Warrior.cpp b/Crawler/Warrior.cpp index 57a814ea..5058f43c 100644 --- a/Crawler/Warrior.cpp +++ b/Crawler/Warrior.cpp @@ -70,7 +70,7 @@ bool Warrior::AutoAttack(){ void Warrior::InitializeClassAbilities(){ #pragma region Warrior Right-click Ability (Block) Warrior::rightClickAbility.action= - [&](){ + [&](vf2d pos={}){ if(GetState()==State::NORMAL){ rightClickAbility.cooldown=rightClickAbility.COOLDOWN_TIME; SetState(State::BLOCK); @@ -82,7 +82,7 @@ void Warrior::InitializeClassAbilities(){ #pragma endregion #pragma region Warrior Ability 1 (Battlecry) Warrior::ability1.action= - [&](){ + [&](vf2d pos={}){ game->AddEffect(std::make_unique(GetPos(),0.1,AnimationState::BATTLECRY_EFFECT,upperLevel,1,0.3)); AddBuff(BuffType::ATTACK_UP,10,0.1); AddBuff(BuffType::DAMAGE_REDUCTION,10,0.1); @@ -96,7 +96,7 @@ void Warrior::InitializeClassAbilities(){ #pragma endregion #pragma region Warrior Ability 2 (Ground Slam) Warrior::ability2.action= - [&](){ + [&](vf2d pos={}){ Spin(GROUND_SLAM_SPIN_TIME,14*PI); iframe_time=GROUND_SLAM_SPIN_TIME+0.1; return true; @@ -104,7 +104,7 @@ void Warrior::InitializeClassAbilities(){ #pragma endregion #pragma region Warrior Ability 3 (Sonic Slash) Warrior::ability3.action= - [&](){ + [&](vf2d pos={}){ SetState(State::SWING_SONIC_SWORD); AddBuff(BuffType::SLOWDOWN,0.5,1); vf2d bulletVel={}; diff --git a/Crawler/Witch.cpp b/Crawler/Witch.cpp index 5b4668a2..0f5d9e20 100644 --- a/Crawler/Witch.cpp +++ b/Crawler/Witch.cpp @@ -37,25 +37,25 @@ bool Witch::AutoAttack(){ void Witch::InitializeClassAbilities(){ #pragma region Witch Right-click Ability (???) Witch::rightClickAbility.action= - [&](){ + [&](vf2d pos={}){ return false; }; #pragma endregion #pragma region Witch Ability 1 (???) Witch::ability1.action= - [&](){ + [&](vf2d pos={}){ return false; }; #pragma endregion #pragma region Witch Ability 2 (???) Witch::ability2.action= - [&](){ + [&](vf2d pos={}){ return false; }; #pragma endregion #pragma region Witch Ability 3 (???) Witch::ability3.action= - [&](){ + [&](vf2d pos={}){ return false; }; #pragma endregion diff --git a/Crawler/Wizard.cpp b/Crawler/Wizard.cpp index fb78a9b2..19cb133f 100644 --- a/Crawler/Wizard.cpp +++ b/Crawler/Wizard.cpp @@ -75,7 +75,7 @@ bool Wizard::AutoAttack(){ void Wizard::InitializeClassAbilities(){ #pragma region Wizard Right-click Ability (Teleport) Wizard::rightClickAbility.action= - [&](){ + [&](vf2d pos={}){ float pointMouseDirection=atan2(game->GetWorldMousePos().y-GetPos().y,game->GetWorldMousePos().x-GetPos().x); vf2d pointTowardsMouse={cos(pointMouseDirection),sin(pointMouseDirection)}; float dist=std::clamp(geom2d::line{GetPos(),game->GetWorldMousePos()}.length(),0.f,6.5f*24); @@ -103,7 +103,7 @@ void Wizard::InitializeClassAbilities(){ #pragma endregion #pragma region Wizard Ability 1 (Fire Bolt) Wizard::ability1.action= - [&](){ + [&](vf2d pos={}){ float angleToCursor=atan2(game->GetWorldMousePos().y-GetPos().y,game->GetWorldMousePos().x-GetPos().x); BULLET_LIST.push_back(std::make_unique(FireBolt(GetPos(),{cos(angleToCursor)*275,sin(angleToCursor)*275},12,GetAttack(),upperLevel,true,{240,120,60}))); return true; @@ -111,7 +111,7 @@ void Wizard::InitializeClassAbilities(){ #pragma endregion #pragma region Wizard Ability 2 (Lightning Bolt) Wizard::ability2.action= - [&](){ + [&](vf2d pos={}){ float angleToCursor=atan2(game->GetWorldMousePos().y-GetPos().y,game->GetWorldMousePos().x-GetPos().x); BULLET_LIST.push_back(std::make_unique(LightningBolt(GetPos(),{cos(angleToCursor)*230,sin(angleToCursor)*230},12,GetAttack()*4,upperLevel,true,WHITE))); return true; @@ -119,9 +119,9 @@ void Wizard::InitializeClassAbilities(){ #pragma endregion #pragma region Wizard Ability 3 (Meteor) Wizard::ability3.action= - [&](){ + [&](vf2d pos={}){ CastSpell(Wizard::ability3); - game->AddEffect(std::make_unique(GetPos(),3,AnimationState::METEOR,OnUpperLevel(),vf2d{1,1},2)); + game->AddEffect(std::make_unique(pos,3,AnimationState::METEOR,OnUpperLevel(),vf2d{1,1},2)); return true; }; #pragma endregion