Ejemplo n.º 1
0
 /**
  * Shoots a rigidbody2D between nodes to attempt making a bridge.
  */
 public void TryConnection(ShootableNode node, ShootableNode targetNode, Vector3 direction)
 {
     rb.AddForce(direction.normalized * speed, ForceMode2D.Impulse);
     this.node       = node;
     this.direction  = direction;
     this.targetNode = targetNode;
 }
Ejemplo n.º 2
0
 // Use this for initialization
 void Start()
 {
     shootableNode              = transform.GetComponent <ShootableNode>();
     currentState               = NodeState.Off;
     selectedRenderer.enabled   = false;
     unselectedRenderer.enabled = false;
 }
Ejemplo n.º 3
0
 public void UnTagShootableEnemies()
 {
     for (int i = 0; i < shootableEnemies.Count; i++)
     {
         EnemyController ec   = shootableEnemies[i];
         MoveNode        node = ec.Mover.currentNode;
         ec.shootable = false;
         ShootableNode nodeController = node.transform.parent.GetComponentInChildren <ShootableNode>();
         nodeController.currentState = ShootableNode.NodeState.Off;
     }
     shootableEnemies.Clear();
 }
Ejemplo n.º 4
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;
         }
     }
 }
    /**
     * Creates a bridge between two platformNodes
     * @param offset    the midway point between the nodes
     * @param targetNode    the node which the player's "selected node" connects with
     */
    public void MakeBridgeConnection(Vector3 offset, ShootableNode targetNode)
    {
        GameObject go = Instantiate(NodeLinks.instance.platformPrefab, transform.position + (offset * 0.5f),
                                    Quaternion.identity);

        go.transform.right = offset;

        NodeBridge nodeBridge = go.GetComponent <NodeBridge>();
        float      xSize      = Vector3.Distance(transform.position, targetNode.transform.position);

        nodeBridge.spriteRenderer.size = new Vector2(xSize, nodeBridge.spriteRenderer.size.y);
        nodeBridge.boxCollider.size    = nodeBridge.spriteRenderer.size;

        nodeBridge.parentNodes[0] = this;
        nodeBridge.parentNodes[1] = targetNode;

        inUse            = true;
        targetNode.inUse = true;

        Player.instance.selectedNode = null;
    }
Ejemplo 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();
            }
        }
    }