Merge branch 'n00b87:dev' into dev
This commit is contained in:
@@ -1541,6 +1541,10 @@ ul, #myUL {
|
||||
|
||||
<li><a href="drawtilemap.html" target="main">DrawTileMap</a></li>
|
||||
|
||||
<li><a href="deletetileset.html" target="main">DeleteTileSet</a></li>
|
||||
|
||||
<li><a href="deletetilemap.html" target="main">DeleteTileMap</a></li>
|
||||
|
||||
|
||||
</ul>
|
||||
</li>
|
||||
@@ -2091,6 +2095,8 @@ ul, #myUL {
|
||||
|
||||
<li><a href="getscenefog.html" target="main">GetSceneFog</a></li>
|
||||
|
||||
<li><a href="clearscene.html" target="main">ClearScene</a></li>
|
||||
|
||||
|
||||
</ul>
|
||||
</li>
|
||||
|
||||
@@ -620,6 +620,8 @@ rc_setTile( SETTILE_TILEMAP, SETTILE_TILE, SETTILE_X, SETTILE_Y )
|
||||
rc_getTile( GETTILE_TILEMAP, GETTILE_X, GETTILE_Y )
|
||||
rc_fillTile( FILLTILE_TILEMAP, FILLTILE_TILE, FILLTILE_X, FILLTILE_Y, FILLTILE_WIDTHINTILES, FILLTILE_HEIGHTINTILES )
|
||||
rc_drawTileMap( DRAWTILEMAP_TILEMAP, DRAWTILEMAP_X, DRAWTILEMAP_Y, DRAWTILEMAP_W, DRAWTILEMAP_H, DRAWTILEMAP_OFFSET_X, DRAWTILEMAP_OFFSET_Y )
|
||||
rc_deleteTileSet( DELETETILESET_TILESET )
|
||||
rc_deleteTileMap( DELETETILEMAP_TILEMAP )
|
||||
rc_loadMesh( LOADMESH_MESH_FILE$ )
|
||||
rc_deleteMesh( DELETEMESH_MESH )
|
||||
rc_createMesh( )
|
||||
|
||||
@@ -12,3 +12,5 @@ Sub SetTile(tilemap, tile, x, y)
|
||||
Function GetTile(tilemap, x, y)
|
||||
Sub FillTile(tilemap, tile, x, y, widthInTiles, heightInTiles)
|
||||
Sub DrawTileMap(tilemap, x, y, w, h, offset_x, offset_y)
|
||||
Sub DeleteTileSet(tileset)
|
||||
Sub DeleteTileMap(tilemap)
|
||||
|
||||
@@ -1847,6 +1847,10 @@ void init_embedded_functions()
|
||||
add_embedded_arg("h", ID_TYPE_NUM);
|
||||
add_embedded_arg("offset_x", ID_TYPE_NUM);
|
||||
add_embedded_arg("offset_y", ID_TYPE_NUM);
|
||||
embed_function("DeleteTileSet", ID_TYPE_SUB);
|
||||
add_embedded_arg("tileset", ID_TYPE_NUM);
|
||||
embed_function("DeleteTileMap", ID_TYPE_SUB);
|
||||
add_embedded_arg("tilemap", ID_TYPE_NUM);
|
||||
embed_function("LoadMesh", ID_TYPE_FN_NUM);
|
||||
add_embedded_arg("mesh_file$", ID_TYPE_STR);
|
||||
embed_function("DeleteMesh", ID_TYPE_SUB);
|
||||
|
||||
@@ -1 +1,43 @@
|
||||
/home/n00b/projects/rcbasic_alpha3/test_project/main.bas
|
||||
embedded_functions.bas
|
||||
/home/n00b/Projects/RCBASIC4/rcbasic_build/intern_lib/conio.bas
|
||||
/home/n00b/Projects/RCBASIC4/rcbasic_build/intern_lib/arrays.bas
|
||||
/home/n00b/Projects/RCBASIC4/rcbasic_build/intern_lib/math.bas
|
||||
/home/n00b/Projects/RCBASIC4/rcbasic_build/intern_lib/strings.bas
|
||||
/home/n00b/Projects/RCBASIC4/rcbasic_build/intern_lib/stacks.bas
|
||||
/home/n00b/Projects/RCBASIC4/rcbasic_build/intern_lib/files.bas
|
||||
/home/n00b/Projects/RCBASIC4/rcbasic_build/intern_lib/directories.bas
|
||||
/home/n00b/Projects/RCBASIC4/rcbasic_build/intern_lib/datetime.bas
|
||||
/home/n00b/Projects/RCBASIC4/rcbasic_build/intern_lib/window.bas
|
||||
/home/n00b/Projects/RCBASIC4/rcbasic_build/intern_lib/canvas.bas
|
||||
/home/n00b/Projects/RCBASIC4/rcbasic_build/intern_lib/prim2d.bas
|
||||
/home/n00b/Projects/RCBASIC4/rcbasic_build/intern_lib/images.bas
|
||||
/home/n00b/Projects/RCBASIC4/rcbasic_build/intern_lib/keyboard.bas
|
||||
/home/n00b/Projects/RCBASIC4/rcbasic_build/intern_lib/audio.bas
|
||||
/home/n00b/Projects/RCBASIC4/rcbasic_build/intern_lib/joystick.bas
|
||||
/home/n00b/Projects/RCBASIC4/rcbasic_build/intern_lib/gfxconsole.bas
|
||||
/home/n00b/Projects/RCBASIC4/rcbasic_build/intern_lib/text.bas
|
||||
/home/n00b/Projects/RCBASIC4/rcbasic_build/intern_lib/touch.bas
|
||||
/home/n00b/Projects/RCBASIC4/rcbasic_build/intern_lib/network.bas
|
||||
/home/n00b/Projects/RCBASIC4/rcbasic_build/intern_lib/video.bas
|
||||
/home/n00b/Projects/RCBASIC4/rcbasic_build/intern_lib/system.bas
|
||||
/home/n00b/Projects/RCBASIC4/rcbasic_build/intern_lib/matrix.bas
|
||||
/home/n00b/Projects/RCBASIC4/rcbasic_build/intern_lib/process.bas
|
||||
/home/n00b/Projects/RCBASIC4/rcbasic_build/intern_lib/clipboard.bas
|
||||
/home/n00b/Projects/RCBASIC4/rcbasic_build/intern_lib/textedit.bas
|
||||
/home/n00b/Projects/RCBASIC4/rcbasic_build/intern_lib/sprites.bas
|
||||
/home/n00b/Projects/RCBASIC4/rcbasic_build/intern_lib/sprite_animation.bas
|
||||
/home/n00b/Projects/RCBASIC4/rcbasic_build/intern_lib/sprite_physics.bas
|
||||
/home/n00b/Projects/RCBASIC4/rcbasic_build/intern_lib/joint2D.bas
|
||||
/home/n00b/Projects/RCBASIC4/rcbasic_build/intern_lib/tilemaps.bas
|
||||
/home/n00b/Projects/RCBASIC4/rcbasic_build/intern_lib/mesh.bas
|
||||
/home/n00b/Projects/RCBASIC4/rcbasic_build/intern_lib/actor.bas
|
||||
/home/n00b/Projects/RCBASIC4/rcbasic_build/intern_lib/actor_animation.bas
|
||||
/home/n00b/Projects/RCBASIC4/rcbasic_build/intern_lib/actor_physics.bas
|
||||
/home/n00b/Projects/RCBASIC4/rcbasic_build/intern_lib/constraint3D.bas
|
||||
/home/n00b/Projects/RCBASIC4/rcbasic_build/intern_lib/camera.bas
|
||||
/home/n00b/Projects/RCBASIC4/rcbasic_build/intern_lib/scene.bas
|
||||
/home/n00b/Projects/RCBASIC4/rcbasic_build/intern_lib/particles.bas
|
||||
/home/n00b/Projects/RCBASIC4/rcbasic_build/intern_lib/lights.bas
|
||||
/home/n00b/Projects/RCBASIC4/rcbasic_build/intern_lib/terrain.bas
|
||||
/home/n00b/Projects/RCBASIC4/rcbasic_build/intern_lib/water.bas
|
||||
/home/n00b/Projects/RCBASIC4/rcbasic_build/intern_lib/materials.bas
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
Binary file not shown.
@@ -1841,6 +1841,10 @@ add_embedded_arg("w", ID_TYPE_NUM);
|
||||
add_embedded_arg("h", ID_TYPE_NUM);
|
||||
add_embedded_arg("offset_x", ID_TYPE_NUM);
|
||||
add_embedded_arg("offset_y", ID_TYPE_NUM);
|
||||
embed_function("DeleteTileSet", ID_TYPE_SUB);
|
||||
add_embedded_arg("tileset", ID_TYPE_NUM);
|
||||
embed_function("DeleteTileMap", ID_TYPE_SUB);
|
||||
add_embedded_arg("tilemap", ID_TYPE_NUM);
|
||||
embed_function("LoadMesh", ID_TYPE_FN_NUM);
|
||||
add_embedded_arg("mesh_file$", ID_TYPE_STR);
|
||||
embed_function("DeleteMesh", ID_TYPE_SUB);
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1892,6 +1892,12 @@ case FN_FillTile: //Sub Procedure
|
||||
case FN_DrawTileMap: //Sub Procedure
|
||||
rc_drawTileMap( DRAWTILEMAP_TILEMAP, DRAWTILEMAP_X, DRAWTILEMAP_Y, DRAWTILEMAP_W, DRAWTILEMAP_H, DRAWTILEMAP_OFFSET_X, DRAWTILEMAP_OFFSET_Y );
|
||||
break;
|
||||
case FN_DeleteTileSet: //Sub Procedure
|
||||
rc_deleteTileSet( DELETETILESET_TILESET );
|
||||
break;
|
||||
case FN_DeleteTileMap: //Sub Procedure
|
||||
rc_deleteTileMap( DELETETILEMAP_TILEMAP );
|
||||
break;
|
||||
case FN_LoadMesh: //Number Function
|
||||
rc_push_num(rc_loadMesh( LOADMESH_MESH_FILE$ ));
|
||||
break;
|
||||
|
||||
@@ -56,6 +56,7 @@
|
||||
#include "rc_audio.h"
|
||||
#include "rc_net.h"
|
||||
#include "rc_video.h"
|
||||
#include "rc_windowclose.h"
|
||||
#include "rc_test.h"
|
||||
#include <irrtheora.h>
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1892,6 +1892,12 @@ case FN_FillTile: //Sub Procedure
|
||||
case FN_DrawTileMap: //Sub Procedure
|
||||
rc_drawTileMap( DRAWTILEMAP_TILEMAP, DRAWTILEMAP_X, DRAWTILEMAP_Y, DRAWTILEMAP_W, DRAWTILEMAP_H, DRAWTILEMAP_OFFSET_X, DRAWTILEMAP_OFFSET_Y );
|
||||
break;
|
||||
case FN_DeleteTileSet: //Sub Procedure
|
||||
rc_deleteTileSet( DELETETILESET_TILESET );
|
||||
break;
|
||||
case FN_DeleteTileMap: //Sub Procedure
|
||||
rc_deleteTileMap( DELETETILEMAP_TILEMAP );
|
||||
break;
|
||||
case FN_LoadMesh: //Number Function
|
||||
rc_push_num(rc_loadMesh( LOADMESH_MESH_FILE$ ));
|
||||
break;
|
||||
|
||||
@@ -377,23 +377,6 @@ bool rc_windowOpen(std::string title, int w, int h, bool fullscreen, bool vsync)
|
||||
return true;
|
||||
}
|
||||
|
||||
void rc_closeWindow_hw()
|
||||
{
|
||||
irrtheora::stopVideo();
|
||||
irrtheora::deleteVideo();
|
||||
|
||||
if(rc_window!=NULL)
|
||||
SDL_DestroyWindow(rc_window);
|
||||
rc_window = NULL;
|
||||
|
||||
rc_canvas.clear();
|
||||
rc_canvas_zOrder.clear();
|
||||
rc_font.clear();
|
||||
|
||||
device->drop();
|
||||
device = NULL;
|
||||
}
|
||||
|
||||
void rc_cls()
|
||||
{
|
||||
if(rc_canvas.size()>0)
|
||||
@@ -733,13 +716,8 @@ bool rc_setWindowFullscreen(int flag)
|
||||
}
|
||||
|
||||
|
||||
int w, h;
|
||||
SDL_GetWindowSize(rc_window, &w, &h);
|
||||
|
||||
if(flag)
|
||||
SDL_SetWindowSize(rc_window, w, h);
|
||||
else
|
||||
SDL_SetWindowSize(rc_window, rc_window_size.Width, rc_window_size.Height);
|
||||
//int w, h;
|
||||
//SDL_GetWindowSize(rc_window, &w, &h);
|
||||
|
||||
//irr::core::dimension2d<u32> win_size(w, h);
|
||||
//device->setWindowSize(win_size);
|
||||
@@ -3232,580 +3210,4 @@ int rc_canvasClip(int x, int y, int w, int h)
|
||||
return img_id;
|
||||
}
|
||||
|
||||
|
||||
|
||||
void rc_preUpdate()
|
||||
{
|
||||
//3D World Update
|
||||
//rc_physics3D.DeltaTime = device->getTimer()->getTime() - rc_physics3D.TimeStamp;
|
||||
//rc_physics3D.TimeStamp = device->getTimer()->getTime();
|
||||
rc_physics3D.DeltaTime = SDL_GetTicks() - rc_physics3D.TimeStamp;
|
||||
rc_physics3D.TimeStamp = SDL_GetTicks();
|
||||
float fixed_timestep = rc_physics3D.fixedTimeStep < 0 ? rc_physics3D.DeltaTime*0.001f : rc_physics3D.fixedTimeStep;
|
||||
rc_physics3D.world->stepSimulation(rc_physics3D.DeltaTime*0.001f, rc_physics3D.maxSubSteps, fixed_timestep);
|
||||
|
||||
for(int i = 0; i < rc_canvas.size(); i++)
|
||||
{
|
||||
if(rc_canvas[i].type != RC_CANVAS_TYPE_SPRITE)
|
||||
continue;
|
||||
|
||||
Uint32 delta_time = SDL_GetTicks() - rc_canvas[i].physics2D.time_stamp;
|
||||
rc_canvas[i].physics2D.time_stamp = SDL_GetTicks();
|
||||
float step = rc_canvas[i].physics2D.timeStep < 0 ? (delta_time*0.001f) : rc_canvas[i].physics2D.timeStep;
|
||||
int32 velocityIterations = rc_canvas[i].physics2D.velocityIterations;
|
||||
int32 positionIterations = rc_canvas[i].physics2D.positionIterations;
|
||||
|
||||
if(rc_canvas[i].physics2D.enabled)
|
||||
rc_canvas[i].physics2D.world->Step(step, velocityIterations, positionIterations);
|
||||
}
|
||||
|
||||
hasPreUpdated = true;
|
||||
}
|
||||
|
||||
bool rc_update()
|
||||
{
|
||||
if(!device->run())
|
||||
return false;
|
||||
|
||||
int win_w = 0, win_h = 0;
|
||||
double w_scale = 1, h_scale = 1;
|
||||
|
||||
if(rc_window)
|
||||
{
|
||||
SDL_GetWindowSize(rc_window, &win_w, &win_h);
|
||||
//std::cout << "size = " << win_w << ", " << win_h << std::endl;
|
||||
}
|
||||
|
||||
w_scale = ( (double)win_w / (double)rc_window_size.Width );
|
||||
h_scale = ( (double)win_h / (double)rc_window_size.Height );
|
||||
|
||||
rc_window_mouse_scale_x = ( (double)rc_window_size.Width / (double)win_w );
|
||||
rc_window_mouse_scale_y = ( (double)rc_window_size.Height / (double)win_h );
|
||||
|
||||
rc_window_zone_scale_x = w_scale;
|
||||
rc_window_zone_scale_y = h_scale;
|
||||
|
||||
SEvent irrevent;
|
||||
SDL_Event SDL_event;
|
||||
bool Close = false;
|
||||
|
||||
rc_inkey_val = 0;
|
||||
|
||||
while ( !Close && SDL_PollEvent( &SDL_event ) )
|
||||
{
|
||||
// os::Printer::log("event: ", core::stringc((int)SDL_event.type).c_str(), ELL_INFORMATION); // just for debugging
|
||||
|
||||
switch ( SDL_event.type )
|
||||
{
|
||||
case SDL_QUIT:
|
||||
SDL_PumpEvents();
|
||||
Close = true;
|
||||
break;
|
||||
case SDL_MOUSEMOTION:
|
||||
irrevent.EventType = irr::EET_MOUSE_INPUT_EVENT;
|
||||
irrevent.MouseInput.Event = irr::EMIE_MOUSE_MOVED;
|
||||
MouseX = irrevent.MouseInput.X = SDL_event.motion.x;
|
||||
MouseY = irrevent.MouseInput.Y = SDL_event.motion.y;
|
||||
MouseXRel = SDL_event.motion.xrel;
|
||||
MouseYRel = SDL_event.motion.yrel;
|
||||
irrevent.MouseInput.ButtonStates = MouseButtonStates;
|
||||
|
||||
device->postEventFromUser(irrevent);
|
||||
break;
|
||||
|
||||
case SDL_MOUSEBUTTONDOWN:
|
||||
case SDL_MOUSEBUTTONUP:
|
||||
|
||||
irrevent.EventType = irr::EET_MOUSE_INPUT_EVENT;
|
||||
irrevent.MouseInput.X = SDL_event.button.x;
|
||||
irrevent.MouseInput.Y = SDL_event.button.y;
|
||||
|
||||
irrevent.MouseInput.Event = irr::EMIE_MOUSE_MOVED;
|
||||
|
||||
switch(SDL_event.button.button)
|
||||
{
|
||||
case SDL_BUTTON_LEFT:
|
||||
if (SDL_event.type == SDL_MOUSEBUTTONDOWN)
|
||||
{
|
||||
irrevent.MouseInput.Event = irr::EMIE_LMOUSE_PRESSED_DOWN;
|
||||
MouseButtonStates |= irr::EMBSM_LEFT;
|
||||
}
|
||||
else
|
||||
{
|
||||
irrevent.MouseInput.Event = irr::EMIE_LMOUSE_LEFT_UP;
|
||||
MouseButtonStates &= !irr::EMBSM_LEFT;
|
||||
}
|
||||
|
||||
//std::cout << "Position = " << SDL_event.button.x << ", " << SDL_event.button.y << std::endl;
|
||||
//rc_canvas[0].offset.X++;
|
||||
break;
|
||||
|
||||
case SDL_BUTTON_RIGHT:
|
||||
if (SDL_event.type == SDL_MOUSEBUTTONDOWN)
|
||||
{
|
||||
irrevent.MouseInput.Event = irr::EMIE_RMOUSE_PRESSED_DOWN;
|
||||
MouseButtonStates |= irr::EMBSM_RIGHT;
|
||||
}
|
||||
else
|
||||
{
|
||||
irrevent.MouseInput.Event = irr::EMIE_RMOUSE_LEFT_UP;
|
||||
MouseButtonStates &= !irr::EMBSM_RIGHT;
|
||||
}
|
||||
|
||||
//rc_setWindowFullscreen(1);
|
||||
//rc_canvas[0].offset.X--;
|
||||
break;
|
||||
|
||||
case SDL_BUTTON_MIDDLE:
|
||||
if (SDL_event.type == SDL_MOUSEBUTTONDOWN)
|
||||
{
|
||||
irrevent.MouseInput.Event = irr::EMIE_MMOUSE_PRESSED_DOWN;
|
||||
MouseButtonStates |= irr::EMBSM_MIDDLE;
|
||||
}
|
||||
else
|
||||
{
|
||||
irrevent.MouseInput.Event = irr::EMIE_MMOUSE_LEFT_UP;
|
||||
MouseButtonStates &= !irr::EMBSM_MIDDLE;
|
||||
}
|
||||
break;
|
||||
|
||||
}
|
||||
|
||||
irrevent.MouseInput.ButtonStates = MouseButtonStates;
|
||||
|
||||
if (irrevent.MouseInput.Event != irr::EMIE_MOUSE_MOVED)
|
||||
{
|
||||
device->postEventFromUser(irrevent);
|
||||
|
||||
if ( irrevent.MouseInput.Event >= EMIE_LMOUSE_PRESSED_DOWN && irrevent.MouseInput.Event <= EMIE_MMOUSE_PRESSED_DOWN )
|
||||
{
|
||||
u32 clicks = device->checkSuccessiveClicks(irrevent.MouseInput.X, irrevent.MouseInput.Y, irrevent.MouseInput.Event);
|
||||
if ( clicks == 2 )
|
||||
{
|
||||
irrevent.MouseInput.Event = (EMOUSE_INPUT_EVENT)(EMIE_LMOUSE_DOUBLE_CLICK + irrevent.MouseInput.Event-EMIE_LMOUSE_PRESSED_DOWN);
|
||||
device->postEventFromUser(irrevent);
|
||||
}
|
||||
else if ( clicks == 3 )
|
||||
{
|
||||
irrevent.MouseInput.Event = (EMOUSE_INPUT_EVENT)(EMIE_LMOUSE_TRIPLE_CLICK + irrevent.MouseInput.Event-EMIE_LMOUSE_PRESSED_DOWN);
|
||||
device->postEventFromUser(irrevent);
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case SDL_MOUSEWHEEL:
|
||||
irrevent.MouseInput.Event = irr::EMIE_MOUSE_WHEEL;
|
||||
irrevent.MouseInput.Wheel = SDL_event.wheel.y;
|
||||
rc_mwheelx = SDL_event.wheel.x;
|
||||
rc_mwheely = SDL_event.wheel.y;
|
||||
break;
|
||||
|
||||
case SDL_TEXTINPUT:
|
||||
if(rc_textinput_flag == true)
|
||||
{
|
||||
rc_textinput_string += SDL_event.text.text;
|
||||
}
|
||||
break;
|
||||
|
||||
case SDL_KEYUP:
|
||||
case SDL_KEYDOWN:
|
||||
{
|
||||
SDLKeyMap mp;
|
||||
mp.SDLKey = SDL_event.key.keysym.sym;
|
||||
s32 idx = KeyMap.binary_search(mp);
|
||||
|
||||
EKEY_CODE key;
|
||||
if (idx == -1)
|
||||
key = (EKEY_CODE)0;
|
||||
else
|
||||
key = (EKEY_CODE)KeyMap[idx].Win32Key;
|
||||
|
||||
irrevent.EventType = irr::EET_KEY_INPUT_EVENT;
|
||||
irrevent.KeyInput.Char = SDL_event.key.keysym.sym;
|
||||
irrevent.KeyInput.Key = key;
|
||||
irrevent.KeyInput.PressedDown = (SDL_event.type == SDL_KEYDOWN);
|
||||
irrevent.KeyInput.Shift = (SDL_event.key.keysym.mod & KMOD_SHIFT) != 0;
|
||||
irrevent.KeyInput.Control = (SDL_event.key.keysym.mod & KMOD_CTRL ) != 0;
|
||||
device->postEventFromUser(irrevent);
|
||||
}
|
||||
|
||||
if(SDL_event.type == SDL_KEYDOWN)
|
||||
{
|
||||
if(rc_textinput_flag && SDL_event.key.keysym.sym == SDLK_BACKSPACE && rc_textinput_string.length() > 0
|
||||
&& rc_toggleBackspace)
|
||||
{
|
||||
rc_textinput_string = rc_utf8_substr(rc_textinput_string, 0, rc_utf8_length(rc_textinput_string)-1);
|
||||
}
|
||||
|
||||
rc_inkey_val = SDL_event.key.keysym.sym;
|
||||
}
|
||||
break;
|
||||
|
||||
|
||||
case SDL_WINDOWEVENT:
|
||||
if (SDL_event.window.event == SDL_WINDOWEVENT_SIZE_CHANGED)
|
||||
{
|
||||
// FIXME: Implement more precise window control
|
||||
// FIXME: Check if the window is game window
|
||||
s32 Width = SDL_event.window.data1;
|
||||
s32 Height = SDL_event.window.data2;
|
||||
|
||||
rc_win_event = RC_WIN_EVENT_RESIZE;
|
||||
|
||||
//resizeWindow(Width, Height);
|
||||
if (VideoDriver)
|
||||
VideoDriver->OnResize(core::dimension2d<u32>(Width, Height));
|
||||
|
||||
win_w = Width;
|
||||
win_h = Height;
|
||||
|
||||
}
|
||||
else if(SDL_event.window.event == SDL_WINDOWEVENT_CLOSE)
|
||||
{
|
||||
if(rc_window)
|
||||
{
|
||||
rc_win_event = RC_WIN_EVENT_CLOSE;
|
||||
|
||||
if(SDL_QuitRequested() != 0)
|
||||
{
|
||||
SDL_FlushEvent(SDL_QUIT);
|
||||
}
|
||||
if(rc_win_exitOnClose)
|
||||
{
|
||||
rc_closeWindow_hw();
|
||||
Close = true;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
else if(SDL_event.window.event == SDL_WINDOWEVENT_MINIMIZED)
|
||||
{
|
||||
if(rc_window)
|
||||
{
|
||||
rc_win_event = RC_WIN_EVENT_MINIMIZE;
|
||||
}
|
||||
}
|
||||
else if(SDL_event.window.event == SDL_WINDOWEVENT_MAXIMIZED)
|
||||
{
|
||||
if(rc_window)
|
||||
{
|
||||
rc_win_event = RC_WIN_EVENT_MAXIMIZE;
|
||||
}
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
case SDL_JOYDEVICEREMOVED:
|
||||
//cout << "Joystick Removed: Instance " << event.jdevice.which << endl;
|
||||
for(int i = 0; i < 8; i++)
|
||||
{
|
||||
if(SDL_event.jdevice.which == rc_joyID[i] && rc_joystick[i])
|
||||
{
|
||||
//cout << "Joystick [" << i << "] was removed" << endl;
|
||||
SDL_HapticClose(rc_haptic[i]);
|
||||
SDL_JoystickClose(rc_joystick[i]);
|
||||
rc_joystick[i] = NULL;
|
||||
rc_haptic[i] = NULL;
|
||||
rc_joyID[i] = -1;
|
||||
rc_numJoysticks--;
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case SDL_JOYDEVICEADDED:
|
||||
//cout << "Joystick Added: " << event.jdevice.which << endl;
|
||||
tmp_joy = SDL_JoystickOpen(SDL_event.jdevice.which);
|
||||
tmp_joy_id = SDL_JoystickInstanceID(tmp_joy);
|
||||
tmp_joy_flag = 0;
|
||||
|
||||
for(int i = 0; i < 8; i++)
|
||||
{
|
||||
if(tmp_joy_id == rc_joyID[i])
|
||||
{
|
||||
tmp_joy_flag = 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if(SDL_event.jdevice.which >= 0 && tmp_joy_flag == 0)
|
||||
{
|
||||
for(int i = 0; i < 8; i++)
|
||||
{
|
||||
if(rc_joystick[i] == NULL)
|
||||
{
|
||||
//cout << "Assigned " << i << endl;
|
||||
rc_joystick[i] = tmp_joy;
|
||||
rc_haptic[i] = SDL_HapticOpenFromJoystick(rc_joystick[i]);
|
||||
SDL_HapticRumbleInit(rc_haptic[i]);
|
||||
rc_joyID[i] = tmp_joy_id;
|
||||
rc_numJoysticks++;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
#ifndef RC_MOBILE //This block handles touch events for non-mobile devices, Just in case it has a touch screen that SDL2 can get events for
|
||||
case SDL_FINGERDOWN:
|
||||
rc_touch = 1;
|
||||
rc_touchX = SDL_event.tfinger.x * win_w;
|
||||
rc_touchY = SDL_event.tfinger.y * win_h;
|
||||
#ifdef RC_IOS
|
||||
rc_pressure = 1; //FIXME: On IOS pressure is always getting reported as 0 on finger down so I am just setting it to 1 until I figure this out
|
||||
#else
|
||||
rc_pressure = SDL_event.tfinger.pressure;
|
||||
#endif
|
||||
rc_setTouchFingerEvent(SDL_event.tfinger.fingerId, rc_touchX, rc_touchY, rc_pressure);
|
||||
break;
|
||||
case SDL_FINGERUP:
|
||||
rc_touch = 0;
|
||||
rc_mt_status = 0;
|
||||
rc_touchX = SDL_event.tfinger.x * win_w;
|
||||
rc_touchY = SDL_event.tfinger.y * win_h;
|
||||
rc_pressure = SDL_event.tfinger.pressure;
|
||||
rc_setTouchFingerEvent(SDL_event.tfinger.fingerId, -1, -1, 0);
|
||||
break;
|
||||
case SDL_FINGERMOTION:
|
||||
rc_touch = 1;
|
||||
rc_touchX = SDL_event.tfinger.x * win_w;
|
||||
rc_touchY = SDL_event.tfinger.y * win_h;
|
||||
rc_motionX = SDL_event.tfinger.dx * win_w;
|
||||
rc_motionY = SDL_event.tfinger.dy * win_h;
|
||||
#ifdef RC_IOS
|
||||
rc_pressure = 1;
|
||||
#else
|
||||
rc_pressure = SDL_event.tfinger.pressure;
|
||||
#endif
|
||||
rc_setTouchFingerEvent(SDL_event.tfinger.fingerId, rc_touchX, rc_touchY, rc_pressure);
|
||||
break;
|
||||
case SDL_MULTIGESTURE:
|
||||
rc_touch = 2;
|
||||
rc_mt_status = 1;
|
||||
rc_mt_x = SDL_event.mgesture.x;
|
||||
rc_mt_y = SDL_event.mgesture.y;
|
||||
rc_mt_numFingers = SDL_event.mgesture.numFingers;
|
||||
rc_mt_dist = SDL_event.mgesture.dDist;
|
||||
rc_mt_theta = SDL_event.mgesture.dTheta;
|
||||
#ifdef RC_IOS
|
||||
rc_pressure = 1;
|
||||
#else
|
||||
rc_pressure = SDL_event.tfinger.pressure;
|
||||
#endif
|
||||
break;
|
||||
#endif
|
||||
|
||||
case SDL_USEREVENT:
|
||||
irrevent.EventType = irr::EET_USER_EVENT;
|
||||
irrevent.UserEvent.UserData1 = reinterpret_cast<uintptr_t>(SDL_event.user.data1);
|
||||
irrevent.UserEvent.UserData2 = reinterpret_cast<uintptr_t>(SDL_event.user.data2);
|
||||
|
||||
//device->postEventFromUser(irrevent);
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
} // end switch
|
||||
|
||||
} // end while
|
||||
|
||||
|
||||
if(!Close)
|
||||
{
|
||||
irrtheora::updateVideo();
|
||||
|
||||
VideoDriver->setRenderTarget(rc_canvas[0].texture);
|
||||
irr::core::vector2d<s32> bb_position(0,0);
|
||||
irr::core::dimension2d<u32> bb_dimension = rc_canvas[0].texture->getSize();
|
||||
irr::core::dimension2d<u32> win_dimension(win_w, win_h);
|
||||
VideoDriver->setViewPort( irr::core::rect<irr::s32>(bb_position, bb_dimension) );
|
||||
|
||||
irr::core::vector2d<irr::f32> screenSize( (irr::f32) rc_canvas[0].dimension.Width, (irr::f32) rc_canvas[0].dimension.Height );
|
||||
//irr::core::vector2d<irr::f32> screenSize( (irr::f32) win_h, (irr::f32) win_w );
|
||||
|
||||
Uint32 current_time_ms = SDL_GetTicks();
|
||||
double frame_current_time = ((double)current_time_ms)/1000.0;
|
||||
|
||||
for(int i = 0; i < rc_transition_actor.size();)
|
||||
{
|
||||
int t_actor = rc_transition_actor[i];
|
||||
|
||||
if((frame_current_time - rc_actor[t_actor].transition_start_time) >= rc_actor[t_actor].transition_time)
|
||||
{
|
||||
irr::scene::IAnimatedMeshSceneNode* node = (irr::scene::IAnimatedMeshSceneNode*)rc_actor[t_actor].mesh_node;
|
||||
node->setTransitionTime(0);
|
||||
node->setJointMode(irr::scene::EJUOR_NONE);
|
||||
rc_actor[t_actor].transition = false;
|
||||
rc_actor[t_actor].transition_time = 0;
|
||||
rc_actor[t_actor].transition_start_time = 0;
|
||||
rc_transition_actor.erase(t_actor);
|
||||
|
||||
rc_actor[t_actor].animation[0].start_frame = (int)rc_actor[t_actor].transition_frame;
|
||||
rc_actor[t_actor].animation[0].end_frame = (int)rc_actor[t_actor].transition_frame;
|
||||
rc_actor[t_actor].animation[0].fps = 0;
|
||||
rc_actor[t_actor].current_animation_loop = 0;
|
||||
rc_actor[t_actor].isPlaying = true;
|
||||
rc_actor[t_actor].current_animation = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
//std::cout << "Animate dammit" << std::endl;
|
||||
irr::scene::IAnimatedMeshSceneNode* node = (irr::scene::IAnimatedMeshSceneNode*)rc_actor[t_actor].mesh_node;
|
||||
node->animateJoints();
|
||||
i++;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
VideoDriver->beginScene(true, true);
|
||||
|
||||
if(!hasPreUpdated)
|
||||
{
|
||||
//rc_physics3D.DeltaTime = device->getTimer()->getTime() - rc_physics3D.TimeStamp;
|
||||
//rc_physics3D.TimeStamp = device->getTimer()->getTime();
|
||||
rc_physics3D.DeltaTime = SDL_GetTicks() - rc_physics3D.TimeStamp;
|
||||
rc_physics3D.TimeStamp = SDL_GetTicks();
|
||||
float fixed_timestep = rc_physics3D.fixedTimeStep < 0 ? rc_physics3D.DeltaTime*0.001f : rc_physics3D.fixedTimeStep;
|
||||
rc_physics3D.world->stepSimulation(rc_physics3D.DeltaTime*0.001f, rc_physics3D.maxSubSteps, fixed_timestep);
|
||||
}
|
||||
|
||||
for(int i = 0; i < rc_canvas.size(); i++)
|
||||
{
|
||||
if(rc_canvas[i].show3D)
|
||||
{
|
||||
VideoDriver->setRenderTarget(rc_canvas[i].texture, true, true, irr::video::SColor(255,120,120,120));
|
||||
|
||||
if(rc_canvas[i].camera.camera)
|
||||
SceneManager->setActiveCamera(rc_canvas[i].camera.camera);
|
||||
|
||||
rc_canvas[i].camera.update();
|
||||
|
||||
VideoDriver->setViewPort(irr::core::rect<irr::s32>(0,0,rc_canvas[i].texture->getSize().Width,rc_canvas[i].texture->getSize().Height));
|
||||
|
||||
//irr::core::rect viewport(irr::core::position, rc_canvas[i].viewport.dimension);
|
||||
//VideoDriver->setViewPort(viewport);
|
||||
|
||||
SceneManager->drawAll();
|
||||
//VideoDriver->draw2DRectangle(irr::video::SColor(255,0,255,0), irr::core::rect<irr::s32>(10,40,100,500));
|
||||
|
||||
//vector3df p0(0, 0, 0);
|
||||
//vector3df p1(10, 30, 0);
|
||||
//vector3df p2(20, -30, 0);
|
||||
//vector3df p3(30, 0, 0);
|
||||
//drawBezierCurve(VideoDriver, p0, p1, p2, p3, irr::video::SColor(255, 0, 255, 0), 100);
|
||||
|
||||
VideoDriver->setRenderTarget(rc_canvas[0].texture);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
for(int cz = 0; cz < rc_canvas_zOrder.size(); cz++)
|
||||
{
|
||||
int canvas_id = rc_canvas_zOrder[cz];
|
||||
|
||||
if(rc_canvas[canvas_id].texture && rc_canvas[canvas_id].visible)
|
||||
{
|
||||
irr::core::rect<s32> dest(rc_canvas[canvas_id].viewport.position, rc_canvas[canvas_id].viewport.dimension);
|
||||
irr::core::rect<s32> src(rc_canvas[canvas_id].offset, rc_canvas[canvas_id].viewport.dimension);
|
||||
|
||||
irr::video::SColor color(rc_canvas[canvas_id].color_mod);
|
||||
//color.set(255,255,255,255);
|
||||
|
||||
//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].viewport.dimension.Height << ")" << std::endl;
|
||||
|
||||
#if defined(RC_DRIVER_GLES2)
|
||||
if(rc_canvas[canvas_id].type == RC_CANVAS_TYPE_3D)
|
||||
{
|
||||
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()) );
|
||||
}
|
||||
else if(rc_canvas[canvas_id].type == RC_CANVAS_TYPE_2D)
|
||||
{
|
||||
irr::core::dimension2d<irr::u32> cv_dim = rc_canvas[canvas_id].viewport.dimension;
|
||||
irr::core::position2d<irr::s32> cv_pos = rc_canvas[canvas_id].viewport.position;
|
||||
irr::core::vector2d<irr::s32> cv_offset(rc_canvas[canvas_id].offset.X, rc_canvas[canvas_id].texture->getSize().Height - rc_canvas[canvas_id].offset.Y - cv_dim.Height);
|
||||
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
|
||||
|
||||
//drawSprites(canvas_id);
|
||||
//draw2DImage2(VideoDriver, rc_canvas[canvas_id].sprite_layer, src, dest, irr::core::vector2d<irr::s32>(0, 0), 0, true, color, screenSize);
|
||||
//drawCanvasImage(rc_canvas[canvas_id].texture, dest.UpperLeftCorner.X, dest.UpperLeftCorner.Y,
|
||||
// src.UpperLeftCorner.X, src.UpperLeftCorner.Y, src.getWidth(), src.getHeight(), dest.getWidth(), dest.getHeight());
|
||||
|
||||
//VideoDriver->draw2DImage(rc_canvas[canvas_id].texture, dest, src, 0, &color, true);
|
||||
}
|
||||
}
|
||||
|
||||
//env->drawAll();
|
||||
//VideoDriver->draw2DRectangle(irr::video::SColor(255,255,0,0), irr::core::rect<irr::s32>(0,0,100,500));
|
||||
|
||||
VideoDriver->setRenderTarget(0);
|
||||
//VideoDriver->beginScene(true, true);
|
||||
//VideoDriver->draw2DImage(rc_canvas[0].texture, irr::core::vector2d<irr::s32>(0,0));
|
||||
|
||||
//debug
|
||||
//std::cout << "scale:: " << rc_window_size.Width << ", " << win_w << ", " << rc_canvas[0].texture->getSize().Width << std::endl;
|
||||
//irr::core::rect<s32> src( irr::core::vector2d<s32>(0,0), rc_canvas[0].texture->getSize() );
|
||||
#ifdef RC_DRIVER_GLES2
|
||||
irr::core::rect<s32> src( irr::core::vector2d<s32>(0,0), rc_canvas[0].texture->getSize() );
|
||||
irr::core::rect<s32> dest( irr::core::vector2d<s32>(0,0), irr::core::dimension2d<s32>(win_w*w_scale, win_h*h_scale) );
|
||||
#else
|
||||
irr::core::rect<s32> src( irr::core::vector2d<s32>(0,0), rc_window_size );
|
||||
irr::core::rect<s32> dest;
|
||||
|
||||
if(rc_windowIsFullscreen())
|
||||
dest = irr::core::rect<s32>( irr::core::vector2d<s32>(0,0), irr::core::dimension2d<s32>(win_w, win_h) );
|
||||
else
|
||||
dest = irr::core::rect<s32>( irr::core::vector2d<s32>(0,rc_canvas[0].texture->getSize().Height - rc_window_size.Height), irr::core::dimension2d<s32>(win_w, win_h) );
|
||||
#endif // RC_DRIVER_GLES2
|
||||
|
||||
//irr::video::SColor color(0);
|
||||
VideoDriver->draw2DImage(rc_canvas[0].texture, dest, src);
|
||||
//draw2DImage2(VideoDriver, rc_canvas[0].texture, src, dest, irr::core::position2d<irr::s32>(0, 0), 0, false, color, screenSize);
|
||||
//irr::core::rect<irr::s32> src( irr::core::vector2d<irr::s32>(0, 0), rc_canvas[0].texture->getSize() );
|
||||
//irr::core::rect<irr::s32> dest( irr::core::vector2d<irr::s32>(0, 0), irr::core::dimension2d<irr::s32>( );
|
||||
//draw2DImage2(VideoDriver, rc_canvas[canvas_id].texture, src, dest, irr::core::position2d<irr::s32>(0, 0), 0, true, color, screenSize);
|
||||
|
||||
//VideoDriver->draw2DImage(rc_image[0].image, irr::core::rect<irr::s32>(0,0,100,100), irr::core::rect<irr::s32>(0,0,100,100));
|
||||
//VideoDriver->draw2DRectangle(irr::video::SColor(255,255,0,0), irr::core::rect<irr::s32>(0,0,100,100));
|
||||
//end debug
|
||||
|
||||
//device->getGUIEnvironment()->drawAll();
|
||||
VideoDriver->endScene();
|
||||
|
||||
rc_setActiveCanvas(rc_active_canvas);
|
||||
}
|
||||
|
||||
hasPreUpdated = false; //Will be set to true if PreUpdate() is called
|
||||
|
||||
#ifdef RC_WEB
|
||||
emscripten_sleep(0);
|
||||
#else
|
||||
SDL_Delay(0);
|
||||
#endif // RC_WEB
|
||||
|
||||
return (!Close);
|
||||
}
|
||||
|
||||
#endif // RC_GFX_INCLUDED
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
#define RC_OS_DEFINES_H_INCLUDED
|
||||
|
||||
//USED FOR TESTING ONLY
|
||||
#define RC_TESTING
|
||||
//#define RC_TESTING
|
||||
|
||||
//I am checking Android first since I think it also defines __linux__
|
||||
|
||||
|
||||
@@ -52,6 +52,21 @@ int rc_createTileSet(int img_id, int tile_w, int tile_h)
|
||||
return tset_id;
|
||||
}
|
||||
|
||||
void rc_deleteTileSet(int tileset)
|
||||
{
|
||||
if(tileset < 0 || tileset >= rc_tileset.size())
|
||||
return;
|
||||
|
||||
if(!rc_tileset[tileset].active)
|
||||
return;
|
||||
|
||||
rc_tileset[tileset].tiles.clear();
|
||||
rc_tileset[tileset].img_id = -1;
|
||||
rc_tileset[tileset].active = false;
|
||||
|
||||
rc_deleted_tileset.push_back(tileset);
|
||||
}
|
||||
|
||||
void rc_setTileAnimationLength(int tileset, int base_tile, int num_frames)
|
||||
{
|
||||
if(tileset < 0 || tileset >= rc_tileset.size())
|
||||
@@ -178,6 +193,24 @@ int rc_createTileMap(int tileset, int widthInTiles, int heightInTiles)
|
||||
return tm_id;
|
||||
}
|
||||
|
||||
void rc_deleteTileMap(int tilemap)
|
||||
{
|
||||
if(tilemap < 0 || tilemap >= rc_tilemap.size())
|
||||
return;
|
||||
|
||||
if(!rc_tilemap[tilemap].active)
|
||||
return;
|
||||
|
||||
rc_tilemap[tilemap].rows.clear();
|
||||
rc_tilemap[tilemap].num_tiles_across = 0;
|
||||
rc_tilemap[tilemap].num_tiles_down = 0;
|
||||
rc_tilemap[tilemap].texture = NULL;
|
||||
rc_tilemap[tilemap].tileset = -1;
|
||||
rc_tilemap[tilemap].active = false;
|
||||
|
||||
rc_deleted_tilemap.push_back(tilemap);
|
||||
}
|
||||
|
||||
void rc_setTileMapSize(int tilemap, int widthInTiles, int heightInTiles)
|
||||
{
|
||||
if(tilemap < 0 || tilemap >= rc_tilemap.size())
|
||||
|
||||
626
rcbasic_runtime/rc_windowclose.h
Normal file
626
rcbasic_runtime/rc_windowclose.h
Normal file
@@ -0,0 +1,626 @@
|
||||
#ifndef RC_WINDOWCLOSE_H_INCLUDED
|
||||
#define RC_WINDOWCLOSE_H_INCLUDED
|
||||
|
||||
void rc_closeWindow_hw()
|
||||
{
|
||||
irrtheora::stopVideo();
|
||||
irrtheora::deleteVideo();
|
||||
|
||||
for(int i = 0; i < rc_font.size(); i++)
|
||||
rc_deleteFont(i);
|
||||
|
||||
for(int i = 0; i < rc_tileset.size(); i++)
|
||||
rc_deleteTileSet(i);
|
||||
|
||||
for(int i = 0; i < rc_tilemap.size(); i++)
|
||||
rc_deleteTileMap(i);
|
||||
|
||||
for(int i = 0; i < rc_image.size(); i++)
|
||||
rc_deleteImage(i);
|
||||
|
||||
for(int i = 0; i < rc_sprite.size(); i++)
|
||||
rc_deleteSprite(i);
|
||||
|
||||
for(int i = 0; i < rc_joint.size(); i++)
|
||||
rc_deleteJoint(i);
|
||||
|
||||
for(int i = 0; i < rc_actor.size(); i++)
|
||||
rc_deleteActor(i);
|
||||
|
||||
for(int i = 0; i < rc_physics3D.constraints.size(); i++)
|
||||
rc_deleteConstraint(i);
|
||||
|
||||
for(int i = 0; i < rc_canvas.size(); i++)
|
||||
rc_canvasClose(i);
|
||||
|
||||
rc_clearScene();
|
||||
|
||||
device->drop();
|
||||
device = NULL;
|
||||
VideoDriver = NULL;
|
||||
SceneManager = NULL;
|
||||
|
||||
if(rc_window!=NULL)
|
||||
SDL_DestroyWindow(rc_window);
|
||||
rc_window = NULL;
|
||||
|
||||
rc_canvas.clear();
|
||||
rc_canvas_zOrder.clear();
|
||||
rc_font.clear();
|
||||
}
|
||||
|
||||
void rc_preUpdate()
|
||||
{
|
||||
//3D World Update
|
||||
//rc_physics3D.DeltaTime = device->getTimer()->getTime() - rc_physics3D.TimeStamp;
|
||||
//rc_physics3D.TimeStamp = device->getTimer()->getTime();
|
||||
rc_physics3D.DeltaTime = SDL_GetTicks() - rc_physics3D.TimeStamp;
|
||||
rc_physics3D.TimeStamp = SDL_GetTicks();
|
||||
float fixed_timestep = rc_physics3D.fixedTimeStep < 0 ? rc_physics3D.DeltaTime*0.001f : rc_physics3D.fixedTimeStep;
|
||||
rc_physics3D.world->stepSimulation(rc_physics3D.DeltaTime*0.001f, rc_physics3D.maxSubSteps, fixed_timestep);
|
||||
|
||||
for(int i = 0; i < rc_canvas.size(); i++)
|
||||
{
|
||||
if(rc_canvas[i].type != RC_CANVAS_TYPE_SPRITE)
|
||||
continue;
|
||||
|
||||
Uint32 delta_time = SDL_GetTicks() - rc_canvas[i].physics2D.time_stamp;
|
||||
rc_canvas[i].physics2D.time_stamp = SDL_GetTicks();
|
||||
float step = rc_canvas[i].physics2D.timeStep < 0 ? (delta_time*0.001f) : rc_canvas[i].physics2D.timeStep;
|
||||
int32 velocityIterations = rc_canvas[i].physics2D.velocityIterations;
|
||||
int32 positionIterations = rc_canvas[i].physics2D.positionIterations;
|
||||
|
||||
if(rc_canvas[i].physics2D.enabled)
|
||||
rc_canvas[i].physics2D.world->Step(step, velocityIterations, positionIterations);
|
||||
}
|
||||
|
||||
hasPreUpdated = true;
|
||||
}
|
||||
|
||||
bool rc_update()
|
||||
{
|
||||
if(!device->run())
|
||||
return false;
|
||||
|
||||
int win_w = 0, win_h = 0;
|
||||
double w_scale = 1, h_scale = 1;
|
||||
|
||||
if(rc_window)
|
||||
{
|
||||
SDL_GetWindowSize(rc_window, &win_w, &win_h);
|
||||
//std::cout << "size = " << win_w << ", " << win_h << std::endl;
|
||||
}
|
||||
|
||||
w_scale = ( (double)win_w / (double)rc_window_size.Width );
|
||||
h_scale = ( (double)win_h / (double)rc_window_size.Height );
|
||||
|
||||
rc_window_mouse_scale_x = ( (double)rc_window_size.Width / (double)win_w );
|
||||
rc_window_mouse_scale_y = ( (double)rc_window_size.Height / (double)win_h );
|
||||
|
||||
rc_window_zone_scale_x = w_scale;
|
||||
rc_window_zone_scale_y = h_scale;
|
||||
|
||||
SEvent irrevent;
|
||||
SDL_Event SDL_event;
|
||||
bool Close = false;
|
||||
|
||||
rc_inkey_val = 0;
|
||||
|
||||
while ( !Close && SDL_PollEvent( &SDL_event ) )
|
||||
{
|
||||
// os::Printer::log("event: ", core::stringc((int)SDL_event.type).c_str(), ELL_INFORMATION); // just for debugging
|
||||
|
||||
switch ( SDL_event.type )
|
||||
{
|
||||
case SDL_QUIT:
|
||||
SDL_PumpEvents();
|
||||
Close = true;
|
||||
break;
|
||||
case SDL_MOUSEMOTION:
|
||||
irrevent.EventType = irr::EET_MOUSE_INPUT_EVENT;
|
||||
irrevent.MouseInput.Event = irr::EMIE_MOUSE_MOVED;
|
||||
MouseX = irrevent.MouseInput.X = SDL_event.motion.x;
|
||||
MouseY = irrevent.MouseInput.Y = SDL_event.motion.y;
|
||||
MouseXRel = SDL_event.motion.xrel;
|
||||
MouseYRel = SDL_event.motion.yrel;
|
||||
irrevent.MouseInput.ButtonStates = MouseButtonStates;
|
||||
|
||||
device->postEventFromUser(irrevent);
|
||||
break;
|
||||
|
||||
case SDL_MOUSEBUTTONDOWN:
|
||||
case SDL_MOUSEBUTTONUP:
|
||||
|
||||
irrevent.EventType = irr::EET_MOUSE_INPUT_EVENT;
|
||||
irrevent.MouseInput.X = SDL_event.button.x;
|
||||
irrevent.MouseInput.Y = SDL_event.button.y;
|
||||
|
||||
irrevent.MouseInput.Event = irr::EMIE_MOUSE_MOVED;
|
||||
|
||||
switch(SDL_event.button.button)
|
||||
{
|
||||
case SDL_BUTTON_LEFT:
|
||||
if (SDL_event.type == SDL_MOUSEBUTTONDOWN)
|
||||
{
|
||||
irrevent.MouseInput.Event = irr::EMIE_LMOUSE_PRESSED_DOWN;
|
||||
MouseButtonStates |= irr::EMBSM_LEFT;
|
||||
}
|
||||
else
|
||||
{
|
||||
irrevent.MouseInput.Event = irr::EMIE_LMOUSE_LEFT_UP;
|
||||
MouseButtonStates &= !irr::EMBSM_LEFT;
|
||||
}
|
||||
|
||||
//std::cout << "Position = " << SDL_event.button.x << ", " << SDL_event.button.y << std::endl;
|
||||
//rc_canvas[0].offset.X++;
|
||||
break;
|
||||
|
||||
case SDL_BUTTON_RIGHT:
|
||||
if (SDL_event.type == SDL_MOUSEBUTTONDOWN)
|
||||
{
|
||||
irrevent.MouseInput.Event = irr::EMIE_RMOUSE_PRESSED_DOWN;
|
||||
MouseButtonStates |= irr::EMBSM_RIGHT;
|
||||
}
|
||||
else
|
||||
{
|
||||
irrevent.MouseInput.Event = irr::EMIE_RMOUSE_LEFT_UP;
|
||||
MouseButtonStates &= !irr::EMBSM_RIGHT;
|
||||
}
|
||||
|
||||
//rc_setWindowFullscreen(1);
|
||||
//rc_canvas[0].offset.X--;
|
||||
break;
|
||||
|
||||
case SDL_BUTTON_MIDDLE:
|
||||
if (SDL_event.type == SDL_MOUSEBUTTONDOWN)
|
||||
{
|
||||
irrevent.MouseInput.Event = irr::EMIE_MMOUSE_PRESSED_DOWN;
|
||||
MouseButtonStates |= irr::EMBSM_MIDDLE;
|
||||
}
|
||||
else
|
||||
{
|
||||
irrevent.MouseInput.Event = irr::EMIE_MMOUSE_LEFT_UP;
|
||||
MouseButtonStates &= !irr::EMBSM_MIDDLE;
|
||||
}
|
||||
break;
|
||||
|
||||
}
|
||||
|
||||
irrevent.MouseInput.ButtonStates = MouseButtonStates;
|
||||
|
||||
if (irrevent.MouseInput.Event != irr::EMIE_MOUSE_MOVED)
|
||||
{
|
||||
device->postEventFromUser(irrevent);
|
||||
|
||||
if ( irrevent.MouseInput.Event >= EMIE_LMOUSE_PRESSED_DOWN && irrevent.MouseInput.Event <= EMIE_MMOUSE_PRESSED_DOWN )
|
||||
{
|
||||
u32 clicks = device->checkSuccessiveClicks(irrevent.MouseInput.X, irrevent.MouseInput.Y, irrevent.MouseInput.Event);
|
||||
if ( clicks == 2 )
|
||||
{
|
||||
irrevent.MouseInput.Event = (EMOUSE_INPUT_EVENT)(EMIE_LMOUSE_DOUBLE_CLICK + irrevent.MouseInput.Event-EMIE_LMOUSE_PRESSED_DOWN);
|
||||
device->postEventFromUser(irrevent);
|
||||
}
|
||||
else if ( clicks == 3 )
|
||||
{
|
||||
irrevent.MouseInput.Event = (EMOUSE_INPUT_EVENT)(EMIE_LMOUSE_TRIPLE_CLICK + irrevent.MouseInput.Event-EMIE_LMOUSE_PRESSED_DOWN);
|
||||
device->postEventFromUser(irrevent);
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case SDL_MOUSEWHEEL:
|
||||
irrevent.MouseInput.Event = irr::EMIE_MOUSE_WHEEL;
|
||||
irrevent.MouseInput.Wheel = SDL_event.wheel.y;
|
||||
rc_mwheelx = SDL_event.wheel.x;
|
||||
rc_mwheely = SDL_event.wheel.y;
|
||||
break;
|
||||
|
||||
case SDL_TEXTINPUT:
|
||||
if(rc_textinput_flag == true)
|
||||
{
|
||||
rc_textinput_string += SDL_event.text.text;
|
||||
}
|
||||
break;
|
||||
|
||||
case SDL_KEYUP:
|
||||
case SDL_KEYDOWN:
|
||||
{
|
||||
SDLKeyMap mp;
|
||||
mp.SDLKey = SDL_event.key.keysym.sym;
|
||||
s32 idx = KeyMap.binary_search(mp);
|
||||
|
||||
EKEY_CODE key;
|
||||
if (idx == -1)
|
||||
key = (EKEY_CODE)0;
|
||||
else
|
||||
key = (EKEY_CODE)KeyMap[idx].Win32Key;
|
||||
|
||||
irrevent.EventType = irr::EET_KEY_INPUT_EVENT;
|
||||
irrevent.KeyInput.Char = SDL_event.key.keysym.sym;
|
||||
irrevent.KeyInput.Key = key;
|
||||
irrevent.KeyInput.PressedDown = (SDL_event.type == SDL_KEYDOWN);
|
||||
irrevent.KeyInput.Shift = (SDL_event.key.keysym.mod & KMOD_SHIFT) != 0;
|
||||
irrevent.KeyInput.Control = (SDL_event.key.keysym.mod & KMOD_CTRL ) != 0;
|
||||
device->postEventFromUser(irrevent);
|
||||
}
|
||||
|
||||
if(SDL_event.type == SDL_KEYDOWN)
|
||||
{
|
||||
if(rc_textinput_flag && SDL_event.key.keysym.sym == SDLK_BACKSPACE && rc_textinput_string.length() > 0
|
||||
&& rc_toggleBackspace)
|
||||
{
|
||||
rc_textinput_string = rc_utf8_substr(rc_textinput_string, 0, rc_utf8_length(rc_textinput_string)-1);
|
||||
}
|
||||
|
||||
rc_inkey_val = SDL_event.key.keysym.sym;
|
||||
}
|
||||
break;
|
||||
|
||||
|
||||
case SDL_WINDOWEVENT:
|
||||
if (SDL_event.window.event == SDL_WINDOWEVENT_SIZE_CHANGED)
|
||||
{
|
||||
// FIXME: Implement more precise window control
|
||||
// FIXME: Check if the window is game window
|
||||
s32 Width = SDL_event.window.data1;
|
||||
s32 Height = SDL_event.window.data2;
|
||||
|
||||
rc_win_event = RC_WIN_EVENT_RESIZE;
|
||||
|
||||
//resizeWindow(Width, Height);
|
||||
if (VideoDriver)
|
||||
VideoDriver->OnResize(core::dimension2d<u32>(Width, Height));
|
||||
|
||||
win_w = Width;
|
||||
win_h = Height;
|
||||
|
||||
}
|
||||
else if(SDL_event.window.event == SDL_WINDOWEVENT_CLOSE)
|
||||
{
|
||||
if(rc_window)
|
||||
{
|
||||
rc_win_event = RC_WIN_EVENT_CLOSE;
|
||||
|
||||
if(SDL_QuitRequested() != 0)
|
||||
{
|
||||
SDL_FlushEvent(SDL_QUIT);
|
||||
}
|
||||
if(rc_win_exitOnClose)
|
||||
{
|
||||
rc_closeWindow_hw();
|
||||
Close = true;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
else if(SDL_event.window.event == SDL_WINDOWEVENT_MINIMIZED)
|
||||
{
|
||||
if(rc_window)
|
||||
{
|
||||
rc_win_event = RC_WIN_EVENT_MINIMIZE;
|
||||
}
|
||||
}
|
||||
else if(SDL_event.window.event == SDL_WINDOWEVENT_MAXIMIZED)
|
||||
{
|
||||
if(rc_window)
|
||||
{
|
||||
rc_win_event = RC_WIN_EVENT_MAXIMIZE;
|
||||
}
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
case SDL_JOYDEVICEREMOVED:
|
||||
//cout << "Joystick Removed: Instance " << event.jdevice.which << endl;
|
||||
for(int i = 0; i < 8; i++)
|
||||
{
|
||||
if(SDL_event.jdevice.which == rc_joyID[i] && rc_joystick[i])
|
||||
{
|
||||
//cout << "Joystick [" << i << "] was removed" << endl;
|
||||
SDL_HapticClose(rc_haptic[i]);
|
||||
SDL_JoystickClose(rc_joystick[i]);
|
||||
rc_joystick[i] = NULL;
|
||||
rc_haptic[i] = NULL;
|
||||
rc_joyID[i] = -1;
|
||||
rc_numJoysticks--;
|
||||
break;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case SDL_JOYDEVICEADDED:
|
||||
//cout << "Joystick Added: " << event.jdevice.which << endl;
|
||||
tmp_joy = SDL_JoystickOpen(SDL_event.jdevice.which);
|
||||
tmp_joy_id = SDL_JoystickInstanceID(tmp_joy);
|
||||
tmp_joy_flag = 0;
|
||||
|
||||
for(int i = 0; i < 8; i++)
|
||||
{
|
||||
if(tmp_joy_id == rc_joyID[i])
|
||||
{
|
||||
tmp_joy_flag = 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if(SDL_event.jdevice.which >= 0 && tmp_joy_flag == 0)
|
||||
{
|
||||
for(int i = 0; i < 8; i++)
|
||||
{
|
||||
if(rc_joystick[i] == NULL)
|
||||
{
|
||||
//cout << "Assigned " << i << endl;
|
||||
rc_joystick[i] = tmp_joy;
|
||||
rc_haptic[i] = SDL_HapticOpenFromJoystick(rc_joystick[i]);
|
||||
SDL_HapticRumbleInit(rc_haptic[i]);
|
||||
rc_joyID[i] = tmp_joy_id;
|
||||
rc_numJoysticks++;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
#ifndef RC_MOBILE //This block handles touch events for non-mobile devices, Just in case it has a touch screen that SDL2 can get events for
|
||||
case SDL_FINGERDOWN:
|
||||
rc_touch = 1;
|
||||
rc_touchX = SDL_event.tfinger.x * win_w;
|
||||
rc_touchY = SDL_event.tfinger.y * win_h;
|
||||
#ifdef RC_IOS
|
||||
rc_pressure = 1; //FIXME: On IOS pressure is always getting reported as 0 on finger down so I am just setting it to 1 until I figure this out
|
||||
#else
|
||||
rc_pressure = SDL_event.tfinger.pressure;
|
||||
#endif
|
||||
rc_setTouchFingerEvent(SDL_event.tfinger.fingerId, rc_touchX, rc_touchY, rc_pressure);
|
||||
break;
|
||||
case SDL_FINGERUP:
|
||||
rc_touch = 0;
|
||||
rc_mt_status = 0;
|
||||
rc_touchX = SDL_event.tfinger.x * win_w;
|
||||
rc_touchY = SDL_event.tfinger.y * win_h;
|
||||
rc_pressure = SDL_event.tfinger.pressure;
|
||||
rc_setTouchFingerEvent(SDL_event.tfinger.fingerId, -1, -1, 0);
|
||||
break;
|
||||
case SDL_FINGERMOTION:
|
||||
rc_touch = 1;
|
||||
rc_touchX = SDL_event.tfinger.x * win_w;
|
||||
rc_touchY = SDL_event.tfinger.y * win_h;
|
||||
rc_motionX = SDL_event.tfinger.dx * win_w;
|
||||
rc_motionY = SDL_event.tfinger.dy * win_h;
|
||||
#ifdef RC_IOS
|
||||
rc_pressure = 1;
|
||||
#else
|
||||
rc_pressure = SDL_event.tfinger.pressure;
|
||||
#endif
|
||||
rc_setTouchFingerEvent(SDL_event.tfinger.fingerId, rc_touchX, rc_touchY, rc_pressure);
|
||||
break;
|
||||
case SDL_MULTIGESTURE:
|
||||
rc_touch = 2;
|
||||
rc_mt_status = 1;
|
||||
rc_mt_x = SDL_event.mgesture.x;
|
||||
rc_mt_y = SDL_event.mgesture.y;
|
||||
rc_mt_numFingers = SDL_event.mgesture.numFingers;
|
||||
rc_mt_dist = SDL_event.mgesture.dDist;
|
||||
rc_mt_theta = SDL_event.mgesture.dTheta;
|
||||
#ifdef RC_IOS
|
||||
rc_pressure = 1;
|
||||
#else
|
||||
rc_pressure = SDL_event.tfinger.pressure;
|
||||
#endif
|
||||
break;
|
||||
#endif
|
||||
|
||||
case SDL_USEREVENT:
|
||||
irrevent.EventType = irr::EET_USER_EVENT;
|
||||
irrevent.UserEvent.UserData1 = reinterpret_cast<uintptr_t>(SDL_event.user.data1);
|
||||
irrevent.UserEvent.UserData2 = reinterpret_cast<uintptr_t>(SDL_event.user.data2);
|
||||
|
||||
//device->postEventFromUser(irrevent);
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
} // end switch
|
||||
|
||||
} // end while
|
||||
|
||||
|
||||
if(!Close)
|
||||
{
|
||||
irrtheora::updateVideo();
|
||||
|
||||
VideoDriver->setRenderTarget(rc_canvas[0].texture);
|
||||
irr::core::vector2d<s32> bb_position(0,0);
|
||||
irr::core::dimension2d<u32> bb_dimension = rc_canvas[0].texture->getSize();
|
||||
irr::core::dimension2d<u32> win_dimension(win_w, win_h);
|
||||
VideoDriver->setViewPort( irr::core::rect<irr::s32>(bb_position, bb_dimension) );
|
||||
|
||||
irr::core::vector2d<irr::f32> screenSize( (irr::f32) rc_canvas[0].dimension.Width, (irr::f32) rc_canvas[0].dimension.Height );
|
||||
//irr::core::vector2d<irr::f32> screenSize( (irr::f32) win_h, (irr::f32) win_w );
|
||||
|
||||
Uint32 current_time_ms = SDL_GetTicks();
|
||||
double frame_current_time = ((double)current_time_ms)/1000.0;
|
||||
|
||||
for(int i = 0; i < rc_transition_actor.size();)
|
||||
{
|
||||
int t_actor = rc_transition_actor[i];
|
||||
|
||||
if((frame_current_time - rc_actor[t_actor].transition_start_time) >= rc_actor[t_actor].transition_time)
|
||||
{
|
||||
irr::scene::IAnimatedMeshSceneNode* node = (irr::scene::IAnimatedMeshSceneNode*)rc_actor[t_actor].mesh_node;
|
||||
node->setTransitionTime(0);
|
||||
node->setJointMode(irr::scene::EJUOR_NONE);
|
||||
rc_actor[t_actor].transition = false;
|
||||
rc_actor[t_actor].transition_time = 0;
|
||||
rc_actor[t_actor].transition_start_time = 0;
|
||||
rc_transition_actor.erase(t_actor);
|
||||
|
||||
rc_actor[t_actor].animation[0].start_frame = (int)rc_actor[t_actor].transition_frame;
|
||||
rc_actor[t_actor].animation[0].end_frame = (int)rc_actor[t_actor].transition_frame;
|
||||
rc_actor[t_actor].animation[0].fps = 0;
|
||||
rc_actor[t_actor].current_animation_loop = 0;
|
||||
rc_actor[t_actor].isPlaying = true;
|
||||
rc_actor[t_actor].current_animation = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
//std::cout << "Animate dammit" << std::endl;
|
||||
irr::scene::IAnimatedMeshSceneNode* node = (irr::scene::IAnimatedMeshSceneNode*)rc_actor[t_actor].mesh_node;
|
||||
node->animateJoints();
|
||||
i++;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
VideoDriver->beginScene(true, true);
|
||||
|
||||
if(!hasPreUpdated)
|
||||
{
|
||||
//rc_physics3D.DeltaTime = device->getTimer()->getTime() - rc_physics3D.TimeStamp;
|
||||
//rc_physics3D.TimeStamp = device->getTimer()->getTime();
|
||||
rc_physics3D.DeltaTime = SDL_GetTicks() - rc_physics3D.TimeStamp;
|
||||
rc_physics3D.TimeStamp = SDL_GetTicks();
|
||||
float fixed_timestep = rc_physics3D.fixedTimeStep < 0 ? rc_physics3D.DeltaTime*0.001f : rc_physics3D.fixedTimeStep;
|
||||
rc_physics3D.world->stepSimulation(rc_physics3D.DeltaTime*0.001f, rc_physics3D.maxSubSteps, fixed_timestep);
|
||||
}
|
||||
|
||||
for(int i = 0; i < rc_canvas.size(); i++)
|
||||
{
|
||||
if(rc_canvas[i].show3D)
|
||||
{
|
||||
VideoDriver->setRenderTarget(rc_canvas[i].texture, true, true, irr::video::SColor(255,120,120,120));
|
||||
|
||||
if(rc_canvas[i].camera.camera)
|
||||
SceneManager->setActiveCamera(rc_canvas[i].camera.camera);
|
||||
|
||||
rc_canvas[i].camera.update();
|
||||
|
||||
VideoDriver->setViewPort(irr::core::rect<irr::s32>(0,0,rc_canvas[i].texture->getSize().Width,rc_canvas[i].texture->getSize().Height));
|
||||
|
||||
//irr::core::rect viewport(irr::core::position, rc_canvas[i].viewport.dimension);
|
||||
//VideoDriver->setViewPort(viewport);
|
||||
|
||||
SceneManager->drawAll();
|
||||
//VideoDriver->draw2DRectangle(irr::video::SColor(255,0,255,0), irr::core::rect<irr::s32>(10,40,100,500));
|
||||
|
||||
//vector3df p0(0, 0, 0);
|
||||
//vector3df p1(10, 30, 0);
|
||||
//vector3df p2(20, -30, 0);
|
||||
//vector3df p3(30, 0, 0);
|
||||
//drawBezierCurve(VideoDriver, p0, p1, p2, p3, irr::video::SColor(255, 0, 255, 0), 100);
|
||||
|
||||
VideoDriver->setRenderTarget(rc_canvas[0].texture);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
for(int cz = 0; cz < rc_canvas_zOrder.size(); cz++)
|
||||
{
|
||||
int canvas_id = rc_canvas_zOrder[cz];
|
||||
|
||||
if(rc_canvas[canvas_id].texture && rc_canvas[canvas_id].visible)
|
||||
{
|
||||
irr::core::rect<s32> dest(rc_canvas[canvas_id].viewport.position, rc_canvas[canvas_id].viewport.dimension);
|
||||
irr::core::rect<s32> src(rc_canvas[canvas_id].offset, rc_canvas[canvas_id].viewport.dimension);
|
||||
|
||||
irr::video::SColor color(rc_canvas[canvas_id].color_mod);
|
||||
//color.set(255,255,255,255);
|
||||
|
||||
//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].viewport.dimension.Height << ")" << std::endl;
|
||||
|
||||
#if defined(RC_DRIVER_GLES2)
|
||||
if(rc_canvas[canvas_id].type == RC_CANVAS_TYPE_3D)
|
||||
{
|
||||
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()) );
|
||||
}
|
||||
else if(rc_canvas[canvas_id].type == RC_CANVAS_TYPE_2D)
|
||||
{
|
||||
irr::core::dimension2d<irr::u32> cv_dim = rc_canvas[canvas_id].viewport.dimension;
|
||||
irr::core::position2d<irr::s32> cv_pos = rc_canvas[canvas_id].viewport.position;
|
||||
irr::core::vector2d<irr::s32> cv_offset(rc_canvas[canvas_id].offset.X, rc_canvas[canvas_id].texture->getSize().Height - rc_canvas[canvas_id].offset.Y - cv_dim.Height);
|
||||
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
|
||||
|
||||
//drawSprites(canvas_id);
|
||||
//draw2DImage2(VideoDriver, rc_canvas[canvas_id].sprite_layer, src, dest, irr::core::vector2d<irr::s32>(0, 0), 0, true, color, screenSize);
|
||||
//drawCanvasImage(rc_canvas[canvas_id].texture, dest.UpperLeftCorner.X, dest.UpperLeftCorner.Y,
|
||||
// src.UpperLeftCorner.X, src.UpperLeftCorner.Y, src.getWidth(), src.getHeight(), dest.getWidth(), dest.getHeight());
|
||||
|
||||
//VideoDriver->draw2DImage(rc_canvas[canvas_id].texture, dest, src, 0, &color, true);
|
||||
}
|
||||
}
|
||||
|
||||
//env->drawAll();
|
||||
//VideoDriver->draw2DRectangle(irr::video::SColor(255,255,0,0), irr::core::rect<irr::s32>(0,0,100,500));
|
||||
|
||||
VideoDriver->setRenderTarget(0);
|
||||
//VideoDriver->beginScene(true, true);
|
||||
//VideoDriver->draw2DImage(rc_canvas[0].texture, irr::core::vector2d<irr::s32>(0,0));
|
||||
|
||||
//debug
|
||||
//std::cout << "scale:: " << rc_window_size.Width << ", " << win_w << ", " << rc_canvas[0].texture->getSize().Width << std::endl;
|
||||
//irr::core::rect<s32> src( irr::core::vector2d<s32>(0,0), rc_canvas[0].texture->getSize() );
|
||||
#ifdef RC_DRIVER_GLES2
|
||||
irr::core::rect<s32> src( irr::core::vector2d<s32>(0,0), rc_canvas[0].texture->getSize() );
|
||||
irr::core::rect<s32> dest( irr::core::vector2d<s32>(0,0), irr::core::dimension2d<s32>(win_w*w_scale, win_h*h_scale) );
|
||||
#else
|
||||
irr::core::rect<s32> src( irr::core::vector2d<s32>(0,0), rc_window_size );
|
||||
irr::core::rect<s32> dest;
|
||||
|
||||
if(rc_windowIsFullscreen())
|
||||
dest = irr::core::rect<s32>( irr::core::vector2d<s32>(0,0), irr::core::dimension2d<s32>(win_w, win_h) );
|
||||
else
|
||||
dest = irr::core::rect<s32>( irr::core::vector2d<s32>(0,rc_canvas[0].texture->getSize().Height - rc_window_size.Height), irr::core::dimension2d<s32>(win_w, win_h) );
|
||||
#endif // RC_DRIVER_GLES2
|
||||
|
||||
//irr::video::SColor color(0);
|
||||
VideoDriver->draw2DImage(rc_canvas[0].texture, dest, src);
|
||||
//draw2DImage2(VideoDriver, rc_canvas[0].texture, src, dest, irr::core::position2d<irr::s32>(0, 0), 0, false, color, screenSize);
|
||||
//irr::core::rect<irr::s32> src( irr::core::vector2d<irr::s32>(0, 0), rc_canvas[0].texture->getSize() );
|
||||
//irr::core::rect<irr::s32> dest( irr::core::vector2d<irr::s32>(0, 0), irr::core::dimension2d<irr::s32>( );
|
||||
//draw2DImage2(VideoDriver, rc_canvas[canvas_id].texture, src, dest, irr::core::position2d<irr::s32>(0, 0), 0, true, color, screenSize);
|
||||
|
||||
//VideoDriver->draw2DImage(rc_image[0].image, irr::core::rect<irr::s32>(0,0,100,100), irr::core::rect<irr::s32>(0,0,100,100));
|
||||
//VideoDriver->draw2DRectangle(irr::video::SColor(255,255,0,0), irr::core::rect<irr::s32>(0,0,100,100));
|
||||
//end debug
|
||||
|
||||
//device->getGUIEnvironment()->drawAll();
|
||||
VideoDriver->endScene();
|
||||
|
||||
rc_setActiveCanvas(rc_active_canvas);
|
||||
}
|
||||
|
||||
hasPreUpdated = false; //Will be set to true if PreUpdate() is called
|
||||
|
||||
#ifdef RC_WEB
|
||||
emscripten_sleep(0);
|
||||
#else
|
||||
SDL_Delay(0);
|
||||
#endif // RC_WEB
|
||||
|
||||
return (!Close);
|
||||
}
|
||||
|
||||
#endif // RC_WINDOWCLOSE_H_INCLUDED
|
||||
@@ -1,5 +1,5 @@
|
||||
# depslib dependency file v1.0
|
||||
1733892371 source:/home/n00b/Projects/RCBASIC4/rcbasic_runtime/main.cpp
|
||||
1733959687 source:/home/n00b/Projects/RCBASIC4/rcbasic_runtime/main.cpp
|
||||
"rc_os_defines.h"
|
||||
<emscripten.h>
|
||||
<sys/param.h>
|
||||
@@ -28,14 +28,15 @@
|
||||
"rc_audio.h"
|
||||
"rc_net.h"
|
||||
"rc_video.h"
|
||||
"rc_windowclose.h"
|
||||
"rc_test.h"
|
||||
<irrtheora.h>
|
||||
"rc_func130_cases.h"
|
||||
|
||||
1733950891 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_os_defines.h
|
||||
1733960003 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_os_defines.h
|
||||
<TargetConditionals.h>
|
||||
|
||||
1733777902 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_defines.h
|
||||
1733959765 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_defines.h
|
||||
|
||||
1730291453 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_stdlib.h
|
||||
"rc_os_defines.h"
|
||||
@@ -1247,7 +1248,7 @@
|
||||
1727545973 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/RealisticWater.h
|
||||
<irrlicht.h>
|
||||
|
||||
1733950856 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_gfx.h
|
||||
1733959687 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_gfx.h
|
||||
"SDL.h"
|
||||
<SDL2/SDL.h>
|
||||
<irrlicht.h>
|
||||
@@ -2272,7 +2273,7 @@
|
||||
"rc_gfx_core.h"
|
||||
<irrtheora.h>
|
||||
|
||||
1733777902 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_func130_cases.h
|
||||
1733959765 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_func130_cases.h
|
||||
|
||||
1724469097 source:/home/n00b/Projects/irrBullet/src/irrBullet.cpp
|
||||
"irrBullet.h"
|
||||
@@ -2495,7 +2496,7 @@
|
||||
"rc_sprite_physics.h"
|
||||
"rc_joints.h"
|
||||
|
||||
1729551233 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_tilelib.h
|
||||
1733959298 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_tilelib.h
|
||||
"SDL.h"
|
||||
<SDL2/SDL.h>
|
||||
"rc_tilemap.h"
|
||||
@@ -2536,3 +2537,5 @@
|
||||
|
||||
1731249956 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_camera.h
|
||||
|
||||
1733959687 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_windowclose.h
|
||||
|
||||
|
||||
Reference in New Issue
Block a user