From 045441b595d4e6b99ccaaaae7ca7f72479ae2af2 Mon Sep 17 00:00:00 2001 From: sigonasr2 Date: Tue, 25 Jul 2023 18:37:12 -0500 Subject: [PATCH] Add in Charged Shot ability and allow precasting without the targeting indicator. --- Crawler/Ability.cpp | 2 ++ Crawler/Ability.h | 2 ++ Crawler/Animation.cpp | 2 ++ Crawler/Animation.h | 1 + Crawler/BulletTypes.h | 8 +++++++ Crawler/ChargedArrow.cpp | 33 ++++++++++++++++++++++++++ Crawler/Crawler.cpp | 2 ++ Crawler/Crawler.h | 3 ++- Crawler/Crawler.vcxproj | 1 + Crawler/Crawler.vcxproj.filters | 3 +++ Crawler/Player.cpp | 6 ++++- Crawler/Ranger.cpp | 7 ++++-- Crawler/Version.h | 2 +- Crawler/assets/charged_shot_arrow.png | Bin 0 -> 8199 bytes Crawler/assets/laser.png | Bin 0 -> 582 bytes Crawler/utils.cpp | 4 ++++ Crawler/utils.h | 3 +++ 17 files changed, 74 insertions(+), 5 deletions(-) create mode 100644 Crawler/ChargedArrow.cpp create mode 100644 Crawler/assets/charged_shot_arrow.png create mode 100644 Crawler/assets/laser.png diff --git a/Crawler/Ability.cpp b/Crawler/Ability.cpp index a316c922..aa21e5a0 100644 --- a/Crawler/Ability.cpp +++ b/Crawler/Ability.cpp @@ -1,6 +1,8 @@ #include "Ability.h" PrecastData::PrecastData(){}; +PrecastData::PrecastData(float castTime) + :castTime(castTime),range(0),size(0){precastTargetingRequired=true;}; PrecastData::PrecastData(float castTime,float range,float size) :castTime(castTime),range(range),size(size){precastTargetingRequired=true;}; diff --git a/Crawler/Ability.h b/Crawler/Ability.h index 9c12c35d..171edc1d 100644 --- a/Crawler/Ability.h +++ b/Crawler/Ability.h @@ -10,6 +10,8 @@ struct PrecastData{ //Whether or not this ability requires precasting (automatically set to true when precast time is greater than zero) bool precastTargetingRequired=false; PrecastData(); + //Cast an ability without a targeting indicator, just starts the cast. + PrecastData(float castTime); PrecastData(float castTime,float range,float size); }; diff --git a/Crawler/Animation.cpp b/Crawler/Animation.cpp index 97ad6b15..110d8ecd 100644 --- a/Crawler/Animation.cpp +++ b/Crawler/Animation.cpp @@ -218,6 +218,8 @@ void sig::Animation::InitializeAnimations(){ ANIMATION_DATA[AnimationState(AnimationState::FIRE_RING1+i)]=firering; } CreateStillAnimation(game->GFX_Arrow,{24,24},AnimationState::ARROW); + CreateStillAnimation(game->GFX_ChargedArrow,{48,48},AnimationState::CHARGED_ARROW); + CreateStillAnimation(game->GFX_Laser,{5,1},AnimationState::LASER); } void sig::Animation::SetupPlayerAnimations(){ diff --git a/Crawler/Animation.h b/Crawler/Animation.h index 29895d95..a5d2643d 100644 --- a/Crawler/Animation.h +++ b/Crawler/Animation.h @@ -24,6 +24,7 @@ enum AnimationState{ WIZARD_CAST_S,WIZARD_CAST_N,WIZARD_CAST_E,WIZARD_CAST_W,METEOR, FIRE_RING1,FIRE_RING2,FIRE_RING3,FIRE_RING4,FIRE_RING5,ARROW, RANGER_SHOOT_S,RANGER_SHOOT_N,RANGER_SHOOT_E,RANGER_SHOOT_W, + LASER,CHARGED_ARROW }; namespace sig{ diff --git a/Crawler/BulletTypes.h b/Crawler/BulletTypes.h index f8443c46..2180f07d 100644 --- a/Crawler/BulletTypes.h +++ b/Crawler/BulletTypes.h @@ -34,4 +34,12 @@ struct Arrow:public Bullet{ void Update(float fElapsedTime)override; bool PlayerHit(Player*player)override; bool MonsterHit(Monster&monster)override; +}; + +struct ChargedArrow:public Bullet{ + vf2d lastLaserPos; + ChargedArrow(vf2d pos,vf2d vel,float radius,int damage,bool upperLevel,bool friendly=false,Pixel col=WHITE); + void Update(float fElapsedTime)override; + bool PlayerHit(Player*player)override; + bool MonsterHit(Monster&monster)override; }; \ No newline at end of file diff --git a/Crawler/ChargedArrow.cpp b/Crawler/ChargedArrow.cpp new file mode 100644 index 00000000..1510fc69 --- /dev/null +++ b/Crawler/ChargedArrow.cpp @@ -0,0 +1,33 @@ +#include "BulletTypes.h" +#include "Effect.h" +#include "Crawler.h" +#include "DEFINES.h" +#include "utils.h" +#include "olcUTIL_Geometry2D.h" + +INCLUDE_game + +ChargedArrow::ChargedArrow(vf2d pos,vf2d vel,float radius,int damage,bool upperLevel,bool friendly,Pixel col) + :lastLaserPos(pos), + Bullet(pos,vel,radius,damage, + AnimationState::CHARGED_ARROW,upperLevel,true,INFINITE,true,friendly,col){} + +void ChargedArrow::Update(float fElapsedTime){ + geom2d::line lineToCurrentPos(geom2d::line(lastLaserPos,pos)); + float dist=lineToCurrentPos.length(); + if(dist>=1){ + vf2d midpoint(lineToCurrentPos.rpoint(0.5)); + game->AddEffect(std::make_unique(midpoint,0.1,AnimationState::LASER,upperLevel,vf2d{1,dist},0.3,vf2d{},Pixel{192,128,238},atan2(pos.y-lastLaserPos.y,pos.x-lastLaserPos.x)+PI/2,0,true)); + lastLaserPos=pos; + } +} + +bool ChargedArrow::PlayerHit(Player*player) +{ + return false; +} + +bool ChargedArrow::MonsterHit(Monster& monster) +{ + return false; +} \ No newline at end of file diff --git a/Crawler/Crawler.cpp b/Crawler/Crawler.cpp index 9b12905d..87f3eaa4 100644 --- a/Crawler/Crawler.cpp +++ b/Crawler/Crawler.cpp @@ -80,6 +80,8 @@ bool Crawler::OnUserCreate(){ GFX_LightningSplash.Load("assets/lightning_splash_effect.png"); GFX_Meteor.Load("assets/meteor.png"); GFX_Arrow.Load("assets/arrow.png"); + GFX_Laser.Load("assets/laser.png"); + GFX_ChargedArrow.Load("assets/charged_shot_arrow.png"); //Animations sig::Animation::InitializeAnimations(); diff --git a/Crawler/Crawler.h b/Crawler/Crawler.h index 45397d91..cb1bdd10 100644 --- a/Crawler/Crawler.h +++ b/Crawler/Crawler.h @@ -27,7 +27,8 @@ class Crawler : public olc::PixelGameEngine GFX_Battlecry_Effect,GFX_Mana,GFX_SonicSlash,GFX_EnergyParticle, GFX_Splash_Effect,GFX_LightningBolt,GFX_LightningBoltParticle1, GFX_LightningBoltParticle2,GFX_LightningBoltParticle3,GFX_LightningBoltParticle4, - GFX_ChainLightning,GFX_LightningSplash,GFX_Meteor,GFX_Arrow; + GFX_ChainLightning,GFX_LightningSplash,GFX_Meteor,GFX_Arrow, + GFX_Laser,GFX_ChargedArrow; public: Renderable GFX_BulletCircle,GFX_BulletCircleOutline,GFX_EnergyBolt,GFX_Circle; Pathfinding pathfinder; diff --git a/Crawler/Crawler.vcxproj b/Crawler/Crawler.vcxproj index 7352a8a7..e96b2f8e 100644 --- a/Crawler/Crawler.vcxproj +++ b/Crawler/Crawler.vcxproj @@ -205,6 +205,7 @@ + diff --git a/Crawler/Crawler.vcxproj.filters b/Crawler/Crawler.vcxproj.filters index 0d282523..460f1d66 100644 --- a/Crawler/Crawler.vcxproj.filters +++ b/Crawler/Crawler.vcxproj.filters @@ -194,6 +194,9 @@ Source Files\Bullet Types + + Source Files\Bullet Types + diff --git a/Crawler/Player.cpp b/Crawler/Player.cpp index ee002877..c5831aa5 100644 --- a/Crawler/Player.cpp +++ b/Crawler/Player.cpp @@ -590,7 +590,11 @@ bool Player::CanPathfindTo(vf2d pos,vf2d targetPos,float range){ void Player::PrepareCast(Ability&ability){ castPrepAbility=&ability; - SetState(State::PREP_CAST); + if(ability.precastInfo.range>0){ + SetState(State::PREP_CAST); + }else{ + CastSpell(ability); + } } void Player::SetVelocity(vf2d vel){ diff --git a/Crawler/Ranger.cpp b/Crawler/Ranger.cpp index 964d8f6a..431bf9a3 100644 --- a/Crawler/Ranger.cpp +++ b/Crawler/Ranger.cpp @@ -5,6 +5,7 @@ #include "Effect.h" #include "Crawler.h" #include "BulletTypes.h" +#include "utils.h" INCLUDE_MONSTER_LIST INCLUDE_BULLET_LIST @@ -14,7 +15,7 @@ std::string Ranger::name="Ranger"; Class Ranger::cl=RANGER; Ability Ranger::rightClickAbility=Ability("Retreat",7,0,VERY_DARK_BLUE,DARK_BLUE); Ability Ranger::ability1=Ability("Rapid Fire",12,35); -Ability Ranger::ability2=Ability("Charged Shot",15,40); +Ability Ranger::ability2=Ability("Charged Shot",15,40,VERY_DARK_RED,DARK_RED,PrecastData(0.3)); Ability Ranger::ability3=Ability("Multishot",25,50); Ability Ranger::ability4=Ability("???",0,0); AnimationState Ranger::idle_n=RANGER_IDLE_N; @@ -72,7 +73,9 @@ void Ranger::InitializeClassAbilities(){ #pragma region Ranger Ability 2 (???) Ranger::ability2.action= [](Player*p,vf2d pos={}){ - return false; + vf2d arrowVelocity=util::pointTo(p->GetPos(),game->GetWorldMousePos()); + BULLET_LIST.push_back(std::make_unique(p->GetPos(),arrowVelocity*600,20,p->GetAttack()*2.5,p->OnUpperLevel(),true)); + return true; }; #pragma endregion #pragma region Ranger Ability 3 (???) diff --git a/Crawler/Version.h b/Crawler/Version.h index 943ace7d..4f806844 100644 --- a/Crawler/Version.h +++ b/Crawler/Version.h @@ -2,7 +2,7 @@ #define VERSION_MAJOR 0 #define VERSION_MINOR 2 #define VERSION_PATCH 0 -#define VERSION_BUILD 836 +#define VERSION_BUILD 846 #define stringify(a) stringify_(a) #define stringify_(a) #a diff --git a/Crawler/assets/charged_shot_arrow.png b/Crawler/assets/charged_shot_arrow.png new file mode 100644 index 0000000000000000000000000000000000000000..cca7f15f0d7a3f9d0e9f85e169dd0c6bc8578677 GIT binary patch literal 8199 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 literal 0 HcmV?d00001 diff --git a/Crawler/assets/laser.png b/Crawler/assets/laser.png new file mode 100644 index 0000000000000000000000000000000000000000..0f6f9c834dfae3eb8396b4accc779273b7091c2d GIT binary patch literal 582 zcmV-M0=fN(P)EX>4Tx04R}tkv&MmKpe$iQ>7vmhZa$B$WR@`f~bh2RIvyaN?V~-2a`)bgeDD1 zii@M*T5#}VvFhOBtgC~oAP9bdxVktgx=4xtOA0MwJUH&hyL*qjcYshYGu7-E2UN{6 zQt_CW&8>)mR|GJCK8zwHF;h>Z7c%f1U-$6w^)AY@ywCkPdX&7$0G~)a%XGscUMHU3 zv~yF6ykH@F@r8h{K$3L;xMsTY-72NS; zby?xO#aS&^S@WL!g~7bGoaQ>sA;htW1d+gyEO}w6K+y426VpI_Qx;~*aaFj+x|Yb?ZyeT(>lN54hX``k!>kkQ~WRQz#UG_cQvY91yw%x>w!an)^6?05a6o(hYEM z2#gddd(GqBUG2U7d#2gn53y!)z=U}kTmS$724YJ`L;y|zzW_Y{?U?-l000SaNLh0L z04^f{04^f|c%?sf00007bV*G`2j>SF7aKImPtQdF000?uMObu0Z*6U5Zgc=ca%Ew3 zWn>_CX>@2HM@dakSAh-}0000TNkl UUK{>5tN;K207*qoM6N<$f|^Y3lmGw# literal 0 HcmV?d00001 diff --git a/Crawler/utils.cpp b/Crawler/utils.cpp index a50d1179..f8a4bab6 100644 --- a/Crawler/utils.cpp +++ b/Crawler/utils.cpp @@ -2,4 +2,8 @@ float util::random(float range){ return float(rand())/RAND_MAX*range; +} + +vf2d util::pointTo(vf2d posFrom,vf2d posTo){ + return geom2d::line(posFrom,posTo).vector().norm(); } \ No newline at end of file diff --git a/Crawler/utils.h b/Crawler/utils.h index 72b68257..e694e790 100644 --- a/Crawler/utils.h +++ b/Crawler/utils.h @@ -1,6 +1,9 @@ #pragma once #include +#include "olcUTIL_Geometry2D.h" namespace util{ //Returns 0-range (as a float). float random(float range); + //Returns a normalized vector pointing from posFrom towards posTo. + vf2d pointTo(vf2d posFrom,vf2d posTo); } \ No newline at end of file