Sync up monster names with in-game values. Spawners loaded from map data. Spawners now are ellipses instead of circles. Added yellow slime missing death animation. New release build.
This commit is contained in:
parent
d254e169c4
commit
b2eda563f2
@ -92,47 +92,6 @@ bool Crawler::OnUserCreate(){
|
||||
player.SetClass(WARRIOR);
|
||||
player.SetPos({4*24,4*24});
|
||||
|
||||
SPAWNER_LIST.push_back(MonsterSpawner({360*1,96},4*24,{{
|
||||
{MonsterName::SLIME_GREEN,{(rand()%20/2.f-5)*24,(rand()%20/2.f-5)*24}}
|
||||
,{MonsterName::SLIME_GREEN,{(rand()%20/2.f-5)*24,(rand()%20/2.f-5)*24}}
|
||||
}}));
|
||||
SPAWNER_LIST.push_back(MonsterSpawner({360*2,96},4*24,{{
|
||||
{MonsterName::SLIME_GREEN,{(rand()%20/2.f-5)*24,(rand()%20/2.f-5)*24}}
|
||||
,{MonsterName::SLIME_GREEN,{(rand()%20/2.f-5)*24,(rand()%20/2.f-5)*24}}
|
||||
,{MonsterName::SLIME_RED,{(rand()%20/2.f-5)*24,(rand()%20/2.f-5)*24}}
|
||||
}}));
|
||||
SPAWNER_LIST.push_back(MonsterSpawner({360*3,96},4*24,{{
|
||||
{MonsterName::SLIME_BLUE,{(rand()%20/2.f-5)*24,(rand()%20/2.f-5)*24}}
|
||||
,{MonsterName::SLIME_BLUE,{(rand()%20/2.f-5)*24,(rand()%20/2.f-5)*24}}
|
||||
}}));
|
||||
SPAWNER_LIST.push_back(MonsterSpawner({360*4,96},4*24,{{
|
||||
{MonsterName::SLIME_BLUE,{(rand()%20/2.f-5)*24,(rand()%20/2.f-5)*24}}
|
||||
,{MonsterName::SLIME_BLUE,{(rand()%20/2.f-5)*24,(rand()%20/2.f-5)*24}}
|
||||
,{MonsterName::SLIME_GREEN,{(rand()%20/2.f-5)*24,(rand()%20/2.f-5)*24}}
|
||||
,{MonsterName::SLIME_GREEN,{(rand()%20/2.f-5)*24,(rand()%20/2.f-5)*24}}
|
||||
,{MonsterName::SLIME_GREEN,{(rand()%20/2.f-5)*24,(rand()%20/2.f-5)*24}}
|
||||
}}));
|
||||
SPAWNER_LIST.push_back(MonsterSpawner({360*5,96},4*24,{{
|
||||
{MonsterName::SLIME_BLUE,{(rand()%20/2.f-5)*24,(rand()%20/2.f-5)*24}}
|
||||
,{MonsterName::SLIME_BLUE,{(rand()%20/2.f-5)*24,(rand()%20/2.f-5)*24}}
|
||||
,{MonsterName::SLIME_RED,{(rand()%20/2.f-5)*24,(rand()%20/2.f-5)*24}}
|
||||
,{MonsterName::SLIME_RED,{(rand()%20/2.f-5)*24,(rand()%20/2.f-5)*24}}
|
||||
}}));
|
||||
SPAWNER_LIST.push_back(MonsterSpawner({360*6,96},4*24,{{
|
||||
{MonsterName::SLIME_RED,{(rand()%20/2.f-5)*24,(rand()%20/2.f-5)*24}}
|
||||
,{MonsterName::SLIME_RED,{(rand()%20/2.f-5)*24,(rand()%20/2.f-5)*24}}
|
||||
,{MonsterName::SLIME_RED,{(rand()%20/2.f-5)*24,(rand()%20/2.f-5)*24}}
|
||||
,{MonsterName::SLIME_RED,{(rand()%20/2.f-5)*24,(rand()%20/2.f-5)*24}}
|
||||
,{MonsterName::SLIME_RED,{(rand()%20/2.f-5)*24,(rand()%20/2.f-5)*24}}
|
||||
}}));
|
||||
SPAWNER_LIST.push_back(MonsterSpawner({360*7,96},4*24,{{
|
||||
{MonsterName::SLIME_BLUE,{(rand()%20/2.f-5)*24,(rand()%20/2.f-5)*24}}
|
||||
,{MonsterName::SLIME_BLUE,{(rand()%20/2.f-5)*24,(rand()%20/2.f-5)*24}}
|
||||
,{MonsterName::SLIME_BLUE,{(rand()%20/2.f-5)*24,(rand()%20/2.f-5)*24}}
|
||||
,{MonsterName::SLIME_BLUE,{(rand()%20/2.f-5)*24,(rand()%20/2.f-5)*24}}
|
||||
,{MonsterName::SLIME_BLUE,{(rand()%20/2.f-5)*24,(rand()%20/2.f-5)*24}}
|
||||
}}));
|
||||
|
||||
LoadLevel(LEVEL2);
|
||||
|
||||
return true;
|
||||
@ -829,8 +788,20 @@ void Crawler::InitializeLevel(std::string mapFile,MapName map){
|
||||
}
|
||||
|
||||
void Crawler::LoadLevel(MapName map){
|
||||
SPAWNER_LIST.clear();
|
||||
currentLevel=map;
|
||||
WORLD_SIZE={MAP_DATA[map].MapData.width,MAP_DATA[map].MapData.height};
|
||||
for(SpawnerTag&spawner:MAP_DATA[map].SpawnerData){
|
||||
std::vector<std::pair<MonsterName,vf2d>>monster_list;
|
||||
vf2d spawnerRadius=vf2d{spawner.ObjectData.GetFloat("width"),spawner.ObjectData.GetFloat("height")}/2;
|
||||
for(XMLTag&property:spawner.properties){
|
||||
int monsterTypeID=property.GetInteger("value")-1;
|
||||
if(monsterTypeID>=0&&monsterTypeID<MonsterName::END){
|
||||
monster_list.push_back({MonsterName(monsterTypeID),{rand()%int(spawnerRadius.x)-spawnerRadius.x/2,rand()%int(spawnerRadius.y)-spawnerRadius.y/2}});
|
||||
}
|
||||
}
|
||||
SPAWNER_LIST.push_back(MonsterSpawner{{spawner.ObjectData.GetFloat("x")+spawnerRadius.x,spawner.ObjectData.GetFloat("y")+spawnerRadius.y},spawnerRadius,monster_list});
|
||||
}
|
||||
}
|
||||
|
||||
vi2d Crawler::GetWorldSize(){
|
||||
|
@ -62,9 +62,10 @@
|
||||
"type": "enum",
|
||||
"values": [
|
||||
"None",
|
||||
"Monster A",
|
||||
"Monster B",
|
||||
"Monster C"
|
||||
"Green Slime",
|
||||
"Blue Slime",
|
||||
"Red Slime",
|
||||
"Yellow Slime"
|
||||
],
|
||||
"valuesAsFlags": false
|
||||
},
|
||||
|
@ -320,6 +320,9 @@ AnimationState Monster::GetDeathAnimationName(){
|
||||
case SLIME_RED:{
|
||||
return AnimationState::RED_SLIME_DIE;
|
||||
}
|
||||
case SLIME_YELLOW:{
|
||||
return AnimationState::YELLOW_SLIME_DIE;
|
||||
}
|
||||
default:{
|
||||
return AnimationState::WARRIOR_IDLE_S;
|
||||
}
|
||||
@ -347,13 +350,13 @@ vf2d&Monster::GetTargetPos(){
|
||||
}
|
||||
|
||||
MonsterSpawner::MonsterSpawner(){}
|
||||
MonsterSpawner::MonsterSpawner(vf2d pos,int range,std::vector<std::pair<MonsterName,vf2d>>monsters):
|
||||
MonsterSpawner::MonsterSpawner(vf2d pos,vf2d range,std::vector<std::pair<MonsterName,vf2d>>monsters):
|
||||
pos(pos),range(range),monsters(monsters){
|
||||
}
|
||||
bool MonsterSpawner::SpawnTriggered(){
|
||||
return triggered;
|
||||
}
|
||||
int MonsterSpawner::GetRange(){
|
||||
vf2d MonsterSpawner::GetRange(){
|
||||
return range;
|
||||
}
|
||||
vf2d MonsterSpawner::GetPos(){
|
||||
|
@ -15,6 +15,11 @@ enum MonsterName{
|
||||
SLIME_BLUE,
|
||||
SLIME_RED,
|
||||
SLIME_YELLOW,
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
/*//*/END,//Used for detecting the end of the list, DO NOT USE OR TOUCH. Add all monsters above this//*//*/
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
};
|
||||
|
||||
struct MonsterData{
|
||||
@ -100,15 +105,16 @@ struct Monster{
|
||||
struct MonsterSpawner{
|
||||
private:
|
||||
vf2d pos;
|
||||
int range;
|
||||
vf2d range;
|
||||
std::vector<std::pair<MonsterName,vf2d>>monsters;
|
||||
bool triggered=false;
|
||||
public:
|
||||
MonsterSpawner();
|
||||
//For the monster list, the second pair item is the position relative to the spawner to spawn the monster.
|
||||
MonsterSpawner(vf2d pos,int range,std::vector<std::pair<MonsterName,vf2d>>MONSTER_LIST);
|
||||
MonsterSpawner(vf2d pos,vf2d range,std::vector<std::pair<MonsterName,vf2d>>MONSTER_LIST);
|
||||
bool SpawnTriggered();
|
||||
int GetRange();
|
||||
vf2d GetRange();
|
||||
vf2d GetPos();
|
||||
void SetTriggered(bool trigger,bool spawnMonsters=true);
|
||||
friend std::ostream&operator<<(std::ostream&os,MonsterSpawner&rhs);
|
||||
};
|
@ -6,5 +6,5 @@ std::map<MonsterName,MonsterData>MONSTER_DATA={
|
||||
{SLIME_GREEN,MonsterData(MonsterName::SLIME_GREEN,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,5)},
|
||||
{SLIME_BLUE,MonsterData(MonsterName::SLIME_BLUE,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(MonsterName::SLIME_RED,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,10)},
|
||||
//{SLIME_YELLOW,{}},
|
||||
{SLIME_YELLOW,MonsterData(MonsterName::SLIME_YELLOW,175,10,{{AnimationState::YELLOW_SLIME_IDLE,AnimationState::YELLOW_SLIME_JUMP,AnimationState::YELLOW_SLIME_ROLL,AnimationState::YELLOW_SLIME_DIE,AnimationState::YELLOW_SLIME_SPIT}},0.4f,1.6f,MonsterStrategy::RUN_TOWARDS,15)},
|
||||
};
|
@ -464,7 +464,7 @@ Key Player::GetFacingDirection(){
|
||||
|
||||
void Player::Moved(){
|
||||
for(MonsterSpawner&spawner:SPAWNER_LIST){
|
||||
if(!spawner.SpawnTriggered()&&geom2d::overlaps(geom2d::circle<float>(pos-vf2d{size*12,size*12},size*12),geom2d::circle<float>(spawner.GetPos(),spawner.GetRange()))){
|
||||
if(!spawner.SpawnTriggered()&&geom2d::contains(geom2d::ellipse<float>{spawner.GetPos(),spawner.GetRange()},pos)){
|
||||
spawner.SetTriggered(true);
|
||||
}
|
||||
}
|
||||
|
@ -11,6 +11,7 @@ struct XMLTag{
|
||||
friend std::ostream& operator << (std::ostream& os, XMLTag& rhs);
|
||||
std::string str();
|
||||
int GetInteger(std::string dataTag);
|
||||
float GetFloat(std::string dataTag);
|
||||
double GetDouble(std::string dataTag);
|
||||
bool GetBool(std::string dataTag);
|
||||
};
|
||||
@ -79,6 +80,9 @@ class TMXParser{
|
||||
int XMLTag::GetInteger(std::string dataTag) {
|
||||
return std::stoi(data[dataTag]);
|
||||
}
|
||||
float XMLTag::GetFloat(std::string dataTag) {
|
||||
return std::stof(data[dataTag]);
|
||||
}
|
||||
double XMLTag::GetDouble(std::string dataTag) {
|
||||
return std::stod(data[dataTag]);
|
||||
}
|
||||
|
@ -2,7 +2,7 @@
|
||||
#define VERSION_MAJOR 0
|
||||
#define VERSION_MINOR 2
|
||||
#define VERSION_PATCH 0
|
||||
#define VERSION_BUILD 180
|
||||
#define VERSION_BUILD 193
|
||||
|
||||
#define stringify(a) stringify_(a)
|
||||
#define stringify_(a) #a
|
||||
|
BIN
Crawler/pge.data
BIN
Crawler/pge.data
Binary file not shown.
Before Width: | Height: | Size: 179 KiB After Width: | Height: | Size: 706 KiB |
File diff suppressed because one or more lines are too long
BIN
Crawler/pge.wasm
BIN
Crawler/pge.wasm
Binary file not shown.
Loading…
x
Reference in New Issue
Block a user