コード例 #1
0
        public override void Update(ActionSelectorSM self)
        {
            var mesh = self.selectionCircleMesh;

            var enemiesInRange = GameTickManager.Instance.activeEnemies.Where(
                e => Astar.CalculateHeuristic(e.GridPosition, PlayerActor.Instance.GridPosition)
                < PlayerActor.Instance.stats.currentStats.awareness).ToList();

            var   ray = Camera.main.ScreenPointToRay(Input.mousePosition);
            float enter;

            if (!plane.Raycast(ray, out enter))
            {
                return;
            }

            var field = new NVector2(GridUtil.WorldToGrid(ray.GetPoint(enter)));

            int?is_valid = null;

            for (var i = 0; i < enemiesInRange.Count; ++i)
            {
                if (enemiesInRange[i].GridPosition == field)
                {
                    is_valid = i;
                    Graphics.DrawMesh(mesh,
                                      Matrix4x4.Translate(enemiesInRange[i].transform.position), self.selectionCircleMaterial, 0, Camera.current, 0, activeCircle);
                }
                else
                {
                    Graphics.DrawMesh(mesh,
                                      Matrix4x4.Translate(enemiesInRange[i].transform.position), self.selectionCircleMaterial, 0, Camera.current, 0);
                }
            }

            if (Input.GetMouseButtonDown(0) && is_valid != null)
            {
                var enemy          = enemiesInRange[(int)is_valid];
                var selectedAction = new AttackAction(PlayerActor.Instance.gameObject, enemy.gameObject, enemy.attackPrefab, 1);
                onActionSelectedObservable.OnNext(selectedAction);
            }
        }