Title might be misleading as I do not know of an official name of the system.
user interfaces in Esenthel can easily be moved outside of the screen rectangle, can also be lost this way. A lot of games out there has a pop || lock and some also has them both activated.
Pop GUI Movement
A User Interface can be moved outside of the screen rectangle.
A User Interface will be moved back into screen rectangle once movement button is released. *IF the User Interface is moved outside*
Lock GUI Movement
Treat the screen rectangle as walls for the user interfaces.
A User Interface may and should never reach outside of the screen rectangle.
This I have accomplished by extending the
Window class. But I believe these should be implemented and be used by flags set by the user. I.e (GUI_MS_LOCK & GUI_MS_POP)
Code:
Vec2 right, left; right = screenRect().rd(); left = screenRect().lu();
Pop GUI Movement
Code:
if(Ms.br(0)){
float newPositionX, newPositionY;
//Check if the area is outside of the screen.
newPositionX = (left.x < -D.w()) ? -D.w() : (right.x > D.w()) ? D.w() : pos().x;
newPositionY = (left.y > D.h()) ? D.h() : (right.y <-D.h()) ?-D.h() : pos().y;
//Add size to co-ordinates
if(newPositionX != pos().x && newPositionX > 0)newPositionX -= screenRect().w();
if(newPositionY != pos().y && newPositionY < 0)newPositionY += screenRect().h();
//Set position back into screen
pos(Vec2(newPositionX,newPositionY));
}
Lock GUI Movement
Code:
if(Gui.msLit() ==& T && Ms.dragging()){
unsigned int x, y;
//Check if at a corner -1 = No negative delta movement... 1 = No positive delta movement
x = (left.x <= -D.w()) ? -1 : (right.x >= D.w()) ? 1 : 0;
y = (left.y >= D.h()) ? 1 : (right.y <= -D.h()) ? -1 : 0;
Vec2 moveDelta = Ms.dc();
//Set delta to 0 according to movement flags x & y
if(moveDelta.x < 0){
if(x == -1) moveDelta.x = 0;
}else{
if(x == 1) moveDelta.x = 0;
}
if(moveDelta.y < 0){
if(y == -1) moveDelta.y = 0;
}else{
if(y == 1) moveDelta.y = 0;
}
//Move window
move(moveDelta);
}
Small feature does not take long to implement, yet pretty nice. Just putting the idea out there..
Best regards TBJokers.