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