Fix Audio issue with nan positions. Enemies can squeeze through their buildings.
This commit is contained in:
parent
25b1e808a1
commit
22c2c93126
@ -212,6 +212,7 @@ RAMBank::RAMBank(PixelGameEngine*pge,vf2d pos,std::vector<std::unique_ptr<Render
|
|||||||
allocatorManager.colText = olc::WHITE;
|
allocatorManager.colText = olc::WHITE;
|
||||||
allocatorButton = new QuickGUI::ImageButton(allocatorManager,*IMAGES[UNIT_ALLOCATOR],{0.5f,0.5f},pos-vf2d{8,48},{20,20});
|
allocatorButton = new QuickGUI::ImageButton(allocatorManager,*IMAGES[UNIT_ALLOCATOR],{0.5f,0.5f},pos-vf2d{8,48},{20,20});
|
||||||
isRAMBank=true;
|
isRAMBank=true;
|
||||||
|
platformStructure=true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void RAMBank::Attack(Unit&victim,std::vector<std::shared_ptr<Unit>>&otherUnits ,std::vector<std::unique_ptr<Audio>>&SOUNDS){
|
void RAMBank::Attack(Unit&victim,std::vector<std::shared_ptr<Unit>>&otherUnits ,std::vector<std::unique_ptr<Audio>>&SOUNDS){
|
||||||
@ -314,6 +315,7 @@ std::vector<Memory> _Platform::resourceCost={{HEALTH,6}};
|
|||||||
_Platform::_Platform(PixelGameEngine*pge,vf2d pos,std::vector<std::unique_ptr<Renderable>>&IMAGES,bool friendly,bool moveable)
|
_Platform::_Platform(PixelGameEngine*pge,vf2d pos,std::vector<std::unique_ptr<Renderable>>&IMAGES,bool friendly,bool moveable)
|
||||||
:Unit(pge,_Platform::resourceCost,pos,24,*IMAGES[PLATFORM],CONSTANT::ATTACKER_TARGET_COL,CONSTANT::ATTACKER_ATTACK_COL,friendly,false){
|
:Unit(pge,_Platform::resourceCost,pos,24,*IMAGES[PLATFORM],CONSTANT::ATTACKER_TARGET_COL,CONSTANT::ATTACKER_ATTACK_COL,friendly,false){
|
||||||
isPlatform=true;
|
isPlatform=true;
|
||||||
|
platformStructure=true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void _Platform::Attack(Unit&victim,std::vector<std::shared_ptr<Unit>>&otherUnits ,std::vector<std::unique_ptr<Audio>>&SOUNDS){};
|
void _Platform::Attack(Unit&victim,std::vector<std::shared_ptr<Unit>>&otherUnits ,std::vector<std::unique_ptr<Audio>>&SOUNDS){};
|
||||||
@ -360,7 +362,9 @@ std::string Refresher::unitDescription="Repairs missing bits to surrounding unit
|
|||||||
std::vector<Memory> Refresher::resourceCost={{ATKSPD,3},{RANGE,1},{PROCEDURE,8},{HEALTH,4}};
|
std::vector<Memory> Refresher::resourceCost={{ATKSPD,3},{RANGE,1},{PROCEDURE,8},{HEALTH,4}};
|
||||||
Refresher::Refresher(PixelGameEngine*pge,vf2d pos,std::vector<std::unique_ptr<Renderable>>&IMAGES,bool friendly,bool moveable)
|
Refresher::Refresher(PixelGameEngine*pge,vf2d pos,std::vector<std::unique_ptr<Renderable>>&IMAGES,bool friendly,bool moveable)
|
||||||
:Unit(pge,Refresher::resourceCost,pos,24,*IMAGES[REFRESHER],CONSTANT::ATTACKER_TARGET_COL,CONSTANT::ATTACKER_ATTACK_COL,friendly,false
|
:Unit(pge,Refresher::resourceCost,pos,24,*IMAGES[REFRESHER],CONSTANT::ATTACKER_TARGET_COL,CONSTANT::ATTACKER_ATTACK_COL,friendly,false
|
||||||
,true,false){}
|
,true,false){
|
||||||
|
platformStructure=true;
|
||||||
|
}
|
||||||
|
|
||||||
void Refresher::Attack(Unit&victim,std::vector<std::shared_ptr<Unit>>&otherUnits ,std::vector<std::unique_ptr<Audio>>&SOUNDS){
|
void Refresher::Attack(Unit&victim,std::vector<std::shared_ptr<Unit>>&otherUnits ,std::vector<std::unique_ptr<Audio>>&SOUNDS){
|
||||||
target.reset(); //Doesn't acquire a target.
|
target.reset(); //Doesn't acquire a target.
|
||||||
@ -393,7 +397,9 @@ std::string Turret::unitName="Turret";
|
|||||||
std::string Turret::unitDescription="Automatically targets attack and movement speed memory ranges before others.";
|
std::string Turret::unitDescription="Automatically targets attack and movement speed memory ranges before others.";
|
||||||
std::vector<Memory> Turret::resourceCost={{ATKSPD,4},{RANGE,5},{HEALTH,6},{PROCEDURE,16}};
|
std::vector<Memory> Turret::resourceCost={{ATKSPD,4},{RANGE,5},{HEALTH,6},{PROCEDURE,16}};
|
||||||
Turret::Turret(PixelGameEngine*pge,vf2d pos,std::vector<std::unique_ptr<Renderable>>&IMAGES,bool friendly,bool moveable)
|
Turret::Turret(PixelGameEngine*pge,vf2d pos,std::vector<std::unique_ptr<Renderable>>&IMAGES,bool friendly,bool moveable)
|
||||||
:Unit(pge,Turret::resourceCost,pos,24,*IMAGES[TURRET],CONSTANT::ATTACKER_TARGET_COL,CONSTANT::ATTACKER_ATTACK_COL,friendly,false){}
|
:Unit(pge,Turret::resourceCost,pos,24,*IMAGES[TURRET],CONSTANT::ATTACKER_TARGET_COL,CONSTANT::ATTACKER_ATTACK_COL,friendly,false){
|
||||||
|
platformStructure=true;
|
||||||
|
}
|
||||||
|
|
||||||
void Turret::Attack(Unit&victim,std::vector<std::shared_ptr<Unit>>&otherUnits ,std::vector<std::unique_ptr<Audio>>&SOUNDS){
|
void Turret::Attack(Unit&victim,std::vector<std::shared_ptr<Unit>>&otherUnits ,std::vector<std::unique_ptr<Audio>>&SOUNDS){
|
||||||
if(victim.GetMoveSpd()>0){
|
if(victim.GetMoveSpd()>0){
|
||||||
@ -438,7 +444,9 @@ std::string MemoryGuard::unitDescription="Reduces the chance of bit modification
|
|||||||
std::vector<Memory> MemoryGuard::resourceCost={{HEALTH,10},{ATKSPD,4},{RANGE,4},{PROCEDURE,12}};
|
std::vector<Memory> MemoryGuard::resourceCost={{HEALTH,10},{ATKSPD,4},{RANGE,4},{PROCEDURE,12}};
|
||||||
MemoryGuard::MemoryGuard(PixelGameEngine*pge,vf2d pos,std::vector<std::unique_ptr<Renderable>>&IMAGES,bool friendly,bool moveable)
|
MemoryGuard::MemoryGuard(PixelGameEngine*pge,vf2d pos,std::vector<std::unique_ptr<Renderable>>&IMAGES,bool friendly,bool moveable)
|
||||||
:Unit(pge,MemoryGuard::resourceCost,pos,24,*IMAGES[MEMORY_GUARD],CONSTANT::ATTACKER_TARGET_COL,CONSTANT::ATTACKER_ATTACK_COL,friendly,false
|
:Unit(pge,MemoryGuard::resourceCost,pos,24,*IMAGES[MEMORY_GUARD],CONSTANT::ATTACKER_TARGET_COL,CONSTANT::ATTACKER_ATTACK_COL,friendly,false
|
||||||
,true,false){}
|
,true,false){
|
||||||
|
platformStructure=true;
|
||||||
|
}
|
||||||
|
|
||||||
void MemoryGuard::Attack(Unit&victim,std::vector<std::shared_ptr<Unit>>&otherUnits ,std::vector<std::unique_ptr<Audio>>&SOUNDS){
|
void MemoryGuard::Attack(Unit&victim,std::vector<std::shared_ptr<Unit>>&otherUnits ,std::vector<std::unique_ptr<Audio>>&SOUNDS){
|
||||||
target.reset(); //Doesn't acquire a target.
|
target.reset(); //Doesn't acquire a target.
|
||||||
@ -1126,3 +1134,7 @@ Unit*Unit::GetBuildUnit(){
|
|||||||
bool Unit::IsRAMBank(){
|
bool Unit::IsRAMBank(){
|
||||||
return isRAMBank;
|
return isRAMBank;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool Unit::IsPlatformStructure(){
|
||||||
|
return platformStructure;
|
||||||
|
}
|
@ -103,6 +103,8 @@ public:
|
|||||||
Marker atkSpd={};
|
Marker atkSpd={};
|
||||||
Marker moveSpd={};
|
Marker moveSpd={};
|
||||||
Marker procedure={};
|
Marker procedure={};
|
||||||
|
bool platformStructure=false;
|
||||||
|
bool IsPlatformStructure();
|
||||||
|
|
||||||
std::vector<bool>& operator <<=(const int n){
|
std::vector<bool>& operator <<=(const int n){
|
||||||
for(int i=0;i<GetMemorySize()-1;i++){
|
for(int i=0;i<GetMemorySize()-1;i++){
|
||||||
|
@ -890,9 +890,18 @@ void VirusAttack::CollisionChecking(std::shared_ptr<Unit>u,std::shared_ptr<Unit>
|
|||||||
if(u->GetPos().y>WORLD_SIZE.y*CONSTANT::TILE_SIZE.y){
|
if(u->GetPos().y>WORLD_SIZE.y*CONSTANT::TILE_SIZE.y){
|
||||||
u->SetPos({u->GetPos().x,float(WORLD_SIZE.y*CONSTANT::TILE_SIZE.y)});
|
u->SetPos({u->GetPos().x,float(WORLD_SIZE.y*CONSTANT::TILE_SIZE.y)});
|
||||||
}
|
}
|
||||||
if(u!=u2&&geom2d::overlaps(geom2d::circle<float>(u->GetPos(),u->GetUnitSize().x/2),geom2d::circle<float>(u2->GetPos(),u2->GetUnitSize().x/2))){
|
bool bothAreEnemies=!u->IsFriendly()&&!u2->IsFriendly();
|
||||||
|
float u1Radius=u->GetUnitSize().x/2;
|
||||||
|
float u2Radius=u2->GetUnitSize().x/2;
|
||||||
|
if(bothAreEnemies){
|
||||||
|
if(u->IsPlatformStructure()^u2->IsPlatformStructure()){
|
||||||
|
u1Radius=u->IsPlatformStructure()?u->GetUnitSize().x/4:u1Radius;
|
||||||
|
u2Radius=u2->IsPlatformStructure()?u2->GetUnitSize().x/4:u2Radius;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(u!=u2&&geom2d::overlaps(geom2d::circle<float>(u->GetPos(),u1Radius),geom2d::circle<float>(u2->GetPos(),u2Radius))){
|
||||||
geom2d::line<float>collisionLine(u->GetPos(),u2->GetPos()+vf2d{0.001,0.001});
|
geom2d::line<float>collisionLine(u->GetPos(),u2->GetPos()+vf2d{0.001,0.001});
|
||||||
float maxDist=u->GetUnitSize().x/2+u2->GetUnitSize().x/2;
|
float maxDist=u1Radius+u1Radius;
|
||||||
float dist=maxDist-collisionLine.length();
|
float dist=maxDist-collisionLine.length();
|
||||||
vf2d dir=collisionLine.vector().norm();
|
vf2d dir=collisionLine.vector().norm();
|
||||||
if(u->IsMoveable()||(!u->IsMoveable()&&!u2->IsMoveable())){
|
if(u->IsMoveable()||(!u->IsMoveable()&&!u2->IsMoveable())){
|
||||||
|
@ -166,7 +166,7 @@ int olcPGEX_AudioSource::PlayCentered(float speed, float vol, bool looping, bool
|
|||||||
|
|
||||||
int olcPGEX_AudioSource::Play(vf2d pos, float speed, float vol, bool looping, bool paused)
|
int olcPGEX_AudioSource::Play(vf2d pos, float speed, float vol, bool looping, bool paused)
|
||||||
{
|
{
|
||||||
if(!AL->bSoundOn)return -1;
|
if(!AL->bSoundOn||isnan(pos.x)||isnan(pos.y))return -1;
|
||||||
// Set parameters
|
// Set parameters
|
||||||
fPlaySpeed = speed;
|
fPlaySpeed = speed;
|
||||||
fVolume = vol*std::max(0.f,abs(1-std::min(1.0f,(AL->GetDistance(pos)/1024.f))));
|
fVolume = vol*std::max(0.f,abs(1-std::min(1.0f,(AL->GetDistance(pos)/1024.f))));
|
||||||
|
Loading…
x
Reference in New Issue
Block a user