Exemple #1
0
        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);
        }
Exemple #2
0
        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));
 }
Exemple #6
0
 private StateUseWater(Beans player, GameObject targetCell)
 {
     this.player     = player;
     this.targetCell = targetCell;
 }
Exemple #7
0
 public static void ChangeState(Beans player, GameObject targetCell)
 {
     player.ChangeState(new StateUseWater(player, targetCell));
 }
Exemple #8
0
 private StateToObstacle(Beans player, GameObject target)
 {
     this.player         = player;
     this.targetObstacle = target;
 }
Exemple #9
0
 public static void ChangeState(Beans player, GameObject target)
 {
     player.ChangeState(new StateToObstacle(player, target));
 }
Exemple #10
0
    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);
            }
        }
    }
Exemple #11
0
 private StateWait(Beans player)
 {
     this.player = player;
 }
Exemple #12
0
 public static void ChangeState(Beans player)
 {
     player.ChangeState(new StateWait(player));
 }