private bool MoveCharacter(Character activeChar, List <Character> myChars, Player enemyPlayer) { if (activeChar == null) { return(false); } List <Character> enemyChars = new List <Character>(enemyPlayer.characters.Values); GameState gameState = new GameState(myChars, enemyChars, htc.FindHex(activeChar.gameCharacter.position), activeChar); MiniAction miniAction = Search.DecideAction(gameState, htc); //Debug.Log(character.name+" will "+miniAction.type); switch (miniAction.type) { case "Move": HexTile startTile = htc.FindHex(activeChar.gameCharacter.position); MiniMove move = miniAction as MiniMove; List <int> path = Search.GreedySearch(startTile, move.Dest, htc); //Path ends on the tile you want to move to List <Vector3> moves = new List <Vector3>(); if (path.Count > 0) { moves.Add(startTile.nexts[path[0]].Position); for (int i = 1; i < path.Count; i++) { int neighbor = path[i]; moves.Add(htc.FindHex(moves[i - 1]).nexts[path[i]].Position); } } else { moves.Add(activeChar.gameCharacter.position); } //Debug.Log(activeChar.name+" is Moving to " + moves[moves.Count - 1]); //Action a = MoveActionFactory.getInstance().CreateAction(character, moves[moves.Count-1]); Action m = MoveActionFactory.getInstance().CreateAction(activeChar, moves.ToArray()); GameSystem.CurrentGame().ExecuteCharacterAction(player, m); //StartCoroutine(Move(character.gameCharacter.gameObject, path, 0.5f)); break; case "Attack": MiniAttack attack = miniAction as MiniAttack; Action a = AttackActionFactory.GetInstance().CreateAction(activeChar, attack.toAttack.gameCharacter.position); GameSystem.CurrentGame().ExecuteCharacterAction(player, a); break; case "AOEAttack": MiniAttack aoeAttack = miniAction as MiniAttack; Action aoeA = AttackActionFactory.GetInstance().CreateAction(activeChar, aoeAttack.attackLocation); GameSystem.CurrentGame().ExecuteCharacterAction(player, aoeA); break; } return(true); }
// Update is called once per frame void Update() { if (player.name.Equals(GameSystem.CurrentGame().WhosTurn().name) && GameSystem.CurrentGame().GameState == TerminalGameState.PLAYING) { if (!started) { StartCoroutine(MoveAllCharacters()); } } }
public bool Execute() { if (false) { //check if the agent can move to the desired tile //is there already something there? //is it in the characters move range return(false);//dont execute the move if these are true } takenby.ActionTakenThisTurn = true; GameSystem.CurrentGame().monoref.StartCoroutine(MoveTo(moveto)); return(true); }
void Attack() { HexTile attackedtile = htc.FindHex(space); //parker takenby.gameCharacter.GetComponent <Agent>().SpawnProjectile(attackedtile.Position); if (takenby.characterclass.Equals(CharacterClass.HACKER)) { //deals AOE ///2 is hard coded, in future replace with a character class variable List <Character> inarea = GetAllInAOERange(attackedtile, takenby.stats.aoeRange); foreach (Character c in inarea) { //c.stats.health += damage; c.gameCharacter.GetComponent <Agent>().Health(damage); Debug.Log(c.name + " takes " + damage); foreach (Player p in GameSystem.CurrentGame().Players()) { if (GameSystem.CurrentGame().CheckDeath(c, p)) { htc.FindHex(c.gameCharacter.position).SetObject(null, false); } } } } // else // {//deal damage to single object if (attackedtile.HoldingObject != null) { Agent totakedamage = attackedtile.HoldingObject.GetComponent <Agent>(); if (totakedamage != null) { totakedamage.Health(damage); Debug.Log(totakedamage.character.name + " takes " + damage); foreach (Player p in GameSystem.CurrentGame().Players()) { if (GameSystem.CurrentGame().CheckDeath(totakedamage.character, p)) { htc.FindHex(totakedamage.character.gameCharacter.position).SetObject(null, false); } } } } // } }
// public void AddActionTo(Player p , Action a) { // //put the action into the players list of actions // // gameSystem.AddCharacterAction(); // } //get rid of this public void RandomlyPlace() { HexTileController htc = GameObject.Find("TileController").GetComponent <HexTileController>(); Debug.Log(htc.Head.Position); // hexTileController.FindHex(mousePos, hexTile); int totalcharactercount = GameSystem.CurrentGame().PlayerCount() * classes.Length; HashSet <HexTile> tiles = new HashSet <HexTile>(); while (tiles.Count < totalcharactercount) { try{ tiles.Add( htc.FindHex(new Vector3( UnityEngine.Random.Range(-10f, 10f), UnityEngine.Random.Range(-10f, 10), 0f) ) ); } catch (Exception e) {} } HexTile[] tilearray = new HexTile[totalcharactercount]; tiles.CopyTo(tilearray); int cc = 0; foreach (Player p in GameSystem.CurrentGame().Players()) { foreach (Character c in p.characters.Values) { Agent a = c.gameCharacter.GetComponent <Agent>(); // c.gameCharacter.position //update character ref a.currentlyOn = tilearray[cc]; a.transform.position = tilearray[cc].transform.position; //update tile ref tilearray[cc].SetObject(c.gameCharacter.gameObject, false); cc++; } } }
private IEnumerator MoveAllCharacters() { started = true; //If it is my turn, I am players[0] and the enemy is players[1] Player enemyPlayer = GameSystem.CurrentGame().Players()[1]; List <Character> myChars = new List <Character>(player.characters.Values); yield return(new WaitForSecondsRealtime(0.5f)); //Move Charatcers in order of Melee, Hacker, sniper, psyonic // *** Melee *** Character activeChar = GetChar(myChars, CharacterClass.MELEE); if (activeChar != null) { activeChar.SetSelected(true); yield return(new WaitForSecondsRealtime(0.5f)); MoveCharacter(activeChar, myChars, enemyPlayer); yield return(new WaitForSecondsRealtime(0.5f)); activeChar.SetSelected(false); } // *** Hacker *** enemyPlayer = GameSystem.CurrentGame().Players()[1]; myChars = new List <Character>(player.characters.Values); activeChar = GetChar(myChars, CharacterClass.HACKER); if (activeChar != null) { activeChar.SetSelected(true); yield return(new WaitForSecondsRealtime(0.5f)); MoveCharacter(activeChar, myChars, enemyPlayer); yield return(new WaitForSecondsRealtime(0.5f)); activeChar.SetSelected(false); } // *** Sniper *** enemyPlayer = GameSystem.CurrentGame().Players()[1]; myChars = new List <Character>(player.characters.Values); activeChar = GetChar(myChars, CharacterClass.RANGED); if (activeChar != null) { activeChar.SetSelected(true); yield return(new WaitForSecondsRealtime(0.5f)); MoveCharacter(activeChar, myChars, enemyPlayer); yield return(new WaitForSecondsRealtime(0.5f)); activeChar.SetSelected(false); } // *** Psyonic *** enemyPlayer = GameSystem.CurrentGame().Players()[1]; myChars = new List <Character>(player.characters.Values); activeChar = GetChar(myChars, CharacterClass.PSYONIC); if (activeChar != null) { activeChar.SetSelected(true); yield return(new WaitForSecondsRealtime(0.5f)); MoveCharacter(activeChar, myChars, enemyPlayer); yield return(new WaitForSecondsRealtime(0.5f)); activeChar.SetSelected(false); } //End the AI's turn EndMyTurn(); started = false; }
public void EndMyTurn() { GameSystem.CurrentGame().EndTurn(player); }
//filler code for now public void PutCharactersOnBoard() { GameObject tc = GameObject.Find("TileController"); foreach (Player p in gameSystem.Players()) { foreach (Character c in p.characters.Values) { //Debug.Log(c.name); //game is ready, show characters SpriteRenderer r = c.gameCharacter.gameObject.GetComponent <SpriteRenderer>(); r.enabled = true; r.sortingLayerName = "Characters"; } } //GameObject.Find("Start").SetActive(false); //RandomlyPlace(); HexTileController htc = GameObject.Find("TileController").GetComponent <HexTileController>(); Player player1 = GameSystem.CurrentGame().Players()[0]; int index = 0; foreach (Character c in player1.characters.Values) { Agent a = c.gameCharacter.GetComponent <Agent>(); // c.gameCharacter.position //update character ref HexTile hex = htc.FindHex(player1_chars[index]); a.currentlyOn = hex; a.transform.position = player1_chars[index]; //update tile ref hex.SetObject(c.gameCharacter.gameObject, false); index++; //Add highlight to players Instantiate(playerHighlight, c.gameCharacter); GameObject temp = Instantiate(selectHighlight, c.gameCharacter); c.selectedHighlight = temp; c.SetSelected(false); } Player player2 = GameSystem.CurrentGame().Players()[1]; index = 0; foreach (Character c in player2.characters.Values) { Agent a = c.gameCharacter.GetComponent <Agent>(); // c.gameCharacter.pte character ref HexTile hex = htc.FindHex(player2_chars[index]); a.currentlyOn = hex; a.transform.position = player2_chars[index]; //update tile ref hex.SetObject(c.gameCharacter.gameObject, false); index++; //Add highlight to enemies Instantiate(enemyHighlight, c.gameCharacter); GameObject temp = Instantiate(selectHighlight, c.gameCharacter); c.selectedHighlight = temp; c.SetSelected(false); } }