|
|
|
@ -5,6 +5,7 @@ |
|
|
|
|
#define OLC_SOUNDWAVE |
|
|
|
|
#include "soundwaveEngine.h" |
|
|
|
|
#include "tiles.h" |
|
|
|
|
#include "references.h" |
|
|
|
|
|
|
|
|
|
using namespace olc; |
|
|
|
|
|
|
|
|
@ -33,9 +34,19 @@ class Object{ |
|
|
|
|
Animation*spr; |
|
|
|
|
vi2d pos; |
|
|
|
|
int frameIndex=0; |
|
|
|
|
Object(vi2d pos,Animation*spr) { |
|
|
|
|
this->spr; |
|
|
|
|
this->pos; |
|
|
|
|
int frameCount=0; |
|
|
|
|
int animationSpd=12; //How many frames to wait between each frame.
|
|
|
|
|
std::string name; |
|
|
|
|
vi2d scale={1,1}; |
|
|
|
|
Pixel color=WHITE; |
|
|
|
|
//animationSpd is how long to wait before switching frames.
|
|
|
|
|
Object(std::string name,vi2d pos,Animation*spr,vi2d scale={1,1},Pixel color=WHITE,int animationSpd=1) { |
|
|
|
|
this->spr=spr; |
|
|
|
|
this->pos=pos; |
|
|
|
|
this->name=name; |
|
|
|
|
this->scale=scale; |
|
|
|
|
this->color=color; |
|
|
|
|
this->animationSpd=animationSpd; |
|
|
|
|
} |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
@ -58,6 +69,9 @@ public: |
|
|
|
|
Map*MAP_ONETT; |
|
|
|
|
|
|
|
|
|
std::vector<std::vector<TILE*>> MAP; |
|
|
|
|
std::map<Reference,Decal*> SPRITES; |
|
|
|
|
std::map<Reference,Animation*> ANIMATIONS; |
|
|
|
|
std::map<Reference,Object*> OBJ_INFO; |
|
|
|
|
std::vector<Object*> OBJECTS; |
|
|
|
|
|
|
|
|
|
bool OnUserCreate() override |
|
|
|
@ -68,11 +82,19 @@ public: |
|
|
|
|
|
|
|
|
|
MAP_ONETT=new Map("map0"); |
|
|
|
|
|
|
|
|
|
SetupAnimations(); |
|
|
|
|
SetupObjectInfo(); |
|
|
|
|
|
|
|
|
|
//OBJ_INFO["PLAYER"]=PLAYER_ANIMATION;
|
|
|
|
|
|
|
|
|
|
//LoadMap(MAP_ONETT);
|
|
|
|
|
|
|
|
|
|
return true; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
bool OnUserUpdate(float fElapsedTime) override |
|
|
|
|
{ |
|
|
|
|
elapsedTime+=fElapsedTime; |
|
|
|
|
while (elapsedTime>TARGET_RATE) { |
|
|
|
|
elapsedTime-=TARGET_RATE; |
|
|
|
|
updateGame(); |
|
|
|
@ -82,15 +104,50 @@ public: |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void updateGame(){ |
|
|
|
|
|
|
|
|
|
frameCount++; |
|
|
|
|
for (auto&obj:OBJECTS) { |
|
|
|
|
if (obj->frameCount++>obj->animationSpd) { |
|
|
|
|
obj->frameCount=0; |
|
|
|
|
obj->frameIndex++; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
}; |
|
|
|
|
void drawGame(){ |
|
|
|
|
|
|
|
|
|
for (auto&obj:OBJECTS) { |
|
|
|
|
DrawPartialDecal(obj->pos,obj->spr->spr,{(obj->frameIndex%obj->spr->frames)*obj->spr->width,0},{obj->spr->width,obj->spr->spr->sprite->height},obj->scale,obj->color); |
|
|
|
|
} |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
void LoadMap(Map*map) { |
|
|
|
|
std::ifstream f("assets/maps/"+map->filename); |
|
|
|
|
for (int i=0;i<MAP.size();i++) { |
|
|
|
|
for (int j=0;j<MAP[i].size();j++) { |
|
|
|
|
delete MAP[i][j]; |
|
|
|
|
} |
|
|
|
|
MAP[i].clear(); |
|
|
|
|
} |
|
|
|
|
MAP_WIDTH=-1; |
|
|
|
|
MAP_HEIGHT=-1; |
|
|
|
|
MAP.clear(); |
|
|
|
|
std::string data; |
|
|
|
|
while (f.good()) { |
|
|
|
|
f>>data; |
|
|
|
|
if (MAP_WIDTH==-1) { |
|
|
|
|
MAP_WIDTH=data.length(); |
|
|
|
|
printf("Map Width: %d\n",MAP_WIDTH); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
MAP_HEIGHT++; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void SetupAnimations() { |
|
|
|
|
SPRITES[PLAYER] = new Decal(new Sprite("assets/player.png")); |
|
|
|
|
ANIMATIONS[PLAYER] = new Animation(SPRITES[PLAYER],32); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void SetupObjectInfo() { |
|
|
|
|
OBJ_INFO[PLAYER]=new Object("player",{0,0},ANIMATIONS[PLAYER]); |
|
|
|
|
} |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|