- Home /
 
StoreGUI problems
Hi guys
I was wondering if anyone could help me ? I found this code the other day and I have been messing around with it but as I don't know C# well I don't really know what to do ?
I would like to add the functionality of being able to instantiate a prefab when I have selected the item and bought it ? I guess I would have to add a third array referencing to the other two arrays in that category and then add some code in Additemtoinventory function ( it's already there) but how would I do this ?
And one last thing I'm sorry I know this is a large request but can I make the prefab spawn as the child of my empty game object called spawn point ?
Please could someone help ? It would mean a lot !!
This is the script ! If anyone could format it for me that would be great as I am typing on an ipad and cannot do that!
/* Esse script cria uma loja em GUI para Itens
1- Adicione este script a um GameObject
2- Mude sua Tag para NPC
3- Crie um prefab e coloque por toda parte!
4- Chegue perto do Prefab e clique nele para mostrar a loja
5- Afaste-se e ela fecha sozinha
*
Autor: Vinicius Rezendrix - Brasil
Data: 07/08/2012
*
This Script generates a store on GUI for Itens
1- Add this script to a GameObject
2- Set it´s tag for NPC
3- Create a prefab of it and spawn it all around!
4- Get close of the prefab and click him to display the store
5- Get away and the store will close
*
Autor: Vinicius Rezendrix - Brazil
Data: 07/08/2012
*
*/
using UnityEngine;
using System.Collections;
public class StoreGUI : MonoBehaviour {
region DECLARED VARIABLES
 private Transform myTransform;              // NPC Transform
 private Transform playerTransform;          // Player Transform
 private float playerDistance;               // distance between Player and NPC
 
 public bool displayStore = true;            // show the store
 
 // define and create our GUI delegate
 private delegate void GUIMethod(); 
 private GUIMethod currentGUIMethod; 
 private Vector2 scrollPosition = Vector2.zero;
 
 // Array with the Itens
 public ArrayList itensArray = new ArrayList();
 public ArrayList itensPriceArray = new ArrayList();
 
 // Array with the Armor
 public ArrayList armorsArray = new ArrayList();
 public ArrayList armorsPriceArray = new ArrayList();
 
 // Array with the Sword
 public ArrayList swordsArray = new ArrayList();
 public ArrayList swordsPriceArray = new ArrayList();
 
 private int amount = 1;                     //amount of itens to buy
 private int totalPrice;                     //total price of itens to buy
 private string selectedItem = "";           // selected item from the store
 private int selectedItemPrice;              // price of the selected item from the store
 
 private Color lerpedColor;                  //just a test
 
               endregion DECLARED VARIABLES
 // Use this for initialization
 void Start () { 
         
     GameObject go = GameObject.FindGameObjectWithTag("Player"); //find the GameObject w/ "Player" TAG
     playerTransform = go.transform;                             //and stores its Transform
 
     myTransform = transform;                // NPC transform;
             
     this.currentGUIMethod = itensMenu;      // start with the main menu GUI
 
     selectedItem = "";                      //sets the selected item to null
     
     addStuffToArrays();                     // fills the arrays with the Items
 }
 
 //Update is called Once per frame
 void Update(){
     
     //this is just a test
     lerpedColor = Color.Lerp(Color.green, Color.red, Time.time / 10);
     
     // stores the Distancie between the NPC and the player
     playerDistance = Vector3.Distance(myTransform.position, playerTransform.position);
     
     // if the playerDistance is bigger than 4, close the store
     if(playerDistance > 4){         
         displayStore = false;
     }
 }
 
 //Displays the store
 public void OnMouseUpAsButton() {       // When the NPC is clicked...
     if(playerDistance<4){               // and if playerDistance is lesser than 4...
         displayStore = true;            // then Displays the StoreGUI. 
     }
 }
 
 
               region OnGUI
 // Update is called once per frame 
 void OnGUI () {
 
     //Displays the store
     if(displayStore){
     
         //Text Item
         GUI.Label (new Rect (20, 40 , 230, 30), "Item");
         //Text Price
         GUI.Label (new Rect (250, 40, 40, 30), "Price");
     
         //button Exit
         if(GUI.Button (new Rect(20 + 100+100+100, 5, 100, 30), "Exit Store")){
             displayStore = false;
         }
 
         this.currentGUIMethod(); 
         
         // Area with selected item, amount, total price...
         GUILayout.BeginArea(new Rect( 20, 270, 400, 100));
         
         GUILayout.BeginVertical("box");
         
         GUILayout.BeginHorizontal("Label");
         //Text Item
         GUILayout.Box ("Selected Item", GUILayout.Width(110));
         //Text Amount
         GUILayout.Box ("Amount");
         //Text Total
         GUILayout.Box ("Total");
         GUILayout.EndHorizontal();
         
         
         GUILayout.BeginHorizontal("box");
 
         // Box with Item Name
         GUILayout.Box  (selectedItem.ToString(), GUILayout.Width(110));
 
         // Box with Amount
         GUILayout.Box  (" X " + amount.ToString(), GUILayout.Width(50));
         
         //Button Amount plus
         if(GUILayout.RepeatButton (" + ")){
             amount++;
         }
         //button Amount minus
         if(GUILayout.RepeatButton (" - ")){
             amount--;
         }
         //box Total Price
         GUI.color = lerpedColor;
         GUILayout.Box (totalPrice.ToString(), GUILayout.Width(80));
         
         //button Buy
         if(GUILayout.Button ("Buy")){
             addItemToInventory();
         }
         
         GUILayout.EndHorizontal();
         GUILayout.EndVertical();
         GUILayout.EndArea();
         
     }   //ends the displayStore IF
 }
 
               endregion OnGUI
 /*#---------------------- REGION MENUS----------------------------#*/
 
 
               region ITENS MENU - called inside OnGUI
 public void itensMenu() { 
     
     GUI.Box (new Rect (20, 5, 100, 30), "Itens Menu");  // Box with the Menu Title
     
     //Scroll Area with the Itens displayed Inside                                           // The scroll is dinamic generated by the size of the array
     scrollPosition = GUI.BeginScrollView(new Rect(20, 60, 300, 200), scrollPosition, new Rect(0, 0, 120, itensArray.Count * 30));
         displayItens();
     GUI.EndScrollView();
     
     if (GUI.Button (new Rect (20 + 100, 5, 100, 30), "Armors Menu")) {
         switchMenuForArmorsButton();                //Switch for Armors Menu
     } 
     
     if (GUI.Button (new Rect (20 + 100 + 100, 5, 100, 30), "Swords Menu")) {
         switchMenuForSwordsButton();                //Switch for Swords Menu
     } 
     
 } 
 
               endregion ITENS MENU
region ARMORS MENU - called inside OnGUI
 private void armorsMenu(){
     
     GUI.Box (new Rect (20, 5, 100, 30), "Armors Menu");             // Box with the MenuTitle
     
     //Scroll Area with the Itens displayed Inside                                           // The scroll is dinamic generated by the size of the array
     scrollPosition = GUI.BeginScrollView(new Rect(20, 60, 300, 200), scrollPosition, new Rect(0, 0, 120, armorsArray.Count * 30));
         displayArmor();
     GUI.EndScrollView();
     
     if (GUI.Button (new Rect (20 + 100, 5, 100, 30), "Itens Menu")) {
         switchMenuForItensButton();                 // Switch for Itens Menu
     } 
     
     if (GUI.Button (new Rect (20 + 100 + 100, 5, 100, 30), "Sword Menu")) { 
         switchMenuForSwordsButton();                //Switch for Swords Menu
     } 
 }  
 
               endregion ARMOR MENU
region SWORDS MENU - called inside OnGUI
 private void swordsMenu(){
 
     GUI.Box (new Rect (20, 5, 100, 30), "Swords Menu");             // Box with the MenuTitle
     
     //Scroll Area with the Itens displayed Inside                                           // The scroll is dinamic generated by the size of the array
     scrollPosition = GUI.BeginScrollView(new Rect(20, 60, 300, 200), scrollPosition, new Rect(0, 0, 120, swordsArray.Count * 30));
         displaySword();
     GUI.EndScrollView();
     
     if (GUI.Button (new Rect (20 + 100, 5, 100, 30), "Itens Menu")) {       
         switchMenuForItensButton();                 // Switch for Itens Menu
     } 
     
 
     if (GUI.Button (new Rect (20 + 100 + 100, 5, 100, 30), "Armors Menu")) { 
         switchMenuForArmorsButton();                //Switch for Armors Menu
     } 
 }    
 
               endregion SWORD MENU
region SWITCH MENU BUTTOMs - called inside ITENS, ARMORS AND SWORDS MENUS()
 void switchMenuForItensButton(){
     this.currentGUIMethod = itensMenu;              // switch to Itens Menu
     amount = 1;                                     // resets the amount of itens selected
 }
 
 void switchMenuForArmorsButton(){
     this.currentGUIMethod = armorsMenu;             // switch to Armors Menu
     amount = 1;                                     // resets the amount of itens selected
 }
 
 void switchMenuForSwordsButton(){
     this.currentGUIMethod = swordsMenu;             // switch to Swords Menu
     amount = 1;                                     // resets the amount of itens selected
 }
 
               endregion SWITCH MENU BUTTOMs
 /*#---------------------- END REGION MENUS-------------------------#*/
 
 /*#---------------------- REGION DISPLAY ITENS LOOPS----------------------------#*/
 
               region DISPLAY ITENS LOOP - called inside ItensMenu()
     public void displayItens() {
                         
         // Loop to display all the itensArray of the itensArray
         for(int cnt = 0; cnt < itensArray.Count; cnt++){
         
             //Buttom with Item Name
             if(GUI.Button (new Rect (0, 30 * (cnt), 230, 30), itensArray[cnt].ToString(), "box")){
                 
                 // Selects the item and it´s price
                 selectedItem = itensArray[cnt].ToString();
                 selectedItemPrice = (int)(itensPriceArray[cnt]);
                 
                 // resets the amount of itens selected
                 amount = 1;
             }
         
             // Displays the Item Price
             GUI.Box (new Rect (230, 30 * (cnt), 50, 30), itensPriceArray[cnt].ToString());
             
             // calculates the total price
             totalPrice = amount * (int)(selectedItemPrice);
         } 
     }
 
               endregion DISPLAY ITENS LOOP
region DISPLAY ARMORS LOOP - called inside ArmorsMenu()
     public void displayArmor() {
         
         // Loop to display all the itensArray of the array
         for(int cnt = 0; cnt < armorsArray.Count; cnt++){
 
             //Buttom with Armor Name
             if(GUI.Button (new Rect (0, 30 * (cnt), 230, 30), armorsArray[cnt].ToString(), "box")){
                 
                 // Selects the armor and it´s price
                 selectedItem = armorsArray[cnt].ToString();
                 selectedItemPrice = (int)(armorsPriceArray[cnt]);
                 
                 // resets the amount of itens selected
                 amount = 1;
             }
             
             // Displays the Item Price
             GUI.Box (new Rect (230, 30 * (cnt), 50, 30), armorsPriceArray[cnt].ToString());
             
             // calculates the total price
             totalPrice = amount * (int)(selectedItemPrice);
         } 
     }
 
               endregion DISPLAY ARMOR LOOP
region DISPLAY SWORDS LOOP - called inside SwordsMenu()
     public void displaySword() {
         
         // Loop to display all the itensArray of the array
         for(int cnt = 0; cnt < swordsArray.Count; cnt++){
 
             //Buttom with Armor Name
             if(GUI.Button (new Rect (0, 30 * (cnt), 230, 30), swordsArray[cnt].ToString(), "box")){
                 
                 // Selects the armor and it´s price
                 selectedItem = swordsArray[cnt].ToString();
                 selectedItemPrice = (int)(swordsPriceArray[cnt]);
                 
                 // resets the amount of itens selected
                 amount = 1;
             }
             
             // Displays the Item Price
             GUI.Box (new Rect (230, 30 * (cnt), 50, 30), swordsPriceArray[cnt].ToString());
             
             // calculates the total price
             totalPrice = amount * (int)(selectedItemPrice);
         } 
     }
 
               endregion DISPLAY SWORD LOOP
 /*#---------------------- END REGION DISPLAY ITENS LOOPS------------------------#*/
 
 
 
 
               region ADD ITEM TO INVENTORY - called inside OnGUI - "buy" button
 public void addItemToInventory(){           // Method for the buy buttom
     
     if(selectedItem != ""){                 //se selectedItem for diferente de null
         print("Bought Item!");
         // To Add Item X amount; - Use a loop   
         /* 
         for(int cnt = 0; cnt < amount; cnt++){
             addItemToInventory(selectedItem);
         }
         
         curGold - totalPrice;
         */
     }
 }
 
               endregion ADD ITEM TO INVENTORY
region ADD STUFF TO ARRAYS - called inside Start()
 // Fills itensArrays, armorsArray, swordsArray, and PricesArray with the itens
 private void addStuffToArrays(){
 
 // add itens to the itensArray
     itensArray.Add("Potion");
     itensArray.Add("Hi-Potion");
     itensArray.Add("Ether");
     itensArray.Add("Phoenix Down");
     itensArray.Add("Mega-Potion");
     itensArray.Add("Mega-Ether");
     itensArray.Add("Elixir");
     itensArray.Add("Speed-Tab");
     itensArray.Add("Defense-Tab");
     itensArray.Add("Power-Tab");
     itensArray.Add("Mana-Tab");
     itensArray.Add("Magic-Tab");
         
 // add itens to the itensPriceArray     
     itensPriceArray.Add(25);
     itensPriceArray.Add(50);
     itensPriceArray.Add(70);
     itensPriceArray.Add(50);
     itensPriceArray.Add(500);
     itensPriceArray.Add(700);
     itensPriceArray.Add(700);
     itensPriceArray.Add(1000);
     itensPriceArray.Add(1000);
     itensPriceArray.Add(1000);
     itensPriceArray.Add(1000);
     itensPriceArray.Add(1000);
     
 // add itens to the armorsArray
     armorsArray.Add("Leather Coat");
     armorsArray.Add("Gold Shield");
     armorsArray.Add("Platinum Armor");
     
 // add prices to armorsPriceArray
     armorsPriceArray.Add(200);
     armorsPriceArray.Add(1000);
     armorsPriceArray.Add(2000);
     
     
 // add itens to the swordsArray
     swordsArray.Add("Wood Sword");
     swordsArray.Add("Steel Sword");
     swordsArray.Add("Buster Sword");
     swordsArray.Add("Rainbow");
     swordsArray.Add("Onimusha Sword");
     swordsArray.Add("Sword Of Sparda");
     swordsArray.Add("Blade Of Chaos");  
     swordsArray.Add("Masamune");    
     
 // add prices to swordsPriceArray
     swordsPriceArray.Add(100);
     swordsPriceArray.Add(500);
     swordsPriceArray.Add(1000);
     swordsPriceArray.Add(25000);        
     swordsPriceArray.Add(30000);
     swordsPriceArray.Add(40000);
     swordsPriceArray.Add(50000);
     swordsPriceArray.Add(80000);
 }
 
               endregion ADD STUFF TO ARRAYS
}
Yeah, that re$$anonymous$$ds me why I dont use the built in gui.
Answer by theundergod · Feb 24, 2013 at 02:04 AM
If you simply want to instantiate the item then you need to have prefabs that match the selectedItem text.
Create a prefab called Blade Of Chaos
Select the "Blade Of Chaos" in the store
Click "Buy"
in the addItemToInventory() function (assuming your SpawnPoint object exists)
 GameObject newItem = (GameObject)Instantiate((GameObject)Resources.Load(selectedItem), SpawnPoint.transform.position, SpawnPoint.transform.rotation);
 
               Then to set the spawn point as the parent
 newItem.transform.parent = SpawnPoint.transform;
 
               Let me know if I missed something.
To make it more specific use
 (GameObject)Instantiate((GameObject)Resources.Load(selectedItem, typeof(GameObject), SpawnPoint.transform.position, SpawnPoint.transform.rotation);
 
                  To ensure it only tries to load GameObjects and not a Texture of the same name.
Btw Oi Brasileiro! $$anonymous$$inha esposa e do Brasil tambem! :)
Your answer
 
             Follow this Question
Related Questions
RPG turns system - arranging turns freezes up 1 Answer
Using arrays with OnTriggerEnter 0 Answers
need to shorten my code but unsure of how 3 Answers
Remove Items and Item Tooltips 0 Answers
Setting GUI textures 1 Answer