Entity: sortYOffset: For offsetting sprites when sorting

This commit is contained in:
2014-07-16 01:34:04 +02:00
committed by Valeriano A.R
parent 5013c7a377
commit 1c6d7cf738
3 changed files with 10 additions and 3 deletions

View File

@@ -34,6 +34,7 @@ Entity Entity_New(){
vec2_set(e->pos,0.0f,0.0f);
e->flags=EntityFlag_Collision|EntityFlag_Overlap;
e->zorder=1;
e->sortYOffset=0;
vec2_set(e->dir,0.0f,0.0f);
@@ -99,6 +100,7 @@ Entity Entity_Copy(Entity e){
vec2_set(n->pos,e->pos[0],e->pos[1]);
n->flags=e->flags;
n->zorder=e->zorder;
n->sortYOffset=e->sortYOffset;
vec2_set(n->vel,e->vel[0],e->vel[1]);
n->radius=e->radius;

View File

@@ -30,6 +30,7 @@ struct TEntity {
vec2 pos;
int flags;
int zorder;
float sortYOffset;
vec2 dir;

View File

@@ -285,16 +285,20 @@ void GameLib_ProcLoop(void *data){
do{
n2=0;
for(i=1;i<n;i++){
Entity ent1=_entity[i-1];
Entity ent2=_entity[i];
swap=0;
if(_entity[i-1]->zorder > _entity[i]->zorder){
if(ent1->zorder > ent2->zorder){
// Lower level
swap=1;
}else
if(_entity[i-1]->zorder < _entity[i]->zorder){
if(ent1->zorder < ent2->zorder){
// Upper level
}else{
// Same level
if(_entity[i-1]->pos[1] > _entity[i]->pos[1]){
float y1=ent1->pos[1]+ent1->sortYOffset;
float y2=ent2->pos[1]+ent2->sortYOffset;
if(y1 > y2){
swap=1;
}
}