Implemented monster update method and monster spawner methods.
This commit is contained in:
parent
776bf9165d
commit
0f449a902a
@ -3,8 +3,8 @@
|
|||||||
extern std::map<AnimationState,Animate2D::FrameSequence>ANIMATION_DATA;
|
extern std::map<AnimationState,Animate2D::FrameSequence>ANIMATION_DATA;
|
||||||
|
|
||||||
MonsterData::MonsterData(){}
|
MonsterData::MonsterData(){}
|
||||||
MonsterData::MonsterData(int hp,int atk,float moveSpd,float size,MonsterStrategy strategy):
|
MonsterData::MonsterData(int hp,int atk,std::vector<AnimationState>animations,float moveSpd,float size,MonsterStrategy strategy):
|
||||||
hp(hp),atk(atk),moveSpd(moveSpd),size(size),strategy(strategy){
|
hp(hp),atk(atk),moveSpd(moveSpd),size(size),strategy(strategy),animations(animations){
|
||||||
}
|
}
|
||||||
int MonsterData::GetHealth(){
|
int MonsterData::GetHealth(){
|
||||||
return hp;
|
return hp;
|
||||||
@ -25,6 +25,14 @@ MonsterStrategy MonsterData::GetAIStrategy(){
|
|||||||
Monster::Monster(){}
|
Monster::Monster(){}
|
||||||
Monster::Monster(vf2d pos,MonsterData data):
|
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()){
|
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(){
|
vf2d&Monster::GetPos(){
|
||||||
return pos;
|
return pos;
|
||||||
@ -41,3 +49,34 @@ float Monster::GetMoveSpdMult(){
|
|||||||
float Monster::GetSizeMult(){
|
float Monster::GetSizeMult(){
|
||||||
return size;
|
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<std::pair<MonsterData,vf2d>>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;
|
||||||
|
}
|
@ -13,16 +13,20 @@ struct MonsterData{
|
|||||||
int atk;
|
int atk;
|
||||||
float moveSpd;//1.0=100%
|
float moveSpd;//1.0=100%
|
||||||
float size;
|
float size;
|
||||||
|
std::vector<AnimationState> animations;
|
||||||
MonsterStrategy strategy;
|
MonsterStrategy strategy;
|
||||||
Animate2D::Animation<AnimationState>animation;
|
|
||||||
public:
|
public:
|
||||||
MonsterData();
|
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::vector<AnimationState>animations,float moveSpd=1.0f,float size=1.0f,MonsterStrategy strategy=RUN_TOWARDS);
|
||||||
int GetHealth();
|
int GetHealth();
|
||||||
int GetAttack();
|
int GetAttack();
|
||||||
float GetMoveSpdMult();
|
float GetMoveSpdMult();
|
||||||
float GetSizeMult();
|
float GetSizeMult();
|
||||||
MonsterStrategy GetAIStrategy();
|
MonsterStrategy GetAIStrategy();
|
||||||
|
std::vector<AnimationState>GetAnimations(){
|
||||||
|
return animations;
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
enum MonsterName{
|
enum MonsterName{
|
||||||
@ -40,6 +44,8 @@ struct Monster{
|
|||||||
float moveSpd;
|
float moveSpd;
|
||||||
float size;
|
float size;
|
||||||
MonsterStrategy strategy;
|
MonsterStrategy strategy;
|
||||||
|
Animate2D::Animation<AnimationState>animation;
|
||||||
|
Animate2D::AnimationState internal_animState;
|
||||||
public:
|
public:
|
||||||
Monster();
|
Monster();
|
||||||
Monster(vf2d pos,MonsterData data);
|
Monster(vf2d pos,MonsterData data);
|
||||||
@ -48,10 +54,21 @@ struct Monster{
|
|||||||
int GetAttack();
|
int GetAttack();
|
||||||
float GetMoveSpdMult();
|
float GetMoveSpdMult();
|
||||||
float GetSizeMult();
|
float GetSizeMult();
|
||||||
|
void UpdateAnimation(AnimationState state);
|
||||||
|
void Update(float fElapsedTime);
|
||||||
};
|
};
|
||||||
|
|
||||||
struct MonsterSpawner{
|
struct MonsterSpawner{
|
||||||
|
private:
|
||||||
vf2d pos;
|
vf2d pos;
|
||||||
int range;
|
int range;
|
||||||
std::vector<std::pair<MonsterData,vf2d>>monsters;
|
std::vector<std::pair<MonsterData,vf2d>>monsters;
|
||||||
|
bool triggered;
|
||||||
|
public:
|
||||||
|
MonsterSpawner();
|
||||||
|
MonsterSpawner(vf2d pos,int range,std::vector<std::pair<MonsterData,vf2d>>monsters);
|
||||||
|
bool SpawnTriggered();
|
||||||
|
int GetRange();
|
||||||
|
vf2d GetPos();
|
||||||
|
void SetTriggered(bool trigger);
|
||||||
};
|
};
|
@ -1,10 +1,10 @@
|
|||||||
#include "olcPixelGameEngine.h"
|
#include "olcPixelGameEngine.h"
|
||||||
#include "Monster.h"
|
#include "Monster.h"
|
||||||
|
#include "Animation.h"
|
||||||
|
|
||||||
std::map<MonsterName,MonsterData>MONSTER_DATA={
|
std::map<MonsterName,MonsterData>MONSTER_DATA={
|
||||||
{SLIME_GREEN,MonsterData(10,5,1.1f,0.8f,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,0.8f,1.0f,MonsterStrategy::SHOOT_AFAR)},
|
{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,0.95f,1.2f,MonsterStrategy::RUN_TOWARDS)},
|
{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,{}},
|
//{SLIME_YELLOW,{}},
|
||||||
};
|
};
|
@ -20,7 +20,6 @@ struct Player{
|
|||||||
float moveSpd=1.0f;
|
float moveSpd=1.0f;
|
||||||
float size=1.0f;
|
float size=1.0f;
|
||||||
float attack_range=1.5f;
|
float attack_range=1.5f;
|
||||||
AnimationState animState=AnimationState::IDLE_S;
|
|
||||||
Animate2D::Animation<AnimationState>animation;
|
Animate2D::Animation<AnimationState>animation;
|
||||||
Animate2D::AnimationState internal_animState;
|
Animate2D::AnimationState internal_animState;
|
||||||
Key lastReleasedMovementKey;
|
Key lastReleasedMovementKey;
|
||||||
@ -95,6 +94,8 @@ class Crawler : public olc::PixelGameEngine
|
|||||||
TileTransformedView view;
|
TileTransformedView view;
|
||||||
Player player=Player{{}};
|
Player player=Player{{}};
|
||||||
Renderable GFX_Pl_Sheet,GFX_Slime_Sheet;
|
Renderable GFX_Pl_Sheet,GFX_Slime_Sheet;
|
||||||
|
std::vector<MonsterSpawner>spawners;
|
||||||
|
std::vector<Monster>monsters;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
Crawler()
|
Crawler()
|
||||||
@ -132,7 +133,7 @@ public:
|
|||||||
player.SetPos({4*24,4*24});
|
player.SetPos({4*24,4*24});
|
||||||
player.UpdateAnimation(AnimationState::IDLE_S);
|
player.UpdateAnimation(AnimationState::IDLE_S);
|
||||||
|
|
||||||
std::cout<<MONSTER_DATA[SLIME_BLUE].GetHealth()<<std::endl;
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user