Fixed sprite alignment with box2d fixtures
This commit is contained in:
@@ -3499,13 +3499,6 @@ bool rc_update()
|
||||
|
||||
//std::cout << "draw canvas[" << canvas_id << "] (" << rc_canvas[canvas_id].offset.X << ", " << rc_canvas[canvas_id].offset.Y << ") (" << rc_canvas[canvas_id].viewport.dimension.Width << ", " << rc_canvas[canvas_id].dimension.Height << ")" << std::endl;
|
||||
|
||||
if(rc_canvas[canvas_id].type == RC_CANVAS_TYPE_SPRITE)
|
||||
{
|
||||
|
||||
src = irr::core::rect<s32>( irr::core::vector2d<s32>(0, 0), rc_canvas[canvas_id].viewport.dimension); //sprite layers will just offset the sprites in drawSprites()
|
||||
drawSprites(canvas_id);
|
||||
}
|
||||
|
||||
#if defined(RC_DRIVER_GLES2)
|
||||
if(rc_canvas[canvas_id].type == RC_CANVAS_TYPE_3D)
|
||||
{
|
||||
@@ -3520,9 +3513,23 @@ bool rc_update()
|
||||
src = irr::core::rect<s32>( cv_offset, cv_dim );
|
||||
dest = irr::core::rect<s32>( irr::core::vector2d<s32>(cv_pos.X, cv_pos.Y + cv_dim.Height), irr::core::dimension2d<s32>(cv_dim.Width, -1*cv_dim.Height) );
|
||||
}
|
||||
else if(rc_canvas[canvas_id].type == RC_CANVAS_TYPE_SPRITE)
|
||||
{
|
||||
|
||||
src = irr::core::rect<s32>( irr::core::vector2d<s32>(0, 0), rc_canvas[canvas_id].texture->getSize() );
|
||||
dest = irr::core::rect<s32>( irr::core::vector2d<s32>(dest.UpperLeftCorner.X, dest.UpperLeftCorner.Y + dest.getHeight()), irr::core::dimension2d<s32>(dest.getWidth(), -1*dest.getHeight()) );
|
||||
drawSprites(canvas_id);
|
||||
}
|
||||
//dest = irr::core::rect<s32>( irr::core::vector2d<s32>(dest.UpperLeftCorner.X, dest.UpperLeftCorner.Y + dest.getHeight()), irr::core::dimension2d<s32>(dest.getWidth(), -1*dest.getHeight()) );
|
||||
draw2DImage2(VideoDriver, rc_canvas[canvas_id].texture, src, dest, irr::core::position2d<irr::s32>(0, 0), 0, true, color, screenSize);
|
||||
#else
|
||||
if(rc_canvas[canvas_id].type == RC_CANVAS_TYPE_SPRITE)
|
||||
{
|
||||
|
||||
src = irr::core::rect<s32>( irr::core::vector2d<s32>(0, 0), rc_canvas[canvas_id].viewport.dimension); //sprite layers will just offset the sprites in drawSprites()
|
||||
drawSprites(canvas_id);
|
||||
}
|
||||
|
||||
draw2DImage2(VideoDriver, rc_canvas[canvas_id].texture, src, dest, irr::core::position2d<irr::s32>(0, 0), 0, true, color, screenSize);
|
||||
#endif // defined
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
#define RC_OS_DEFINES_H_INCLUDED
|
||||
|
||||
#define RC_LINUX
|
||||
#define RC_WEB
|
||||
//#define RC_WEB
|
||||
//#define RC_WINDOWS
|
||||
//#define RC_ANDROID
|
||||
//#define RC_MAC
|
||||
@@ -23,7 +23,7 @@
|
||||
#endif
|
||||
|
||||
//FOR DEBUG PURPOSES
|
||||
#define RC_DRIVER_GLES2
|
||||
//#define RC_DRIVER_GLES2
|
||||
|
||||
#define RC_PI 3.14159265359
|
||||
|
||||
|
||||
@@ -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)
|
||||
@@ -843,13 +845,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)) )
|
||||
{
|
||||
|
||||
@@ -32,7 +32,7 @@
|
||||
<irrtheora.h>
|
||||
"rc_func130_cases.h"
|
||||
|
||||
1731467785 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_os_defines.h
|
||||
1731547485 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_os_defines.h
|
||||
|
||||
1730315467 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_defines.h
|
||||
|
||||
@@ -1246,7 +1246,7 @@
|
||||
1727545973 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/RealisticWater.h
|
||||
<irrlicht.h>
|
||||
|
||||
1731468622 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_gfx.h
|
||||
1731541468 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_gfx.h
|
||||
"SDL.h"
|
||||
<SDL2/SDL.h>
|
||||
<irrlicht.h>
|
||||
@@ -2486,7 +2486,7 @@
|
||||
<irrlicht.h>
|
||||
<cmath>
|
||||
|
||||
1731380776 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_spritelib.h
|
||||
1731554928 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_spritelib.h
|
||||
"SDL.h"
|
||||
<SDL2/SDL.h>
|
||||
"rc_sprite2D.h"
|
||||
|
||||
Reference in New Issue
Block a user