public override void TileAction() { Game_Controller controller = Game_Controller.controller; //create a path from the jumpTo, then tell the player to enact it. Then do basic tile stuff. List <Node> mover = new List <Node>(); mover.Add(controller.GetNodeFromWorldPos(jumpTo.transform.position)); thisTile.node.occupant.MoveTo(mover); base.TileAction(); }
//used to kill the character public void Die() { //report to the game ui, then turn the player red. UIController.controller.AddTextToContainerQueue("Character '" + gameObject.name + "' has died"); GetComponentInChildren <Renderer>().material.color = new Color(1, 0, 0, 0.25f); //tell the node there is no more character, and remove ally from tracking list. Finally, destroy this script Game_Controller c = Game_Controller.controller; c.SetNodeOccupant(c.GetNodeFromWorldPos(transform.position), null); c.allAllies.Remove(this); Destroy(this); }
//Enemy turn logic. IEnumerator DoTurnEnemy() { //print("enemy turn"); if (type == EnemyType.Pursuit) { //Find the closest target on the opposite faction. Doesnt really do much now, but its support for when i put in multiple players. Character target = GetClosestPlayer(); //If it can see the player, or it has seen the player on a previous turn... if (CanSeeTarget(target) || hasSeenPlayer) { //Get distance to player.If dist is less than attack dist, attack. hasSeenPlayer = true; int dist = GetDistance(controller.GetNodeFromWorldPos(transform.position), controller.GetNodeFromWorldPos(target.transform.position)); if (dist < attackDist) { target.Damage(attackDamage, this); } else { //If distance is greate, move to target. Refer to base character notes for this. currentTile.node.occupant = null; List <Node> path = controller.GeneratePath(controller.GetNodeFromWorldPos(transform.position), controller.GetNodeFromWorldPos(target.transform.position)); if (path != null) { if (!crouching) { if (path.Count >= movePoints) { List <Node> pathRange = path.GetRange(0, movePoints); MoveTo(pathRange); yield return(new WaitForSeconds((1 / movementSpeed) * pathRange.Count)); } else { List <Node> pathRange = path.GetRange(0, path.Count); MoveTo(pathRange); yield return(new WaitForSeconds((1 / movementSpeed) * pathRange.Count)); } } else { if (path.Count >= crouchMovePoints) { List <Node> pathRange = path.GetRange(0, crouchMovePoints); MoveTo(pathRange); yield return(new WaitForSeconds((1 / movementSpeed) * pathRange.Count)); } else { List <Node> pathRange = path.GetRange(0, path.Count); MoveTo(pathRange); yield return(new WaitForSeconds((1 / movementSpeed) * pathRange.Count)); } } } else { nullCounter++; if (nullCounter > 3) { nullCounter = 0; transform.position = Game_Controller.controller.GetNodeFromWorldPos(transform.position).position; } } } } yield return(new WaitForSeconds(0.1f)); } //If the enemy is a sniper, do a simple "can i shoot player. Yes? Cool, im shooting player" else if (type == EnemyType.Sniper) { Character target = GetClosestPlayer(); if (CanSeeTarget(target) || hasSeenPlayer) { hasSeenPlayer = true; int dist = GetDistance(controller.GetNodeFromWorldPos(transform.position), controller.GetNodeFromWorldPos(target.transform.position)); //print("currentDist: " + dist + " attachDist: " + attackDist); if (dist < attackDist) { target.Damage(100, this); } } yield return(new WaitForSeconds(0.1f)); } turnFinished = true; yield break; }