コード例 #1
0
 void Start()
 {
     attributes = GetComponent <SpeciesAttributes>();
     character  = int.Parse(gameObject.name);
     InvokeRepeating("IncreaseLibido", 0, 1);
     InvokeRepeating("DecreaseHungry", 0, 1);
 }
コード例 #2
0
    void Start()
    {
        rb   = GetComponent <Rigidbody>();
        anim = GetComponent <Animator>();
        anim.SetInteger("selectedSpecies", PlayerInfo.selectedSpecies);

        attributes       = GetComponent <SpeciesAttributes>();
        fatigueText      = GameObject.Find("FatigueText").GetComponent <Text>();
        fatigueText.text = attributes.movementRemaining.ToString();
        character        = int.Parse(gameObject.name);
        spriteRenderer   = gameObject.GetComponent <SpriteRenderer>();
    }
    void Start()
    {
        anim       = GetComponent <Animator>();
        attributes = GetComponent <SpeciesAttributes>();
        character  = int.Parse(gameObject.name);
        float randomStart = Random.value * 3;

        InvokeRepeating("WanderOrStay", randomStart, 3);
        InvokeRepeating("HuntForFood", randomStart, 1);
        InvokeRepeating("FightCreatures", randomStart, 1);
        InvokeRepeating("DefendOrRun", randomStart, 0.5f);
        agent    = gameObject.GetComponent <NavMeshAgent>();
        obstacle = gameObject.GetComponent <NavMeshObstacle>();
        sprite   = gameObject.GetComponent <SpriteRenderer>();

        StartCoroutine(SetAgentOffset(1));
    }
コード例 #4
0
    public void BreedClick()
    {
        GameObject activeCreature  = GameObject.Find("PlayerCreatures/" + PlayerInfo.selectedCreature.ToString()).gameObject;
        GameObject passiveCreature = GameObject.Find("PlayerCreatures/" + PlayerInfo.selectedMenuCreature.ToString()).gameObject;

        if (activeCreature.GetComponent <SpeciesAttributes>().libido < 50)
        {
            GameObject.Find("MenuCanvas/MenuBackground/BreedMenu/ErrorText").SetActive(true);
            GameObject.Find("MenuCanvas/MenuBackground/BreedMenu/ErrorText").GetComponent <Text>().text = "Not enough libido!";
        }
        else if (Vector3.Distance(activeCreature.transform.position, passiveCreature.transform.position) > 12.0)
        {
            GameObject.Find("MenuCanvas/MenuBackground/BreedMenu/ErrorText").SetActive(true);
            GameObject.Find("MenuCanvas/MenuBackground/BreedMenu/ErrorText").GetComponent <Text>().text = "Creature is too far!";
        }
        else
        {
            GameObject.Find("MenuCanvas/MenuBackground/BreedMenu/ErrorText").GetComponent <Text>().text = "";
            GameObject.Find("MenuCanvas/MenuBackground/BreedMenu/ErrorText").SetActive(false);

            double normalizedFoods;
            double normalizedRan;
            double normalizedDefended;
            double normalizedAttacked;

            if (PlayerTime.currentSeconds == PlayerTime.totalSeconds)
            {
                normalizedFoods    = PlayerModel.CurrentModel.foods / PlayerTime.currentSeconds;
                normalizedRan      = PlayerModel.CurrentModel.ran / PlayerTime.currentSeconds;
                normalizedDefended = PlayerModel.CurrentModel.defended / PlayerTime.currentSeconds;
                normalizedAttacked = PlayerModel.CurrentModel.attacked / PlayerTime.currentSeconds;
            }
            else
            {
                normalizedFoods    = ((PlayerModel.CurrentModel.foods / PlayerTime.currentSeconds) + (PlayerModel.LegacyModel.foods / PlayerTime.totalSeconds)) / 2;
                normalizedRan      = ((PlayerModel.CurrentModel.ran / PlayerTime.currentSeconds) + (PlayerModel.LegacyModel.ran / PlayerTime.totalSeconds)) / 2;
                normalizedDefended = ((PlayerModel.CurrentModel.defended / PlayerTime.currentSeconds) + (PlayerModel.LegacyModel.ran / PlayerTime.totalSeconds)) / 2;
                normalizedAttacked = ((PlayerModel.CurrentModel.attacked / PlayerTime.currentSeconds) + (PlayerModel.LegacyModel.ran / PlayerTime.totalSeconds)) / 2;
            }

            /* OLD MOVEMENT SYSTEM
             *
             * int newbornMovemet = 0;
             * if(activeCreature.GetComponent<SpeciesAttributes>().movementUpgrade == 0 && normalizedSteps >= 50)
             * {
             *  newbornMovemet = 1;
             * }
             * else if(activeCreature.GetComponent<SpeciesAttributes>().movementUpgrade == 1 && normalizedSteps >= 75)
             * {
             *  newbornMovemet = 2;
             * }
             * else if (activeCreature.GetComponent<SpeciesAttributes>().movementUpgrade == 1 && normalizedSteps >= 50)
             * {
             *  newbornMovemet = 1;
             * }
             * else if (activeCreature.GetComponent<SpeciesAttributes>().movementUpgrade == 2 && normalizedSteps < 75)
             * {
             *  newbornMovemet = 1;
             * }
             * else if (activeCreature.GetComponent<SpeciesAttributes>().movementUpgrade == 2 && normalizedSteps >= 75)
             * {
             *  newbornMovemet = 2;
             * }
             */

            int newbornMovement = 0;
            int newbornDefense  = 0;
            if (activeCreature.GetComponent <SpeciesAttributes>().movementUpgrade == 0 && normalizedRan > (normalizedDefended * 1.25))
            {
                newbornMovement = 1;
                newbornDefense  = 0;
            }
            else if (activeCreature.GetComponent <SpeciesAttributes>().movementUpgrade == 1 && normalizedRan > (normalizedDefended * 1.33))
            {
                newbornMovement = 2;
                newbornDefense  = 0;
            }
            else if (activeCreature.GetComponent <SpeciesAttributes>().movementUpgrade == 1 && normalizedRan > (normalizedDefended * 1.25))
            {
                newbornMovement = 1;
                newbornDefense  = 0;
            }
            else if (activeCreature.GetComponent <SpeciesAttributes>().movementUpgrade == 2 && normalizedRan < (normalizedDefended * 1.33))
            {
                newbornMovement = 1;
                newbornDefense  = 0;
            }
            else if (activeCreature.GetComponent <SpeciesAttributes>().movementUpgrade == 2 && normalizedRan > (normalizedDefended * 1.33))
            {
                newbornMovement = 2;
                newbornDefense  = 0;
            }
            else if (activeCreature.GetComponent <SpeciesAttributes>().deffenseUpgrade == 0 && normalizedDefended > (normalizedRan * 1.25))
            {
                newbornMovement = 0;
                newbornDefense  = 1;
            }
            else if (activeCreature.GetComponent <SpeciesAttributes>().deffenseUpgrade == 1 && normalizedDefended > (normalizedRan * 1.33))
            {
                newbornMovement = 0;
                newbornDefense  = 2;
            }
            else if (activeCreature.GetComponent <SpeciesAttributes>().deffenseUpgrade == 1 && normalizedDefended > (normalizedRan * 1.25))
            {
                newbornMovement = 0;
                newbornDefense  = 1;
            }
            else if (activeCreature.GetComponent <SpeciesAttributes>().deffenseUpgrade == 2 && normalizedDefended < (normalizedRan * 1.33))
            {
                newbornMovement = 0;
                newbornDefense  = 1;
            }
            else if (activeCreature.GetComponent <SpeciesAttributes>().deffenseUpgrade == 2 && normalizedDefended > (normalizedRan * 1.33))
            {
                newbornMovement = 0;
                newbornDefense  = 2;
            }

            int newbornPerception = 0;
            if (activeCreature.GetComponent <SpeciesAttributes>().perceptionUpgrade == 0 && normalizedFoods >= 0.008333) // 1 fruit each 2 minutes
            {
                newbornPerception = 1;
            }
            else if (activeCreature.GetComponent <SpeciesAttributes>().perceptionUpgrade == 1 && normalizedFoods >= 0.0125) // 1.5 fruit each 2 minutes
            {
                newbornPerception = 2;
            }
            else if (activeCreature.GetComponent <SpeciesAttributes>().perceptionUpgrade == 1 && normalizedFoods >= 0.008333)
            {
                newbornPerception = 1;
            }
            else if (activeCreature.GetComponent <SpeciesAttributes>().perceptionUpgrade == 2 && normalizedFoods < 0.0125)
            {
                newbornPerception = 1;
            }
            else if (activeCreature.GetComponent <SpeciesAttributes>().perceptionUpgrade == 2 && normalizedFoods >= 0.0125)
            {
                newbornPerception = 2;
            }

            int newbornAttack = 0;
            if (activeCreature.GetComponent <SpeciesAttributes>().attackUpgrade == 0 && normalizedAttacked >= 0.23809) // Enough damage to kill 1 creature each 7 minutes
            {
                newbornAttack = 1;
            }
            else if (activeCreature.GetComponent <SpeciesAttributes>().attackUpgrade == 1 && normalizedAttacked >= 0.41666) // Enough damage to kill 1 creature each 4 minutes
            {
                newbornAttack = 2;
            }
            else if (activeCreature.GetComponent <SpeciesAttributes>().attackUpgrade == 1 && normalizedAttacked >= 0.23809)
            {
                newbornAttack = 1;
            }
            else if (activeCreature.GetComponent <SpeciesAttributes>().attackUpgrade == 2 && normalizedAttacked < 0.41666)
            {
                newbornAttack = 1;
            }
            else if (activeCreature.GetComponent <SpeciesAttributes>().attackUpgrade == 2 && normalizedAttacked >= 0.41666)
            {
                newbornAttack = 2;
            }

            int newbornCombat = 0;

            if (newbornAttack > newbornDefense)
            {
                newbornCombat = newbornAttack;
            }
            else
            {
                newbornCombat = newbornDefense;
            }

            if (newbornAttack > 0 && newbornMovement > 0)
            {
                if (newbornAttack > newbornMovement)
                {
                    newbornMovement = 0;
                }
                else
                {
                    newbornAttack = 0;
                }
            }

            Vector3 childPosition = new Vector3();
            Vector3 childRotation;
            Vector3 childScale;
            childPosition.x = activeCreature.transform.position.x + 7; //
            childPosition.z = activeCreature.transform.position.z + 7; //
            childRotation.x = 0;
            childRotation.y = 0;
            childRotation.z = 0;
            childScale.x    = 5;
            childScale.y    = 5;
            childScale.z    = 1;
            GameObject creaturesNode    = GameObject.Find("PlayerCreatures");
            int        lastCreatureName = int.Parse(creaturesNode.transform.GetChild(creaturesNode.transform.childCount - 1).name);
            GameObject childObject      = new GameObject((lastCreatureName + 1).ToString());

            SpriteRenderer spriteRenderer = childObject.AddComponent <SpriteRenderer>();
            //Sprite creatureSprite = Resources.Load<Sprite>("species_" + PlayerInfo.selectedSpecies.ToString() + "_default");
            //childSprite.sprite = creatureSprite;

            Animator childAnimator = childObject.AddComponent <Animator>();
            childAnimator.runtimeAnimatorController = Resources.Load("playerSpeciesController") as RuntimeAnimatorController;
            childAnimator.updateMode  = AnimatorUpdateMode.Normal;
            childAnimator.cullingMode = AnimatorCullingMode.AlwaysAnimate;

            childAnimator.SetInteger("movementUpgrade", newbornMovement);
            childAnimator.SetInteger("perceptionUpgrade", newbornPerception);
            childAnimator.SetInteger("combatUpgrade", newbornCombat);


            childObject.transform.parent     = GameObject.Find("PlayerCreatures").transform;
            childObject.transform.rotation   = Quaternion.Euler(childRotation);
            childObject.transform.localScale = childScale;
            BoxCollider childBox = childObject.AddComponent <BoxCollider>();
            childBox.isTrigger = false;
            childBox.material  = new PhysicMaterial("None");
            Vector3 childBoxCenter;
            childBoxCenter.x = 0;
            childBoxCenter.y = 0;
            childBoxCenter.z = 0;
            childBox.center  = childBoxCenter;
            Vector3 childBoxSize;
            childBoxSize.x = 0.9f;
            childBoxSize.y = 0.8f;
            childBoxSize.z = 4;
            childBox.size  = childBoxSize;
            Rigidbody childRigidbody = childObject.AddComponent <Rigidbody>();
            childRigidbody.mass                   = 10;
            childRigidbody.drag                   = 0;
            childRigidbody.useGravity             = true;
            childRigidbody.isKinematic            = false;
            childRigidbody.collisionDetectionMode = CollisionDetectionMode.Discrete;
            childRigidbody.constraints            = RigidbodyConstraints.FreezeRotationX | RigidbodyConstraints.FreezeRotationY | RigidbodyConstraints.FreezeRotationZ;
            childObject.tag = "ControllableSpecies";
            Terrain terrain = GameObject.Find("Terrain").GetComponent <Terrain>();
            childPosition.y = terrain.SampleHeight(childPosition) + 10;
            childObject.transform.position = childPosition;

            NavMeshObstacle obstacle = childObject.AddComponent <NavMeshObstacle>();
            obstacle.center  = new Vector3(0f, 0f, 0f);
            obstacle.size    = new Vector3(1f, 1f, 4.1f);
            obstacle.carving = true;
            obstacle.enabled = true;
            NavMeshAgent agent = childObject.AddComponent <NavMeshAgent>();
            agent.radius                  = 0.53f;
            agent.height                  = 1;
            agent.speed                   = (6.0f + newbornMovement * 3) * GameConstants.movementSpeed;
            agent.angularSpeed            = 120;
            agent.acceleration            = 99;
            agent.stoppingDistance        = 0;
            agent.autoBraking             = true;
            agent.avoidancePriority       = 50;
            agent.autoTraverseOffMeshLink = true;
            agent.autoRepath              = true;
            agent.areaMask                = 1;
            agent.enabled                 = false;


            SpeciesAttributes childAttributes = childObject.AddComponent <SpeciesAttributes>();
            childAttributes.movementUpgrade   = newbornMovement;
            childAttributes.perceptionUpgrade = newbornPerception;
            childAttributes.attackUpgrade     = newbornAttack;
            childAttributes.deffenseUpgrade   = newbornDefense;
            Debug.Log("Newborn generated:\nMovement upgrade: " + newbornMovement + "\nPerception Upgrade: " + newbornPerception + "\nAttack Upgrade: " + newbornAttack + "\nDefense Upgrade: " + newbornDefense + "\n\nCurrent time: " + PlayerTime.currentSeconds + " seconds\nTotal time: " + PlayerTime.totalSeconds + " seconds\nValues in Current Model:\nRan: " + PlayerModel.CurrentModel.ran + "\nFoods: " + PlayerModel.CurrentModel.foods + "\nAttacked: " + PlayerModel.CurrentModel.attacked + "\nDefended: " + PlayerModel.CurrentModel.defended + "\n\nValues in Legacy Model:\nRan: " + PlayerModel.LegacyModel.ran + "\nFoods: " + PlayerModel.LegacyModel.foods + "\nAttacked: " + PlayerModel.LegacyModel.attacked + "\nDefended: " + PlayerModel.LegacyModel.defended);
            childObject.AddComponent <AttributeUpdater>();
            childObject.AddComponent <CharacterMovement>();
            childObject.AddComponent <FixRotation>();
            childObject.AddComponent <PlayerAutonomousBehavior>();

            activeCreature.GetComponent <SpeciesAttributes>().libido -= 50;
            PlayerInfo.playerCreaturesCount++;

            PlayerModel.triggerBreed();
            PlayerTime.triggerBreed();
        }
    }