// gets incomplete teams in the gamestate tracker and puts in a bot
    // only to be called by master client
    public void FillIncompleteTeamsWithBots()
    {
        if (PhotonNetwork.IsMasterClient)
        {
            // foreach team in the gamestate tracker, check that valid ids exist for driver and gunner
            // if ids are 0 (ie not valid) then create a bot
            for (int i = 0; i < gamestateTracker.teams.count; i++)
            {
                TeamEntry teamEntry = gamestateTracker.teams.GetAtIndex(i);

                // add driver bot
                if (teamEntry.driverId == 0)
                {
                    PlayerEntry bot = gamestateTracker.players.Create(true, true);
                    bot.ready  = true;
                    bot.role   = (short)PlayerEntry.Role.Driver;
                    bot.isBot  = true;
                    bot.name   = "Bot " + -bot.id;
                    bot.teamId = (short)teamEntry.id;
                    bot.Commit();

                    // now add the entry to the team
                    teamEntry.driverId = bot.id;
                    teamEntry.Commit();
                }
                else
                {
                    teamEntry.Release();
                }

                teamEntry = gamestateTracker.teams.GetAtIndex(i);

                // add gunner bot
                if (teamEntry.gunnerId == 0)
                {
                    PlayerEntry bot = gamestateTracker.players.Create(true, true);
                    bot.ready  = true;
                    bot.role   = (short)PlayerEntry.Role.Gunner;
                    bot.isBot  = true;
                    bot.name   = "Bot " + -bot.id;
                    bot.teamId = (short)teamEntry.id;
                    bot.Commit();

                    // now add the entry to the team
                    teamEntry.gunnerId = bot.id;
                    teamEntry.Commit();
                }
                else
                {
                    teamEntry.Release();
                }
            }
        }
    }
示例#2
0
    public void GamestateApplyTeamPacketErrorCallbackTest()
    {
        short actorNumber = 1;
        GamestateCommitTestHelper <TeamEntry> testHelper = new GamestateCommitTestHelper <TeamEntry>(actorNumber);
        GamestateTable <TeamEntry>            teams      = testHelper.TestTable(GamestateTracker.Table.Teams);
        GamestateRandomTestingUnit            generator  = new GamestateRandomTestingUnit(777);

        for (short i = 0; i < 100; i++)
        {
            TeamEntry teamEntry = teams.Create(i);
            generator.RandomiseTeamEntry(teamEntry);

            GamestatePacket packet = GamestatePacketManager.GetPacket();

            bool errorCallbackCalled = false;

            teamEntry.Commit((TeamEntry entry, bool succeeded) => {
                Assert.That(succeeded, Is.EqualTo(true));
                GamestateAssertionUnit.AssertPacketApplied(entry, packet);
                entry.Release();
                errorCallbackCalled = true;
            });

            packet = testHelper.commitedPackets[0];
            testHelper.Apply(packet);

            Assert.That(errorCallbackCalled, Is.EqualTo(true));

            testHelper.commitedPackets.Clear();
        }
    }
    //  USED
    public void LockSelectedVehicle()
    {
        SetButtonsInteractable(false);
        TeamEntry teamEntry = gamestateTracker.teams.Get(ourTeamId);

        teamEntry.vehicle            = currentVehicleId;
        teamEntry.hasSelectedVehicle = true;
        teamEntry.Commit();
    }
示例#4
0
    void Spawn(int teamId)
    {
        GamestateTracker gamestateTracker = FindObjectOfType <GamestateTracker>();
        TeamEntry        teamEntry        = gamestateTracker.teams.Get((short)teamId);
        bool             selected         = teamEntry.hasSelectedVehicle;

        teamEntry.isDead = false;
        short vehicle = teamEntry.vehicle;

        teamEntry.Commit(RespawnErrorHandler);

        Transform sp;

        if (teamId > spawnPoints.Count)
        {
            sp = spawnPoints[0];
        }
        else
        {
            sp = spawnPoints[teamId - 1];
        }

        List <string> vehicleNames = gamestateTracker.GetComponent <GamestateVehicleLookup>().sortedVehicleNames;

        string vehiclePrefabName;

        if (selected)
        {
            vehiclePrefabName = "VehiclePrefabs/" + vehicleNames[vehicle];
        }
        else
        {
            int randomVehicleNumber = Random.Range(0, defaultPlayerVehiclePrefabNames.Count);
            vehiclePrefabName = defaultPlayerVehiclePrefabNames[randomVehicleNumber];
            TeamEntry teamEntryAgain = gamestateTracker.teams.Get((short)teamId);
            teamEntryAgain.vehicle            = (short)randomVehicleNumber;
            teamEntryAgain.hasSelectedVehicle = true;
            teamEntryAgain.Commit();
        }

        object[] instantiationData = new object[] { teamId };

        //Put strong brakes on for spawn
        var spawnedVehicle = PhotonNetwork.Instantiate(vehiclePrefabName, sp.position, sp.rotation, 0, instantiationData);

        /*
         * PhysXWheelCollider[] wheelColliders = spawnedVehicle.GetComponentsInChildren<PhysXWheelCollider>();
         * foreach (PhysXWheelCollider wc in wheelColliders) {
         *  wc.brakeTorque = 10000;
         * }*/
    }
示例#5
0
 public void RespawnErrorHandler(TeamEntry teamEntry, bool succeeded)
 {
     if (teamEntry != null)
     {
         if (!succeeded && teamEntry.isDead)
         {
             teamEntry.isDead = false;
             teamEntry.Commit(RespawnErrorHandler);
         }
         else
         {
             teamEntry.Release();
         }
     }
 }
    // called by the lobby button master when we create a team
    public void CreateTeamEntry()
    {
        lobbySlotMaster  = FindObjectOfType <LobbySlotMaster>();
        gamestateTracker = FindObjectOfType <GamestateTracker>();


        // new gamestate tracker register team
        TeamEntry teamEntry = gamestateTracker.teams.Create(true, false);

        // add a listener to team record
        //  TeamEntry teamEntry = gamestateTracker.teams.Get((short)teamId);


        teamEntry.Commit();
        GetComponent <PhotonView>().RPC(nameof(AddListenerToThisTeam), RpcTarget.AllBufferedViaServer);
    }
    public void GamestateCreateTeamTest()
    {
        short id = -100;
        GamestateCommitTestHelper <TeamEntry> testHelper = new GamestateCommitTestHelper <TeamEntry>(1);
        GamestateTable <TeamEntry>            teams      = testHelper.TestTable(GamestateTracker.Table.Teams);

        TeamEntry teamEntry = teams.Create(id);

        Assert.That(teamEntry, Is.Not.Null);
        Assert.That(teamEntry.id, Is.EqualTo(id));

        teamEntry.Commit();

        testHelper.Apply(testHelper.commitedPackets[0]);

        Assert.That(teams.Get(id), Is.Not.Null);
    }
示例#8
0
    public void GamestateCommitTeamTest()
    {
        short actorNumber = 17;
        short entryId     = -100;
        GamestateCommitTestHelper <TeamEntry> testHelper = new GamestateCommitTestHelper <TeamEntry>(actorNumber);
        GamestateTable <TeamEntry>            teams      = testHelper.TestTable(GamestateTracker.Table.Teams);

        TeamEntry teamEntry = teams.Create(entryId);

        Assert.That(teamEntry, Is.Not.Null);
        Assert.That(teamEntry.id, Is.EqualTo(entryId));

        teamEntry.name       = "xrtycuhEEEEE";
        teamEntry.isDead     = true;
        teamEntry.kills      = 67;
        teamEntry.deaths     = 222;
        teamEntry.assists    = 0;
        teamEntry.checkpoint = -9;

        teamEntry.Commit();

        Assert.That(testHelper.commitedPackets.Count, Is.EqualTo(1));

        GamestatePacket packet = testHelper.commitedPackets[0];

        Assert.That(packet.revisionNumber, Is.EqualTo(1));
        Assert.That(packet.revisionActor, Is.EqualTo(actorNumber));

        Assert.That(packet.id, Is.EqualTo(entryId));

        Assert.That(packet.hasName, Is.EqualTo(true));
        Assert.That(packet.name, Is.EqualTo("xrtycuhEEEEE"));

        bool[] hasShortValues = new bool[GamestatePacket.maxShorts];
        hasShortValues[(int)TeamEntry.ShortFields.Kills]      = true;
        hasShortValues[(int)TeamEntry.ShortFields.Deaths]     = true;
        hasShortValues[(int)TeamEntry.ShortFields.Assists]    = true;
        hasShortValues[(int)TeamEntry.ShortFields.Checkpoint] = true;
        Assert.That(packet.hasShortValues, Is.EquivalentTo(hasShortValues));
        Assert.That(packet.shortValues, Is.EquivalentTo(new short[] { 67, 222, 0, -9 }));

        bool[] boolValues = new bool[GamestatePacket.maxBools];
        boolValues[0] = true;
        Assert.That(packet.boolValues, Is.EquivalentTo(boolValues));
    }
    //  USED
    // add the driver bot
    public void AddDriverBot()
    {
        if (CanSelectDriver())
        {
            PlayerEntry bot = gamestateTracker.players.Create(true, true);
            bot.ready  = true;
            bot.role   = (short)PlayerEntry.Role.Driver;
            bot.isBot  = true;
            bot.teamId = (short)teamId;
            bot.name   = "Bot " + -bot.id;
            bot.Commit();

            // now add the entry to the team
            TeamEntry teamEntry = gamestateTracker.teams.Get((short)teamId);
            teamEntry.driverId = bot.id;
            teamEntry.Commit();
        }
    }
示例#10
0
    public void SelectVehicle(int i)
    {
        selectedVehicle = vehicleNames[i];

        PlayerEntry playerEntry = gamestateTracker.players.Get((short)PhotonNetwork.LocalPlayer.ActorNumber);


        int teamId = playerEntry.teamId;

        playerEntry.Release();

        if (teamId != 0)
        {
            // get team
            TeamEntry teamEntry = gamestateTracker.teams.Get((short)teamId);
            teamEntry.vehicle = (short)i;
            teamEntry.Commit();
        }
    }
    //  USED
    public void RemoveDriverBot()
    {
        // if there is a gunner bot on our team, then remove it from our team and remove it from the gamestate tracker
        TeamEntry teamEntry = gamestateTracker.teams.Get((short)teamId);

        if (teamEntry.driverId != 0)
        {
            PlayerEntry playerEntry = gamestateTracker.players.Get(teamEntry.driverId);
            if (playerEntry.isBot)
            {
                playerEntry.Delete();
            }
            else
            {
                playerEntry.Release();
            }
        }
        teamEntry.driverId = 0;
        teamEntry.Commit();
    }
    //  USED
    public void SelectGunner()
    {
        if (CanSelectGunner())
        {
            // get my player id
            short       myId        = (short)PhotonNetwork.LocalPlayer.ActorNumber;
            PlayerEntry playerEntry = gamestateTracker.players.Get(myId);


            // search for myself in the teams
            // if I already am in a team, remove me
            if (playerEntry.teamId != 0)
            {
                TeamEntry oldTeamEntry = gamestateTracker.teams.Get(playerEntry.teamId);
                if (playerEntry.role == (short)PlayerEntry.Role.Driver)
                {
                    oldTeamEntry.driverId = 0;
                }
                if (playerEntry.role == (short)PlayerEntry.Role.Gunner)
                {
                    oldTeamEntry.gunnerId = 0;
                }
                oldTeamEntry.Commit();
            }


            // set my roles
            playerEntry.role = (short)PlayerEntry.Role.Gunner;

            // set my team
            playerEntry.teamId = (short)teamId;
            playerEntry.Commit();

            // set the driver team
            TeamEntry teamEntry = gamestateTracker.teams.Get((short)teamId);
            teamEntry.gunnerId = myId;
            teamEntry.Commit();
        }
    }
示例#13
0
    public void GamestateApplyTeamPacketTest()
    {
        short actorNumber = 17;
        GamestateCommitTestHelper <TeamEntry> testHelper = new GamestateCommitTestHelper <TeamEntry>(actorNumber);
        GamestateTable <TeamEntry>            teams      = testHelper.TestTable(GamestateTracker.Table.Teams);
        GamestateRandomTestingUnit            generator  = new GamestateRandomTestingUnit(82);

        for (short i = 0; i < 100; i++)
        {
            TeamEntry teamEntry = teams.Create(i);
            generator.RandomiseTeamEntry(teamEntry);
            teamEntry.Commit();

            GamestatePacket packet = testHelper.commitedPackets[0];
            testHelper.Apply(packet);

            teamEntry = teams.Get(i);
            GamestateAssertionUnit.AssertPacketApplied(teamEntry, packet);
            teamEntry.Release();

            testHelper.commitedPackets.Clear();
        }
    }