Entity: sortYOffset: For offsetting sprites when sorting
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -30,6 +30,7 @@ struct TEntity {
|
||||
vec2 pos;
|
||||
int flags;
|
||||
int zorder;
|
||||
float sortYOffset;
|
||||
|
||||
vec2 dir;
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user