Added collision checks and interactions based on upper/lower level status.
This commit is contained in:
parent
28345ceddd
commit
6c70437620
9
.vscode/settings.json
vendored
9
.vscode/settings.json
vendored
@ -80,6 +80,13 @@
|
|||||||
"locale": "cpp",
|
"locale": "cpp",
|
||||||
"queue": "cpp",
|
"queue": "cpp",
|
||||||
"stack": "cpp",
|
"stack": "cpp",
|
||||||
"span": "cpp"
|
"span": "cpp",
|
||||||
|
"cfenv": "cpp",
|
||||||
|
"complex": "cpp",
|
||||||
|
"set": "cpp",
|
||||||
|
"__tree": "cpp",
|
||||||
|
"bitset": "cpp",
|
||||||
|
"regex": "cpp",
|
||||||
|
"valarray": "cpp"
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -70,6 +70,7 @@ bool Warrior::AutoAttack(){
|
|||||||
float closest_dist=999999;
|
float closest_dist=999999;
|
||||||
for(Monster&m:MONSTER_LIST){
|
for(Monster&m:MONSTER_LIST){
|
||||||
if(m.IsAlive()
|
if(m.IsAlive()
|
||||||
|
&&m.OnUpperLevel()==p.OnUpperLevel()
|
||||||
&&geom2d::overlaps(geom2d::circle<float>(p.pos-vf2d{p.GetSizeMult()*12,p.GetSizeMult()*12},p.attack_range*p.GetSizeMult()*12),geom2d::circle<float>(m.GetPos()-vf2d{m.GetSizeMult()*12,m.GetSizeMult()*12},m.GetSizeMult()*12))
|
&&geom2d::overlaps(geom2d::circle<float>(p.pos-vf2d{p.GetSizeMult()*12,p.GetSizeMult()*12},p.attack_range*p.GetSizeMult()*12),geom2d::circle<float>(m.GetPos()-vf2d{m.GetSizeMult()*12,m.GetSizeMult()*12},m.GetSizeMult()*12))
|
||||||
&&geom2d::line<float>(game->GetWorldMousePos(),m.GetPos()).length()<closest_dist){
|
&&geom2d::line<float>(game->GetWorldMousePos(),m.GetPos()).length()<closest_dist){
|
||||||
closest_dist=geom2d::line<float>(game->GetWorldMousePos(),m.GetPos()).length();
|
closest_dist=geom2d::line<float>(game->GetWorldMousePos(),m.GetPos()).length();
|
||||||
|
@ -33,6 +33,8 @@ bool Crawler::OnUserCreate(){
|
|||||||
|
|
||||||
InitializeLevel("assets/Campaigns/1_1_test.tmx",CAMPAIGN_1_1);
|
InitializeLevel("assets/Campaigns/1_1_test.tmx",CAMPAIGN_1_1);
|
||||||
|
|
||||||
|
ConsoleCaptureStdOut(true);
|
||||||
|
|
||||||
ClassData::InitializeClassData();
|
ClassData::InitializeClassData();
|
||||||
|
|
||||||
//Initialize Camera.
|
//Initialize Camera.
|
||||||
@ -644,7 +646,7 @@ void Crawler::UpdateBullets(float fElapsedTime){
|
|||||||
if(!b->deactivated){
|
if(!b->deactivated){
|
||||||
if(b->friendly){
|
if(b->friendly){
|
||||||
for(Monster&m:MONSTER_LIST){
|
for(Monster&m:MONSTER_LIST){
|
||||||
if(geom2d::overlaps(geom2d::circle(m.GetPos(),12*m.GetSizeMult()),geom2d::circle(b->pos,b->radius))){
|
if(b->OnUpperLevel()==m.OnUpperLevel()&&geom2d::overlaps(geom2d::circle(m.GetPos(),12*m.GetSizeMult()),geom2d::circle(b->pos,b->radius))){
|
||||||
if(b->hitList.find(&m)==b->hitList.end()&&m.Hurt(b->damage)){
|
if(b->hitList.find(&m)==b->hitList.end()&&m.Hurt(b->damage)){
|
||||||
if(!b->hitsMultiple){
|
if(!b->hitsMultiple){
|
||||||
if(b->MonsterHit(m)){
|
if(b->MonsterHit(m)){
|
||||||
@ -660,7 +662,7 @@ void Crawler::UpdateBullets(float fElapsedTime){
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if(geom2d::overlaps(geom2d::circle(player.GetPos(),12*player.GetSizeMult()/2),geom2d::circle(b->pos,b->radius))){
|
if(b->OnUpperLevel()==player.OnUpperLevel()&&geom2d::overlaps(geom2d::circle(player.GetPos(),12*player.GetSizeMult()/2),geom2d::circle(b->pos,b->radius))){
|
||||||
if(player.Hurt(b->damage)){
|
if(player.Hurt(b->damage)){
|
||||||
if(b->PlayerHit(player)){
|
if(b->PlayerHit(player)){
|
||||||
it=BULLET_LIST.erase(it);
|
it=BULLET_LIST.erase(it);
|
||||||
@ -695,9 +697,9 @@ void Crawler::UpdateBullets(float fElapsedTime){
|
|||||||
outsidePlayerBulletLoop:
|
outsidePlayerBulletLoop:
|
||||||
int a;
|
int a;
|
||||||
}
|
}
|
||||||
void Crawler::HurtEnemies(vf2d pos,float radius,int damage){
|
void Crawler::HurtEnemies(vf2d pos,float radius,int damage,bool upperLevel){
|
||||||
for(Monster&m:MONSTER_LIST){
|
for(Monster&m:MONSTER_LIST){
|
||||||
if(geom2d::overlaps(geom2d::circle(pos,radius),geom2d::circle(m.GetPos(),12*m.GetSizeMult()))){
|
if(m.OnUpperLevel()==upperLevel&&geom2d::overlaps(geom2d::circle(pos,radius),geom2d::circle(m.GetPos(),12*m.GetSizeMult()))){
|
||||||
m.Hurt(damage);
|
m.Hurt(damage);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -61,7 +61,7 @@ public:
|
|||||||
void AddEffect(Effect foreground,Effect background);
|
void AddEffect(Effect foreground,Effect background);
|
||||||
//If back is true, places the effect in the background
|
//If back is true, places the effect in the background
|
||||||
void AddEffect(Effect foreground,bool back=false);
|
void AddEffect(Effect foreground,bool back=false);
|
||||||
void HurtEnemies(vf2d pos,float radius,int damage);
|
void HurtEnemies(vf2d pos,float radius,int damage,bool upperLevel);
|
||||||
vf2d GetWorldMousePos();
|
vf2d GetWorldMousePos();
|
||||||
bool LeftHeld();
|
bool LeftHeld();
|
||||||
bool RightHeld();
|
bool RightHeld();
|
||||||
|
@ -207,7 +207,8 @@ void Player::Update(float fElapsedTime){
|
|||||||
SetState(NORMAL);
|
SetState(NORMAL);
|
||||||
spin_angle=0;
|
spin_angle=0;
|
||||||
z=0;
|
z=0;
|
||||||
game->HurtEnemies(pos,3*12,GetAttack()*2.5);
|
float numb=4;
|
||||||
|
game->HurtEnemies(pos,3*12,GetAttack()*2.5,OnUpperLevel());
|
||||||
game->AddEffect(Effect{GetPos(),0.5,AnimationState::GROUND_SLAM_ATTACK_FRONT,upperLevel,1.33f,0.6f},Effect{GetPos(),0.5,AnimationState::GROUND_SLAM_ATTACK_BACK,upperLevel,1.33f,0.6f});
|
game->AddEffect(Effect{GetPos(),0.5,AnimationState::GROUND_SLAM_ATTACK_FRONT,upperLevel,1.33f,0.6f},Effect{GetPos(),0.5,AnimationState::GROUND_SLAM_ATTACK_BACK,upperLevel,1.33f,0.6f});
|
||||||
}
|
}
|
||||||
if(lastAnimationFlip>0){
|
if(lastAnimationFlip>0){
|
||||||
@ -448,6 +449,10 @@ void Player::AddBuff(BuffType type,float duration,float intensity){
|
|||||||
buffList.push_back(Buff{type,duration,intensity});
|
buffList.push_back(Buff{type,duration,intensity});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool Player::OnUpperLevel(){
|
||||||
|
return upperLevel;
|
||||||
|
}
|
||||||
|
|
||||||
std::vector<Buff>Player::GetBuffs(BuffType buff){
|
std::vector<Buff>Player::GetBuffs(BuffType buff){
|
||||||
std::vector<Buff>filteredBuffs;
|
std::vector<Buff>filteredBuffs;
|
||||||
std::copy_if(buffList.begin(),buffList.end(),std::back_inserter(filteredBuffs),[buff](Buff&b){return b.type==buff;});
|
std::copy_if(buffList.begin(),buffList.end(),std::back_inserter(filteredBuffs),[buff](Buff&b){return b.type==buff;});
|
||||||
|
@ -102,6 +102,7 @@ struct Player{
|
|||||||
Animate2D::Frame GetFrame();
|
Animate2D::Frame GetFrame();
|
||||||
Key GetLastReleasedMovementKey();
|
Key GetLastReleasedMovementKey();
|
||||||
float GetSwordSwingTimer();
|
float GetSwordSwingTimer();
|
||||||
|
bool OnUpperLevel();
|
||||||
|
|
||||||
float GetAbility2Cooldown();
|
float GetAbility2Cooldown();
|
||||||
float GetRightClickCooldown();
|
float GetRightClickCooldown();
|
||||||
|
@ -3574,10 +3574,10 @@ namespace olc
|
|||||||
vConsoleCursor.y++; vConsoleCursor.x = 0;
|
vConsoleCursor.y++; vConsoleCursor.x = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (vConsoleCursor.y >= vConsoleSize.y)
|
if (vConsoleCursor.y >= 1000)
|
||||||
{
|
{
|
||||||
vConsoleCursor.y = vConsoleSize.y - 1;
|
vConsoleCursor.y = vConsoleSize.y - 1;
|
||||||
for (size_t i = 1; i < vConsoleSize.y; i++)
|
for (size_t i = 1; i < 1000; i++)
|
||||||
sConsoleLines[i - 1] = sConsoleLines[i];
|
sConsoleLines[i - 1] = sConsoleLines[i];
|
||||||
sConsoleLines[vConsoleCursor.y].clear();
|
sConsoleLines[vConsoleCursor.y].clear();
|
||||||
}
|
}
|
||||||
@ -3590,6 +3590,13 @@ namespace olc
|
|||||||
TypeCharacter(c);
|
TypeCharacter(c);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(GetMouseWheel()>0||GetKey(olc::PG_UP).bPressed)){
|
||||||
|
nConsoleScroll=std::clamp(nConsoleScroll+vConsoleSize.y,0,1000-vConsoleSize.y);
|
||||||
|
} else
|
||||||
|
if(GetMouseWheel()<0||GetKey(olc::PG_DN).bPressed)){
|
||||||
|
nConsoleScroll=std::clamp(nConsoleScroll-vConsoleSize.y,0,1000-vConsoleSize.y);
|
||||||
|
}
|
||||||
|
|
||||||
// Draw Shadow
|
// Draw Shadow
|
||||||
GradientFillRectDecal({ 0,0 }, olc::vf2d(vScreenSize), olc::PixelF(0, 0, 0.5f, 0.5f), olc::PixelF(0, 0, 0.25f, 0.5f), olc::PixelF(0, 0, 0.25f, 0.5f), olc::PixelF(0, 0, 0.25f, 0.5f));
|
GradientFillRectDecal({ 0,0 }, olc::vf2d(vScreenSize), olc::PixelF(0, 0, 0.5f, 0.5f), olc::PixelF(0, 0, 0.25f, 0.5f), olc::PixelF(0, 0, 0.25f, 0.5f), olc::PixelF(0, 0, 0.25f, 0.5f));
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user