Object reordering and layering

Co-authored-by: sigonasr2 <sigonasr2@gmail.com>
master
sigonasr2 2 years ago
parent 29fb6c2a0a
commit a0f5e2efd6
  1. BIN
      C++ProjectTemplate
  2. 47
      assets/maps/map0
  3. 2
      assets/maps/map0_2
  4. 2
      assets/maps/map0_3
  5. 2
      assets/maps/map0_4
  6. 2
      assets/maps/map0_5
  7. 117
      main.cpp

Binary file not shown.

@ -48,20 +48,33 @@
????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
OBJECT313.000000;126.000000;0
OBJECT160.000000;32.000000;40
OBJECT256.000000;64.000000;40
OBJECT256.000000;128.000000;40
OBJECT384.000000;96.000000;40
OBJECT352.000000;64.000000;40
OBJECT448.000000;96.000000;40
OBJECT416.000000;224.000000;41
OBJECT352.000000;192.000000;41
OBJECT256.000000;224.000000;41
OBJECT288.000000;192.000000;41
OBJECT320.000000;224.000000;58
OBJECT384.000000;96.000000;58
OBJECT480.000000;96.000000;58
OBJECT544.000000;96.000000;58
OBJECT256.000000;128.000000;2
OBJECT224.000000;128.000000;2
OBJECT160.000000;128.000000;2
OBJECT192.000000;128.000000;2
OBJECT288.000000;128.000000;2
OBJECT212.000000;228.000000;0
OBJECT192.000000;160.000000;2
OBJECT160.000000;160.000000;2
OBJECT192.000000;192.000000;2
OBJECT160.000000;192.000000;2
OBJECT192.000000;224.000000;2
OBJECT160.000000;224.000000;2
OBJECT313.000000;131.000000;4
OBJECT288.000000;160.000000;3
OBJECT224.000000;160.000000;3
OBJECT256.000000;160.000000;2
OBJECT313.000000;136.000000;5
OBJECT313.000000;141.000000;6
OBJECT313.000000;151.000000;8
OBJECT256.000000;192.000000;2
OBJECT288.000000;192.000000;2
OBJECT224.000000;192.000000;2
OBJECT288.000000;224.000000;2
OBJECT256.000000;224.000000;2
OBJECT224.000000;224.000000;2
OBJECT288.000000;256.000000;2
OBJECT256.000000;256.000000;2
OBJECT224.000000;256.000000;2
OBJECT192.000000;256.000000;2
OBJECT160.000000;256.000000;2

@ -47,6 +47,4 @@
????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????

@ -47,6 +47,4 @@
????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????

@ -47,6 +47,4 @@
????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????

@ -47,6 +47,4 @@
????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????

@ -8,6 +8,7 @@
#include "references.h"
#include "states.h"
#include "flags.h"
#include <assert.h>
#define WIDTH 256
#define HEIGHT 224
@ -76,16 +77,20 @@ class Object{
bool drawn=false;
int disableFlag;
int enableFlag;
int objArrElement; //Which element in the object array this object is located in. For sorting purposes.
//animationSpd is how long to wait before switching frames.
Object(int id,std::string name,vd2d pos,Animation*spr,vd2d scale={1,1},Pixel color=WHITE,int animationSpd=1) {
this->spr=spr;
this->pos=pos;
this->id=id;
this->name=name;
this->scale=scale;
this->color=color;
this->animationSpd=animationSpd;
this->originPoint={spr->width/2,spr->spr->sprite->height-4};
SetScale(scale);
}
void SetScale(vd2d scale) {
this->scale=scale;
this->originPoint={spr->width/2*scale.x,(spr->spr->sprite->height-4)*scale.y};
}
};
@ -114,6 +119,7 @@ public:
int SELECTED_OBJ_ID = PLAYER;
int OBJ_DISPLAY_OFFSET = 0;
bool GAME_FLAGS[128]={};
Object* PLAYER_OBJ;
bool MOUSE_PRESSED_DOWN=false,MOUSE_DOWN=false,MOUSE_RELEASED=false; //TODO Implement Mouse things.
@ -122,8 +128,8 @@ public:
std::vector<std::vector<TILE*>> MAP3;
std::vector<std::vector<TILE*>> MAP4;
std::vector<std::vector<TILE*>> MAP5; //Collision Layer
std::map<Reference,Decal*> SPRITES;
std::map<Reference,Animation*> ANIMATIONS;
std::map<std::string,Decal*> SPRITES;
std::map<std::string,Animation*> ANIMATIONS;
std::map<int,Object*> OBJ_INFO;
std::vector<Object*> OBJECTS;
@ -146,7 +152,7 @@ public:
GAME_FLAGS[Flag::TEST_FLAG2]=false;
GAME_FLAGS[Flag::TEST_FLAG3]=true;
MAP_ONETT=new Map("map0","map0_2","map0_3","map0_4","map0_5",SPRITES[TILESET1]);
MAP_ONETT=new Map("map0","map0_2","map0_3","map0_4","map0_5",SPRITES["terrainmap.png"]);
CURRENT_MAP=MAP_ONETT;
//OBJ_INFO["PLAYER"]=PLAYER_ANIMATION;
@ -213,23 +219,23 @@ public:
}
if (OBJECTS.size()>0) {
if (GetKey(I).bHeld) {
if (!Collision({OBJECTS[0]->pos.x+OBJECTS[0]->originPoint.x,OBJECTS[0]->pos.y-1+OBJECTS[0]->originPoint.y})) {
OBJECTS[0]->pos.y-=1;
if (!Collision({PLAYER_OBJ->pos.x+PLAYER_OBJ->originPoint.x,PLAYER_OBJ->pos.y-1+PLAYER_OBJ->originPoint.y})) {
Move(PLAYER_OBJ,{0,-1});
}
}
if (GetKey(K).bHeld) {
if (!Collision({OBJECTS[0]->pos.x+OBJECTS[0]->originPoint.x,OBJECTS[0]->pos.y+1+OBJECTS[0]->originPoint.y})) {
OBJECTS[0]->pos.y+=1;
if (!Collision({PLAYER_OBJ->pos.x+PLAYER_OBJ->originPoint.x,PLAYER_OBJ->pos.y+1+PLAYER_OBJ->originPoint.y})) {
Move(PLAYER_OBJ,{0,1});
}
}
if (GetKey(J).bHeld) {
if (!Collision({OBJECTS[0]->pos.x-1+OBJECTS[0]->originPoint.x,OBJECTS[0]->pos.y+OBJECTS[0]->originPoint.y})) {
OBJECTS[0]->pos.x-=1;
if (!Collision({PLAYER_OBJ->pos.x-1+PLAYER_OBJ->originPoint.x,PLAYER_OBJ->pos.y+PLAYER_OBJ->originPoint.y})) {
Move(PLAYER_OBJ,{-1,0});
}
}
if (GetKey(L).bHeld) {
if (!Collision({OBJECTS[0]->pos.x+1+OBJECTS[0]->originPoint.x,OBJECTS[0]->pos.y+OBJECTS[0]->originPoint.y})) {
OBJECTS[0]->pos.x+=1;
if (!Collision({PLAYER_OBJ->pos.x+1+PLAYER_OBJ->originPoint.x,PLAYER_OBJ->pos.y+PLAYER_OBJ->originPoint.y})) {
Move(PLAYER_OBJ,{1,0});
}
}
}
@ -378,7 +384,7 @@ public:
GAME_STATE=GameState::OBJ_SELECT;
}
if (EDITING_LAYER==layer::OBJECT&&GetMouse(0).bPressed) {
OBJECTS.push_back(CreateObject(SELECTED_OBJ_ID,HIGHLIGHTED_TILE*32));
AddObjectToWorld(CreateObject(SELECTED_OBJ_ID,HIGHLIGHTED_TILE*32));
} else
if (EDITING_LAYER==layer::OBJECT&&GetMouse(1).bReleased) {
for (int i=0;i<OBJECTS.size();i++) {
@ -412,7 +418,7 @@ public:
for (int y=-1;y<HEIGHT/32+2;y++) {
int yTileOffset = cameraPos.y/32;
for (auto&obj:OBJECTS) {
if (!obj->drawn&&obj->pos.y+obj->originPoint.y*obj->scale.y>(y+yTileOffset)*32&&obj->pos.y+obj->originPoint.y*obj->scale.y<=(y+yTileOffset+1)*32) {
if (!obj->drawn&&obj->pos.y+obj->originPoint.y>(y+yTileOffset)*32&&obj->pos.y+obj->originPoint.y<=(y+yTileOffset+1)*32) {
obj->drawn=true;
SetDrawTarget(layer::DYNAMIC);
DrawPartialDecal(obj->pos-cameraPos,obj->spr->spr,{(obj->frameIndex%obj->spr->frames)*obj->spr->width,0},{obj->spr->width,obj->spr->spr->sprite->height},obj->scale,obj->color);
@ -423,23 +429,23 @@ public:
if (x+xTileOffset>=0&&x+xTileOffset<MAP_WIDTH&&y+yTileOffset>=0&&y+yTileOffset<MAP_HEIGHT) {
if(MAP5[y+yTileOffset][x+xTileOffset]->tileX*MAP5[y+yTileOffset][x+xTileOffset]->tileY!=225) {
SetDrawTarget(layer::COLLISION);
DrawPartialSprite({x*32-fmod(cameraPos.x,32),y*32-fmod(cameraPos.y,32)},SPRITES[TILESET1]->sprite,{MAP5[y+yTileOffset][x+xTileOffset]->tileX*32,MAP5[y+yTileOffset][x+xTileOffset]->tileY*32},{32,32});
DrawPartialSprite({x*32-fmod(cameraPos.x,32),y*32-fmod(cameraPos.y,32)},SPRITES["terrainmap.png"]->sprite,{MAP5[y+yTileOffset][x+xTileOffset]->tileX*32,MAP5[y+yTileOffset][x+xTileOffset]->tileY*32},{32,32});
}
if(MAP4[y+yTileOffset][x+xTileOffset]->tileX*MAP4[y+yTileOffset][x+xTileOffset]->tileY!=225) {
SetDrawTarget(layer::BACKGROUND);
DrawPartialDecal({x*32-fmod(cameraPos.x,32),y*32-fmod(cameraPos.y,32)},SPRITES[TILESET1],{MAP4[y+yTileOffset][x+xTileOffset]->tileX*32,MAP4[y+yTileOffset][x+xTileOffset]->tileY*32},{32,32});
DrawPartialDecal({x*32-fmod(cameraPos.x,32),y*32-fmod(cameraPos.y,32)},SPRITES["terrainmap.png"],{MAP4[y+yTileOffset][x+xTileOffset]->tileX*32,MAP4[y+yTileOffset][x+xTileOffset]->tileY*32},{32,32});
}
if(MAP3[y+yTileOffset][x+xTileOffset]->tileX*MAP3[y+yTileOffset][x+xTileOffset]->tileY!=225) {
SetDrawTarget(layer::GROUND);
DrawPartialDecal({x*32-fmod(cameraPos.x,32),y*32-fmod(cameraPos.y,32)},SPRITES[TILESET1],{MAP3[y+yTileOffset][x+xTileOffset]->tileX*32,MAP3[y+yTileOffset][x+xTileOffset]->tileY*32},{32,32});
DrawPartialDecal({x*32-fmod(cameraPos.x,32),y*32-fmod(cameraPos.y,32)},SPRITES["terrainmap.png"],{MAP3[y+yTileOffset][x+xTileOffset]->tileX*32,MAP3[y+yTileOffset][x+xTileOffset]->tileY*32},{32,32});
}
if(MAP2[y+yTileOffset][x+xTileOffset]->tileX*MAP2[y+yTileOffset][x+xTileOffset]->tileY!=225) {
SetDrawTarget(layer::DYNAMIC);
DrawPartialDecal({x*32-fmod(cameraPos.x,32),y*32-fmod(cameraPos.y,32)},SPRITES[TILESET1],{MAP2[y+yTileOffset][x+xTileOffset]->tileX*32,MAP2[y+yTileOffset][x+xTileOffset]->tileY*32},{32,32});
DrawPartialDecal({x*32-fmod(cameraPos.x,32),y*32-fmod(cameraPos.y,32)},SPRITES["terrainmap.png"],{MAP2[y+yTileOffset][x+xTileOffset]->tileX*32,MAP2[y+yTileOffset][x+xTileOffset]->tileY*32},{32,32});
}
if(MAP[y+yTileOffset][x+xTileOffset]->tileX*MAP[y+yTileOffset][x+xTileOffset]->tileY!=225) {
SetDrawTarget(layer::HIGH);
DrawPartialDecal({x*32-fmod(cameraPos.x,32),y*32-fmod(cameraPos.y,32)},SPRITES[TILESET1],{MAP[y+yTileOffset][x+xTileOffset]->tileX*32,MAP[y+yTileOffset][x+xTileOffset]->tileY*32},{32,32});
DrawPartialDecal({x*32-fmod(cameraPos.x,32),y*32-fmod(cameraPos.y,32)},SPRITES["terrainmap.png"],{MAP[y+yTileOffset][x+xTileOffset]->tileX*32,MAP[y+yTileOffset][x+xTileOffset]->tileY*32},{32,32});
}
}
}
@ -454,7 +460,7 @@ public:
}break;
case GameState::TILE_SELECT:{
//14x14 pixels per tile.
DrawDecal({0,0},SPRITES[TILESET1],{TILEMAP_EDITOR_DRAW_MULT,TILEMAP_EDITOR_DRAW_MULT});
DrawDecal({0,0},SPRITES["terrainmap.png"],{TILEMAP_EDITOR_DRAW_MULT,TILEMAP_EDITOR_DRAW_MULT});
DrawRectDecal(SELECTED_TILE*(TILEMAP_EDITOR_TILESIZE),{TILEMAP_EDITOR_TILESIZE,TILEMAP_EDITOR_TILESIZE},RED);
}break;
case GameState::OBJ_SELECT:{
@ -570,7 +576,7 @@ public:
}
}
if (enabled) {
OBJECTS.push_back(CreateObject(id,{x,y}));
AddObjectToWorld(CreateObject(id,{x,y}));
}
printf("Object %s Loaded.\n",OBJ_INFO[id]->name.c_str());
} else {
@ -679,7 +685,8 @@ public:
}
Decal*CreateSprite(std::string spriteName) {
return new Decal(new Sprite("assets/"+spriteName));
SPRITES[spriteName] = new Decal(new Sprite("assets/"+spriteName));
return SPRITES[spriteName];
}
Object*CreateObject(int id,vd2d pos) {
@ -687,8 +694,10 @@ public:
}
Object*CreateObjectInfo(Reference ref,std::string name,vd2d pos,std::string spriteFileName,int sprWidth,vd2d scale={1,1},Pixel tint=WHITE,int enableFlag=Flag::NONE,int disableFlag=Flag::NONE,int animationDelay=1) {
ANIMATIONS[ref] = new Animation(SPRITES[ref]=CreateSprite("player.png"),32);
Object*newObj = new Object(ref,name,pos,ANIMATIONS[ref],scale,tint,animationDelay);
if (!ANIMATIONS.count(spriteFileName)) {
ANIMATIONS[spriteFileName] = new Animation(SPRITES[spriteFileName]=CreateSprite(spriteFileName),32);
}
Object*newObj = new Object(ref,name,pos,ANIMATIONS[spriteFileName],scale,tint,animationDelay);
newObj->disableFlag=disableFlag;
newObj->enableFlag=enableFlag;
OBJ_INFO[ref]=newObj;
@ -697,7 +706,7 @@ public:
void SetupAnimations() {
SPRITES[TILESET1] = CreateSprite("terrainmap.png");
CreateSprite("terrainmap.png");
}
void SetupObjectInfo() {
@ -870,6 +879,62 @@ public:
return collisionData!=MAGENTA;
}
void Move(Object*obj,vd2d move) {
if (move.y==0) {
obj->pos+=move;
return;
} else {
if (move.y<0) {
if (obj->objArrElement>0&&OBJECTS[obj->objArrElement-1]->pos.y+OBJECTS[obj->objArrElement-1]->originPoint.y>obj->pos.y+obj->originPoint.y+move.y) {
OBJECTS[obj->objArrElement]=OBJECTS[obj->objArrElement-1];
OBJECTS[obj->objArrElement-1]=obj;
OBJECTS[obj->objArrElement]->objArrElement=obj->objArrElement;
obj->objArrElement--;
}
} else {
if (obj->objArrElement<OBJECTS.size()-1&&OBJECTS[obj->objArrElement+1]->pos.y+OBJECTS[obj->objArrElement+1]->originPoint.y<obj->pos.y+obj->originPoint.y+move.y) {
OBJECTS[obj->objArrElement]=OBJECTS[obj->objArrElement+1];
OBJECTS[obj->objArrElement+1]=obj;
OBJECTS[obj->objArrElement]->objArrElement=obj->objArrElement;
obj->objArrElement++;
}
}
obj->pos+=move;
}
}
void AddObjectToWorld(Object*obj) {
std::vector<Object*>::const_iterator it = OBJECTS.begin();
if (obj->id==PLAYER) {
PLAYER_OBJ=obj;
}
bool inserted=false;
for (int i=0;i<OBJECTS.size();i++) {
if (!inserted&&OBJECTS[i]->pos.y+OBJECTS[i]->originPoint.y>obj->pos.y+obj->originPoint.y) {
OBJECTS.insert(it,obj);
obj->objArrElement=i;
inserted=true;
break;
}
it++;
}
if (!inserted) {
obj->objArrElement=OBJECTS.size();
OBJECTS.push_back(obj);
} else {
for (int i=0;i<OBJECTS.size();i++) {
OBJECTS[i]->objArrElement=i;
}
}
printf("OBJECTS (%d):\n",OBJECTS.size());
for (int i=0;i<OBJECTS.size();i++) {
printf("%d :: Object %s - %d (%lf,%lf)\n",i,OBJECTS[i]->name.c_str(),OBJECTS[i]->objArrElement,OBJECTS[i]->pos.x,OBJECTS[i]->pos.y);
assert(i==OBJECTS[i]->objArrElement);
}
printf("\n");
}
bool TabHeld(){
return GetKey(TAB).bHeld;

Loading…
Cancel
Save