Merge pull request #17 from n00b87/sdl2_ogles2

Sdl2 ogles2
This commit is contained in:
Rodney Cunningham
2024-11-15 09:40:54 -05:00
committed by GitHub
10 changed files with 567 additions and 294 deletions

View File

@@ -350,7 +350,7 @@ int rc_createSprite(int img_id, double w, double h)
b2BodyDef sprBodyDef;
sprBodyDef.type = b2_dynamicBody;
sprBodyDef.position.Set(0, 0);
sprBodyDef.position.Set(w/2, h/2);
sprBodyDef.angle = 0;
sprBodyDef.userData.pointer = (uintptr_t)&rc_sprite[spr_id];
rc_sprite[spr_id].physics.body = rc_canvas[rc_active_canvas].physics2D.world->CreateBody(&sprBodyDef);
@@ -364,8 +364,8 @@ int rc_createSprite(int img_id, double w, double h)
sprFixtureDef.density = 1;
rc_sprite[spr_id].physics.fixture = rc_sprite[spr_id].physics.body->CreateFixture(&sprFixtureDef);
rc_sprite[spr_id].physics.offset_x = 0;
rc_sprite[spr_id].physics.offset_y = 0;
rc_sprite[spr_id].physics.offset_x = w/2;
rc_sprite[spr_id].physics.offset_y = h/2;
rc_sprite[spr_id].isSolid = false;
if(rc_sprite[spr_id].image_id < 0)
@@ -513,7 +513,9 @@ void rc_setSpritePosition(int spr_id, double x, double y)
return;
float current_angle = rc_sprite[spr_id].physics.body->GetAngle();
rc_sprite[spr_id].physics.body->SetTransform(b2Vec2(x, y), current_angle);
double off_x = rc_sprite[spr_id].physics.offset_x;
double off_y = rc_sprite[spr_id].physics.offset_y;
rc_sprite[spr_id].physics.body->SetTransform(b2Vec2(x+off_x, y+off_y), current_angle);
}
void rc_translateSprite(int spr_id, double x, double y)
@@ -538,8 +540,11 @@ void rc_getSpritePosition(int spr_id, double* x, double* y)
if(!rc_sprite[spr_id].active)
return;
*x = (double)rc_sprite[spr_id].physics.body->GetPosition().x;
*y = (double)rc_sprite[spr_id].physics.body->GetPosition().y;
double off_x = rc_sprite[spr_id].physics.offset_x;
double off_y = rc_sprite[spr_id].physics.offset_y;
*x = (double)rc_sprite[spr_id].physics.body->GetPosition().x - off_x;
*y = (double)rc_sprite[spr_id].physics.body->GetPosition().y - off_y;
}
double rc_spriteX(int spr_id)
@@ -550,7 +555,9 @@ double rc_spriteX(int spr_id)
if(!rc_sprite[spr_id].active)
return 0;
return (double)rc_sprite[spr_id].physics.body->GetPosition().x;
double off_x = rc_sprite[spr_id].physics.offset_x;
return (double)rc_sprite[spr_id].physics.body->GetPosition().x - off_x;
}
double rc_spriteY(int spr_id)
@@ -561,7 +568,9 @@ double rc_spriteY(int spr_id)
if(!rc_sprite[spr_id].active)
return 0;
return (double)rc_sprite[spr_id].physics.body->GetPosition().y;
double off_y = rc_sprite[spr_id].physics.offset_y;
return (double)rc_sprite[spr_id].physics.body->GetPosition().y - off_y;
}
void rc_setSpriteRotation(int spr_id, double angle)
@@ -870,13 +879,13 @@ void drawSprites(int canvas_id)
continue;
physics_pos = sprite->physics.body->GetPosition();
x = (int)physics_pos.x - offset_x;
y = (int)physics_pos.y - offset_y;
x = (int)(physics_pos.x - sprite->physics.offset_x) - offset_x;
y = (int)(physics_pos.y - sprite->physics.offset_y) - offset_y;
int xf = x + sprite->frame_size.Width;
int yf = y + sprite->frame_size.Height;
//std::cout << "sprite info: " << xf << ", " << x << ", " << rc_canvas[canvas_id].viewport.dimension.Width << std::endl;
//std::cout << "sprite info[" << spr_index << "]: (" << x << ", " << y << ") (" << xf << ", " << yf << ")" << std::endl;
if( (xf < 0) || (x > ((int)rc_canvas[canvas_id].viewport.dimension.Width)) )
{