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) + "%"; } }
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)); }
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); }
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); }
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()); }
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); }
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); }
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); }
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(); }
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); }
//遭到攻击 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); }
private void CheckPower(CellBug cellBug) { //无所事事时 if (cellBug.GetAbility().isArrive) { cellBug.Move(targetPosition); } if (SearchMate(cellBug)) { return; } if (SearchFood(cellBug)) { return; } if (SerarchEnemy(cellBug)) { return; } }
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); }
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; } } }
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); }
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); }
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); }