Fix teleport ability, reverse logic in has tile collision. Also use precise collision checking for tiles. Teleporting distance clamping is now proper (650 range)
This commit is contained in:
		
							parent
							
								
									888d2a91a6
								
							
						
					
					
						commit
						d658bb9973
					
				| @ -303,7 +303,7 @@ bool Wizard::RightClickAbility(){ | ||||
| 	ACCESS_PLAYER | ||||
| 	float pointMouseDirection=atan2(game->GetWorldMousePos().y-p.GetPos().y,game->GetWorldMousePos().x-p.GetPos().x); | ||||
| 	vf2d pointTowardsMouse={cos(pointMouseDirection),sin(pointMouseDirection)}; | ||||
| 	float dist=std::clamp(geom2d::line<float>{p.GetPos(),game->GetWorldMousePos()}.length(),0.f,650.f); | ||||
| 	float dist=std::clamp(geom2d::line<float>{p.GetPos(),game->GetWorldMousePos()}.length(),0.f,6.5f*24); | ||||
| 	vf2d teleportPoint=p.GetPos()+pointTowardsMouse*dist; | ||||
| 	while(dist>0&&game->HasTileCollision(game->GetCurrentLevel(),teleportPoint)){ | ||||
| 		dist--; | ||||
|  | ||||
| @ -950,7 +950,9 @@ TilesheetData Crawler::GetTileSheet(MapName map,int tileID){ | ||||
| 
 | ||||
| bool Crawler::HasTileCollision(MapName map,vf2d pos){ | ||||
| 	geom2d::rect<int>collisionRect=GetTileCollision(map,pos); | ||||
| 	return collisionRect.pos==NO_COLLISION.pos&&collisionRect.size==NO_COLLISION.size; | ||||
| 	vi2d collisionRectSnapPos=vi2d{pos/24}*24; | ||||
| 	collisionRect.pos+=collisionRectSnapPos; | ||||
| 	return geom2d::overlaps(collisionRect,pos); | ||||
| } | ||||
| 
 | ||||
| geom2d::rect<int>Crawler::GetTileCollision(MapName map,vf2d pos){ | ||||
| @ -960,7 +962,7 @@ geom2d::rect<int>Crawler::GetTileCollision(MapName map,vf2d pos){ | ||||
| 			return GetTileSheet(map,tileID).tileset.collision[tileID].collision; | ||||
| 		} | ||||
| 	} | ||||
| 	return {}; | ||||
| 	return NO_COLLISION; | ||||
| } | ||||
| 
 | ||||
| MapName Crawler::GetCurrentLevel(){ | ||||
|  | ||||
| @ -42,7 +42,7 @@ public: | ||||
| 	Crawler(); | ||||
| 
 | ||||
| public: | ||||
| 	geom2d::rect<int>NO_COLLISION={{0,0},{1,1}}; | ||||
| 	geom2d::rect<int>NO_COLLISION={}; | ||||
| 	vi2d WORLD_SIZE={120,8}; | ||||
| 	TileTransformedView view; | ||||
| 	bool OnUserCreate() override; | ||||
| @ -76,7 +76,9 @@ public: | ||||
| 	bool IsForegroundTile(TilesheetData sheet,int tileID); | ||||
| 	//tileID is the tile number from the tilesets.
 | ||||
| 	TilesheetData GetTileSheet(MapName map,int tileID); | ||||
| 	//Gets the rectangle of the tile collision at this tile.
 | ||||
| 	geom2d::rect<int>GetTileCollision(MapName map,vf2d pos); | ||||
| 	//Checks if the point resides inside of a collision tile.
 | ||||
| 	bool HasTileCollision(MapName map,vf2d pos); | ||||
| 	MapName GetCurrentLevel(); | ||||
| }; | ||||
| @ -1,7 +0,0 @@ | ||||
| #include "MonsterType.h" | ||||
| 
 | ||||
| monSlimeA::monSlimeA(vf2d pos,MonsterData data) | ||||
| 	:Monster(pos,data){ | ||||
| 	jumpAnimation=AnimationState::GREEN_SLIME_JUMP; | ||||
| 	shootAnimation=AnimationState::GREEN_SLIME_SPIT; | ||||
| } | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user