Page 3 of 4

Posted: Mon Aug 17, 2009 10:11 pm
by avirox
ceriux wrote:yeah, running dp (so id just have to run the source for this ? and it would be that easy?)
if prydon doesn't already have csqc.. then yes. Otherwise use the tutorial in this thread.

At any rate, I will try to work on a DP build for this when I get the time. I will post it here when I'm done

Posted: Mon Aug 17, 2009 10:51 pm
by ceriux
cool thanks

Posted: Wed Aug 19, 2009 2:51 pm
by avirox
Well I finally had some free time this morning, so I did a preliminary port for DP using my code from Damascus. This source is radically different than the previous builds' in certain ways, so doing a diff might prove a bit tricky. I moved some files around a bit and split others so that things were more tidy. This source also includes my beta test inventory menus and such.

http://avirox.amnesiagames.com/FTE/csqc_gui_12b1.zip

Please note that there are still bugs with DP, like the view moving around (which shouldn't prove an issue with Prydon I think). Also DP is not liking the pics i try to precache for the menu items.. I'm not sure why :\

Anyhoo, plug it in and try "testmenu1", 2, and 3. I will investigate the DP bugs further a bit later..

Posted: Wed Aug 19, 2009 3:51 pm
by ceriux
alright cool, thanks ill see what i can do.

Posted: Sun Jan 09, 2011 3:57 pm
by xaGe
..Did you do anything with it? Did anyone? I haven't seen much of any thing from this publicized at least..

ceriux wrote:alright cool, thanks ill see what i can do.

Posted: Sun Jan 09, 2011 6:30 pm
by ceriux
oh yeah i loaded that into prydon and all it did was make everything disappear. text wise anyways. i just downloaded it again. after i start my new mod and its past the planning stage. ima see if i can get it to work with that.

Posted: Mon Jan 10, 2011 1:11 pm
by avirox
It's functional in MegaTF Coop if you want to see it in action (needs FTE): 74.86.171.201:27500. Other than that, it's a big part of my action/rpg project, Damascus.

Re: Tutorial: CSQC GUI Menus

Posted: Thu Oct 13, 2011 12:51 am
by Cobalt
Looks like I am getting in real late on the csqc stuff. I asked Frika if we could have a seperate forum where all the csqc stuff can be grouped, with some stickies to the sites that havethe structures and stuff defined....etc. Also posts like this one ought to be moved there IMO. Havingit all centralized in one spot makes it easier to learn.

Re: Tutorial: CSQC GUI Menus

Posted: Thu Oct 13, 2011 1:07 pm
by goldenboy
RMQ is also dicking around with CSQC atm. Slowly, though. So, count me as another interested party.

Re: Tutorial: CSQC GUI Menus

Posted: Thu Nov 03, 2011 9:16 pm
by avirox
Hi guys, just a quick update about DP support.

While the zip posted in this thread does contain DP support, please be aware that I have found a performance leak in the old code. If you are trying to use CSQC GUI with DarkPlaces, please change the following code under CSQC_UpdateView():

Code: Select all

#ifdef WORKINDP
	// Since CSQC_InputEvent in DP does not pick up mouse movements, parse them here
	if (in_menu) {
		mousemoves = getmousepos();
		CSQC_InputEvent( 2, mousemoves_x, mousemoves_y );
	}
#endif
to:

Code: Select all

#ifdef WORKINDP
	// Since CSQC_InputEvent in DP does not pick up mouse movements, parse them here
	if (in_menu) {
		mousemoves = getmousepos();
		if (mousemoves != oldmousemove) {
			CSQC_InputEvent( 2, mousemoves_x, mousemoves_y );
			oldmousemove = mousemoves;
		}
	}
#endif
Also in your CSQC defs file, add this definition:

Code: Select all

vector oldmousemove;
Peace,

Re: Tutorial: CSQC GUI Menus

Posted: Thu Nov 03, 2011 10:17 pm
by Spike
LH said he already fixed CSQC_InputEvent, so that code is relevent only for older builds, though it may have been a fairly recent change.

Re: Tutorial: CSQC GUI Menus

Posted: Sun Feb 12, 2012 6:59 am
by sp4x0r
Sorry to bump an old thread. I've just been playing around with this (awesome stuff, by the way), and I've had a little success with the mouse in Darkplaces so thought I'd share it.

You can use setcursormode() to stop mouse input from moving the view in DP. This changes how getmousepos() works, though. Instead of getting relative mousemovements you get absolute mouse position. As Spike says, more recent builds of DP (after about August 2011) have CSQC_InputEvent get mouse input using eventttype == 2, but when you use setcursormode() you have to get mouse input using eventtype == 3.

One cool thing about using the absolute mouse position is that it will be the same spot as the prydon cursor, so you can easily go between client side menus and server side interaction with the environment. If you use relative mouse movement the two mouse cursors move differently, and wind up in different spots on the screen.

So here's what I did, I probably missed something important, but it's a start.

in CSQC_defs.qc add:

Code: Select all

	vector oldmousemove, mouse_oldrealpos;
and

Code: Select all

	void(float usecursor) setcursormode = #343;

Open csqc_parse.qc and find SetupMenu()
After the line:

Code: Select all

	CSQCGUI_ClearMenu();	//Clear the current menu
add

Code: Select all

	#ifdef WORKINDP
		setcursormode(1);		// stops the engine from using mouse input to move the view
	#endif
testmenu bypasses SetupMenu(), so we need to put that code in there too. In gui_menus.qc find Menu_TestMenu() and put it in there as well.

After that, open gui_main.qc and find CSQCGUI_ClearMenu(), then add

Code: Select all

	#ifdef WORKINDP
		setcursormode(0);		// allows mouse input to move the view
	#endif
Open gui_drawhud.qc and find CSQC_UpdateView()
Find the code:

Code: Select all

	#ifdef WORKINDP
		// Since CSQC_InputEvent in DP does not pick up mouse movements, parse them here
		if (in_menu) {
			mousemoves = getmousepos();
			if (mousemoves)
				CSQC_InputEvent( 2, mousemoves_x, mousemoves_y );
		}
	#endif
unless you've put in avirox's fix a couple of posts above, in which case it'll look a little different

change this to:

Code: Select all

	#ifdef WORKINDP
		// Since CSQC_InputEvent in DP does not pick up mouse movements, parse them here
		if (in_menu) {
			mousemoves = getmousepos();
			if (mousemoves != oldmousemove)
			{
				CSQC_InputEvent( 3, mousemoves_x, mousemoves_y );	//originally eventtype 2, changing to 3 for DP mouse support
				oldmousemove = mousemoves;
			}
		}
	#endif
Note, I'm using eventtype 3 instead of 2. If you're using one of the more recent builds of darkplaces you don't even need this section, you can just comment it all out.

In the same file, go to CSQC_InputEvent() and go to the end of the function. Near the end, just after the last "return TRUE"

Code: Select all

				}
				return TRUE;
			}
			// WE'LL BE INSERTING CODE HERE
		}
		return FALSE;
	};
I've just copied the existing code for handling eventtype 2, changed it to eventtype 3 and changed it a little for absolute mouse positon, insert it at the spot mentioned above.

Code: Select all


	#ifdef WORKINDP
	if (eventtype == 3 && !(global_menu_flags & MFG_NOCURSOR))
	{
		if (testsize_one_z == TRUE)
		{
			if (edit_button)
			{
				edit_button.size_x += (param1 - mouse_oldrealpos_x);
				edit_button.size_y += (param2 - mouse_oldrealpos_y);
			}
		}
		else
		{
			mousepos_x = param1;
			mousepos_y = param2;
			
			if (edit_button)
			{
				edit_button.origin_x = mousepos_x + edit_button_offset_x;
				edit_button.origin_y = mousepos_y + edit_button_offset_y;
			}
		}
		
		
		mouse_oldrealpos_x = param1;
		mouse_oldrealpos_y = param2;
		
		return TRUE;
	}
	#endif
I should point out that I have no idea what the edit_button code is all about, I just guess that this would be the way to do it. There's some other code at the start of CSQC_InputEvent() to do with edit_view_mode in the case of eventtype 2 that I haven't copied for eventtype 3. This doesn't break anything that I've used, but it probably breaks something. If anybody understands it I'd love to know.

Re: Tutorial: CSQC GUI Menus

Posted: Sun Feb 12, 2012 7:28 am
by Cobalt
Some guys over on quakeone are making a few multi-configurable csprogs. The one released in the Feral mod was really loaded I thought...it had draggable menus you can close out....and I think it remembered your settings the next time it loaded too. One question I wanted to ask, is say you make one for a ded server, and use this for some fancy motd and or player configuration settings, like picking the player model or whatever.
Could you code it to remember that you already read the server motd, so that next time you connect, it dont show up?



Anyhow Id like to learn more about it....would be great if someone could post a youtube vid or something.

Re: Tutorial: CSQC GUI Menus

Posted: Sat Feb 18, 2012 6:59 am
by thommoboy
would this work on the psp?

Re: Tutorial: CSQC GUI Menus

Posted: Sat Feb 18, 2012 7:40 am
by Jukki
IF you code csqc in your engine then yes.