public void AddCellBugAll(CellBug cellBug)
 {
     cellBugAllList.Add(cellBug);
     GroupNumChangeVision();
     CapicityVision();
     GeneLiveVision(cellBug);
 }
    //寻找配偶
    public CellBug SearchMate(CellBug cellBug)
    {
        Const.CellBugGroup group = cellBug.GetAbility().GetGroup();

        ArrayList mateBugList = new ArrayList();

        for (int i = 0; i < cellBugAllList.Count; i++)
        {
            CellBug tempBug = cellBugAllList[i] as CellBug;
            if (tempBug && tempBug.GetAbility().GetStatus() != Const.StutasEnum.SearchMateEnum &&
                tempBug.GetAbility().GetGroup() == group &&
                tempBug != cellBug)
            {
                mateBugList.Add(tempBug);
            }
        }

        if (mateBugList.Count != 0)
        {
            CellBug mate = mateBugList[0] as CellBug;
            for (int m = 1; m < mateBugList.Count; m++)
            {
                CellBug tempMate = mateBugList[m] as CellBug;
                if (Vector3.Magnitude(cellBug.transform.position - tempMate.transform.position)
                    < Vector3.Magnitude(cellBug.transform.position - mate.transform.position))
                {
                    mate = tempMate;
                }
            }
            return(mate);
        }
        return(null);
    }
 public void Change()
 {
     for (int i = (nowCellBugIndex + 1) % cellBugAllList.Count; i < cellBugAllList.Count; i++)
     {
         if (i == nowCellBugIndex)
         {
             return;
         }
         CellBug bug = cellBugAllList[i] as CellBug;
         if (bug.GetAbility().GetGroup() == Const.CellBugGroup.GodChildEnum &&
             bug != nowCellBug)
         {
             nowCellBugIndex = i;
             nowCellBug.SetIsAI(true);
             nowCellBug = bug;
             bug.SetIsAI(false);
             break;
         }
         if (i == cellBugAllList.Count - 1)
         {
             i = -1;
         }
     }
     DnaVision();
 }
    public void StatusVision(CellBug cellBug)
    {
        if (cellBug != nowCellBug)
        {
            return;
        }
        switch (cellBug.GetAbility().GetStatus())
        {
        case Const.StutasEnum.AttackEnum:
            gameStatus.spriteName = "attack";
            break;

        case Const.StutasEnum.EatMeatEnum:
            gameStatus.spriteName = "meat";
            break;

        case Const.StutasEnum.EatPlantEnum:
            gameStatus.spriteName = "plant";
            break;

        case Const.StutasEnum.IdleEnum:
            gameStatus.spriteName = "idle";
            break;

        case Const.StutasEnum.SearchMateEnum:
            gameStatus.spriteName = "search";
            break;
        }
    }
    private void GeneLiveVision(CellBug cellBug)
    {
        if (nowCellBug == null ||
            cellBug.GetAbility().GetGroup() != nowCellBug.GetAbility().GetGroup())
        {
            return;
        }

        int groupNum = 0;

        int[] gene = new int[Const.DnaLineLength];
        for (int i = 0; i < cellBugAllList.Count; i++)
        {
            CellBug bug = cellBugAllList[i] as CellBug;
            if (bug.GetAbility().GetGroup() == nowCellBug.GetAbility().GetGroup())
            {
                groupNum++;
                Dna tempDna = bug.GetAbility().GetDna();

                for (int index = 0; index < gene.Length; index++)
                {
                    gene[index] += (tempDna.GetDnaLine(Const.DnaLineEnum.OneEnum)[index] + tempDna.GetDnaLine(Const.DnaLineEnum.TwoEnum)[index]);
                }
            }
        }

        for (int m = 0; m < geneLabelArray.Length; m++)
        {
            geneLabelArray[m].text = Const.DnaName[m] + ":" + (int)(gene[m] / (2.0 * groupNum) * 100) + "%";
        }
    }
Example #6
0
    public override int GetSpeed(CellBug cellbug)
    {
        if (!cellbug)
        {
            return(0);
        }
        //需要访问dna
        Dna dna            = cellbug.GetAbility().GetDna();
        int speedGeneTotal = dna.GetDnaIndex(Const.DnaLineEnum.OneEnum, Const.GenesEnum.SpeedEnum)
                             + dna.GetDnaIndex(Const.DnaLineEnum.TwoEnum, Const.GenesEnum.SpeedEnum);

        if (speedGeneTotal == 0)
        {
            nowSpeed = lowSpeed;
        }
        else if (speedGeneTotal == 1)
        {
            nowSpeed = middleSpeed;
        }
        else if (speedGeneTotal == 2)
        {
            nowSpeed = highSpeed;
        }

        return(nowSpeed);
    }
    public void ReadyAttack(GameObject tapedObject)
    {
        targetEnemy = tapedObject.GetComponent <CellBug>();
        ability.SetStatus(Const.StutasEnum.AttackEnum);

        this.GetComponent <CellBugMusic>().PlayAttackMusic();
    }
    //产生后代
    private void RaiseUpSeed(CellBug cellBug)
    {
        ability.SetStatus(Const.StutasEnum.IdleEnum);

        Instantiate(flagLove, transform.position - new Vector3(0, 0, 1), Quaternion.identity);

        int birthNum = Const.GeneArray[(int)Const.GenesEnum.BrithNumEnum].GetBirthNum(this);
        int bugNum   = gameControl.GetCellBugNum();

        for (int i = 0; i < birthNum; i++)
        {
            if (bugNum + i + 1 > Const.EnvironmentalCapacity)
            {
                return;
            }

            GameObject bug        = Instantiate(cellBugProfabs[(int)ability.GetGroup()], this.transform.position, Quaternion.identity) as GameObject;
            CellBug    temCellBug = bug.GetComponent <CellBug>();

            int[] lineOne = this.GetAbility().GetDna().DnaVariation();
            int[] lineTwo = cellBug.GetAbility().GetDna().DnaVariation();
            temCellBug.GetAbility().SetGroup(this.ability.GetGroup());
            temCellBug.GetAbility().SetDNA(lineOne, lineTwo);
        }
    }
    public void ReadyMate(GameObject tapedObject)
    {
        targetMateCellBug = tapedObject.GetComponent <CellBug>() as CellBug;
        ability.SetStatus(Const.StutasEnum.SearchMateEnum);
        ability.SetCanMate(false);

        this.GetComponent <CellBugMusic>().PlayMateMusic(Const.GeneArray[(int)Const.GenesEnum.SongEnum].GetMusic(this));
    }
Example #10
0
    public override int GetPoison(CellBug cellbug)
    {
        //需要访问dna
        Dna dna = cellbug.GetAbility().GetDna();

        nowPoison = dna.GetDnaIndex(Const.DnaLineEnum.OneEnum, Const.GenesEnum.PoisonEnum)
                    + dna.GetDnaIndex(Const.DnaLineEnum.TwoEnum, Const.GenesEnum.PoisonEnum);
        return(nowPoison);
    }
Example #11
0
    public override int GetPowerGetFrom(CellBug cellbug)
    {
        //需要访问dna
        Dna dna = cellbug.GetAbility().GetDna();

        nowForm = dna.GetDnaIndex(Const.DnaLineEnum.OneEnum, Const.GenesEnum.PowerGetFromEnum)
                  + dna.GetDnaIndex(Const.DnaLineEnum.TwoEnum, Const.GenesEnum.PowerGetFromEnum);
        return(nowForm);
    }
Example #12
0
    private void CreateTargetPosition(CellBug cellBug)
    {
        int seed = (int)DateTime.Now.Ticks + cellBug.GetAbility().GetId() * 10;

        System.Random random = new System.Random(seed);
        int           x      = random.Next(-Const.DisMap, Const.DisMap);
        int           y      = random.Next(-Const.DisMap, Const.DisMap);

        targetPosition = new Vector3(x, y, cellBug.transform.position.z);
    }
    public void AlertVision(CellBug cellBug, string message)
    {
        if (cellBug != nowCellBug)
        {
            return;
        }

        alertLabel.text = message;
        StartCoroutine(Wait());
    }
Example #14
0
    public override int GetAntibiotic(CellBug cellbug)
    {
        //需要访问dna

        Dna dna = cellbug.GetAbility().GetDna();

        nowAntibiotic = dna.GetDnaIndex(Const.DnaLineEnum.OneEnum, Const.GenesEnum.AntibioticEnum)
                        + dna.GetDnaIndex(Const.DnaLineEnum.TwoEnum, Const.GenesEnum.AntibioticEnum);

        return(nowAntibiotic);
    }
Example #15
0
 private bool SearchFood(CellBug cellBug)
 {
     //寻找食物
     food = cellBug.GetGameControl().SearchFoodWithDis(cellBug, Const.DisForEatFood);
     if (food && cellBug.GetAbility().GetPower() < Const.PowerForStarve)
     {
         cellBug.ReadyEat(food.gameObject);
         return(true);
     }
     return(false);
 }
Example #16
0
 private bool SerarchEnemy(CellBug cellBug)
 {
     //寻找敌人杀死来食用
     cellBugEnemy = cellBug.GetGameControl().SearchEnemyWithDis(cellBug, Const.DisForEatEnemy);
     if (cellBugEnemy != null && cellBug.GetAbility().GetPower() < Const.PowerForStarve)
     {
         cellBug.ReadyAttack(cellBugEnemy.gameObject);
         return(true);
     }
     return(false);
 }
Example #17
0
    private void CreateCellBug()
    {
        int seed = (int)DateTime.Now.Ticks + 100 * (int)group;

        System.Random random   = new System.Random(seed);
        int           dis      = random.Next(1, 5);
        float         z        = cellBugProfabs[(int)group].transform.position.z;
        Vector3       position = transform.position + new Vector3(dis, dis, z);
        CellBug       bug      = Instantiate(cellBugProfabs[(int)group], position, Quaternion.identity) as CellBug;

        bug.GetAbility().SetGroup(group);
    }
    public void DeleteCellBugAll(CellBug cellBug)
    {
        if (cellBug == nowCellBug)
        {
            nowCellBug = null;
        }
        GeneLiveVision(cellBug);
        cellBugAllList.Remove(cellBug);
        CapicityVision();
        GroupNumChangeVision(true);

        Resources.UnloadUnusedAssets();
    }
Example #19
0
 private bool SearchMate(CellBug cellBug)
 {
     //寻找配偶
     mate = cellBug.GetGameControl().SearchMate(cellBug);
     if (mate != null &&
         cellBug.GetAbility().GetPower() >= Const.PowerForMate &&
         cellBug.GetAbility().GetCanMate() &&
         cellBug.GetGameControl().GetCellBugNum() < Const.EnvironmentalCapacity)
     {
         cellBug.ReadyMate(mate.gameObject);
         return(true);
     }
     return(false);
 }
Example #20
0
    //遭到攻击
    public bool Attacked(CellBug cellBug)
    {
        int  attackForce = Const.GeneArray[(int)Const.GenesEnum.AttackForceEnum].GetAttackForce(cellBug);
        bool isLive      = ability.SetPower(-attackForce);

        if (!isLive)
        {
            this.Dead(Const.DeadEnum.KilledEnum);
        }
        if (isLive && this.ability.GetStatus() != Const.StutasEnum.AttackEnum)
        {
            this.ReadyAttack(cellBug.gameObject);
        }
        return(isLive);
    }
    private void SearchCellBug()
    {
        for (int i = 0; i < cellBugAllList.Count; i++)
        {
            CellBug bug = cellBugAllList[i] as CellBug;
            if (bug && bug.GetAbility().GetGroup() == Const.CellBugGroup.GodChildEnum)
            {
                nowCellBug = bug;
                nowCellBug.SetIsAI(false);
                nowCellBugIndex = i;
                break;
            }
            continue;
        }

        DnaVision();
    }
    private void GroupNumChangeVision(bool isResult = false, Const.CellBugGroup group = Const.CellBugGroup.GodChildEnum)
    {
        int numGodChild = 0;
        int numOrc      = 0;
        int numHuman    = 0;
        int numEidolon  = 0;

        for (int i = 0; i < cellBugAllList.Count; i++)
        {
            CellBug bug = cellBugAllList[i] as CellBug;
            if (bug.GetAbility().GetGroup() == group)
            {
                numGodChild++;
            }
            if (bug.GetAbility().GetGroup() == Const.CellBugGroup.OrcEnum)
            {
                numOrc++;
            }
            if (bug.GetAbility().GetGroup() == Const.CellBugGroup.HumanEnum)
            {
                numHuman++;
            }
            if (bug.GetAbility().GetGroup() == Const.CellBugGroup.EidolonEnum)
            {
                numEidolon++;
            }
        }

        groupNum.text = "GodChild number:" + numGodChild;
        otherGroupLabelArray[0].text = "Orc number:" + numOrc;
        otherGroupLabelArray[1].text = "Human number:" + numHuman;
        otherGroupLabelArray[2].text = "Eidolon number:" + numEidolon;

        if (isResult)
        {
            if (numGodChild == 0)
            {
                GameResult(false);
            }
            if (numEidolon == 0 && numHuman == 0 && numOrc == 0 && numGodChild >= 1)
            {
                GameResult(true);
            }
        }
    }
    //在一定距离上寻找食物
    public Food SearchFoodWithDis(CellBug cellBug, float dis)
    {
        ArrayList foodList = new ArrayList();

        int powerFrom = Const.GeneArray[(int)Const.GenesEnum.PowerGetFromEnum].GetPowerGetFrom(cellBug);

        for (int i = 0; i < foodArrayList.Count; i++)
        {
            Food tempFood = foodArrayList[i] as Food;
            if (!tempFood.GetCanEat())
            {
                continue;
            }
            if (powerFrom == 0 && tempFood.GetFoodType() == Const.FoodEnum.MeatEnum)
            {
                continue;
            }
            if (powerFrom == 2 && tempFood.GetFoodType() == Const.FoodEnum.GrassEnum)
            {
                continue;
            }
            if (tempFood && Vector3.Magnitude(cellBug.transform.position - tempFood.transform.position) < dis)
            {
                foodList.Add(tempFood);
            }
        }

        if (foodList.Count != 0)
        {
            Food food = foodList[0] as Food;
            for (int m = 1; m < foodList.Count; m++)
            {
                Food tempFood = foodList[m] as Food;
                if (Vector3.Magnitude(cellBug.transform.position - tempFood.transform.position)
                    < Vector3.Magnitude(cellBug.transform.position - food.transform.position))
                {
                    food = tempFood;
                }
            }
            return(food);
        }
        return(null);
    }
Example #24
0
 private void CheckPower(CellBug cellBug)
 {
     //无所事事时
     if (cellBug.GetAbility().isArrive)
     {
         cellBug.Move(targetPosition);
     }
     if (SearchMate(cellBug))
     {
         return;
     }
     if (SearchFood(cellBug))
     {
         return;
     }
     if (SerarchEnemy(cellBug))
     {
         return;
     }
 }
Example #25
0
    public override float GetPowerCustom(CellBug cellBug)
    {
        Dna dna = cellBug.GetAbility().GetDna();
        int photosynthesisGeneTotal = dna.GetDnaIndex(Const.DnaLineEnum.OneEnum, Const.GenesEnum.PhotosynthesisEnum)
                                      + dna.GetDnaIndex(Const.DnaLineEnum.TwoEnum, Const.GenesEnum.PhotosynthesisEnum);

        if (photosynthesisGeneTotal == 0)
        {
            return(lowPowerCustom);
        }
        else if (photosynthesisGeneTotal == 1)
        {
            return(middlePowerCustom);
        }
        else if (photosynthesisGeneTotal == 2)
        {
            return(highPowerCustom);
        }
        return(lowPowerCustom);
    }
    //在一定距离上寻找敌人
    public CellBug SearchEnemyWithDis(CellBug cellBug, float dis)
    {
        ArrayList enemyBugList = new ArrayList();

        int powerFrom = Const.GeneArray[(int)Const.GenesEnum.PowerGetFromEnum].GetPowerGetFrom(cellBug);

        if (powerFrom == 0)
        {
            return(null);
        }

        for (int i = 0; i < cellBugAllList.Count; i++)
        {
            CellBug tempCellBug = cellBugAllList[i] as CellBug;
            if (cellBug.GetAbility().GetGroup() == tempCellBug.GetAbility().GetGroup())
            {
                continue;
            }
            if (tempCellBug && Vector3.Magnitude(cellBug.transform.position - tempCellBug.transform.position) < dis &&
                tempCellBug.GetAbility().GetPower() < cellBug.GetAbility().GetPower())
            {
                enemyBugList.Add(tempCellBug);
            }
        }

        if (enemyBugList.Count != 0)
        {
            CellBug enemy = enemyBugList[0] as CellBug;
            for (int m = 1; m < enemyBugList.Count; m++)
            {
                CellBug tempEnemy = enemyBugList[m] as CellBug;
                if (Vector3.Magnitude(cellBug.transform.position - tempEnemy.transform.position)
                    < Vector3.Magnitude(cellBug.transform.position - enemy.transform.position))
                {
                    enemy = tempEnemy;
                }
            }
            return(enemy);
        }
        return(null);
    }
Example #27
0
    public void UpdatePosition(CellBug cellBug)
    {
        if (!cellBug.GetAbility().isArrive)
        {
            Vector3 dir = cellBug.GetAbility().targetPos - cellBug.transform.position;
            dir = dir.normalized; dir.z = 0;

            float angle = Vector3.Angle(new Vector3(0, -1, 0), dir);
            if (dir.x < 0)
            {
                angle = 360 - angle;
            }
            cellBug.transform.eulerAngles = new Vector3(0, 0, Mathf.Lerp(cellBug.transform.eulerAngles.z, angle, Time.deltaTime * 10));

            cellBug.transform.position += dir * cellBug.GetAbility().GetSpeed() * Time.deltaTime;
            if (Vector3.Distance(cellBug.GetAbility().targetPos, cellBug.transform.position) <= 0.1f)
            {
                cellBug.GetAbility().isArrive = true;
            }
        }
    }
Example #28
0
    public override float GetPhotosynthesis(CellBug cellbug)
    {
        //需要访问dna
        Dna dna = cellbug.GetAbility().GetDna();
        int photosynthesisGeneTotal = dna.GetDnaIndex(Const.DnaLineEnum.OneEnum, Const.GenesEnum.PhotosynthesisEnum)
                                      + dna.GetDnaIndex(Const.DnaLineEnum.TwoEnum, Const.GenesEnum.PhotosynthesisEnum);

        if (photosynthesisGeneTotal == 0)
        {
            nowPhotosynthesis = lowPhotosynthesis;
        }
        else if (photosynthesisGeneTotal == 1)
        {
            nowPhotosynthesis = middlePhotosynthesis;
        }
        else if (photosynthesisGeneTotal == 2)
        {
            nowPhotosynthesis = highPhotosynthesis;
        }
        return(nowPhotosynthesis);
    }
Example #29
0
    public override int GetAttackForce(CellBug cellbug)
    {
        //需要访问dna
        Dna dna             = cellbug.GetAbility().GetDna();
        int attackGeneTotal = dna.GetDnaIndex(Const.DnaLineEnum.OneEnum, Const.GenesEnum.AttackForceEnum)
                              + dna.GetDnaIndex(Const.DnaLineEnum.TwoEnum, Const.GenesEnum.AttackForceEnum);

        if (attackGeneTotal == 0)
        {
            nowAttackForce = lowAttackForce;
        }
        else if (attackGeneTotal == 1)
        {
            nowAttackForce = middleAttackForce;
        }
        else if (attackGeneTotal == 2)
        {
            nowAttackForce = highAttackForce;
        }

        return(nowAttackForce);
    }
Example #30
0
    public override int GetBirthNum(CellBug cellbug)
    {
        //需要访问dna
        Dna dna = cellbug.GetAbility().GetDna();
        int birthNumGeneTotal = dna.GetDnaIndex(Const.DnaLineEnum.OneEnum, Const.GenesEnum.BrithNumEnum)
                                + dna.GetDnaIndex(Const.DnaLineEnum.TwoEnum, Const.GenesEnum.BrithNumEnum);

        if (birthNumGeneTotal == 0)
        {
            nowBirthNum = lowBirth;
        }
        else if (birthNumGeneTotal == 1)
        {
            nowBirthNum = middleBirth;
        }
        else if (birthNumGeneTotal == 2)
        {
            nowBirthNum = highBrith;
        }

        return(nowBirthNum);
    }