diff --git a/rcbasic_build/.~lock.rcbasic4_changes.ods# b/rcbasic_build/.~lock.rcbasic4_changes.ods# index 2b62a0f..1549637 100644 --- a/rcbasic_build/.~lock.rcbasic4_changes.ods# +++ b/rcbasic_build/.~lock.rcbasic4_changes.ods# @@ -1 +1 @@ -,n00b,fedora,23.10.2024 22:46,file:///home/n00b/.config/libreoffice/4; \ No newline at end of file +,n00b,fedora,13.11.2024 20:17,file:///home/n00b/.config/libreoffice/4; \ No newline at end of file diff --git a/rcbasic_build/rcbasic4_changes.ods b/rcbasic_build/rcbasic4_changes.ods index 171c948..dd2554f 100644 Binary files a/rcbasic_build/rcbasic4_changes.ods and b/rcbasic_build/rcbasic4_changes.ods differ diff --git a/rcbasic_runtime/rc_gfx.h b/rcbasic_runtime/rc_gfx.h index 9dc0a1d..a53cca8 100644 --- a/rcbasic_runtime/rc_gfx.h +++ b/rcbasic_runtime/rc_gfx.h @@ -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( irr::core::vector2d(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( cv_offset, cv_dim ); dest = irr::core::rect( irr::core::vector2d(cv_pos.X, cv_pos.Y + cv_dim.Height), irr::core::dimension2d(cv_dim.Width, -1*cv_dim.Height) ); } + else if(rc_canvas[canvas_id].type == RC_CANVAS_TYPE_SPRITE) + { + + src = irr::core::rect( irr::core::vector2d(0, 0), rc_canvas[canvas_id].texture->getSize() ); + dest = irr::core::rect( irr::core::vector2d(dest.UpperLeftCorner.X, dest.UpperLeftCorner.Y + dest.getHeight()), irr::core::dimension2d(dest.getWidth(), -1*dest.getHeight()) ); + drawSprites(canvas_id); + } //dest = irr::core::rect( irr::core::vector2d(dest.UpperLeftCorner.X, dest.UpperLeftCorner.Y + dest.getHeight()), irr::core::dimension2d(dest.getWidth(), -1*dest.getHeight()) ); draw2DImage2(VideoDriver, rc_canvas[canvas_id].texture, src, dest, irr::core::position2d(0, 0), 0, true, color, screenSize); #else + if(rc_canvas[canvas_id].type == RC_CANVAS_TYPE_SPRITE) + { + + src = irr::core::rect( irr::core::vector2d(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(0, 0), 0, true, color, screenSize); #endif // defined diff --git a/rcbasic_runtime/rc_os_defines.h b/rcbasic_runtime/rc_os_defines.h index 701d0f8..3a94755 100755 --- a/rcbasic_runtime/rc_os_defines.h +++ b/rcbasic_runtime/rc_os_defines.h @@ -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 diff --git a/rcbasic_runtime/rc_spritelib.h b/rcbasic_runtime/rc_spritelib.h index 9a4a491..dfbfedf 100644 --- a/rcbasic_runtime/rc_spritelib.h +++ b/rcbasic_runtime/rc_spritelib.h @@ -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)) ) { diff --git a/rcbasic_runtime/rcbasic_runtime.depend b/rcbasic_runtime/rcbasic_runtime.depend index de87292..e84a81e 100755 --- a/rcbasic_runtime/rcbasic_runtime.depend +++ b/rcbasic_runtime/rcbasic_runtime.depend @@ -32,7 +32,7 @@ "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 -1731468622 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_gfx.h +1731541468 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_gfx.h "SDL.h" @@ -2486,7 +2486,7 @@ -1731380776 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_spritelib.h +1731554928 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_spritelib.h "SDL.h" "rc_sprite2D.h"