menuskript

Posted By: Tecizo

menuskript - 04/19/09 12:41

Ich habe ein kleines Menuskript für eine art Piemenu geschriebn:
menu.zip

Hier ein Beispiel wie man es einbinden kann:
Code:
#include <acknex.h>
#include "menu.c"

function main()
{
	wait(1);

	int hauptmenuitems_lenght = 5; //anzahl der elemente
	MENUITEM* hauptmenuitems = malloc(sizeof(MENUITEM) * hauptmenuitems_lenght); //pointer erstellen
	hauptmenuitems[0].bmap = bmap_create("fortsetzen.tga"); //bild des elements
	hauptmenuitems[0].text = "Spiel Fortsetzen"; //text des elements
	hauptmenuitems[1].bmap = bmap_create("speichern.tga"); //bild des elements
	hauptmenuitems[1].text = "Spiel Speichern"; //text des elements
	hauptmenuitems[2].bmap = bmap_create("laden.tga"); //bild des elements
	hauptmenuitems[2].text = "Spiel Laden"; //text des elements
	hauptmenuitems[3].bmap = bmap_create("neu.tga"); //bild des elements
	hauptmenuitems[3].text = "Neues Spiel"; //text des elements
	hauptmenuitems[4].bmap = bmap_create("beenden.tga"); //bild des elements
	hauptmenuitems[4].text = "Beenden"; //text des elements

	int speichermenuitems_lenght = 4; //anzahl der elemente
	MENUITEM* speichermenuitems = malloc(sizeof(MENUITEM) * speichermenuitems_lenght); //pointer erstellen
	speichermenuitems[0].bmap = bmap_create("1.tga"); //bild des elements
	speichermenuitems[0].text = "Spielstand 1"; //text des elements
	speichermenuitems[1].bmap = bmap_create("2.tga"); //bild des elements
	speichermenuitems[1].text = "Spielstand 2"; //text des elements
	speichermenuitems[2].bmap = bmap_create("3.tga"); //bild des elements
	speichermenuitems[2].text = "Spielstand 3"; //text des elements
	speichermenuitems[3].bmap = bmap_create("zurueck.tga"); //bild des elements
	speichermenuitems[3].text = "Zurück"; //text des elements

	int oeffnenmenuitems_lenght = 4; //anzahl der elemente
	MENUITEM* oeffnenmenuitems = malloc(sizeof(MENUITEM) * oeffnenmenuitems_lenght); //pointer erstellen
	oeffnenmenuitems[0].bmap = bmap_create("1.tga"); //bild des elements
	oeffnenmenuitems[0].text = "Spielstand 1"; //text des elements
	oeffnenmenuitems[1].bmap = bmap_create("2.tga"); //bild des elements
	oeffnenmenuitems[1].text = "Spielstand 2"; //text des elements
	oeffnenmenuitems[2].bmap = bmap_create("3.tga"); //bild des elements
	oeffnenmenuitems[2].text = "Spielstand 3"; //text des elements
	oeffnenmenuitems[3].bmap = bmap_create("zurueck.tga"); //bild des elements
	oeffnenmenuitems[3].text = "Zurück"; //text des elements



	MENUSEITE* hauptmenuseiten = malloc(sizeof(MENUSEITE) * 3); //pointer erstellen
	hauptmenuseiten[0].menuitems = hauptmenuitems; //items für diese seite
	hauptmenuseiten[0].hintergrund = bmap_create("hintergrund.tga"); //hintergrund für diese seite
	hauptmenuseiten[0].menuitems_lenght = hauptmenuitems_lenght; //anzahl der elemente
	hauptmenuseiten[1].menuitems = speichermenuitems; //items für diese seite
	hauptmenuseiten[1].hintergrund = bmap_create("hintergrund2.tga"); //hintergrund für diese seite
	hauptmenuseiten[1].menuitems_lenght = speichermenuitems_lenght; //anzahl der elemente
	hauptmenuseiten[2].menuitems = oeffnenmenuitems; //items für diese seite
	hauptmenuseiten[2].hintergrund = bmap_create("hintergrund2.tga"); //hintergrund für diese seite
	hauptmenuseiten[2].menuitems_lenght = oeffnenmenuitems_lenght; //anzahl der elemente



	MENU* hauptmenu = malloc(sizeof(MENU));  //pointer erstellen
	hauptmenu.auswahlmaske = bmap_create("auswahl.tga"); //bild als "curser"
	hauptmenu.s1 = 0.3; //geschwindigkeit zum wechseln zwischen elementen
	hauptmenu.s2 = 10; //geschwindigkeit zum ein/ausblenden
	hauptmenu.dist = 400; //groesse des kreises
	hauptmenu.normalsize[0] = 1680; //auflösung des hintergrundbildes
	hauptmenu.normalsize[1] = 1050; //auflösung des hintergrundbildes
	hauptmenu.menuseiten = hauptmenuseiten; //die seiten des menus
	hauptmenu.seite = 0; //ausgewählte seite
	hauptmenu.schriftart = "Comic Sans MS"; //schriftart
	hauptmenu.schriftmodus = 0; //schriftmodus 0=normal, 1=fett, 2=kursiv, 3=fett+kursiv
	hauptmenu.schriftgroesse = 26; //schriftgroesse
	
	
	show_menu(hauptmenu); //menu anzeigen
}


Und hier ein beispiel für die Datei menufunktionen.c:
Code:
function menufunktionen(MENU* menu, int selektion)
{
	switch(menu.seite) //funktionen dür die jeweilige seite
	{
		case 0:
			switch(selektion) //funktionen für das jeweilige element
			{
				case 0: resume();
				break;
				case 1: menu.seite = 1;
				break;
				case 2: menu.seite = 2;
				break;
				case 3: new_game();
				break;
				case 4: sys_exit("");
				break;
			}
			break;
		case 1:
			switch(selektion) //funktionen für das jeweilige element
			{
				case 0: game_save("save", 0, SV_ALL);
				break;
				case 1: game_save("save", 1, SV_ALL);
				break;
				case 2: game_save("save", 2, SV_ALL);
				break;
				case 3: menu.seite = 0;
				break;
			}
			break;
		case 2:
			switch(selektion) //funktionen für das jeweilige element
			{
				case 0: game_load("save", 0);
				break;
				case 1: game_load("save", 1);
				break;
				case 2: game_load("save", 2);
				break;
				case 3: menu.seite = 0;
				break;
			}
			break;
	}
}



Das Menu wird nur durch die Funktionen draw_quad und draw_text erstellt. Ich hab aber das Gefühl das der Alphawert bei Bildern mit Alphakanal nicht stimmt. Ausserdem sieht das Skalieren mit der draw_quad Funktion nicht so gut aus. Das Skript sollte ab der Version 7.60.0 funktionieren.
Posted By: MMike

Re: menuskript - 04/21/09 22:50

please give a screen shot of what manu your talking about?
Posted By: VeT

Re: menuskript - 04/22/09 11:37

and english version, if possible smile
Posted By: Tecizo

Re: menuskript - 04/22/09 11:39

here an example with some of the vista icons:


Posted By: VeT

Re: menuskript - 04/22/09 11:41

looks nice smile
Posted By: Tecizo

Re: menuskript - 04/22/09 12:51

okay here is an english version: menu.zip
it should work but i haven't tried it yet

example for a main.c:
Code:
#include <acknex.h>
#include "menu.c"

function main()
{
	wait(1);

	int mainmenuitems_lenght = 5; //number of elements
	MENUITEM* mainmenuitems = malloc(sizeof(MENUITEM) * mainmenuitems_lenght); //create pointer
	mainmenuitems[0].bmap = bmap_create("continue.tga"); //image of the element
	mainmenuitems[0].text = "Continue Playing"; //text of the element
	mainmenuitems[1].bmap = bmap_create("save.tga"); //image of the element
	mainmenuitems[1].text = "Store Game"; //text of the element
	mainmenuitems[2].bmap = bmap_create("laden.tga"); //image of the element
	mainmenuitems[2].text = "Load Game"; //text of the element
	mainmenuitems[3].bmap = bmap_create("new.tga"); //image of the element
	mainmenuitems[3].text = "New Game"; //text of the element
	mainmenuitems[4].bmap = bmap_create("quit.tga"); //image of the element
	mainmenuitems[4].text = "Quit"; //text of the element

	int savemenuitems_lenght = 4; //number of elements
	MENUITEM* savemenuitems = malloc(sizeof(MENUITEM) * savemenuitems_lenght); //create pointer
	savemenuitems[0].bmap = bmap_create("1.tga"); //image of the element
	savemenuitems[0].text = "Score 1"; //text of the element
	savemenuitems[1].bmap = bmap_create("2.tga"); //image of the element
	savemenuitems[1].text = "Score 2"; //text of the element
	savemenuitems[2].bmap = bmap_create("3.tga"); //image of the element
	savemenuitems[2].text = "Score 3"; //text of the element
	savemenuitems[3].bmap = bmap_create("back.tga"); //image of the element
	savemenuitems[3].text = "Back"; //text of the element

	int loadmenuitems_lenght = 4; //number of elements
	MENUITEM* loadmenuitems = malloc(sizeof(MENUITEM) * loadmenuitems_lenght); //create pointer
	loadmenuitems[0].bmap = bmap_create("1.tga"); //image of the element
	loadmenuitems[0].text = "Score 1"; //text of the element
	loadmenuitems[1].bmap = bmap_create("2.tga"); //image of the element
	loadmenuitems[1].text = "Score 2"; //text of the element
	loadmenuitems[2].bmap = bmap_create("3.tga"); //image of the element
	loadmenuitems[2].text = "Score 3"; //text of the element
	loadmenuitems[3].bmap = bmap_create("back.tga"); //image of the element
	loadmenuitems[3].text = "Back"; //text of the element



	MENUPAGE* mainmenupages = malloc(sizeof(MENUPAGE) * 3); //create pointer
	mainmenupages[0].menuitems = mainmenuitems; //items for this page
	mainmenupages[0].backgound = bmap_create("background.tga"); //background for this page
	mainmenupages[0].menuitems_lenght = mainmenuitems_lenght; //number of elements
	mainmenupages[1].menuitems = savemenuitems; //items for this page
	mainmenupages[1].backgound = bmap_create("background2.tga"); //background for this page
	mainmenupages[1].menuitems_lenght = savemenuitems_lenght; //number of elements
	mainmenupages[2].menuitems = loadmenuitems; //items for this page
	mainmenupages[2].backgound = bmap_create("background2.tga"); //background for this page
	mainmenupages[2].menuitems_lenght = loadmenuitems_lenght; //number of elements



	MENU* mainmenu = malloc(sizeof(MENU));  //create pointer
	mainmenu.selection_mask = bmap_create("auswahl.tga"); //picture as selection mask
	mainmenu.s1 = 0.3; //speed to switch between elements
	mainmenu.s2 = 10; //speed for show/hide
	mainmenu.dist = 400; //size of the circle
	mainmenu.normalsize[0] = 1680; //resolution of the menu x
	mainmenu.normalsize[1] = 1050; //resolution of the menu y
	mainmenu.menupages = mainmenupages; //pages of the menu
	mainmenu.page = 0; //selected page
	mainmenu.font = "Comic Sans MS"; //font
	mainmenu.font_mode = 0; //font mode 0=normal, 1=bold, 2=italic, 3=bold+italic
	mainmenu.font_size = 26; //font size
	
	
	show_menu(mainmenu); //show menu
}

example for a menufunctions.c:
Code:
function menufunktionen(MENU* menu, int selektion)
{
	switch(menu.seite) //select the page (case 0 = page1, case 1 = page2...)
	{
		case 0:
			switch(selektion) //functions for the elements of a page1 (case 0 = element1...)
			{
				case 0: resume();
				break;
				case 1: menu.page = 1;
				break;
				case 2: menu.page = 2;
				break;
				case 3: new_game();
				break;
				case 4: sys_exit("");
				break;
			}
			break;
		case 1:
			switch(selektion) //functions for the elements of a page2 (case 0 = element1...)
			{
				case 0: game_save("save", 0, SV_ALL);
				break;
				case 1: game_save("save", 1, SV_ALL);
				break;
				case 2: game_save("save", 2, SV_ALL);
				break;
				case 3: menu.page = 0;
				break;
			}
			break;
		case 2:
			switch(selektion) //functions for the elements of a page3 (case 0 = element1...)
			{
				case 0: game_load("save", 0);
				break;
				case 1: game_load("save", 1);
				break;
				case 2: game_load("save", 2);
				break;
				case 3: menu.page = 0;
				break;
			}
			break;
	}
}


I haven't translated everything in menu.c
Posted By: Nidhogg

Re: menuskript - 04/23/09 14:31

First of I would like to thank Tecizo for his menu contrib.

Question I have though is, "How do I freeze everything in the background without affecting the menu, It's not only with this menu but any menu I have tried to do." Any help would be greatly appreciated.

Also here is a slight variation for using mouse wheel and left mouse button.

Code:
int rotate_left()
{

	if (((key_cul + key_a) != 0) + (mickey.z < -1))
	{
		return(1);
	}
}

int rotate_right()
{
	if (((key_cur + key_d) != 0) + (mickey.z > 1))
        {	
                return (1);
        }
}

int selected()
{ 
return ((key_enter + key_space + mouse_left) != 0);
}


Just look in the main menu script and replace this with the ones in there.
You may also have to change the functions to thier original names as well.


© 2024 lite-C Forums