SanAndreasUnity/Assets/Scripts/UI/VehicleSpawnerWindow.cs
2020-05-31 19:09:55 +02:00

145 lines
3.5 KiB
C#

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<IGrouping<VehicleType, VehicleDef>> 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<VehicleDef> ();
// 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);
}
}
}