Esempio n. 1
0
 public void UnTagMovableNodes()
 {
     for (int i = 0; i < movableNodes.Count; i++)
     {
         MoveNode    node           = movableNodes[i];
         MovableNode nodeController = node.transform.parent.GetComponentInChildren <MovableNode>();
         nodeController.currentState = MovableNode.NodeState.Off;
         node.movable = false;
     }
     movableNodes.Clear();
 }
Esempio n. 2
0
    public void TagMovableNodes()
    {
        movableNodes = new List <MoveNode>();
        MoveNode node = GetTargetNode(Direction.North, 1);

        if (node != null)
        {
            if (!node.blocksMovement)
            {
                node.movable = true;
                MovableNode nodeController = node.transform.parent.GetComponentInChildren <MovableNode>();
                nodeController.currentState = MovableNode.NodeState.MovableUnselected;
                movableNodes.Add(node);
            }
        }

        node = GetTargetNode(Direction.South, 1);
        if (node != null)
        {
            if (!node.blocksMovement)
            {
                node.movable = true;
                MovableNode nodeController = node.transform.parent.GetComponentInChildren <MovableNode>();
                nodeController.currentState = MovableNode.NodeState.MovableUnselected;
                movableNodes.Add(node);
            }
        }

        node = GetTargetNode(Direction.East, 1);
        if (node != null)
        {
            if (!node.blocksMovement)
            {
                node.movable = true;
                MovableNode nodeController = node.transform.parent.GetComponentInChildren <MovableNode>();
                nodeController.currentState = MovableNode.NodeState.MovableUnselected;
                movableNodes.Add(node);
            }
        }

        node = GetTargetNode(Direction.West, 1);
        if (node != null)
        {
            if (!node.blocksMovement)
            {
                node.movable = true;
                MovableNode nodeController = node.transform.parent.GetComponentInChildren <MovableNode>();
                nodeController.currentState = MovableNode.NodeState.MovableUnselected;
                movableNodes.Add(node);
            }
        }
    }
Esempio n. 3
0
 void LateUpdate()
 {
     //HACK I don't like this but i'm not sure where else to put it
     for (int i = 0; i < shootableEnemies.Count; i++)
     {
         EnemyController enemy         = shootableEnemies[i];
         MovableNode     movableNode   = enemy.Mover.currentNode.transform.parent.GetComponentInChildren <MovableNode>();
         ShootableNode   shootableNode = enemy.Mover.currentNode.transform.parent.GetComponentInChildren <ShootableNode>();
         if (movableNode.currentState == MovableNode.NodeState.MovableSelected)
         {
             movableNode.currentState = MovableNode.NodeState.MeleeableSelected;
         }
         else if (movableNode.currentState == MovableNode.NodeState.MovableUnselected)
         {
             movableNode.currentState = MovableNode.NodeState.MeleeableUnselected;
         }
     }
 }
Esempio n. 4
0
	public void SetSubnode(MovableNode node) {
		Reset ();
		subNode = node;
		subNode.SetPosition (transform.position);
	}
Esempio n. 5
0
	public void ClearSubnode() {
		subNode = null;
	}
Esempio n. 6
0
    // Update is called once per frame
    void Update()
    {
        //TODO This is f*****g awful spaghetti code and I hate it

        //crosshairPos = Crosshair.GetCrosshairInWorld();

        if (PlayerController.pc.CurrentTurn.CurrentPhase == Turn.Phase.Player && Time.timeScale > 0)
        {
            //INPUT PHASE
            //TODO track time between inputs, only allow input every half second or so
            if (allowInput && !PlayerController.pc.acting)
            {
                if (!nodesTagged)
                {
                    PlayerController.pc.Mover.TagMovableNodes();
                    PlayerController.pc.Shooter.TagShootableEnemies();
                    nodesTagged = true;
                }


                for (int i = 0; i < PlayerController.pc.Shooter.shootableEnemies.Count; i++)
                {
                    EnemyController enemy         = PlayerController.pc.Shooter.shootableEnemies [i];
                    ShootableNode   shootableNode = enemy.Mover.currentNode.transform.parent.GetComponentInChildren <ShootableNode> ();
                    if (!PlayerController.pc.Shooter.CheckMeleeRange(enemy.transform))
                    {
                        shootableNode.currentState = ShootableNode.NodeState.ShootableUnselected;
                    }
                }

                //mouse over node or enemy
                //create layerMask = test enemies and world layer
                int       enemyLayer = 10;
                int       worldLayer = 11;
                int       layerMask  = 1 << enemyLayer | 1 << worldLayer;
                Transform target     = GetTargetOfClick(layerMask);
                if (target != null)
                {
                    if (target.tag == "WorldBlock")
                    {
                        //no selected block, select new block
                        if (selectedBlock == null)
                        {
                            MoveNode node = target.GetComponentInChildren <MoveNode> ();
                            if (node.movable)
                            {
                                selectedBlock = target;
                                MovableNode nodeController = target.GetComponentInChildren <MovableNode> ();
                                nodeController.currentState = MovableNode.NodeState.MovableSelected;
                            }
                            //mouse over new block
                        }
                        else if (target != selectedBlock)
                        {
                            //unselect previous block
                            MovableNode previousNode = selectedBlock.GetComponentInChildren <MovableNode> ();
                            previousNode.currentState = MovableNode.NodeState.MovableUnselected;
                            selectedBlock             = null;
                            //select new block
                            MoveNode node = target.GetComponentInChildren <MoveNode> ();
                            if (node.movable)
                            {
                                selectedBlock = target;
                                MovableNode nodeController = target.GetComponentInChildren <MovableNode> ();
                                nodeController.currentState = MovableNode.NodeState.MovableSelected;
                            }
                        }
                    }
                    else
                    {
                        //not a block, unselect previous block
                        //MovableNode previousNode = target.GetComponentInChildren<MovableNode>();
                        //previousNode.currentState = MovableNode.NodeState.MovableUnselected;

                        if (target.tag == "Enemy")
                        {
                            if (PlayerController.pc.Shooter.CheckMeleeRange(target))
                            {
                                EnemyController enemy = target.GetComponent <EnemyController> ();
                                MovableNode     node  =
                                    enemy.Mover.currentNode.transform.parent
                                    .GetComponentInChildren <MovableNode> ();
                                node.currentState = MovableNode.NodeState.MeleeableSelected;
                            }
                            else
                            {
                                EnemyController enemy = target.GetComponent <EnemyController> ();
                                if (enemy.shootable)
                                {
                                    ShootableNode node =
                                        enemy.Mover.currentNode.transform.parent
                                        .GetComponentInChildren <ShootableNode> ();
                                    node.currentState = ShootableNode.NodeState.ShootableSelected;
                                }
                            }
                        }
                    }
                }
                else if (target == null)
                {
                    MovableNode previousNode = selectedBlock.GetComponentInChildren <MovableNode> ();
                    previousNode.currentState = MovableNode.NodeState.MovableUnselected;
                    selectedBlock             = null;
                }

                if (Input.GetMouseButtonDown(0))
                {
                    selectedBlock = null;
                    PlayerController.pc.Mover.UnTagMovableNodes();
                    PlayerController.pc.Shooter.UnTagShootableEnemies();
                    nodesTagged = false;

                    // create layerMask = test enemies and world layer
                    enemyLayer = 10;
                    worldLayer = 11;
                    layerMask  = 1 << enemyLayer | 1 << worldLayer;
                    target     = GetTargetOfClick(layerMask);
                    Debug.Log("MouseUp - Target = " + target);
                    if (target != null)
                    {
                        if (target.tag == "Enemy" && PlayerController.pc.Shooter.CheckValidTarget(target))
                        {
                            PlayerController.pc.acting = true;
                            allowInput = false;
                            PlayerController.pc.Shooter.BeginShot(target);
                        }
                        else if (target.tag == "WorldBlock")
                        {
                            Direction?dir = PlayerController.pc.Mover.GetTargetDirection(target.Find("MoveNode").GetComponent <MoveNode> ());
                            if (dir != null)
                            {
                                PlayerController.pc.acting = true;
                                allowInput = false;
                                Direction moveDir = (Direction)dir;
                                PlayerController.pc.Mover.Move(moveDir, 1);
                            }
                        }
                    }
                }

                //END OF TURN
            }
            else if (!allowInput && !PlayerController.pc.acting)
            {
                PlayerController.pc.EndPhase();
            }
        }
    }