Adventure Game Studio

AGS Support => Beginners' Technical Questions => Topic started by: auhsor on Mon 27/06/2005 10:48:22

Title: Change cursor when at bottom of screen & then change back
Post by: auhsor on Mon 27/06/2005 10:48:22
Ok sorry about the simple question, but I can't sem to work it out. I havn't used AGS for a while and now starting a game, it's all pretty unfamiliar. I've read the manual faq's etc, and can't seem to work it out.

I have a gui at the bottom of the screen. Its one of those always on top type of things with buttons etc. So yeah when the mouse is hovered over that gui, I want the cursor to change to a pointer, and when it is moved back over the game area to go to what it was last.

I've tried:

if (mouse.y > 219)
  { 
      mouse.SaveCursorUntilItLeaves();
      mouse.Mode = eModePointer;
  }
  else
  {
      mouse.Mode = mouse.SaveCursorUntilItLeaves();
  }


in function repeatedly_execute(), but that is quite bad. I need to somehow remember the last cursor option. Any help would be appreciated.
Title: Re: Change cursor when at bottom of screen & then change back
Post by: Gilbert on Mon 27/06/2005 11:23:12
I think the problem is:
1. You save the cursor in repeatedly_execute(), so it will be saved every game loop, as long as the cursor's y coordinate is still >219, which is creating problem, because after the cursor was changed to the pointer, the cursor mode is to be continuously saved (so after a loop the actual saved mode is eModePointer, not the original mode).
2. from manual:
Quote
Mouse.SaveCursorUntilItLeaves()

Saves the current mouse cursor, and restores it when the mouse leaves the current hotspot, object or character.
So actually SaveCursorUntilItLeaves() was meant for cursor over hotspot, object or character (but not GUI) and the cursor will automatically be restored whenever it moves off the areas.

Proposed fix are:
1. use a int variable instead to save the mouse mode.
2. use another variable to keep track of the status if the cursor is on the GUI last loop already, so it won't save the mode again.

This is my codes:

1. on top of script declare:

int savedmousemode;
int mouseovergui=0;

2. in repeatedly_execute():

if (mouse.y>219) {
Ã,  if (mouseovergui==0){
Ã,  Ã,  Ã, mouseovergui=1;Ã,  Ã,  Ã, 
Ã,  Ã,  Ã, savedmousemode=mouse.Mode;
Ã,  Ã,  Ã, mouse.Mode = eModePointer;
Ã,  }
} elseÃ,  if (mouseovergui){
Ã,  Ã,  Ã, mouseovergui=0;
Ã,  Ã,  Ã, mouse.Mode = savedmousemode;
}
Title: Re: Change cursor when at bottom of screen & then change back
Post by: auhsor on Mon 27/06/2005 11:55:56
Ah very nice! Thanks for that. Thats alot neater and actually works and makes sense. I didn't know I could store the mouse modes in an int. Must be those fancy enumerated type things maybe.
Title: Re: Change cursor when at bottom of screen & then change back
Post by: Gilbert on Mon 27/06/2005 12:24:06
eNums are actually integers, it's just there so you don't need to emember the exact numbers yourself and can have names.
Title: Re: Change cursor when at bottom of screen & then change back
Post by: Sektor 13 on Mon 27/06/2005 17:00:49
i think easier would be to use GetGUIAt (or something like that) like

if (GetGUIAt(*gui number*)==1){
SetCursorGraphics...
}
else

SetCursoGraphics...


..or something luike that
Title: Re: Change cursor when at bottom of screen & then change back
Post by: Gilbert on Tue 28/06/2005 02:26:29
Well it just depends on how to manage the stuff, both methods are okay (GetGUIAt() would be better if it's not easy to check whether you're over it just by coordinates checking).
But if you still want to restore the original cursor (which may not be fixed, your codes are good when the cursor is fixed outside of that GUI), the codes would still be similar in length:


if  (GUI.GetAtScreenXY(mouse.x, mouse.y) == 1) {
  if (mouseovergui==0){
     mouseovergui=1;     
     savedmousemode=mouse.Mode;
     mouse.Mode = eModePointer;
  }
} else  if (mouseovergui){
     mouseovergui=0;
     mouse.Mode = savedmousemode;
}


(Also, SetCursorGraphics() only changes the appearance of the cursor, not th emode, unless that's what you really want).
   
Title: Re: Change cursor when at bottom of screen & then change back
Post by: auhsor on Tue 28/06/2005 04:27:11
Hey thats also great code, and I'll probably use that later for another purpose. Thats useful if your gui is anywhere and different shapes right?
Title: Re: Change cursor when at bottom of screen & then change back
Post by: Gilbert on Tue 28/06/2005 04:57:52
Yeah, it's for more general use. But for your previous case when the GUI is just an area on the bottom both will work.
Title: Re: Change cursor when at bottom of screen & then change back
Post by: auhsor on Tue 28/06/2005 05:23:26
Ah ok nice. Thanks for the help.