Changed CapturePointSystem in light of new enums in the components and a teamcomponent. Half the tests are currently working

This commit is contained in:
verysecrethero
2016-01-19 15:31:15 +01:00
parent 4c1a49a8a4
commit f197993beb
17 changed files with 190 additions and 189 deletions
@@ -20,7 +20,7 @@ public:
CapturePointSystem(EventBroker* eventBroker);
//updatecomponent
virtual void UpdateComponent(World* world, ComponentWrapper& capturePoint, double dt) override;
virtual void UpdateComponent(World* world, EntityWrapper& entity, ComponentWrapper& capturePoint, double dt) override;
private:
//methods which will take care of specific events
+3 -4
View File
@@ -1,6 +1,5 @@
<c:CapturePoint>
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<CapturePoint xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="CapturePoint.xsd">
<CapturePointNumber>0</CapturePointNumber>
<CaptureTimer>0</CaptureTimer>
<OwnedBy>0</OwnedBy>
<IsHomeCapturePointForTeamNumber>0</IsHomeCapturePointForTeamNumber>
</c:CapturePoint>
</CapturePoint>
+11 -5
View File
@@ -5,14 +5,20 @@
<xs:element name="CapturePoint">
<xs:annotation>
<xs:documentation>A Capture Point</xs:documentation>
<xs:documentation>A Capture Point. Add a Team Component to specify who currently owns it</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:all>
<xs:element name="CaptureTimer" type="t:double" minOccurs="0"/>
<xs:element name="OwnedBy" type="t:int" minOccurs="0"/>
<xs:element name="IsHomeCapturePointForTeamNumber" type="t:int" minOccurs="0"/>
<xs:element name="CapturePointNumber" type="t:int" minOccurs="0"/>
<xs:element name="CaptureTimer" type="t:double" minOccurs="0">
<xs:annotation>
<xs:documentation>CaptureTimer handled by Capture Point System</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="CapturePointNumber" type="t:int" minOccurs="0">
<xs:annotation>
<xs:documentation>CapturePointNumber specify an int number for this</xs:documentation>
</xs:annotation>
</xs:element>
</xs:all>
</xs:complexType>
</xs:element>
-1
View File
@@ -1,6 +1,5 @@
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<Player xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="Player.xsd">
<TeamNumber>0</TeamNumber>
<Velocity X="0" Y="0" Z="0"/>
<Forward>false</Forward>
<Left>false</Left>
-1
View File
@@ -14,7 +14,6 @@
<xs:element name="Left" type="t:bool" minOccurs="0"/>
<xs:element name="Back" type="t:bool" minOccurs="0"/>
<xs:element name="Right" type="t:bool" minOccurs="0"/>
<xs:element name="TeamNumber" type="t:int" minOccurs="0"/>
</xs:all>
</xs:complexType>
</xs:element>
+1 -1
View File
@@ -14,7 +14,7 @@
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:element name="Team">
<xs:annotation>
<xs:documentation>Represents entity team affiliation</xs:documentation>
+2 -2
View File
@@ -39,7 +39,7 @@
<xs:element name="EntityRef" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
<xs:all>
<xs:attribute name="file" type="xs:string" minOccurs="0"/>
<!-- <xs:attribute name="file" type="xs:string" minOccurs="0"/> -->
</xs:all>
</xs:complexType>
</xs:element>
@@ -48,7 +48,7 @@
</xs:element>
</xs:all>
<xs:attribute ref="xml:base"/>
<xs:attribute name="name" type="xs:string" minOccurs="0" default=""/>
<!-- <xs:attribute name="name" type="xs:string" minOccurs="0" default=""/> -->
</xs:complexType>
</xs:element>
</xs:schema>
-1
View File
@@ -27,7 +27,6 @@ set(SOURCE_FILES
"Game.cpp"
${SOURCE_FILES_Systems}
${SOURCE_FILES_Events}
"CapturePointSystem.cpp"
)
set(LIBRARIES
+1 -1
View File
@@ -8,7 +8,7 @@
#include "Systems/SpawnerSystem.h"
#include "Systems/PlayerSpawnSystem.h"
#include "Core/EntityFileWriter.h"
#include "Game/CapturePointSystem.h"
#include "Game/Systems/CapturePointSystem.h"
Game::Game(int argc, char* argv[])
{
@@ -1,8 +1,9 @@
#include "CapturePointSystem.h"
#include "Systems/CapturePointSystem.h"
#include <algorithm>
CapturePointSystem::CapturePointSystem(EventBroker* eventBroker)
: PureSystem(eventBroker, "CapturePoint")
: System(eventBroker),
PureSystem("CapturePoint")
{
//subscribe/listenTo playerdamage,healthpickup events (using the eventBroker)
EVENT_SUBSCRIBE_MEMBER(m_ETriggerTouch, &CapturePointSystem::OnTriggerTouch);
@@ -11,10 +12,21 @@ CapturePointSystem::CapturePointSystem(EventBroker* eventBroker)
//here all capturepoints will update their component
//NOTE: needs to run each frame, since we're possibly modifying the captureTimer for the capturePoints by dt
void CapturePointSystem::UpdateComponent(World* world, ComponentWrapper& capturePoint, double dt)
void CapturePointSystem::UpdateComponent(World* world, EntityWrapper& entity, ComponentWrapper& capturePoint, double dt)
{
bool hasTeamComponent = world->HasComponent(capturePoint.EntityID, "Team");
if (!hasTeamComponent) {
world->AttachComponent(capturePoint.EntityID, "Team");
ComponentWrapper& teamComponent = world->GetComponent(capturePoint.EntityID, "Team");
teamComponent["Team"] = 0;
}
ComponentWrapper& teamComponent = world->GetComponent(capturePoint.EntityID, "Team");
int firstTeamPlayersStandingInside = 0;
int secondTeamPlayersStandingInside = 0;
//what if capture point has no TEAM? -> NO ENUM.
const int redTeam = (int)teamComponent["Team"].Enum("Red");//"team 1"
const int blueTeam = (int)teamComponent["Team"].Enum("Blue");//"team 2"
const int spectatorTeam = (int)teamComponent["Team"].Enum("Spectator");
//check how many players are standing inside and are healthy
for (size_t i = m_ETriggerTouchVector.size(); i > 0; i--)
@@ -36,28 +48,30 @@ void CapturePointSystem::UpdateComponent(World* world, ComponentWrapper& capture
continue;
}
}
//check team - 0 = no team
int teamNumber = world->GetComponent(playerID, "Player")["TeamNumber"];
if (teamNumber == 1) {
//check team - spectatorNumber = "no team"
int teamNumber = world->GetComponent(playerID, "Player")["Team"];
if (teamNumber == redTeam) {
firstTeamPlayersStandingInside++;
}
else if (teamNumber == 2) {
} else if (teamNumber == blueTeam) {
secondTeamPlayersStandingInside++;
}
continue;
}
}
int ownedBy = capturePoint["OwnedBy"];
int ownedBy = teamComponent["Team"];
//om ej next satt, förvänta sig att en capturepoint med en viss team färg kommer in...
//sätt isåfall next och kör på..
//gör inget tills man fått den infon
/*check what capturePoint can be taken over next:
no capturepoint taken yet for at least one of the teams <->
at the start of the match the system is unaware of what capturePoint is the first one for each team*/
if (m_Team1NextPossibleCapturePoint == m_NotACapturePoint && (int)capturePoint["IsHomeCapturePointForTeamNumber"] == 1) {
if (m_Team1NextPossibleCapturePoint == m_NotACapturePoint && (int)teamComponent["Team"] == redTeam) {
m_Team1NextPossibleCapturePoint = capturePoint["CapturePointNumber"];
m_Team1HomeCapturePoint = capturePoint["CapturePointNumber"];//needed to calculate next m_Team1NextPossibleCapturePoint
}
else if (m_Team2NextPossibleCapturePoint == m_NotACapturePoint && (int)capturePoint["IsHomeCapturePointForTeamNumber"] == 2) {
} else if (m_Team2NextPossibleCapturePoint == m_NotACapturePoint && (int)teamComponent["Team"] == blueTeam) {
m_Team2NextPossibleCapturePoint = capturePoint["CapturePointNumber"];
m_Team2HomeCapturePoint = capturePoint["CapturePointNumber"];//needed to calculate next m_Team2NextPossibleCapturePoint
}
@@ -72,34 +86,31 @@ void CapturePointSystem::UpdateComponent(World* world, ComponentWrapper& capture
&& m_Team1NextPossibleCapturePoint == (int)capturePoint["CapturePointNumber"])
{
timerDeltaChange = firstTeamPlayersStandingInside*dt;
currentTeam = 1;
}
else if (firstTeamPlayersStandingInside == 0 && secondTeamPlayersStandingInside > 0
currentTeam = blueTeam;
} else if (firstTeamPlayersStandingInside == 0 && secondTeamPlayersStandingInside > 0
&& m_Team2NextPossibleCapturePoint == (int)capturePoint["CapturePointNumber"])
{
timerDeltaChange = -secondTeamPlayersStandingInside*dt;
currentTeam = 2;
currentTeam = redTeam;
}
//A.nobodys standing inside
if (firstTeamPlayersStandingInside == 0 && secondTeamPlayersStandingInside == 0) {
//A.nobodys standing inside
//do nothing (?)
}
//B. at most one of the teams have players inside (this means datavariable currentTeam is not 0)
else if (currentTeam != 0) {
} else if (currentTeam == blueTeam || currentTeam == redTeam) {
//B. at most one of the teams have players inside (this means datavariable currentTeam is not 0)
//if capturePoint is not owned by the take-over team, just modify the CaptureTimer accordingly
if (ownedBy != currentTeam) {
capturePoint["CaptureTimer"] = (double)capturePoint["CaptureTimer"] + timerDeltaChange;
}
//if capturePoint is owned by the team, and the other team has been trying to take it, then increase/decrease the timer towards 0.0
if ((ownedBy == currentTeam && currentTeam == 1 && (double)capturePoint["CaptureTimer"] < 0.0) ||
(ownedBy == currentTeam && currentTeam == 2 && (double)capturePoint["CaptureTimer"] > 0.0)) {
if ((ownedBy == currentTeam && currentTeam == redTeam && (double)capturePoint["CaptureTimer"] < 0.0) ||
(ownedBy == currentTeam && currentTeam == blueTeam && (double)capturePoint["CaptureTimer"] > 0.0)) {
capturePoint["CaptureTimer"] = (double)capturePoint["CaptureTimer"] + timerDeltaChange;
}
//check if captureTimer > m_CaptureTimeToTakeOver and if so change owner and publish the eCaptured event
if (abs((double)capturePoint["CaptureTimer"]) > abs(m_CaptureTimeToTakeOver)) {
capturePoint["OwnedBy"] = currentTeam;
teamComponent["Team"] = currentTeam;
capturePoint["CaptureTimer"] = 0.0;
//publish Captured event
Events::Captured e;
@@ -112,10 +123,9 @@ void CapturePointSystem::UpdateComponent(World* world, ComponentWrapper& capture
bool team1HasTheZeroCapturePoint = m_Team1HomeCapturePoint < m_Team2HomeCapturePoint;
if (team1HasTheZeroCapturePoint) {
if (currentTeam == 1) {
if (currentTeam == redTeam) {
m_Team1NextPossibleCapturePoint++;
}
else {
} else {
m_Team2NextPossibleCapturePoint--;
}
//adjust flag for other team if their previous point has just been taken
@@ -126,12 +136,10 @@ void CapturePointSystem::UpdateComponent(World* world, ComponentWrapper& capture
if (m_Team1NextPossibleCapturePoint == m_Team2NextPossibleCapturePoint + 2) {
m_Team1NextPossibleCapturePoint = m_Team1NextPossibleCapturePoint - 1;
}
}
else {
if (currentTeam == 1) {
} else {
if (currentTeam == redTeam) {
m_Team1NextPossibleCapturePoint--;
}
else {
} else {
m_Team2NextPossibleCapturePoint++;
}
//adjust flag for other team if their previous point has just been taken
@@ -144,19 +152,27 @@ void CapturePointSystem::UpdateComponent(World* world, ComponentWrapper& capture
}
}
}
}
//C.both teams have players inside
else if (firstTeamPlayersStandingInside > 0 && secondTeamPlayersStandingInside > 0) {
} else if (firstTeamPlayersStandingInside > 0 && secondTeamPlayersStandingInside > 0) {
//C.both teams have players inside
//do nothing (?)
}
//check for possible winCondition = check if the homebase is owned by the other team
if (!m_WinnerWasFound && (int)capturePoint["OwnedBy"] != 0 && (int)capturePoint["IsHomeCapturePointForTeamNumber"] != 0 &&
(int)capturePoint["IsHomeCapturePointForTeamNumber"] != (int)capturePoint["OwnedBy"]) {
bool checkForWinner = false;
if ((int)capturePoint["CapturePointNumber"] == m_Team1HomeCapturePoint && (int)teamComponent["Team"] != redTeam)
{
checkForWinner = true;
}
if ((int)capturePoint["CapturePointNumber"] == m_Team2HomeCapturePoint && (int)teamComponent["Team"] != blueTeam)
{
checkForWinner = true;
}
if (checkForWinner && !m_WinnerWasFound)
{
//publish Win event
Events::Win e;
e.TeamThatWon = capturePoint["OwnedBy"];
e.TeamThatWon = teamComponent["Team"];
m_EventBroker->Publish(e);
m_WinnerWasFound = true;
}
+1 -1
View File
@@ -27,7 +27,7 @@ void HealthSystem::UpdateComponent(World* world, EntityWrapper& entity, Componen
m_DeltaHealthVector.erase(m_DeltaHealthVector.begin() + i - 1);
//check if health is <= 0
if ((double)component["Health"] <= 0.0f) {
health["Health"] = 0.0;
component["Health"] = 0.0;
//publish death event
Events::PlayerDeath e;
e.PlayerID = player.EntityID;
+106 -120
View File
@@ -3,12 +3,12 @@ using boost::unit_test_framework::test_suite;
using boost::unit_test_framework::test_case;
#include "CapturePointTest.h"
#include "Game/HealthSystem.h"
#include "Game/Systems/HealthSystem.h"
#include "Collision/TriggerSystem.h"
#include "Collision/CollisionSystem.h"
#include "Core/EntityFileWriter.h"
#include "Game/CapturePointSystem.h"
#include "Game/Systems/CapturePointSystem.h"
BOOST_AUTO_TEST_SUITE(CapturePointTestSuite)
@@ -94,7 +94,6 @@ CapturePointTest::CapturePointTest(int runTestNumber)
ResourceManager::RegisterType<EntityFile>("EntityFile");
m_Config = ResourceManager::Load<ConfigFile>("Config.ini");
std::string mapToLoad = m_Config->Get<std::string>("Debug.LoadMap", "");
LOG_LEVEL = static_cast<_LOG_LEVEL>(m_Config->Get<int>("Debug.LogLevel", 1));
// Create the core event broker
@@ -105,19 +104,15 @@ CapturePointTest::CapturePointTest(int runTestNumber)
// Create system pipeline
m_SystemPipeline = new SystemPipeline(m_EventBroker);
m_SystemPipeline->AddSystem<PlayerSystem>(0);
m_SystemPipeline->AddSystem<HealthSystem>(0);
m_SystemPipeline->AddSystem<CollisionSystem>(1);
m_SystemPipeline->AddSystem<TriggerSystem>(1);
m_SystemPipeline->AddSystem<CapturePointSystem>(1);
if (!mapToLoad.empty()) {
auto file = ResourceManager::Load<EntityFile>(mapToLoad);
EntityFilePreprocessor fpp(file);
fpp.RegisterComponents(m_World);
EntityFileParser fp(file);
fp.MergeEntities(m_World);
}
//must register components (Components.xsd), else you cant create entities. Easiest done by loading a test xsd file
auto file = ResourceManager::Load<EntityFile>("Schema/Entities/TeamTest.xml");
EntityFilePreprocessor fpp(file);
fpp.RegisterComponents(m_World);
EntityFileParser fp(file);
fp.MergeEntities(m_World);
/*
---TESTSETUP---
@@ -128,37 +123,43 @@ CapturePointTest::CapturePointTest(int runTestNumber)
capturepoint3 = home for team number 1
*/
EntityID playerID = m_World->CreateEntity();
m_PlayerID = playerID;
ComponentWrapper& player = m_World->AttachComponent(playerID, "Player");
ComponentWrapper health = m_World->AttachComponent(playerID, "Health");
player["TeamNumber"] = 1;
m_RedTeamPlayer = playerID;
ComponentWrapper& player = m_World->AttachComponent(m_RedTeamPlayer, "Player");
ComponentWrapper& health = m_World->AttachComponent(m_RedTeamPlayer, "Health");
ComponentWrapper& playerTeam = m_World->AttachComponent(m_RedTeamPlayer, "Team");
playerTeam["Team"] = playerTeam["Team"].Enum("Red");
m_RedTeam = playerTeam["Team"].Enum("Red");
m_BlueTeam = playerTeam["Team"].Enum("Blue");
EntityID playerID2 = m_World->CreateEntity();
ComponentWrapper& player2 = m_World->AttachComponent(playerID2, "Player");
m_PlayerID2 = playerID2;
ComponentWrapper health2 = m_World->AttachComponent(playerID2, "Health");
player2["TeamNumber"] = 2;
m_BlueTeamPlayer = playerID2;
ComponentWrapper& player2 = m_World->AttachComponent(m_BlueTeamPlayer, "Player");
ComponentWrapper& health2 = m_World->AttachComponent(m_BlueTeamPlayer, "Health");
ComponentWrapper& playerTeam2 = m_World->AttachComponent(m_BlueTeamPlayer, "Team");
playerTeam2["Team"] = m_BlueTeam;
EntityID capturePointID = m_World->CreateEntity();
ComponentWrapper& capturePoint = m_World->AttachComponent(capturePointID, "CapturePoint");
//this capturePoint is homeBase for team 2
capturePoint["IsHomeCapturePointForTeamNumber"] = 2;
capturePoint["CapturePointNumber"] = 0;
m_CapturePointID = capturePointID;
ComponentWrapper& capturePoint = m_World->AttachComponent(capturePointID, "CapturePoint");
ComponentWrapper& capturePointHomeTeam = m_World->AttachComponent(capturePointID, "Team");
//this capturePoint is homeBase for team 2
capturePointHomeTeam["Team"] = m_BlueTeam;
capturePoint["CapturePointNumber"] = 0;
EntityID capturePointID2 = m_World->CreateEntity();
ComponentWrapper& capturePoint2 = m_World->AttachComponent(capturePointID2, "CapturePoint");
//this capturePoint is homeBase for team 1
capturePoint2["IsHomeCapturePointForTeamNumber"] = 0;
capturePoint2["CapturePointNumber"] = 1;
m_CapturePointID2 = capturePointID2;
ComponentWrapper& capturePoint2 = m_World->AttachComponent(capturePointID2, "CapturePoint");
//ComponentWrapper& capturePointHomeTeam2 = m_World->AttachComponent(capturePointID2, "Team");
//capturePointHomeTeam2["Team"] = m_BlueTeam;
capturePoint2["CapturePointNumber"] = 1;
EntityID capturePointID3 = m_World->CreateEntity();
ComponentWrapper& capturePoint3 = m_World->AttachComponent(capturePointID3, "CapturePoint");
//this capturePoint is homeBase for team 1
capturePoint3["IsHomeCapturePointForTeamNumber"] = 1;
capturePoint3["CapturePointNumber"] = 2;
m_CapturePointID3 = capturePointID3;
ComponentWrapper& capturePoint3 = m_World->AttachComponent(capturePointID3, "CapturePoint");
ComponentWrapper& capturePointHomeTeam3 = m_World->AttachComponent(capturePointID3, "Team");
//this capturePoint is homeBase for team 1
capturePointHomeTeam3["Team"] = m_RedTeam;
capturePoint3["CapturePointNumber"] = 2;
m_RunTestNumber = runTestNumber;
@@ -189,8 +190,8 @@ CapturePointTest::CapturePointTest(int runTestNumber)
break;
case 8:
//switch sides
capturePoint["IsHomeCapturePointForTeamNumber"] = 1;
capturePoint3["IsHomeCapturePointForTeamNumber"] = 2;
capturePointHomeTeam["Team"] = m_RedTeam;
capturePointHomeTeam3["Team"] = m_BlueTeam;
TestSetup8();
break;
default:
@@ -214,10 +215,10 @@ void CapturePointTest::TestSetup1_OnePlayerOnCapturePoint()
Events::TriggerLeave leaveEvent;
//player touches,leaves,touches m_CapturePointID. and enters m_CapturePointID3
DoTouchEvent(m_PlayerID, m_CapturePointID);
DoLeaveEvent(m_PlayerID, m_CapturePointID);
DoTouchEvent(m_PlayerID, m_CapturePointID);
DoTouchEvent(m_PlayerID, m_CapturePointID3);
DoTouchEvent(m_RedTeamPlayer, m_CapturePointID);
DoLeaveEvent(m_RedTeamPlayer, m_CapturePointID);
DoTouchEvent(m_RedTeamPlayer, m_CapturePointID);
DoTouchEvent(m_RedTeamPlayer, m_CapturePointID3);
}
void CapturePointTest::TestSetup2_TwoPlayersOnCapturePoint()
{
@@ -225,80 +226,65 @@ void CapturePointTest::TestSetup2_TwoPlayersOnCapturePoint()
Events::TriggerLeave leaveEvent;
//player touches,leaves m_CapturePointID. and enters m_CapturePointID3
DoTouchEvent(m_PlayerID, m_CapturePointID);
DoLeaveEvent(m_PlayerID, m_CapturePointID);
DoTouchEvent(m_PlayerID, m_CapturePointID3);
DoTouchEvent(m_RedTeamPlayer, m_CapturePointID);
DoLeaveEvent(m_RedTeamPlayer, m_CapturePointID);
DoTouchEvent(m_RedTeamPlayer, m_CapturePointID3);
//player2 touches m_CapturePointID,m_CapturePointID2
DoTouchEvent(m_PlayerID2, m_CapturePointID);
DoTouchEvent(m_PlayerID2, m_CapturePointID2);
DoTouchEvent(m_BlueTeamPlayer, m_CapturePointID);
DoTouchEvent(m_BlueTeamPlayer, m_CapturePointID2);
}
void CapturePointTest::TestSetup3_NoPlayersOnCapturePoint()
{
Events::TriggerTouch touchEvent;
Events::TriggerLeave leaveEvent;
//player1 touches and leaves m_CapturePointID
DoTouchEvent(m_PlayerID, m_CapturePointID);
DoLeaveEvent(m_PlayerID, m_CapturePointID);
//player2 touches and leaves m_CapturePointID2
DoTouchEvent(m_PlayerID2, m_CapturePointID2);
DoLeaveEvent(m_PlayerID2, m_CapturePointID2);
DoLeaveEvent(m_RedTeamPlayer, m_CapturePointID);
DoLeaveEvent(m_BlueTeamPlayer, m_CapturePointID3);
}
void CapturePointTest::TestSetup4_TwoCapturePointsBeingCaptured()
{
Events::TriggerTouch touchEvent;
//player1 touches m_CapturePointID3
DoTouchEvent(m_PlayerID, m_CapturePointID3);
DoTouchEvent(m_RedTeamPlayer, m_CapturePointID3);
//player2 touches m_CapturePointID
DoTouchEvent(m_PlayerID2, m_CapturePointID);
DoTouchEvent(m_BlueTeamPlayer, m_CapturePointID);
}
void CapturePointTest::TestSetup5_SameCapturePointContestedAndTakenOver()
{
//NOTE: setup events need to trigger first then the real event will be allowed by the system later
//"SETUP" homebase->same capturep
//player1 touches m_CapturePointID3
DoTouchEvent(m_PlayerID, m_CapturePointID3);
//player2 touches m_CapturePointID
DoTouchEvent(m_PlayerID2, m_CapturePointID);
//contested same, player1 touches the contested
//player1 touches m_CapturePointID2
DoTouchEvent(m_PlayerID, m_CapturePointID2);
DoTouchEvent(m_RedTeamPlayer, m_CapturePointID2);
}
void CapturePointTest::TestSetup6_Team1CapturedTheLastPointAndWon()
{
//player1 touches m_CapturePointID3
DoTouchEvent(m_PlayerID, m_CapturePointID3);
DoTouchEvent(m_RedTeamPlayer, m_CapturePointID3);
//TODO: this should be in UPDATE instead
//player1 touches m_CapturePointID2
DoTouchEvent(m_PlayerID, m_CapturePointID2);
DoTouchEvent(m_RedTeamPlayer, m_CapturePointID2);
//player1 touches m_CapturePointID
DoTouchEvent(m_PlayerID, m_CapturePointID);
DoTouchEvent(m_RedTeamPlayer, m_CapturePointID);
//player2 does nothing
}
void CapturePointTest::TestSetup7()
{
//2 owns 1
DoTouchEvent(m_PlayerID2, m_CapturePointID);
DoTouchEvent(m_BlueTeamPlayer, m_CapturePointID);
//1 owns 3
DoTouchEvent(m_PlayerID, m_CapturePointID3);
DoTouchEvent(m_RedTeamPlayer, m_CapturePointID3);
}
void CapturePointTest::TestSetup8()
{
//2 owns 3
DoTouchEvent(m_PlayerID2, m_CapturePointID3);
DoTouchEvent(m_BlueTeamPlayer, m_CapturePointID3);
//1 owns 1
DoTouchEvent(m_PlayerID, m_CapturePointID);
DoTouchEvent(m_RedTeamPlayer, m_CapturePointID);
}
void CapturePointTest::DoTouchEvent(EntityID whoDidSomething, EntityID onWhatObject) {
Events::TriggerTouch touchEvent;
@@ -316,15 +302,15 @@ void CapturePointTest::TestSuccess1() {
//TestSetup1_OnePlayerOnCapturePoint
//if ammocount reaches -- we know the test has succeeded, i.e. a shot has been fired
int ownedByID3 = m_World->GetComponent(m_CapturePointID3, "CapturePoint")["OwnedBy"];
if (ownedByID3 == 1)
int ownedByID3 = m_World->GetComponent(m_CapturePointID3, "Team")["Team"];
if (ownedByID3 == m_RedTeam)
TestSucceeded = true;
}
void CapturePointTest::TestSuccess2() {
//TestSetup2_TwoPlayersOnCapturePoint
int ownedByID3 = m_World->GetComponent(m_CapturePointID3, "CapturePoint")["OwnedBy"];
int ownedByID1 = m_World->GetComponent(m_CapturePointID, "CapturePoint")["OwnedBy"];
if (ownedByID3 == 1 && ownedByID1 == 2)
int ownedByID3 = m_World->GetComponent(m_CapturePointID3, "Team")["Team"];
int ownedByID1 = m_World->GetComponent(m_CapturePointID, "Team")["Team"];
if (ownedByID3 == m_RedTeam && ownedByID1 == m_BlueTeam)
TestSucceeded = true;
}
void CapturePointTest::TestSuccess3() {
@@ -333,53 +319,53 @@ void CapturePointTest::TestSuccess3() {
//if any capturePoint changed then, its a failure else a success
if (NumLoops == 95) {
TestSucceeded = true;
int ownedByID1 = m_World->GetComponent(m_CapturePointID, "CapturePoint")["OwnedBy"];
int ownedByID2 = m_World->GetComponent(m_CapturePointID2, "CapturePoint")["OwnedBy"];
int ownedByID3 = m_World->GetComponent(m_CapturePointID3, "CapturePoint")["OwnedBy"];
if (ownedByID1 != 0 || ownedByID2 != 0 || ownedByID3 != 0)
int ownedByID1 = m_World->GetComponent(m_CapturePointID, "Team")["Team"];
int ownedByID2 = m_World->GetComponent(m_CapturePointID2, "Team")["Team"];
int ownedByID3 = m_World->GetComponent(m_CapturePointID3, "Team")["Team"];
if (ownedByID1 != m_BlueTeam || ownedByID2 == m_RedTeam || ownedByID2 == m_BlueTeam || ownedByID3 !=m_RedTeam)
TestSucceeded = false;
}
}
void CapturePointTest::TestSuccess4() {
//TestSetup4_TwoCapturePointsBeingCaptured
int ownedByID1 = m_World->GetComponent(m_CapturePointID, "CapturePoint")["OwnedBy"];
int ownedByID2 = m_World->GetComponent(m_CapturePointID2, "CapturePoint")["OwnedBy"];
int ownedByID3 = m_World->GetComponent(m_CapturePointID3, "CapturePoint")["OwnedBy"];
if (ownedByID1 == 2 && ownedByID3 == 1)
int ownedByID1 = m_World->GetComponent(m_CapturePointID, "Team")["Team"];
int ownedByID2 = m_World->GetComponent(m_CapturePointID2, "Team")["Team"];
int ownedByID3 = m_World->GetComponent(m_CapturePointID3, "Team")["Team"];
if (ownedByID1 == m_BlueTeam && ownedByID3 == m_RedTeam)
TestSucceeded = true;
}
void CapturePointTest::TestSuccess5() {
//TestSetup5_SameCapturePointContestedAndTakenOver
int ownedByID1 = m_World->GetComponent(m_CapturePointID, "CapturePoint")["OwnedBy"];
int ownedByID2 = m_World->GetComponent(m_CapturePointID2, "CapturePoint")["OwnedBy"];
int ownedByID3 = m_World->GetComponent(m_CapturePointID3, "CapturePoint")["OwnedBy"];
if (ownedByID1 == 2 && ownedByID2 == 1 && ownedByID3 == 1)
int ownedByID1 = m_World->GetComponent(m_CapturePointID, "Team")["Team"];
int ownedByID2 = m_World->GetComponent(m_CapturePointID2, "Team")["Team"];
int ownedByID3 = m_World->GetComponent(m_CapturePointID3, "Team")["Team"];
if (ownedByID1 == m_BlueTeam && ownedByID2 == m_RedTeam && ownedByID3 == m_RedTeam)
TestSucceeded = true;
}
void CapturePointTest::TestSuccess6() {
//NOTE: the actual win-event will have to be manually checked if it triggered or not
//TestSetup6_Team1CapturedTheLastPointAndWon
int ownedByID1 = m_World->GetComponent(m_CapturePointID, "CapturePoint")["OwnedBy"];
int ownedByID2 = m_World->GetComponent(m_CapturePointID2, "CapturePoint")["OwnedBy"];
int ownedByID3 = m_World->GetComponent(m_CapturePointID3, "CapturePoint")["OwnedBy"];
if (ownedByID1 == 1 && ownedByID2 == 1 && ownedByID3 == 1)
int ownedByID1 = m_World->GetComponent(m_CapturePointID, "Team")["Team"];
int ownedByID2 = m_World->GetComponent(m_CapturePointID2, "Team")["Team"];
int ownedByID3 = m_World->GetComponent(m_CapturePointID3, "Team")["Team"];
if (ownedByID1 == m_RedTeam && ownedByID2 == m_RedTeam && ownedByID3 == m_RedTeam)
TestSucceeded = true;
}
void CapturePointTest::TestSuccess7() {
int ownedByID1 = m_World->GetComponent(m_CapturePointID, "CapturePoint")["OwnedBy"];
int ownedByID2 = m_World->GetComponent(m_CapturePointID2, "CapturePoint")["OwnedBy"];
int ownedByID3 = m_World->GetComponent(m_CapturePointID3, "CapturePoint")["OwnedBy"];
int ownedByID1 = m_World->GetComponent(m_CapturePointID, "Team")["Team"];
int ownedByID2 = m_World->GetComponent(m_CapturePointID2, "Team")["Team"];
int ownedByID3 = m_World->GetComponent(m_CapturePointID3, "Team")["Team"];
if (NumLoops < 20 && ownedByID1 == 2 & ownedByID3 == 1) {
if (NumLoops < 20 && ownedByID1 == m_BlueTeam & ownedByID3 == m_RedTeam) {
phase1Success = true;
}
if (NumLoops < 40 && NumLoops > 20 && ownedByID2 == 1) {
if (NumLoops < 40 && NumLoops > 20 && ownedByID2 == m_RedTeam) {
phase2Success = true;
}
if (NumLoops < 60 && NumLoops > 40 && ownedByID1 == 1) {
if (NumLoops < 60 && NumLoops > 40 && ownedByID1 == m_RedTeam) {
phase3Success = true;
}
if (NumLoops < 90 && NumLoops > 60 && ownedByID2 != 2) {
if (NumLoops < 90 && NumLoops > 60 && ownedByID2 != m_BlueTeam) {
phase4Success = true;
}
@@ -389,20 +375,20 @@ void CapturePointTest::TestSuccess7() {
}
}
void CapturePointTest::TestSuccess8() {
int ownedByID1 = m_World->GetComponent(m_CapturePointID, "CapturePoint")["OwnedBy"];
int ownedByID2 = m_World->GetComponent(m_CapturePointID2, "CapturePoint")["OwnedBy"];
int ownedByID3 = m_World->GetComponent(m_CapturePointID3, "CapturePoint")["OwnedBy"];
int ownedByID1 = m_World->GetComponent(m_CapturePointID, "CapturePoint")["Team"];
int ownedByID2 = m_World->GetComponent(m_CapturePointID2, "CapturePoint")["Team"];
int ownedByID3 = m_World->GetComponent(m_CapturePointID3, "CapturePoint")["Team"];
if (NumLoops < 20 && ownedByID3 == 2 & ownedByID1 == 1) {
if (NumLoops < 20 && ownedByID3 == m_BlueTeam & ownedByID1 == m_RedTeam) {
phase1Success = true;
}
if (NumLoops < 40 && NumLoops > 20 && ownedByID2 == 1) {
if (NumLoops < 40 && NumLoops > 20 && ownedByID2 == m_RedTeam) {
phase2Success = true;
}
if (NumLoops < 60 && NumLoops > 40 && ownedByID3 == 1) {
if (NumLoops < 60 && NumLoops > 40 && ownedByID3 == m_RedTeam) {
phase3Success = true;
}
if (NumLoops < 90 && NumLoops > 60 && ownedByID2 != 2) {
if (NumLoops < 90 && NumLoops > 60 && ownedByID2 != m_BlueTeam) {
phase4Success = true;
}
@@ -416,21 +402,21 @@ void CapturePointTest::UpdateTest7() {
//loop 20 = team1 takes 2, team 1 leaves 1 -> team1 next = 1, team2 next = still 2
if (NumLoops == 20) {
//leave previous
DoLeaveEvent(m_PlayerID2, m_CapturePointID);
DoLeaveEvent(m_PlayerID, m_CapturePointID3);
DoLeaveEvent(m_BlueTeamPlayer, m_CapturePointID);
DoLeaveEvent(m_RedTeamPlayer, m_CapturePointID3);
DoTouchEvent(m_PlayerID, m_CapturePointID2);
DoTouchEvent(m_RedTeamPlayer, m_CapturePointID2);
}
//loop 40 = team1 takes 1, team2:s next cap point should now be 1 (instead of 2)
if (NumLoops == 40) {
//leave previous, take next
DoLeaveEvent(m_PlayerID, m_CapturePointID2);
DoTouchEvent(m_PlayerID, m_CapturePointID);
DoLeaveEvent(m_RedTeamPlayer, m_CapturePointID2);
DoTouchEvent(m_RedTeamPlayer, m_CapturePointID);
}
//loop 60 = team2 tries to take 2, this shouldnt work now
if (NumLoops == 60) {
DoLeaveEvent(m_PlayerID, m_CapturePointID);
DoTouchEvent(m_PlayerID2, m_CapturePointID2);
DoLeaveEvent(m_RedTeamPlayer, m_CapturePointID);
DoTouchEvent(m_BlueTeamPlayer, m_CapturePointID2);
}
}
void CapturePointTest::UpdateTest8() {
@@ -440,21 +426,21 @@ void CapturePointTest::UpdateTest8() {
//loop 20 = team1 takes 2, team 1 leaves 1 -> team1 next = 1, team2 next = still 2
if (NumLoops == 20) {
//leave previous
DoLeaveEvent(m_PlayerID2, m_CapturePointID3);
DoLeaveEvent(m_PlayerID, m_CapturePointID);
DoLeaveEvent(m_BlueTeamPlayer, m_CapturePointID3);
DoLeaveEvent(m_RedTeamPlayer, m_CapturePointID);
DoTouchEvent(m_PlayerID, m_CapturePointID2);
DoTouchEvent(m_RedTeamPlayer, m_CapturePointID2);
}
//loop 40 = team1 takes 3, team2:s next cap point should now be 1 (instead of 2)
if (NumLoops == 40) {
//leave previous, take next
DoLeaveEvent(m_PlayerID, m_CapturePointID2);
DoTouchEvent(m_PlayerID, m_CapturePointID3);
DoLeaveEvent(m_RedTeamPlayer, m_CapturePointID2);
DoTouchEvent(m_RedTeamPlayer, m_CapturePointID3);
}
//loop 60 = team2 tries to take 2, this shouldnt work now
if (NumLoops == 60) {
DoLeaveEvent(m_PlayerID, m_CapturePointID3);
DoTouchEvent(m_PlayerID2, m_CapturePointID2);
DoLeaveEvent(m_RedTeamPlayer, m_CapturePointID3);
DoTouchEvent(m_BlueTeamPlayer, m_CapturePointID2);
}
}
void CapturePointTest::Tick()
+2 -2
View File
@@ -11,7 +11,6 @@
#include "Core/EKeyDown.h"
#include "Core/EntityFile.h"
#include "Core/SystemPipeline.h"
#include "PlayerSystem.h"
#include "Core/EntityFilePreprocessor.h"
#include "Core/EntityFileParser.h"
@@ -58,9 +57,10 @@ private:
EventBroker* m_EventBroker;
World* m_World;
SystemPipeline* m_SystemPipeline;
EntityID m_PlayerID, m_PlayerID2, m_CapturePointID, m_CapturePointID2, m_CapturePointID3;
EntityID m_RedTeamPlayer, m_BlueTeamPlayer, m_CapturePointID, m_CapturePointID2, m_CapturePointID3;
int m_RunTestNumber;
bool phase1Success = false, phase2Success = false, phase3Success = false, phase4Success = false;
int m_RedTeam, m_BlueTeam;
};
#endif
+1 -2
View File
@@ -3,7 +3,7 @@ using boost::unit_test_framework::test_suite;
using boost::unit_test_framework::test_case;
#include "HealthSystemTest.h"
#include "Game/HealthSystem.h"
#include "Game/Systems/HealthSystem.h"
BOOST_AUTO_TEST_SUITE(HealthSystemSuite)
@@ -52,7 +52,6 @@ GameHealthSystemTest::GameHealthSystemTest()
// Create system pipeline
m_SystemPipeline = new SystemPipeline(m_EventBroker);
m_SystemPipeline->AddSystem<PlayerSystem>(0);
m_SystemPipeline->AddSystem<HealthSystem>(0);
//The Test
-2
View File
@@ -14,8 +14,6 @@
#include "Core/EKeyDown.h"
#include "Core/EntityFile.h"
#include "Core/SystemPipeline.h"
#include "RaptorCopterSystem.h"
#include "PlayerSystem.h"
#include "Editor/EditorSystem.h"
class GameHealthSystemTest
+4 -4
View File
@@ -43,7 +43,7 @@ template<typename Tree>
void RegionTest(Tree& tree)
{
AABB aabb;
aabb.CreateFromCenter(glm::vec3(rand() % LEVEL_BOUNDS, rand() % LEVEL_BOUNDS, rand() % LEVEL_BOUNDS),
aabb.FromOriginSize(glm::vec3(rand() % LEVEL_BOUNDS, rand() % LEVEL_BOUNDS, rand() % LEVEL_BOUNDS),
glm::vec3(rand() % MAXSIZE, rand() % MAXSIZE, rand() % MAXSIZE));
std::vector<AABB> outVec;
tree.BoxesInSameRegion(aabb, outVec);
@@ -63,7 +63,7 @@ void BoxTest(Tree& tree)
{
AABB outBox;
AABB aabb;
aabb.CreateFromCenter(glm::vec3(rand() % LEVEL_BOUNDS, rand() % LEVEL_BOUNDS, rand() % LEVEL_BOUNDS),
aabb.FromOriginSize(glm::vec3(rand() % LEVEL_BOUNDS, rand() % LEVEL_BOUNDS, rand() % LEVEL_BOUNDS),
glm::vec3(rand() % MAXSIZE, rand() % MAXSIZE, rand() % MAXSIZE));
tree.BoxCollides(aabb, outBox);
}
@@ -88,14 +88,14 @@ void TestLoop(TestFunction xTest)
for (int i = 0; i < NUM_STATICS; ++i) {
center = glm::vec3(rand() % LEVEL_BOUNDS, rand() % LEVEL_BOUNDS, rand() % LEVEL_BOUNDS);
size = glm::vec3(rand() % MAXSIZE, rand() % MAXSIZE, rand() % MAXSIZE);
aabb.CreateFromCenter(center, size);
aabb.FromOriginSize(center, size);
tree.AddStaticObject(aabb);
}
for (int fr = 0; fr < TEST_FRAMES; ++fr) {
for (int i = 0; i < NUM_DYNAMICS; ++i) {
center = glm::vec3(rand() % LEVEL_BOUNDS, rand() % LEVEL_BOUNDS, rand() % LEVEL_BOUNDS);
size = glm::vec3(rand() % MAXSIZE, rand() % MAXSIZE, rand() % MAXSIZE);
aabb.CreateFromCenter(center, size);
aabb.FromOriginSize(center, size);
tree.AddDynamicObject(aabb);
}
+2 -2
View File
@@ -100,7 +100,7 @@ void OctTree::Update(float dt, World* world, Camera* cam)
{
AABB aabb;
for (ComponentWrapper& c : *world->GetComponents("Collision")) {
aabb.CreateFromCenter(c["BoxCenter"], c["BoxSize"]);
aabb.FromOriginSize(c["BoxCenter"], c["BoxSize"]);
AddStaticObject(aabb);
}
const glm::vec4 redCol = glm::vec4(1, 0.2f, 0, 1);
@@ -118,7 +118,7 @@ void OctTree::Update(float dt, World* world, Camera* cam)
AABB box;
auto boxPos = cam->Position() + 1.2f*cam->Forward();
box.CreateFromCenter(boxPos, boxSize);
box.FromOriginSize(boxPos, boxSize);
ComponentWrapper transform = world->GetComponent(m_BoxID, "Transform");
transform["Position"] = boxPos;
ComponentWrapper model = world->GetComponent(m_BoxID, "Model");