Пример #1
0
    // God Object Managment
    void Awake () {
        if (control == null)
        {
            DontDestroyOnLoad(gameObject);
            control = this;
        }
        else if (control != this)
        {
            Destroy(gameObject);
        }
	}
Пример #2
0
 // God Object Managment
 void Awake()
 {
     if (control == null)
     {
         DontDestroyOnLoad(gameObject);
         control = this;
     }
     else if (control != this)
     {
         Destroy(gameObject);
     }
 }
Пример #3
0
    //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));
        }
    }
Пример #4
0
    //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);
        }
    }
Пример #5
0
    // 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;
        }
    }