You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
VirusAttack/olcCodeJam2023Entry/Unit.cpp

108 lines
1.7 KiB

#include "Unit.h"
BasicUnit::BasicUnit(vf2d pos,Renderable&img,bool friendly)
:Unit({
{HEALTH,4},
{RANGE,2},
{ATKSPD,2},
{MOVESPD,3},
{PROCEDURE,1},
},pos,img,friendly){}
Unit::Unit(std::vector<Memory>memory,vf2d pos,Renderable&img,bool friendly)
:pos(pos),img(img),friendly(friendly){
int marker=0;
for(Memory&mem:memory){
for(int i=0;i<mem.size;i++){
this->memory.push_back(true);
}
switch(mem.type){
case HEALTH:{
health.index=marker;
health.size=mem.size;
}break;
case RANGE:{
range.index=marker;
range.size=mem.size;
}break;
case ATKSPD:{
atkSpd.index=marker;
atkSpd.size=mem.size;
}break;
case MOVESPD:{
moveSpd.index=marker;
moveSpd.size=mem.size;
}break;
case PROCEDURE:{
procedure.index=marker;
procedure.size=mem.size;
}break;
}
marker+=mem.size;
}
}
void Unit::Draw(PixelGameEngine*pge){
pge->DrawRotatedDecal(pos,img.Decal(),0,img.Sprite()->Size()/2);
}
int Unit::GetBits(Marker&m){
int activeBits=0;
for(int i=0;i<m.size;i++){
if(memory[i+m.index]){
activeBits++;
}
}
return activeBits;
}
int Unit::GetHealth(){
return GetBits(health);
}
int Unit::GetRange(){
return GetBits(range);
}
int Unit::GetAtkSpd(){
return GetBits(atkSpd);
}
int Unit::GetMoveSpd(){
return GetBits(moveSpd);
}
int Unit::GetProcedure(){
return GetBits(procedure);
}
int Unit::GetMemorySize(){
return memory.size();
}
void BasicUnit::Update(float fElapsedTime){
}
Unit& operator <<(Unit&u,const int n){
for(int i=0;i<u.GetMemorySize()-1;i++){
u.memory[i]=u.memory[i+1];
}
u.memory[u.GetMemorySize()-1]=0;
return u;
}
Unit& operator >>(Unit&u,const int n){
for(int i=1;i<u.GetMemorySize();i++){
u.memory[i]=u.memory[i-1];
}
u.memory[0]=0;
return u;
}