-
Posts
71 -
Joined
-
Last visited
Content Type
Blogs
Forums
Store
Gallery
Videos
Downloads
Everything posted by Qbound
-
normally you reduce the rotation on the axis down to an int 1Byte. Nearly no one can see the difference between rotating on 4 Byte or 1 Byte. if 255 degrees is to less for you then use a unsigned short with 2 Bytes. But do not waste bandwidth. often it is more reduced by only sending the 'relevant' axis like y. Or somtimes it is a pattern what you want to send. small 1 axis int, again, again, and then a full float 3 axis, small, small, small, big i think you got the point.
-
Leadwerks Game Engine 4 Preview Available
Qbound commented on Admin's blog entry in Ultra Software Company Blog
bought your dlc. nice update thanks -
i think that will be a lot better make a poll?
-
I like it but where do i find it? (without knowing that url?) if i do the search with the combobox up right there i only get a result a lot different. just try it out enter model into the field and hit search...
-
you can improve your search. I hate it to think about where may be i find some usefull informations... hmm. forum or website (what s ment by website?) KISS keep it simple stupid... not only one tool to rule the world please add one search algo to find any kind of information at any place (forum, tutorial, docs etc...) that will help a lot from my point of view
-
i use the ms ergo keyboard with the ms mouse. i use it a couple of hours per day and have to change batteries once per year. Next i have a usb extension from the computer to the receiver for the keyboard an mouse so that they are dircetly glued under the bottomside of the desktop roughly 5 cm away from the keyboard and mouse. Always connected with no lag and problems with cellphones nearby. And i am a regularly gamer too
-
Hey Rick, thanks for sharing your work cu Oliver
-
Hi Jorn, your contribution to this comunity is outstanding. Therefore ignore those emails. You'll always find those naysayer's... even if you get an nobleprice for your tutorials cu Oliver
-
the storyline is a little bit toooo straightforward i like your approach.
-
Nice Job @YouGroove: i think you are right. And i gave up after ~6 hours of digging.
-
hmmm... germany isn't right around the corner... but i wish you best of all for the gdc.
-
it should be shipped @ day 888 so you have 11 days to go
-
i agree to lazlo.... 'undo' can be a monster
-
2012 MS XP support will be discontinued in 2014
-
A small work around... but not beautiful // DUMMY World only to start the engine... nerv. FreeWorld( CreateWorld() ); cu Oliver
-
I really like the idea to learn from something that is completed Perfect idea Josh... cu Oliver
-
Thanks for the approval... @Josh: did something changed in the engine and is there a chance to fix it? Or is that wanted and has to stay? cu Oliver
-
Hi all, hopefully someone can proof this bug. if not i have to dig a lot deeper... Since a few hours i try to convert my game NightFist to 231. But i have a small little problem and i think i can reproduce it. I think that the initialization of the engine has changed a little bit. Because i get an error if i want to log something into the logfile before the world is created. Here is an example: #include "engine.h" int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd ) { Initialize() ; RegisterAbstractPath("D:/04 Leadwerks/10 SDK 231"); SetAppTitle( "test231" ) ; Graphics( 800, 600 ) ; AFilter() ; TFilter() ; TWorld world; TBuffer gbuffer; TCamera camera; TMesh mesh; TLight light; TMesh ground; TMaterial material; // AppLog( "A BIGGGGG Problem if i want to log something at this position !!!!!!!!!!!!!!!!!!!!!!!!!!" ); world = CreateWorld() ; AppLog( "Here is OK" ); if (!world) { MessageBoxA(0,"Error","Failed to create world.",0); return Terminate(); } gbuffer=CreateBuffer(GraphicsWidth(),GraphicsHeight(),BUFFER_COLOR|BUFFER_DEPTH|BUFFER_NORMAL); camera=CreateCamera(); PositionEntity(camera,Vec3(0,0,-2)); material=LoadMaterial("abstract::cobblestones.mat"); mesh=CreateCube(); PaintEntity(mesh,material); ground=CreateCube(); ScaleEntity(ground,Vec3(10,1,10)); PositionEntity(ground,Vec3(0,-2,0)); PaintEntity(ground,material); light=CreateDirectionalLight(); RotateEntity(light,Vec3(45,45,45)); // Game loop while( !KeyHit() && !AppTerminate() ) { if( !AppSuspended() ) // We are not in focus! { // Rotate cube TurnEntity( mesh, Vec3( 0.5f*AppSpeed() ) ) ; // Update timing and world UpdateAppTime(); UpdateWorld(AppSpeed()) ; // Render SetBuffer(gbuffer); RenderWorld(); SetBuffer(BackBuffer()); RenderLights(gbuffer); // Send to screen Flip(0) ; } } // Done return Terminate() ; } The initialization of my game uses a lot of AppLogs before the world is created. Hopefully this is the problem and it can be solved inside of the engine... if not... i have to go deeper... cu Oliver
-
Hi Rick, here is the rough layout. You have a widget as a base class this can be a button, a frame element, an editfield or what ever you want. Every widget can have as many childs it wants to have. think about grouping or windows with subwindows and so on. The widget has a map which stores all the childs of this widget. When you attach to widget Alpha a window Beta and this cotains a button Charly and you want to check if the mouse is over charly you first check if the mouse X and Y is inbound the rect of the window Alpha. If this is true then the windowwidget Alpha goes through the list of its childs and finds 1 window namend Beta and if the mouse is inbout Beta the widget looks up the childs list if the mouse is in the rectangle of on of his childs like Charly... and so on... This algo stops when the mouse has the final widget under its pointer from the topmost widget you see... that is what you want. It is stable, fast and precise. Cu Oliver
-
you dont need a recursion here. (ok i wrote it... but its late here in germany and i have to go to bed ) my way was. you have a sheet which can contain widgets. Those are stored in the a simple STL map. When the user click into the screen (sheet) it asks the widgets if there is a widget which has an intersection in its rect. If there is an intersection this widgets asks all the childs if any of the childs has an intersection, if so then return it. This worked really well. it was easy and precise. // ------------------------------------------------------------------------------------------------ // Name: getWidget( uint16 _uiX, uint16 _uiY, bool _bfindAll ) // Info: Get the widget at position _uiX _uiY // // Return = (LPCLEG_WIDGET) Topmost widget at this position // // _uiX = (uint16) Position X // _uiY = (uint16) Position Y // _bfindAll = (bool) Find all widget, override the find flag (default false) // ------------------------------------------------------------------------------------------------ LPCLEG_WIDGET CLEG_SHEET::getWidget( uint16 _uiX, uint16 _uiY, bool _bfindAll ) { // First check if the point is different if( !_bfindAll && ( m_sPointLastChecked.iX == _uiX ) && ( m_sPointLastChecked.iY == _uiY ) ) return m_pWidgetUnderPoint; // Set the point m_sPointLastChecked.iX = (int16)_uiX; m_sPointLastChecked.iY = (int16)_uiY; // Variablen init LPCLEG_WIDGET pWidget = NULL; // Widget LPCLEG_WIDGET pReturnWidget = NULL; // Widget list< LPCLEG_WIDGET >::reverse_iterator itor; // Iterator // Is the list empty? if( m_liWidgets_Active.size() <= 1 ) return pWidget; // No.. we can search for a widget itor = m_liWidgets_Active.rbegin(); while( itor != m_liWidgets_Active.rend() ) { // Get Widget pWidget = *itor; // Check if we can find this widget if( _bfindAll == false ) // Check if the widget is not visible or we set the flag that we do not want to find it by this action. Maybe the contextmenue! if(( pWidget->getFLAG_Visible() == false ) || ( pWidget->getFLAG_FindByPointInside() == false ) ) { // Next Element ++itor; // and go on continue; } // Check position if( pWidget->isPointInside( _uiX, _uiY ) ) { // This Point is inside, so check if the point is inside of a childwidget pReturnWidget = pWidget->getChildAtPoint( _uiX, _uiY ); // Do we have a child at this point? if( pReturnWidget != NULL ) return pReturnWidget; // return return pWidget; } // Next Element ++itor; } // bye return NULL; } // ------------------------------------------------------------------------------------------------ cu Oliver
-
Hi Rick, i wrote a GUI for LE by myself in the past. It does a lot but i stopped the development in the middle of the gui editor because then i realized that i reinvent the wheel again... But here is my code for getChildAtPoint() I have a widget which is the base for all. And every widget has those 2 functions (and a lot more) 1. isPointInside() 2. getChildatPoint() the 2. is the recursive one and calls for every widget 1. this returns true or false if the point is inside every widget can contain a lot of subwidgets (buttons, editboxes etc) therefore i dig through all childs of the widget. here is the code // ------------------------------------------------------------------------------------------------ // Name: isPointInside( int iPosX, int iPosY ); // Info: is the point inside this widgetspace? // // Return = (bool) true / false // // iPosX = (int) Position Add X // iPosY = (int) Position Add Y // ------------------------------------------------------------------------------------------------ bool CLEG_WIDGET::isPointInside( uint16 _uiX, uint16 _uiY ) { return getRect().IntersectPoint( getBorderIntersection(), _uiX, _uiY ); } // ------------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------------ // Name: getChildAtPoint( uint16 _uiX, uint16 _uiY ) // Info: Get the Childwidget at position _uiX _uiY // // Return = (LPCLEG_WIDGET) Topmost childwidget at this position // // _uiX = (uint16) Position X // _uiY = (uint16) Position Y // ------------------------------------------------------------------------------------------------ LPCLEG_WIDGET CLEG_WIDGET::getChildAtPoint( uint16 _uiX, uint16 _uiY ) { //Variablen init mWIItor itor; // Iterator LPCLEG_WIDGET pChild = NULL; // Render all sheets for( itor = m_mapWidgets.begin(); itor != m_mapWidgets.end(); ++itor ) { // Pointer pChild = (*itor).second; // Pointer valid? if( pChild == NULL ) continue; // Resize ok? if( pChild->isPointInside( _uiX, _uiY ) == true ) return pChild; } // bye return NULL; } // ------------------------------------------------------------------------------------------------ hope this helps cu Oliver
-
wow - very good approach...
-
i like them too.... greate work