diff --git a/Crawler/Monster.cpp b/Crawler/Monster.cpp index f0924400..297c82cf 100644 --- a/Crawler/Monster.cpp +++ b/Crawler/Monster.cpp @@ -3,8 +3,8 @@ extern std::mapANIMATION_DATA; MonsterData::MonsterData(){} -MonsterData::MonsterData(int hp,int atk,float moveSpd,float size,MonsterStrategy strategy): - hp(hp),atk(atk),moveSpd(moveSpd),size(size),strategy(strategy){ +MonsterData::MonsterData(int hp,int atk,std::vectoranimations,float moveSpd,float size,MonsterStrategy strategy): + hp(hp),atk(atk),moveSpd(moveSpd),size(size),strategy(strategy),animations(animations){ } int MonsterData::GetHealth(){ return hp; @@ -25,6 +25,14 @@ MonsterStrategy MonsterData::GetAIStrategy(){ Monster::Monster(){} Monster::Monster(vf2d pos,MonsterData data): pos(pos),hp(data.GetHealth()),maxhp(data.GetHealth()),atk(data.GetAttack()),moveSpd(data.GetMoveSpdMult()),size(data.GetSizeMult()),strategy(data.GetAIStrategy()){ + bool firstAnimation=true; + for(AnimationState&anim:data.GetAnimations()){ + animation.AddState(anim,ANIMATION_DATA[anim]); + if(firstAnimation){ + animation.ChangeState(internal_animState,anim); + firstAnimation=false; + } + } } vf2d&Monster::GetPos(){ return pos; @@ -40,4 +48,35 @@ float Monster::GetMoveSpdMult(){ } float Monster::GetSizeMult(){ return size; +} +void Monster::UpdateAnimation(AnimationState state){ + animation.ChangeState(internal_animState,state); +} +void Monster::Update(float fElapsedTime){ + switch(strategy){ + RUN_TOWARDS:{ + + }break; + SHOOT_AFAR:{ + + }break; + } + animation.UpdateState(internal_animState,fElapsedTime); +} + +MonsterSpawner::MonsterSpawner(){} +MonsterSpawner::MonsterSpawner(vf2d pos,int range,std::vector>monsters): + pos(pos),range(range),monsters(monsters){ +} +bool MonsterSpawner::SpawnTriggered(){ + return triggered; +} +int MonsterSpawner::GetRange(){ + return range; +} +vf2d MonsterSpawner::GetPos(){ + return pos; +} +void MonsterSpawner::SetTriggered(bool trigger){ + triggered=trigger; } \ No newline at end of file diff --git a/Crawler/Monster.h b/Crawler/Monster.h index 624ae8d9..9ba1163b 100644 --- a/Crawler/Monster.h +++ b/Crawler/Monster.h @@ -13,16 +13,20 @@ struct MonsterData{ int atk; float moveSpd;//1.0=100% float size; + std::vector animations; MonsterStrategy strategy; - Animate2D::Animationanimation; public: MonsterData(); - MonsterData(int hp,int atk,float moveSpd=1.0f,float size=1.0f,MonsterStrategy strategy=RUN_TOWARDS); + //When specifying animations, the first one will become the default animation. + MonsterData(int hp,int atk,std::vectoranimations,float moveSpd=1.0f,float size=1.0f,MonsterStrategy strategy=RUN_TOWARDS); int GetHealth(); int GetAttack(); float GetMoveSpdMult(); float GetSizeMult(); MonsterStrategy GetAIStrategy(); + std::vectorGetAnimations(){ + return animations; + } }; enum MonsterName{ @@ -40,6 +44,8 @@ struct Monster{ float moveSpd; float size; MonsterStrategy strategy; + Animate2D::Animationanimation; + Animate2D::AnimationState internal_animState; public: Monster(); Monster(vf2d pos,MonsterData data); @@ -48,10 +54,21 @@ struct Monster{ int GetAttack(); float GetMoveSpdMult(); float GetSizeMult(); + void UpdateAnimation(AnimationState state); + void Update(float fElapsedTime); }; struct MonsterSpawner{ + private: vf2d pos; int range; std::vector>monsters; + bool triggered; + public: + MonsterSpawner(); + MonsterSpawner(vf2d pos,int range,std::vector>monsters); + bool SpawnTriggered(); + int GetRange(); + vf2d GetPos(); + void SetTriggered(bool trigger); }; \ No newline at end of file diff --git a/Crawler/MonsterData.cpp b/Crawler/MonsterData.cpp index b5e2d3d3..eb17c77b 100644 --- a/Crawler/MonsterData.cpp +++ b/Crawler/MonsterData.cpp @@ -1,10 +1,10 @@ #include "olcPixelGameEngine.h" #include "Monster.h" - +#include "Animation.h" std::mapMONSTER_DATA={ - {SLIME_GREEN,MonsterData(10,5,1.1f,0.8f,MonsterStrategy::RUN_TOWARDS)}, - {SLIME_BLUE,MonsterData(30,10,0.8f,1.0f,MonsterStrategy::SHOOT_AFAR)}, - {SLIME_RED,MonsterData(25,10,0.95f,1.2f,MonsterStrategy::RUN_TOWARDS)}, + {SLIME_GREEN,MonsterData(10,5,{{AnimationState::GREEN_SLIME_IDLE,AnimationState::GREEN_SLIME_JUMP,AnimationState::GREEN_SLIME_ROLL,AnimationState::GREEN_SLIME_DIE,AnimationState::GREEN_SLIME_SPIT}},1.1f,0.8f,MonsterStrategy::RUN_TOWARDS)}, + {SLIME_BLUE,MonsterData(30,10,{{AnimationState::BLUE_SLIME_IDLE,AnimationState::BLUE_SLIME_JUMP,AnimationState::BLUE_SLIME_ROLL,AnimationState::BLUE_SLIME_DIE,AnimationState::BLUE_SLIME_SPIT}},0.8f,1.0f,MonsterStrategy::SHOOT_AFAR)}, + {SLIME_RED,MonsterData(25,10,{{AnimationState::RED_SLIME_IDLE,AnimationState::RED_SLIME_JUMP,AnimationState::RED_SLIME_ROLL,AnimationState::RED_SLIME_DIE,AnimationState::RED_SLIME_SPIT}},0.95f,1.2f,MonsterStrategy::RUN_TOWARDS)}, //{SLIME_YELLOW,{}}, }; \ No newline at end of file diff --git a/Crawler/main.cpp b/Crawler/main.cpp index 076aabc3..eb8fe2fe 100644 --- a/Crawler/main.cpp +++ b/Crawler/main.cpp @@ -20,7 +20,6 @@ struct Player{ float moveSpd=1.0f; float size=1.0f; float attack_range=1.5f; - AnimationState animState=AnimationState::IDLE_S; Animate2D::Animationanimation; Animate2D::AnimationState internal_animState; Key lastReleasedMovementKey; @@ -95,6 +94,8 @@ class Crawler : public olc::PixelGameEngine TileTransformedView view; Player player=Player{{}}; Renderable GFX_Pl_Sheet,GFX_Slime_Sheet; + std::vectorspawners; + std::vectormonsters; public: Crawler() @@ -132,7 +133,7 @@ public: player.SetPos({4*24,4*24}); player.UpdateAnimation(AnimationState::IDLE_S); - std::cout<