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(); }
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); } } }
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; } } }
public void SetSubnode(MovableNode node) { Reset (); subNode = node; subNode.SetPosition (transform.position); }
public void ClearSubnode() { subNode = null; }
// 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(); } } }