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