public override void RankingUpdate() { // enemysにエネミーのデータを入れる List <Vector2> scale = new List <Vector2>(); // エネミー一体一体の大きさを個別に保存 foreach (var enemy in GameObjectManager.FindAll(CharacterID.Enemy)) { scale.Add(enemy.transform.Scale); } // スケールでソート var scaleVar = scale.OrderByDescending(s => s.X).ToList(); // Rankingの初期値はエネミーの数 playerRank = scaleVar.Count; // プレイヤーのランクを決定 for (int enemyNumber = 0; enemyNumber < scaleVar.Count; enemyNumber++) { // プレイヤー全体の大きさが今調べているエネミーの大きさよりも大きかったら if ((CompVector2.SumScale(CharacterID.Player).X > scaleVar[enemyNumber].X)) { // 現在調べているエネミーのナンバーをプレイヤーに入れる playerRank = enemyNumber; // それ以降は処理しない break; } } }
private void PlayerNullCheck() { if (GameObjectManager.FindAll(CharacterID.Player).Count == 0) { GameObjectManager.Clear(); isEnd = true; } }
/// <summary> /// プレイヤーがスペースキーを押したときに分裂する処理 /// </summary> protected void Division(ref Vector2 futureScale, ref Vector2 currentScale, Vector2 position) { // スペースが押されたら && 大きさが2以上 if (input.IsKeyDown(Keys.Space) && currentScale.X > 2f && GameObjectManager.FindAll(CharacterID.Player).Count < 8) { // 分裂すると大きさが半分になる currentScale /= 2; futureScale /= 2; // 大きさが1を下回ったら1を代入(大きさが1より下に行かないように) if (currentScale.X < 1f) { currentScale = new Vector2(1f); futureScale = currentScale; } GameObjectManager.Add(new DivisionPlayer(currentScale, radius, Speed(speed, currentScale.X), position, gameManager)); } }
/// <summary> /// 餌を見つける /// </summary> private void FindFood() { List <Vector2> FoodPos = new List <Vector2>(); // 餌を入れる foreach (GameObject food in GameObjectManager.FindAll(CharacterID.Food)) { // 餌と自分との距離が301ドット以上離れているならリストに入れない(軽くするため、、、たぶん軽くなるはず) if (Vector2.Distance(food.transform.Position, transform.Position + CompVector2.ScaleConversion(scale, radius)) >= 301f) { continue; } // 餌の座標を個別に保存する FoodPos.Add(food.transform.Position); } if (FoodPos.Count != 0) { // ソート(バグあり) FoodPos = FoodPos.OrderBy(o => CompVector2.MinVector2(transform.Position, o.X, o.Y)).ToList(); // 見つけた餌の座標の自分から一番近いところを入れる findFoodPos = FoodPos[0]; // 餌との距離が0ドット未満になったら中をクリアする if (Vector2.Distance(transform.Position, FoodPos[0]) < 0) { FoodPos.RemoveAt(0); } } // 近くに餌があったら食べに行く if (FoodPos.Count != 0) { mode = EnemyMoveMode.EatMove; } }