コード例 #1
0
ファイル: AIMover.cs プロジェクト: sgw-dev/neuromancer
    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);
    }
コード例 #2
0
ファイル: AIMover.cs プロジェクト: sgw-dev/neuromancer
 // 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());
         }
     }
 }
コード例 #3
0
ファイル: MoveAction.cs プロジェクト: sgw-dev/neuromancer
    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);
    }
コード例 #4
0
ファイル: AttackAction.cs プロジェクト: sgw-dev/neuromancer
    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);
                    }
                }
            }
        }
        // }
    }
コード例 #5
0
    // 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++;
            }
        }
    }
コード例 #6
0
ファイル: AIMover.cs プロジェクト: sgw-dev/neuromancer
    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;
    }
コード例 #7
0
ファイル: AIMover.cs プロジェクト: sgw-dev/neuromancer
 public void EndMyTurn()
 {
     GameSystem.CurrentGame().EndTurn(player);
 }
コード例 #8
0
    //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);
        }
    }