Still ???
This commit is contained in:
parent
96f582b6bd
commit
22fdee85e4
@ -40,7 +40,7 @@ enum Image{
|
||||
GUIDE,
|
||||
ROUND_BAR,
|
||||
SEGMENT_BAR,
|
||||
HOODED_FIGURE=39,
|
||||
HOODED_FIGURE,
|
||||
SPOOK_HOODED_FIGURE,
|
||||
};
|
||||
|
||||
|
@ -1,7 +1,8 @@
|
||||
#include "Scenario.h"
|
||||
|
||||
Scenario::Scenario(VirusAttack*game)
|
||||
:game(game){
|
||||
extern VirusAttack*game;
|
||||
|
||||
Scenario::Scenario(){
|
||||
dialog.SetVisible(false);
|
||||
}
|
||||
Scenario::~Scenario(){}
|
||||
@ -16,8 +17,7 @@ void Scenario::_Draw(){
|
||||
Draw();
|
||||
}
|
||||
|
||||
Stage1::Stage1(VirusAttack*game)
|
||||
:Scenario(game){}
|
||||
Stage1::Stage1(){}
|
||||
|
||||
Stage1::~Stage1(){}
|
||||
|
||||
@ -29,7 +29,7 @@ void Stage1::Start(){
|
||||
void Stage1::Update(){
|
||||
switch(state){
|
||||
case 0:{
|
||||
dialog.Initialize("Hello Hacker, thank you for taking on this request for me.",{24,64},"",&game->HOODED_FIGURE_IMG,{378,28});
|
||||
dialog.Initialize("Hello Hacker, thank you for taking on this request for me.",{24,64},"",&game->IMAGES[SEGMENT_BAR],{378,28});
|
||||
}break;
|
||||
}
|
||||
}
|
||||
|
@ -3,7 +3,7 @@
|
||||
|
||||
class Scenario{
|
||||
public:
|
||||
Scenario(VirusAttack*game);
|
||||
Scenario();
|
||||
virtual ~Scenario();
|
||||
virtual void Start();
|
||||
void _Update();
|
||||
@ -11,7 +11,6 @@ public:
|
||||
void _Draw();
|
||||
virtual void Draw()=0;
|
||||
protected:
|
||||
VirusAttack*game;
|
||||
int state=0;
|
||||
Textbox dialog;
|
||||
float initialWaitTimer=3;
|
||||
@ -19,7 +18,7 @@ protected:
|
||||
|
||||
class Stage1:public Scenario{
|
||||
public:
|
||||
Stage1(VirusAttack*game);
|
||||
Stage1();
|
||||
~Stage1();
|
||||
void Start()override;
|
||||
void Update()override;
|
||||
|
@ -70,7 +70,7 @@ void Textbox::Update(PixelGameEngine*pge){
|
||||
}
|
||||
|
||||
|
||||
void Textbox::Draw(PixelGameEngine*pge,Resources&resources,std::map<Image,Renderable>&IMAGES,int totalUsedMemory,int memoryLimit){
|
||||
void Textbox::Draw(PixelGameEngine*pge,Resources&resources,std::vector<Renderable>&IMAGES,int totalUsedMemory,int memoryLimit){
|
||||
if(visible){
|
||||
geom2d::rect<float>boxRect={pos-vf2d{3,3},maxSize+vf2d{6,6}};
|
||||
if(resourceCost.size()>0){
|
||||
@ -173,7 +173,7 @@ void Textbox::SetVisible(bool visible){
|
||||
}
|
||||
}
|
||||
|
||||
void Textbox::UpdateAndDraw(vf2d pos,PixelGameEngine*pge,Resources&resources,std::map<Image,Renderable>&IMAGES,int totalUsedMemory,int memoryLimit){
|
||||
void Textbox::UpdateAndDraw(vf2d pos,PixelGameEngine*pge,Resources&resources,std::vector<Renderable>&IMAGES,int totalUsedMemory,int memoryLimit){
|
||||
UpdatePosition(pos);
|
||||
Update(pge);
|
||||
Draw(pge,resources,IMAGES,totalUsedMemory,memoryLimit);
|
||||
|
@ -27,7 +27,7 @@ public:
|
||||
Textbox();
|
||||
void Initialize(std::string text,vf2d pos={},std::string headerText="",Renderable*boxImg=nullptr,vf2d maxSize={120,1},std::vector<Memory>resourceCost={},float letterDisplayDelay=0.01);
|
||||
|
||||
void UpdateAndDraw(vf2d pos,PixelGameEngine*pge,Resources&resources,std::map<Image,Renderable>&IMAGES,int totalUsedMemory,int memoryLimit);
|
||||
void UpdateAndDraw(vf2d pos,PixelGameEngine*pge,Resources&resources,std::vector<Renderable>&IMAGES,int totalUsedMemory,int memoryLimit);
|
||||
std::string&GetCurrentString();
|
||||
void SetVisible(bool visible);
|
||||
vf2d GetSize();
|
||||
@ -36,6 +36,6 @@ public:
|
||||
private:
|
||||
void Update(PixelGameEngine*pge);
|
||||
void UpdatePosition(vf2d newPos);
|
||||
void Draw(PixelGameEngine*pge,Resources&resources,std::map<Image,Renderable>&IMAGES,int totalUsedMemory,int memoryLimit);
|
||||
void Draw(PixelGameEngine*pge,Resources&resources,std::vector<Renderable>&IMAGES,int totalUsedMemory,int memoryLimit);
|
||||
void SetDefaults();
|
||||
};
|
@ -22,7 +22,7 @@ _Platform::~_Platform(){};
|
||||
std::string LeftShifter::unitName="Left Shifter";
|
||||
std::string LeftShifter::unitDescription="Shifts target memory 1 bit to the left.";
|
||||
std::vector<Memory> LeftShifter::resourceCost={{RANGE,2},{ATKSPD,2},{MOVESPD,6},{PROCEDURE,1},{HEALTH,4}};
|
||||
LeftShifter::LeftShifter(PixelGameEngine*pge,vf2d pos,std::map<Image,Renderable>&IMAGES,bool friendly,bool moveable)
|
||||
LeftShifter::LeftShifter(PixelGameEngine*pge,vf2d pos,std::vector<Renderable>&IMAGES,bool friendly,bool moveable)
|
||||
:Unit(pge,LeftShifter::resourceCost,pos,12,IMAGES[LEFT_SHIFTER],CONSTANT::ATTACKER_TARGET_COL,CONSTANT::ATTACKER_ATTACK_COL,friendly,moveable){}
|
||||
|
||||
void LeftShifter::Attack(Unit&victim,std::vector<std::shared_ptr<Unit>>&otherUnits){
|
||||
@ -32,7 +32,7 @@ void LeftShifter::Attack(Unit&victim,std::vector<std::shared_ptr<Unit>>&otherUni
|
||||
std::string RightShifter::unitName="Right Shifter";
|
||||
std::string RightShifter::unitDescription="Shifts target memory 1 bit to the right.";
|
||||
std::vector<Memory> RightShifter::resourceCost={{HEALTH,4},{RANGE,2},{ATKSPD,2},{MOVESPD,6},{PROCEDURE,1}};
|
||||
RightShifter::RightShifter(PixelGameEngine*pge,vf2d pos,std::map<Image,Renderable>&IMAGES,bool friendly,bool moveable)
|
||||
RightShifter::RightShifter(PixelGameEngine*pge,vf2d pos,std::vector<Renderable>&IMAGES,bool friendly,bool moveable)
|
||||
:Unit(pge,RightShifter::resourceCost,pos,12,IMAGES[RIGHT_SHIFTER],CONSTANT::ATTACKER_TARGET_COL,CONSTANT::ATTACKER_ATTACK_COL,friendly,moveable){}
|
||||
|
||||
void RightShifter::Attack(Unit&victim,std::vector<std::shared_ptr<Unit>>&otherUnits){
|
||||
@ -42,7 +42,7 @@ void RightShifter::Attack(Unit&victim,std::vector<std::shared_ptr<Unit>>&otherUn
|
||||
std::string BitRestorer::unitName="Bit Restorer";
|
||||
std::string BitRestorer::unitDescription="Randomly restores 1 missing bit to a target.";
|
||||
std::vector<Memory> BitRestorer::resourceCost={{PROCEDURE,6},{RANGE,1},{ATKSPD,1},{MOVESPD,2},{HEALTH,2}};
|
||||
BitRestorer::BitRestorer(PixelGameEngine*pge,vf2d pos,std::map<Image,Renderable>&IMAGES,bool friendly,bool moveable)
|
||||
BitRestorer::BitRestorer(PixelGameEngine*pge,vf2d pos,std::vector<Renderable>&IMAGES,bool friendly,bool moveable)
|
||||
:Unit(pge,BitRestorer::resourceCost,pos,12,IMAGES[BIT_RESTORER],CONSTANT::HEALER_TARGET_COL,CONSTANT::HEALER_ATTACK_COL,friendly,moveable,true,false){}
|
||||
|
||||
void BitRestorer::Attack(Unit&victim,std::vector<std::shared_ptr<Unit>>&otherUnits){
|
||||
@ -84,7 +84,7 @@ void BitRestorer::AttemptToHealOtherAllies(std::vector<std::shared_ptr<Unit>>&ot
|
||||
std::string MemorySwapper::unitName="Memory Swapper";
|
||||
std::string MemorySwapper::unitDescription="Flips the orientation of all bits of a target around.";
|
||||
std::vector<Memory> MemorySwapper::resourceCost={{RANGE,3},{ATKSPD,1},{HEALTH,3},{PROCEDURE,3},{MOVESPD,4}};
|
||||
MemorySwapper::MemorySwapper(PixelGameEngine*pge,vf2d pos,std::map<Image,Renderable>&IMAGES,bool friendly,bool moveable)
|
||||
MemorySwapper::MemorySwapper(PixelGameEngine*pge,vf2d pos,std::vector<Renderable>&IMAGES,bool friendly,bool moveable)
|
||||
:Unit(pge,MemorySwapper::resourceCost,pos,12,IMAGES[MEMORY_SWAPPER],CONSTANT::ATTACKER_TARGET_COL,CONSTANT::ATTACKER_ATTACK_COL,friendly,moveable,true){
|
||||
autoAcquireFriendlyTarget=false;
|
||||
}
|
||||
@ -128,7 +128,7 @@ void MemorySwapper::Attack(Unit&victim,std::vector<std::shared_ptr<Unit>>&otherU
|
||||
std::string Corrupter::unitName="Corrupter";
|
||||
std::string Corrupter::unitDescription="Chooses a random bit and negates it on a target.";
|
||||
std::vector<Memory> Corrupter::resourceCost={{ATKSPD,3},{RANGE,1},{PROCEDURE,8},{MOVESPD,8},{HEALTH,4}};
|
||||
Corrupter::Corrupter(PixelGameEngine*pge,vf2d pos,std::map<Image,Renderable>&IMAGES,bool friendly,bool moveable)
|
||||
Corrupter::Corrupter(PixelGameEngine*pge,vf2d pos,std::vector<Renderable>&IMAGES,bool friendly,bool moveable)
|
||||
:Unit(pge,Corrupter::resourceCost,pos,12,IMAGES[CORRUPTER],CONSTANT::ATTACKER_TARGET_COL,CONSTANT::ATTACKER_ATTACK_COL,friendly,moveable){}
|
||||
|
||||
void Corrupter::Attack(Unit&victim,std::vector<std::shared_ptr<Unit>>&otherUnits){
|
||||
@ -140,7 +140,7 @@ void Corrupter::Attack(Unit&victim,std::vector<std::shared_ptr<Unit>>&otherUnits
|
||||
std::string MemoryAllocator::unitName="Memory Allocator";
|
||||
std::string MemoryAllocator::unitDescription="A unit that builds other units.";
|
||||
std::vector<Memory> MemoryAllocator::resourceCost={{RANGE,1},{ATKSPD,1},{MOVESPD,2},{PROCEDURE,1},{HEALTH,1}};
|
||||
MemoryAllocator::MemoryAllocator(PixelGameEngine*pge,vf2d pos,std::map<Image,Renderable>&IMAGES,bool friendly,bool moveable)
|
||||
MemoryAllocator::MemoryAllocator(PixelGameEngine*pge,vf2d pos,std::vector<Renderable>&IMAGES,bool friendly,bool moveable)
|
||||
:Unit(pge,MemoryAllocator::resourceCost,pos,12,IMAGES[UNIT_ALLOCATOR],CONSTANT::ATTACKER_TARGET_COL,CONSTANT::ATTACKER_ATTACK_COL,friendly,true,false){
|
||||
isAllocator=true;
|
||||
}
|
||||
@ -163,7 +163,7 @@ void MemoryAllocator::Update(PixelGameEngine*pge,std::map<Sound,std::unique_ptr<
|
||||
}
|
||||
}
|
||||
|
||||
void MemoryAllocator::Draw(TileTransformedView&game,std::map<Image,Renderable>&IMAGES){
|
||||
void MemoryAllocator::Draw(TileTransformedView&game,std::vector<Renderable>&IMAGES){
|
||||
if(IsBuilding()){
|
||||
game.GetPGE()->SetDrawTarget(img.Sprite());
|
||||
game.GetPGE()->Clear(BLANK);
|
||||
@ -185,7 +185,7 @@ void MemoryAllocator::Draw(TileTransformedView&game,std::map<Image,Renderable>&I
|
||||
std::string RAMBank::unitName="RAM Bank";
|
||||
std::string RAMBank::unitDescription="Allows for the construction of Memory Allocators.";
|
||||
std::vector<Memory> RAMBank::resourceCost={{PROCEDURE,25},{HEALTH,16}};
|
||||
RAMBank::RAMBank(PixelGameEngine*pge,vf2d pos,std::map<Image,Renderable>&IMAGES,bool friendly)
|
||||
RAMBank::RAMBank(PixelGameEngine*pge,vf2d pos,std::vector<Renderable>&IMAGES,bool friendly)
|
||||
:Unit(pge,RAMBank::resourceCost,pos,41,IMAGES[RAM_BANK],WHITE,WHITE,friendly,false
|
||||
,false,false
|
||||
),randomOffset({util::random(128),util::random(128)}),matrixImg(IMAGES[MATRIX]),
|
||||
@ -226,13 +226,13 @@ void RAMBank::Update(PixelGameEngine*pge,std::map<Sound,std::unique_ptr<Audio>>&
|
||||
pge->SetDrawTarget(nullptr);
|
||||
}
|
||||
|
||||
void RAMBank::DrawHud(TileTransformedView&game,std::map<Image,Renderable>&IMAGES){
|
||||
void RAMBank::DrawHud(TileTransformedView&game,std::vector<Renderable>&IMAGES){
|
||||
if(IsSelected()){
|
||||
allocatorManager.DrawDecal(game);
|
||||
}
|
||||
}
|
||||
|
||||
void RAMBank::Draw(TileTransformedView&game,std::map<Image,Renderable>&IMAGES){
|
||||
void RAMBank::Draw(TileTransformedView&game,std::vector<Renderable>&IMAGES){
|
||||
game.DrawRotatedDecal(GetGhostPos(),img.Decal(),0,img.Sprite()->Size()/2,{1,1},GetUnitColor());
|
||||
if(IsSelected()){
|
||||
game.DrawRotatedDecal(GetGhostPos(),IMAGES[SELECTION_CIRCLE].Decal(),0,IMAGES[SELECTION_CIRCLE].Sprite()->Size()/2,vf2d(img.Sprite()->Size())/IMAGES[SELECTION_CIRCLE].Sprite()->Size(),WHITE);
|
||||
@ -261,7 +261,7 @@ void RAMBank::UpdateGUIState(TileTransformedView&game,Resources&player_resources
|
||||
allocatorButton->Enable(buttonEnabled);
|
||||
}
|
||||
|
||||
bool RAMBank::ClickHandled(TileTransformedView&game,Resources&player_resources,std::vector<std::shared_ptr<Unit>>&units,std::map<Image,Renderable>&IMAGES){
|
||||
bool RAMBank::ClickHandled(TileTransformedView&game,Resources&player_resources,std::vector<std::shared_ptr<Unit>>&units,std::vector<Renderable>&IMAGES){
|
||||
if(allocatorButton->bPressed){
|
||||
//First try to take one of each.
|
||||
if(player_resources.atkSpd>0&&player_resources.health>0&&player_resources.moveSpd>0&&player_resources.procedure>0&&player_resources.range>0){
|
||||
@ -298,7 +298,7 @@ bool RAMBank::ClickHandled(TileTransformedView&game,Resources&player_resources,s
|
||||
std::string _Platform::unitName="Platform";
|
||||
std::string _Platform::unitDescription="Anchored to the ground, this unit is an intermediate step for larger units.";
|
||||
std::vector<Memory> _Platform::resourceCost={{HEALTH,6}};
|
||||
_Platform::_Platform(PixelGameEngine*pge,vf2d pos,std::map<Image,Renderable>&IMAGES,bool friendly,bool moveable)
|
||||
_Platform::_Platform(PixelGameEngine*pge,vf2d pos,std::vector<Renderable>&IMAGES,bool friendly,bool moveable)
|
||||
:Unit(pge,_Platform::resourceCost,pos,24,IMAGES[PLATFORM],CONSTANT::ATTACKER_TARGET_COL,CONSTANT::ATTACKER_ATTACK_COL,friendly,false){
|
||||
isPlatform=true;
|
||||
}
|
||||
@ -319,7 +319,7 @@ void _Platform::Update(PixelGameEngine*pge,std::map<Sound,std::unique_ptr<Audio>
|
||||
}
|
||||
}
|
||||
|
||||
void _Platform::Draw(TileTransformedView&game,std::map<Image,Renderable>&IMAGES){
|
||||
void _Platform::Draw(TileTransformedView&game,std::vector<Renderable>&IMAGES){
|
||||
if(IsBuilding()){
|
||||
game.GetPGE()->SetDrawTarget(img.Sprite());
|
||||
game.GetPGE()->Clear(BLANK);
|
||||
@ -341,7 +341,7 @@ void _Platform::Draw(TileTransformedView&game,std::map<Image,Renderable>&IMAGES)
|
||||
std::string Refresher::unitName="Refresher";
|
||||
std::string Refresher::unitDescription="Repairs missing bits to surrounding units.";
|
||||
std::vector<Memory> Refresher::resourceCost={{ATKSPD,3},{RANGE,1},{PROCEDURE,8},{HEALTH,4}};
|
||||
Refresher::Refresher(PixelGameEngine*pge,vf2d pos,std::map<Image,Renderable>&IMAGES,bool friendly,bool moveable)
|
||||
Refresher::Refresher(PixelGameEngine*pge,vf2d pos,std::vector<Renderable>&IMAGES,bool friendly,bool moveable)
|
||||
:Unit(pge,Refresher::resourceCost,pos,24,IMAGES[REFRESHER],CONSTANT::ATTACKER_TARGET_COL,CONSTANT::ATTACKER_ATTACK_COL,friendly,false
|
||||
,true,false){}
|
||||
|
||||
@ -366,7 +366,7 @@ void Refresher::Attack(Unit&victim,std::vector<std::shared_ptr<Unit>>&otherUnits
|
||||
std::string Turret::unitName="Turret";
|
||||
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}};
|
||||
Turret::Turret(PixelGameEngine*pge,vf2d pos,std::map<Image,Renderable>&IMAGES,bool friendly,bool moveable)
|
||||
Turret::Turret(PixelGameEngine*pge,vf2d pos,std::vector<Renderable>&IMAGES,bool friendly,bool moveable)
|
||||
:Unit(pge,Turret::resourceCost,pos,24,IMAGES[TURRET],CONSTANT::ATTACKER_TARGET_COL,CONSTANT::ATTACKER_ATTACK_COL,friendly,false){}
|
||||
|
||||
void Turret::Attack(Unit&victim,std::vector<std::shared_ptr<Unit>>&otherUnits){
|
||||
@ -401,7 +401,7 @@ void Turret::Attack(Unit&victim,std::vector<std::shared_ptr<Unit>>&otherUnits){
|
||||
std::string MemoryGuard::unitName="Memory Guard";
|
||||
std::string MemoryGuard::unitDescription="Reduces the chance of bit modification for all surrounding units by 30%";
|
||||
std::vector<Memory> MemoryGuard::resourceCost={{HEALTH,10},{ATKSPD,4},{RANGE,4},{PROCEDURE,12}};
|
||||
MemoryGuard::MemoryGuard(PixelGameEngine*pge,vf2d pos,std::map<Image,Renderable>&IMAGES,bool friendly,bool moveable)
|
||||
MemoryGuard::MemoryGuard(PixelGameEngine*pge,vf2d pos,std::vector<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
|
||||
,true,false){}
|
||||
|
||||
@ -451,7 +451,7 @@ Unit::Unit(PixelGameEngine*pge,std::vector<Memory>memory,vf2d pos,float radius,R
|
||||
targetingLine.Create(25,24,false,false);
|
||||
}
|
||||
|
||||
void Unit::DrawRangeIndicator(PixelGameEngine*pge,TileTransformedView&game,std::map<Image,Renderable>&IMAGES){
|
||||
void Unit::DrawRangeIndicator(PixelGameEngine*pge,TileTransformedView&game,std::vector<Renderable>&IMAGES){
|
||||
if(!CanInteractWithAllies()&&!CanInteractWithEnemies())return;
|
||||
float dist=geom2d::line<float>(game.ScreenToWorld(pge->GetMousePos()),GetGhostPos()).length();
|
||||
float range=12*(GetRange()+1);
|
||||
@ -487,16 +487,16 @@ void Unit::DrawRangeIndicator(PixelGameEngine*pge,TileTransformedView&game,std::
|
||||
}
|
||||
}
|
||||
|
||||
void Unit::Draw(TileTransformedView&game,std::map<Image,Renderable>&IMAGES){
|
||||
void Unit::Draw(TileTransformedView&game,std::vector<Renderable>&IMAGES){
|
||||
game.DrawRotatedDecal(GetGhostPos(),img.Decal(),0,img.Sprite()->Size()/2,{1,1},GetUnitColor());
|
||||
if(IsSelected()){
|
||||
game.DrawRotatedDecal(GetGhostPos(),IMAGES[SELECTION_CIRCLE].Decal(),0,IMAGES[SELECTION_CIRCLE].Sprite()->Size()/2,vf2d(img.Sprite()->Size())/IMAGES[SELECTION_CIRCLE].Sprite()->Size(),WHITE);
|
||||
}
|
||||
}
|
||||
|
||||
void Unit::DrawHud(TileTransformedView&game,std::map<Image,Renderable>&IMAGES){}
|
||||
void Unit::DrawHud(TileTransformedView&game,std::vector<Renderable>&IMAGES){}
|
||||
|
||||
void Unit::_DrawHud(TileTransformedView&game,std::map<Image,Renderable>&IMAGES){
|
||||
void Unit::_DrawHud(TileTransformedView&game,std::vector<Renderable>&IMAGES){
|
||||
DrawHud(game,IMAGES);
|
||||
int initialBarX=ghostPos.x-GetMemorySize()/2*CONSTANT::BAR_SQUARE_SIZE.x-CONSTANT::BAR_SQUARE_SIZE.x/2;
|
||||
int initialBarY=ghostPos.y-CONSTANT::BAR_SQUARE_SIZE.y-img.Sprite()->height/2-2;
|
||||
@ -552,7 +552,7 @@ void Unit::_DrawHud(TileTransformedView&game,std::map<Image,Renderable>&IMAGES){
|
||||
}
|
||||
}
|
||||
|
||||
void Unit::DrawUnitDamageStats(PixelGameEngine*pge,TileTransformedView&game,std::map<Image,Renderable>&IMAGES){
|
||||
void Unit::DrawUnitDamageStats(PixelGameEngine*pge,TileTransformedView&game,std::vector<Renderable>&IMAGES){
|
||||
if(!target.expired()){
|
||||
geom2d::line<float>lineToTarget(pos,target.lock()->pos);
|
||||
lineToTarget.start=lineToTarget.rpoint(GetUnitSize().x/2);
|
||||
@ -652,7 +652,7 @@ void Unit::_RunAI(PixelGameEngine*pge){
|
||||
RunAI(pge);
|
||||
}
|
||||
|
||||
void Unit::_Update(PixelGameEngine*pge,std::map<Sound,std::unique_ptr<Audio>>&SOUNDS,Resources&player_resources,Resources&enemy_resources,std::vector<std::unique_ptr<Unit>>&queuedUnits,std::array<float,5>&resourceGainTimer,std::vector<ResourceGainIcon>&resourceGainIcons,std::map<Image,Renderable>&IMAGES){
|
||||
void Unit::_Update(PixelGameEngine*pge,std::map<Sound,std::unique_ptr<Audio>>&SOUNDS,Resources&player_resources,Resources&enemy_resources,std::vector<std::unique_ptr<Unit>>&queuedUnits,std::array<float,5>&resourceGainTimer,std::vector<ResourceGainIcon>&resourceGainIcons,std::vector<Renderable>&IMAGES){
|
||||
if(!target.expired()){
|
||||
auto ptrTarget=target.lock();
|
||||
if(!InRange(ptrTarget)&&CanMove()){
|
||||
@ -801,7 +801,7 @@ void Unit::SetPos(vf2d newPos){
|
||||
pos=newPos;
|
||||
}
|
||||
|
||||
void Unit::AttemptAttack(std::weak_ptr<Unit>attacker,std::weak_ptr<Unit>unit,std::vector<std::shared_ptr<Unit>>&otherUnits,std::vector<DebuffIcon>&debuffIcons,std::map<Image,Renderable>&IMAGES){
|
||||
void Unit::AttemptAttack(std::weak_ptr<Unit>attacker,std::weak_ptr<Unit>unit,std::vector<std::shared_ptr<Unit>>&otherUnits,std::vector<DebuffIcon>&debuffIcons,std::vector<Renderable>&IMAGES){
|
||||
if(reloadTimer>0)return;
|
||||
std::weak_ptr<Unit>finalTarget;
|
||||
if(!unit.expired()){
|
||||
@ -944,7 +944,7 @@ Pixel Unit::GetUnitColor(){
|
||||
}
|
||||
}
|
||||
|
||||
bool Unit::ClickHandled(TileTransformedView&game,Resources&player_resources,std::vector<std::shared_ptr<Unit>>&units,std::map<Image,Renderable>&IMAGES){
|
||||
bool Unit::ClickHandled(TileTransformedView&game,Resources&player_resources,std::vector<std::shared_ptr<Unit>>&units,std::vector<Renderable>&IMAGES){
|
||||
return false;
|
||||
};
|
||||
|
||||
|
@ -53,9 +53,9 @@ public:
|
||||
std::vector<bool>savedMemory;
|
||||
virtual void Update(PixelGameEngine*pge,std::map<Sound,std::unique_ptr<Audio>>&SOUNDS,std::vector<std::unique_ptr<Unit>>&queuedUnits);
|
||||
virtual void Attack(Unit&victim,std::vector<std::shared_ptr<Unit>>&otherUnits)=0;
|
||||
virtual void Draw(TileTransformedView&game,std::map<Image,Renderable>&IMAGES);
|
||||
virtual void DrawHud(TileTransformedView&game,std::map<Image,Renderable>&IMAGES);
|
||||
void _DrawHud(TileTransformedView&game,std::map<Image,Renderable>&IMAGES);
|
||||
virtual void Draw(TileTransformedView&game,std::vector<Renderable>&IMAGES);
|
||||
virtual void DrawHud(TileTransformedView&game,std::vector<Renderable>&IMAGES);
|
||||
void _DrawHud(TileTransformedView&game,std::vector<Renderable>&IMAGES);
|
||||
virtual void OnDeath(std::map<Sound,std::unique_ptr<Audio>>&SOUNDS);
|
||||
bool IsFriendly();
|
||||
bool IsSelected();
|
||||
@ -67,14 +67,14 @@ public:
|
||||
void SetTargetUnit(std::weak_ptr<Unit>target);
|
||||
void SetTargetLocation(vf2d targetLoc);
|
||||
void SetPos(vf2d newPos);
|
||||
void AttemptAttack(std::weak_ptr<Unit>attacker,std::weak_ptr<Unit>unit,std::vector<std::shared_ptr<Unit>>&otherUnits,std::vector<DebuffIcon>&debuffIcons,std::map<Image,Renderable>&IMAGES);
|
||||
void AttemptAttack(std::weak_ptr<Unit>attacker,std::weak_ptr<Unit>unit,std::vector<std::shared_ptr<Unit>>&otherUnits,std::vector<DebuffIcon>&debuffIcons,std::vector<Renderable>&IMAGES);
|
||||
bool InFogOfWar();
|
||||
bool GhostInFogOfWar();
|
||||
void HideGhost();
|
||||
vf2d GetGhostPos();
|
||||
void _Update(PixelGameEngine*pge,std::map<Sound,std::unique_ptr<Audio>>&SOUNDS,Resources&player_resources,Resources&enemy_resources,std::vector<std::unique_ptr<Unit>>&queuedUnits,std::array<float,5>&resourceGainTimer,std::vector<ResourceGainIcon>&resourceGainIcons,std::map<Image,Renderable>&IMAGES);
|
||||
void _Update(PixelGameEngine*pge,std::map<Sound,std::unique_ptr<Audio>>&SOUNDS,Resources&player_resources,Resources&enemy_resources,std::vector<std::unique_ptr<Unit>>&queuedUnits,std::array<float,5>&resourceGainTimer,std::vector<ResourceGainIcon>&resourceGainIcons,std::vector<Renderable>&IMAGES);
|
||||
bool IsMoveable();
|
||||
void DrawRangeIndicator(PixelGameEngine*pge,TileTransformedView&game,std::map<Image,Renderable>&IMAGES);
|
||||
void DrawRangeIndicator(PixelGameEngine*pge,TileTransformedView&game,std::vector<Renderable>&IMAGES);
|
||||
bool CanInteractWithEnemies();
|
||||
bool CanInteractWithAllies();
|
||||
Renderable&GetImage();
|
||||
@ -83,13 +83,13 @@ public:
|
||||
virtual void Attacked(std::weak_ptr<Unit>attacker);
|
||||
void _Attacked(std::weak_ptr<Unit>attacker);
|
||||
std::weak_ptr<Unit>GetCurrentTarget();
|
||||
void DrawUnitDamageStats(PixelGameEngine*pge,TileTransformedView&game,std::map<Image,Renderable>&IMAGES);
|
||||
void DrawUnitDamageStats(PixelGameEngine*pge,TileTransformedView&game,std::vector<Renderable>&IMAGES);
|
||||
bool AutoAcquiresFriendlyTargets();
|
||||
bool CanMove();
|
||||
void SetTargetCollectionPoint(std::weak_ptr<CollectionPoint>targetCP,std::weak_ptr<Unit>self_ptr);
|
||||
Pixel GetUnitColor();
|
||||
virtual void UpdateGUIState(TileTransformedView&game,Resources&player_resources,Textbox&displayBox,bool&hovered,int totalUsedMemory,int availableMemory);
|
||||
virtual bool ClickHandled(TileTransformedView&game,Resources&player_resources,std::vector<std::shared_ptr<Unit>>&units,std::map<Image,Renderable>&IMAGES); //If you return true here, then the left click does not pass back to the main Virus Attack class.
|
||||
virtual bool ClickHandled(TileTransformedView&game,Resources&player_resources,std::vector<std::shared_ptr<Unit>>&units,std::vector<Renderable>&IMAGES); //If you return true here, then the left click does not pass back to the main Virus Attack class.
|
||||
bool IsAllocator();
|
||||
void SetBuildUnit(float buildTime,std::unique_ptr<Unit>finalUnit);
|
||||
bool IsBuilding();
|
||||
@ -162,7 +162,7 @@ private:
|
||||
};
|
||||
|
||||
struct LeftShifter:Unit{
|
||||
LeftShifter(PixelGameEngine*pge,vf2d pos,std::map<Image,Renderable>&IMAGES,bool friendly=false,bool moveable=true);
|
||||
LeftShifter(PixelGameEngine*pge,vf2d pos,std::vector<Renderable>&IMAGES,bool friendly=false,bool moveable=true);
|
||||
~LeftShifter();
|
||||
void Attack(Unit&victim,std::vector<std::shared_ptr<Unit>>&otherUnits)override;
|
||||
static std::vector<Memory> resourceCost;
|
||||
@ -171,7 +171,7 @@ struct LeftShifter:Unit{
|
||||
};
|
||||
|
||||
struct RightShifter:Unit{
|
||||
RightShifter(PixelGameEngine*pge,vf2d pos,std::map<Image,Renderable>&IMAGES,bool friendly=false,bool moveable=true);
|
||||
RightShifter(PixelGameEngine*pge,vf2d pos,std::vector<Renderable>&IMAGES,bool friendly=false,bool moveable=true);
|
||||
~RightShifter();
|
||||
void Attack(Unit&victim,std::vector<std::shared_ptr<Unit>>&otherUnits)override;
|
||||
static std::vector<Memory> resourceCost;
|
||||
@ -180,7 +180,7 @@ struct RightShifter:Unit{
|
||||
};
|
||||
|
||||
struct BitRestorer:Unit{
|
||||
BitRestorer(PixelGameEngine*pge,vf2d pos,std::map<Image,Renderable>&IMAGES,bool friendly=false,bool moveable=true);
|
||||
BitRestorer(PixelGameEngine*pge,vf2d pos,std::vector<Renderable>&IMAGES,bool friendly=false,bool moveable=true);
|
||||
~BitRestorer();
|
||||
void Attack(Unit&victim,std::vector<std::shared_ptr<Unit>>&otherUnits)override;
|
||||
void AttemptToHealOtherAllies(std::vector<std::shared_ptr<Unit>>&otherUnits);
|
||||
@ -190,7 +190,7 @@ struct BitRestorer:Unit{
|
||||
};
|
||||
|
||||
struct MemorySwapper:Unit{
|
||||
MemorySwapper(PixelGameEngine*pge,vf2d pos,std::map<Image,Renderable>&IMAGES,bool friendly=false,bool moveable=true);
|
||||
MemorySwapper(PixelGameEngine*pge,vf2d pos,std::vector<Renderable>&IMAGES,bool friendly=false,bool moveable=true);
|
||||
~MemorySwapper();
|
||||
void Attack(Unit&victim,std::vector<std::shared_ptr<Unit>>&otherUnits)override;
|
||||
static std::vector<Memory> resourceCost;
|
||||
@ -199,7 +199,7 @@ struct MemorySwapper:Unit{
|
||||
};
|
||||
|
||||
struct Corrupter:Unit{
|
||||
Corrupter(PixelGameEngine*pge,vf2d pos,std::map<Image,Renderable>&IMAGES,bool friendly=false,bool moveable=true);
|
||||
Corrupter(PixelGameEngine*pge,vf2d pos,std::vector<Renderable>&IMAGES,bool friendly=false,bool moveable=true);
|
||||
~Corrupter();
|
||||
void Attack(Unit&victim,std::vector<std::shared_ptr<Unit>>&otherUnits)override;
|
||||
static std::vector<Memory> resourceCost;
|
||||
@ -208,11 +208,11 @@ struct Corrupter:Unit{
|
||||
};
|
||||
|
||||
struct MemoryAllocator:Unit{
|
||||
MemoryAllocator(PixelGameEngine*pge,vf2d pos,std::map<Image,Renderable>&IMAGES,bool friendly=false,bool moveable=true);
|
||||
MemoryAllocator(PixelGameEngine*pge,vf2d pos,std::vector<Renderable>&IMAGES,bool friendly=false,bool moveable=true);
|
||||
~MemoryAllocator();
|
||||
void Attack(Unit&victim,std::vector<std::shared_ptr<Unit>>&units)override;
|
||||
void Update(PixelGameEngine*pge,std::map<Sound,std::unique_ptr<Audio>>&SOUNDS,std::vector<std::unique_ptr<Unit>>&queuedUnits)override;
|
||||
void Draw(TileTransformedView&game,std::map<Image,Renderable>&IMAGES)override;
|
||||
void Draw(TileTransformedView&game,std::vector<Renderable>&IMAGES)override;
|
||||
static std::vector<Memory> resourceCost;
|
||||
static std::string unitName;
|
||||
static std::string unitDescription;
|
||||
@ -227,33 +227,33 @@ struct RAMBank:Unit{
|
||||
int soundHandle;
|
||||
QuickGUI::Manager allocatorManager;
|
||||
QuickGUI::ImageButton*allocatorButton;
|
||||
RAMBank(PixelGameEngine*pge,vf2d pos,std::map<Image,Renderable>&IMAGES,bool friendly=false);
|
||||
RAMBank(PixelGameEngine*pge,vf2d pos,std::vector<Renderable>&IMAGES,bool friendly=false);
|
||||
~RAMBank();
|
||||
void Update(PixelGameEngine*pge,std::map<Sound,std::unique_ptr<Audio>>&SOUNDS,std::vector<std::unique_ptr<Unit>>&queuedUnits)override;
|
||||
void Attack(Unit&victim,std::vector<std::shared_ptr<Unit>>&otherUnits)override;
|
||||
void Draw(TileTransformedView&game,std::map<Image,Renderable>&IMAGES)override;
|
||||
void Draw(TileTransformedView&game,std::vector<Renderable>&IMAGES)override;
|
||||
void OnDeath(std::map<Sound,std::unique_ptr<Audio>>&SOUNDS)override;
|
||||
bool ClickHandled(TileTransformedView&game,Resources&player_resources,std::vector<std::shared_ptr<Unit>>&units,std::map<Image,Renderable>&IMAGES)override;
|
||||
bool ClickHandled(TileTransformedView&game,Resources&player_resources,std::vector<std::shared_ptr<Unit>>&units,std::vector<Renderable>&IMAGES)override;
|
||||
void UpdateGUIState(TileTransformedView&game,Resources&player_resources,Textbox&displayBox,bool&hovered,int totalUsedMemory,int availableMemory)override;
|
||||
void DrawHud(TileTransformedView&game,std::map<Image,Renderable>&IMAGES)override;
|
||||
void DrawHud(TileTransformedView&game,std::vector<Renderable>&IMAGES)override;
|
||||
static std::vector<Memory> resourceCost;
|
||||
static std::string unitName;
|
||||
static std::string unitDescription;
|
||||
};
|
||||
|
||||
struct _Platform:Unit{
|
||||
_Platform(PixelGameEngine*pge,vf2d pos,std::map<Image,Renderable>&IMAGES,bool friendly=false,bool moveable=true);
|
||||
_Platform(PixelGameEngine*pge,vf2d pos,std::vector<Renderable>&IMAGES,bool friendly=false,bool moveable=true);
|
||||
~_Platform();
|
||||
void Attack(Unit&victim,std::vector<std::shared_ptr<Unit>>&otherUnits)override;
|
||||
void Update(PixelGameEngine*pge,std::map<Sound,std::unique_ptr<Audio>>&SOUNDS,std::vector<std::unique_ptr<Unit>>&queuedUnits)override;
|
||||
void Draw(TileTransformedView&game,std::map<Image,Renderable>&IMAGES)override;
|
||||
void Draw(TileTransformedView&game,std::vector<Renderable>&IMAGES)override;
|
||||
static std::vector<Memory> resourceCost;
|
||||
static std::string unitName;
|
||||
static std::string unitDescription;
|
||||
};
|
||||
|
||||
struct MemoryGuard:Unit{
|
||||
MemoryGuard(PixelGameEngine*pge,vf2d pos,std::map<Image,Renderable>&IMAGES,bool friendly=false,bool moveable=true);
|
||||
MemoryGuard(PixelGameEngine*pge,vf2d pos,std::vector<Renderable>&IMAGES,bool friendly=false,bool moveable=true);
|
||||
~MemoryGuard();
|
||||
void Attack(Unit&victim,std::vector<std::shared_ptr<Unit>>&otherUnits)override;
|
||||
static std::vector<Memory> resourceCost;
|
||||
@ -262,7 +262,7 @@ struct MemoryGuard:Unit{
|
||||
};
|
||||
|
||||
struct Refresher:Unit{
|
||||
Refresher(PixelGameEngine*pge,vf2d pos,std::map<Image,Renderable>&IMAGES,bool friendly=false,bool moveable=true);
|
||||
Refresher(PixelGameEngine*pge,vf2d pos,std::vector<Renderable>&IMAGES,bool friendly=false,bool moveable=true);
|
||||
~Refresher();
|
||||
void Attack(Unit&victim,std::vector<std::shared_ptr<Unit>>&otherUnits)override;
|
||||
static std::vector<Memory> resourceCost;
|
||||
@ -271,7 +271,7 @@ struct Refresher:Unit{
|
||||
};
|
||||
|
||||
struct Turret:Unit{
|
||||
Turret(PixelGameEngine*pge,vf2d pos,std::map<Image,Renderable>&IMAGES,bool friendly=false,bool moveable=true);
|
||||
Turret(PixelGameEngine*pge,vf2d pos,std::vector<Renderable>&IMAGES,bool friendly=false,bool moveable=true);
|
||||
~Turret();
|
||||
void Attack(Unit&victim,std::vector<std::shared_ptr<Unit>>&otherUnits)override;
|
||||
static std::vector<Memory> resourceCost;
|
||||
|
@ -5,7 +5,7 @@
|
||||
#define AUDIO_SOURCE_IMPLEMENTATION
|
||||
#define OLC_PGEX_QUICKGUI
|
||||
|
||||
#define SPLASH_ENABLED
|
||||
//#define SPLASH_ENABLED
|
||||
#ifdef SPLASH_ENABLED
|
||||
#define OLC_PGEX_SPLASHSCREEN
|
||||
#endif
|
||||
@ -15,23 +15,33 @@
|
||||
#include "util.h"
|
||||
#include "Scenario.h"
|
||||
|
||||
VirusAttack*game;
|
||||
|
||||
VirusAttack::VirusAttack()
|
||||
{
|
||||
// Name your application
|
||||
sAppName = "Virus Attack";
|
||||
game=this;
|
||||
}
|
||||
|
||||
void VirusAttack::InitializeImages(){
|
||||
#undef LoadImage
|
||||
auto LoadImage=[&](Image img,std::string filepath,bool filter=false,bool clamp=true){
|
||||
IMAGES[img];
|
||||
IMAGES.emplace_back();
|
||||
IMAGES[img].Load(filepath,nullptr,filter,clamp);
|
||||
};
|
||||
LoadImage(TILE,"assets/tile.png",false,false);
|
||||
LoadImage(MINIMAP_HUD,"assets/minimap_hud.png");
|
||||
LoadImage(OUTLINE,"assets/outline.png");
|
||||
|
||||
IMAGES.emplace_back();
|
||||
IMAGES[MINIMAP_OUTLINE].Create(64,64);
|
||||
|
||||
LoadImage(VIRUS_IMG1,"assets/unit.png");
|
||||
LoadImage(SELECTION_CIRCLE,"assets/selection_circle.png");
|
||||
IMAGES.emplace_back();
|
||||
IMAGES[MATRIX].Create(64,64,false,false);
|
||||
IMAGES[MATRIX].Sprite()->SetSampleMode(Sprite::PERIODIC);
|
||||
LoadImage(MEMORY_COLLECTION_POINT,"assets/memory_collection_point.png");
|
||||
LoadImage(LEFT_SHIFTER,"assets/left_shifter.png");
|
||||
LoadImage(RIGHT_SHIFTER,"assets/right_shifter.png");
|
||||
@ -66,6 +76,7 @@ void VirusAttack::InitializeImages(){
|
||||
LoadImage(HOODED_FIGURE,"assets/hooded_figure.png");
|
||||
LoadImage(SPOOK_HOODED_FIGURE,"assets/spook_hooded_figure.png");
|
||||
HOODED_FIGURE_IMG.Load("assets/hooded_figure.png",nullptr);
|
||||
SPOOK_HOODED_FIGURE_IMG.Load("assets/hooded_figure.png",nullptr);
|
||||
}
|
||||
|
||||
void VirusAttack::InitializeLevelData(){
|
||||
@ -137,7 +148,7 @@ bool VirusAttack::OnUserCreate(){
|
||||
srand(time(NULL));
|
||||
SetPixelMode(Pixel::MASK);
|
||||
|
||||
game.Initialise(GetScreenSize());
|
||||
gametv.Initialise(GetScreenSize());
|
||||
|
||||
InitializeImages();
|
||||
|
||||
@ -149,13 +160,6 @@ bool VirusAttack::OnUserCreate(){
|
||||
memoryAllocatorBox.Initialize(CONSTANT::MEMORY_ALLOCATOR_BOX_DISPLAY_STRING,{},CONSTANT::MEMORY_ALLOCATOR_BOX_HEADER_STRING);
|
||||
memoryAllocatorBox.SetVisible(false);
|
||||
|
||||
IMAGES[MINIMAP_OUTLINE];
|
||||
IMAGES[MINIMAP_OUTLINE].Create(64,64);
|
||||
|
||||
IMAGES[MATRIX];
|
||||
IMAGES[MATRIX].Create(64,64,false,false);
|
||||
IMAGES[MATRIX].Sprite()->SetSampleMode(Sprite::PERIODIC);
|
||||
|
||||
AL.AudioSystemInit();
|
||||
InitializeSounds();
|
||||
|
||||
@ -175,8 +179,8 @@ void VirusAttack::LoadLevel(LevelName level){
|
||||
|
||||
WORLD_SIZE=selectedLevel.size;
|
||||
|
||||
game.SetWorldScale(selectedLevel.worldZoom);
|
||||
game.SetWorldOffset(selectedLevel.cameraStart-vf2d(GetScreenSize())/2.f/game.GetWorldScale());
|
||||
gametv.SetWorldScale(selectedLevel.worldZoom);
|
||||
gametv.SetWorldOffset(selectedLevel.cameraStart-vf2d(GetScreenSize())/2.f/gametv.GetWorldScale());
|
||||
|
||||
if(bgm==nullptr){
|
||||
bgm=SOUNDS[selectedLevel.bgm].get();
|
||||
@ -250,8 +254,8 @@ void VirusAttack::InitializeGUIs(){
|
||||
}
|
||||
|
||||
void VirusAttack::InitializeScenarios(){
|
||||
scenarios.push_back(new Stage1(this));
|
||||
scenarios.push_back(new Stage1(this));
|
||||
scenarios.push_back(new Stage1());
|
||||
scenarios.push_back(new Stage1());
|
||||
}
|
||||
|
||||
void VirusAttack::InitializeSounds(){
|
||||
@ -349,7 +353,7 @@ void VirusAttack::HandleDraggingSelection(){
|
||||
bool platformSelected=false;
|
||||
bool memoryAllocatorBoxHovered=false;
|
||||
for(auto&u:units){
|
||||
u->UpdateGUIState(game,player_resources,memoryAllocatorBox,memoryAllocatorBoxHovered,GetTotalUsedMemory(),currentLevel->availableMemory);
|
||||
u->UpdateGUIState(gametv,player_resources,memoryAllocatorBox,memoryAllocatorBoxHovered,GetTotalUsedMemory(),currentLevel->availableMemory);
|
||||
if(u->IsSelected()){
|
||||
if(u->IsAllocator()){
|
||||
allocatorSelected=true;
|
||||
@ -365,7 +369,7 @@ void VirusAttack::HandleDraggingSelection(){
|
||||
if(GetMouse(0).bPressed){
|
||||
if(NotClickingOnMinimap()){
|
||||
for(auto&u:units){
|
||||
if(u->ClickHandled(game,player_resources,units,IMAGES)){
|
||||
if(u->ClickHandled(gametv,player_resources,units,IMAGES)){
|
||||
goto skipLeftClick; //Break out early because this instance reported it handled a click for us.
|
||||
}
|
||||
}
|
||||
@ -398,12 +402,12 @@ void VirusAttack::HandleDraggingSelection(){
|
||||
}
|
||||
|
||||
vf2d VirusAttack::GetWorldMousePos(){
|
||||
return game.ScreenToWorld(GetMousePos());
|
||||
return gametv.ScreenToWorld(GetMousePos());
|
||||
}
|
||||
|
||||
void VirusAttack::DrawSelectionRectangle(){
|
||||
if(startingDragPos!=CONSTANT::UNSELECTED){
|
||||
game.FillRectDecal(startingDragPos,GetWorldMousePos()-startingDragPos,{255,255,0,128});
|
||||
gametv.FillRectDecal(startingDragPos,GetWorldMousePos()-startingDragPos,{255,255,0,128});
|
||||
}
|
||||
}
|
||||
|
||||
@ -414,7 +418,7 @@ void VirusAttack::HandleRightClickMove(){
|
||||
for(auto&u:units){
|
||||
if(u->IsFriendly()&&u->IsSelected()&&u->CanMove()){
|
||||
vf2d minimapTL=GetScreenSize()-vf2d{64,64};
|
||||
vf2d minimapCenterClick=vf2d(GetMousePos()-minimapTL)/64*WORLD_SIZE*CONSTANT::TILE_SIZE-vf2d(GetScreenSize())/game.GetWorldScale()/2.f+vf2d(GetScreenSize()/2.f)/game.GetWorldScale();
|
||||
vf2d minimapCenterClick=vf2d(GetMousePos()-minimapTL)/64*WORLD_SIZE*CONSTANT::TILE_SIZE-vf2d(GetScreenSize())/gametv.GetWorldScale()/2.f+vf2d(GetScreenSize()/2.f)/gametv.GetWorldScale();
|
||||
u->SetTargetLocation(minimapCenterClick);
|
||||
}
|
||||
}
|
||||
@ -499,7 +503,7 @@ void VirusAttack::DrawMinimap(){
|
||||
vf2d viewingTilesPct=vf2d{float(ScreenWidth()),float(ScreenHeight())}/CONSTANT::TILE_SIZE/WORLD_SIZE;
|
||||
SetDrawTarget(IMAGES[MINIMAP_OUTLINE].Sprite());
|
||||
Clear(BLANK);
|
||||
DrawRect((game.GetWorldOffset()/worldPixelSize*64),viewingTilesPct*64/game.GetWorldScale());
|
||||
DrawRect((gametv.GetWorldOffset()/worldPixelSize*64),viewingTilesPct*64/gametv.GetWorldScale());
|
||||
for(auto&cp:collectionPoints){
|
||||
Pixel col;
|
||||
switch(cp->type){
|
||||
@ -536,33 +540,33 @@ void VirusAttack::DrawMinimap(){
|
||||
}
|
||||
|
||||
void VirusAttack::HandlePanAndZoom(float fElapsedTime){
|
||||
float speedScale=std::min(1.f,game.GetWorldScale().x);
|
||||
float speedScale=std::min(1.f,gametv.GetWorldScale().x);
|
||||
bool canMouseScroll=!memoryAllocatorBox.IsVisible()&&!unitCreationBox.IsVisible()&&
|
||||
(GetMouseY()<=ScreenHeight()-64||GetMouseX()<=ScreenWidth()-64
|
||||
||GetMouseScreenX()>=GetWindowPos().x+GetWindowSize().x||GetMouseScreenY()>=GetWindowPos().y+GetWindowSize().y);
|
||||
if(GetKey(A).bHeld||canMouseScroll&&GetMouseScreenX()<=GetWindowPos().x+CONSTANT::SCROLL_BOUNDARY){
|
||||
vf2d amt=vf2d{-300*fElapsedTime,0}/speedScale;
|
||||
game.MoveWorldOffset(amt);
|
||||
gametv.MoveWorldOffset(amt);
|
||||
}
|
||||
if(GetKey(W).bHeld||canMouseScroll&&GetMouseScreenY()<=GetWindowPos().y+CONSTANT::SCROLL_BOUNDARY+24){
|
||||
game.MoveWorldOffset(vf2d{0,-300*fElapsedTime}/speedScale);
|
||||
gametv.MoveWorldOffset(vf2d{0,-300*fElapsedTime}/speedScale);
|
||||
}
|
||||
if(GetKey(S).bHeld||canMouseScroll&&GetMouseScreenY()>=GetWindowPos().y+GetWindowSize().y-CONSTANT::SCROLL_BOUNDARY){
|
||||
game.MoveWorldOffset(vf2d{0,300*fElapsedTime}/speedScale);
|
||||
gametv.MoveWorldOffset(vf2d{0,300*fElapsedTime}/speedScale);
|
||||
}
|
||||
if(GetKey(D).bHeld||canMouseScroll&&GetMouseScreenX()>=GetWindowPos().x+GetWindowSize().x-CONSTANT::SCROLL_BOUNDARY){
|
||||
vf2d amt=vf2d{300*fElapsedTime,0}/speedScale;
|
||||
game.MoveWorldOffset(amt);
|
||||
gametv.MoveWorldOffset(amt);
|
||||
}
|
||||
|
||||
if(GetMouseWheel()>0){
|
||||
if(game.GetWorldScale().x<2){
|
||||
game.ZoomAtScreenPos(1.25,GetMousePos());
|
||||
if(gametv.GetWorldScale().x<2){
|
||||
gametv.ZoomAtScreenPos(1.25,GetMousePos());
|
||||
}
|
||||
} else
|
||||
if(GetMouseWheel()<0){
|
||||
if(game.GetWorldScale().x>0.5){
|
||||
game.ZoomAtScreenPos(0.75,GetMousePos());
|
||||
if(gametv.GetWorldScale().x>0.5){
|
||||
gametv.ZoomAtScreenPos(0.75,GetMousePos());
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -570,12 +574,12 @@ void VirusAttack::HandlePanAndZoom(float fElapsedTime){
|
||||
void VirusAttack::HandleMinimapClick(){
|
||||
if(startingDragPos==CONSTANT::UNSELECTED&&GetMouse(0).bHeld&&GetMouseX()>=ScreenWidth()-64&&GetMouseY()>=ScreenHeight()-64){
|
||||
vf2d minimapTL=GetScreenSize()-vf2d{64,64};
|
||||
game.SetWorldOffset(vf2d(GetMousePos()-minimapTL)/64*WORLD_SIZE*CONSTANT::TILE_SIZE-vf2d(GetScreenSize())/game.GetWorldScale()/2.f);
|
||||
gametv.SetWorldOffset(vf2d(GetMousePos()-minimapTL)/64*WORLD_SIZE*CONSTANT::TILE_SIZE-vf2d(GetScreenSize())/gametv.GetWorldScale()/2.f);
|
||||
}
|
||||
vf2d offset=game.GetWorldOffset();
|
||||
offset.x=std::clamp(float(offset.x),-ScreenWidth()/2/game.GetWorldScale().x,WORLD_SIZE.x*24-(ScreenWidth()/2/game.GetWorldScale().x));
|
||||
offset.y=std::clamp(float(offset.y),-ScreenHeight()/2/game.GetWorldScale().y,WORLD_SIZE.y*24-(ScreenHeight()/2/game.GetWorldScale().y));
|
||||
game.SetWorldOffset(offset);
|
||||
vf2d offset=gametv.GetWorldOffset();
|
||||
offset.x=std::clamp(float(offset.x),-ScreenWidth()/2/gametv.GetWorldScale().x,WORLD_SIZE.x*24-(ScreenWidth()/2/gametv.GetWorldScale().x));
|
||||
offset.y=std::clamp(float(offset.y),-ScreenHeight()/2/gametv.GetWorldScale().y,WORLD_SIZE.y*24-(ScreenHeight()/2/gametv.GetWorldScale().y));
|
||||
gametv.SetWorldOffset(offset);
|
||||
|
||||
}
|
||||
|
||||
@ -632,7 +636,7 @@ void VirusAttack::UpdateMatrixTexture(float fElapsedTime){
|
||||
|
||||
void VirusAttack::RenderCollectionPoints(CollectionPoint*cp){
|
||||
geom2d::rect<float>cpRect=geom2d::rect<float>({cp->pos-cp->img.Sprite()->Size()/2,cp->img.Sprite()->Size()});
|
||||
geom2d::rect<float>viewRegion=geom2d::rect<float>({game.GetWorldTL(),game.GetWorldVisibleArea()});
|
||||
geom2d::rect<float>viewRegion=geom2d::rect<float>({gametv.GetWorldTL(),gametv.GetWorldVisibleArea()});
|
||||
if(geom2d::overlaps(cpRect,viewRegion)){
|
||||
Pixel col;
|
||||
switch(cp->type){
|
||||
@ -652,9 +656,9 @@ void VirusAttack::RenderCollectionPoints(CollectionPoint*cp){
|
||||
col=CONSTANT::PROCEDURE_COLOR;
|
||||
}break;
|
||||
}
|
||||
game.DrawRotatedDecal(cp->pos,cp->img.Decal(),cp->rot,cp->img.Sprite()->Size()/2,{1,1},col);
|
||||
gametv.DrawRotatedDecal(cp->pos,cp->img.Decal(),cp->rot,cp->img.Sprite()->Size()/2,{1,1},col);
|
||||
if(geom2d::overlaps(cpRect,GetWorldMousePos())){
|
||||
game.DrawRotatedDecal(cp->pos,IMAGES[MEMORY_COLLECTION_POINT_HIGHLIGHT].Decal(),cp->rot,cp->img.Sprite()->Size()/2,{1,1},col);
|
||||
gametv.DrawRotatedDecal(cp->pos,IMAGES[MEMORY_COLLECTION_POINT_HIGHLIGHT].Decal(),cp->rot,cp->img.Sprite()->Size()/2,{1,1},col);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -665,9 +669,10 @@ bool VirusAttack::OnUserUpdate(float fElapsedTime){
|
||||
HandleRightClickMove();
|
||||
HandlePanAndZoom(fElapsedTime);
|
||||
HandleMinimapClick();
|
||||
std::vector<Renderable>&images=IMAGES;
|
||||
currentLevel->scenario->_Update();
|
||||
AL.vecPos=game.ScreenToWorld(GetScreenSize()/2);
|
||||
AL.fSoundFXVolume=std::min(1.f,game.GetWorldScale().x);
|
||||
AL.vecPos=gametv.ScreenToWorld(GetScreenSize()/2);
|
||||
AL.fSoundFXVolume=std::min(1.f,gametv.GetWorldScale().x);
|
||||
AL.OnUserUpdate(fElapsedTime);
|
||||
|
||||
if(GetKey(P).bPressed){
|
||||
@ -721,22 +726,22 @@ bool VirusAttack::OnUserUpdate(float fElapsedTime){
|
||||
|
||||
queuedUnits.clear();
|
||||
|
||||
DrawPartialDecal({0,0},GetScreenSize(),IMAGES[MATRIX].Decal(),randomBackgroundOffset+game.GetWorldOffset()*(vf2d{32,32}/vf2d(GetScreenSize()))*game.GetWorldScale(),{32,32},Pixel{currentLevel->levelColor.r,currentLevel->levelColor.g,currentLevel->levelColor.b,164}/2);
|
||||
game.DrawPartialDecal({0,0},WORLD_SIZE*CONSTANT::TILE_SIZE,IMAGES[TILE].Decal(),{0,0},WORLD_SIZE*CONSTANT::TILE_SIZE,currentLevel->levelColor);
|
||||
DrawPartialDecal({0,0},GetScreenSize(),IMAGES[MATRIX].Decal(),randomBackgroundOffset+gametv.GetWorldOffset()*(vf2d{32,32}/vf2d(GetScreenSize()))*gametv.GetWorldScale(),{32,32},Pixel{currentLevel->levelColor.r,currentLevel->levelColor.g,currentLevel->levelColor.b,164}/2);
|
||||
gametv.DrawPartialDecal({0,0},WORLD_SIZE*CONSTANT::TILE_SIZE,IMAGES[TILE].Decal(),{0,0},WORLD_SIZE*CONSTANT::TILE_SIZE,currentLevel->levelColor);
|
||||
|
||||
for(auto&u:units){
|
||||
u->DrawRangeIndicator(this,game,IMAGES);
|
||||
u->DrawRangeIndicator(this,gametv,IMAGES);
|
||||
}
|
||||
|
||||
for(auto&u:units){
|
||||
u->Draw(game,IMAGES);
|
||||
u->Draw(gametv,IMAGES);
|
||||
if(u->IsGuarded()){
|
||||
game.DrawDecal(u->GetPos()+vf2d{float(u->GetUnitSize().x/2),-float(u->GetUnitSize().y/2)}-vf2d{float(IMAGES[GUARD_ICON].Sprite()->width),0.f}*0.375,IMAGES[GUARD_ICON].Decal(),{0.375,0.375});
|
||||
gametv.DrawDecal(u->GetPos()+vf2d{float(u->GetUnitSize().x/2),-float(u->GetUnitSize().y/2)}-vf2d{float(IMAGES[GUARD_ICON].Sprite()->width),0.f}*0.375,IMAGES[GUARD_ICON].Decal(),{0.375,0.375});
|
||||
}
|
||||
}
|
||||
for(auto&deadUnit:deathAnimations){
|
||||
deadUnit->Update(fElapsedTime);
|
||||
deadUnit->Draw(game,this);
|
||||
deadUnit->Draw(gametv,this);
|
||||
}
|
||||
|
||||
std::erase_if(deathAnimations,[](auto&u){return u->IsDone();});
|
||||
@ -747,24 +752,24 @@ bool VirusAttack::OnUserUpdate(float fElapsedTime){
|
||||
}
|
||||
|
||||
for(auto&u:units){
|
||||
u->DrawUnitDamageStats(this,game,IMAGES);
|
||||
u->DrawUnitDamageStats(this,gametv,IMAGES);
|
||||
}
|
||||
|
||||
for(DebuffIcon&icon:debuffIcons){
|
||||
icon.Update(fElapsedTime);
|
||||
icon.Draw(game);
|
||||
icon.Draw(gametv);
|
||||
}
|
||||
|
||||
for(ResourceGainIcon&icon:resourceGainIcons){
|
||||
icon.Update(fElapsedTime);
|
||||
icon.Draw(game);
|
||||
icon.Draw(gametv);
|
||||
}
|
||||
|
||||
std::erase_if(debuffIcons,[](DebuffIcon&icon){return icon.lifetime<=0;});
|
||||
std::erase_if(resourceGainIcons,[](ResourceGainIcon&icon){return icon.lifetime<=0;});
|
||||
|
||||
for(auto&u:units){
|
||||
u->_DrawHud(game,IMAGES);
|
||||
u->_DrawHud(gametv,IMAGES);
|
||||
}
|
||||
|
||||
DrawSelectionRectangle();
|
||||
@ -951,11 +956,11 @@ void VirusAttack::DrawResourceBar(float fElapsedTime){
|
||||
}
|
||||
|
||||
void VirusAttack::RenderFogOfWar(){
|
||||
for(int y=game.GetTopLeftTile().y/96-1;y<=game.GetBottomRightTile().y/96+1;y++){
|
||||
for(int x=game.GetTopLeftTile().x/96-1;x<=game.GetBottomRightTile().x/96+1;x++){
|
||||
for(int y=gametv.GetTopLeftTile().y/96-1;y<=gametv.GetBottomRightTile().y/96+1;y++){
|
||||
for(int x=gametv.GetTopLeftTile().x/96-1;x<=gametv.GetBottomRightTile().x/96+1;x++){
|
||||
if(TileManager::visibleTiles.count(vi2d{x,y})==0){
|
||||
if(x>=0&&y>=0&&x<WORLD_SIZE.x/4&&y<WORLD_SIZE.y/4){
|
||||
game.FillRectDecal(vf2d{float(x),float(y)}*96,{96,96},{0,0,0,128});
|
||||
gametv.FillRectDecal(vf2d{float(x),float(y)}*96,{96,96},{0,0,0,128});
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1043,11 +1048,6 @@ void VirusAttack::CalculateUsedMemory(){
|
||||
}
|
||||
}
|
||||
|
||||
bool VirusAttack::OnUserDestroy(){
|
||||
std::for_each(scenarios.begin(),scenarios.end(),[](auto&scenario){delete scenario;});
|
||||
return true;
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
VirusAttack app;
|
||||
|
@ -16,8 +16,6 @@
|
||||
#include "Textbox.h"
|
||||
#include "Level.h"
|
||||
|
||||
class Scenario;
|
||||
|
||||
struct Letter{
|
||||
vf2d pos;
|
||||
float spd;
|
||||
@ -26,9 +24,7 @@ struct Letter{
|
||||
|
||||
class VirusAttack : public olc::PixelGameEngine
|
||||
{
|
||||
friend class Scenario;
|
||||
friend class Stage1;
|
||||
private:
|
||||
public:
|
||||
#ifdef SPLASH_ENABLED
|
||||
SplashScreen splash;
|
||||
#endif
|
||||
@ -42,7 +38,7 @@ private:
|
||||
std::vector<ResourceGainIcon>resourceGainIcons;
|
||||
std::vector<Scenario*>scenarios;
|
||||
|
||||
std::map<Image,Renderable>IMAGES;
|
||||
std::vector<Renderable>IMAGES;
|
||||
std::map<Sound,std::unique_ptr<Audio>>SOUNDS;
|
||||
|
||||
olcPGEX_AudioListener AL;
|
||||
@ -50,7 +46,7 @@ private:
|
||||
|
||||
Resources player_resources,player_prev_resources,player_display_resources,enemy_resources;
|
||||
|
||||
TileTransformedView game;
|
||||
TileTransformedView gametv;
|
||||
|
||||
Textbox unitCreationBox,testBox,memoryAllocatorBox,platformCreationBox;
|
||||
Level*currentLevel;
|
||||
@ -88,6 +84,7 @@ private:
|
||||
bool unitMetersGreyedOut=false; //If true, all but health meters show up as dark grey.
|
||||
bool playerInControl=true;
|
||||
Renderable HOODED_FIGURE_IMG;
|
||||
Renderable SPOOK_HOODED_FIGURE_IMG;
|
||||
|
||||
vf2d randomBackgroundOffset;
|
||||
|
||||
@ -129,5 +126,4 @@ public:
|
||||
bool OnUserCreate() override;
|
||||
|
||||
bool OnUserUpdate(float fElapsedTime) override;
|
||||
bool OnUserDestroy() override;
|
||||
};
|
@ -83,6 +83,10 @@
|
||||
<SubSystem>Console</SubSystem>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<AdditionalDependencies>soloud_static.lib;sdl2.lib;sdl2main.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
<HeapReserveSize>40000000</HeapReserveSize>
|
||||
<HeapCommitSize>40000000</HeapCommitSize>
|
||||
<StackReserveSize>40000000</StackReserveSize>
|
||||
<StackCommitSize>40000000</StackCommitSize>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
@ -102,6 +106,10 @@
|
||||
<OptimizeReferences>true</OptimizeReferences>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<AdditionalDependencies>soloud_static.lib;sdl2.lib;sdl2main.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
<HeapReserveSize>40000000</HeapReserveSize>
|
||||
<HeapCommitSize>40000000</HeapCommitSize>
|
||||
<StackReserveSize>40000000</StackReserveSize>
|
||||
<StackCommitSize>40000000</StackCommitSize>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||
@ -117,6 +125,10 @@
|
||||
<SubSystem>Console</SubSystem>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<AdditionalDependencies>soloud_static.lib;sdl2.lib;sdl2main.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
<HeapReserveSize>40000000</HeapReserveSize>
|
||||
<HeapCommitSize>40000000</HeapCommitSize>
|
||||
<StackReserveSize>40000000</StackReserveSize>
|
||||
<StackCommitSize>40000000</StackCommitSize>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||
@ -136,6 +148,10 @@
|
||||
<OptimizeReferences>true</OptimizeReferences>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
<AdditionalDependencies>soloud_static.lib;sdl2.lib;sdl2main.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||
<HeapReserveSize>40000000</HeapReserveSize>
|
||||
<HeapCommitSize>40000000</HeapCommitSize>
|
||||
<StackReserveSize>40000000</StackReserveSize>
|
||||
<StackCommitSize>40000000</StackCommitSize>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemGroup>
|
||||
|
@ -1187,31 +1187,31 @@ function dbg(text) {
|
||||
// === Body ===
|
||||
|
||||
var ASM_CONSTS = {
|
||||
5374236: () => { return Module.canvas.getBoundingClientRect().left },
|
||||
5374288: () => { return Module.canvas.getBoundingClientRect().top },
|
||||
5374339: () => { return Module.olc_MOUSEX; },
|
||||
5374367: () => { return Module.olc_MOUSEY; },
|
||||
5374395: () => { return Module.olc_MOUSEDOWN },
|
||||
5374425: () => { return Module.olc_MOUSEUP },
|
||||
5374453: () => { Module.olc_MOUSEDOWN=-1 },
|
||||
5374479: () => { Module.olc_MOUSEUP=-1 },
|
||||
5374503: () => { window.onunload = Module._olc_OnPageUnload; },
|
||||
5374547: ($0, $1) => { Module.olc_AspectRatio = $0 / $1; Module.olc_MOUSEDOWN=-1; Module.olc_MOUSEUP=-1; onmousemove = function(e){Module.olc_MOUSEX=e.clientX;Module.olc_MOUSEY=e.clientY;}; onmousedown = function(e){Module.olc_MOUSEDOWN=e.button;}; onmouseup = function(e){Module.olc_MOUSEUP=e.button;}; ontouchmove = function(e){Module.olc_MOUSEX=e.touches[0].clientX;Module.olc_MOUSEY=e.touches[0].clientY;}; ontouchstart = function(e){Module.olc_MOUSEX=e.touches[0].clientX;Module.olc_MOUSEY=e.touches[0].clientY;}; Module.olc_AssumeDefaultShells = (document.querySelectorAll('.emscripten').length >= 3) ? true : false; var olc_ResizeHandler = function() { let isFullscreen = (document.fullscreenElement != null); let width = (isFullscreen) ? window.innerWidth : Module.canvas.parentNode.clientWidth; let height = (isFullscreen) ? window.innerHeight : Module.canvas.parentNode.clientHeight; let viewWidth = width; let viewHeight = width / Module.olc_AspectRatio; if(viewHeight > height) { viewWidth = height * Module.olc_AspectRatio; viewHeight = height; } viewWidth = parseInt(viewWidth); viewHeight = parseInt(viewHeight); setTimeout(function() { if(Module.olc_AssumeDefaultShells) Module.canvas.parentNode.setAttribute('style', 'width: 100%; height: 70vh; margin-left: auto; margin-right: auto;'); Module.canvas.setAttribute('width', viewWidth); Module.canvas.setAttribute('height', viewHeight); Module.canvas.setAttribute('style', `width: ${viewWidth}px; height: ${viewHeight}px;`); Module._olc_PGE_UpdateWindowSize(viewWidth, viewHeight); Module.canvas.focus(); }, 200); }; var olc_Init = function() { if(Module.olc_AspectRatio === undefined) { setTimeout(function() { Module.olc_Init(); }, 50); return; } let resizeObserver = new ResizeObserver(function(entries) { Module.olc_ResizeHandler(); }).observe(Module.canvas.parentNode); let mutationObserver = new MutationObserver(function(mutationsList, observer) { setTimeout(function() { Module.olc_ResizeHandler(); }, 200); }).observe(Module.canvas.parentNode, { attributes: false, childList: true, subtree: false }); window.addEventListener('fullscreenchange', function(e) { setTimeout(function() { Module.olc_ResizeHandler();}, 200); }); }; Module.olc_ResizeHandler = (Module.olc_ResizeHandler != undefined) ? Module.olc_ResizeHandler : olc_ResizeHandler; Module.olc_Init = (Module.olc_Init != undefined) ? Module.olc_Init : olc_Init; Module.olc_Init(); },
|
||||
5376941: () => { if (typeof(AudioContext) !== 'undefined') { return true; } else if (typeof(webkitAudioContext) !== 'undefined') { return true; } return false; },
|
||||
5377088: () => { if ((typeof(navigator.mediaDevices) !== 'undefined') && (typeof(navigator.mediaDevices.getUserMedia) !== 'undefined')) { return true; } else if (typeof(navigator.webkitGetUserMedia) !== 'undefined') { return true; } return false; },
|
||||
5377322: ($0) => { if(typeof(Module['SDL2']) === 'undefined') { Module['SDL2'] = {}; } var SDL2 = Module['SDL2']; if (!$0) { SDL2.audio = {}; } else { SDL2.capture = {}; } if (!SDL2.audioContext) { if (typeof(AudioContext) !== 'undefined') { SDL2.audioContext = new AudioContext(); } else if (typeof(webkitAudioContext) !== 'undefined') { SDL2.audioContext = new webkitAudioContext(); } if (SDL2.audioContext) { autoResumeAudioContext(SDL2.audioContext); } } return SDL2.audioContext === undefined ? -1 : 0; },
|
||||
5377815: () => { var SDL2 = Module['SDL2']; return SDL2.audioContext.sampleRate; },
|
||||
5377883: ($0, $1, $2, $3) => { var SDL2 = Module['SDL2']; var have_microphone = function(stream) { if (SDL2.capture.silenceTimer !== undefined) { clearTimeout(SDL2.capture.silenceTimer); SDL2.capture.silenceTimer = undefined; } SDL2.capture.mediaStreamNode = SDL2.audioContext.createMediaStreamSource(stream); SDL2.capture.scriptProcessorNode = SDL2.audioContext.createScriptProcessor($1, $0, 1); SDL2.capture.scriptProcessorNode.onaudioprocess = function(audioProcessingEvent) { if ((SDL2 === undefined) || (SDL2.capture === undefined)) { return; } audioProcessingEvent.outputBuffer.getChannelData(0).fill(0.0); SDL2.capture.currentCaptureBuffer = audioProcessingEvent.inputBuffer; dynCall('vi', $2, [$3]); }; SDL2.capture.mediaStreamNode.connect(SDL2.capture.scriptProcessorNode); SDL2.capture.scriptProcessorNode.connect(SDL2.audioContext.destination); SDL2.capture.stream = stream; }; var no_microphone = function(error) { }; SDL2.capture.silenceBuffer = SDL2.audioContext.createBuffer($0, $1, SDL2.audioContext.sampleRate); SDL2.capture.silenceBuffer.getChannelData(0).fill(0.0); var silence_callback = function() { SDL2.capture.currentCaptureBuffer = SDL2.capture.silenceBuffer; dynCall('vi', $2, [$3]); }; SDL2.capture.silenceTimer = setTimeout(silence_callback, ($1 / SDL2.audioContext.sampleRate) * 1000); if ((navigator.mediaDevices !== undefined) && (navigator.mediaDevices.getUserMedia !== undefined)) { navigator.mediaDevices.getUserMedia({ audio: true, video: false }).then(have_microphone).catch(no_microphone); } else if (navigator.webkitGetUserMedia !== undefined) { navigator.webkitGetUserMedia({ audio: true, video: false }, have_microphone, no_microphone); } },
|
||||
5379535: ($0, $1, $2, $3) => { var SDL2 = Module['SDL2']; SDL2.audio.scriptProcessorNode = SDL2.audioContext['createScriptProcessor']($1, 0, $0); SDL2.audio.scriptProcessorNode['onaudioprocess'] = function (e) { if ((SDL2 === undefined) || (SDL2.audio === undefined)) { return; } SDL2.audio.currentOutputBuffer = e['outputBuffer']; dynCall('vi', $2, [$3]); }; SDL2.audio.scriptProcessorNode['connect'](SDL2.audioContext['destination']); },
|
||||
5379945: ($0, $1) => { var SDL2 = Module['SDL2']; var numChannels = SDL2.capture.currentCaptureBuffer.numberOfChannels; for (var c = 0; c < numChannels; ++c) { var channelData = SDL2.capture.currentCaptureBuffer.getChannelData(c); if (channelData.length != $1) { throw 'Web Audio capture buffer length mismatch! Destination size: ' + channelData.length + ' samples vs expected ' + $1 + ' samples!'; } if (numChannels == 1) { for (var j = 0; j < $1; ++j) { setValue($0 + (j * 4), channelData[j], 'float'); } } else { for (var j = 0; j < $1; ++j) { setValue($0 + (((j * numChannels) + c) * 4), channelData[j], 'float'); } } } },
|
||||
5380550: ($0, $1) => { var SDL2 = Module['SDL2']; var numChannels = SDL2.audio.currentOutputBuffer['numberOfChannels']; for (var c = 0; c < numChannels; ++c) { var channelData = SDL2.audio.currentOutputBuffer['getChannelData'](c); if (channelData.length != $1) { throw 'Web Audio output buffer length mismatch! Destination size: ' + channelData.length + ' samples vs expected ' + $1 + ' samples!'; } for (var j = 0; j < $1; ++j) { channelData[j] = HEAPF32[$0 + ((j*numChannels + c) << 2) >> 2]; } } },
|
||||
5381030: ($0) => { var SDL2 = Module['SDL2']; if ($0) { if (SDL2.capture.silenceTimer !== undefined) { clearTimeout(SDL2.capture.silenceTimer); } if (SDL2.capture.stream !== undefined) { var tracks = SDL2.capture.stream.getAudioTracks(); for (var i = 0; i < tracks.length; i++) { SDL2.capture.stream.removeTrack(tracks[i]); } SDL2.capture.stream = undefined; } if (SDL2.capture.scriptProcessorNode !== undefined) { SDL2.capture.scriptProcessorNode.onaudioprocess = function(audioProcessingEvent) {}; SDL2.capture.scriptProcessorNode.disconnect(); SDL2.capture.scriptProcessorNode = undefined; } if (SDL2.capture.mediaStreamNode !== undefined) { SDL2.capture.mediaStreamNode.disconnect(); SDL2.capture.mediaStreamNode = undefined; } if (SDL2.capture.silenceBuffer !== undefined) { SDL2.capture.silenceBuffer = undefined } SDL2.capture = undefined; } else { if (SDL2.audio.scriptProcessorNode != undefined) { SDL2.audio.scriptProcessorNode.disconnect(); SDL2.audio.scriptProcessorNode = undefined; } SDL2.audio = undefined; } if ((SDL2.audioContext !== undefined) && (SDL2.audio === undefined) && (SDL2.capture === undefined)) { SDL2.audioContext.close(); SDL2.audioContext = undefined; } },
|
||||
5382202: ($0, $1, $2) => { var w = $0; var h = $1; var pixels = $2; if (!Module['SDL2']) Module['SDL2'] = {}; var SDL2 = Module['SDL2']; if (SDL2.ctxCanvas !== Module['canvas']) { SDL2.ctx = Module['createContext'](Module['canvas'], false, true); SDL2.ctxCanvas = Module['canvas']; } if (SDL2.w !== w || SDL2.h !== h || SDL2.imageCtx !== SDL2.ctx) { SDL2.image = SDL2.ctx.createImageData(w, h); SDL2.w = w; SDL2.h = h; SDL2.imageCtx = SDL2.ctx; } var data = SDL2.image.data; var src = pixels >> 2; var dst = 0; var num; if (typeof CanvasPixelArray !== 'undefined' && data instanceof CanvasPixelArray) { num = data.length; while (dst < num) { var val = HEAP32[src]; data[dst ] = val & 0xff; data[dst+1] = (val >> 8) & 0xff; data[dst+2] = (val >> 16) & 0xff; data[dst+3] = 0xff; src++; dst += 4; } } else { if (SDL2.data32Data !== data) { SDL2.data32 = new Int32Array(data.buffer); SDL2.data8 = new Uint8Array(data.buffer); SDL2.data32Data = data; } var data32 = SDL2.data32; num = data32.length; data32.set(HEAP32.subarray(src, src + num)); var data8 = SDL2.data8; var i = 3; var j = i + 4*num; if (num % 8 == 0) { while (i < j) { data8[i] = 0xff; i = i + 4 | 0; data8[i] = 0xff; i = i + 4 | 0; data8[i] = 0xff; i = i + 4 | 0; data8[i] = 0xff; i = i + 4 | 0; data8[i] = 0xff; i = i + 4 | 0; data8[i] = 0xff; i = i + 4 | 0; data8[i] = 0xff; i = i + 4 | 0; data8[i] = 0xff; i = i + 4 | 0; } } else { while (i < j) { data8[i] = 0xff; i = i + 4 | 0; } } } SDL2.ctx.putImageData(SDL2.image, 0, 0); },
|
||||
5383671: ($0, $1, $2, $3, $4) => { var w = $0; var h = $1; var hot_x = $2; var hot_y = $3; var pixels = $4; var canvas = document.createElement("canvas"); canvas.width = w; canvas.height = h; var ctx = canvas.getContext("2d"); var image = ctx.createImageData(w, h); var data = image.data; var src = pixels >> 2; var dst = 0; var num; if (typeof CanvasPixelArray !== 'undefined' && data instanceof CanvasPixelArray) { num = data.length; while (dst < num) { var val = HEAP32[src]; data[dst ] = val & 0xff; data[dst+1] = (val >> 8) & 0xff; data[dst+2] = (val >> 16) & 0xff; data[dst+3] = (val >> 24) & 0xff; src++; dst += 4; } } else { var data32 = new Int32Array(data.buffer); num = data32.length; data32.set(HEAP32.subarray(src, src + num)); } ctx.putImageData(image, 0, 0); var url = hot_x === 0 && hot_y === 0 ? "url(" + canvas.toDataURL() + "), auto" : "url(" + canvas.toDataURL() + ") " + hot_x + " " + hot_y + ", auto"; var urlBuf = _malloc(url.length + 1); stringToUTF8(url, urlBuf, url.length + 1); return urlBuf; },
|
||||
5384660: ($0) => { if (Module['canvas']) { Module['canvas'].style['cursor'] = UTF8ToString($0); } },
|
||||
5384743: () => { if (Module['canvas']) { Module['canvas'].style['cursor'] = 'none'; } },
|
||||
5384812: () => { return window.innerWidth; },
|
||||
5384842: () => { return window.innerHeight; }
|
||||
5372508: () => { return Module.canvas.getBoundingClientRect().left },
|
||||
5372560: () => { return Module.canvas.getBoundingClientRect().top },
|
||||
5372611: () => { return Module.olc_MOUSEX; },
|
||||
5372639: () => { return Module.olc_MOUSEY; },
|
||||
5372667: () => { return Module.olc_MOUSEDOWN },
|
||||
5372697: () => { return Module.olc_MOUSEUP },
|
||||
5372725: () => { Module.olc_MOUSEDOWN=-1 },
|
||||
5372751: () => { Module.olc_MOUSEUP=-1 },
|
||||
5372775: () => { window.onunload = Module._olc_OnPageUnload; },
|
||||
5372819: ($0, $1) => { Module.olc_AspectRatio = $0 / $1; Module.olc_MOUSEDOWN=-1; Module.olc_MOUSEUP=-1; onmousemove = function(e){Module.olc_MOUSEX=e.clientX;Module.olc_MOUSEY=e.clientY;}; onmousedown = function(e){Module.olc_MOUSEDOWN=e.button;}; onmouseup = function(e){Module.olc_MOUSEUP=e.button;}; ontouchmove = function(e){Module.olc_MOUSEX=e.touches[0].clientX;Module.olc_MOUSEY=e.touches[0].clientY;}; ontouchstart = function(e){Module.olc_MOUSEX=e.touches[0].clientX;Module.olc_MOUSEY=e.touches[0].clientY;}; Module.olc_AssumeDefaultShells = (document.querySelectorAll('.emscripten').length >= 3) ? true : false; var olc_ResizeHandler = function() { let isFullscreen = (document.fullscreenElement != null); let width = (isFullscreen) ? window.innerWidth : Module.canvas.parentNode.clientWidth; let height = (isFullscreen) ? window.innerHeight : Module.canvas.parentNode.clientHeight; let viewWidth = width; let viewHeight = width / Module.olc_AspectRatio; if(viewHeight > height) { viewWidth = height * Module.olc_AspectRatio; viewHeight = height; } viewWidth = parseInt(viewWidth); viewHeight = parseInt(viewHeight); setTimeout(function() { if(Module.olc_AssumeDefaultShells) Module.canvas.parentNode.setAttribute('style', 'width: 100%; height: 70vh; margin-left: auto; margin-right: auto;'); Module.canvas.setAttribute('width', viewWidth); Module.canvas.setAttribute('height', viewHeight); Module.canvas.setAttribute('style', `width: ${viewWidth}px; height: ${viewHeight}px;`); Module._olc_PGE_UpdateWindowSize(viewWidth, viewHeight); Module.canvas.focus(); }, 200); }; var olc_Init = function() { if(Module.olc_AspectRatio === undefined) { setTimeout(function() { Module.olc_Init(); }, 50); return; } let resizeObserver = new ResizeObserver(function(entries) { Module.olc_ResizeHandler(); }).observe(Module.canvas.parentNode); let mutationObserver = new MutationObserver(function(mutationsList, observer) { setTimeout(function() { Module.olc_ResizeHandler(); }, 200); }).observe(Module.canvas.parentNode, { attributes: false, childList: true, subtree: false }); window.addEventListener('fullscreenchange', function(e) { setTimeout(function() { Module.olc_ResizeHandler();}, 200); }); }; Module.olc_ResizeHandler = (Module.olc_ResizeHandler != undefined) ? Module.olc_ResizeHandler : olc_ResizeHandler; Module.olc_Init = (Module.olc_Init != undefined) ? Module.olc_Init : olc_Init; Module.olc_Init(); },
|
||||
5375213: () => { if (typeof(AudioContext) !== 'undefined') { return true; } else if (typeof(webkitAudioContext) !== 'undefined') { return true; } return false; },
|
||||
5375360: () => { if ((typeof(navigator.mediaDevices) !== 'undefined') && (typeof(navigator.mediaDevices.getUserMedia) !== 'undefined')) { return true; } else if (typeof(navigator.webkitGetUserMedia) !== 'undefined') { return true; } return false; },
|
||||
5375594: ($0) => { if(typeof(Module['SDL2']) === 'undefined') { Module['SDL2'] = {}; } var SDL2 = Module['SDL2']; if (!$0) { SDL2.audio = {}; } else { SDL2.capture = {}; } if (!SDL2.audioContext) { if (typeof(AudioContext) !== 'undefined') { SDL2.audioContext = new AudioContext(); } else if (typeof(webkitAudioContext) !== 'undefined') { SDL2.audioContext = new webkitAudioContext(); } if (SDL2.audioContext) { autoResumeAudioContext(SDL2.audioContext); } } return SDL2.audioContext === undefined ? -1 : 0; },
|
||||
5376087: () => { var SDL2 = Module['SDL2']; return SDL2.audioContext.sampleRate; },
|
||||
5376155: ($0, $1, $2, $3) => { var SDL2 = Module['SDL2']; var have_microphone = function(stream) { if (SDL2.capture.silenceTimer !== undefined) { clearTimeout(SDL2.capture.silenceTimer); SDL2.capture.silenceTimer = undefined; } SDL2.capture.mediaStreamNode = SDL2.audioContext.createMediaStreamSource(stream); SDL2.capture.scriptProcessorNode = SDL2.audioContext.createScriptProcessor($1, $0, 1); SDL2.capture.scriptProcessorNode.onaudioprocess = function(audioProcessingEvent) { if ((SDL2 === undefined) || (SDL2.capture === undefined)) { return; } audioProcessingEvent.outputBuffer.getChannelData(0).fill(0.0); SDL2.capture.currentCaptureBuffer = audioProcessingEvent.inputBuffer; dynCall('vi', $2, [$3]); }; SDL2.capture.mediaStreamNode.connect(SDL2.capture.scriptProcessorNode); SDL2.capture.scriptProcessorNode.connect(SDL2.audioContext.destination); SDL2.capture.stream = stream; }; var no_microphone = function(error) { }; SDL2.capture.silenceBuffer = SDL2.audioContext.createBuffer($0, $1, SDL2.audioContext.sampleRate); SDL2.capture.silenceBuffer.getChannelData(0).fill(0.0); var silence_callback = function() { SDL2.capture.currentCaptureBuffer = SDL2.capture.silenceBuffer; dynCall('vi', $2, [$3]); }; SDL2.capture.silenceTimer = setTimeout(silence_callback, ($1 / SDL2.audioContext.sampleRate) * 1000); if ((navigator.mediaDevices !== undefined) && (navigator.mediaDevices.getUserMedia !== undefined)) { navigator.mediaDevices.getUserMedia({ audio: true, video: false }).then(have_microphone).catch(no_microphone); } else if (navigator.webkitGetUserMedia !== undefined) { navigator.webkitGetUserMedia({ audio: true, video: false }, have_microphone, no_microphone); } },
|
||||
5377807: ($0, $1, $2, $3) => { var SDL2 = Module['SDL2']; SDL2.audio.scriptProcessorNode = SDL2.audioContext['createScriptProcessor']($1, 0, $0); SDL2.audio.scriptProcessorNode['onaudioprocess'] = function (e) { if ((SDL2 === undefined) || (SDL2.audio === undefined)) { return; } SDL2.audio.currentOutputBuffer = e['outputBuffer']; dynCall('vi', $2, [$3]); }; SDL2.audio.scriptProcessorNode['connect'](SDL2.audioContext['destination']); },
|
||||
5378217: ($0, $1) => { var SDL2 = Module['SDL2']; var numChannels = SDL2.capture.currentCaptureBuffer.numberOfChannels; for (var c = 0; c < numChannels; ++c) { var channelData = SDL2.capture.currentCaptureBuffer.getChannelData(c); if (channelData.length != $1) { throw 'Web Audio capture buffer length mismatch! Destination size: ' + channelData.length + ' samples vs expected ' + $1 + ' samples!'; } if (numChannels == 1) { for (var j = 0; j < $1; ++j) { setValue($0 + (j * 4), channelData[j], 'float'); } } else { for (var j = 0; j < $1; ++j) { setValue($0 + (((j * numChannels) + c) * 4), channelData[j], 'float'); } } } },
|
||||
5378822: ($0, $1) => { var SDL2 = Module['SDL2']; var numChannels = SDL2.audio.currentOutputBuffer['numberOfChannels']; for (var c = 0; c < numChannels; ++c) { var channelData = SDL2.audio.currentOutputBuffer['getChannelData'](c); if (channelData.length != $1) { throw 'Web Audio output buffer length mismatch! Destination size: ' + channelData.length + ' samples vs expected ' + $1 + ' samples!'; } for (var j = 0; j < $1; ++j) { channelData[j] = HEAPF32[$0 + ((j*numChannels + c) << 2) >> 2]; } } },
|
||||
5379302: ($0) => { var SDL2 = Module['SDL2']; if ($0) { if (SDL2.capture.silenceTimer !== undefined) { clearTimeout(SDL2.capture.silenceTimer); } if (SDL2.capture.stream !== undefined) { var tracks = SDL2.capture.stream.getAudioTracks(); for (var i = 0; i < tracks.length; i++) { SDL2.capture.stream.removeTrack(tracks[i]); } SDL2.capture.stream = undefined; } if (SDL2.capture.scriptProcessorNode !== undefined) { SDL2.capture.scriptProcessorNode.onaudioprocess = function(audioProcessingEvent) {}; SDL2.capture.scriptProcessorNode.disconnect(); SDL2.capture.scriptProcessorNode = undefined; } if (SDL2.capture.mediaStreamNode !== undefined) { SDL2.capture.mediaStreamNode.disconnect(); SDL2.capture.mediaStreamNode = undefined; } if (SDL2.capture.silenceBuffer !== undefined) { SDL2.capture.silenceBuffer = undefined } SDL2.capture = undefined; } else { if (SDL2.audio.scriptProcessorNode != undefined) { SDL2.audio.scriptProcessorNode.disconnect(); SDL2.audio.scriptProcessorNode = undefined; } SDL2.audio = undefined; } if ((SDL2.audioContext !== undefined) && (SDL2.audio === undefined) && (SDL2.capture === undefined)) { SDL2.audioContext.close(); SDL2.audioContext = undefined; } },
|
||||
5380474: ($0, $1, $2) => { var w = $0; var h = $1; var pixels = $2; if (!Module['SDL2']) Module['SDL2'] = {}; var SDL2 = Module['SDL2']; if (SDL2.ctxCanvas !== Module['canvas']) { SDL2.ctx = Module['createContext'](Module['canvas'], false, true); SDL2.ctxCanvas = Module['canvas']; } if (SDL2.w !== w || SDL2.h !== h || SDL2.imageCtx !== SDL2.ctx) { SDL2.image = SDL2.ctx.createImageData(w, h); SDL2.w = w; SDL2.h = h; SDL2.imageCtx = SDL2.ctx; } var data = SDL2.image.data; var src = pixels >> 2; var dst = 0; var num; if (typeof CanvasPixelArray !== 'undefined' && data instanceof CanvasPixelArray) { num = data.length; while (dst < num) { var val = HEAP32[src]; data[dst ] = val & 0xff; data[dst+1] = (val >> 8) & 0xff; data[dst+2] = (val >> 16) & 0xff; data[dst+3] = 0xff; src++; dst += 4; } } else { if (SDL2.data32Data !== data) { SDL2.data32 = new Int32Array(data.buffer); SDL2.data8 = new Uint8Array(data.buffer); SDL2.data32Data = data; } var data32 = SDL2.data32; num = data32.length; data32.set(HEAP32.subarray(src, src + num)); var data8 = SDL2.data8; var i = 3; var j = i + 4*num; if (num % 8 == 0) { while (i < j) { data8[i] = 0xff; i = i + 4 | 0; data8[i] = 0xff; i = i + 4 | 0; data8[i] = 0xff; i = i + 4 | 0; data8[i] = 0xff; i = i + 4 | 0; data8[i] = 0xff; i = i + 4 | 0; data8[i] = 0xff; i = i + 4 | 0; data8[i] = 0xff; i = i + 4 | 0; data8[i] = 0xff; i = i + 4 | 0; } } else { while (i < j) { data8[i] = 0xff; i = i + 4 | 0; } } } SDL2.ctx.putImageData(SDL2.image, 0, 0); },
|
||||
5381943: ($0, $1, $2, $3, $4) => { var w = $0; var h = $1; var hot_x = $2; var hot_y = $3; var pixels = $4; var canvas = document.createElement("canvas"); canvas.width = w; canvas.height = h; var ctx = canvas.getContext("2d"); var image = ctx.createImageData(w, h); var data = image.data; var src = pixels >> 2; var dst = 0; var num; if (typeof CanvasPixelArray !== 'undefined' && data instanceof CanvasPixelArray) { num = data.length; while (dst < num) { var val = HEAP32[src]; data[dst ] = val & 0xff; data[dst+1] = (val >> 8) & 0xff; data[dst+2] = (val >> 16) & 0xff; data[dst+3] = (val >> 24) & 0xff; src++; dst += 4; } } else { var data32 = new Int32Array(data.buffer); num = data32.length; data32.set(HEAP32.subarray(src, src + num)); } ctx.putImageData(image, 0, 0); var url = hot_x === 0 && hot_y === 0 ? "url(" + canvas.toDataURL() + "), auto" : "url(" + canvas.toDataURL() + ") " + hot_x + " " + hot_y + ", auto"; var urlBuf = _malloc(url.length + 1); stringToUTF8(url, urlBuf, url.length + 1); return urlBuf; },
|
||||
5382932: ($0) => { if (Module['canvas']) { Module['canvas'].style['cursor'] = UTF8ToString($0); } },
|
||||
5383015: () => { if (Module['canvas']) { Module['canvas'].style['cursor'] = 'none'; } },
|
||||
5383084: () => { return window.innerWidth; },
|
||||
5383114: () => { return window.innerHeight; }
|
||||
};
|
||||
|
||||
|
||||
|
Binary file not shown.
Loading…
x
Reference in New Issue
Block a user