utiliser les enum dans un EditorGuiLayout

Questions à propos du GUI, y compris la partie script.
isador34
Messages : 37
Inscription : 07 Juil 2014 14:30

utiliser les enum dans un EditorGuiLayout

Message par isador34 » 27 Août 2014 16:03

bonjour a tous je suis en train de créer un jeu et je suis en train de faire la partie item.
j'ai deux script: ItemManagerInspector et ItemDatabaseManager
mon enum et sur le ItemDatabaseManager et je veux l'utiliser dans le ItemManagerInspector mais je n'y arrive pas...

l'enum:

Code : Tout sélectionner

public enum TypeOfWeapon
	{
		baton,
		hache1M,
		hache2M,
		epee1M,
		epee2M,
		masse1M,
		masse2M,
		distance,
		bouclier,
	}
le code du ManagerInspector:

Code : Tout sélectionner

public override void OnInspectorGUI()
	{
		ItemManager im = target as ItemManager;

		List<Weapon> weapon = new List<Weapon>();
		List<Armor> armor = new List<Armor>();
		List<Consumable> consumable = new List<Consumable>();

		for(int i = 0; i < im.itemList.Count; i++)
		{
			if(im.itemList[i].GetType() == typeof(Weapon))
			{
				weapon.Add((Weapon)im.itemList[i]);
			}

			if(im.itemList[i].GetType() == typeof(Armor))
			{
				armor.Add((Armor)im.itemList[i]);
			}

			if(im.itemList[i].GetType() == typeof(Consumable))
			{
				consumable.Add((Consumable)im.itemList[i]);
			}
		}

		showingWeapons = EditorGUILayout.Foldout(showingWeapons, "Weapons: " + weapon.Count);

		if(showingWeapons)
		{
			EditorGUI.indentLevel = 2;
			//display all of the weapon in database
			for(int i = 0; i < weapon.Count; i++)
			{
				EditorGUILayout.BeginHorizontal();

				EditorGUILayout.LabelField(weapon[i].name);

				if(GUILayout.Button("-"))
				{
					im.itemList.Remove(weapon[i]);
				}

				EditorGUILayout.EndHorizontal();

				EditorGUI.indentLevel +=1;
				weapon[i].name = EditorGUILayout.TextField("Name: ", weapon[i].name);
				weapon[i].description = EditorGUILayout.TextField("desc: ", weapon[i].description);
				weapon[i].cost =int.Parse( EditorGUILayout.TextField("cost: ", weapon[i].cost.ToString()));
				weapon[i].damage =int.Parse( EditorGUILayout.TextField("damage: ", weapon[i].damage.ToString()));
				weapon[i].miniLevel =int.Parse( EditorGUILayout.TextField("mini level: ", weapon[i].miniLevel.ToString()));

				EditorGUI.indentLevel -= 1;
				EditorGUILayout.Space();
			}

			if(GUILayout.Button("Add New Weapon"))
			{
				Weapon newWeapon = (Weapon)ScriptableObject.CreateInstance<Weapon>();
				newWeapon.name = "New Weapon";
				newWeapon.description = "";
				newWeapon.cost = 0;
				newWeapon.damage = 0;
				im.itemList.Add(newWeapon);
			}

			EditorGUI.indentLevel = 0;
		}

		showingArmors = EditorGUILayout.Foldout(showingArmors, "Armors: " + armor.Count);

		if(showingArmors)
		{
			EditorGUI.indentLevel = 2;

			//display all of the armor in database
			for(int i = 0; i < armor.Count; i++)
			{
				EditorGUILayout.BeginHorizontal();
				
				EditorGUILayout.LabelField(armor[i].name);
				
				if(GUILayout.Button("-"))
				{
					im.itemList.Remove(armor[i]);
				}
				
				EditorGUILayout.EndHorizontal();

				EditorGUI.indentLevel +=1;
				armor[i].name = EditorGUILayout.TextField("Name: ", armor[i].name);
				armor[i].description = EditorGUILayout.TextField("desc: ", armor[i].description);
				armor[i].cost =int.Parse( EditorGUILayout.TextField("cost: ", armor[i].cost.ToString()));
				armor[i].protection =int.Parse( EditorGUILayout.TextField("protection: ", armor[i].protection.ToString()));
				armor[i].miniLevel =int.Parse( EditorGUILayout.TextField("mini level: ", armor[i].miniLevel.ToString()));
				EditorGUI.indentLevel -= 1;
				EditorGUILayout.Space();

			}


			if(GUILayout.Button("Add New Armor"))
			{
				Armor newArmor = (Armor)ScriptableObject.CreateInstance<Armor>();
				newArmor.name = "New Armor";
				newArmor.description = "";
				newArmor.cost = 0;
				newArmor.protection = 0;	
				im.itemList.Add(newArmor);
			}

			EditorGUI.indentLevel = 0;
		}

		showingConsumables = EditorGUILayout.Foldout(showingConsumables, "Consumables: " + consumable.Count);

		if(showingConsumables)
		{
			EditorGUI.indentLevel = 2;

			//display all of the consumable in database
			for(int i = 0; i < consumable.Count; i++)
			{
				EditorGUILayout.BeginHorizontal();
				
				EditorGUILayout.LabelField(consumable[i].name);
				
				if(GUILayout.Button("-"))
				{
					im.itemList.Remove(consumable[i]);
				}
				
				EditorGUILayout.EndHorizontal();
				
				EditorGUI.indentLevel +=1;
				consumable[i].name = EditorGUILayout.TextField("Name: ", consumable[i].name);
				consumable[i].description = EditorGUILayout.TextField("desc: ", consumable[i].description);
				consumable[i].cost =int.Parse( EditorGUILayout.TextField("cost: ", consumable[i].cost.ToString()));
				consumable[i].utilisation =int.Parse( EditorGUILayout.TextField("utilisation: ", consumable[i].utilisation.ToString()));
				consumable[i].miniLevel =int.Parse( EditorGUILayout.TextField("mini level: ", consumable[i].miniLevel.ToString()));
				EditorGUI.indentLevel -= 1;
				EditorGUILayout.Space();
			}

			if(GUILayout.Button("Add New Consumable"))
			{
				Consumable newConsumable = (Consumable)ScriptableObject.CreateInstance<Consumable>();
				newConsumable.name = "New Armor";
				newConsumable.description = "";
				newConsumable.cost = 0;
				newConsumable.utilisation = 0;	
				im.itemList.Add(newConsumable);
			}
			EditorGUI.indentLevel = 0;

		}

	}
comment faire un EditorGuiLayout.EnumPopup dans ma classe ManagerInspector.

Avatar de l’utilisateur
artemisart
Messages : 1893
Inscription : 21 Juin 2011 19:51
Localisation : Centre
Contact :

Re: utiliser les enum dans un EditorGuiLayout

Message par artemisart » 29 Août 2014 20:29

Qu'est-ce qui te bloque dans l'exemple ?
Ça donnerai :

Code : Tout sélectionner

type = (TypeOfWeapon)EditorGUILayout.EnumPopup ("Weapon Type", type);

isador34
Messages : 37
Inscription : 07 Juil 2014 14:30

Re: utiliser les enum dans un EditorGuiLayout

Message par isador34 » 31 Août 2014 15:05

le problème c'est que toute mes arme prenne la valeur de l'enum il ne veut pas l'attribuer a mon index et seulement a cet index


isador34
Messages : 37
Inscription : 07 Juil 2014 14:30

Re: utiliser les enum dans un EditorGuiLayout

Message par isador34 » 31 Août 2014 15:58

ton code avec le type j'avais deja essayer mais ca changer toute les arme... sinon va voir mon autre topic j'ai trouver une alternative

Avatar de l’utilisateur
artemisart
Messages : 1893
Inscription : 21 Juin 2011 19:51
Localisation : Centre
Contact :

Re: utiliser les enum dans un EditorGuiLayout

Message par artemisart » 31 Août 2014 16:49

Je parlais de ton code (le problème ne vient pas de la méthode EnumPopup mais de la façon dont tu l'utilise).

isador34
Messages : 37
Inscription : 07 Juil 2014 14:30

Re: utiliser les enum dans un EditorGuiLayout

Message par isador34 » 31 Août 2014 16:59

le problème c'est que je trouve pas comment j'utiliser avec mon weapon.slot ...

Avatar de l’utilisateur
artemisart
Messages : 1893
Inscription : 21 Juin 2011 19:51
Localisation : Centre
Contact :

Re: utiliser les enum dans un EditorGuiLayout

Message par artemisart » 31 Août 2014 17:04

Je répète, personne pourra t'aider sans plus d'info et ton code.

isador34
Messages : 37
Inscription : 07 Juil 2014 14:30

Re: utiliser les enum dans un EditorGuiLayout

Message par isador34 » 31 Août 2014 17:41

non mais j'ai laisser tomber le enum, je vais faire via un textfield, par contre dessu j'ai un problème (cf. mon topic dans Scripting Javascript, C# et Boo)

Verrouillé

Revenir vers « L'interface GUI »