using System; using UnityEngine; using System.Collections; using Cinemachine; using Object = UnityEngine.Object; using Random = UnityEngine.Random; namespace BoatAttack.Boat { /// /// This is an overall controller for a boat /// public class BoatController : MonoBehaviour { //Boat stats public bool Human; // Is human public bool RandomizeColors = true; [NonSerialized]public Color PrimaryColor; // Boat primary colour [NonSerialized]public Color TrimColor; // Boat secondary colour public Renderer boatRenderer; // The renderer for the boat mesh public Engine engine; public CinemachineVirtualCamera cam; void OnValidate() { Colourize(); // Update the colour material property block } void Awake() { Colourize(); } // Use this for initialization void Start() { engine.RB = GetComponent(); if (Human) { gameObject.AddComponent().engine = engine; // Adds a human controller if human } else { gameObject.AddComponent().engine = engine; // Adds an AI controller if AI } } /// /// This sets both the primary and secondary colour and assigns via a MPB /// void Colourize() { if (RandomizeColors) Randomize(); if (boatRenderer) { if (Application.isEditor) { MaterialPropertyBlock mpb = new MaterialPropertyBlock(); mpb.SetColor("_Color1", PrimaryColor); mpb.SetColor("_Color2", TrimColor); boatRenderer.SetPropertyBlock(mpb); } else { boatRenderer.material.SetColor("_Color1", PrimaryColor); boatRenderer.material.SetColor("_Color2", TrimColor); } } } void Randomize() { Random.InitState(this.gameObject.GetInstanceID() + DateTime.Now.Millisecond + DateTime.UtcNow.Second); var H = Random.Range(0f, 1f); var S = 0f; var V = 0.9f; var rand = Random.insideUnitCircle; if (rand.x > 0.5f) S = 0f; else S = 0.9f; if (rand.y > 0.8f) V = 0f; else V = Random.Range(0.5f, 0.9f); var h2 = Mathf.Repeat(H + (rand.x + rand.y > 0 ? 0.5f : 0f), 1f); var s2 = S <= 0.1f ? 0.9f : Random.Range(0.5f, 0.9f); PrimaryColor = Color.HSVToRGB(H, S, V); TrimColor = Color.HSVToRGB(h2, s2, 1f - V); } } [Serializable] public class BoatData { public string boatName; //public BoatType boatType = BoatType.Interceptor; public Object boatPrefab; public bool Human = false; } [Serializable] public enum BoatType { Interceptor, Classic, } }