public static bool TryToChangeState(Beans player) { // 到達可能な Obstacle を目指す var obstacles = GameObject.FindGameObjectsWithTag("Obstacle") .ToList(); var reachables = new List <GameObject>(); foreach (var obstacle in obstacles) { var hit = new UnityEngine.AI.NavMeshHit(); bool ret = player.Agent.Raycast(obstacle.transform.position, out hit); var diff = (hit.position - obstacle.transform.position); diff.y = 0.0f; if (diff.magnitude <= 1.0f) { reachables.Add(obstacle); } } if (reachables.Any()) { var target = obstacles[UnityEngine.Random.Range(0, reachables.Count)]; StateToObstacle.ChangeState(player, target); return(true); } return(false); }
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 static bool TryToChangeState(Beans player) { // 到達可能なWaterBallを目指す var waters = GameObject.FindGameObjectsWithTag("Item") .Where(x => x.GetComponent <WaterBall>().Parent == null) .Where(x => player.IsReachable(x.transform.position)) .ToArray(); if (waters.Any()) { var target = waters[UnityEngine.Random.Range(0, waters.Length)]; StateToWaterBall.ChangeState(player, target); return(true); } return(false); }
private StateToWaterBall(Beans player, GameObject waterBall) { this.player = player; this.targetWaterBall = waterBall; }
public static void ChangeState(Beans player, GameObject waterBall) { player.ChangeState(new StateToWaterBall(player, waterBall)); }
private StateUseWater(Beans player, GameObject targetCell) { this.player = player; this.targetCell = targetCell; }
public static void ChangeState(Beans player, GameObject targetCell) { player.ChangeState(new StateUseWater(player, targetCell)); }
private StateToObstacle(Beans player, GameObject target) { this.player = player; this.targetObstacle = target; }
public static void ChangeState(Beans player, GameObject target) { player.ChangeState(new StateToObstacle(player, target)); }
public void Update() { if (Input.GetMouseButtonDown(TouchManager.MouseLeft())) { RaycastHit hit = new RaycastHit(); bool ret = Physics.Raycast( Camera.main.ScreenPointToRay(Input.mousePosition), out hit, 100.0f ); if (!ret) { return; } if (hit.collider.gameObject.CompareTag("Item")) { var waterBall = hit.collider.gameObject.GetComponent <WaterBall>(); if (waterBall.Parent != null) { return; } var signal = Player.Signal.ToWaterBall; var players = Player.Manager.AllPlayer() .Where(x => x.CanReceiveSignal(signal)) .Where(x => x.IsReachable(waterBall.transform.position)) .ToArray(); if (!players.Any()) { return; } players.First().ReceiveSignal(signal, waterBall.gameObject); } else if (hit.collider.gameObject.CompareTag("Obstacle")) { var signal = Player.Signal.ToObstacle; var players = Player.Manager.AllPlayer() .Where(x => x.CanReceiveSignal(signal)) //.Where(x => x.IsReachable(obstacle)) .ToArray(); if (!players.Any()) { return; } players.First().ReceiveSignal(signal, hit.collider.gameObject); } else if (hit.collider.gameObject.CompareTag("Cell")) { var cell = hit.collider.gameObject.GetComponent <Field.Cell>(); if (cell.kind != Field.Cell.Kind.Farm) { return; } var signal = Player.Signal.ToFarm; var players = Player.Manager.AllPlayer() .Where(x => x.CanReceiveSignal(signal)) .Where(x => x.IsReachable(cell.transform.position)) .ToArray(); if (!players.Any()) { return; } Player.Beans player = players.First(); float min = 10000.0f; foreach (var p in players) { float dist = Vector3.Distance(p.transform.position, cell.transform.position); if (dist < min) { min = dist; player = p; } } player.ReceiveSignal(signal, cell.gameObject); } } }
private StateWait(Beans player) { this.player = player; }
public static void ChangeState(Beans player) { player.ChangeState(new StateWait(player)); }