using System.Collections.Generic; using UnityEngine; using System.Linq; using SanAndreasUnity.Importing.Items; using SanAndreasUnity.Importing.Items.Definitions; using SanAndreasUnity.Behaviours; using SanAndreasUnity.Behaviours.Vehicles; namespace SanAndreasUnity.UI { public class VehicleSpawnerWindow : PauseMenuWindow { private List> vehicleGroupings = null; private int[] columnWidths = new int[]{ 150, 120, 30, 70 }; private string m_searchText = ""; VehicleSpawnerWindow() { // set default parameters this.windowName = "Vehicle Spawner"; this.useScrollView = true; } void Start () { this.RegisterButtonInPauseMenu (); // adjust rect //float windowWidth = 400; //float windowHeight = Mathf.Min (700, Screen.height * 0.7f); //this.windowRect = Utilities.GUIUtils.GetCornerRect (SanAndreasUnity.Utilities.ScreenCorner.TopRight, // new Vector2 (windowWidth, windowHeight), new Vector2 (20, 20)); this.windowRect = Utilities.GUIUtils.GetCenteredRectPerc( new Vector2(0.4f, 0.8f) ); } void GetVehicleDefs() { // get all vehicle definitions var allVehicles = Item.GetDefinitions (); // group them by type var groupings = allVehicles.GroupBy (v => v.VehicleType); this.vehicleGroupings = groupings.ToList (); } protected override void OnWindowGUIBeforeContent() { // search box GUILayout.BeginHorizontal(); GUILayout.Label("Search:"); GUILayout.Space(5); m_searchText = GUILayout.TextField(m_searchText, GUILayout.Width(120)); GUILayout.FlexibleSpace(); GUILayout.EndHorizontal(); GUILayout.Space(10); } protected override void OnWindowGUI () { if (Behaviours.Loader.HasLoaded && null == this.vehicleGroupings) { GetVehicleDefs (); } if (null == this.vehicleGroupings) return; GUILayout.Space (10); // for each vehicle, display a button which spawns it string nameFilter = m_searchText.Trim(); foreach (var grouping in this.vehicleGroupings) { GUILayout.Label (grouping.Key.ToString ()); GUILayout.Space (10); // table columns // GUILayout.BeginHorizontal(); // GUILayout.Label ("Game name", GUILayout.Width (this.columnWidths [0])); // GUILayout.Label ("Class name", GUILayout.Width (this.columnWidths [1])); // GUILayout.Label ("Id", GUILayout.Width (this.columnWidths [2])); // GUILayout.Label ("Frequency", GUILayout.Width (this.columnWidths [3])); // GUILayout.EndHorizontal (); // // GUILayout.Space (10); // display all vehicles of this type foreach (var v in grouping) { if (!string.IsNullOrWhiteSpace(nameFilter)) { if (v.GameName.IndexOf(nameFilter, System.StringComparison.InvariantCultureIgnoreCase) < 0) continue; } //GUILayout.BeginHorizontal (); if (GUILayout.Button (v.GameName, GUILayout.Width(this.columnWidths[0]))) { if (Utilities.NetUtils.IsServer) { if (Ped.Instance != null) Vehicle.CreateInFrontOf (v.Id, Ped.Instance.transform); } else if (Net.PlayerRequests.Local != null) { Net.PlayerRequests.Local.RequestVehicleSpawn(v.Id); } } //GUILayout.Label (v.ClassName, GUILayout.Width (this.columnWidths [1])); //GUILayout.Label (v.Id.ToString(), GUILayout.Width (this.columnWidths [2])); //GUILayout.Label (v.Frequency.ToString(), GUILayout.Width (this.columnWidths [3])); //GUILayout.EndHorizontal (); } GUILayout.Space (10); } GUILayout.Space (20); } } }