Teleport code added in Wizard. Needs more debugging.
This commit is contained in:
parent
0482020b19
commit
65cae7aea7
@ -300,7 +300,21 @@ bool Wizard::Ability3(){
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool Wizard::RightClickAbility(){
|
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);
|
||||||
|
vf2d teleportPoint=p.GetPos()+pointTowardsMouse*dist;
|
||||||
|
while(dist>0&&game->HasTileCollision(game->GetCurrentLevel(),teleportPoint)){
|
||||||
|
dist--;
|
||||||
|
teleportPoint=p.GetPos()+pointTowardsMouse*dist;
|
||||||
|
}
|
||||||
|
if(dist>0){
|
||||||
|
p.SetPos(teleportPoint);
|
||||||
return true;
|
return true;
|
||||||
|
} else {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Witch::Witch(std::string name,Class cl,Ability rightClickAbility,Ability ability1,Ability ability2,Ability ability3,
|
Witch::Witch(std::string name,Class cl,Ability rightClickAbility,Ability ability1,Ability ability2,Ability ability3,
|
||||||
|
@ -107,11 +107,10 @@ bool Crawler::OnUserCreate(){
|
|||||||
player.AddAnimation(AnimationState::WIZARD_ATTACK_W);
|
player.AddAnimation(AnimationState::WIZARD_ATTACK_W);
|
||||||
view=TileTransformedView{GetScreenSize(),{1,1}};
|
view=TileTransformedView{GetScreenSize(),{1,1}};
|
||||||
|
|
||||||
player.SetClass(WARRIOR);
|
|
||||||
player.SetPos({4*24,4*24});
|
|
||||||
|
|
||||||
LoadLevel(CAMPAIGN_1_1);
|
LoadLevel(CAMPAIGN_1_1);
|
||||||
|
|
||||||
|
player.SetClass(WARRIOR);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -875,7 +874,6 @@ void Crawler::LoadLevel(MapName map){
|
|||||||
SPAWNER_LIST.clear();
|
SPAWNER_LIST.clear();
|
||||||
foregroundTileGroups.clear();
|
foregroundTileGroups.clear();
|
||||||
currentLevel=map;
|
currentLevel=map;
|
||||||
player.SetPos(MAP_DATA[map].MapData.playerSpawnLocation);
|
|
||||||
WORLD_SIZE={MAP_DATA[map].MapData.width,MAP_DATA[map].MapData.height};
|
WORLD_SIZE={MAP_DATA[map].MapData.width,MAP_DATA[map].MapData.height};
|
||||||
for(SpawnerTag&spawner:MAP_DATA[map].SpawnerData){
|
for(SpawnerTag&spawner:MAP_DATA[map].SpawnerData){
|
||||||
std::vector<std::pair<MonsterName,vf2d>>monster_list;
|
std::vector<std::pair<MonsterName,vf2d>>monster_list;
|
||||||
@ -919,6 +917,7 @@ void Crawler::LoadLevel(MapName map){
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
player.SetPos(MAP_DATA[map].MapData.playerSpawnLocation);
|
||||||
}
|
}
|
||||||
|
|
||||||
vi2d Crawler::GetWorldSize(){
|
vi2d Crawler::GetWorldSize(){
|
||||||
@ -949,6 +948,11 @@ 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;
|
||||||
|
}
|
||||||
|
|
||||||
geom2d::rect<int>Crawler::GetTileCollision(MapName map,vf2d pos){
|
geom2d::rect<int>Crawler::GetTileCollision(MapName map,vf2d pos){
|
||||||
for(LayerTag&layer:MAP_DATA[map].LayerData){
|
for(LayerTag&layer:MAP_DATA[map].LayerData){
|
||||||
int tileID=layer.tiles[int(pos.y)/24][int(pos.x)/24]-1;
|
int tileID=layer.tiles[int(pos.y)/24][int(pos.x)/24]-1;
|
||||||
|
@ -42,6 +42,7 @@ public:
|
|||||||
Crawler();
|
Crawler();
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
geom2d::rect<int>NO_COLLISION={{0,0},{1,1}};
|
||||||
vi2d WORLD_SIZE={120,8};
|
vi2d WORLD_SIZE={120,8};
|
||||||
TileTransformedView view;
|
TileTransformedView view;
|
||||||
bool OnUserCreate() override;
|
bool OnUserCreate() override;
|
||||||
@ -76,5 +77,6 @@ public:
|
|||||||
//tileID is the tile number from the tilesets.
|
//tileID is the tile number from the tilesets.
|
||||||
TilesheetData GetTileSheet(MapName map,int tileID);
|
TilesheetData GetTileSheet(MapName map,int tileID);
|
||||||
geom2d::rect<int>GetTileCollision(MapName map,vf2d pos);
|
geom2d::rect<int>GetTileCollision(MapName map,vf2d pos);
|
||||||
|
bool HasTileCollision(MapName map,vf2d pos);
|
||||||
MapName GetCurrentLevel();
|
MapName GetCurrentLevel();
|
||||||
};
|
};
|
@ -29,42 +29,60 @@ void Player::SetClass(Class cl){
|
|||||||
UpdateIdleAnimation(DOWN);
|
UpdateIdleAnimation(DOWN);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Player::SetX(float x){
|
bool Player::SetX(float x){
|
||||||
vf2d newPos={x,pos.y};
|
vf2d newPos={x,pos.y};
|
||||||
vi2d tilePos=vi2d(newPos/24)*24;
|
vi2d tilePos=vi2d(newPos/24)*24;
|
||||||
geom2d::rect<int>collisionRect=game->GetTileCollision(game->GetCurrentLevel(),newPos);
|
geom2d::rect<int>collisionRect=game->GetTileCollision(game->GetCurrentLevel(),newPos);
|
||||||
if(collisionRect.pos==vi2d{0,0}&&collisionRect.size==vi2d{1,1}){
|
#pragma region lambdas
|
||||||
|
auto NoTileCollisionExistsHere=[&](){return collisionRect.pos==game->NO_COLLISION.pos&&collisionRect.size==game->NO_COLLISION.size;};
|
||||||
|
#pragma endregion
|
||||||
|
if(NoTileCollisionExistsHere()){
|
||||||
pos.x=std::clamp(x,12.f*GetSizeMult(),float(game->WORLD_SIZE.x*24-12*GetSizeMult()));
|
pos.x=std::clamp(x,12.f*GetSizeMult(),float(game->WORLD_SIZE.x*24-12*GetSizeMult()));
|
||||||
|
return true;
|
||||||
} else {
|
} else {
|
||||||
geom2d::rect<float>collision={collisionRect.pos,collisionRect.size};
|
geom2d::rect<float>collision={collisionRect.pos,collisionRect.size};
|
||||||
|
#pragma region lambdas
|
||||||
|
auto NoPlayerCollisionWithTile=[&](){return !geom2d::overlaps(newPos,collision);};
|
||||||
|
#pragma endregion
|
||||||
collision.pos+=tilePos;
|
collision.pos+=tilePos;
|
||||||
if(!geom2d::overlaps(newPos,collision)){
|
if(NoPlayerCollisionWithTile()){
|
||||||
pos.x=std::clamp(x,12.f*GetSizeMult(),float(game->WORLD_SIZE.x*24-12*GetSizeMult()));
|
pos.x=std::clamp(x,12.f*GetSizeMult(),float(game->WORLD_SIZE.x*24-12*GetSizeMult()));
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
return false;
|
||||||
};
|
};
|
||||||
|
|
||||||
void Player::SetY(float y){
|
bool Player::SetY(float y){
|
||||||
vf2d newPos={pos.x,y};
|
vf2d newPos={pos.x,y};
|
||||||
vi2d tilePos=vi2d(newPos/24)*24;
|
vi2d tilePos=vi2d(newPos/24)*24;
|
||||||
geom2d::rect<int>collisionRect=game->GetTileCollision(game->GetCurrentLevel(),newPos);
|
geom2d::rect<int>collisionRect=game->GetTileCollision(game->GetCurrentLevel(),newPos);
|
||||||
if(collisionRect.pos==vi2d{0,0}&&collisionRect.size==vi2d{1,1}){
|
#pragma region lambdas
|
||||||
|
auto NoTileCollisionExistsHere=[&](){return collisionRect.pos==game->NO_COLLISION.pos&&collisionRect.size==game->NO_COLLISION.size;};
|
||||||
|
#pragma endregion
|
||||||
|
if(NoTileCollisionExistsHere()){
|
||||||
pos.y=std::clamp(y,12.f*GetSizeMult(),float(game->WORLD_SIZE.y*24-12*GetSizeMult()));
|
pos.y=std::clamp(y,12.f*GetSizeMult(),float(game->WORLD_SIZE.y*24-12*GetSizeMult()));
|
||||||
|
return true;
|
||||||
} else {
|
} else {
|
||||||
geom2d::rect<float>collision={collisionRect.pos,collisionRect.size};
|
geom2d::rect<float>collision={collisionRect.pos,collisionRect.size};
|
||||||
|
#pragma region lambdas
|
||||||
|
auto NoPlayerCollisionWithTile=[&](){return !geom2d::overlaps(newPos,collision);};
|
||||||
|
#pragma endregion
|
||||||
collision.pos+=tilePos;
|
collision.pos+=tilePos;
|
||||||
if(!geom2d::overlaps(newPos,collision)){
|
if(NoPlayerCollisionWithTile()){
|
||||||
pos.y=std::clamp(y,12.f*GetSizeMult(),float(game->WORLD_SIZE.y*24-12*GetSizeMult()));
|
pos.y=std::clamp(y,12.f*GetSizeMult(),float(game->WORLD_SIZE.y*24-12*GetSizeMult()));
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Player::SetZ(float z){
|
void Player::SetZ(float z){
|
||||||
this->z=z;
|
this->z=z;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Player::SetPos(vf2d pos){
|
bool Player::SetPos(vf2d pos){
|
||||||
this->pos=pos;
|
return SetX(pos.x)|SetY(pos.y);
|
||||||
}
|
}
|
||||||
|
|
||||||
vf2d&Player::GetPos(){
|
vf2d&Player::GetPos(){
|
||||||
|
@ -51,10 +51,13 @@ struct Player{
|
|||||||
void SetFacingDirection(Key direction);
|
void SetFacingDirection(Key direction);
|
||||||
void SetLastReleasedMovementKey(Key k);
|
void SetLastReleasedMovementKey(Key k);
|
||||||
void Spin(float duration,float spinSpd);
|
void Spin(float duration,float spinSpd);
|
||||||
void SetX(float x);
|
//Returns true if the move was valid and successful.
|
||||||
void SetY(float y);
|
bool SetX(float x);
|
||||||
|
//Returns true if the move was valid and successful.
|
||||||
|
bool SetY(float y);
|
||||||
void SetZ(float z);
|
void SetZ(float z);
|
||||||
void SetPos(vf2d pos);
|
//Returns true if the move was valid and successful.
|
||||||
|
bool SetPos(vf2d pos);
|
||||||
void SetClass(Class cl);
|
void SetClass(Class cl);
|
||||||
std::vector<Buff>buffList;
|
std::vector<Buff>buffList;
|
||||||
protected:
|
protected:
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
#define VERSION_MAJOR 0
|
#define VERSION_MAJOR 0
|
||||||
#define VERSION_MINOR 2
|
#define VERSION_MINOR 2
|
||||||
#define VERSION_PATCH 0
|
#define VERSION_PATCH 0
|
||||||
#define VERSION_BUILD 391
|
#define VERSION_BUILD 406
|
||||||
|
|
||||||
#define stringify(a) stringify_(a)
|
#define stringify(a) stringify_(a)
|
||||||
#define stringify_(a) #a
|
#define stringify_(a) #a
|
||||||
|
Loading…
x
Reference in New Issue
Block a user