Advertisement
Guest User

Untitled

a guest
Apr 7th, 2020
165
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 3.46 KB | None | 0 0
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4.  
  5. public class WeaponGenerator : MonoBehaviour
  6. {
  7.  
  8.     public List<WeaponData> barrels = new List<WeaponData>();
  9.     public List<WeaponData> scopes = new List<WeaponData>();
  10.     public List<WeaponData> bodies = new List<WeaponData>();
  11.     public List<WeaponData> magazines = new List<WeaponData>();
  12.     public List<WeaponData> grips = new List<WeaponData>();
  13.     public List<WeaponData> stocks = new List<WeaponData>();
  14.  
  15.     // Update is called once per frame
  16.     void Update()
  17.     {
  18.         if (Input.GetKeyDown(KeyCode.Space))
  19.         {
  20.             GenerateWeapon();
  21.         }
  22.     }
  23.  
  24.     void GenerateWeapon()
  25.     {
  26.         //TODO: pick weapon type
  27.  
  28.         ConstructWeapon(GetRandomWeapon());
  29.  
  30.     }
  31.  
  32.     void ConstructWeapon(List<WeaponData> parts)
  33.     {
  34.                
  35.         foreach (WeaponData weaponData in parts)
  36.         {
  37.             // spawn body
  38.             if (weaponData.partType == PartType.Body)
  39.             {
  40.                 GameObject insBodyGO = Instantiate(weaponData.itemObject);
  41.                 Body insBody = insBodyGO.GetComponent<Body>();
  42.  
  43.                 // spawn other parts
  44.                 foreach (WeaponData weaponPrt in parts)
  45.                 {
  46.                     switch (weaponPrt.partType)
  47.                     {
  48.                         case PartType.Barrel:
  49.                             SpawnWeaponPart(insBody.GetSocket(PartType.Barrel), weaponPrt);
  50.                             break;
  51.  
  52.                         case PartType.Magazine:
  53.                             SpawnWeaponPart(insBody.GetSocket(PartType.Magazine), weaponPrt);
  54.                             break;
  55.  
  56.                         case PartType.Stock:
  57.                             SpawnWeaponPart(insBody.GetSocket(PartType.Stock), weaponPrt);
  58.                             break;
  59.  
  60.                         case PartType.Handle:
  61.                             SpawnWeaponPart(insBody.GetSocket(PartType.Handle), weaponPrt);
  62.                             break;
  63.                            
  64.                         case PartType.Scope:
  65.                             SpawnWeaponPart(insBody.GetSocket(PartType.Scope), weaponPrt);
  66.                             break;
  67.  
  68.                     }
  69.                 }
  70.                
  71.             }
  72.         }
  73.     }
  74.  
  75.     void SpawnWeaponPart(Transform socket, WeaponData partToSpawn)
  76.     {
  77.         Instantiate(partToSpawn.itemObject, socket.position, socket.rotation, socket);
  78.     }
  79.  
  80.  
  81.     List<WeaponData> GetRandomWeapon()
  82.     {
  83.  
  84.         // get random data for each part
  85.         WeaponData randomBody       = PickRandomWeaponPart(bodies);
  86.         WeaponData randomBarrel     = PickRandomWeaponPart(barrels);
  87.         WeaponData randomScope      = PickRandomWeaponPart(scopes);
  88.         WeaponData randomMagazine   = PickRandomWeaponPart(magazines);
  89.         WeaponData randomGrip       = PickRandomWeaponPart(grips);
  90.         WeaponData randomStock      = PickRandomWeaponPart(stocks);
  91.  
  92.         List<WeaponData> randomizedWeapon = new List<WeaponData>()
  93.         {
  94.             randomBody,
  95.             randomBarrel,
  96.             randomScope,
  97.             randomMagazine,
  98.             randomGrip,
  99.             randomStock
  100.         };
  101.  
  102.         return randomizedWeapon;
  103.     }
  104.  
  105.     WeaponData PickRandomWeaponPart(List<WeaponData> weaponData)
  106.     {
  107.         int randomNmbr = Random.Range(0, weaponData.Count);
  108.         return weaponData[randomNmbr];
  109.     }
  110. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement