public static bool TryToChangeState(Beans player) { // 移動可能な畑を目指す var farms = Field.FieldManager.AllFarms() .Where(x => player.IsReachable(x.transform.position)) .ToArray(); if (farms.Any()) { var targetCell = farms[UnityEngine.Random.Range(0, farms.Length)]; StateToCell.ChangeState(player, targetCell); return(true); } return(false); }
public void OnReceiveSignal(Signal signal, GameObject gameObject) { switch (signal) { case Signal.ToFarm: Debug.Assert(player.hasWaterBall()); StateToCell.ChangeState(player, gameObject); return; case Signal.ToObstacle: StateToObstacle.ChangeState(player, gameObject); return; case Signal.ToWaterBall: StateToWaterBall.ChangeState(player, gameObject); return; default: throw new NotImplementedException(); } }
private IEnumerator wait() { while (true) { yield return(new WaitForSeconds(1)); if (player.hasWaterBall()) { if (StateToCell.TryToChangeState(player)) { yield break; } } else { bool toObstacle = (0.8f <= UnityEngine.Random.Range(0.0f, 1.0f)); if (toObstacle) { // 障害物の破壊へ if (StateToObstacle.TryToChangeState(player)) { yield break; } if (StateToWaterBall.TryToChangeState(player)) { yield break; } } else { // 水分取得へ if (StateToWaterBall.TryToChangeState(player)) { yield break; } } } } }