// God Object Managment void Awake () { if (control == null) { DontDestroyOnLoad(gameObject); control = this; } else if (control != this) { Destroy(gameObject); } }
// God Object Managment void Awake() { if (control == null) { DontDestroyOnLoad(gameObject); control = this; } else if (control != this) { Destroy(gameObject); } }
//Updates object inspection gui IEnumerator UpdataSelectionData() { while (currentlySelected != null) { if (currentlySelected != null) { selectionData = currentlySelected.BeInspected(); } else { selectionData = null; } SimControls.UpdateSelection(selectionData); yield return(new WaitForSeconds(0.5f)); } }
//Selects animats and combines there genes to make a list of new animat genes bool Reproduce() { int Entries; string geneToAdd, geneA, geneB; List <string> geneSelection = new List <string>(), remainingGenes, SplicedGenes = new List <string>(); Queue <string> shuffledGenes; foreach (AnimatAI animat in dockedAnimats) { Entries = animat.ReproductionPoints(); geneToAdd = animat.ExposeGene(); for (int i = 0; i < Entries; i++) { geneSelection.Add(geneToAdd); } } shuffledGenes = new Queue <string>(Utility.ShuffleArray <string>(geneSelection.ToArray(), SimControls.CurrentSeed())); for (int i = 0; i < maxAnimats - aliveAnimats; i++) { string newGene; geneA = shuffledGenes.Dequeue(); shuffledGenes.Enqueue(geneA); remainingGenes = new List <string>(shuffledGenes); remainingGenes.RemoveAll(thing => thing == geneA); geneB = remainingGenes[0]; newGene = GeneSplice(geneA, geneB); if (newGene != null) { SplicedGenes.Add(newGene); //Debug.Log(newGene); } else { //Debug.Log("invalid gene : " + newGene); i--; } } AnimatBaseDna = SplicedGenes.ToArray(); if (AnimatBaseDna != null) { return(true); } else { return(false); } }
// Determins the Users movment and actions based on frame by frame input void Update() { Vector3 moveDir; Vector3 targetMoveAmount; //Camara Movment controls if (locked == true && targetMob != null) { transform.rotation = Quaternion.Euler(0, 0, 0); moveDir = (targetMob.position - transform.position).normalized; targetMoveAmount = moveDir * movementSpeed; moveAmount = Vector3.SmoothDamp(moveAmount, targetMoveAmount, ref smoothMoveVelocity, .2f); controller.Move(moveAmount); } else { moveDir = new Vector3(Input.GetAxisRaw("Horizontal"), 0, Input.GetAxisRaw("Vertical")).normalized; targetMoveAmount = moveDir * movementSpeed; moveAmount = Vector3.SmoothDamp(moveAmount, targetMoveAmount, ref smoothMoveVelocity, .2f); controller.Move(moveAmount); } //Cross hair implementation /* Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); * Plane uiPlane = new Plane(Vector3.forward, ((Vector3.forward * 5))); * float rayDistance; * * if (uiPlane.Raycast(ray, out rayDistance)) { * Vector3 point = ray.GetPoint(rayDistance); * crossHairs.position = point; * }*/ if (Input.GetMouseButton(1) && locked != true) { transform.Rotate(Vector3.up * Input.GetAxis("Mouse X") * Time.deltaTime * mouseSensitivityX); } if (Input.GetMouseButton(2)) { verticalLookRotation += Input.GetAxis("Mouse Y") * Time.deltaTime * mouseSensitivityY; verticalLookRotation = Mathf.Clamp(verticalLookRotation, 30, 90); viewCamera.localEulerAngles = new Vector3(verticalLookRotation, viewCamera.localEulerAngles.y, viewCamera.localEulerAngles.z); } if (Input.GetMouseButtonUp(0)) { foreach (GameObject DisplayItem in Displayobjects) { DisplayItem.SetActive(false); } RaycastHit lookHit = new RaycastHit(); Ray lookRay = viewCamera.GetComponent <Camera>().ScreenPointToRay(Input.mousePosition); Debug.DrawRay(lookRay.origin, lookRay.direction, Color.green, 200f); if (Physics.Raycast(lookRay, out lookHit, 200f)) { Debug.Log(lookHit.collider.gameObject.ToString() + "Locking on to this"); currentlySelected = lookHit.collider.gameObject.GetComponent <IInspectable>(); if (currentlySelected != null) { selectionData = currentlySelected.BeInspected(); SimControls.UpdateSelection(selectionData); StartCoroutine(UpdataSelectionData()); } else { currentlySelected = null; selectionData = null; SimControls.UpdateSelection(selectionData); } if (lookHit.collider.gameObject.GetComponent <LivingEntity>() == true) { locked = true; targetMob = lookHit.collider.gameObject.transform; Displayobjects[0].SetActive(true); Displayobjects[0].transform.localScale = targetMob.transform.localScale; Displayobjects[0].GetComponent <Renderer>().material = targetMob.gameObject.GetComponent <Renderer>().material; targetMob.GetComponent <LivingEntity>().OnDeath += onfllowingDeath; transform.position = new Vector3(targetMob.position.x, transform.position.y, targetMob.position.z); viewCamera.localEulerAngles = new Vector3(90, viewCamera.localEulerAngles.y, viewCamera.localEulerAngles.z); transform.Rotate(Vector3.up); } else if (lookHit.collider.gameObject.GetComponent <AnimatEssence>() == true) { Displayobjects[1].SetActive(true); } else if (lookHit.collider.gameObject.GetComponent <Terrain>() == true) { Terrain currentTerrain = lookHit.collider.gameObject.GetComponent <Terrain>(); if (currentTerrain.isWater == true) { Displayobjects[2].SetActive(true); } else { Displayobjects[3].SetActive(true); } } else if (lookHit.collider.gameObject.GetComponentInParent <PrimaryProducer>() == true) { /*switch (lookHit.collider.gameObject.name) { * * }*/ } else { locked = false; selectionData = null; } } } if (Input.GetKeyDown("p")) { TogglePause(); } if (Input.GetKeyDown("-") || Input.GetAxis("Mouse ScrollWheel") > 0) { veiwheight -= 5; veiwheight = Mathf.Clamp(veiwheight, 10, 50); transform.position = new Vector3(transform.position.x, veiwheight, transform.position.z); //Camera.main.orthographicSize = veiwheight; } if (Input.GetKeyDown("+") || Input.GetAxis("Mouse ScrollWheel") < 0) { veiwheight += 5;; veiwheight = Mathf.Clamp(veiwheight, 10, 50); transform.position = new Vector3(transform.position.x, veiwheight, transform.position.z); //Camera.main.orthographicSize = veiwheight; } if (Input.GetAxisRaw("Vertical") != 0 || Input.GetAxisRaw("Horizontal") != 0) { locked = false; } }