Compare commits

...

86 Commits

Author SHA1 Message Date
Tleety c7099de9e4 Merge remote-tracking branch 'origin/master' into ScoreBoard
# Conflicts:
#	assets
2016-03-07 10:58:55 +01:00
Tleety cb9dad5c67 Merge remote-tracking branch 'origin/master' into ScoreBoard 2016-03-07 10:49:57 +01:00
Tleety a8f2d0a8e6 Some assets, some fixes to the scoreboard 2016-03-07 10:48:46 +01:00
Jace b7a7f7fd5e ???? 2016-03-04 15:02:01 +01:00
Jace 434ff1e7eb ???? 2016-03-04 10:06:49 +01:00
Jace e58b5ffd6f Merge remote-tracking branch 'origin/Movement' into Weapons
# Conflicts:
#	resources/Schema/Entities/Player.xml
#	src/Game/Systems/Weapon/AssaultWeaponBehaviour.cpp
2016-03-04 09:43:34 +01:00
Jace 4557455e49 HUD stuff 2016-03-04 09:41:12 +01:00
viktorljung c1f5cf65a7 Movement animations 2016-03-04 09:39:16 +01:00
Jace a8ad85b004 Merge remote-tracking branch 'origin/IconsForPlaytest' into Weapons 2016-03-04 09:39:11 +01:00
Jace 3ac8a5c7ef Working map 2016-03-04 09:38:38 +01:00
Jace ebd4c58c41 "Fixed" weapon spawning over network 2016-03-04 09:23:18 +01:00
Jace 42cccfbac0 Merge branch 'Weapons' of github.com:teamfisk/TacticalZ into Weapons
# Conflicts:
#	assets
#	src/Game/Systems/Weapon/AssaultWeaponBehaviour.cpp
2016-03-04 08:56:58 +01:00
Jocke e2674d915e Constrained weapon behavior to client side only 2016-03-04 08:55:55 +01:00
Jace 2b55450c18 Cray cray weapons 2016-03-04 08:54:59 +01:00
viktorljung 7ba0e4ea9d Run, Strafe and jump animations now playing 2016-03-04 08:35:02 +01:00
Jocke d78a7e20e2 Merge branch 'master' into Weapons 2016-03-04 08:29:33 +01:00
Jocke 5b80ba4398 Made 3 new healthHUDs 1 for each class. 2016-03-04 08:22:48 +01:00
Jocke 2187df080a Merge branch 'master' into IconsForPlaytest 2016-03-04 05:17:54 +01:00
Jocke eec40b6519 We can now read larger packets than 65536 bytes in TCPClient::readBuffer() 2016-03-04 05:10:18 +01:00
Jace 177667eef5 The only working branch ever 2016-03-04 05:02:25 +01:00
antc13 1f047ea300 Latest Map version (Hopefully) Now with textures. Made some very minor tweaks as well, by removing duplicated meshes. 2016-03-04 04:22:04 +01:00
Joachim Pettersson e6472b9745 Merge pull request #170 from teamfisk/ScoreBoard
I Hope To God That This Works.
2016-03-04 04:03:46 +01:00
Tleety 19ee66fc75 Fix 2016-03-04 03:57:37 +01:00
Tobias Dahl 7675af1ef6 Merge pull request #168 from teamfisk/SniperSprintBranch
Sniper sprint effect
2016-03-04 03:31:53 +01:00
Jocke 2507516a85 Tweaked values for the effect to look better 2016-03-04 03:28:58 +01:00
Jocke 0398006fdc added safety ifs and renamed dasheffect to sprinteffect 2016-03-04 03:19:41 +01:00
Jace dbafab2cef fixup! First attempt at AssaultWeapon animations! 2016-03-04 03:07:36 +01:00
Tleety 103fe98fe2 KD now updated 2016-03-04 03:06:42 +01:00
Jace 609f6619a6 Merge remote-tracking branch 'origin/Animations' into Weapons 2016-03-04 03:04:36 +01:00
Jace 03ea9bcf40 fixup! Duration no longer needed 2016-03-04 03:00:03 +01:00
Jace d37b7c2277 fixup! First attempt at AssaultWeapon animations! 2016-03-04 02:55:19 +01:00
Tleety 0e95c5bb95 Fixes 2016-03-04 02:52:04 +01:00
Jace b7fa7f9119 Duration no longer needed 2016-03-04 02:50:03 +01:00
Jace 608e339172 Merge remote-tracking branch 'origin/Animations' into Weapons 2016-03-04 02:48:41 +01:00
Jace 3a8f7c5d03 First attempt at AssaultWeapon animations! 2016-03-04 02:48:03 +01:00
Tleety 45991000ae Removed unused code 2016-03-04 02:20:42 +01:00
Tleety 778bbd13ca double's should now be displayed with only 1 decimal. 2016-03-04 02:19:13 +01:00
Tleety 00b5a1771c Should now work fully, not KD tho 2016-03-04 01:34:29 +01:00
antc13 86306b3132 Merge branch 'master' of https://github.com/teamfisk/TacticalZ
# Conflicts:
#	resources/Schema/Entities/NewMap2version2.xml
2016-03-04 01:15:42 +01:00
Tleety 66374b7ff9 Should now track score correctly 2016-03-04 00:21:01 +01:00
Tleety fe7c1dd808 Merge remote-tracking branch 'origin/DeathEventUsesPlayerID' into ScoreBoard
# Conflicts:
#	include/Engine/Network/Server.h
2016-03-03 23:56:57 +01:00
Tleety 118d61c711 Should now remove players from scoreboard if they disconnect 2016-03-03 23:55:52 +01:00
Jace 4dd46e2e21 Merge branch 'master' into Weapons 2016-03-03 23:46:46 +01:00
Jace 7e6d32aaec Fixed AssaultWeapon reload logic 2016-03-03 23:45:28 +01:00
Jace 9426942988 Merge pull request #169 from teamfisk/Animations
Animations
2016-03-03 23:45:24 +01:00
stiffly 2167b6f7b1 Fix for previous commit.. 2016-03-03 23:43:50 +01:00
Jace 217c3fe55c Fixes 2016-03-03 22:58:45 +01:00
Tleety 0a21fe15dd Merge remote-tracking branch 'origin/master' into ScoreBoard
# Conflicts:
#	resources/Schema/Components.xsd
#	resources/Schema/Entities/Player.xml
#	resources/Schema/Types/Entity.xsd
2016-03-03 22:56:39 +01:00
Tleety 011aa53bc0 ScoreScreen things 2016-03-03 22:55:18 +01:00
stiffly 714665f0a3 Updated the PlayerID getter in Server.cpp. 2016-03-03 22:55:12 +01:00
stiffly 8466a282b7 The server will now parse a death event and pass it forward with a KillDeath event to the score system. 2016-03-03 22:48:42 +01:00
Jace 80ad76c023 Merge branch 'Playtest2-Fallback' of github.com:teamfisk/TacticalZ into Playtest2-Fallback 2016-03-03 22:25:46 +01:00
Jace c84d7ebb8f PlayerAssaultFallbackBlue and PlayerAssaultFallbackRed 2016-03-03 22:25:07 +01:00
Jocke ae13a2db6b Player cannot see their own sprint effect. 2016-03-03 22:09:51 +01:00
Jocke 984b8ad3e9 SprintEffect defaults to 30% extra speed. 2016-03-03 21:57:27 +01:00
Tleety f5ea4e06c7 Map 2016-03-03 21:37:18 +01:00
Jocke b1148c0c6c Added a afterimage SprintEffect for the Sniper. 2016-03-03 21:24:31 +01:00
Jace 6532e9896e fixup! Playtest 2 Fallback Map 2016-03-03 21:05:21 +01:00
Jace e24a0b127b Added Ability cooldown UI and missing texture 2016-03-03 20:59:30 +01:00
Tleety 00c585de3c Score should now track to all clients 2016-03-03 20:45:16 +01:00
Jace c0e160833c Playtest 2 Fallback Map 2016-03-03 20:43:28 +01:00
Jace cbb2ec2fd6 Unique ids for entity nodes in the editor to prevent weird behaviour when multiple entities have the same name 2016-03-03 20:43:28 +01:00
Jocke a5c1e34b8d Merge remote-tracking branch 'origin/master' into SniperSprintBranch 2016-03-03 18:49:42 +01:00
Jocke 06b7052bf2 Merge remote-tracking branch 'origin/master' into SniperSprintBranch 2016-03-03 18:26:47 +01:00
Tleety 3e9ad7dc14 Merge remote-tracking branch 'origin/master' into ScoreBoard 2016-03-03 15:57:26 +01:00
Tleety 8b86c73ecc Merge remote-tracking branch 'origin/FixNetworkBugs' into ScoreBoard 2016-03-03 15:49:15 +01:00
Tleety c125f8c5f5 Merge branch 'master' into ScoreBoard 2016-03-03 15:18:46 +01:00
Tleety ed1d203c72 Merge branch 'master' into ScoreBoard 2016-03-03 14:07:44 +01:00
Tleety f4983cf961 WIP 2016-03-03 13:53:40 +01:00
Tleety 96bc5db7bb Merge commit '0e8b97dbbade6bb39c6f2b8af6c1cfc43ce67cde' into ScoreBoard
# Conflicts:
#	resources/Schema/Entities/Player.xml
#	src/Game/Game.cpp
2016-03-03 13:22:28 +01:00
Tleety c8aeae2c96 WIP 2016-03-03 12:58:35 +01:00
Tleety ff6e2167d4 Some new events and changes to ScoreSystem 2016-03-03 11:25:06 +01:00
Tleety 27d3ec4118 Added some fields in score components to track more data. Added some logic to the ScoreSystem class 2016-03-03 09:49:20 +01:00
Tleety 40c66f76ae A component for tracking score for players. 2016-03-03 01:28:43 +01:00
Tleety 047a119e3f ScoreScreenSystem things 2016-03-03 01:04:24 +01:00
Tleety d74ae4e411 Some fixes to the Player and map, added skeleton system for the ScoreScreen 2016-03-03 00:55:44 +01:00
Tleety 050ce57e24 Fixed AbilityUI for player and changed so the AbilityCooldown system wont need a child with text, instead just write if it has one. 2016-03-03 00:32:07 +01:00
Tleety 8005ca377c Merge branch 'master' into ScoreBoard
# Conflicts:
#	resources/Schema/Components.xsd
2016-03-02 23:26:33 +01:00
Tleety 9c9d1eede6 Components for ScoreScreen Added 2016-03-02 22:34:03 +01:00
antc13 e6f46b396e Merge branch 'master' of https://github.com/teamfisk/TacticalZ 2016-03-02 11:44:29 +01:00
antc13 25331ddd70 Merge branch 'master' of https://github.com/teamfisk/TacticalZ 2016-03-01 15:28:27 +01:00
antc13 141c58005f Changing Models WIP 2016-03-01 15:28:22 +01:00
antc13 21ca3f5b38 Merge branch 'master' of https://github.com/teamfisk/TacticalZ 2016-02-25 18:22:13 +01:00
antc13 d9afb527a4 Merge branch 'master' of https://github.com/teamfisk/TacticalZ 2016-02-25 16:06:29 +01:00
antc13 ad97f7f8a9 Merge branch 'master' of https://github.com/teamfisk/TacticalZ 2016-02-25 10:55:20 +01:00
antc13 c9c5e9841d New Map WIP, Map2 version 2 is with models on both sides. 2016-02-25 10:55:14 +01:00
88 changed files with 33516 additions and 2440 deletions
+1 -1
Submodule assets updated: 7a6d70787b...0ae736570b
+3 -2
View File
@@ -10,8 +10,9 @@ namespace Events
struct PlayerDeath : Event struct PlayerDeath : Event
{ {
//KilledBy,KilledByWhat is optional for now. It might be used later in the playerlog-system //KilledBy,KilledByWhat is optional for now. It might be used later in the playerlog-system
EntityWrapper Player; EntityWrapper Player = EntityWrapper::Invalid;
std::string KilledByWhat; EntityWrapper Killer = EntityWrapper::Invalid;
std::string KilledByWhat = "";
}; };
} }
+1 -1
View File
@@ -68,7 +68,7 @@ protected:
const std::string m_ComponentType; const std::string m_ComponentType;
virtual void UpdateComponent(EntityWrapper& entity, ComponentWrapper& component, double dt) = 0; virtual void UpdateComponent(EntityWrapper& entity, ComponentWrapper& scoreScreen, double dt) = 0;
}; };
class ImpureSystem : public virtual System class ImpureSystem : public virtual System
@@ -12,8 +12,8 @@ template <typename EventContext>
class EditorCameraInputController : public FirstPersonInputController<EventContext> class EditorCameraInputController : public FirstPersonInputController<EventContext>
{ {
public: public:
EditorCameraInputController(EventBroker* eventBroker, unsigned int playerID) EditorCameraInputController(EventBroker* eventBroker, unsigned int playerID, EntityWrapper playerEntity)
: FirstPersonInputController(eventBroker, playerID) : FirstPersonInputController(eventBroker, playerID, playerEntity)
{ {
EVENT_SUBSCRIBE_MEMBER(m_EMousePress, &EditorCameraInputController::OnMousePress); EVENT_SUBSCRIBE_MEMBER(m_EMousePress, &EditorCameraInputController::OnMousePress);
EVENT_SUBSCRIBE_MEMBER(m_EMouseRelease, &EditorCameraInputController::OnMouseRelease); EVENT_SUBSCRIBE_MEMBER(m_EMouseRelease, &EditorCameraInputController::OnMouseRelease);
@@ -6,12 +6,13 @@
#include "../Core/ELockMouse.h" #include "../Core/ELockMouse.h"
#include "../Game/Events/EDashAbility.h" #include "../Game/Events/EDashAbility.h"
#include "InputHandler.h" #include "InputHandler.h"
#include "Rendering/EAutoAnimationBlend.h"
template <typename EventContext> template <typename EventContext>
class FirstPersonInputController : public InputController<EventContext> class FirstPersonInputController : public InputController<EventContext>
{ {
public: public:
FirstPersonInputController(EventBroker* eventBroker, int playerID); FirstPersonInputController(EventBroker* eventBroker, int playerID, EntityWrapper playerEntity);
virtual const glm::vec3 Movement() const { return m_Movement; } virtual const glm::vec3 Movement() const { return m_Movement; }
virtual const glm::vec3 Rotation() const { return m_Rotation; } virtual const glm::vec3 Rotation() const { return m_Rotation; }
@@ -34,6 +35,8 @@ public:
protected: protected:
const int m_PlayerID; const int m_PlayerID;
EntityWrapper m_PlayerEntity;
bool m_MouseLocked = false; bool m_MouseLocked = false;
glm::vec3 m_Rotation; glm::vec3 m_Rotation;
glm::vec3 m_Movement; glm::vec3 m_Movement;
@@ -65,9 +68,10 @@ protected:
}; };
template <typename EventContext> template <typename EventContext>
FirstPersonInputController<EventContext>::FirstPersonInputController(EventBroker* eventBroker, int playerID) FirstPersonInputController<EventContext>::FirstPersonInputController(EventBroker* eventBroker, int playerID, EntityWrapper playerEntity)
: InputController(eventBroker) : InputController(eventBroker)
, m_PlayerID(playerID) , m_PlayerID(playerID)
, m_PlayerEntity(playerEntity)
{ {
EVENT_SUBSCRIBE_MEMBER(m_ELockMouse, &FirstPersonInputController::OnLockMouse); EVENT_SUBSCRIBE_MEMBER(m_ELockMouse, &FirstPersonInputController::OnLockMouse);
EVENT_SUBSCRIBE_MEMBER(m_EUnlockMouse, &FirstPersonInputController::OnUnlockMouse); EVENT_SUBSCRIBE_MEMBER(m_EUnlockMouse, &FirstPersonInputController::OnUnlockMouse);
@@ -118,13 +122,84 @@ bool FirstPersonInputController<EventContext>::OnCommand(const Events::InputComm
if (e.Command == "Forward") { if (e.Command == "Forward") {
float val = glm::clamp(e.Value, -1.f, 1.f); float val = glm::clamp(e.Value, -1.f, 1.f);
m_Movement.z = -val; m_Movement.z = -val;
if (m_PlayerEntity.Valid()) {
EntityWrapper playerModel = m_PlayerEntity.FirstChildByName("PlayerModel");
if (playerModel.Valid()) {
if (val > 0) {
Events::AutoAnimationBlend aeb;
aeb.Duration = 0.1;
if(m_Crouching) {
aeb.NodeName = "Walk";
} else {
aeb.NodeName = "Run";
}
aeb.RootNode = playerModel;
aeb.Start = true;
m_EventBroker->Publish(aeb);
} else if (val < 0) {
Events::AutoAnimationBlend aeb;
aeb.Duration = 0.1;
if (m_Crouching) {
aeb.NodeName = "Walk";
} else {
aeb.NodeName = "Run";
}
aeb.RootNode = playerModel;
aeb.Start = true;
aeb.Reverse = true;
m_EventBroker->Publish(aeb);
} else {
}
}
}
} }
if (e.Command == "Right") { if (e.Command == "Right") {
float val = glm::clamp(e.Value, -1.f, 1.f); float val = glm::clamp(e.Value, -1.f, 1.f);
m_Movement.x = val; m_Movement.x = val;
if (m_PlayerEntity.Valid()) {
EntityWrapper playerModel = m_PlayerEntity.FirstChildByName("PlayerModel");
if (playerModel.Valid()) {
if (val > 0) {
Events::AutoAnimationBlend aeb;
aeb.Duration = 0.1;
aeb.NodeName = "Right";
aeb.RootNode = playerModel;
aeb.Start = true;
m_EventBroker->Publish(aeb);
} else if (val < 0) {
Events::AutoAnimationBlend aeb;
aeb.Duration = 0.1;
aeb.NodeName = "Left";
aeb.RootNode = playerModel;
aeb.Start = true;
m_EventBroker->Publish(aeb);
} else {
}
}
}
} }
if (glm::length2(m_Movement) > 0) { if (glm::length2(m_Movement) > 0) {
m_Movement = glm::normalize(m_Movement); m_Movement = glm::normalize(m_Movement);
} else {
if (m_PlayerEntity.Valid()) {
EntityWrapper playerModel = m_PlayerEntity.FirstChildByName("PlayerModel");
if (playerModel.Valid()) {
Events::AutoAnimationBlend aeb;
aeb.Duration = 0.1;
aeb.NodeName = "Idle";
aeb.RootNode = playerModel;
m_EventBroker->Publish(aeb);
}
}
} }
} }
@@ -159,6 +234,32 @@ bool FirstPersonInputController<EventContext>::OnCommand(const Events::InputComm
if (e.Command == "Crouch") { if (e.Command == "Crouch") {
m_Crouching = e.Value > 0; m_Crouching = e.Value > 0;
if (m_PlayerEntity.Valid()) {
EntityWrapper playerModel = m_PlayerEntity.FirstChildByName("PlayerModel");
if (playerModel.Valid()) {
if (e.Value == 0.f) {
Events::AutoAnimationBlend aeb;
aeb.Duration = 0.3;
aeb.NodeName = "StandMovement";
aeb.RootNode = playerModel;
aeb.Start = true;
aeb.Restart = true;
aeb.SingleLevelBlend = true;
m_EventBroker->Publish(aeb);
} else if(e.Value == 1.0f) {
Events::AutoAnimationBlend aeb;
aeb.Duration = 0.3;
aeb.NodeName = "CrouchMovement";
aeb.RootNode = playerModel;
aeb.Start = true;
aeb.Restart = true;
aeb.SingleLevelBlend = true;
m_EventBroker->Publish(aeb);
}
}
}
} }
if (e.Command == "SpecialAbility") { if (e.Command == "SpecialAbility") {
+1 -1
View File
@@ -52,7 +52,7 @@ public:
void Connect(std::string address, int port); void Connect(std::string address, int port);
void Update() override; void Update() override;
private: private:
UDPClient m_Unreliable; //UDPClient m_Unreliable;
TCPClient m_Reliable; TCPClient m_Reliable;
std::vector<Events::PlayerSpawned> m_PlayerSpawnEvents; std::vector<Events::PlayerSpawned> m_PlayerSpawnEvents;
void parseSpawnEvents(); void parseSpawnEvents();
+19
View File
@@ -0,0 +1,19 @@
#ifndef Events_KillDeath_h__
#define Events_KillDeath_h__
#include "Core/EventBroker.h"
typedef unsigned int PlayerID;
namespace Events
{
struct KillDeath : public Event
{
PlayerID Casualty = -1;
PlayerID Killer = -1;
};
}
#endif
+17
View File
@@ -0,0 +1,17 @@
#ifndef Events_PlayerConnected
#define Events_PlayerConnected
#include "Core/EventBroker.h"
namespace Events
{
struct PlayerConnected : public Event
{
std::string PlayerName = "";
int PlayerID = -1;
};
}
#endif // !Events_PlayerConnected
+8 -2
View File
@@ -21,6 +21,9 @@
#include "Core/EEntityDeleted.h" #include "Core/EEntityDeleted.h"
#include "Core/EComponentDeleted.h" #include "Core/EComponentDeleted.h"
#include "Core/EAmmoPickup.h" #include "Core/EAmmoPickup.h"
#include "Core/EPlayerDeath.h"
#include "Network/EPlayerConnected.h"
#include "Network/EKillDeath.h"
class Server : public Network class Server : public Network
{ {
@@ -33,7 +36,7 @@ public:
private: private:
// Network channels // Network channels
TCPServer m_Reliable; TCPServer m_Reliable;
UDPServer m_Unreliable; //UDPServer m_Unreliable;
UDPServer m_ServerlistRequest; UDPServer m_ServerlistRequest;
// dont forget to set these in the childrens receive logic // dont forget to set these in the childrens receive logic
boost::asio::ip::address m_Address; boost::asio::ip::address m_Address;
@@ -77,7 +80,8 @@ private:
void parseOnPlayerDamage(Packet& packet); void parseOnPlayerDamage(Packet& packet);
void identifyPacketLoss(); void identifyPacketLoss();
void kick(PlayerID player); void kick(PlayerID player);
PlayerID GetPlayerIDFromEndpoint(); PlayerID getPlayerIDFromEndpoint();
PlayerID getPlayerIDFromEntityID(EntityID entityID);
void parsePlayerTransform(Packet& packet); void parsePlayerTransform(Packet& packet);
void parseOnInputCommand(Packet& packet); void parseOnInputCommand(Packet& packet);
void parseClientPing(); void parseClientPing();
@@ -103,6 +107,8 @@ private:
bool OnPlayerDamage(const Events::PlayerDamage& e); bool OnPlayerDamage(const Events::PlayerDamage& e);
EventRelay<Server, Events::AmmoPickup> m_EAmmoPickup; EventRelay<Server, Events::AmmoPickup> m_EAmmoPickup;
bool OnAmmoPickup(const Events::AmmoPickup& e); bool OnAmmoPickup(const Events::AmmoPickup& e);
EventRelay<Server, Events::PlayerDeath> m_EPlayerDeath;
bool OnPlayerDeath(const Events::PlayerDeath& e);
}; };
#endif #endif
+1
View File
@@ -62,6 +62,7 @@ public:
double progress; double progress;
bool Start; bool Start;
bool SingleBlend; bool SingleBlend;
double Weight;
std::unordered_map<EntityWrapper, double> StartWeights; std::unordered_map<EntityWrapper, double> StartWeights;
}; };
@@ -19,6 +19,8 @@ struct AutoAnimationBlend : Event
bool Restart = false; bool Restart = false;
bool SingleLevelBlend = false; bool SingleLevelBlend = false;
double Weight = -1.0;
EntityWrapper AnimationEntity = EntityWrapper::Invalid; EntityWrapper AnimationEntity = EntityWrapper::Invalid;
}; };
@@ -30,6 +30,8 @@ private:
bool m_LeftFoot = false; bool m_LeftFoot = false;
// To get a difference when calculating the walking state. // To get a difference when calculating the walking state.
glm::vec3 m_LastPosition = glm::vec3(); glm::vec3 m_LastPosition = glm::vec3();
// Used to track afterimages for sprint effect.
float m_SprintEffectTimer;
// The logic for making the sound play when player is moving // The logic for making the sound play when player is moving
void playerStep(double dt); void playerStep(double dt);
// Spawn a hexagon at origin of an Entity // Spawn a hexagon at origin of an Entity
+44
View File
@@ -0,0 +1,44 @@
#ifndef ScoreScreenSystem_h__
#define ScoreScreenSystem_h__
#include "Core/System.h"
#include "Core/ResourceManager.h"
#include "Core/EntityFile.h"
#include "Network/EKillDeath.h"
#include "Core/EPlayerSpawned.h"
#include "Network/EPlayerConnected.h"
#include "Network/EPlayerDisconnected.h"
#include "GLM.h"
class ScoreScreenSystem : public PureSystem
{
public:
ScoreScreenSystem(SystemParams params);
virtual void UpdateComponent(EntityWrapper& entity, ComponentWrapper& scoreScreen, double dt) override;
EventRelay<ScoreScreenSystem, Events::KillDeath> m_EPlayerDeath;
bool OnPlayerDeath(const Events::KillDeath& e);
EventRelay<ScoreScreenSystem, Events::PlayerSpawned> m_EPlayerSpawned;
bool OnPlayerSpawn(const Events::PlayerSpawned& e);
EventRelay<ScoreScreenSystem, Events::PlayerConnected> m_EPlayerConnected;
bool OnPlayerConnected(const Events::PlayerConnected& e);
EventRelay<ScoreScreenSystem, Events::PlayerDisconnected> m_EPlayerDisconnected;
bool OnPlayerDisconnected(const Events::PlayerDisconnected& e);
private:
struct PlayerData {
int ID = -1;
std::string Name = "";
int Team = 1;
int Kills = 0;
int Deaths = 0;
EntityWrapper Player = EntityWrapper::Invalid;
};
std::vector<int> m_DisconnectedIdentities;
int m_PlayerCounter = 0;
std::unordered_map<int, PlayerData> m_PlayerIdentities;
};
#endif
+2
View File
@@ -2,6 +2,8 @@
#define AmmunitionHUDSystem_h__ #define AmmunitionHUDSystem_h__
#include <boost/lexical_cast.hpp> #include <boost/lexical_cast.hpp>
#include <sstream>
#include <iomanip>
#include "../../Engine/Core/System.h" #include "../../Engine/Core/System.h"
#include "../../Engine/GLM.h" #include "../../Engine/GLM.h"
@@ -5,6 +5,7 @@
#include "Collision/Collision.h" #include "Collision/Collision.h"
#include "Core/EPlayerDamage.h" #include "Core/EPlayerDamage.h"
#include "Sound/EPlaySoundOnEntity.h" #include "Sound/EPlaySoundOnEntity.h"
#include "Rendering/EAutoAnimationBlend.h"
class AssaultWeaponBehaviour : public WeaponBehaviour<AssaultWeaponBehaviour> class AssaultWeaponBehaviour : public WeaponBehaviour<AssaultWeaponBehaviour>
{ {
@@ -20,6 +21,7 @@ public:
void OnPrimaryFire(ComponentWrapper cWeapon, WeaponInfo& wi) override; void OnPrimaryFire(ComponentWrapper cWeapon, WeaponInfo& wi) override;
void OnCeasePrimaryFire(ComponentWrapper cWeapon, WeaponInfo& wi) override; void OnCeasePrimaryFire(ComponentWrapper cWeapon, WeaponInfo& wi) override;
void OnReload(ComponentWrapper cWeapon, WeaponInfo& wi) override; void OnReload(ComponentWrapper cWeapon, WeaponInfo& wi) override;
void OnEquip(ComponentWrapper cWeapon, WeaponInfo& wi) override;
void OnHolster(ComponentWrapper cWeapon, WeaponInfo& wi) override; void OnHolster(ComponentWrapper cWeapon, WeaponInfo& wi) override;
//bool OnInputCommand(ComponentWrapper cWeapon, WeaponInfo& wi, const Events::InputCommand& e) override; //bool OnInputCommand(ComponentWrapper cWeapon, WeaponInfo& wi, const Events::InputCommand& e) override;
+83 -3
View File
@@ -9,6 +9,7 @@
#include "Systems/SpawnerSystem.h" #include "Systems/SpawnerSystem.h"
#include "Rendering/ESetCamera.h" #include "Rendering/ESetCamera.h"
#include "Core/ConfigFile.h" #include "Core/ConfigFile.h"
#include "Rendering/EAutoAnimationBlend.h"
template <typename ETYPE> template <typename ETYPE>
class WeaponBehaviour : public PureSystem class WeaponBehaviour : public PureSystem
@@ -31,6 +32,21 @@ public:
virtual void UpdateComponent(EntityWrapper& entity, ComponentWrapper& cWeapon, double dt) override virtual void UpdateComponent(EntityWrapper& entity, ComponentWrapper& cWeapon, double dt) override
{ {
EntityWrapper firstPersonWeapon = entity.FirstChildByName("Hands").FirstChildByName("AssaultWeapon");
EntityWrapper thirdPersonWeapon = entity.FirstChildByName("PlayerModel").FirstChildByName("AssaultWeapon");
if (IsClient && (firstPersonWeapon.Valid() || thirdPersonWeapon.Valid())) {
if (m_ActiveWeapons.count(entity) == 0) {
WeaponInfo& wi = m_ActiveWeapons[entity];
wi.Player = entity;
wi.WeaponEntity = entity;
wi.FirstPersonEntity = firstPersonWeapon;
wi.ThirdPersonEntity = thirdPersonWeapon;
OnEquip(cWeapon, wi);
}
}
auto weapon = getActiveWeapon(entity); auto weapon = getActiveWeapon(entity);
if (!weapon) { if (!weapon) {
return; return;
@@ -94,6 +110,64 @@ protected:
} }
} }
void playAnimation(EntityWrapper weaponModelEntity, const std::string& subTreeName, const std::string& animationNodeName)
{
EntityWrapper root = weaponModelEntity.FirstParentWithComponent("Model");
if (!root.Valid()) {
return;
}
EntityWrapper subTree = root.FirstChildByName(subTreeName);
if (!subTree.Valid()) {
return;
}
EntityWrapper animationNode = subTree.FirstChildByName(animationNodeName);
if (!animationNode.Valid()) {
return;
}
Events::AutoAnimationBlend eFireBlend;
eFireBlend.RootNode = root;
eFireBlend.NodeName = animationNodeName;
eFireBlend.Restart = true;
eFireBlend.Start = true;
m_EventBroker->Publish(eFireBlend);
}
void playAnimationAndReturn(EntityWrapper weaponModelEntity, const std::string& subTreeName, const std::string& animationNodeName)
{
EntityWrapper root = weaponModelEntity.FirstParentWithComponent("Model");
if (!root.Valid()) {
return;
}
EntityWrapper subTree = root.FirstChildByName(subTreeName);
if (!subTree.Valid()) {
return;
}
EntityWrapper animationNode = subTree.FirstChildByName(animationNodeName);
if (!animationNode.Valid()) {
return;
}
Events::AutoAnimationBlend eFireBlend;
eFireBlend.RootNode = root;
eFireBlend.NodeName = animationNodeName;
eFireBlend.Restart = true;
eFireBlend.Start = true;
m_EventBroker->Publish(eFireBlend);
Events::AutoAnimationBlend eIdleBlend;
eIdleBlend.RootNode = root;
eIdleBlend.NodeName = "Idle";
eIdleBlend.AnimationEntity = animationNode;
eIdleBlend.Delay = -0.2;
eIdleBlend.Duration = 0.2;
m_EventBroker->Publish(eIdleBlend);
}
private: private:
EventRelay<ETYPE, Events::SetCamera> m_ESetCamera; EventRelay<ETYPE, Events::SetCamera> m_ESetCamera;
bool _OnSetCamera(const Events::SetCamera& e) bool _OnSetCamera(const Events::SetCamera& e)
@@ -180,6 +254,10 @@ private:
void selectWeapon(ComponentWrapper cWeapon, EntityWrapper player) void selectWeapon(ComponentWrapper cWeapon, EntityWrapper player)
{ {
if (!IsServer) {
return;
}
// Don't reselect weapon if it's already active // Don't reselect weapon if it's already active
if (getActiveWeapon(player)) { if (getActiveWeapon(player)) {
return; return;
@@ -209,9 +287,11 @@ private:
// Spawn the weapon(s) // Spawn the weapon(s)
EntityWrapper firstPersonWeapon; EntityWrapper firstPersonWeapon;
EntityWrapper thirdPersonWeapon; EntityWrapper thirdPersonWeapon;
if (firstPersonAttachment.Valid()) { //if (IsClient) {
firstPersonWeapon = SpawnerSystem::Spawn(firstPersonAttachment, firstPersonAttachment); if (firstPersonAttachment.Valid()) {
} firstPersonWeapon = SpawnerSystem::Spawn(firstPersonAttachment, firstPersonAttachment);
}
//}
if (thirdPersonAttachment.Valid()) { if (thirdPersonAttachment.Valid()) {
thirdPersonWeapon = SpawnerSystem::Spawn(thirdPersonAttachment, thirdPersonAttachment); thirdPersonWeapon = SpawnerSystem::Spawn(thirdPersonAttachment, thirdPersonAttachment);
} }
+1 -1
View File
@@ -75,7 +75,7 @@ NumIterations=9
TextureQuality=0 TextureQuality=0
[GLOW] [GLOW]
Quality=3; Quality=3
[GLOW1] [GLOW1]
NumIterations=5 NumIterations=5
+2
View File
@@ -63,4 +63,6 @@
<xs:include schemaLocation="Components/FloatingEffect.xsd"/> <xs:include schemaLocation="Components/FloatingEffect.xsd"/>
<xs:include schemaLocation="Components/BoostIconsHUD.xsd"/> <xs:include schemaLocation="Components/BoostIconsHUD.xsd"/>
<xs:include schemaLocation="Components/InputCmdButton.xsd"/> <xs:include schemaLocation="Components/InputCmdButton.xsd"/>
<xs:include schemaLocation="Components/ScoreScreen.xsd"/>
<xs:include schemaLocation="Components/ScoreIdentity.xsd"/>
</xs:schema> </xs:schema>
@@ -11,10 +11,11 @@
<RPM>420</RPM> <RPM>420</RPM>
<ViewPunch>0.03</ViewPunch> <ViewPunch>0.03</ViewPunch>
<ViewReturnSpeed>0.18</ViewReturnSpeed> <ViewReturnSpeed>0.18</ViewReturnSpeed>
<ReloadTime>2</ReloadTime> <ReloadTime>1.65</ReloadTime>
<EquipTime>0.5</EquipTime> <EquipTime>0.5</EquipTime>
<TriggerHeld>false</TriggerHeld> <TriggerHeld>false</TriggerHeld>
<FireCooldown>0</FireCooldown> <FireCooldown>0</FireCooldown>
<ReloadQueued>false</ReloadQueued>
<IsReloading>false</IsReloading> <IsReloading>false</IsReloading>
<ReloadTimer>0</ReloadTimer> <ReloadTimer>0</ReloadTimer>
<CurrentTravel>0</CurrentTravel> <CurrentTravel>0</CurrentTravel>
@@ -44,6 +44,7 @@
</xs:element> </xs:element>
<xs:element name="TriggerHeld" type="t:bool" minOccurs="0"/> <xs:element name="TriggerHeld" type="t:bool" minOccurs="0"/>
<xs:element name="FireCooldown" type="t:double" minOccurs="0"/> <xs:element name="FireCooldown" type="t:double" minOccurs="0"/>
<xs:element name="ReloadQueued" type="t:bool" minOccurs="0"/>
<xs:element name="IsReloading" type="t:bool" minOccurs="0"/> <xs:element name="IsReloading" type="t:bool" minOccurs="0"/>
<xs:element name="ReloadTimer" type="t:double" minOccurs="0"/> <xs:element name="ReloadTimer" type="t:double" minOccurs="0"/>
<xs:element name="CurrentTravel" type="t:float" minOccurs="0"/> <xs:element name="CurrentTravel" type="t:float" minOccurs="0"/>
@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<ScoreIdentity xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="ScoreIdentity.xsd">
<Name></Name>
<ID>-1</ID>
<KD>0.0</KD>
<Kills>0</Kills>
<Deaths>0</Deaths>
<Ping>0</Ping>
<Connected>true</Connected>
</ScoreIdentity>
@@ -0,0 +1,32 @@
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:t="types">
<xs:import schemaLocation="../Types.xsd" namespace="types"/>
<xs:element name="ScoreIdentity">
<xs:annotation><xs:documentation>A component tracking data for the score of a player.</xs:documentation></xs:annotation>
<xs:complexType>
<xs:all>
<xs:element name="Name" type="t:string" minOccurs="0">
<xs:annotation><xs:documentation>A name for tracking score identities, this should be unique.</xs:documentation></xs:annotation>
</xs:element>
<xs:element name="ID" type="t:int" minOccurs="0">
<xs:annotation><xs:documentation>An id for tracking identities</xs:documentation></xs:annotation>
</xs:element>
<xs:element name="KD" type="t:double" minOccurs="0">
<xs:annotation><xs:documentation>The Kills per death score.</xs:documentation></xs:annotation>
</xs:element>
<xs:element name="Kills" type="t:int" minOccurs="0">
<xs:annotation><xs:documentation>The amount of kills.</xs:documentation></xs:annotation>
</xs:element>
<xs:element name="Deaths" type="t:int" minOccurs="0">
<xs:annotation><xs:documentation>The amount of deaths.</xs:documentation></xs:annotation>
</xs:element>
<xs:element name="Ping" type="t:int" minOccurs="0">
<xs:annotation><xs:documentation>Ping of a player.</xs:documentation></xs:annotation>
</xs:element>
<xs:element name="Connected" type="t:bool" minOccurs="0">
<xs:annotation><xs:documentation>If the player is currently connected or not</xs:documentation></xs:annotation>
</xs:element>
</xs:all>
</xs:complexType>
</xs:element>
</xs:schema>
@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<ScoreScreen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="ScoreScreen.xsd">
<TotalIdentities>0</TotalIdentities>
<NextPosition>0</NextPosition>
<Offset X="0.0" Y="0.0" Z="0.0"/>
</ScoreScreen>
@@ -0,0 +1,20 @@
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:t="types">
<xs:import schemaLocation="../Types.xsd" namespace="types"/>
<xs:element name="ScoreScreen">
<xs:annotation><xs:documentation>The screen where player scores will be shown.</xs:documentation></xs:annotation>
<xs:complexType>
<xs:all>
<xs:element name="TotalIdentities" type="t:int" minOccurs="0">
<xs:annotation><xs:documentation>The amount of score identities this scoreboard hold</xs:documentation></xs:annotation>
</xs:element>
<xs:element name="NextPosition" type="t:int" minOccurs="0">
<xs:annotation><xs:documentation>Where the next scoreIdentity should be placed.</xs:documentation></xs:annotation>
</xs:element>
<xs:element name="Offset" type="t:Vector" minOccurs="0">
<xs:annotation><xs:documentation>How much offset should be applied per position</xs:documentation></xs:annotation>
</xs:element>
</xs:all>
</xs:complexType>
</xs:element>
</xs:schema>
@@ -1,4 +1,5 @@
<?xml version="1.0" encoding="UTF-8" standalone="no" ?> <?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<SprintAbility xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="SprintAbility.xsd"> <SprintAbility xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="SprintAbility.xsd">
<StrengthOfEffect>2.0</StrengthOfEffect> <StrengthOfEffect>1.3</StrengthOfEffect>
<Active>false</Active>
</SprintAbility> </SprintAbility>
@@ -12,6 +12,9 @@
<xs:element name="StrengthOfEffect" type="t:double" minOccurs="0"> <xs:element name="StrengthOfEffect" type="t:double" minOccurs="0">
<xs:annotation><xs:documentation>This is the strength of the sprint effect</xs:documentation></xs:annotation> <xs:annotation><xs:documentation>This is the strength of the sprint effect</xs:documentation></xs:annotation>
</xs:element> </xs:element>
<xs:element name="Active" type="t:bool" minOccurs="0">
<xs:annotation><xs:documentation>True if currently sprinting.</xs:documentation></xs:annotation>
</xs:element>
</xs:all> </xs:all>
</xs:complexType> </xs:complexType>
</xs:element> </xs:element>
@@ -0,0 +1,38 @@
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<Entity xmlns:c="components" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../Types/Entity.xsd">
<Components>
<c:Collidable/>
<c:Model>
<Resource>Models/Props/PickUps/PickUpHolder.mesh</Resource>
</c:Model>
<c:Transform>
<Position X="-4.20782185" Y="7.18348074" Z="-51.9578781"/>
<Scale X="0.5" Y="0.5" Z="0.5"/>
<Orientation X="0" Y="0.324000001" Z="0"/>
</c:Transform>
</Components>
<Children>
<Entity>
<Components>
<c:AmmoPickup/>
<c:Model>
<Resource>Models/Props/PickUps/AmmoPickUp.mesh</Resource>
</c:Model>
<c:RaptorCopter>
<Speed>8</Speed>
<Axis X="0" Y="0.100000001" Z="0"/>
</c:RaptorCopter>
<c:Transform>
<Position X="0" Y="2.36784196" Z="0"/>
<Scale X="0.600000024" Y="0.600000024" Z="0.600000024"/>
<Orientation X="0" Y="72.7095108" Z="0"/>
</c:Transform>
<c:Trigger/>
</Components>
<Children/>
</Entity>
</Children>
</Entity>
@@ -0,0 +1,41 @@
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<Entity name="BlendTreeAim" xmlns:c="components" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../Types/Entity.xsd">
<Components>
<c:Blend>
<Pose1>AimPrimary</Pose1>
<Pose2>AimSecondary</Pose2>
<Weight>0</Weight>
<SubTreeRoot>true</SubTreeRoot>
</c:Blend>
<c:Transform/>
</Components>
<Children>
<Entity name="AimSecondary">
<Components>
<c:Animation>
<AnimationName>AimSecWepA</AnimationName>
<Time>0.5</Time>
<Loop>false</Loop>
<Additive>true</Additive>
</c:Animation>
<c:Transform/>
</Components>
<Children/>
</Entity>
<Entity name="AimPrimary">
<Components>
<c:Animation>
<AnimationName>AimRifleA</AnimationName>
<Time>0.5</Time>
<Loop>false</Loop>
<Additive>true</Additive>
</c:Animation>
<c:Transform/>
</Components>
<Children/>
</Entity>
</Children>
</Entity>
@@ -0,0 +1,445 @@
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<Entity name="BlendTreeAssault" xmlns:c="components" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../Types/Entity.xsd">
<Components>
<c:BlendOverride>
<Master>ReloadSwitchBlend</Master>
<Slave>MovementBlend</Slave>
</c:BlendOverride>
<c:Transform/>
</Components>
<Children>
<Entity name="MovementBlend">
<Components>
<c:Blend>
<Pose1>StandCrouchBlend</Pose1>
<Pose2>JumpDashBlend</Pose2>
<Weight>2.5146881298480398e-63</Weight>
<SubTreeRoot>true</SubTreeRoot>
</c:Blend>
<c:Transform/>
</Components>
<Children>
<Entity name="StandCrouchBlend">
<Components>
<c:Blend>
<Pose1>StandMovement</Pose1>
<Pose2>CrouchMovement</Pose2>
<Weight>0</Weight>
<SubTreeRoot>true</SubTreeRoot>
</c:Blend>
<c:Transform/>
</Components>
<Children>
<Entity name="CrouchMovement">
<Components>
<c:Blend>
<Pose1>MovementBlend</Pose1>
<Pose2>Idle</Pose2>
<Weight>1</Weight>
</c:Blend>
<c:Transform/>
</Components>
<Children>
<Entity name="MovementBlend">
<Components>
<c:Blend>
<Pose1>Walk</Pose1>
<Pose2>StrafeLRBlend</Pose2>
<Weight>0</Weight>
</c:Blend>
<c:Transform/>
</Components>
<Children>
<Entity name="StrafeLRBlend">
<Components>
<c:Blend>
<Pose1>Left</Pose1>
<Pose2>Right</Pose2>
<Weight>0.033793529385008014</Weight>
</c:Blend>
<c:Transform/>
</Components>
<Children>
<Entity name="Left">
<Components>
<c:Animation>
<AnimationName>CrouchStrafeLeftF</AnimationName>
<Time>0.86105870560012221</Time>
<Speed>1</Speed>
<Play>true</Play>
</c:Animation>
<c:Transform/>
</Components>
<Children/>
</Entity>
<Entity name="Right">
<Components>
<c:Animation>
<AnimationName>CrouchStrafeRightF</AnimationName>
<Time>0.78838016755090479</Time>
<Speed>1</Speed>
<Play>true</Play>
</c:Animation>
<c:Transform/>
</Components>
<Children/>
</Entity>
</Children>
</Entity>
<Entity name="Walk">
<Components>
<c:Animation>
<AnimationName>CrouchWalkF</AnimationName>
<Time>0.56675415272830776</Time>
<Speed>1</Speed>
<Play>true</Play>
</c:Animation>
<c:Transform/>
</Components>
<Children/>
</Entity>
</Children>
</Entity>
<Entity name="Idle">
<Components>
<c:Animation>
<AnimationName>CrouchF</AnimationName>
<Time>0.99862473341677438</Time>
<Speed>1</Speed>
</c:Animation>
<c:Transform/>
</Components>
<Children/>
</Entity>
</Children>
</Entity>
<Entity name="StandMovement">
<Components>
<c:Blend>
<Pose1>MovementBlend</Pose1>
<Pose2>Idle</Pose2>
<Weight>1</Weight>
</c:Blend>
<c:Transform/>
</Components>
<Children>
<Entity name="MovementBlend">
<Components>
<c:Blend>
<Pose1>RunWalkBlend</Pose1>
<Pose2>StrafeLRBlend</Pose2>
<Weight>2.4565650245976452e-16</Weight>
</c:Blend>
<c:Transform/>
</Components>
<Children>
<Entity name="RunWalkBlend">
<Components>
<c:Blend>
<Pose1>Walk</Pose1>
<Pose2>Run</Pose2>
<Weight>1.2938206818383024e-24</Weight>
</c:Blend>
<c:Transform/>
</Components>
<Children>
<Entity name="Walk">
<Components>
<c:Animation>
<AnimationName>WalkF</AnimationName>
<Time>0.071908782138081051</Time>
<Speed>1</Speed>
<Play>true</Play>
</c:Animation>
<c:Transform/>
</Components>
<Children/>
</Entity>
<Entity name="Run">
<Components>
<c:Animation>
<AnimationName>RunF</AnimationName>
<Time>0.34392228616198395</Time>
<Speed>1</Speed>
<Play>true</Play>
</c:Animation>
<c:Transform/>
</Components>
<Children/>
</Entity>
</Children>
</Entity>
<Entity name="StrafeLRBlend">
<Components>
<c:Blend>
<Pose1>Left</Pose1>
<Pose2>Right</Pose2>
<Weight>0.033793529385008014</Weight>
</c:Blend>
<c:Transform/>
</Components>
<Children>
<Entity name="Left">
<Components>
<c:Animation>
<AnimationName>StrafeLeftF</AnimationName>
<Time>0.25350140317161873</Time>
<Speed>1</Speed>
<Play>true</Play>
</c:Animation>
<c:Transform/>
</Components>
<Children/>
</Entity>
<Entity name="Right">
<Components>
<c:Animation>
<AnimationName>StrafeRightF</AnimationName>
<Time>0.27701693305173336</Time>
<Speed>1</Speed>
<Play>true</Play>
</c:Animation>
<c:Transform/>
</Components>
<Children/>
</Entity>
</Children>
</Entity>
</Children>
</Entity>
<Entity name="Idle">
<Components>
<c:Animation>
<AnimationName>IdleF</AnimationName>
<Time>0.07079692416292005</Time>
<Speed>1</Speed>
<Play>true</Play>
</c:Animation>
<c:Transform/>
</Components>
<Children/>
</Entity>
</Children>
</Entity>
</Children>
</Entity>
<Entity name="JumpDashBlend">
<Components>
<c:Blend>
<Pose1>Jump</Pose1>
<Pose2>DashBlend</Pose2>
<Weight>1</Weight>
<SubTreeRoot>true</SubTreeRoot>
</c:Blend>
<c:Transform/>
</Components>
<Children>
<Entity name="Jump">
<Components>
<c:Animation>
<AnimationName>JumpF</AnimationName>
<Time>0.5</Time>
<Speed>1</Speed>
<Loop>false</Loop>
</c:Animation>
<c:Transform/>
</Components>
<Children/>
</Entity>
<Entity name="DashBlend">
<Components>
<c:Blend>
<Pose1>DashFBBlend</Pose1>
<Pose2>DashLRBlend</Pose2>
<Weight>0.014621149736541383</Weight>
</c:Blend>
<c:Transform/>
</Components>
<Children>
<Entity name="DashFBBlend">
<Components>
<c:Blend>
<Pose1>DashForward</Pose1>
<Pose2>DashBackward</Pose2>
<Weight>0.014363533804961248</Weight>
</c:Blend>
<c:Transform/>
</Components>
<Children>
<Entity name="DashForward">
<Components>
<c:Animation>
<AnimationName>DashForwardF</AnimationName>
<Time>1</Time>
<Speed>1</Speed>
<Loop>false</Loop>
</c:Animation>
<c:Transform/>
</Components>
<Children/>
</Entity>
<Entity name="DashBackward">
<Components>
<c:Animation>
<AnimationName>DashBackwardF</AnimationName>
<Time>1</Time>
<Speed>1</Speed>
<Loop>false</Loop>
</c:Animation>
<c:Transform/>
</Components>
<Children/>
</Entity>
</Children>
</Entity>
<Entity name="DashLRBlend">
<Components>
<c:Blend>
<Pose1>DashLeft</Pose1>
<Pose2>DashRight</Pose2>
<Weight>4.3244885367500671e-16</Weight>
</c:Blend>
<c:Transform/>
</Components>
<Children>
<Entity name="DashLeft">
<Components>
<c:Animation>
<AnimationName>DashLeftF</AnimationName>
<Time>1</Time>
<Speed>1</Speed>
<Loop>false</Loop>
</c:Animation>
<c:Transform/>
</Components>
<Children/>
</Entity>
<Entity name="DashRight">
<Components>
<c:Animation>
<AnimationName>DashRightF</AnimationName>
<Time>1</Time>
<Speed>1</Speed>
<Loop>false</Loop>
</c:Animation>
<c:Transform/>
</Components>
<Children/>
</Entity>
</Children>
</Entity>
</Children>
</Entity>
</Children>
</Entity>
</Children>
</Entity>
<Entity name="ReloadSwitchBlend">
<Components>
<c:Blend>
<Pose1>ReloadSwitch</Pose1>
<Pose2>WeaponActionBlend</Pose2>
<Weight>1</Weight>
<SubTreeRoot>true</SubTreeRoot>
</c:Blend>
<c:Transform/>
</Components>
<Children>
<Entity name="ReloadSwitch">
<Components>
<c:Animation>
<AnimationName>ReloadSwitchU</AnimationName>
<Time>0.00030848838797092881</Time>
<Speed>1</Speed>
</c:Animation>
<c:Transform/>
</Components>
<Children/>
</Entity>
<Entity name="WeaponActionBlend">
<Components>
<c:Blend>
<Pose1>IdleBlend</Pose1>
<Pose2>ShootBlend</Pose2>
<Weight>0</Weight>
</c:Blend>
<c:Transform/>
</Components>
<Children>
<Entity name="IdleBlend">
<Components>
<c:Blend>
<Pose1>IdlePrimary</Pose1>
<Pose2>IdleSecondary</Pose2>
<Weight>0</Weight>
</c:Blend>
<c:Transform/>
</Components>
<Children>
<Entity name="IdlePrimary">
<Components>
<c:Animation>
<AnimationName>IdleAssaultRifleU</AnimationName>
<Time>1.4961314671805894</Time>
<Speed>1</Speed>
<Play>true</Play>
</c:Animation>
<c:Transform/>
</Components>
<Children/>
</Entity>
<Entity name="IdleSecondary">
<Components>
<c:Animation>
<AnimationName>IdleSecWepU</AnimationName>
<Time>1.4996565074703767</Time>
<Speed>1</Speed>
<Play>true</Play>
</c:Animation>
<c:Transform/>
</Components>
<Children/>
</Entity>
</Children>
</Entity>
<Entity name="ShootBlend">
<Components>
<c:Blend>
<Pose1>ShootPrimary</Pose1>
<Pose2>ShootSecondary</Pose2>
<Weight>0</Weight>
</c:Blend>
<c:Transform/>
</Components>
<Children>
<Entity name="ShootPrimary">
<Components>
<c:Animation>
<AnimationName>ShootFastRifleU</AnimationName>
<Time>0.12914212153428517</Time>
<Speed>1</Speed>
</c:Animation>
<c:Transform/>
</Components>
<Children/>
</Entity>
<Entity name="ShootSecondary">
<Components>
<c:Animation>
<AnimationName>ShootSecWepFastU</AnimationName>
</c:Animation>
<c:Transform/>
</Components>
<Children/>
</Entity>
</Children>
</Entity>
</Children>
</Entity>
</Children>
</Entity>
</Children>
</Entity>
@@ -0,0 +1,65 @@
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<Entity name="PrimaryBlendTree" xmlns:c="components" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../Types/Entity.xsd">
<Components>
<c:Blend>
<Pose1>Idle</Pose1>
<Pose2>WeaponAction</Pose2>
<Weight>0</Weight>
<SubTreeRoot>true</SubTreeRoot>
</c:Blend>
<c:Transform/>
</Components>
<Children>
<Entity name="WeaponAction">
<Components>
<c:Blend>
<Pose1>Fire</Pose1>
<Pose2>Reload</Pose2>
<Weight>1</Weight>
</c:Blend>
<c:Transform/>
</Components>
<Children>
<Entity name="Fire">
<Components>
<c:Animation>
<AnimationName>ShootShotgunF</AnimationName>
<Speed>1</Speed>
<Play>true</Play>
<Loop>false</Loop>
</c:Animation>
<c:Transform/>
</Components>
<Children/>
</Entity>
<Entity name="Reload">
<Components>
<c:Animation>
<AnimationName>ReloadSwitchF</AnimationName>
<Time>0.58991607886241582</Time>
<Speed>1</Speed>
<Play>true</Play>
</c:Animation>
<c:Transform/>
</Components>
<Children/>
</Entity>
</Children>
</Entity>
<Entity name="Idle">
<Components>
<c:Animation>
<AnimationName>IdleF</AnimationName>
<Time>0.14837891922093149</Time>
<Speed>1</Speed>
<Play>true</Play>
</c:Animation>
<c:Transform/>
</Components>
<Children/>
</Entity>
</Children>
</Entity>
@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<Entity name="SecondaryBlendTree" xmlns:c="components" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../Types/Entity.xsd">
<Components>
<c:Transform/>
</Components>
<Children/>
</Entity>
File diff suppressed because it is too large Load Diff
+21 -21
View File
@@ -2,36 +2,36 @@
<Entity name="Shield" xmlns:c="components" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../Types/Entity.xsd"> <Entity name="Shield" xmlns:c="components" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../Types/Entity.xsd">
<Components> <Components>
<c:Blend>
<Pose1>Deploy</Pose1>
<Pose2>Idle</Pose2>
<Weight>0</Weight>
</c:Blend>
<c:Model>
<Resource>Models/Characters/Defender/DefenderShield.mesh</Resource>
</c:Model>
<c:Transform/> <c:Transform/>
</Components> </Components>
<Children> <Children>
<Entity name="Shield"> <Entity name="Deploy">
<Components> <Components>
<c:Model> <c:Animation>
<Resource>Models/Core/UnitPlane.mesh</Resource> <AnimationName>ActivateDeactiveShieldF</AnimationName>
</c:Model> <Time>1</Time>
<c:Shield/> <Speed>1</Speed>
<c:Transform> </c:Animation>
<Scale X="1.11800003" Y="0.0320000015" Z="1.9180001"/> <c:Transform/>
<Orientation X="-1.57079995" Y="0" Z="0"/>
</c:Transform>
</Components> </Components>
<Children/> <Children/>
</Entity> </Entity>
<Entity name="VisibleSide"> <Entity name="Idle">
<Components> <Components>
<c:Shielded/> <c:Animation>
<c:Model> <AnimationName>ShieldFrontF</AnimationName>
<Resource>Models/Core/UnitHexagon.mesh</Resource> <Speed>1</Speed>
<Color A="0" B="1" G="0" R="0"/> </c:Animation>
<Transparent>true</Transparent> <c:Transform/>
</c:Model>
<c:Transform>
<Position X="0" Y="0" Z="0.0179871861"/>
<Scale X="1.01900005" Y="0.0120000001" Z="1.91000009"/>
<Orientation X="-1.57079995" Y="0" Z="0"/>
</c:Transform>
</Components> </Components>
<Children/> <Children/>
</Entity> </Entity>
@@ -0,0 +1,156 @@
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<Entity name="HealthHUDAssault" xmlns:c="components" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../Types/Entity.xsd">
<Components>
<c:Transform>
<Position X="-0.263000011" Y="-0.185000002" Z="0"/>
<Orientation X="5.83699989" Y="0" Z="4.71199989"/>
</c:Transform>
</Components>
<Children>
<Entity name="HealthText">
<Components>
<c:Fill>
<Percentage>1</Percentage>
<Color A="1" B="1" G="0" R="0"/>
</c:Fill>
<c:Text>
<Content>100/100</Content>
<Resource>Fonts/DroidSans.ttf,64</Resource>
<Color A="0.505882382" B="3.92156863" G="1.17647064" R="0"/>
</c:Text>
<c:HealthHUD/>
<c:Transform>
<Position X="0.0200000014" Y="-0.101000004" Z="0.00300000003"/>
<Orientation X="0" Y="0" Z="1.57070696"/>
<Scale X="0.0350000001" Y="0.0350000001" Z="0.0350000001"/>
</c:Transform>
</Components>
<Children/>
</Entity>
<Entity name="HealthBar">
<Components>
<c:Fill>
<Percentage>1</Percentage>
<Color A="0.301960796" B="1" G="0" R="0"/>
</c:Fill>
<c:HealthHUD/>
<c:Sprite>
<DiffuseTexture>Textures/HealthHUD3.png</DiffuseTexture>
<GlowMap></GlowMap>
<Color A="0.588235319" B="0" G="0" R="0"/>
</c:Sprite>
<c:Transform>
<Scale X="0.106000006" Y="0.333000004" Z="0.150000006"/>
</c:Transform>
</Components>
<Children/>
</Entity>
<Entity name="BoostIcons">
<Components>
<c:BoostIconsHUD/>
<c:Transform>
<Position X="0" Y="0.00500000035" Z="0"/>
</c:Transform>
</Components>
<Children>
<Entity name="Assault">
<Components>
<c:Fill>
<Color A="1" B="0.533333361" G="1" R="0.329411775"/>
</c:Fill>
<c:Sprite>
<DiffuseTexture>Textures/Icons/Boosts/Assault-01.png</DiffuseTexture>
<GlowMap></GlowMap>
<DepthSort>false</DepthSort>
<Color A="0.588235319" B="0.0392156877" G="0.184313729" R="0"/>
</c:Sprite>
<c:Transform>
<Position X="0.0250000004" Y="0.0700000003" Z="0"/>
<Orientation X="0" Y="0" Z="3.14199996"/>
<Scale X="0.0399999991" Y="0.0399999991" Z="0.5"/>
</c:Transform>
</Components>
<Children/>
</Entity>
<Entity name="Defender">
<Components>
<c:Fill>
<Color A="1" B="1" G="0.58431375" R="0.105882354"/>
</c:Fill>
<c:Sprite>
<DiffuseTexture>Textures/Icons/Boosts/Defender-01.png</DiffuseTexture>
<GlowMap></GlowMap>
<DepthSort>false</DepthSort>
<Color A="0.588235319" B="0.34117648" G="0.192156866" R="0"/>
</c:Sprite>
<c:Transform>
<Position X="0.0270000007" Y="0.110000007" Z="0"/>
<Orientation X="0" Y="0" Z="3.14199996"/>
<Scale X="0.0399999991" Y="0.0400000028" Z="0.165000007"/>
</c:Transform>
</Components>
<Children/>
</Entity>
<Entity name="Sniper">
<Components>
<c:Fill>
<Color A="1" B="0.345098048" G="0" R="1"/>
</c:Fill>
<c:Sprite>
<DiffuseTexture>Textures/Icons/Boosts/Sniper-01.png</DiffuseTexture>
<GlowMap></GlowMap>
<DepthSort>false</DepthSort>
<Color A="0.588235319" B="0.121568628" G="0" R="0.443137258"/>
</c:Sprite>
<c:Transform>
<Position X="0.0250000004" Y="0.145000011" Z="0"/>
<Orientation X="0" Y="0" Z="3.14199996"/>
<Scale X="0.0400000028" Y="0.0400000028" Z="0.165000007"/>
</c:Transform>
</Components>
<Children/>
</Entity>
</Children>
</Entity>
<Entity name="ShiftAbility">
<Components>
<c:AbilityCooldownHUD/>
<c:Fill>
<Color A="1" B="0.392156869" G="0.392156869" R="0.392156869"/>
</c:Fill>
<c:Sprite>
<DiffuseTexture>Textures/Icons/Abilities/Superman-01.png</DiffuseTexture>
<GlowMap></GlowMap>
<DepthSort>false</DepthSort>
<Color A="1" B="0.206628323" G="0.78039217" R="0.192802757"/>
</c:Sprite>
<c:Transform>
<Position X="0.0250000004" Y="0.0100000007" Z="0"/>
<Orientation X="0" Y="0" Z="3.14159203"/>
<Scale X="0.0800000057" Y="0.0700000003" Z="1"/>
</c:Transform>
</Components>
<Children>
<Entity name="Cooldown">
<Components>
<c:Text>
<Content>0.0</Content>
<Resource>Fonts/DroidSans.ttf,64</Resource>
<Color A="1" B="0" G="0" R="0"/>
<Visible>false</Visible>
</c:Text>
<c:Transform>
<Position X="0.146000013" Y="0.00900000054" Z="0.0560000017"/>
<Orientation X="0" Y="0" Z="1.57099998"/>
<Scale X="0.515000045" Y="0.704000056" Z="0.431000024"/>
</c:Transform>
</Components>
<Children/>
</Entity>
</Children>
</Entity>
</Children>
</Entity>
@@ -0,0 +1,156 @@
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<Entity name="HealthHUDDefender" xmlns:c="components" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../Types/Entity.xsd">
<Components>
<c:Transform>
<Position X="-0.263000011" Y="-0.185000002" Z="0"/>
<Orientation X="5.83699989" Y="0" Z="4.71199989"/>
</c:Transform>
</Components>
<Children>
<Entity name="HealthText">
<Components>
<c:Fill>
<Percentage>1</Percentage>
<Color A="1" B="1" G="0" R="0"/>
</c:Fill>
<c:Text>
<Content>100/100</Content>
<Resource>Fonts/DroidSans.ttf,64</Resource>
<Color A="0.505882382" B="3.92156863" G="1.17647064" R="0"/>
</c:Text>
<c:HealthHUD/>
<c:Transform>
<Position X="0.0200000014" Y="-0.101000004" Z="0.00300000003"/>
<Orientation X="0" Y="0" Z="1.57070696"/>
<Scale X="0.0350000001" Y="0.0350000001" Z="0.0350000001"/>
</c:Transform>
</Components>
<Children/>
</Entity>
<Entity name="HealthBar">
<Components>
<c:Fill>
<Percentage>1</Percentage>
<Color A="0.301960796" B="1" G="0" R="0"/>
</c:Fill>
<c:HealthHUD/>
<c:Sprite>
<DiffuseTexture>Textures/HealthHUD3.png</DiffuseTexture>
<GlowMap></GlowMap>
<Color A="0.588235319" B="0" G="0" R="0"/>
</c:Sprite>
<c:Transform>
<Scale X="0.106000006" Y="0.333000004" Z="0.150000006"/>
</c:Transform>
</Components>
<Children/>
</Entity>
<Entity name="BoostIcons">
<Components>
<c:BoostIconsHUD/>
<c:Transform>
<Position X="0" Y="0.00500000035" Z="0"/>
</c:Transform>
</Components>
<Children>
<Entity name="Assault">
<Components>
<c:Fill>
<Color A="1" B="0.533333361" G="1" R="0.329411775"/>
</c:Fill>
<c:Sprite>
<DiffuseTexture>Textures/Icons/Boosts/Assault-01.png</DiffuseTexture>
<GlowMap></GlowMap>
<DepthSort>false</DepthSort>
<Color A="0.588235319" B="0.0392156877" G="0.184313729" R="0"/>
</c:Sprite>
<c:Transform>
<Position X="0.0250000004" Y="0.0700000003" Z="0"/>
<Orientation X="0" Y="0" Z="3.14199996"/>
<Scale X="0.0399999991" Y="0.0399999991" Z="0.5"/>
</c:Transform>
</Components>
<Children/>
</Entity>
<Entity name="Defender">
<Components>
<c:Fill>
<Color A="1" B="1" G="0.58431375" R="0.105882354"/>
</c:Fill>
<c:Sprite>
<DiffuseTexture>Textures/Icons/Boosts/Defender-01.png</DiffuseTexture>
<GlowMap></GlowMap>
<DepthSort>false</DepthSort>
<Color A="0.588235319" B="0.34117648" G="0.192156866" R="0"/>
</c:Sprite>
<c:Transform>
<Position X="0.0270000007" Y="0.110000007" Z="0"/>
<Orientation X="0" Y="0" Z="3.14199996"/>
<Scale X="0.0399999991" Y="0.0400000028" Z="0.165000007"/>
</c:Transform>
</Components>
<Children/>
</Entity>
<Entity name="Sniper">
<Components>
<c:Fill>
<Color A="1" B="0.345098048" G="0" R="1"/>
</c:Fill>
<c:Sprite>
<DiffuseTexture>Textures/Icons/Boosts/Sniper-01.png</DiffuseTexture>
<GlowMap></GlowMap>
<DepthSort>false</DepthSort>
<Color A="0.588235319" B="0.121568628" G="0" R="0.443137258"/>
</c:Sprite>
<c:Transform>
<Position X="0.0250000004" Y="0.145000011" Z="0"/>
<Orientation X="0" Y="0" Z="3.14199996"/>
<Scale X="0.0400000028" Y="0.0400000028" Z="0.165000007"/>
</c:Transform>
</Components>
<Children/>
</Entity>
</Children>
</Entity>
<Entity name="ShiftAbility">
<Components>
<c:AbilityCooldownHUD/>
<c:Fill>
<Color A="1" B="0.392156869" G="0.392156869" R="0.392156869"/>
</c:Fill>
<c:Sprite>
<DiffuseTexture>Textures/Icons/Abilities/SheildDots-01.png</DiffuseTexture>
<GlowMap></GlowMap>
<DepthSort>false</DepthSort>
<Color A="1" B="0.206628323" G="0.78039217" R="0.192802757"/>
</c:Sprite>
<c:Transform>
<Position X="0.0250000004" Y="0.0100000007" Z="0"/>
<Orientation X="0" Y="0" Z="3.14159203"/>
<Scale X="0.0400000028" Y="0.0400000028" Z="1"/>
</c:Transform>
</Components>
<Children>
<Entity name="Cooldown">
<Components>
<c:Text>
<Content>0.0</Content>
<Resource>Fonts/DroidSans.ttf,64</Resource>
<Color A="1" B="0" G="0" R="0"/>
<Visible>false</Visible>
</c:Text>
<c:Transform>
<Position X="0.146000013" Y="0.00900000054" Z="0.0560000017"/>
<Orientation X="0" Y="0" Z="1.57099998"/>
<Scale X="0.515000045" Y="0.704000056" Z="0.431000024"/>
</c:Transform>
</Components>
<Children/>
</Entity>
</Children>
</Entity>
</Children>
</Entity>
@@ -0,0 +1,156 @@
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<Entity name="HealthHUDSniper" xmlns:c="components" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../Types/Entity.xsd">
<Components>
<c:Transform>
<Position X="-0.263000011" Y="-0.185000002" Z="0"/>
<Orientation X="5.83699989" Y="0" Z="4.71199989"/>
</c:Transform>
</Components>
<Children>
<Entity name="HealthText">
<Components>
<c:Fill>
<Percentage>1</Percentage>
<Color A="1" B="1" G="0" R="0"/>
</c:Fill>
<c:Text>
<Content>100/100</Content>
<Resource>Fonts/DroidSans.ttf,64</Resource>
<Color A="0.505882382" B="3.92156863" G="1.17647064" R="0"/>
</c:Text>
<c:HealthHUD/>
<c:Transform>
<Position X="0.0200000014" Y="-0.101000004" Z="0.00300000003"/>
<Orientation X="0" Y="0" Z="1.57070696"/>
<Scale X="0.0350000001" Y="0.0350000001" Z="0.0350000001"/>
</c:Transform>
</Components>
<Children/>
</Entity>
<Entity name="HealthBar">
<Components>
<c:Fill>
<Percentage>1</Percentage>
<Color A="0.301960796" B="1" G="0" R="0"/>
</c:Fill>
<c:HealthHUD/>
<c:Sprite>
<DiffuseTexture>Textures/HealthHUD3.png</DiffuseTexture>
<GlowMap></GlowMap>
<Color A="0.588235319" B="0" G="0" R="0"/>
</c:Sprite>
<c:Transform>
<Scale X="0.106000006" Y="0.333000004" Z="0.150000006"/>
</c:Transform>
</Components>
<Children/>
</Entity>
<Entity name="BoostIcons">
<Components>
<c:BoostIconsHUD/>
<c:Transform>
<Position X="0" Y="0.00500000035" Z="0"/>
</c:Transform>
</Components>
<Children>
<Entity name="Assault">
<Components>
<c:Fill>
<Color A="1" B="0.533333361" G="1" R="0.329411775"/>
</c:Fill>
<c:Sprite>
<DiffuseTexture>Textures/Icons/Boosts/Assault-01.png</DiffuseTexture>
<GlowMap></GlowMap>
<DepthSort>false</DepthSort>
<Color A="0.588235319" B="0.0392156877" G="0.184313729" R="0"/>
</c:Sprite>
<c:Transform>
<Position X="0.0250000004" Y="0.0700000003" Z="0"/>
<Orientation X="0" Y="0" Z="3.14199996"/>
<Scale X="0.0399999991" Y="0.0399999991" Z="0.5"/>
</c:Transform>
</Components>
<Children/>
</Entity>
<Entity name="Defender">
<Components>
<c:Fill>
<Color A="1" B="1" G="0.58431375" R="0.105882354"/>
</c:Fill>
<c:Sprite>
<DiffuseTexture>Textures/Icons/Boosts/Defender-01.png</DiffuseTexture>
<GlowMap></GlowMap>
<DepthSort>false</DepthSort>
<Color A="0.588235319" B="0.34117648" G="0.192156866" R="0"/>
</c:Sprite>
<c:Transform>
<Position X="0.0270000007" Y="0.110000007" Z="0"/>
<Orientation X="0" Y="0" Z="3.14199996"/>
<Scale X="0.0399999991" Y="0.0400000028" Z="0.165000007"/>
</c:Transform>
</Components>
<Children/>
</Entity>
<Entity name="Sniper">
<Components>
<c:Fill>
<Color A="1" B="0.345098048" G="0" R="1"/>
</c:Fill>
<c:Sprite>
<DiffuseTexture>Textures/Icons/Boosts/Sniper-01.png</DiffuseTexture>
<GlowMap></GlowMap>
<DepthSort>false</DepthSort>
<Color A="0.588235319" B="0.121568628" G="0" R="0.443137258"/>
</c:Sprite>
<c:Transform>
<Position X="0.0250000004" Y="0.145000011" Z="0"/>
<Orientation X="0" Y="0" Z="3.14199996"/>
<Scale X="0.0400000028" Y="0.0400000028" Z="0.165000007"/>
</c:Transform>
</Components>
<Children/>
</Entity>
</Children>
</Entity>
<Entity name="ShiftAbility">
<Components>
<c:AbilityCooldownHUD/>
<c:Fill>
<Color A="1" B="0.392156869" G="0.392156869" R="0.392156869"/>
</c:Fill>
<c:Sprite>
<DiffuseTexture>Textures/Icons/Abilities/Dash-01.png</DiffuseTexture>
<GlowMap></GlowMap>
<DepthSort>false</DepthSort>
<Color A="1" B="0.206628323" G="0.78039217" R="0.192802757"/>
</c:Sprite>
<c:Transform>
<Position X="0.0250000004" Y="0.0100000007" Z="0"/>
<Orientation X="0" Y="0" Z="3.14159203"/>
<Scale X="0.0400000028" Y="0.0400000028" Z="1"/>
</c:Transform>
</Components>
<Children>
<Entity name="Cooldown">
<Components>
<c:Text>
<Content>0.0</Content>
<Resource>Fonts/DroidSans.ttf,64</Resource>
<Color A="1" B="0" G="0" R="0"/>
<Visible>false</Visible>
</c:Text>
<c:Transform>
<Position X="0.146000013" Y="0.00900000054" Z="0.0560000017"/>
<Orientation X="0" Y="0" Z="1.57099998"/>
<Scale X="0.515000045" Y="0.704000056" Z="0.431000024"/>
</c:Transform>
</Components>
<Children/>
</Entity>
</Children>
</Entity>
</Children>
</Entity>
@@ -0,0 +1,38 @@
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<Entity xmlns:c="components" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../Types/Entity.xsd">
<Components>
<c:Collidable/>
<c:Model>
<Resource>Models/Props/PickUps/PickUpHolder.mesh</Resource>
</c:Model>
<c:Transform>
<Position X="-7.1308527" Y="7.18348074" Z="-50.9762192"/>
<Scale X="0.5" Y="0.5" Z="0.5"/>
<Orientation X="0" Y="0.324000001" Z="0"/>
</c:Transform>
</Components>
<Children>
<Entity>
<Components>
<c:HealthPickup/>
<c:Model>
<Resource>Models/Props/PickUps/HealthPickUp.mesh</Resource>
</c:Model>
<c:RaptorCopter>
<Speed>8</Speed>
<Axis X="0" Y="0.100000001" Z="0"/>
</c:RaptorCopter>
<c:Transform>
<Position X="0" Y="2.36784196" Z="0"/>
<Scale X="0.600000024" Y="0.600000024" Z="0.600000024"/>
<Orientation X="0" Y="40.1343727" Z="0"/>
</c:Transform>
<c:Trigger/>
</Components>
<Children/>
</Entity>
</Children>
</Entity>
+8 -8
View File
@@ -8,15 +8,15 @@
<Children> <Children>
<Entity name="RedSpawn"> <Entity name="RedSpawn">
<Components> <Components>
<c:PlayerSpawn/>
<c:Spawner>
<EntityFile>Schema/Entities/PlayerRed.xml</EntityFile>
</c:Spawner>
<c:Team> <c:Team>
<Team> <Team>
<Red/> <Red/>
</Team> </Team>
</c:Team> </c:Team>
<c:PlayerSpawn/>
<c:Spawner>
<EntityFile>Schema/Entities/PlayerDefenderBlue.xml</EntityFile>
</c:Spawner>
<c:Transform> <c:Transform>
<Position X="0.300000012" Y="0.0270000007" Z="0"/> <Position X="0.300000012" Y="0.0270000007" Z="0"/>
</c:Transform> </c:Transform>
@@ -76,15 +76,15 @@
</Entity> </Entity>
<Entity name="BlueSpawn"> <Entity name="BlueSpawn">
<Components> <Components>
<c:PlayerSpawn/>
<c:Spawner>
<EntityFile>Schema/Entities/Player.xml</EntityFile>
</c:Spawner>
<c:Team> <c:Team>
<Team> <Team>
<Blue/> <Blue/>
</Team> </Team>
</c:Team> </c:Team>
<c:PlayerSpawn/>
<c:Spawner>
<EntityFile>Schema/Entities/PlayerAssaultBlue.xml</EntityFile>
</c:Spawner>
<c:Transform> <c:Transform>
<Position X="0.300000012" Y="0.0270000007" Z="6.67400026"/> <Position X="0.300000012" Y="0.0270000007" Z="6.67400026"/>
</c:Transform> </c:Transform>
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+628 -55
View File
@@ -6,11 +6,12 @@
<Origin X="0" Y="0.772000015" Z="0"/> <Origin X="0" Y="0.772000015" Z="0"/>
<Size X="1" Y="1.60000002" Z="1"/> <Size X="1" Y="1.60000002" Z="1"/>
</c:AABB> </c:AABB>
<c:AssaultWeapon> <c:AssaultWeapon/>
<Slot> <c:Team>
<Secondary/> <Team>
</Slot> <Blue/>
</c:AssaultWeapon> </Team>
</c:Team>
<c:Collidable/> <c:Collidable/>
<c:DashAbility/> <c:DashAbility/>
<c:DoubleJump/> <c:DoubleJump/>
@@ -22,11 +23,6 @@
<MovementSpeed>5</MovementSpeed> <MovementSpeed>5</MovementSpeed>
<CurrentWeapon></CurrentWeapon> <CurrentWeapon></CurrentWeapon>
</c:Player> </c:Player>
<c:Team>
<Team>
<Blue/>
</Team>
</c:Team>
<c:Transform> <c:Transform>
<Position X="0" Y="0.0288832188" Z="2.64144421"/> <Position X="0" Y="0.0288832188" Z="2.64144421"/>
</c:Transform> </c:Transform>
@@ -173,6 +169,40 @@
</Entity> </Entity>
</Children> </Children>
</Entity> </Entity>
<Entity name="ShiftAbility">
<Components>
<c:AbilityCooldownHUD/>
<c:Fill>
<Color A="1" B="0.392156869" G="0.392156869" R="0.392156869"/>
</c:Fill>
<c:Sprite>
<DiffuseTexture>Textures/Core/White.png</DiffuseTexture>
<GlowMap></GlowMap>
<DepthSort>false</DepthSort>
</c:Sprite>
<c:Transform>
<Position X="0.224999994" Y="0.00400000019" Z="0"/>
<Scale X="0.27700001" Y="0.190000013" Z="1"/>
</c:Transform>
</Components>
<Children>
<Entity name="Cooldown">
<Components>
<c:Text>
<Content>0.0</Content>
<Resource>Fonts/DroidSans.ttf,64</Resource>
<Color A="1" B="0" G="0" R="0"/>
</c:Text>
<c:Transform>
<Position X="0.146000013" Y="0.00900000054" Z="0.0560000017"/>
<Orientation X="0" Y="0" Z="1.57099998"/>
<Scale X="0.515000045" Y="0.704000056" Z="0.431000024"/>
</c:Transform>
</Components>
<Children/>
</Entity>
</Children>
</Entity>
</Children> </Children>
</Entity> </Entity>
<Entity name="HealthText"> <Entity name="HealthText">
@@ -219,12 +249,12 @@
<Children> <Children>
<Entity name="ProgressionHexagon"> <Entity name="ProgressionHexagon">
<Components> <Components>
<c:CapturePointHUD>
<CapturePointNumber>2</CapturePointNumber>
</c:CapturePointHUD>
<c:Fill> <c:Fill>
<Color A="0.699999988" B="1" G="0.200000003" R="0"/> <Color A="0.699999988" B="1" G="0.200000003" R="0"/>
</c:Fill> </c:Fill>
<c:CapturePointHUD>
<CapturePointNumber>2</CapturePointNumber>
</c:CapturePointHUD>
<c:Sprite> <c:Sprite>
<DiffuseTexture>Textures/Core/UnitHexagon_Rotated.png</DiffuseTexture> <DiffuseTexture>Textures/Core/UnitHexagon_Rotated.png</DiffuseTexture>
<GlowMap></GlowMap> <GlowMap></GlowMap>
@@ -253,12 +283,12 @@
<Children> <Children>
<Entity name="ProgressionHexagon"> <Entity name="ProgressionHexagon">
<Components> <Components>
<c:CapturePointHUD>
<CapturePointNumber>3</CapturePointNumber>
</c:CapturePointHUD>
<c:Fill> <c:Fill>
<Color A="0.699999988" B="1" G="0.200000003" R="0"/> <Color A="0.699999988" B="1" G="0.200000003" R="0"/>
</c:Fill> </c:Fill>
<c:CapturePointHUD>
<CapturePointNumber>3</CapturePointNumber>
</c:CapturePointHUD>
<c:Sprite> <c:Sprite>
<DiffuseTexture>Textures/Core/UnitHexagon_Rotated.png</DiffuseTexture> <DiffuseTexture>Textures/Core/UnitHexagon_Rotated.png</DiffuseTexture>
<GlowMap></GlowMap> <GlowMap></GlowMap>
@@ -287,13 +317,13 @@
<Children> <Children>
<Entity name="ProgressionHexagon"> <Entity name="ProgressionHexagon">
<Components> <Components>
<c:CapturePointHUD>
<CapturePointNumber>4</CapturePointNumber>
</c:CapturePointHUD>
<c:Fill> <c:Fill>
<Percentage>1</Percentage> <Percentage>1</Percentage>
<Color A="0.699999988" B="1" G="0.200000003" R="0"/> <Color A="0.699999988" B="1" G="0.200000003" R="0"/>
</c:Fill> </c:Fill>
<c:CapturePointHUD>
<CapturePointNumber>4</CapturePointNumber>
</c:CapturePointHUD>
<c:Sprite> <c:Sprite>
<DiffuseTexture>Textures/Core/UnitHexagon_Rotated.png</DiffuseTexture> <DiffuseTexture>Textures/Core/UnitHexagon_Rotated.png</DiffuseTexture>
<GlowMap></GlowMap> <GlowMap></GlowMap>
@@ -322,12 +352,12 @@
<Children> <Children>
<Entity name="ProgressionHexagon"> <Entity name="ProgressionHexagon">
<Components> <Components>
<c:CapturePointHUD>
<CapturePointNumber>1</CapturePointNumber>
</c:CapturePointHUD>
<c:Fill> <c:Fill>
<Color A="0.699999988" B="1" G="0.200000003" R="0"/> <Color A="0.699999988" B="1" G="0.200000003" R="0"/>
</c:Fill> </c:Fill>
<c:CapturePointHUD>
<CapturePointNumber>1</CapturePointNumber>
</c:CapturePointHUD>
<c:Sprite> <c:Sprite>
<DiffuseTexture>Textures/Core/UnitHexagon_Rotated.png</DiffuseTexture> <DiffuseTexture>Textures/Core/UnitHexagon_Rotated.png</DiffuseTexture>
<GlowMap></GlowMap> <GlowMap></GlowMap>
@@ -356,11 +386,11 @@
<Children> <Children>
<Entity name="ProgressionHexagon"> <Entity name="ProgressionHexagon">
<Components> <Components>
<c:CapturePointHUD/>
<c:Fill> <c:Fill>
<Percentage>1</Percentage> <Percentage>1</Percentage>
<Color A="0.699999988" B="0" G="0" R="1"/> <Color A="0.699999988" B="0" G="0" R="1"/>
</c:Fill> </c:Fill>
<c:CapturePointHUD/>
<c:Sprite> <c:Sprite>
<DiffuseTexture>Textures/Core/UnitHexagon_Rotated.png</DiffuseTexture> <DiffuseTexture>Textures/Core/UnitHexagon_Rotated.png</DiffuseTexture>
<GlowMap></GlowMap> <GlowMap></GlowMap>
@@ -433,15 +463,15 @@
</Entity> </Entity>
<Entity name="CapturePointArrow"> <Entity name="CapturePointArrow">
<Components> <Components>
<c:CapturePointArrowHUD/>
<c:Model>
<Resource>Models/Widgets/Arrows/Arrow5.mesh</Resource>
</c:Model>
<c:Team> <c:Team>
<Team> <Team>
<Blue/> <Blue/>
</Team> </Team>
</c:Team> </c:Team>
<c:CapturePointArrowHUD/>
<c:Model>
<Resource>Models/Widgets/Arrows/Arrow5.mesh</Resource>
</c:Model>
<c:Transform> <c:Transform>
<Position X="0" Y="0.714000046" Z="-1.30000007"/> <Position X="0" Y="0.714000046" Z="-1.30000007"/>
<Orientation X="0.405680239" Y="0.369605929" Z="0"/> <Orientation X="0.405680239" Y="0.369605929" Z="0"/>
@@ -454,16 +484,14 @@
</Entity> </Entity>
<Entity name="Hands"> <Entity name="Hands">
<Components> <Components>
<c:Animation> <c:Blend>
<AnimationName1>Idle</AnimationName1> <Pose1>BlendTreeAssaultWeapon</Pose1>
<Time1>1.8348644854054612</Time1> <Pose2>BlendTreeSecondaryWeapon</Pose2>
<Speed1>1</Speed1> <Weight>0</Weight>
<AnimationName2></AnimationName2> <SubTreeRoot>true</SubTreeRoot>
<AnimationName3></AnimationName3> </c:Blend>
</c:Animation>
<c:Model> <c:Model>
<Resource>Models/Characters/Assault/Test/FirstPerson.mesh</Resource> <Resource>Models/Characters/Defender/FirstPersonDefenderBlue.mesh</Resource>
<Color A="1" B="1" G="0.309803933" R="0"/>
</c:Model> </c:Model>
<c:Transform/> <c:Transform/>
</Components> </Components>
@@ -477,11 +505,11 @@
<Weapon>AssaultWeapon</Weapon> <Weapon>AssaultWeapon</Weapon>
</c:WeaponAttachment> </c:WeaponAttachment>
<c:Spawner> <c:Spawner>
<EntityFile>Schema/Entities/AssaultWeaponView.xml</EntityFile> <EntityFile>Schema/Entities/WeaponAssaultBlueView.xml</EntityFile>
</c:Spawner> </c:Spawner>
<c:Transform> <c:Transform>
<Position X="0.120430619" Y="-0.229639441" Z="-0.181454554"/> <Position X="0.120430678" Y="-0.228860483" Z="-0.181454629"/>
<Orientation X="0.0104045719" Y="-0.00268170005" Z="0.0428441055"/> <Orientation X="0.0104048448" Y="-0.00268179015" Z="0.0428442247"/>
</c:Transform> </c:Transform>
</Components> </Components>
<Children/> <Children/>
@@ -498,12 +526,79 @@
<EntityFile>Schema/Entities/SidearmWeaponView.xml</EntityFile> <EntityFile>Schema/Entities/SidearmWeaponView.xml</EntityFile>
</c:Spawner> </c:Spawner>
<c:Transform> <c:Transform>
<Position X="0.120430619" Y="-0.229639441" Z="-0.181454554"/> <Position X="0.120430678" Y="-0.228860483" Z="-0.181454629"/>
<Orientation X="0.0104045719" Y="-0.00268170005" Z="0.0428441055"/> <Orientation X="0.0104048448" Y="-0.00268179015" Z="0.0428442247"/>
</c:Transform> </c:Transform>
</Components> </Components>
<Children/> <Children/>
</Entity> </Entity>
<Entity name="BlendTreeAssaultWeapon">
<Components>
<c:Blend>
<Pose1>Idle</Pose1>
<Pose2>WeaponAction</Pose2>
<Weight>0</Weight>
<SubTreeRoot>true</SubTreeRoot>
</c:Blend>
<c:Transform/>
</Components>
<Children>
<Entity name="WeaponAction">
<Components>
<c:Blend>
<Pose1>Fire</Pose1>
<Pose2>Reload</Pose2>
<Weight>1</Weight>
</c:Blend>
<c:Transform/>
</Components>
<Children>
<Entity name="Fire">
<Components>
<c:Animation>
<AnimationName>ShootShotgunF</AnimationName>
<Speed>1</Speed>
<Play>true</Play>
<Loop>false</Loop>
</c:Animation>
<c:Transform/>
</Components>
<Children/>
</Entity>
<Entity name="Reload">
<Components>
<c:Animation>
<AnimationName>ReloadSwitchF</AnimationName>
<Time>0.58991607886241582</Time>
<Speed>1</Speed>
<Play>true</Play>
</c:Animation>
<c:Transform/>
</Components>
<Children/>
</Entity>
</Children>
</Entity>
<Entity name="Idle">
<Components>
<c:Animation>
<AnimationName>IdleF</AnimationName>
<Time>0.14837891922093149</Time>
<Speed>1</Speed>
<Play>true</Play>
</c:Animation>
<c:Transform/>
</Components>
<Children/>
</Entity>
</Children>
</Entity>
<Entity name="BlendTreeSecondaryWeapon">
<Components>
<c:Transform/>
</Components>
<Children/>
</Entity>
</Children> </Children>
</Entity> </Entity>
</Children> </Children>
@@ -527,16 +622,10 @@
</Entity> </Entity>
<Entity name="PlayerModel"> <Entity name="PlayerModel">
<Components> <Components>
<c:Animation> <c:BlendAdditive>
<AnimationName1>IdleF</AnimationName1> <Adder>BlendTreeAim</Adder>
<Speed1>1</Speed1> <Receiver>BlendTreeAssault</Receiver>
<AnimationName2></AnimationName2> </c:BlendAdditive>
<AnimationName3></AnimationName3>
</c:Animation>
<c:AnimationOffset>
<AnimationName>AimRifle</AnimationName>
<Time>0.5</Time>
</c:AnimationOffset>
<c:Shielded/> <c:Shielded/>
<c:HiddenForLocalPlayer/> <c:HiddenForLocalPlayer/>
<c:Model> <c:Model>
@@ -548,6 +637,9 @@
<Children> <Children>
<Entity name="PrimaryAttachment"> <Entity name="PrimaryAttachment">
<Components> <Components>
<c:BoneAttachment>
<BoneName>R_Arm_Weapon_Joint</BoneName>
</c:BoneAttachment>
<c:WeaponAttachment> <c:WeaponAttachment>
<Weapon>AssaultWeapon</Weapon> <Weapon>AssaultWeapon</Weapon>
<Person> <Person>
@@ -555,9 +647,12 @@
</Person> </Person>
</c:WeaponAttachment> </c:WeaponAttachment>
<c:Spawner> <c:Spawner>
<EntityFile>Schema/Entities/AssaultWeaponWorld.xml</EntityFile> <EntityFile>Schema/Entities/WeaponAssaultBlueWorld.xml</EntityFile>
</c:Spawner> </c:Spawner>
<c:Transform/> <c:Transform>
<Position X="0.156692833" Y="1.04078996" Z="-0.230734348"/>
<Orientation X="-0.00423099846" Y="-0.0376685001" Z="0.137512475"/>
</c:Transform>
</Components> </Components>
<Children/> <Children/>
</Entity> </Entity>
@@ -576,12 +671,490 @@
<EntityFile>Schema/Entities/SidearmWeaponWorld.xml</EntityFile> <EntityFile>Schema/Entities/SidearmWeaponWorld.xml</EntityFile>
</c:Spawner> </c:Spawner>
<c:Transform> <c:Transform>
<Position X="0.15691258" Y="1.04389966" Z="-0.213815808"/> <Position X="0.156692833" Y="1.04078996" Z="-0.230734348"/>
<Orientation X="-0.00425229501" Y="-0.0330814682" Z="0.137528151"/> <Orientation X="-0.00423099846" Y="-0.0376685001" Z="0.137512475"/>
</c:Transform> </c:Transform>
</Components> </Components>
<Children/> <Children/>
</Entity> </Entity>
<Entity name="BlendTreeAim">
<Components>
<c:Blend>
<Pose1>AimPrimary</Pose1>
<Pose2>AimSecondary</Pose2>
<Weight>0</Weight>
<SubTreeRoot>true</SubTreeRoot>
</c:Blend>
<c:Transform/>
</Components>
<Children>
<Entity name="AimSecondary">
<Components>
<c:Animation>
<AnimationName>AimSecWepA</AnimationName>
<Time>0.5</Time>
<Loop>false</Loop>
<Additive>true</Additive>
</c:Animation>
<c:Transform/>
</Components>
<Children/>
</Entity>
<Entity name="AimPrimary">
<Components>
<c:Animation>
<AnimationName>AimRifleA</AnimationName>
<Time>0.5</Time>
<Loop>false</Loop>
<Additive>true</Additive>
</c:Animation>
<c:Transform/>
</Components>
<Children/>
</Entity>
</Children>
</Entity>
<Entity name="BlendTreeAssault">
<Components>
<c:BlendOverride>
<Master>ReloadSwitchBlend</Master>
<Slave>FinalMovementBlend</Slave>
</c:BlendOverride>
<c:Transform/>
</Components>
<Children>
<Entity name="FinalMovementBlend">
<Components>
<c:Blend>
<Pose1>StandCrouchBlend</Pose1>
<Pose2>JumpDashBlend</Pose2>
<Weight>2.5146881298480398e-63</Weight>
<SubTreeRoot>true</SubTreeRoot>
</c:Blend>
<c:Transform/>
</Components>
<Children>
<Entity name="StandCrouchBlend">
<Components>
<c:Blend>
<Pose1>StandMovement</Pose1>
<Pose2>CrouchMovement</Pose2>
<Weight>0</Weight>
<SubTreeRoot>true</SubTreeRoot>
</c:Blend>
<c:Transform/>
</Components>
<Children>
<Entity name="CrouchMovement">
<Components>
<c:Blend>
<Pose1>MovementBlend</Pose1>
<Pose2>Idle</Pose2>
<Weight>1</Weight>
</c:Blend>
<c:Transform/>
</Components>
<Children>
<Entity name="MovementBlend">
<Components>
<c:Blend>
<Pose1>Walk</Pose1>
<Pose2>StrafeLRBlend</Pose2>
<Weight>0</Weight>
</c:Blend>
<c:Transform/>
</Components>
<Children>
<Entity name="StrafeLRBlend">
<Components>
<c:Blend>
<Pose1>Left</Pose1>
<Pose2>Right</Pose2>
<Weight>0.033793529385008014</Weight>
</c:Blend>
<c:Transform/>
</Components>
<Children>
<Entity name="Left">
<Components>
<c:Animation>
<AnimationName>CrouchStrafeLeftF</AnimationName>
<Time>0.86105870560012221</Time>
<Speed>1</Speed>
<Play>true</Play>
</c:Animation>
<c:Transform/>
</Components>
<Children/>
</Entity>
<Entity name="Right">
<Components>
<c:Animation>
<AnimationName>CrouchStrafeRightF</AnimationName>
<Time>0.78838016755090479</Time>
<Speed>1</Speed>
<Play>true</Play>
</c:Animation>
<c:Transform/>
</Components>
<Children/>
</Entity>
</Children>
</Entity>
<Entity name="Walk">
<Components>
<c:Animation>
<AnimationName>CrouchWalkF</AnimationName>
<Time>0.56675415272830776</Time>
<Speed>1</Speed>
<Play>true</Play>
</c:Animation>
<c:Transform/>
</Components>
<Children/>
</Entity>
</Children>
</Entity>
<Entity name="Idle">
<Components>
<c:Animation>
<AnimationName>CrouchF</AnimationName>
<Time>0.99862473341677438</Time>
<Speed>1</Speed>
</c:Animation>
<c:Transform/>
</Components>
<Children/>
</Entity>
</Children>
</Entity>
<Entity name="StandMovement">
<Components>
<c:Blend>
<Pose1>MovementBlend</Pose1>
<Pose2>Idle</Pose2>
<Weight>1</Weight>
</c:Blend>
<c:Transform/>
</Components>
<Children>
<Entity name="MovementBlend">
<Components>
<c:Blend>
<Pose1>RunWalkBlend</Pose1>
<Pose2>StrafeLRBlend</Pose2>
<Weight>2.4565650245976452e-16</Weight>
</c:Blend>
<c:Transform/>
</Components>
<Children>
<Entity name="RunWalkBlend">
<Components>
<c:Blend>
<Pose1>Walk</Pose1>
<Pose2>Run</Pose2>
<Weight>1.2938206818383024e-24</Weight>
</c:Blend>
<c:Transform/>
</Components>
<Children>
<Entity name="Walk">
<Components>
<c:Animation>
<AnimationName>WalkF</AnimationName>
<Time>0.071908782138081051</Time>
<Speed>1</Speed>
<Play>true</Play>
</c:Animation>
<c:Transform/>
</Components>
<Children/>
</Entity>
<Entity name="Run">
<Components>
<c:Animation>
<AnimationName>RunF</AnimationName>
<Time>0.34392228616198395</Time>
<Speed>1</Speed>
<Play>true</Play>
</c:Animation>
<c:Transform/>
</Components>
<Children/>
</Entity>
</Children>
</Entity>
<Entity name="StrafeLRBlend">
<Components>
<c:Blend>
<Pose1>Left</Pose1>
<Pose2>Right</Pose2>
<Weight>0.033793529385008014</Weight>
</c:Blend>
<c:Transform/>
</Components>
<Children>
<Entity name="Right">
<Components>
<c:Animation>
<AnimationName>StrafeRightF</AnimationName>
<Time>0.27701693305173336</Time>
<Speed>1</Speed>
<Play>true</Play>
</c:Animation>
<c:Transform/>
</Components>
<Children/>
</Entity>
<Entity name="Left">
<Components>
<c:Animation>
<AnimationName>StrafeLeftF</AnimationName>
<Time>0.25350140317161873</Time>
<Speed>1</Speed>
<Play>true</Play>
</c:Animation>
<c:Transform/>
</Components>
<Children/>
</Entity>
</Children>
</Entity>
</Children>
</Entity>
<Entity name="Idle">
<Components>
<c:Animation>
<AnimationName>IdleF</AnimationName>
<Time>0.07079692416292005</Time>
<Speed>1</Speed>
<Play>true</Play>
</c:Animation>
<c:Transform/>
</Components>
<Children/>
</Entity>
</Children>
</Entity>
</Children>
</Entity>
<Entity name="JumpDashBlend">
<Components>
<c:Blend>
<Pose1>Jump</Pose1>
<Pose2>DashBlend</Pose2>
<Weight>1</Weight>
<SubTreeRoot>true</SubTreeRoot>
</c:Blend>
<c:Transform/>
</Components>
<Children>
<Entity name="Jump">
<Components>
<c:Animation>
<AnimationName>JumpF</AnimationName>
<Time>0.5</Time>
<Speed>1</Speed>
<Loop>false</Loop>
</c:Animation>
<c:Transform/>
</Components>
<Children/>
</Entity>
<Entity name="DashBlend">
<Components>
<c:Blend>
<Pose1>DashFBBlend</Pose1>
<Pose2>DashLRBlend</Pose2>
<Weight>0.014621149736541383</Weight>
</c:Blend>
<c:Transform/>
</Components>
<Children>
<Entity name="DashFBBlend">
<Components>
<c:Blend>
<Pose1>DashForward</Pose1>
<Pose2>DashBackward</Pose2>
<Weight>0.014363533804961248</Weight>
</c:Blend>
<c:Transform/>
</Components>
<Children>
<Entity name="DashForward">
<Components>
<c:Animation>
<AnimationName>DashForwardF</AnimationName>
<Time>1</Time>
<Speed>2</Speed>
<Loop>false</Loop>
</c:Animation>
<c:Transform/>
</Components>
<Children/>
</Entity>
<Entity name="DashBackward">
<Components>
<c:Animation>
<AnimationName>DashBackwardF</AnimationName>
<Time>1</Time>
<Speed>2</Speed>
<Loop>false</Loop>
</c:Animation>
<c:Transform/>
</Components>
<Children/>
</Entity>
</Children>
</Entity>
<Entity name="DashLRBlend">
<Components>
<c:Blend>
<Pose1>DashLeft</Pose1>
<Pose2>DashRight</Pose2>
<Weight>4.3244885367500671e-16</Weight>
</c:Blend>
<c:Transform/>
</Components>
<Children>
<Entity name="DashLeft">
<Components>
<c:Animation>
<AnimationName>DashLeftF</AnimationName>
<Time>1</Time>
<Speed>2</Speed>
<Loop>false</Loop>
</c:Animation>
<c:Transform/>
</Components>
<Children/>
</Entity>
<Entity name="DashRight">
<Components>
<c:Animation>
<AnimationName>DashRightF</AnimationName>
<Time>1</Time>
<Speed>2</Speed>
<Loop>false</Loop>
</c:Animation>
<c:Transform/>
</Components>
<Children/>
</Entity>
</Children>
</Entity>
</Children>
</Entity>
</Children>
</Entity>
</Children>
</Entity>
<Entity name="ReloadSwitchBlend">
<Components>
<c:Blend>
<Pose1>ReloadSwitch</Pose1>
<Pose2>WeaponActionBlend</Pose2>
<Weight>1</Weight>
<SubTreeRoot>true</SubTreeRoot>
</c:Blend>
<c:Transform/>
</Components>
<Children>
<Entity name="ReloadSwitch">
<Components>
<c:Animation>
<AnimationName>ReloadSwitchU</AnimationName>
<Time>0.00030848838797092881</Time>
<Speed>1</Speed>
</c:Animation>
<c:Transform/>
</Components>
<Children/>
</Entity>
<Entity name="WeaponActionBlend">
<Components>
<c:Blend>
<Pose1>IdleBlend</Pose1>
<Pose2>ShootBlend</Pose2>
<Weight>0</Weight>
</c:Blend>
<c:Transform/>
</Components>
<Children>
<Entity name="IdleBlend">
<Components>
<c:Blend>
<Pose1>IdlePrimary</Pose1>
<Pose2>IdleSecondary</Pose2>
<Weight>0</Weight>
</c:Blend>
<c:Transform/>
</Components>
<Children>
<Entity name="IdlePrimary">
<Components>
<c:Animation>
<AnimationName>IdleAssaultRifleU</AnimationName>
<Time>1.4961314671805894</Time>
<Speed>1</Speed>
<Play>true</Play>
</c:Animation>
<c:Transform/>
</Components>
<Children/>
</Entity>
<Entity name="IdleSecondary">
<Components>
<c:Animation>
<AnimationName>IdleSecWepU</AnimationName>
<Time>1.4996565074703767</Time>
<Speed>1</Speed>
<Play>true</Play>
</c:Animation>
<c:Transform/>
</Components>
<Children/>
</Entity>
</Children>
</Entity>
<Entity name="ShootBlend">
<Components>
<c:Blend>
<Pose1>ShootPrimary</Pose1>
<Pose2>ShootSecondary</Pose2>
<Weight>0</Weight>
</c:Blend>
<c:Transform/>
</Components>
<Children>
<Entity name="ShootPrimary">
<Components>
<c:Animation>
<AnimationName>ShootFastRifleU</AnimationName>
<Time>0.12914212153428517</Time>
<Speed>1</Speed>
</c:Animation>
<c:Transform/>
</Components>
<Children/>
</Entity>
<Entity name="ShootSecondary">
<Components>
<c:Animation>
<AnimationName>ShootSecWepFastU</AnimationName>
</c:Animation>
<c:Transform/>
</Components>
<Children/>
</Entity>
</Children>
</Entity>
</Children>
</Entity>
</Children>
</Entity>
</Children>
</Entity>
</Children> </Children>
</Entity> </Entity>
<Entity name="AABBStanding"> <Entity name="AABBStanding">
File diff suppressed because it is too large Load Diff
@@ -169,6 +169,40 @@
</Entity> </Entity>
</Children> </Children>
</Entity> </Entity>
<Entity name="ShiftAbility">
<Components>
<c:AbilityCooldownHUD/>
<c:Fill>
<Color A="1" B="0.392156869" G="0.392156869" R="0.392156869"/>
</c:Fill>
<c:Sprite>
<DiffuseTexture>Textures/Core/White.png</DiffuseTexture>
<GlowMap></GlowMap>
<DepthSort>false</DepthSort>
</c:Sprite>
<c:Transform>
<Position X="0.224999994" Y="0.00400000019" Z="0"/>
<Scale X="0.27700001" Y="0.190000013" Z="1"/>
</c:Transform>
</Components>
<Children>
<Entity name="Cooldown">
<Components>
<c:Text>
<Content>0.0</Content>
<Resource>Fonts/DroidSans.ttf,64</Resource>
<Color A="1" B="0" G="0" R="0"/>
</c:Text>
<c:Transform>
<Position X="0.146000013" Y="0.00900000054" Z="0.0560000017"/>
<Orientation X="0" Y="0" Z="1.57099998"/>
<Scale X="0.515000045" Y="0.704000056" Z="0.431000024"/>
</c:Transform>
</Components>
<Children/>
</Entity>
</Children>
</Entity>
</Children> </Children>
</Entity> </Entity>
<Entity name="HealthText"> <Entity name="HealthText">
@@ -459,7 +493,7 @@
</c:Animation> </c:Animation>
<c:Model> <c:Model>
<Resource>Models/Characters/Assault/Test/FirstPerson.mesh</Resource> <Resource>Models/Characters/Assault/Test/FirstPerson.mesh</Resource>
<Color A="1" B="1" G="0.309803933" R="0"/> <Color A="1" B="1" G="0.294117659" R="0"/>
</c:Model> </c:Model>
<c:Transform/> <c:Transform/>
</Components> </Components>
@@ -473,7 +507,7 @@
<Weapon>AssaultWeapon</Weapon> <Weapon>AssaultWeapon</Weapon>
</c:WeaponAttachment> </c:WeaponAttachment>
<c:Spawner> <c:Spawner>
<EntityFile>Schema/Entities/AssaultWeaponView.xml</EntityFile> <EntityFile>Schema/Entities/WeaponAssaultBlueView.xml</EntityFile>
</c:Spawner> </c:Spawner>
<c:Transform> <c:Transform>
<Position X="0.120430619" Y="-0.229639441" Z="-0.181454554"/> <Position X="0.120430619" Y="-0.229639441" Z="-0.181454554"/>
@@ -554,45 +588,14 @@
</Person> </Person>
</c:WeaponAttachment> </c:WeaponAttachment>
<c:Spawner> <c:Spawner>
<EntityFile>Schema/Entities/AssaultWeaponWorld.xml</EntityFile> <EntityFile>Schema/Entities/WeaponAssaultBlueWorld.xml</EntityFile>
</c:Spawner> </c:Spawner>
<c:Transform> <c:Transform>
<Position X="0.15691258" Y="1.04389966" Z="-0.213815808"/> <Position X="0.15691258" Y="1.04389966" Z="-0.213815808"/>
<Orientation X="-0.00425229501" Y="-0.0330814682" Z="0.137528151"/> <Orientation X="-0.00425229501" Y="-0.0330814682" Z="0.137528151"/>
</c:Transform> </c:Transform>
</Components> </Components>
<Children> <Children/>
<Entity name="AssaultWeapon">
<Components>
<c:Model>
<Resource>Models/Weapons/Blue/AssaultWeaponBlue.mesh</Resource>
</c:Model>
<c:Transform/>
</Components>
<Children>
<Entity name="WeaponMuzzle">
<Components>
<c:Spawner>
<EntityFile>Schema/Entities/RayBlue.xml</EntityFile>
</c:Spawner>
<c:Transform>
<Position X="0.00624208851" Y="0.0957332104" Z="-0.159257293"/>
</c:Transform>
</Components>
<Children/>
</Entity>
<Entity name="ThirdPersonReloadSpawner">
<Components>
<c:Spawner>
<EntityFile>Schema/Entities/ReloadEffectWorld.xml</EntityFile>
</c:Spawner>
<c:Transform/>
</Components>
<Children/>
</Entity>
</Children>
</Entity>
</Children>
</Entity> </Entity>
<Entity name="SecondaryAttachment"> <Entity name="SecondaryAttachment">
<Components> <Components>
@@ -0,0 +1,698 @@
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<Entity name="Player" xmlns:c="components" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../Types/Entity.xsd">
<Components>
<c:AABB>
<Origin X="0" Y="0.772000015" Z="0"/>
<Size X="1" Y="1.60000002" Z="1"/>
</c:AABB>
<c:AssaultWeapon/>
<c:Collidable/>
<c:DashAbility/>
<c:DoubleJump/>
<c:Health/>
<c:Physics>
<Velocity X="2.30999646e-23" Y="0" Z="1.05272533e-23"/>
</c:Physics>
<c:Player>
<MovementSpeed>5</MovementSpeed>
<CurrentWeapon></CurrentWeapon>
</c:Player>
<c:Team>
<Team>
<Red/>
</Team>
</c:Team>
<c:Transform>
<Position X="0" Y="0.0288832188" Z="2.64144421"/>
</c:Transform>
</Components>
<Children>
<Entity name="Camera">
<Components>
<c:Camera>
<NearClip>0.10000000149011612</NearClip>
<FarClip>300</FarClip>
</c:Camera>
<c:Transform>
<Position X="0" Y="1.27700007" Z="0"/>
</c:Transform>
</Components>
<Children>
<Entity name="CameraModel">
<Components>
<c:Model>
<Resource>Models/Widgets/Camera.mesh</Resource>
<Visible>false</Visible>
</c:Model>
<c:Transform>
<Position X="0" Y="0.0331346765" Z="-0.0792061687"/>
<Scale X="1.30000007" Y="1.50000012" Z="1"/>
</c:Transform>
</Components>
<Children/>
</Entity>
<Entity name="HUD">
<Components>
<c:Transform>
<Position X="0" Y="0" Z="-0.5"/>
</c:Transform>
</Components>
<Children>
<Entity name="Crosshair">
<Components>
<c:Sprite>
<DiffuseTexture>Textures/Weapons/Crosshair/SmallThickHoleDot.png</DiffuseTexture>
<GlowMap></GlowMap>
<DepthSort>false</DepthSort>
</c:Sprite>
<c:Transform>
<Position X="0" Y="0" Z="0.200000003"/>
<Scale X="0.0250000004" Y="0.0250000004" Z="0"/>
</c:Transform>
</Components>
<Children/>
</Entity>
<Entity name="HitMarkerSpawner">
<Components>
<c:Spawner>
<EntityFile>Schema/Entities/HitMarker.xml</EntityFile>
</c:Spawner>
<c:Transform/>
</Components>
<Children/>
</Entity>
<Entity name="HealthHUD">
<Components>
<c:Transform/>
</Components>
<Children>
<Entity name="HealthBar">
<Components>
<c:Fill>
<Percentage>1</Percentage>
<Color A="0.301960796" B="1" G="0" R="0"/>
</c:Fill>
<c:HealthHUD/>
<c:Sprite>
<DiffuseTexture>Textures/HealthHUD3.png</DiffuseTexture>
<GlowMap></GlowMap>
<Color A="0.588235319" B="0" G="0" R="0"/>
</c:Sprite>
<c:Transform>
<Position X="-0.263000011" Y="-0.185000002" Z="0"/>
<Orientation X="5.87300014" Y="0" Z="4.71200037"/>
<Scale X="0.106000006" Y="0.333000004" Z="0.150000006"/>
</c:Transform>
</Components>
<Children>
<Entity name="BoostIcons">
<Components>
<c:BoostIconsHUD/>
<c:Transform/>
</Components>
<Children>
<Entity name="Assault">
<Components>
<c:Fill>
<Color A="1" B="0.533333361" G="1" R="0.329411775"/>
</c:Fill>
<c:Sprite>
<DiffuseTexture>Textures/Core/White.png</DiffuseTexture>
<GlowMap></GlowMap>
<DepthSort>false</DepthSort>
<Color A="0.588235319" B="0.0392156877" G="0.184313729" R="0"/>
</c:Sprite>
<c:Transform>
<Position X="0.225000009" Y="0.168000013" Z="0"/>
<Scale X="0.27700001" Y="0.100000001" Z="0.200000003"/>
</c:Transform>
</Components>
<Children/>
</Entity>
<Entity name="Defender">
<Components>
<c:Fill>
<Color A="1" B="1" G="0.58431375" R="0.105882354"/>
</c:Fill>
<c:Sprite>
<DiffuseTexture>Textures/Core/White.png</DiffuseTexture>
<GlowMap></GlowMap>
<DepthSort>false</DepthSort>
<Color A="0.588235319" B="0.34117648" G="0.192156866" R="0"/>
</c:Sprite>
<c:Transform>
<Position X="0.224999994" Y="0.27700001" Z="0"/>
<Scale X="0.27700001" Y="0.100000001" Z="0.200000003"/>
</c:Transform>
</Components>
<Children/>
</Entity>
<Entity name="Sniper">
<Components>
<c:Fill>
<Color A="1" B="0.345098048" G="0" R="1"/>
</c:Fill>
<c:Sprite>
<DiffuseTexture>Textures/Core/White.png</DiffuseTexture>
<GlowMap></GlowMap>
<DepthSort>false</DepthSort>
<Color A="0.588235319" B="0.121568628" G="0" R="0.443137258"/>
</c:Sprite>
<c:Transform>
<Position X="0.225000009" Y="0.38500002" Z="0"/>
<Scale X="0.27700001" Y="0.100000001" Z="0.200000003"/>
</c:Transform>
</Components>
<Children/>
</Entity>
</Children>
</Entity>
<Entity name="ShiftAbility">
<Components>
<c:AbilityCooldownHUD/>
<c:Fill>
<Color A="1" B="0.392156869" G="0.392156869" R="0.392156869"/>
</c:Fill>
<c:Sprite>
<DiffuseTexture>Textures/Core/White.png</DiffuseTexture>
<GlowMap></GlowMap>
<DepthSort>false</DepthSort>
</c:Sprite>
<c:Transform>
<Position X="0.224999994" Y="0.00400000019" Z="0"/>
<Scale X="0.27700001" Y="0.190000013" Z="1"/>
</c:Transform>
</Components>
<Children>
<Entity name="Cooldown">
<Components>
<c:Text>
<Content>0.0</Content>
<Resource>Fonts/DroidSans.ttf,64</Resource>
<Color A="1" B="0" G="0" R="0"/>
</c:Text>
<c:Transform>
<Position X="0.146000013" Y="0.00900000054" Z="0.0560000017"/>
<Orientation X="0" Y="0" Z="1.57099998"/>
<Scale X="0.515000045" Y="0.704000056" Z="0.431000024"/>
</c:Transform>
</Components>
<Children/>
</Entity>
</Children>
</Entity>
</Children>
</Entity>
<Entity name="HealthText">
<Components>
<c:Fill>
<Percentage>1</Percentage>
<Color A="1" B="1" G="0" R="0"/>
</c:Fill>
<c:Text>
<Content>100/100</Content>
<Resource>Fonts/DroidSans.ttf,64</Resource>
<Color A="0.505882382" B="3.92156863" G="1.17647064" R="0"/>
</c:Text>
<c:HealthHUD/>
<c:Transform>
<Position X="-0.355000019" Y="-0.203000009" Z="0.0410000011"/>
<Orientation X="0" Y="0.410000026" Z="0"/>
<Scale X="0.0350000001" Y="0.0350000001" Z="0.0350000001"/>
</c:Transform>
</Components>
<Children/>
</Entity>
</Children>
</Entity>
<Entity name="CapturePointHUD">
<Components>
<c:Transform>
<Position X="0" Y="0.190541431" Z="0"/>
<Scale X="0.0599999987" Y="0.0599999987" Z="0.0599999987"/>
</c:Transform>
</Components>
<Children>
<Entity name="BackgroundHexagon">
<Components>
<c:Sprite>
<DiffuseTexture>Textures/Core/UnitHexagon.png</DiffuseTexture>
<GlowMap></GlowMap>
<Color A="0.300000012" B="1" G="1" R="1"/>
</c:Sprite>
<c:Transform>
<Position X="0" Y="0.919596612" Z="0"/>
</c:Transform>
</Components>
<Children>
<Entity name="ProgressionHexagon">
<Components>
<c:CapturePointHUD>
<CapturePointNumber>2</CapturePointNumber>
</c:CapturePointHUD>
<c:Fill>
<Color A="0.699999988" B="1" G="0.200000003" R="0"/>
</c:Fill>
<c:Sprite>
<DiffuseTexture>Textures/Core/UnitHexagon_Rotated.png</DiffuseTexture>
<GlowMap></GlowMap>
</c:Sprite>
<c:Transform>
<Position X="0" Y="0" Z="0.00999999978"/>
<Orientation X="0" Y="0" Z="1.57079637"/>
<Scale X="0.800000012" Y="0.800000012" Z="0.800000012"/>
</c:Transform>
</Components>
<Children/>
</Entity>
</Children>
</Entity>
<Entity name="BackgroundHexagon">
<Components>
<c:Sprite>
<DiffuseTexture>Textures/Core/UnitHexagon.png</DiffuseTexture>
<GlowMap></GlowMap>
<Color A="0.300000012" B="1" G="1" R="1"/>
</c:Sprite>
<c:Transform>
<Position X="0.811270177" Y="0.440691769" Z="-0.100000001"/>
</c:Transform>
</Components>
<Children>
<Entity name="ProgressionHexagon">
<Components>
<c:CapturePointHUD>
<CapturePointNumber>3</CapturePointNumber>
</c:CapturePointHUD>
<c:Fill>
<Color A="0.699999988" B="1" G="0.200000003" R="0"/>
</c:Fill>
<c:Sprite>
<DiffuseTexture>Textures/Core/UnitHexagon_Rotated.png</DiffuseTexture>
<GlowMap></GlowMap>
</c:Sprite>
<c:Transform>
<Position X="0" Y="0" Z="0.00999999978"/>
<Orientation X="0" Y="0" Z="1.57079637"/>
<Scale X="0.800000012" Y="0.800000012" Z="0.800000012"/>
</c:Transform>
</Components>
<Children/>
</Entity>
</Children>
</Entity>
<Entity name="BackgroundHexagon">
<Components>
<c:Sprite>
<DiffuseTexture>Textures/Core/UnitHexagon.png</DiffuseTexture>
<GlowMap></GlowMap>
<Color A="0.699999988" B="1" G="0.200000003" R="0"/>
</c:Sprite>
<c:Transform>
<Position X="1.62788737" Y="0.919596612" Z="0"/>
</c:Transform>
</Components>
<Children>
<Entity name="ProgressionHexagon">
<Components>
<c:CapturePointHUD>
<CapturePointNumber>4</CapturePointNumber>
</c:CapturePointHUD>
<c:Fill>
<Percentage>1</Percentage>
<Color A="0.699999988" B="1" G="0.200000003" R="0"/>
</c:Fill>
<c:Sprite>
<DiffuseTexture>Textures/Core/UnitHexagon_Rotated.png</DiffuseTexture>
<GlowMap></GlowMap>
</c:Sprite>
<c:Transform>
<Position X="0" Y="0" Z="0.00999999978"/>
<Orientation X="0" Y="0" Z="1.57079637"/>
<Scale X="0.800000012" Y="0.800000012" Z="0.800000012"/>
</c:Transform>
</Components>
<Children/>
</Entity>
</Children>
</Entity>
<Entity name="BackgroundHexagon">
<Components>
<c:Sprite>
<DiffuseTexture>Textures/Core/UnitHexagon.png</DiffuseTexture>
<GlowMap></GlowMap>
<Color A="0.300000012" B="1" G="1" R="1"/>
</c:Sprite>
<c:Transform>
<Position X="-0.820431828" Y="0.441878349" Z="-0.100000001"/>
</c:Transform>
</Components>
<Children>
<Entity name="ProgressionHexagon">
<Components>
<c:CapturePointHUD>
<CapturePointNumber>1</CapturePointNumber>
</c:CapturePointHUD>
<c:Fill>
<Color A="0.699999988" B="1" G="0.200000003" R="0"/>
</c:Fill>
<c:Sprite>
<DiffuseTexture>Textures/Core/UnitHexagon_Rotated.png</DiffuseTexture>
<GlowMap></GlowMap>
</c:Sprite>
<c:Transform>
<Position X="0" Y="0" Z="0.00999999978"/>
<Orientation X="0" Y="0" Z="1.57079637"/>
<Scale X="0.800000012" Y="0.800000012" Z="0.800000012"/>
</c:Transform>
</Components>
<Children/>
</Entity>
</Children>
</Entity>
<Entity name="BackgroundHexagon">
<Components>
<c:Sprite>
<DiffuseTexture>Textures/Core/UnitHexagon.png</DiffuseTexture>
<GlowMap></GlowMap>
<Color A="0.699999988" B="0" G="0" R="1"/>
</c:Sprite>
<c:Transform>
<Position X="-1.58304751" Y="0.919596612" Z="0"/>
</c:Transform>
</Components>
<Children>
<Entity name="ProgressionHexagon">
<Components>
<c:CapturePointHUD/>
<c:Fill>
<Percentage>1</Percentage>
<Color A="0.699999988" B="0" G="0" R="1"/>
</c:Fill>
<c:Sprite>
<DiffuseTexture>Textures/Core/UnitHexagon_Rotated.png</DiffuseTexture>
<GlowMap></GlowMap>
</c:Sprite>
<c:Transform>
<Position X="0" Y="0" Z="0.00999999978"/>
<Orientation X="0" Y="0" Z="4.71238899"/>
<Scale X="0.800000012" Y="0.800000012" Z="0.800000012"/>
</c:Transform>
</Components>
<Children/>
</Entity>
</Children>
</Entity>
</Children>
</Entity>
<Entity name="KillFeed">
<Components>
<c:KillFeed/>
<c:Transform>
<Position X="0.486000031" Y="0.26000002" Z="0"/>
<Scale X="0.0149999997" Y="0.0149999997" Z="0.0149999997"/>
</c:Transform>
</Components>
<Children>
<Entity name="KillFeed1">
<Components>
<c:Text>
<Content></Content>
<Resource>Fonts/DroidSans.ttf,64</Resource>
<Alignment>
<Right/>
</Alignment>
</c:Text>
<c:Transform/>
</Components>
<Children/>
</Entity>
<Entity name="KillFeed2">
<Components>
<c:Text>
<Content></Content>
<Resource>Fonts/DroidSans.ttf,64</Resource>
<Alignment>
<Right/>
</Alignment>
</c:Text>
<c:Transform>
<Position X="0" Y="-1" Z="0"/>
</c:Transform>
</Components>
<Children/>
</Entity>
<Entity name="KillFeed3">
<Components>
<c:Text>
<Content></Content>
<Resource>Fonts/DroidSans.ttf,64</Resource>
<Alignment>
<Right/>
</Alignment>
</c:Text>
<c:Transform>
<Position X="0" Y="-2" Z="0"/>
</c:Transform>
</Components>
<Children/>
</Entity>
</Children>
</Entity>
<Entity name="CapturePointArrow">
<Components>
<c:CapturePointArrowHUD/>
<c:Model>
<Resource>Models/Widgets/Arrows/Arrow5.mesh</Resource>
</c:Model>
<c:Team>
<Team>
<Red/>
</Team>
</c:Team>
<c:Transform>
<Position X="0" Y="0.714000046" Z="-1.30000007"/>
<Orientation X="0.405680239" Y="0.369605929" Z="0"/>
<Scale X="0.200000003" Y="0.200000003" Z="0.200000003"/>
</c:Transform>
</Components>
<Children/>
</Entity>
</Children>
</Entity>
<Entity name="Hands">
<Components>
<c:Animation>
<AnimationName1>Idle</AnimationName1>
<Time1>1.8348644854054612</Time1>
<Speed1>1</Speed1>
<AnimationName2></AnimationName2>
<AnimationName3></AnimationName3>
</c:Animation>
<c:Model>
<Resource>Models/Characters/Assault/Test/FirstPerson.mesh</Resource>
<Color A="1" B="0.0431372561" G="0.0509803928" R="0.87843138"/>
</c:Model>
<c:Transform/>
</Components>
<Children>
<Entity name="PrimaryAttachment">
<Components>
<c:BoneAttachment>
<BoneName>R_Arm_Weapon_Joint</BoneName>
</c:BoneAttachment>
<c:WeaponAttachment>
<Weapon>AssaultWeapon</Weapon>
</c:WeaponAttachment>
<c:Spawner>
<EntityFile>Schema/Entities/WeaponAssaultRedView.xml</EntityFile>
</c:Spawner>
<c:Transform>
<Position X="0.120430619" Y="-0.229639441" Z="-0.181454554"/>
<Orientation X="0.0104045719" Y="-0.00268170005" Z="0.0428441055"/>
</c:Transform>
</Components>
<Children/>
</Entity>
<Entity name="SecondaryAttachment">
<Components>
<c:BoneAttachment>
<BoneName>R_Arm_Weapon_Joint</BoneName>
</c:BoneAttachment>
<c:WeaponAttachment>
<Weapon>SidearmWeapon</Weapon>
</c:WeaponAttachment>
<c:Spawner>
<EntityFile>Schema/Entities/SidearmWeaponView.xml</EntityFile>
</c:Spawner>
<c:Transform>
<Position X="0.120430619" Y="-0.229639441" Z="-0.181454554"/>
<Orientation X="0.0104045719" Y="-0.00268170005" Z="0.0428441055"/>
</c:Transform>
</Components>
<Children/>
</Entity>
</Children>
</Entity>
</Children>
</Entity>
<Entity name="ThirdPersonCamera">
<Components>
<c:Camera>
<NearClip>0.10000000149011612</NearClip>
<FarClip>300</FarClip>
</c:Camera>
<c:Model>
<Resource>Models/Widgets/Camera.mesh</Resource>
<Visible>false</Visible>
</c:Model>
<c:Transform>
<Position X="-0.284000009" Y="1.83800006" Z="1.18900001"/>
<Orientation X="5.95600033" Y="0" Z="0"/>
</c:Transform>
</Components>
<Children/>
</Entity>
<Entity name="PlayerModel">
<Components>
<c:Animation>
<AnimationName1>IdleF</AnimationName1>
<Speed1>1</Speed1>
<AnimationName2></AnimationName2>
<AnimationName3></AnimationName3>
</c:Animation>
<c:AnimationOffset>
<AnimationName>AimRifle</AnimationName>
<Time>0.5</Time>
</c:AnimationOffset>
<c:Shielded/>
<c:HiddenForLocalPlayer/>
<c:Model>
<Resource>Models/Characters/Assault/AssaultRed.mesh</Resource>
<Color A="1" B="1" G="0.952941179" R="1"/>
</c:Model>
<c:Transform/>
</Components>
<Children>
<Entity name="PrimaryAttachment">
<Components>
<c:BoneAttachment>
<BoneName>R_Arm_Weapon_Joint</BoneName>
</c:BoneAttachment>
<c:WeaponAttachment>
<Weapon>AssaultWeapon</Weapon>
<Person>
<ThirdPerson/>
</Person>
</c:WeaponAttachment>
<c:Spawner>
<EntityFile>Schema/Entities/WeaponAssaultRedWorld.xml</EntityFile>
</c:Spawner>
<c:Transform>
<Position X="0.15691258" Y="1.04389966" Z="-0.213815808"/>
<Orientation X="-0.00425229501" Y="-0.0330814682" Z="0.137528151"/>
</c:Transform>
</Components>
<Children/>
</Entity>
<Entity name="SecondaryAttachment">
<Components>
<c:BoneAttachment>
<BoneName>R_Arm_Weapon_Joint</BoneName>
</c:BoneAttachment>
<c:WeaponAttachment>
<Weapon>SidearmWeapon</Weapon>
<Person>
<ThirdPerson/>
</Person>
</c:WeaponAttachment>
<c:Spawner>
<EntityFile>Schema/Entities/SidearmWeaponWorld.xml</EntityFile>
</c:Spawner>
<c:Transform>
<Position X="0.15691258" Y="1.04389966" Z="-0.213815808"/>
<Orientation X="-0.00425229501" Y="-0.0330814682" Z="0.137528151"/>
</c:Transform>
</Components>
<Children/>
</Entity>
</Children>
</Entity>
<Entity name="AABBStanding">
<Components>
<c:Model>
<Resource>Models/Core/UnitCube.mesh</Resource>
<Color A="0.427450985" B="1" G="1" R="1"/>
<Visible>false</Visible>
</c:Model>
<c:Transform>
<Position X="0" Y="0.772000015" Z="0"/>
<Scale X="1" Y="1.60000002" Z="1"/>
</c:Transform>
</Components>
<Children/>
</Entity>
<Entity name="AABBCrouching">
<Components>
<c:Model>
<Resource>Models/Core/UnitCube.mesh</Resource>
<Color A="0.745098054" B="1" G="0" R="1"/>
<Visible>false</Visible>
</c:Model>
<c:Transform>
<Position X="0" Y="0.772000015" Z="0"/>
</c:Transform>
</Components>
<Children/>
</Entity>
<Entity name="PlayerName">
<Components>
<c:Text>
<Content>Insert name here</Content>
<Resource>Fonts/DroidSans.ttf,100</Resource>
<Color A="1" B="0" G="1" R="0"/>
</c:Text>
<c:Transform>
<Position X="0.100000001" Y="1.50176644" Z="-0.248000011"/>
<Orientation X="0" Y="3.14199996" Z="0"/>
<Scale X="0.100000001" Y="0.113000005" Z="0.5"/>
</c:Transform>
</Components>
<Children/>
</Entity>
<Entity name="Indicator">
<Components>
<c:Sprite>
<DiffuseTexture>Textures/Icons/Arrow.png</DiffuseTexture>
<GlowMap></GlowMap>
<DepthSort>false</DepthSort>
<Color A="1" B="1" G="0.309803933" R="0"/>
</c:Sprite>
<c:HiddenForLocalPlayer/>
<c:SpriteIndicator>
<MinScale>50</MinScale>
<VisibleForSingleTeamOnly>true</VisibleForSingleTeamOnly>
</c:SpriteIndicator>
<c:Transform>
<Position X="0" Y="1.84019077" Z="0"/>
<Scale X="0.300000012" Y="0.300000012" Z="0.300000012"/>
</c:Transform>
</Components>
<Children/>
</Entity>
<Entity name="ShieldAttachment">
<Components>
<c:Spawner>
<EntityFile>Schema/Entities/DefenderShield.xml</EntityFile>
</c:Spawner>
<c:Transform>
<Position X="0" Y="0.859000027" Z="-0.976999998"/>
</c:Transform>
</Components>
<Children/>
</Entity>
</Children>
</Entity>
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+399
View File
@@ -0,0 +1,399 @@
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<Entity name="HUD" xmlns:c="components" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../Types/Entity.xsd">
<Components>
<c:Transform>
<Position X="0" Y="0" Z="-0.5"/>
</c:Transform>
</Components>
<Children>
<Entity name="Crosshair">
<Components>
<c:Sprite>
<DiffuseTexture>Textures/Weapons/Crosshair/SmallThickHoleDot.png</DiffuseTexture>
<GlowMap></GlowMap>
<DepthSort>false</DepthSort>
</c:Sprite>
<c:Transform>
<Position X="0" Y="0" Z="0.200000003"/>
<Scale X="0.0250000004" Y="0.0250000004" Z="0"/>
</c:Transform>
</Components>
<Children/>
</Entity>
<Entity name="HitMarkerSpawner">
<Components>
<c:Spawner>
<EntityFile>Schema/Entities/HitMarker.xml</EntityFile>
</c:Spawner>
<c:Transform/>
</Components>
<Children/>
</Entity>
<Entity name="HealthHUD">
<Components>
<c:Transform/>
</Components>
<Children>
<Entity name="HealthBar">
<Components>
<c:Fill>
<Percentage>1</Percentage>
<Color A="0.301960796" B="1" G="0" R="0"/>
</c:Fill>
<c:HealthHUD/>
<c:Sprite>
<DiffuseTexture>Textures/HUD/HealthHudTriMain.png</DiffuseTexture>
<GlowMap></GlowMap>
<Color A="0.588235319" B="0" G="0" R="0"/>
</c:Sprite>
<c:Transform>
<Position X="-0.263000011" Y="-0.185000002" Z="0"/>
<Orientation X="5.87300014" Y="0" Z="4.71200037"/>
<Scale X="0.0799999982" Y="0.333000004" Z="0.150000006"/>
</c:Transform>
</Components>
<Children>
<Entity name="BoostIcons">
<Components>
<c:BoostIconsHUD/>
<c:Transform/>
</Components>
<Children>
<Entity name="Sniper">
<Components>
<c:Fill>
<Color A="1" B="0.345098048" G="0" R="1"/>
</c:Fill>
<c:Sprite>
<DiffuseTexture>Textures/Core/White.png</DiffuseTexture>
<GlowMap></GlowMap>
<DepthSort>false</DepthSort>
<Color A="0.588235319" B="0.121568628" G="0" R="0.443137258"/>
</c:Sprite>
<c:Transform>
<Position X="0.225000009" Y="0.38500002" Z="0"/>
<Scale X="0.27700001" Y="0.100000001" Z="0.200000003"/>
</c:Transform>
</Components>
<Children/>
</Entity>
<Entity name="Assault">
<Components>
<c:Fill>
<Color A="1" B="0.533333361" G="1" R="0.329411775"/>
</c:Fill>
<c:Sprite>
<DiffuseTexture>Textures/Core/White.png</DiffuseTexture>
<GlowMap></GlowMap>
<DepthSort>false</DepthSort>
<Color A="0.588235319" B="0.0392156877" G="0.184313729" R="0"/>
</c:Sprite>
<c:Transform>
<Position X="0.225000009" Y="0.168000013" Z="0"/>
<Scale X="0.27700001" Y="0.100000001" Z="0.200000003"/>
</c:Transform>
</Components>
<Children/>
</Entity>
<Entity name="Defender">
<Components>
<c:Fill>
<Color A="1" B="1" G="0.58431375" R="0.105882354"/>
</c:Fill>
<c:Sprite>
<DiffuseTexture>Textures/Core/White.png</DiffuseTexture>
<GlowMap></GlowMap>
<DepthSort>false</DepthSort>
<Color A="0.588235319" B="0.34117648" G="0.192156866" R="0"/>
</c:Sprite>
<c:Transform>
<Position X="0.224999994" Y="0.27700001" Z="0"/>
<Scale X="0.27700001" Y="0.100000001" Z="0.200000003"/>
</c:Transform>
</Components>
<Children/>
</Entity>
</Children>
</Entity>
</Children>
</Entity>
<Entity name="HealthText">
<Components>
<c:Fill>
<Percentage>1</Percentage>
<Color A="1" B="1" G="0" R="0"/>
</c:Fill>
<c:Text>
<Content>100/100</Content>
<Resource>Fonts/DroidSans.ttf,64</Resource>
<Color A="0.505882382" B="3.92156863" G="1.17647064" R="0"/>
</c:Text>
<c:HealthHUD/>
<c:Transform>
<Position X="-0.372000009" Y="-0.212000012" Z="0.0560000017"/>
<Orientation X="0" Y="0.410000026" Z="0"/>
<Scale X="0.0189999994" Y="0.0250000004" Z="0.0350000001"/>
</c:Transform>
</Components>
<Children/>
</Entity>
</Children>
</Entity>
<Entity name="CapturePointHUD">
<Components>
<c:Transform>
<Position X="0" Y="0.190541431" Z="0"/>
<Scale X="0.0599999987" Y="0.0599999987" Z="0.0599999987"/>
</c:Transform>
</Components>
<Children>
<Entity name="BackgroundHexagon">
<Components>
<c:Sprite>
<DiffuseTexture>Textures/Core/UnitHexagon.png</DiffuseTexture>
<GlowMap></GlowMap>
<Color A="0.300000012" B="1" G="1" R="1"/>
</c:Sprite>
<c:Transform>
<Position X="0" Y="0.919596612" Z="0"/>
</c:Transform>
</Components>
<Children>
<Entity name="ProgressionHexagon">
<Components>
<c:CapturePointHUD>
<CapturePointNumber>2</CapturePointNumber>
</c:CapturePointHUD>
<c:Fill>
<Color A="0.699999988" B="1" G="0.200000003" R="0"/>
</c:Fill>
<c:Sprite>
<DiffuseTexture>Textures/Core/UnitHexagon_Rotated.png</DiffuseTexture>
<GlowMap></GlowMap>
</c:Sprite>
<c:Transform>
<Position X="0" Y="0" Z="0.00999999978"/>
<Orientation X="0" Y="0" Z="1.57079637"/>
<Scale X="0.800000012" Y="0.800000012" Z="0.800000012"/>
</c:Transform>
</Components>
<Children/>
</Entity>
</Children>
</Entity>
<Entity name="BackgroundHexagon">
<Components>
<c:Sprite>
<DiffuseTexture>Textures/Core/UnitHexagon.png</DiffuseTexture>
<GlowMap></GlowMap>
<Color A="0.300000012" B="1" G="1" R="1"/>
</c:Sprite>
<c:Transform>
<Position X="0.811270177" Y="0.440691769" Z="-0.100000001"/>
</c:Transform>
</Components>
<Children>
<Entity name="ProgressionHexagon">
<Components>
<c:CapturePointHUD>
<CapturePointNumber>3</CapturePointNumber>
</c:CapturePointHUD>
<c:Fill>
<Color A="0.699999988" B="1" G="0.200000003" R="0"/>
</c:Fill>
<c:Sprite>
<DiffuseTexture>Textures/Core/UnitHexagon_Rotated.png</DiffuseTexture>
<GlowMap></GlowMap>
</c:Sprite>
<c:Transform>
<Position X="0" Y="0" Z="0.00999999978"/>
<Orientation X="0" Y="0" Z="1.57079637"/>
<Scale X="0.800000012" Y="0.800000012" Z="0.800000012"/>
</c:Transform>
</Components>
<Children/>
</Entity>
</Children>
</Entity>
<Entity name="BackgroundHexagon">
<Components>
<c:Sprite>
<DiffuseTexture>Textures/Core/UnitHexagon.png</DiffuseTexture>
<GlowMap></GlowMap>
<Color A="0.699999988" B="1" G="0.200000003" R="0"/>
</c:Sprite>
<c:Transform>
<Position X="1.62788737" Y="0.919596612" Z="0"/>
</c:Transform>
</Components>
<Children>
<Entity name="ProgressionHexagon">
<Components>
<c:CapturePointHUD>
<CapturePointNumber>4</CapturePointNumber>
</c:CapturePointHUD>
<c:Fill>
<Percentage>1</Percentage>
<Color A="0.699999988" B="1" G="0.200000003" R="0"/>
</c:Fill>
<c:Sprite>
<DiffuseTexture>Textures/Core/UnitHexagon_Rotated.png</DiffuseTexture>
<GlowMap></GlowMap>
</c:Sprite>
<c:Transform>
<Position X="0" Y="0" Z="0.00999999978"/>
<Orientation X="0" Y="0" Z="1.57079637"/>
<Scale X="0.800000012" Y="0.800000012" Z="0.800000012"/>
</c:Transform>
</Components>
<Children/>
</Entity>
</Children>
</Entity>
<Entity name="BackgroundHexagon">
<Components>
<c:Sprite>
<DiffuseTexture>Textures/Core/UnitHexagon.png</DiffuseTexture>
<GlowMap></GlowMap>
<Color A="0.300000012" B="1" G="1" R="1"/>
</c:Sprite>
<c:Transform>
<Position X="-0.820431828" Y="0.441878349" Z="-0.100000001"/>
</c:Transform>
</Components>
<Children>
<Entity name="ProgressionHexagon">
<Components>
<c:CapturePointHUD>
<CapturePointNumber>1</CapturePointNumber>
</c:CapturePointHUD>
<c:Fill>
<Color A="0.699999988" B="1" G="0.200000003" R="0"/>
</c:Fill>
<c:Sprite>
<DiffuseTexture>Textures/Core/UnitHexagon_Rotated.png</DiffuseTexture>
<GlowMap></GlowMap>
</c:Sprite>
<c:Transform>
<Position X="0" Y="0" Z="0.00999999978"/>
<Orientation X="0" Y="0" Z="1.57079637"/>
<Scale X="0.800000012" Y="0.800000012" Z="0.800000012"/>
</c:Transform>
</Components>
<Children/>
</Entity>
</Children>
</Entity>
<Entity name="BackgroundHexagon">
<Components>
<c:Sprite>
<DiffuseTexture>Textures/Core/UnitHexagon.png</DiffuseTexture>
<GlowMap></GlowMap>
<Color A="0.699999988" B="0" G="0" R="1"/>
</c:Sprite>
<c:Transform>
<Position X="-1.58304751" Y="0.919596612" Z="0"/>
</c:Transform>
</Components>
<Children>
<Entity name="ProgressionHexagon">
<Components>
<c:CapturePointHUD/>
<c:Fill>
<Percentage>1</Percentage>
<Color A="0.699999988" B="0" G="0" R="1"/>
</c:Fill>
<c:Sprite>
<DiffuseTexture>Textures/Core/UnitHexagon_Rotated.png</DiffuseTexture>
<GlowMap></GlowMap>
</c:Sprite>
<c:Transform>
<Position X="0" Y="0" Z="0.00999999978"/>
<Orientation X="0" Y="0" Z="4.71238899"/>
<Scale X="0.800000012" Y="0.800000012" Z="0.800000012"/>
</c:Transform>
</Components>
<Children/>
</Entity>
</Children>
</Entity>
</Children>
</Entity>
<Entity name="KillFeed">
<Components>
<c:KillFeed/>
<c:Transform>
<Position X="0.486000031" Y="0.26000002" Z="0"/>
<Scale X="0.0149999997" Y="0.0149999997" Z="0.0149999997"/>
</c:Transform>
</Components>
<Children>
<Entity name="KillFeed1">
<Components>
<c:Text>
<Content></Content>
<Resource>Fonts/DroidSans.ttf,64</Resource>
<Alignment>
<Right/>
</Alignment>
</c:Text>
<c:Transform/>
</Components>
<Children/>
</Entity>
<Entity name="KillFeed2">
<Components>
<c:Text>
<Content></Content>
<Resource>Fonts/DroidSans.ttf,64</Resource>
<Alignment>
<Right/>
</Alignment>
</c:Text>
<c:Transform>
<Position X="0" Y="-1" Z="0"/>
</c:Transform>
</Components>
<Children/>
</Entity>
<Entity name="KillFeed3">
<Components>
<c:Text>
<Content></Content>
<Resource>Fonts/DroidSans.ttf,64</Resource>
<Alignment>
<Right/>
</Alignment>
</c:Text>
<c:Transform>
<Position X="0" Y="-2" Z="0"/>
</c:Transform>
</Components>
<Children/>
</Entity>
</Children>
</Entity>
<Entity name="CapturePointArrow">
<Components>
<c:CapturePointArrowHUD/>
<c:Model>
<Resource>Models/Widgets/Arrows/Arrow5.mesh</Resource>
</c:Model>
<c:Team>
<Team>
<Blue/>
</Team>
</c:Team>
<c:Transform>
<Position X="0" Y="0.714000046" Z="-1.30000007"/>
<Orientation X="0.405680239" Y="0.369605929" Z="0"/>
<Scale X="0.200000003" Y="0.200000003" Z="0.200000003"/>
</c:Transform>
</Components>
<Children/>
</Entity>
</Children>
</Entity>
@@ -1,36 +1,65 @@
<?xml version="1.0" encoding="UTF-8" standalone="no" ?> <?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<Entity name="Assault" xmlns:c="components" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../Types/Entity.xsd"> <Entity name="PlayerModel" xmlns:c="components" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../Types/Entity.xsd">
<Components> <Components>
<c:BlendAdditive> <c:BlendAdditive>
<Adder>AimBlend</Adder> <Adder>BlendTreeAim</Adder>
<Receiver>FinalBlend</Receiver> <Receiver>BlendTreeAssault</Receiver>
</c:BlendAdditive> </c:BlendAdditive>
<c:Shielded/>
<c:HiddenForLocalPlayer/>
<c:Model> <c:Model>
<GlowIntensity>5</GlowIntensity>
<Resource>Models/Characters/Assault/AssaultBlue.mesh</Resource> <Resource>Models/Characters/Assault/AssaultBlue.mesh</Resource>
<Color A="1" B="1" G="0.25" R="0"/>
<Visible>false</Visible>
</c:Model> </c:Model>
<c:Transform/> <c:Transform/>
</Components> </Components>
<Children> <Children>
<Entity name="WeaponAttachment"> <Entity name="PrimaryAttachment">
<Components> <Components>
<c:BoneAttachment> <c:BoneAttachment>
<BoneName>R_Arm_Weapon_Joint</BoneName> <BoneName>R_Arm_Weapon_Joint</BoneName>
</c:BoneAttachment> </c:BoneAttachment>
<c:Model> <c:WeaponAttachment>
<Resource>Models/Weapons/Blue/AssaultWeaponBlue.mesh</Resource> <Weapon>AssaultWeapon</Weapon>
</c:Model> <Person>
<ThirdPerson/>
</Person>
</c:WeaponAttachment>
<c:Spawner>
<EntityFile>Schema/Entities/WeaponAssaultBlueWorld.xml</EntityFile>
</c:Spawner>
<c:Transform> <c:Transform>
<Position X="0.156333789" Y="1.03861308" Z="-0.236426264"/> <Position X="0.165396646" Y="1.14537966" Z="-0.206537575"/>
<Orientation X="-0.004295466" Y="-0.0313791931" Z="0.138012439"/> <Orientation X="0.484640986" Y="-0.00695174001" Z="0.0685098693"/>
<Scale X="1.00000012" Y="1" Z="1.00000012"/>
</c:Transform> </c:Transform>
</Components> </Components>
<Children/> <Children/>
</Entity> </Entity>
<Entity name="AimBlend"> <Entity name="SecondaryAttachment">
<Components>
<c:BoneAttachment>
<BoneName>R_Arm_Weapon_Joint</BoneName>
</c:BoneAttachment>
<c:WeaponAttachment>
<Weapon>SidearmWeapon</Weapon>
<Person>
<ThirdPerson/>
</Person>
</c:WeaponAttachment>
<c:Spawner>
<EntityFile>Schema/Entities/SidearmWeaponWorld.xml</EntityFile>
</c:Spawner>
<c:Transform>
<Position X="0.165396646" Y="1.14537966" Z="-0.206537575"/>
<Orientation X="0.484640986" Y="-0.00695174001" Z="0.0685098693"/>
</c:Transform>
</Components>
<Children/>
</Entity>
<Entity name="BlendTreeAim">
<Components> <Components>
<c:Blend> <c:Blend>
<Pose1>AimPrimary</Pose1> <Pose1>AimPrimary</Pose1>
@@ -45,7 +74,7 @@
<Components> <Components>
<c:Animation> <c:Animation>
<AnimationName>AimSecWepA</AnimationName> <AnimationName>AimSecWepA</AnimationName>
<Time>0.5</Time> <Time>0.71143966913223267</Time>
<Loop>false</Loop> <Loop>false</Loop>
<Additive>true</Additive> <Additive>true</Additive>
</c:Animation> </c:Animation>
@@ -57,7 +86,7 @@
<Components> <Components>
<c:Animation> <c:Animation>
<AnimationName>AimRifleA</AnimationName> <AnimationName>AimRifleA</AnimationName>
<Time>0.5</Time> <Time>0.71143966913223267</Time>
<Loop>false</Loop> <Loop>false</Loop>
<Additive>true</Additive> <Additive>true</Additive>
</c:Animation> </c:Animation>
@@ -67,16 +96,16 @@
</Entity> </Entity>
</Children> </Children>
</Entity> </Entity>
<Entity name="FinalBlend"> <Entity name="BlendTreeAssault">
<Components> <Components>
<c:BlendOverride> <c:BlendOverride>
<Master>ReloadSwitchBlend</Master> <Master>ReloadSwitchBlend</Master>
<Slave>MovementBlend</Slave> <Slave>FinalMovementBlend</Slave>
</c:BlendOverride> </c:BlendOverride>
<c:Transform/> <c:Transform/>
</Components> </Components>
<Children> <Children>
<Entity name="MovementBlend"> <Entity name="FinalMovementBlend">
<Components> <Components>
<c:Blend> <c:Blend>
<Pose1>StandCrouchBlend</Pose1> <Pose1>StandCrouchBlend</Pose1>
@@ -92,12 +121,95 @@
<c:Blend> <c:Blend>
<Pose1>StandMovement</Pose1> <Pose1>StandMovement</Pose1>
<Pose2>CrouchMovement</Pose2> <Pose2>CrouchMovement</Pose2>
<Weight>0.012867419418159054</Weight> <Weight>0</Weight>
<SubTreeRoot>true</SubTreeRoot> <SubTreeRoot>true</SubTreeRoot>
</c:Blend> </c:Blend>
<c:Transform/> <c:Transform/>
</Components> </Components>
<Children> <Children>
<Entity name="CrouchMovement">
<Components>
<c:Blend>
<Pose1>MovementBlend</Pose1>
<Pose2>Idle</Pose2>
<Weight>1</Weight>
</c:Blend>
<c:Transform/>
</Components>
<Children>
<Entity name="MovementBlend">
<Components>
<c:Blend>
<Pose1>Walk</Pose1>
<Pose2>StrafeLRBlend</Pose2>
<Weight>0</Weight>
</c:Blend>
<c:Transform/>
</Components>
<Children>
<Entity name="StrafeLRBlend">
<Components>
<c:Blend>
<Pose1>Left</Pose1>
<Pose2>Right</Pose2>
<Weight>0.033793529385008014</Weight>
</c:Blend>
<c:Transform/>
</Components>
<Children>
<Entity name="Left">
<Components>
<c:Animation>
<AnimationName>CrouchStrafeLeftF</AnimationName>
<Time>0.93215091236880454</Time>
<Speed>1</Speed>
<Play>true</Play>
</c:Animation>
<c:Transform/>
</Components>
<Children/>
</Entity>
<Entity name="Right">
<Components>
<c:Animation>
<AnimationName>CrouchStrafeRightF</AnimationName>
<Time>0.85947237431958712</Time>
<Speed>1</Speed>
<Play>true</Play>
</c:Animation>
<c:Transform/>
</Components>
<Children/>
</Entity>
</Children>
</Entity>
<Entity name="Walk">
<Components>
<c:Animation>
<AnimationName>CrouchWalkF</AnimationName>
<Time>0.63784635949699009</Time>
<Speed>1</Speed>
<Play>true</Play>
</c:Animation>
<c:Transform/>
</Components>
<Children/>
</Entity>
</Children>
</Entity>
<Entity name="Idle">
<Components>
<c:Animation>
<AnimationName>CrouchF</AnimationName>
<Time>0.99862473341677438</Time>
<Speed>1</Speed>
</c:Animation>
<c:Transform/>
</Components>
<Children/>
</Entity>
</Children>
</Entity>
<Entity name="StandMovement"> <Entity name="StandMovement">
<Components> <Components>
<c:Blend> <c:Blend>
@@ -132,7 +244,7 @@
<Components> <Components>
<c:Animation> <c:Animation>
<AnimationName>WalkF</AnimationName> <AnimationName>WalkF</AnimationName>
<Time>0.2564968854355536</Time> <Time>0.14300098890676338</Time>
<Speed>1</Speed> <Speed>1</Speed>
<Play>true</Play> <Play>true</Play>
</c:Animation> </c:Animation>
@@ -144,7 +256,7 @@
<Components> <Components>
<c:Animation> <c:Animation>
<AnimationName>RunF</AnimationName> <AnimationName>RunF</AnimationName>
<Time>0.52851038945945739</Time> <Time>0.41501449293066628</Time>
<Speed>1</Speed> <Speed>1</Speed>
<Play>true</Play> <Play>true</Play>
</c:Animation> </c:Animation>
@@ -168,7 +280,7 @@
<Components> <Components>
<c:Animation> <c:Animation>
<AnimationName>StrafeLeftF</AnimationName> <AnimationName>StrafeLeftF</AnimationName>
<Time>0.43808950646909217</Time> <Time>0.32459360994030106</Time>
<Speed>1</Speed> <Speed>1</Speed>
<Play>true</Play> <Play>true</Play>
</c:Animation> </c:Animation>
@@ -180,7 +292,7 @@
<Components> <Components>
<c:Animation> <c:Animation>
<AnimationName>StrafeRightF</AnimationName> <AnimationName>StrafeRightF</AnimationName>
<Time>0.4616050363492068</Time> <Time>0.34810913982041569</Time>
<Speed>1</Speed> <Speed>1</Speed>
<Play>true</Play> <Play>true</Play>
</c:Animation> </c:Animation>
@@ -196,7 +308,7 @@
<Components> <Components>
<c:Animation> <c:Animation>
<AnimationName>IdleF</AnimationName> <AnimationName>IdleF</AnimationName>
<Time>0.0053995709937186831</Time> <Time>1.2585556863362655</Time>
<Speed>1</Speed> <Speed>1</Speed>
<Play>true</Play> <Play>true</Play>
</c:Animation> </c:Animation>
@@ -206,89 +318,6 @@
</Entity> </Entity>
</Children> </Children>
</Entity> </Entity>
<Entity name="CrouchMovement">
<Components>
<c:Blend>
<Pose1>MovementBlend</Pose1>
<Pose2>Idle</Pose2>
<Weight>0</Weight>
</c:Blend>
<c:Transform/>
</Components>
<Children>
<Entity name="MovementBlend">
<Components>
<c:Blend>
<Pose1>Walk</Pose1>
<Pose2>StrafeLRBlend</Pose2>
<Weight>2.4565650245976452e-16</Weight>
</c:Blend>
<c:Transform/>
</Components>
<Children>
<Entity name="StrafeLRBlend">
<Components>
<c:Blend>
<Pose1>Left</Pose1>
<Pose2>Right</Pose2>
<Weight>0.033793529385008014</Weight>
</c:Blend>
<c:Transform/>
</Components>
<Children>
<Entity name="Left">
<Components>
<c:Animation>
<AnimationName>CrouchStrafeLeftF</AnimationName>
<Time>0.045646808897594759</Time>
<Speed>1</Speed>
<Play>true</Play>
</c:Animation>
<c:Transform/>
</Components>
<Children/>
</Entity>
<Entity name="Right">
<Components>
<c:Animation>
<AnimationName>CrouchStrafeRightF</AnimationName>
<Time>0.97296827084837822</Time>
<Speed>1</Speed>
<Play>true</Play>
</c:Animation>
<c:Transform/>
</Components>
<Children/>
</Entity>
</Children>
</Entity>
<Entity name="Walk">
<Components>
<c:Animation>
<AnimationName>CrouchWalkF</AnimationName>
<Time>0.75134225602578031</Time>
<Speed>1</Speed>
<Play>true</Play>
</c:Animation>
<c:Transform/>
</Components>
<Children/>
</Entity>
</Children>
</Entity>
<Entity name="Idle">
<Components>
<c:Animation>
<AnimationName>CrouchF</AnimationName>
<Time>0.99862473341677438</Time>
<Speed>1</Speed>
</c:Animation>
<c:Transform/>
</Components>
<Children/>
</Entity>
</Children>
</Entity>
</Children> </Children>
</Entity> </Entity>
<Entity name="JumpDashBlend"> <Entity name="JumpDashBlend">
@@ -339,7 +368,7 @@
<c:Animation> <c:Animation>
<AnimationName>DashForwardF</AnimationName> <AnimationName>DashForwardF</AnimationName>
<Time>1</Time> <Time>1</Time>
<Speed>1</Speed> <Speed>2</Speed>
<Loop>false</Loop> <Loop>false</Loop>
</c:Animation> </c:Animation>
<c:Transform/> <c:Transform/>
@@ -351,7 +380,7 @@
<c:Animation> <c:Animation>
<AnimationName>DashBackwardF</AnimationName> <AnimationName>DashBackwardF</AnimationName>
<Time>1</Time> <Time>1</Time>
<Speed>1</Speed> <Speed>2</Speed>
<Loop>false</Loop> <Loop>false</Loop>
</c:Animation> </c:Animation>
<c:Transform/> <c:Transform/>
@@ -375,7 +404,7 @@
<c:Animation> <c:Animation>
<AnimationName>DashLeftF</AnimationName> <AnimationName>DashLeftF</AnimationName>
<Time>1</Time> <Time>1</Time>
<Speed>1</Speed> <Speed>2</Speed>
<Loop>false</Loop> <Loop>false</Loop>
</c:Animation> </c:Animation>
<c:Transform/> <c:Transform/>
@@ -387,7 +416,7 @@
<c:Animation> <c:Animation>
<AnimationName>DashRightF</AnimationName> <AnimationName>DashRightF</AnimationName>
<Time>1</Time> <Time>1</Time>
<Speed>1</Speed> <Speed>2</Speed>
<Loop>false</Loop> <Loop>false</Loop>
</c:Animation> </c:Animation>
<c:Transform/> <c:Transform/>
@@ -448,7 +477,7 @@
<Components> <Components>
<c:Animation> <c:Animation>
<AnimationName>IdleAssaultRifleU</AnimationName> <AnimationName>IdleAssaultRifleU</AnimationName>
<Time>0.68071957047806109</Time> <Time>0.56722367394927176</Time>
<Speed>1</Speed> <Speed>1</Speed>
<Play>true</Play> <Play>true</Play>
</c:Animation> </c:Animation>
@@ -460,7 +489,7 @@
<Components> <Components>
<c:Animation> <c:Animation>
<AnimationName>IdleSecWepU</AnimationName> <AnimationName>IdleSecWepU</AnimationName>
<Time>0.68424461076784837</Time> <Time>0.57074871423905904</Time>
<Speed>1</Speed> <Speed>1</Speed>
<Play>true</Play> <Play>true</Play>
</c:Animation> </c:Animation>
+1 -1
View File
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" standalone="no" ?> <?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<Entity name="RayRed" xmlns:c="components" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../Types/Entity.xsd"> <Entity name="RayBlue" xmlns:c="components" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../Types/Entity.xsd">
<Components> <Components>
<c:Lifetime> <c:Lifetime>
+46
View File
@@ -0,0 +1,46 @@
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<Entity name="RayRed" xmlns:c="components" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../Types/Entity.xsd">
<Components>
<c:Lifetime>
<Lifetime>0.10000000149011612</Lifetime>
</c:Lifetime>
<c:Transform>
<Scale X="0" Y="1" Z="1"/>
</c:Transform>
</Components>
<Children>
<Entity>
<Components>
<c:Sprite>
<DiffuseTexture>Textures/Effects/Ray.png</DiffuseTexture>
<GlowMap></GlowMap>
<Color A="0.419607848" B="0" G="0.0470588244" R="3.92156863"/>
</c:Sprite>
<c:Transform>
<Position X="0" Y="0" Z="-0.5"/>
<Orientation X="0" Y="-1.57099998" Z="0"/>
<Scale X="1" Y="0.0260000005" Z="0"/>
</c:Transform>
</Components>
<Children/>
</Entity>
<Entity>
<Components>
<c:Sprite>
<DiffuseTexture>Textures/Effects/Ray.png</DiffuseTexture>
<GlowMap></GlowMap>
<Color A="0.419607848" B="0" G="0.0470588244" R="3.92156863"/>
</c:Sprite>
<c:Transform>
<Position X="0" Y="0" Z="-0.5"/>
<Orientation X="0" Y="4.71218538" Z="3.14199996"/>
<Scale X="1" Y="0.0260000005" Z="0"/>
</c:Transform>
</Components>
<Children/>
</Entity>
</Children>
</Entity>
File diff suppressed because it is too large Load Diff
+107
View File
@@ -0,0 +1,107 @@
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<Entity name="ScoreBoardOrigin" xmlns:c="components" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../Types/Entity.xsd">
<Components>
<c:Transform>
<Position X="66.4319992" Y="37.9560013" Z="0"/>
<Orientation X="0" Y="4.71199989" Z="0"/>
</c:Transform>
</Components>
<Children>
<Entity name="Background_Main">
<Components>
<c:Model>
<Resource>Models/Core/UnitCube.mesh</Resource>
</c:Model>
<c:Transform>
<Scale X="60" Y="30" Z="1"/>
</c:Transform>
</Components>
<Children/>
</Entity>
<Entity name="BlueSide">
<Components>
<c:Model>
<Resource>Models/Core/UnitCube.mesh</Resource>
<Color A="1" B="1" G="0.505882382" R="0"/>
</c:Model>
<c:Transform>
<Position X="16" Y="0" Z="0.5"/>
<Scale X="25" Y="28" Z="1"/>
</c:Transform>
</Components>
<Children/>
</Entity>
<Entity name="RedSide">
<Components>
<c:Model>
<Resource>Models/Core/UnitCube.mesh</Resource>
<Color A="1" B="0" G="0.219607845" R="1"/>
</c:Model>
<c:Transform>
<Position X="-16" Y="0" Z="0.5"/>
<Scale X="25" Y="28" Z="1"/>
</c:Transform>
</Components>
<Children/>
</Entity>
<Entity name="Background_Spectator">
<Components>
<c:Model>
<Resource>Models/Core/UnitCube.mesh</Resource>
</c:Model>
<c:Transform>
<Position X="0" Y="-20.5" Z="0"/>
<Scale X="20" Y="10" Z="1"/>
</c:Transform>
</Components>
<Children/>
</Entity>
<Entity name="ScoreBoard_Blue">
<Components>
<c:ScoreScreen>
<Offset X="0" Y="-2" Z="0"/>
</c:ScoreScreen>
<c:Team>
<Team>
<Blue/>
</Team>
</c:Team>
<c:Transform>
<Position X="16" Y="12" Z="1.5"/>
</c:Transform>
</Components>
<Children/>
</Entity>
<Entity name="ScoreBoard_Red">
<Components>
<c:ScoreScreen>
<Offset X="0" Y="-2" Z="0"/>
</c:ScoreScreen>
<c:Team>
<Team>
<Red/>
</Team>
</c:Team>
<c:Transform>
<Position X="-16" Y="12" Z="1.5"/>
</c:Transform>
</Components>
<Children/>
</Entity>
<Entity name="ScoreBoard_Spectators">
<Components>
<c:ScoreScreen>
<Offset X="0" Y="-1" Z="0"/>
</c:ScoreScreen>
<c:Team/>
<c:Transform>
<Position X="0" Y="-17.5" Z="1.5"/>
</c:Transform>
</Components>
<Children/>
</Entity>
</Children>
</Entity>
@@ -0,0 +1,121 @@
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<Entity name="ScoreBoard_Blue_Origin" xmlns:c="components" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../Types/Entity.xsd">
<Components>
<c:Transform/>
</Components>
<Children>
<Entity name="BlueSide">
<Components>
<c:Model>
<Resource>Models/Core/UnitCube.mesh</Resource>
<Color A="1" B="1" G="0.505882382" R="0"/>
</c:Model>
<c:Transform>
<Position X="0" Y="0" Z="0.5"/>
<Scale X="32" Y="23" Z="1"/>
</c:Transform>
</Components>
<Children/>
</Entity>
<Entity name="ScoreBoard_Blue">
<Components>
<c:ScoreScreen>
<Offset X="0" Y="-3" Z="0"/>
</c:ScoreScreen>
<c:Team>
<Team>
<Blue/>
</Team>
</c:Team>
<c:Transform>
<Position X="0" Y="7" Z="1.5"/>
</c:Transform>
</Components>
<Children>
<Entity name="IDText">
<Components>
<c:Text>
<Content>ID</Content>
<Resource>Fonts/DroidSans.ttf,64</Resource>
<Alignment>
<Left/>
</Alignment>
</c:Text>
<c:Transform>
<Position X="-13" Y="2.5" Z="0"/>
<Scale X="2" Y="2" Z="2"/>
</c:Transform>
</Components>
<Children/>
</Entity>
<Entity name="NameText">
<Components>
<c:Text>
<Content>Name</Content>
<Resource>Fonts/DroidSans.ttf,64</Resource>
<Alignment>
<Left/>
</Alignment>
</c:Text>
<c:Transform>
<Position X="-10" Y="2.5" Z="0"/>
<Scale X="2" Y="2" Z="2"/>
</c:Transform>
</Components>
<Children/>
</Entity>
<Entity name="KDText">
<Components>
<c:Text>
<Content>KD</Content>
<Resource>Fonts/DroidSans.ttf,64</Resource>
<Alignment>
<Left/>
</Alignment>
</c:Text>
<c:Transform>
<Position X="1.28838646" Y="2.5" Z="0"/>
<Scale X="2" Y="2" Z="2"/>
</c:Transform>
</Components>
<Children/>
</Entity>
<Entity name="KillsText">
<Components>
<c:Text>
<Content>Kills</Content>
<Resource>Fonts/DroidSans.ttf,64</Resource>
<Alignment>
<Left/>
</Alignment>
</c:Text>
<c:Transform>
<Position X="4.6874299" Y="2.5" Z="0"/>
<Scale X="2" Y="2" Z="2"/>
</c:Transform>
</Components>
<Children/>
</Entity>
<Entity name="DeathsText">
<Components>
<c:Text>
<Content>Deaths</Content>
<Resource>Fonts/DroidSans.ttf,64</Resource>
<Alignment>
<Left/>
</Alignment>
</c:Text>
<c:Transform>
<Position X="8.9577198" Y="2.5" Z="0"/>
<Scale X="2" Y="2" Z="2"/>
</c:Transform>
</Components>
<Children/>
</Entity>
</Children>
</Entity>
</Children>
</Entity>
@@ -0,0 +1,68 @@
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<Entity name="ScoreBoard_Main_Origin" xmlns:c="components" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../Types/Entity.xsd">
<Components>
<c:Transform/>
</Components>
<Children>
<Entity name="Background_Spectator">
<Components>
<c:Model>
<Resource>Models/Core/UnitCube.mesh</Resource>
</c:Model>
<c:Transform>
<Position X="0" Y="-19" Z="0"/>
<Scale X="30" Y="12" Z="1"/>
</c:Transform>
</Components>
<Children/>
</Entity>
<Entity name="ScoreBoard_Spectators">
<Components>
<c:ScoreScreen>
<Offset X="0" Y="-2" Z="0"/>
</c:ScoreScreen>
<c:Team/>
<c:Transform>
<Position X="0" Y="-15.7886772" Z="1.5"/>
</c:Transform>
</Components>
<Children/>
</Entity>
<Entity name="Background_Main">
<Components>
<c:Model>
<Resource>Models/Core/UnitCube.mesh</Resource>
</c:Model>
<c:Transform>
<Scale X="69" Y="25" Z="1"/>
</c:Transform>
</Components>
<Children/>
</Entity>
<Entity name="Spawner_1">
<Components>
<c:Spawner>
<EntityFile></EntityFile>
</c:Spawner>
<c:Transform>
<Position X="16.5" Y="0" Z="0"/>
</c:Transform>
</Components>
<Children/>
</Entity>
<Entity name="Spawner_2">
<Components>
<c:Spawner>
<EntityFile></EntityFile>
</c:Spawner>
<c:Transform>
<Position X="-16.5" Y="0" Z="0"/>
</c:Transform>
</Components>
<Children/>
</Entity>
</Children>
</Entity>
@@ -0,0 +1,121 @@
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<Entity name="ScoreBoard_Red_Origin" xmlns:c="components" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../Types/Entity.xsd">
<Components>
<c:Transform/>
</Components>
<Children>
<Entity name="RedSide">
<Components>
<c:Model>
<Resource>Models/Core/UnitCube.mesh</Resource>
<Color A="1" B="0" G="0.0862745121" R="1"/>
</c:Model>
<c:Transform>
<Position X="0" Y="0" Z="0.5"/>
<Scale X="32" Y="23" Z="1"/>
</c:Transform>
</Components>
<Children/>
</Entity>
<Entity name="ScoreBoard_Red">
<Components>
<c:ScoreScreen>
<Offset X="0" Y="-3" Z="0"/>
</c:ScoreScreen>
<c:Team>
<Team>
<Red/>
</Team>
</c:Team>
<c:Transform>
<Position X="0" Y="7" Z="1.5"/>
</c:Transform>
</Components>
<Children>
<Entity name="IDText">
<Components>
<c:Text>
<Content>ID</Content>
<Resource>Fonts/DroidSans.ttf,64</Resource>
<Alignment>
<Left/>
</Alignment>
</c:Text>
<c:Transform>
<Position X="-13" Y="2.5" Z="0"/>
<Scale X="2" Y="2" Z="2"/>
</c:Transform>
</Components>
<Children/>
</Entity>
<Entity name="NameText">
<Components>
<c:Text>
<Content>Name</Content>
<Resource>Fonts/DroidSans.ttf,64</Resource>
<Alignment>
<Left/>
</Alignment>
</c:Text>
<c:Transform>
<Position X="-10" Y="2.5" Z="0"/>
<Scale X="2" Y="2" Z="2"/>
</c:Transform>
</Components>
<Children/>
</Entity>
<Entity name="KDText">
<Components>
<c:Text>
<Content>KD</Content>
<Resource>Fonts/DroidSans.ttf,64</Resource>
<Alignment>
<Left/>
</Alignment>
</c:Text>
<c:Transform>
<Position X="1.28838646" Y="2.5" Z="0"/>
<Scale X="2" Y="2" Z="2"/>
</c:Transform>
</Components>
<Children/>
</Entity>
<Entity name="KillsText">
<Components>
<c:Text>
<Content>Kills</Content>
<Resource>Fonts/DroidSans.ttf,64</Resource>
<Alignment>
<Left/>
</Alignment>
</c:Text>
<c:Transform>
<Position X="4.6874299" Y="2.5" Z="0"/>
<Scale X="2" Y="2" Z="2"/>
</c:Transform>
</Components>
<Children/>
</Entity>
<Entity name="DeathsText">
<Components>
<c:Text>
<Content>Deaths</Content>
<Resource>Fonts/DroidSans.ttf,64</Resource>
<Alignment>
<Left/>
</Alignment>
</c:Text>
<c:Transform>
<Position X="8.9577198" Y="2.5" Z="0"/>
<Scale X="2" Y="2" Z="2"/>
</c:Transform>
</Components>
<Children/>
</Entity>
</Children>
</Entity>
</Children>
</Entity>
+119
View File
@@ -0,0 +1,119 @@
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<Entity name="ScoreIdentity" xmlns:c="components" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../Types/Entity.xsd">
<Components>
<c:ScoreIdentity>
<Name></Name>
</c:ScoreIdentity>
<c:Transform/>
</Components>
<Children>
<Entity name="ID">
<Components>
<c:Text>
<Content>-1</Content>
<Resource>Fonts/DroidSans.ttf,64</Resource>
<Alignment>
<Left/>
</Alignment>
</c:Text>
<c:TextFieldReader>
<ParentEntityName>ScoreIdentity</ParentEntityName>
<ComponentType>ScoreIdentity</ComponentType>
<Field>ID</Field>
</c:TextFieldReader>
<c:Transform>
<Position X="-13" Y="0" Z="0"/>
<Scale X="2" Y="2" Z="2"/>
</c:Transform>
</Components>
<Children/>
</Entity>
<Entity name="Name">
<Components>
<c:Text>
<Content></Content>
<Resource>Fonts/DroidSans.ttf,64</Resource>
<Alignment>
<Left/>
</Alignment>
</c:Text>
<c:TextFieldReader>
<ParentEntityName>ScoreIdentity</ParentEntityName>
<ComponentType>ScoreIdentity</ComponentType>
<Field>Name</Field>
</c:TextFieldReader>
<c:Transform>
<Position X="-10" Y="0" Z="0"/>
<Scale X="2" Y="2" Z="2"/>
</c:Transform>
</Components>
<Children/>
</Entity>
<Entity name="KD">
<Components>
<c:Text>
<Content>0.0</Content>
<Resource>Fonts/DroidSans.ttf,64</Resource>
<Alignment>
<Left/>
</Alignment>
</c:Text>
<c:TextFieldReader>
<ParentEntityName>ScoreIdentity</ParentEntityName>
<ComponentType>ScoreIdentity</ComponentType>
<Field>KD</Field>
</c:TextFieldReader>
<c:Transform>
<Position X="1.28572214" Y="0" Z="0"/>
<Scale X="2" Y="2" Z="2"/>
</c:Transform>
</Components>
<Children/>
</Entity>
<Entity name="Kills">
<Components>
<c:Text>
<Content>0</Content>
<Resource>Fonts/DroidSans.ttf,64</Resource>
<Alignment>
<Left/>
</Alignment>
</c:Text>
<c:TextFieldReader>
<ParentEntityName>ScoreIdentity</ParentEntityName>
<ComponentType>ScoreIdentity</ComponentType>
<Field>Kills</Field>
</c:TextFieldReader>
<c:Transform>
<Position X="6" Y="0" Z="0"/>
<Scale X="2" Y="2" Z="2"/>
</c:Transform>
</Components>
<Children/>
</Entity>
<Entity name="Deaths">
<Components>
<c:Text>
<Content>0</Content>
<Resource>Fonts/DroidSans.ttf,64</Resource>
<Alignment>
<Left/>
</Alignment>
</c:Text>
<c:TextFieldReader>
<ParentEntityName>ScoreIdentity</ParentEntityName>
<ComponentType>ScoreIdentity</ComponentType>
<Field>Deaths</Field>
</c:TextFieldReader>
<c:Transform>
<Position X="10" Y="0" Z="0"/>
<Scale X="2" Y="2" Z="2"/>
</c:Transform>
</Components>
<Children/>
</Entity>
</Children>
</Entity>
-32
View File
@@ -1,32 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<Entity name="BluSpawn" xmlns:c="components" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../Types/Entity.xsd">
<Components>
<c:PlayerSpawn/>
<c:Model>
<Resource>Models/Core/UnitCube.mesh</Resource>
</c:Model>
<c:Spawner>
<EntityFile>Schema/Entities/Player.xml</EntityFile>
</c:Spawner>
<c:Team>
<Team>
<Blue/>
</Team>
</c:Team>
<c:Transform>
<Position X="57.7363472" Y="1.18853188" Z="79.5"/>
</c:Transform>
</Components>
<Children>
<Entity>
<Components>
<c:SpawnPoint/>
<c:Transform/>
</Components>
<Children/>
</Entity>
</Children>
</Entity>
@@ -0,0 +1,25 @@
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<Entity name="SprintEffect" xmlns:c="components" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../Types/Entity.xsd">
<Components>
<c:Animation>
<AnimationName1></AnimationName1>
<AnimationName2></AnimationName2>
<AnimationName3></AnimationName3>
</c:Animation>
<c:Lifetime>
<Lifetime>0.15</Lifetime>
</c:Lifetime>
<c:ExplosionEffect>
<Velocity X="0" Y="0" Z="0"/>
<ExplosionDuration>0.15</ExplosionDuration>
</c:ExplosionEffect>
<c:Model>
<Resource></Resource>
</c:Model>
<c:Transform/>
</Components>
<Children/>
</Entity>
-45
View File
@@ -1,45 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<Entity xmlns:c="components" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../Types/Entity.xsd">
<Components>
<c:Transform/>
</Components>
<Children>
<Entity>
<Components>
<c:Model>
<Resource>Models/Core/UnitPlane.mesh</Resource>
</c:Model>
<c:Transform>
<Scale X="10" Y="10" Z="10"/>
</c:Transform>
</Components>
<Children/>
</Entity>
<Entity>
<Components>
<c:PlayerSpawn/>
<c:Spawner>
<EntityFile>Schema/Entities/Player.xml</EntityFile>
</c:Spawner>
<c:Team>
<Team>
<Red/>
</Team>
</c:Team>
<c:Transform/>
</Components>
<Children>
<Entity>
<Components>
<c:SpawnPoint/>
<c:Transform/>
</Components>
<Children/>
</Entity>
</Children>
</Entity>
</Children>
</Entity>
@@ -98,6 +98,12 @@
</Entity> </Entity>
</Children> </Children>
</Entity> </Entity>
<Entity name="ReloadEffect">
<Components>
<c:Transform/>
</Components>
<Children/>
</Entity>
</Children> </Children>
</Entity> </Entity>
@@ -1,17 +1,11 @@
<?xml version="1.0" encoding="UTF-8" standalone="no" ?> <?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<Entity name="WeaponModel" xmlns:c="components" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../Types/Entity.xsd"> <Entity name="AssaultWeapon" xmlns:c="components" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../Types/Entity.xsd">
<Components> <Components>
<c:BoneAttachment>
<BoneName>R_Arm_Weapon_Joint</BoneName>
<PositionOffset X="0" Y="0.0480000004" Z="-0.183000013"/>
</c:BoneAttachment>
<c:Model> <c:Model>
<Resource>Models/Weapons/Red/DefenderGunRed.mesh</Resource> <Resource>Models/Weapons/Red/AssaultWeaponRed.mesh</Resource>
</c:Model> </c:Model>
<c:Transform> <c:Transform/>
<Position X="0.120430306" Y="0.775375426" Z="1.36542225"/>
</c:Transform>
</Components> </Components>
<Children> <Children>
@@ -21,7 +15,8 @@
<EntityFile>Schema/Entities/RayRed.xml</EntityFile> <EntityFile>Schema/Entities/RayRed.xml</EntityFile>
</c:Spawner> </c:Spawner>
<c:Transform> <c:Transform>
<Position X="0.00191565475" Y="0.0324025005" Z="-0.2021029"/> <Position X="0.00800000038" Y="0.0920000076" Z="-0.416000009"/>
<Orientation X="6.2760005" Y="0.00500000035" Z="0.00600000005"/>
</c:Transform> </c:Transform>
</Components> </Components>
<Children/> <Children/>
@@ -37,9 +32,8 @@
</Entity> </Entity>
<Entity name="AmmunitionHUD"> <Entity name="AmmunitionHUD">
<Components> <Components>
<c:AmmunitionHUD/>
<c:Transform> <c:Transform>
<Position X="-0.0490000024" Y="0.0520000011" Z="-0.063000001"/> <Position X="-0.0440000035" Y="0.136000007" Z="-0.119000003"/>
<Scale X="0.400000006" Y="0.400000006" Z="0.400000006"/> <Scale X="0.400000006" Y="0.400000006" Z="0.400000006"/>
</c:Transform> </c:Transform>
</Components> </Components>
@@ -70,6 +64,11 @@
<Resource>Fonts/DroidSans.ttf,64</Resource> <Resource>Fonts/DroidSans.ttf,64</Resource>
<Color A="1" B="3.92156863" G="1.17647064" R="0"/> <Color A="1" B="3.92156863" G="1.17647064" R="0"/>
</c:Text> </c:Text>
<c:TextFieldReader>
<ParentEntityName>Player</ParentEntityName>
<ComponentType>AssaultWeapon</ComponentType>
<Field>MagazineAmmo</Field>
</c:TextFieldReader>
<c:Transform> <c:Transform>
<Scale X="0.0599999987" Y="0.0599999987" Z="0.0599999987"/> <Scale X="0.0599999987" Y="0.0599999987" Z="0.0599999987"/>
</c:Transform> </c:Transform>
@@ -79,10 +78,15 @@
<Entity name="Ammo"> <Entity name="Ammo">
<Components> <Components>
<c:Text> <c:Text>
<Content>360</Content> <Content>320</Content>
<Resource>Fonts/DroidSans.ttf,64</Resource> <Resource>Fonts/DroidSans.ttf,64</Resource>
<Color A="1" B="3.92156863" G="1.17647064" R="0"/> <Color A="1" B="3.92156863" G="1.17647064" R="0"/>
</c:Text> </c:Text>
<c:TextFieldReader>
<ParentEntityName>Player</ParentEntityName>
<ComponentType>AssaultWeapon</ComponentType>
<Field>Ammo</Field>
</c:TextFieldReader>
<c:Transform> <c:Transform>
<Position X="5.2833886e-05" Y="-0.0407950208" Z="0"/> <Position X="5.2833886e-05" Y="-0.0407950208" Z="0"/>
<Scale X="0.0399999991" Y="0.0399999991" Z="0.0399999991"/> <Scale X="0.0399999991" Y="0.0399999991" Z="0.0399999991"/>
@@ -94,6 +98,12 @@
</Entity> </Entity>
</Children> </Children>
</Entity> </Entity>
<Entity name="ReloadEffect">
<Components>
<c:Transform/>
</Components>
<Children/>
</Entity>
</Children> </Children>
</Entity> </Entity>
@@ -1,18 +1,11 @@
<?xml version="1.0" encoding="UTF-8" standalone="no" ?> <?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<Entity name="ThirdPersonWeaponModel" xmlns:c="components" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../Types/Entity.xsd"> <Entity name="AssaultWeapon" xmlns:c="components" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../Types/Entity.xsd">
<Components> <Components>
<c:BoneAttachment>
<BoneName>R_Arm_Weapon_Joint</BoneName>
<PositionOffset X="0" Y="0.0320000015" Z="-0.165000007"/>
</c:BoneAttachment>
<c:Model> <c:Model>
<Resource>Models/Weapons/Red/DefenderGunRed.mesh</Resource> <Resource>Models/Weapons/Red/AssaultWeaponRed.mesh</Resource>
</c:Model> </c:Model>
<c:Transform> <c:Transform/>
<Position X="0.162026152" Y="1.05794585" Z="-0.380744517"/>
<Orientation X="-0.0628969446" Y="-0.0509683639" Z="0.118739031"/>
</c:Transform>
</Components> </Components>
<Children> <Children>
@@ -22,7 +15,7 @@
<EntityFile>Schema/Entities/RayRed.xml</EntityFile> <EntityFile>Schema/Entities/RayRed.xml</EntityFile>
</c:Spawner> </c:Spawner>
<c:Transform> <c:Transform>
<Position X="0.000284185546" Y="0.0318552479" Z="-0.193328083"/> <Position X="0.00644115033" Y="0.096679531" Z="-0.436609417"/>
</c:Transform> </c:Transform>
</Components> </Components>
<Children/> <Children/>
@@ -3,11 +3,9 @@
<Components> <Components>
<c:Model> <c:Model>
<Resource>Models/Weapons/Blue/DefenderGunBlue.mesh</Resource> <Resource>Models/Weapons/Blue/DefenderWeaponBlue.mesh</Resource>
</c:Model> </c:Model>
<c:Transform> <c:Transform/>
<Position X="0" Y="0.0350000001" Z="-0.295000017"/>
</c:Transform>
</Components> </Components>
<Children> <Children>
@@ -34,7 +32,7 @@
<Entity name="AmmunitionHUD"> <Entity name="AmmunitionHUD">
<Components> <Components>
<c:Transform> <c:Transform>
<Position X="-0.0490000024" Y="0.0520000011" Z="-0.063000001"/> <Position X="-0.0460000038" Y="0.119000003" Z="-0.162"/>
<Scale X="0.400000006" Y="0.400000006" Z="0.400000006"/> <Scale X="0.400000006" Y="0.400000006" Z="0.400000006"/>
</c:Transform> </c:Transform>
</Components> </Components>
@@ -60,16 +58,16 @@
<Children> <Children>
<Entity name="MagazineAmmo"> <Entity name="MagazineAmmo">
<Components> <Components>
<c:Text>
<Content>8</Content>
<Resource>Fonts/DroidSans.ttf,64</Resource>
<Color A="1" B="3.92156863" G="1.17647064" R="0"/>
</c:Text>
<c:TextFieldReader> <c:TextFieldReader>
<ParentEntityName>Player</ParentEntityName> <ParentEntityName>Player</ParentEntityName>
<ComponentType>DefenderWeapon</ComponentType> <ComponentType>DefenderWeapon</ComponentType>
<Field>MagazineAmmo</Field> <Field>MagazineAmmo</Field>
</c:TextFieldReader> </c:TextFieldReader>
<c:Text>
<Content>0</Content>
<Resource>Fonts/DroidSans.ttf,64</Resource>
<Color A="1" B="3.92156863" G="1.17647064" R="0"/>
</c:Text>
<c:Transform> <c:Transform>
<Scale X="0.0599999987" Y="0.0599999987" Z="0.0599999987"/> <Scale X="0.0599999987" Y="0.0599999987" Z="0.0599999987"/>
</c:Transform> </c:Transform>
@@ -78,16 +76,16 @@
</Entity> </Entity>
<Entity name="Ammo"> <Entity name="Ammo">
<Components> <Components>
<c:Text>
<Content>64</Content>
<Resource>Fonts/DroidSans.ttf,64</Resource>
<Color A="1" B="3.92156863" G="1.17647064" R="0"/>
</c:Text>
<c:TextFieldReader> <c:TextFieldReader>
<ParentEntityName>Player</ParentEntityName> <ParentEntityName>Player</ParentEntityName>
<ComponentType>DefenderWeapon</ComponentType> <ComponentType>DefenderWeapon</ComponentType>
<Field>Ammo</Field> <Field>Ammo</Field>
</c:TextFieldReader> </c:TextFieldReader>
<c:Text>
<Content>0</Content>
<Resource>Fonts/DroidSans.ttf,64</Resource>
<Color A="1" B="3.92156863" G="1.17647064" R="0"/>
</c:Text>
<c:Transform> <c:Transform>
<Position X="5.2833886e-05" Y="-0.0407950208" Z="0"/> <Position X="5.2833886e-05" Y="-0.0407950208" Z="0"/>
<Scale X="0.0399999991" Y="0.0399999991" Z="0.0399999991"/> <Scale X="0.0399999991" Y="0.0399999991" Z="0.0399999991"/>
@@ -2,17 +2,10 @@
<Entity name="ThirdPersonWeaponModel" xmlns:c="components" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../Types/Entity.xsd"> <Entity name="ThirdPersonWeaponModel" xmlns:c="components" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../Types/Entity.xsd">
<Components> <Components>
<c:BoneAttachment>
<BoneName>R_Arm_Weapon_Joint</BoneName>
<PositionOffset X="0" Y="0.0320000015" Z="-0.165000007"/>
</c:BoneAttachment>
<c:Model> <c:Model>
<Resource>Models/Weapons/Blue/DefenderGunBlue.mesh</Resource> <Resource>Models/Weapons/Blue/DefenderWeaponBlue.mesh</Resource>
</c:Model> </c:Model>
<c:Transform> <c:Transform/>
<Position X="0.162026152" Y="1.05794585" Z="-0.380744517"/>
<Orientation X="-0.0628969446" Y="-0.0509683639" Z="0.118739031"/>
</c:Transform>
</Components> </Components>
<Children> <Children>
-38
View File
@@ -1,38 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<Entity xmlns:c="components" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../Types/Entity.xsd">
<Components>
<c:Transform/>
</Components>
<Children>
<Entity name="MagazineAmmo">
<Components>
<c:Text>
<Content>0</Content>
<Resource>Fonts/DroidSans.ttf,64</Resource>
<Color A="1" B="3.92156863" G="1.17647064" R="0"/>
</c:Text>
<c:Transform>
<Scale X="0.0599999987" Y="0.0599999987" Z="0.0599999987"/>
</c:Transform>
</Components>
<Children/>
</Entity>
<Entity name="Ammo">
<Components>
<c:Text>
<Content>360</Content>
<Resource>Fonts/DroidSans.ttf,64</Resource>
<Color A="1" B="3.92156863" G="1.17647064" R="0"/>
</c:Text>
<c:Transform>
<Position X="5.2833886e-05" Y="-0.0407950208" Z="0"/>
<Scale X="0.0399999991" Y="0.0399999991" Z="0.0399999991"/>
</c:Transform>
</Components>
<Children/>
</Entity>
</Children>
</Entity>
-122
View File
@@ -1,122 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<Entity name="Assault" xmlns:c="components" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../Types/Entity.xsd">
<Components>
<c:BlendAdditive>
<Adder>AimAdditive</Adder>
<Receiver>BlendOverride</Receiver>
</c:BlendAdditive>
<c:Model>
<Resource>Models/Characters/Assault/AssaultAnimations.mesh</Resource>
</c:Model>
<c:Transform/>
</Components>
<Children>
<Entity name="WeaponAttachment">
<Components>
<c:BoneAttachment>
<BoneName>R_Arm_Weapon_Joint</BoneName>
</c:BoneAttachment>
<c:Model>
<Resource>Models/Weapons/Blue/AssaultWeaponBlue.mesh</Resource>
</c:Model>
<c:Transform>
<Scale X="1.00000012" Y="1" Z="1.00000012"/>
</c:Transform>
</Components>
<Children/>
</Entity>
<Entity name="AimAdditive">
<Components>
<c:Animation>
<AnimationName>AimRifleA</AnimationName>
<Time>1</Time>
<Additive>true</Additive>
</c:Animation>
<c:Transform/>
</Components>
<Children/>
</Entity>
<Entity name="BlendOverride">
<Components>
<c:BlendOverride>
<Master>ShootRifleAnimation</Master>
<Slave>MovementBlend</Slave>
</c:BlendOverride>
<c:Transform/>
</Components>
<Children>
<Entity name="ShootRifleAnimation">
<Components>
<c:Animation>
<AnimationName>ShootFastRifleU</AnimationName>
<Time>0.11937709655124218</Time>
<Speed>1</Speed>
</c:Animation>
<c:Transform/>
</Components>
<Children/>
</Entity>
<Entity name="MovementBlend">
<Components>
<c:Blend>
<Pose1>BlendWalkRun</Pose1>
<Pose2>StrafeAnimation</Pose2>
<Weight>1</Weight>
</c:Blend>
<c:Transform/>
</Components>
<Children>
<Entity name="StrafeAnimation">
<Components>
<c:Animation>
<AnimationName>StrafeRightF</AnimationName>
<Time>0.37772682263908042</Time>
<Speed>1</Speed>
</c:Animation>
<c:Transform/>
</Components>
<Children/>
</Entity>
<Entity name="BlendWalkRun">
<Components>
<c:Blend>
<Pose1>RunAnimtaion</Pose1>
<Pose2>WalkAnimation</Pose2>
<Weight>0.43000054359436035</Weight>
</c:Blend>
<c:Transform/>
</Components>
<Children>
<Entity name="RunAnimtaion">
<Components>
<c:Animation>
<AnimationName>RunF</AnimationName>
<Time>0.13674529278927716</Time>
<Speed>1</Speed>
</c:Animation>
<c:Transform/>
</Components>
<Children/>
</Entity>
<Entity name="WalkAnimation">
<Components>
<c:Animation>
<AnimationName>WalkF</AnimationName>
<Time>0.36615803446482609</Time>
<Speed>1</Speed>
</c:Animation>
<c:Transform/>
</Components>
<Children/>
</Entity>
</Children>
</Entity>
</Children>
</Entity>
</Children>
</Entity>
</Children>
</Entity>
+2
View File
@@ -66,6 +66,8 @@
<xs:element ref="c:HealthHUD" minOccurs="0"/> <xs:element ref="c:HealthHUD" minOccurs="0"/>
<xs:element ref="c:SpriteIndicator" minOccurs="0"/> <xs:element ref="c:SpriteIndicator" minOccurs="0"/>
<xs:element ref="c:InputCmdButton" minOccurs="0"/> <xs:element ref="c:InputCmdButton" minOccurs="0"/>
<xs:element ref="c:ScoreScreen" minOccurs="0"/>
<xs:element ref="c:ScoreIdentity" minOccurs="0"/>
</xs:all> </xs:all>
</xs:complexType> </xs:complexType>
</xs:element> </xs:element>
+4 -1
View File
@@ -157,7 +157,7 @@ void EditorGUI::drawEntitiesRecursive(World* world, EntityID parent)
auto entityChildren = world->GetEntityChildren(); auto entityChildren = world->GetEntityChildren();
auto range = entityChildren.equal_range(parent); auto range = entityChildren.equal_range(parent);
for (auto it = range.first; it != range.second; it++) { for (auto it = range.first; it != range.second; it++) {
if (EditorGUI::drawEntityNode(EntityWrapper(world, it->second))) { if (drawEntityNode(EntityWrapper(world, it->second))) {
drawEntitiesRecursive(world, it->second); drawEntitiesRecursive(world, it->second);
ImGui::TreePop(); ImGui::TreePop();
} }
@@ -217,6 +217,7 @@ bool EditorGUI::drawEntityNode(EntityWrapper entity)
ImGui::EndPopup(); ImGui::EndPopup();
} }
ImGui::PushID(("EntityNode" + std::to_string(entity.ID)).c_str());
ImGui::SetNextTreeNodeOpened(true, ImGuiSetCond_Once); ImGui::SetNextTreeNodeOpened(true, ImGuiSetCond_Once);
if (ImGui::TreeNode(formatEntityName(entity).c_str())) { if (ImGui::TreeNode(formatEntityName(entity).c_str())) {
// Handle drop events for reparenting // Handle drop events for reparenting
@@ -224,8 +225,10 @@ bool EditorGUI::drawEntityNode(EntityWrapper entity)
entityChangeParent(m_CurrentlyDragging, entity); entityChangeParent(m_CurrentlyDragging, entity);
m_CurrentlyDragging = EntityWrapper::Invalid; m_CurrentlyDragging = EntityWrapper::Invalid;
} }
ImGui::PopID();
return true; return true;
} else { } else {
ImGui::PopID();
return false; return false;
} }
} }
+1 -1
View File
@@ -19,7 +19,7 @@ EditorSystem::EditorSystem(SystemParams params, IRenderer* renderer, RenderFrame
m_ActualCamera = m_EditorCamera; m_ActualCamera = m_EditorCamera;
m_EditorWorld->AttachComponent(m_EditorCamera.ID, "Transform"); m_EditorWorld->AttachComponent(m_EditorCamera.ID, "Transform");
m_EditorWorld->AttachComponent(m_EditorCamera.ID, "Camera"); m_EditorWorld->AttachComponent(m_EditorCamera.ID, "Camera");
m_EditorCameraInputController = new EditorCameraInputController<EditorSystem>(m_EventBroker, -1); m_EditorCameraInputController = new EditorCameraInputController<EditorSystem>(m_EventBroker, -1, EntityWrapper::Invalid);
m_EditorGUI = new EditorGUI(m_World, m_EventBroker); m_EditorGUI = new EditorGUI(m_World, m_EventBroker);
m_EditorGUI->SetEntitySelectedCallback(std::bind(&EditorSystem::OnEntitySelected, this, std::placeholders::_1)); m_EditorGUI->SetEntitySelectedCallback(std::bind(&EditorSystem::OnEntitySelected, this, std::placeholders::_1));
+14 -14
View File
@@ -49,16 +49,16 @@ void Client::Connect(std::string address, int port)
void Client::Update() void Client::Update()
{ {
m_EventBroker->Process<Client>(); m_EventBroker->Process<Client>();
while (m_Unreliable.IsSocketAvailable()) { //while (m_Unreliable.IsSocketAvailable()) {
// Packet will get real data in receive // // Packet will get real data in receive
Packet packet(MessageType::Invalid); // Packet packet(MessageType::Invalid);
m_Unreliable.Receive(packet); // m_Unreliable.Receive(packet);
if (packet.GetMessageType() == MessageType::Connect) { // if (packet.GetMessageType() == MessageType::Connect) {
parseUDPConnect(packet); // parseUDPConnect(packet);
} else { // } else {
parseMessageType(packet); // parseMessageType(packet);
} // }
} //}
while (m_Reliable.IsSocketAvailable()) { while (m_Reliable.IsSocketAvailable()) {
// Packet will get real data in receive // Packet will get real data in receive
Packet packet(MessageType::Invalid); Packet packet(MessageType::Invalid);
@@ -177,8 +177,8 @@ void Client::parseTCPConnect(Packet& packet)
Packet UnreliablePacket(MessageType::Connect, m_SendPacketID); Packet UnreliablePacket(MessageType::Connect, m_SendPacketID);
// Add player id and other stuff // Add player id and other stuff
packet.WritePrimitive(m_PlayerID); packet.WritePrimitive(m_PlayerID);
m_Unreliable.Send(packet); // m_Unreliable.Send(packet);
LOG_INFO("Sent UDP Connect Server"); // LOG_INFO("Sent UDP Connect Server");
} }
void Client::parsePlayerConnected(Packet & packet) void Client::parsePlayerConnected(Packet & packet)
@@ -476,7 +476,7 @@ bool Client::OnInputCommand(const Events::InputCommand & e)
if (e.Command == "ConnectToServer") { // Connect for now if (e.Command == "ConnectToServer") { // Connect for now
if (e.Value > 0) { if (e.Value > 0) {
m_Reliable.Connect(m_PlayerName, m_Address, m_Port); m_Reliable.Connect(m_PlayerName, m_Address, m_Port);
m_Unreliable.Connect(m_PlayerName, m_Address, m_Port); // m_Unreliable.Connect(m_PlayerName, m_Address, m_Port);
} }
//LOG_DEBUG("Client::OnInputCommand: Command is %s. Value is %f. PlayerID is %i.", e.Command.c_str(), e.Value, e.PlayerID); //LOG_DEBUG("Client::OnInputCommand: Command is %s. Value is %f. PlayerID is %i.", e.Command.c_str(), e.Value, e.PlayerID);
return true; return true;
@@ -613,7 +613,7 @@ void Client::sendLocalPlayerTransform()
packet.WritePrimitive((int)cAssaultWeapon["Ammo"]); packet.WritePrimitive((int)cAssaultWeapon["Ammo"]);
} }
m_Unreliable.Send(packet); m_Reliable.Send(packet);
} }
void Client::identifyPacketLoss() void Client::identifyPacketLoss()
+76 -43
View File
@@ -14,6 +14,7 @@ Server::Server(World* world, EventBroker* eventBroker, int port)
EVENT_SUBSCRIBE_MEMBER(m_EComponentDeleted, &Server::OnComponentDeleted); EVENT_SUBSCRIBE_MEMBER(m_EComponentDeleted, &Server::OnComponentDeleted);
EVENT_SUBSCRIBE_MEMBER(m_EPlayerDamage, &Server::OnPlayerDamage); EVENT_SUBSCRIBE_MEMBER(m_EPlayerDamage, &Server::OnPlayerDamage);
EVENT_SUBSCRIBE_MEMBER(m_EAmmoPickup, &Server::OnAmmoPickup); EVENT_SUBSCRIBE_MEMBER(m_EAmmoPickup, &Server::OnAmmoPickup);
EVENT_SUBSCRIBE_MEMBER(m_EPlayerDeath, &Server::OnPlayerDeath);
// BindWW // BindWW
if (port == 0) { if (port == 0) {
port = config->Get<float>("Networking.Port", 27666); port = config->Get<float>("Networking.Port", 27666);
@@ -46,19 +47,19 @@ void Server::Update()
} }
} }
PlayerDefinition pd; //PlayerDefinition pd;
while (m_Unreliable.IsSocketAvailable()) { //while (m_Unreliable.IsSocketAvailable()) {
// Packet will get real data in receive // // Packet will get real data in receive
Packet packet(MessageType::Invalid); // Packet packet(MessageType::Invalid);
m_Unreliable.Receive(packet, pd); // m_Unreliable.Receive(packet, pd);
m_Address = pd.Endpoint.address(); // m_Address = pd.Endpoint.address();
m_Port = pd.Endpoint.port(); // m_Port = pd.Endpoint.port();
if (packet.GetMessageType() == MessageType::Connect) { // if (packet.GetMessageType() == MessageType::Connect) {
parseUDPConnect(packet); // parseUDPConnect(packet);
} else { // } else {
parseMessageType(packet); // parseMessageType(packet);
} // }
} //}
while (m_ServerlistRequest.IsSocketAvailable()) { while (m_ServerlistRequest.IsSocketAvailable()) {
Packet packet(MessageType::Invalid); Packet packet(MessageType::Invalid);
@@ -161,7 +162,7 @@ void Server::unreliableBroadcast(Packet& packet)
{ {
for (auto& kv : m_ConnectedPlayers) { for (auto& kv : m_ConnectedPlayers) {
packet.ChangePacketID(kv.second.PacketID); packet.ChangePacketID(kv.second.PacketID);
m_Unreliable.Send(packet, kv.second); // m_Unreliable.Send(packet, kv.second);
} }
} }
@@ -171,7 +172,7 @@ void Server::sendSnapshot()
Packet packet(MessageType::Snapshot); Packet packet(MessageType::Snapshot);
addInputCommandsToPacket(packet); addInputCommandsToPacket(packet);
addPlayersToPacket(packet, EntityID_Invalid); addPlayersToPacket(packet, EntityID_Invalid);
unreliableBroadcast(packet); reliableBroadcast(packet);
} }
void Server::addInputCommandsToPacket(Packet& packet) void Server::addInputCommandsToPacket(Packet& packet)
@@ -319,25 +320,28 @@ void Server::checkForTimeOuts()
} }
} }
void Server::parseUDPConnect(Packet & packet) //void Server::parseUDPConnect(Packet & packet)
{ //{
// Pop size of message int // // Pop size of message int
packet.ReadPrimitive<int>(); // packet.ReadPrimitive<int>();
int messageType = packet.ReadPrimitive<int>(); // int messageType = packet.ReadPrimitive<int>();
// Read packet ID // // Read packet ID
m_PreviousPacketID = m_PacketID; // Set previous packet id // m_PreviousPacketID = m_PacketID; // Set previous packet id
m_PacketID = packet.ReadPrimitive<int>(); //Read new packet id // m_PacketID = packet.ReadPrimitive<int>(); //Read new packet id
// parse player id and other stuff // // parse player id and other stuff
PlayerID playerID = packet.ReadPrimitive<int>(); // PlayerID playerID = packet.ReadPrimitive<int>();
// Do something here? // if (!EntityWrapper(m_World, playerID).Valid()) {
boost::asio::ip::udp::endpoint endpoint(m_Address, m_Port); //
m_ConnectedPlayers.at(playerID).Endpoint = endpoint; // }
LOG_INFO("parseUDPConnect: Spectator \"%s\" connected on IP: %s", m_ConnectedPlayers.at(playerID).Name.c_str(), m_ConnectedPlayers.at(playerID).Endpoint.address().to_string().c_str()); // // Do something here?
// Send a message to the player that connected // boost::asio::ip::udp::endpoint endpoint(m_Address, m_Port);
Packet connnectPacket(MessageType::Connect, m_ConnectedPlayers.at(playerID).PacketID); // m_ConnectedPlayers.at(playerID).Endpoint = endpoint;
m_Unreliable.Send(connnectPacket); // LOG_INFO("parseUDPConnect: Spectator \"%s\" connected on IP: %s", m_ConnectedPlayers.at(playerID).Name.c_str(), m_ConnectedPlayers.at(playerID).Endpoint.address().to_string().c_str());
LOG_INFO("UDP Connect sent to client"); // // Send a message to the player that connected
} // Packet connnectPacket(MessageType::Connect, m_ConnectedPlayers.at(playerID).PacketID);
// m_Unreliable.Send(connnectPacket);
// LOG_INFO("UDP Connect sent to client");
//}
void Server::parseTCPConnect(Packet & packet) void Server::parseTCPConnect(Packet & packet)
{ {
@@ -351,7 +355,7 @@ void Server::parseTCPConnect(Packet & packet)
LOG_INFO("Parsing connections"); LOG_INFO("Parsing connections");
// Check if player is already connected // Check if player is already connected
// Ska vara till lagd i TCPServer receive // Ska vara till lagd i TCPServer receive
PlayerID playerID = GetPlayerIDFromEndpoint(); PlayerID playerID = getPlayerIDFromEndpoint();
if (playerID == -1) { if (playerID == -1) {
return; return;
} }
@@ -363,6 +367,11 @@ void Server::parseTCPConnect(Packet & packet)
m_ConnectedPlayers.at(playerID).TCPAddress = m_Address; m_ConnectedPlayers.at(playerID).TCPAddress = m_Address;
m_ConnectedPlayers.at(playerID).TCPPort = m_Port; m_ConnectedPlayers.at(playerID).TCPPort = m_Port;
Events::PlayerConnected e;
e.PlayerID = playerID;
e.PlayerName = m_ConnectedPlayers.at(playerID).Name;
m_EventBroker->Publish(e);
LOG_INFO("parseTCPConnect: Spectator \"%s\" connected on IP: %s", m_ConnectedPlayers.at(playerID).Name.c_str(), LOG_INFO("parseTCPConnect: Spectator \"%s\" connected on IP: %s", m_ConnectedPlayers.at(playerID).Name.c_str(),
m_ConnectedPlayers.at(playerID).TCPAddress.to_string().c_str()); m_ConnectedPlayers.at(playerID).TCPAddress.to_string().c_str());
@@ -526,10 +535,20 @@ bool Server::OnAmmoPickup(const Events::AmmoPickup & e)
return true; return true;
} }
bool Server::OnPlayerDeath(const Events::PlayerDeath& e)
{
Events::KillDeath eKD;
eKD.Casualty = getPlayerIDFromEntityID(e.Player.ID);
eKD.Killer = getPlayerIDFromEntityID(e.Killer.ID);
m_EventBroker->Publish(eKD);
return false;
}
void Server::parseClientPing() void Server::parseClientPing()
{ {
LOG_INFO("%i: Parsing ping", m_PacketID); LOG_INFO("%i: Parsing ping", m_PacketID);
PlayerID player = GetPlayerIDFromEndpoint(); PlayerID player = getPlayerIDFromEndpoint();
if (player == -1) { if (player == -1) {
return; return;
} }
@@ -567,7 +586,7 @@ void Server::parseOnInputCommand(Packet& packet)
{ {
PlayerID player = -1; PlayerID player = -1;
// Check which player it was who sent the message // Check which player it was who sent the message
player = GetPlayerIDFromEndpoint(); player = getPlayerIDFromEndpoint();
if (player != -1) { if (player != -1) {
while (packet.DataReadSize() < packet.Size()) { while (packet.DataReadSize() < packet.Size()) {
Events::InputCommand e; Events::InputCommand e;
@@ -586,7 +605,7 @@ void Server::parseOnInputCommand(Packet& packet)
void Server::parsePlayerTransform(Packet& packet) void Server::parsePlayerTransform(Packet& packet)
{ {
PlayerID playerID = GetPlayerIDFromEndpoint(); PlayerID playerID = getPlayerIDFromEndpoint();
if (playerID == -1) { if (playerID == -1) {
return; return;
} }
@@ -630,12 +649,16 @@ bool Server::shouldSendToClient(EntityWrapper childEntity)
return true; return true;
} }
} }
return childEntity.HasComponent("Player") || childEntity.FirstParentWithComponent("Player").Valid() return childEntity.HasComponent("Player")
|| childEntity.HasComponent("CapturePoint") || childEntity.HasComponent("HealthPickup") || childEntity.FirstParentWithComponent("Player").Valid()
|| childEntity.HasComponent("AmmoPickup"); || childEntity.HasComponent("CapturePoint")
|| childEntity.HasComponent("HealthPickup")
|| childEntity.HasComponent("AmmoPickup")
|| childEntity.HasComponent("ScoreScreen")
|| childEntity.FirstParentWithComponent("ScoreScreen").Valid();
} }
PlayerID Server::GetPlayerIDFromEndpoint() PlayerID Server::getPlayerIDFromEndpoint()
{ {
// check both tcp and udp connection // check both tcp and udp connection
for (auto& kv : m_ConnectedPlayers) { for (auto& kv : m_ConnectedPlayers) {
@@ -647,4 +670,14 @@ PlayerID Server::GetPlayerIDFromEndpoint()
} }
} }
return -1; return -1;
} }
PlayerID Server::getPlayerIDFromEntityID(EntityID entityID)
{
for(auto& kv : m_ConnectedPlayers) {
if (entityID == kv.second.EntityID) {
return kv.first;
}
}
return -1;
}
+10 -7
View File
@@ -76,7 +76,7 @@ size_t TCPClient::readBuffer()
memcpy(&sizeOfPacket, m_ReadBuffer, sizeof(int)); memcpy(&sizeOfPacket, m_ReadBuffer, sizeof(int));
if (sizeOfPacket > m_Socket->available()) { if (sizeOfPacket > m_Socket->available()) {
LOG_WARNING("TCPClient::readBuffer(): We haven't got the whole packet yet."); LOG_WARNING("TCPClient::readBuffer(): We haven't got the whole packet yet.");
return 0; //return 0;
} }
// if the buffer is to small increase the size of it // if the buffer is to small increase the size of it
// TODO if message is huge 1 time the buffer will not decrease. // TODO if message is huge 1 time the buffer will not decrease.
@@ -85,12 +85,15 @@ size_t TCPClient::readBuffer()
m_ReadBuffer = new char[sizeOfPacket]; m_ReadBuffer = new char[sizeOfPacket];
m_BufferSize = sizeOfPacket; m_BufferSize = sizeOfPacket;
} }
// Read the rest of the message size_t bytesReceived = 0;
size_t bytesReceived = m_Socket->read_some(boost while (sizeOfPacket > bytesReceived) {
::asio::buffer((void*)(m_ReadBuffer), sizeOfPacket), // Read the rest of the message
error); bytesReceived += m_Socket->read_some(boost
if (error) { ::asio::buffer((void*)(m_ReadBuffer), sizeOfPacket - bytesReceived),
//LOG_ERROR("receive: %s", error.message().c_str()); error);
if (error) {
//LOG_ERROR("receive: %s", error.message().c_str());
}
} }
if (sizeOfPacket > 1000000) if (sizeOfPacket > 1000000)
LOG_WARNING("The packets received are bigger than 1MB"); LOG_WARNING("The packets received are bigger than 1MB");
+8 -3
View File
@@ -21,33 +21,38 @@ void UDPServer::Send(Packet& packet, PlayerDefinition & playerDefinition)
boost::asio::buffer(packet.Data(), packet.Size()), boost::asio::buffer(packet.Data(), packet.Size()),
playerDefinition.Endpoint, playerDefinition.Endpoint,
0); 0);
LOG_INFO("Size of packet is %i", bytesSent);
} catch (const boost::system::system_error& e) { } catch (const boost::system::system_error& e) {
LOG_INFO(e.what());
// TODO: Clean up invalid endpoints out of m_ConnectedPlayers later // TODO: Clean up invalid endpoints out of m_ConnectedPlayers later
playerDefinition.Endpoint = boost::asio::ip::udp::endpoint(); playerDefinition.Endpoint = boost::asio::ip::udp::endpoint();
} }
} }
// Send back to endpoint of received packet // Send back to endpoint of received packet
void UDPServer::Send(Packet & packet) void UDPServer::Send(Packet & packet)
{ {
packet.UpdateSize(); packet.UpdateSize();
m_Socket->send_to( size_t bytesSent = m_Socket->send_to(
boost::asio::buffer( boost::asio::buffer(
packet.Data(), packet.Data(),
packet.Size()), packet.Size()),
m_ReceiverEndpoint, m_ReceiverEndpoint,
0); 0);
LOG_INFO("Size of packet is %i", bytesSent);
} }
// Broadcasting respond specific logic // Broadcasting respond specific logic
void UDPServer::Send(Packet & packet, boost::asio::ip::udp::endpoint endpoint) void UDPServer::Send(Packet & packet, boost::asio::ip::udp::endpoint endpoint)
{ {
packet.UpdateSize(); packet.UpdateSize();
m_Socket->send_to( size_t bytesSent = m_Socket->send_to(
boost::asio::buffer( boost::asio::buffer(
packet.Data(), packet.Data(),
packet.Size()), packet.Size()),
endpoint, endpoint,
0); 0);
LOG_INFO("Size of packet is %i", bytesSent);
} }
// Broadcasting // Broadcasting
@@ -55,7 +60,7 @@ void UDPServer::Broadcast(Packet & packet, int port)
{ {
packet.UpdateSize(); packet.UpdateSize();
m_Socket->set_option(boost::asio::socket_base::broadcast(true)); m_Socket->set_option(boost::asio::socket_base::broadcast(true));
m_Socket->send_to( size_t bytesSent = m_Socket->send_to(
boost::asio::buffer( boost::asio::buffer(
packet.Data(), packet.Data(),
packet.Size()), packet.Size()),
+1 -1
View File
@@ -196,7 +196,7 @@ bool AnimationSystem::OnAutoAnimationBlend(Events::AutoAnimationBlend& e)
abj.BlendInfo.progress = 0.0; abj.BlendInfo.progress = 0.0;
abj.BlendInfo.Start = e.Start; abj.BlendInfo.Start = e.Start;
abj.BlendInfo.SingleBlend = e.SingleLevelBlend; abj.BlendInfo.SingleBlend = e.SingleLevelBlend;
abj.BlendInfo.Weight = e.Weight;
EntityWrapper nodeEntity = subTreeRoot.FirstChildByName(e.NodeName); // more than one EntityWrapper nodeEntity = subTreeRoot.FirstChildByName(e.NodeName); // more than one
if (nodeEntity.Valid()) { if (nodeEntity.Valid()) {
+16
View File
@@ -207,6 +207,22 @@ BlendTree::AutoBlendInfo BlendTree::AutoBlendStep(AutoBlendInfo blendInfo)
{ {
std::vector<Node*> goalNodes = FindNodesByName(blendInfo.NodeName); std::vector<Node*> goalNodes = FindNodesByName(blendInfo.NodeName);
if(blendInfo.Weight >= 0 && blendInfo.Weight <= 1.0) {
for (auto it = goalNodes.begin(); it != goalNodes.end(); it++) {
EntityWrapper entity = (*it)->Entity;
if (entity.Valid()) {
if (entity.HasComponent("Blend")) {
(double&)entity["Blend"]["Weight"] = blendInfo.Weight;
}
}
}
return blendInfo;
}
if (blendInfo.Start) { if (blendInfo.Start) {
for (auto it = goalNodes.begin(); it != goalNodes.end(); it++) { for (auto it = goalNodes.begin(); it != goalNodes.end(); it++) {
EntityWrapper entity = (*it)->Entity; EntityWrapper entity = (*it)->Entity;
+3 -2
View File
@@ -34,6 +34,7 @@
#include "Game/Systems/KillFeedSystem.h" #include "Game/Systems/KillFeedSystem.h"
#include "Game/Systems/BoostSystem.h" #include "Game/Systems/BoostSystem.h"
#include "Game/Systems/BoostIconsHUDSystem.h" #include "Game/Systems/BoostIconsHUDSystem.h"
#include "Game/Systems/ScoreScreenSystem.h"
#include "GUI/ButtonSystem.h" #include "GUI/ButtonSystem.h"
#include "GUI/MainMenuSystem.h" #include "GUI/MainMenuSystem.h"
@@ -111,7 +112,7 @@ Game::Game(int argc, char* argv[])
// Create Octrees // Create Octrees
// TODO: Perhaps the world bounds should be set in some non-arbitrary way instead of this. // TODO: Perhaps the world bounds should be set in some non-arbitrary way instead of this.
AABB boxContainingTheWorld(glm::vec3(-300), glm::vec3(300)); AABB boxContainingTheWorld = AABB::FromOriginSize(glm::vec3(0.f, 10.7f, 0.f), glm::vec3(140.f, 31.f, 190.f));
m_OctreeCollision = new Octree<EntityAABB>(boxContainingTheWorld, 4); m_OctreeCollision = new Octree<EntityAABB>(boxContainingTheWorld, 4);
m_OctreeTrigger = new Octree<EntityAABB>(boxContainingTheWorld, 4); m_OctreeTrigger = new Octree<EntityAABB>(boxContainingTheWorld, 4);
m_OctreeFrustrumCulling = new Octree<EntityAABB>(boxContainingTheWorld, 4); m_OctreeFrustrumCulling = new Octree<EntityAABB>(boxContainingTheWorld, 4);
@@ -143,7 +144,6 @@ Game::Game(int argc, char* argv[])
m_SystemPipeline->AddSystem<AbilityCooldownHUDSystem>(updateOrderLevel); m_SystemPipeline->AddSystem<AbilityCooldownHUDSystem>(updateOrderLevel);
m_SystemPipeline->AddSystem<CapturePointArrowHUDSystem>(updateOrderLevel); m_SystemPipeline->AddSystem<CapturePointArrowHUDSystem>(updateOrderLevel);
m_SystemPipeline->AddSystem<KillFeedSystem>(updateOrderLevel); m_SystemPipeline->AddSystem<KillFeedSystem>(updateOrderLevel);
m_SystemPipeline->AddSystem<LifetimeSystem>(updateOrderLevel);
m_SystemPipeline->AddSystem<CapturePointSystem>(updateOrderLevel); m_SystemPipeline->AddSystem<CapturePointSystem>(updateOrderLevel);
m_SystemPipeline->AddSystem<CapturePointHUDSystem>(updateOrderLevel); m_SystemPipeline->AddSystem<CapturePointHUDSystem>(updateOrderLevel);
m_SystemPipeline->AddSystem<PickupSpawnSystem>(updateOrderLevel); m_SystemPipeline->AddSystem<PickupSpawnSystem>(updateOrderLevel);
@@ -155,6 +155,7 @@ Game::Game(int argc, char* argv[])
m_SystemPipeline->AddSystem<ButtonSystem>(updateOrderLevel, m_Renderer); m_SystemPipeline->AddSystem<ButtonSystem>(updateOrderLevel, m_Renderer);
m_SystemPipeline->AddSystem<MainMenuSystem>(updateOrderLevel, m_Renderer); m_SystemPipeline->AddSystem<MainMenuSystem>(updateOrderLevel, m_Renderer);
m_SystemPipeline->AddSystem<BoostIconsHUDSystem>(updateOrderLevel); m_SystemPipeline->AddSystem<BoostIconsHUDSystem>(updateOrderLevel);
m_SystemPipeline->AddSystem<ScoreScreenSystem>(updateOrderLevel);
// Populate Octree with collidables // Populate Octree with collidables
++updateOrderLevel; ++updateOrderLevel;
m_SystemPipeline->AddSystem<FillOctreeSystem>(updateOrderLevel, m_OctreeCollision, "Collidable"); m_SystemPipeline->AddSystem<FillOctreeSystem>(updateOrderLevel, m_OctreeCollision, "Collidable");
@@ -14,17 +14,20 @@ void AbilityCooldownHUDSystem::Update(double dt)
if (!abilityEntity.Valid()) if (!abilityEntity.Valid())
return; return;
EntityWrapper cooldownTextEntity = entity.FirstChildByName("Cooldown"); EntityWrapper cooldownTextEntity = entity.FirstChildByName("Cooldown");
double maxAbilityCD = (double)abilityEntity["DashAbility"]["CoolDownMaxTimer"];
double currentAbilityCD = (double)abilityEntity["DashAbility"]["CoolDownTimer"];
currentAbilityCD = currentAbilityCD >= 0.0 ? currentAbilityCD : 0.0;
if(cooldownTextEntity.Valid()) { if(cooldownTextEntity.Valid()) {
if(cooldownTextEntity.HasComponent("Text")) if(cooldownTextEntity.HasComponent("Text"))
{ {
double maxAbilityCD = (double)abilityEntity["DashAbility"]["CoolDownMaxTimer"];
double currentAbilityCD = (double)abilityEntity["DashAbility"]["CoolDownTimer"];
currentAbilityCD = currentAbilityCD >= 0.0 ? currentAbilityCD : 0.0;
std::string t = (std::string&)cooldownTextEntity["Text"]["Content"] = std::to_string(currentAbilityCD).substr(0, 3); std::string t = (std::string&)cooldownTextEntity["Text"]["Content"] = std::to_string(currentAbilityCD).substr(0, 3);
if(entity.HasComponent("Fill")) {
entity["Fill"]["Percentage"] = currentAbilityCD/maxAbilityCD; //TODO: current time needs to be in the component.
}
} }
} }
if (entity.HasComponent("Fill")) {
entity["Fill"]["Percentage"] = currentAbilityCD/maxAbilityCD;
}
} }
} }
+8 -2
View File
@@ -11,10 +11,16 @@ bool BoostSystem::OnPlayerDamage(Events::PlayerDamage& e)
if (e.Victim.ID == e.Inflictor.ID) { if (e.Victim.ID == e.Inflictor.ID) {
return false; return false;
} }
if (!e.Victim.Valid() && e.Victim != LocalPlayer && !e.Victim.IsChildOf(LocalPlayer)) {
if (!e.Victim.Valid() || !LocalPlayer.Valid()) {
return false; return false;
} }
if (!e.Inflictor.Valid() || !e.Victim.Valid()) {
if (e.Victim != LocalPlayer && !e.Victim.IsChildOf(LocalPlayer)) {
return false;
}
if (!e.Inflictor.Valid()) {
return false; return false;
} }
+3 -3
View File
@@ -9,7 +9,7 @@ CapturePointHUDSystem::CapturePointHUDSystem(SystemParams params)
void CapturePointHUDSystem::Update(double dt) void CapturePointHUDSystem::Update(double dt)
{ {
bool LoadCheck = true; bool loadCheck = true;
int redTeam; int redTeam;
int blueTeam; int blueTeam;
int spectatorTeam; int spectatorTeam;
@@ -35,11 +35,11 @@ void CapturePointHUDSystem::Update(double dt)
//Check if the HUD corresponds to the Capture Point Number //Check if the HUD corresponds to the Capture Point Number
if (HUD_ID == (int)entityCP["CapturePoint"]["CapturePointNumber"]) { if (HUD_ID == (int)entityCP["CapturePoint"]["CapturePointNumber"]) {
ComponentWrapper& teamComponent = entityCP["Team"]; ComponentWrapper& teamComponent = entityCP["Team"];
if (LoadCheck) { if (loadCheck) {
redTeam = (int)teamComponent["Team"].Enum("Red"); redTeam = (int)teamComponent["Team"].Enum("Red");
blueTeam = (int)teamComponent["Team"].Enum("Blue"); blueTeam = (int)teamComponent["Team"].Enum("Blue");
spectatorTeam = (int)teamComponent["Team"].Enum("Spectator"); spectatorTeam = (int)teamComponent["Team"].Enum("Spectator");
LoadCheck = false; loadCheck = false;
} }
//Color hud with team color //Color hud with team color
auto capturePointTeam = (int)teamComponent["Team"]; auto capturePointTeam = (int)teamComponent["Team"];
+11 -10
View File
@@ -12,15 +12,7 @@ HealthSystem::HealthSystem(SystemParams params)
} }
void HealthSystem::UpdateComponent(EntityWrapper& entity, ComponentWrapper& cHealth, double dt) void HealthSystem::UpdateComponent(EntityWrapper& entity, ComponentWrapper& cHealth, double dt)
{ { }
double& health = cHealth["Health"];
if (health <= 0.0) {
Events::PlayerDeath ePlayerDeath;
ePlayerDeath.Player = entity;
m_EventBroker->Publish(ePlayerDeath);
//Note: we will delete the entity in PlayerDeathSystem
}
}
bool HealthSystem::OnPlayerDamaged(Events::PlayerDamage& e) bool HealthSystem::OnPlayerDamaged(Events::PlayerDamage& e)
{ {
@@ -35,7 +27,16 @@ bool HealthSystem::OnPlayerDamaged(Events::PlayerDamage& e)
if (playerBoostDefenderEntity.Valid()) { if (playerBoostDefenderEntity.Valid()) {
e.Damage -= (double)playerBoostDefenderEntity["BoostDefender"]["StrengthOfEffect"]; e.Damage -= (double)playerBoostDefenderEntity["BoostDefender"]["StrengthOfEffect"];
} }
health -= e.Damage; if (health > 0) {
health -= e.Damage;
if (health <= 0.0) {
Events::PlayerDeath ePlayerDeath;
ePlayerDeath.Player = e.Victim;
ePlayerDeath.Killer = e.Inflictor;
m_EventBroker->Publish(ePlayerDeath);
//Note: we will delete the entity in PlayerDeathSystem
}
}
return true; return true;
} }
-4
View File
@@ -45,10 +45,6 @@ void PlayerDeathSystem::createDeathEffect(EntityWrapper player)
//copy the data from player to explosioneffectmodel //copy the data from player to explosioneffectmodel
playerEntityModel.Copy(deathEffectEW["Model"]); playerEntityModel.Copy(deathEffectEW["Model"]);
playerEntityAnimation.Copy(deathEffectEW["Animation"]); playerEntityAnimation.Copy(deathEffectEW["Animation"]);
//freeze the animation
deathEffectEW["Animation"]["Speed1"] = 0.0;
deathEffectEW["Animation"]["Speed2"] = 0.0;
deathEffectEW["Animation"]["Speed3"] = 0.0;
//copy the models position,orientation //copy the models position,orientation
deathEffectEW["Transform"]["Position"] = (glm::vec3)player["Transform"]["Position"]; deathEffectEW["Transform"]["Position"] = (glm::vec3)player["Transform"]["Position"];
+232 -90
View File
@@ -2,6 +2,7 @@
PlayerMovementSystem::PlayerMovementSystem(SystemParams params) PlayerMovementSystem::PlayerMovementSystem(SystemParams params)
: System(params) : System(params)
, m_SprintEffectTimer(0.f)
{ {
EVENT_SUBSCRIBE_MEMBER(m_EPlayerSpawned, &PlayerMovementSystem::OnPlayerSpawned); EVENT_SUBSCRIBE_MEMBER(m_EPlayerSpawned, &PlayerMovementSystem::OnPlayerSpawned);
EVENT_SUBSCRIBE_MEMBER(m_EDoubleJump, &PlayerMovementSystem::OnDoubleJump); EVENT_SUBSCRIBE_MEMBER(m_EDoubleJump, &PlayerMovementSystem::OnDoubleJump);
@@ -19,8 +20,48 @@ void PlayerMovementSystem::Update(double dt)
{ {
updateMovementControllers(dt); updateMovementControllers(dt);
// Only do physics calculations on client and only for themselves. // Only do physics calculations on client and only for themselves.
if (IsClient && LocalPlayer.Valid()) { if (IsClient) {
updateVelocity(LocalPlayer, dt); if (LocalPlayer.Valid()){
updateVelocity(LocalPlayer, dt);
}
m_SprintEffectTimer += dt;
if (m_SprintEffectTimer < 0.016f) {
return;
}
m_SprintEffectTimer = 0.f;
const ComponentPool* pool = m_World->GetComponents("SprintAbility");
if (pool == nullptr) {
return;
}
for (auto cSprint : *pool) {
if (cSprint.EntityID != LocalPlayer.ID && (bool)cSprint["Active"]) {
// Spawn one afterimage for each player that sprints.
EntityWrapper player(m_World, cSprint.EntityID);
auto entityFile = ResourceManager::Load<EntityFile>("Schema/Entities/SprintEffect.xml");
EntityWrapper sprintEffect = entityFile->MergeInto(m_World);
auto playerModel = player.FirstChildByName("PlayerModel");
if (!playerModel.Valid()) {
continue;
}
if (!playerModel.HasComponent("Model")) {
continue;
}
if (!playerModel.HasComponent("Animation")) {
continue;
}
auto playerEntityModel = playerModel["Model"];
auto playerEntityAnimation = playerModel["Animation"];
playerEntityModel.Copy(sprintEffect["Model"]);
playerEntityAnimation.Copy(sprintEffect["Animation"]);
sprintEffect["ExplosionEffect"]["EndColor"] = (glm::vec4)playerEntityModel["Color"];
((glm::vec4&)sprintEffect["ExplosionEffect"]["EndColor"]).w = 0.f;
sprintEffect["Animation"]["Speed1"] = 0.0;
sprintEffect["Animation"]["Speed2"] = 0.0;
sprintEffect["Animation"]["Speed3"] = 0.0;
sprintEffect["Transform"]["Position"] = (glm::vec3)player["Transform"]["Position"];
sprintEffect["Transform"]["Orientation"] = (glm::vec3)player["Transform"]["Orientation"];
}
}
} }
} }
@@ -42,11 +83,25 @@ void PlayerMovementSystem::updateMovementControllers(double dt)
cameraOrientation.x = glm::clamp(cameraOrientation.x, -glm::half_pi<float>(), glm::half_pi<float>()); cameraOrientation.x = glm::clamp(cameraOrientation.x, -glm::half_pi<float>(), glm::half_pi<float>());
// Set third person model aim pitch // Set third person model aim pitch
EntityWrapper playerModel = player.FirstChildByName("PlayerModel"); EntityWrapper playerModel = player.FirstChildByName("PlayerModel");
//Third-person aim
if (playerModel.Valid()) { if (playerModel.Valid()) {
ComponentWrapper cAnimationOffset = playerModel["AnimationOffset"]; EntityWrapper aimPrimaryEntity = playerModel.FirstChildByName("AimPrimary");
float pitch = cameraOrientation.x + 0.2f; if(aimPrimaryEntity.Valid()){
double time = (pitch + glm::half_pi<float>()) / glm::pi<float>(); if(aimPrimaryEntity.HasComponent("Animation")) {
cAnimationOffset["Time"] = time; float pitch = cameraOrientation.x + 0.2f;
double time = (pitch + glm::half_pi<float>()) / glm::pi<float>();
(double&)aimPrimaryEntity["Animation"]["Time"] = time;
}
}
EntityWrapper aimSecondaryEntity = playerModel.FirstChildByName("AimSecondary");
if (aimSecondaryEntity.Valid()) {
if (aimSecondaryEntity.HasComponent("Animation")) {
float pitch = cameraOrientation.x + 0.2f;
double time = (pitch + glm::half_pi<float>()) / glm::pi<float>();
(double&)aimSecondaryEntity["Animation"]["Time"] = time;
}
}
} }
} }
@@ -64,6 +119,7 @@ void PlayerMovementSystem::updateMovementControllers(double dt)
} }
bool sniperSprinting = false; bool sniperSprinting = false;
if (player.HasComponent("SprintAbility")) { if (player.HasComponent("SprintAbility")) {
(bool)player["SprintAbility"]["Active"] = controller->SpecialAbilityKeyDown();
if (controller->SpecialAbilityKeyDown()) { if (controller->SpecialAbilityKeyDown()) {
playerMovementSpeed *= (double)player["SprintAbility"]["StrengthOfEffect"]; playerMovementSpeed *= (double)player["SprintAbility"]["StrengthOfEffect"];
playerCrouchSpeed *= (double)player["SprintAbility"]["StrengthOfEffect"]; playerCrouchSpeed *= (double)player["SprintAbility"]["StrengthOfEffect"];
@@ -140,10 +196,64 @@ void PlayerMovementSystem::updateMovementControllers(double dt)
if (isOnGround) { if (isOnGround) {
(bool)cPhysics["IsOnGround"] = false; (bool)cPhysics["IsOnGround"] = false;
velocity.y = player["Player"]["JumpSpeed"]; velocity.y = player["Player"]["JumpSpeed"];
if (player.Valid()) {
EntityWrapper playerModel = player.FirstChildByName("PlayerModel");
if (playerModel.Valid()) {
{
Events::AutoAnimationBlend aeb;
aeb.Duration = 0.15;
aeb.NodeName = "Jump";
aeb.RootNode = playerModel;
aeb.Start = true;
aeb.Restart = true;
m_EventBroker->Publish(aeb);
}
{
Events::AutoAnimationBlend aeb;
aeb.Duration = 0.25;
aeb.NodeName = "StandCrouchBlend";
aeb.RootNode = playerModel;
aeb.Start = true;
aeb.Restart = false;
aeb.AnimationEntity = playerModel.FirstChildByName("Jump");
m_EventBroker->Publish(aeb);
}
}
}
} else if (player.HasComponent("DoubleJump") && !controller->DoubleJumping()) { } else if (player.HasComponent("DoubleJump") && !controller->DoubleJumping()) {
//Enter here if player can double jump and is doing so. //Enter here if player can double jump and is doing so.
(bool)cPhysics["IsOnGround"] = false; (bool)cPhysics["IsOnGround"] = false;
velocity.y = player["DoubleJump"]["DoubleJumpSpeed"]; velocity.y = player["DoubleJump"]["DoubleJumpSpeed"];
if (player.Valid()) {
EntityWrapper playerModel = player.FirstChildByName("PlayerModel");
if (playerModel.Valid()) {
{
Events::AutoAnimationBlend aeb;
aeb.Duration = 0.15;
aeb.NodeName = "Jump";
aeb.RootNode = playerModel;
aeb.Start = true;
aeb.Restart = true;
m_EventBroker->Publish(aeb);
}
{
Events::AutoAnimationBlend aeb;
aeb.Duration = 0.25;
aeb.NodeName = "StandCrouchBlend";
aeb.RootNode = playerModel;
aeb.Start = true;
aeb.Restart = false;
aeb.AnimationEntity = playerModel.FirstChildByName("Jump");
m_EventBroker->Publish(aeb);
}
}
}
// If IsServer and network is off this will not work // If IsServer and network is off this will not work
if (IsClient) { if (IsClient) {
//put a hexagon at the players feet //put a hexagon at the players feet
@@ -166,81 +276,7 @@ void PlayerMovementSystem::updateMovementControllers(double dt)
} }
} }
// Animations // TODO: Animations
EntityWrapper playerModel = player.FirstChildByName("PlayerModel");
if (playerModel.Valid()) {
ComponentWrapper cAnimation = playerModel["Animation"];
std::string& animationName1 = cAnimation["AnimationName1"];
std::string& animationName2 = cAnimation["AnimationName2"];
double& animationTime1 = cAnimation["Time1"];
double& animationTime2 = cAnimation["Time2"];
double& animationSpeed1 = cAnimation["Speed1"];
double& animationSpeed2 = cAnimation["Speed2"];
double& animationWeight1 = cAnimation["Weight1"];
double& animationWeight2 = cAnimation["Weight2"];
float movementLength = glm::length(groundVelocity);
//TODO: add assault dash animation here
if (glm::length(controller->Movement()) > 0.f) {
double forwardMovement = controller->Movement().z;
double strafeMovement = controller->Movement().x;
if (controller->Crouching() && animationName1 != "CrouchWalk") {
animationName1 = "CrouchWalk";
animationSpeed1 = 1.0 * -glm::sign(controller->Movement().z);
} else {
if (glm::abs(forwardMovement) > 0) {
if (animationName1 != "Run") {
animationName1 = "Run";
if (animationName2 == "StrafeLeft" || animationName2 == "StrafeRight") {
animationTime1 = animationTime2;
} else {
animationTime1 = 0.0;
}
}
animationSpeed1 = 2.f * -glm::sign(forwardMovement);
}
if (glm::abs(strafeMovement) > 0) {
if (animationName2 != "StrafeLeft" && animationName2 != "StrafeRight") {
if (strafeMovement < 0) {
animationName2 = "StrafeLeft";
}
if (strafeMovement > 0) {
animationName2 = "StrafeRight";
}
if (animationName1 == "Run") {
animationTime2 = animationTime1;
} else {
animationTime2 = 0.0;
}
}
animationSpeed2 = 2.f * glm::abs(strafeMovement);
}
double strafeWeight = glm::abs(strafeMovement) / (glm::abs(forwardMovement) + glm::abs(strafeMovement));
animationWeight2 = strafeWeight;
animationWeight1 = 1.0 - strafeWeight;
}
} else {
if (controller->Crouching()) {
animationName1 = "Crouch";
animationName2 = "";
animationSpeed1 = 1.0;
animationSpeed2 = 0.0;
animationWeight1 = 1.0;
animationWeight2 = 0.0;
} else {
animationName1 = "Idle";
animationName2 = "";
animationSpeed1 = 1.f;
animationSpeed2 = 0.0;
animationWeight1 = 1.0;
animationWeight2 = 0.0;
//cAnimation["AnimationName2"] = "Idle";
}
}
}
} }
controller->Reset(); controller->Reset();
@@ -308,7 +344,7 @@ void PlayerMovementSystem::playerStep(double dt)
bool PlayerMovementSystem::OnPlayerSpawned(Events::PlayerSpawned& e) bool PlayerMovementSystem::OnPlayerSpawned(Events::PlayerSpawned& e)
{ {
// When a player spawns, create an input controller for them // When a player spawns, create an input controller for them
m_PlayerInputControllers[e.Player] = new FirstPersonInputController<PlayerMovementSystem>(m_EventBroker, e.PlayerID); m_PlayerInputControllers[e.Player] = new FirstPersonInputController<PlayerMovementSystem>(m_EventBroker, e.PlayerID, e.Player);
if (e.PlayerID == -1) { if (e.PlayerID == -1) {
// Keep track of the local player // Keep track of the local player
m_LocalPlayer = e.Player; m_LocalPlayer = e.Player;
@@ -341,23 +377,129 @@ void PlayerMovementSystem::spawnHexagon(EntityWrapper target)
bool PlayerMovementSystem::OnDashAbility(Events::DashAbility & e) bool PlayerMovementSystem::OnDashAbility(Events::DashAbility & e)
{ {
EntityWrapper player(m_World, e.Player); EntityWrapper player(m_World, e.Player);
if (!player.Valid() || !IsClient || player.ID == LocalPlayer.ID) { if (!player.Valid() || !IsClient){// || player.ID == LocalPlayer.ID) {
return false; return false;
} }
auto entityFile = ResourceManager::Load<EntityFile>("Schema/Entities/DashEffect.xml"); auto entityFile = ResourceManager::Load<EntityFile>("Schema/Entities/DashEffect.xml");
EntityWrapper dashEffect = entityFile->MergeInto(m_World); EntityWrapper dashEffect = entityFile->MergeInto(m_World);
auto playerModel = player.FirstChildByName("PlayerModel"); EntityWrapper playerModel = player.FirstChildByName("PlayerModel");
auto playerEntityModel = playerModel["Model"];
for (auto& kv : m_PlayerInputControllers) {
EntityWrapper player = kv.first;
auto& controller = kv.second;
if (!player.Valid()) {
continue;
}
if (player.Valid()) {
EntityWrapper playerModel = player.FirstChildByName("PlayerModel");
if (playerModel.Valid()) {
if (glm::abs(controller->Movement().x) > glm::abs(controller->Movement().z)) {
if (controller->Movement().x > 0) {
{
Events::AutoAnimationBlend aeb;
aeb.Duration = 0.3;
aeb.NodeName = "DashRight";
aeb.RootNode = playerModel;
aeb.Restart = true;
aeb.Start = true;
m_EventBroker->Publish(aeb);
}
{
Events::AutoAnimationBlend aeb;
aeb.Duration = 0.3;
aeb.NodeName = "StandCrouchBlend";
aeb.RootNode = playerModel;
aeb.Delay = -0.3;
aeb.Start = true;
aeb.Restart = false;
aeb.AnimationEntity = playerModel.FirstChildByName("DashForward");
m_EventBroker->Publish(aeb);
}
} else {
{
Events::AutoAnimationBlend aeb;
aeb.Duration = 0.3;
aeb.NodeName = "DashLeft";
aeb.RootNode = playerModel;
aeb.Restart = true;
aeb.Start = true;
m_EventBroker->Publish(aeb);
}
{
Events::AutoAnimationBlend aeb;
aeb.Duration = 0.3;
aeb.NodeName = "StandCrouchBlend";
aeb.RootNode = playerModel;
aeb.Delay = -0.3;
aeb.Start = true;
aeb.Restart = false;
aeb.AnimationEntity = playerModel.FirstChildByName("DashForward");
m_EventBroker->Publish(aeb);
}
}
} else {
if (controller->Movement().z < 0) {
{
Events::AutoAnimationBlend aeb;
aeb.Duration = 0.3;
aeb.NodeName = "DashForward";
aeb.RootNode = playerModel;
aeb.Restart = true;
aeb.Start = true;
m_EventBroker->Publish(aeb);
}
{
Events::AutoAnimationBlend aeb;
aeb.Duration = 0.3;
aeb.NodeName = "StandCrouchBlend";
aeb.RootNode = playerModel;
aeb.Delay = -0.3;
aeb.Start = true;
aeb.Restart = false;
aeb.AnimationEntity = playerModel.FirstChildByName("DashForward");
m_EventBroker->Publish(aeb);
}
} else {
{
Events::AutoAnimationBlend aeb;
aeb.Duration = 0.3;
aeb.NodeName = "DashBackward";
aeb.RootNode = playerModel;
aeb.Restart = true;
aeb.Start = true;
m_EventBroker->Publish(aeb);
}
{
Events::AutoAnimationBlend aeb;
aeb.Duration = 0.3;
aeb.NodeName = "StandCrouchBlend";
aeb.RootNode = playerModel;
aeb.Delay = -0.3;
aeb.Start = true;
aeb.Restart = false;
aeb.AnimationEntity = playerModel.FirstChildByName("DashForward");
m_EventBroker->Publish(aeb);
}
}
}
}
}
}
/*
auto playerEntityAnimation = playerModel["Animation"]; auto playerEntityAnimation = playerModel["Animation"];
playerEntityModel.Copy(dashEffect["Model"]); playerEntityModel.Copy(dashEffect["Model"]);
playerEntityAnimation.Copy(dashEffect["Animation"]); playerEntityAnimation.Copy(dashEffect["Animation"]);
dashEffect["ExplosionEffect"]["EndColor"] = (glm::vec4)playerEntityModel["Color"]; dashEffect["ExplosionEffect"]["EndColor"] = (glm::vec4)playerEntityModel["Color"];
((glm::vec4&)dashEffect["ExplosionEffect"]["EndColor"]).w = 0.f; ((glm::vec4&)dashEffect["ExplosionEffect"]["EndColor"]).w = 0.f;
dashEffect["Animation"]["Speed1"] = 0.0; */
dashEffect["Animation"]["Speed2"] = 0.0;
dashEffect["Animation"]["Speed3"] = 0.0;
dashEffect["Transform"]["Position"] = (glm::vec3)player["Transform"]["Position"];
dashEffect["Transform"]["Orientation"] = (glm::vec3)player["Transform"]["Orientation"];
return true; return true;
} }
+158
View File
@@ -0,0 +1,158 @@
#include "Game/Systems/ScoreScreenSystem.h"
ScoreScreenSystem::ScoreScreenSystem(SystemParams params)
: System(params)
, PureSystem("ScoreScreen")
{
EVENT_SUBSCRIBE_MEMBER(m_EPlayerDeath, &ScoreScreenSystem::OnPlayerDeath);
EVENT_SUBSCRIBE_MEMBER(m_EPlayerSpawned, &ScoreScreenSystem::OnPlayerSpawn);
EVENT_SUBSCRIBE_MEMBER(m_EPlayerConnected, &ScoreScreenSystem::OnPlayerConnected);
EVENT_SUBSCRIBE_MEMBER(m_EPlayerDisconnected, &ScoreScreenSystem::OnPlayerDisconnected);
}
void ScoreScreenSystem::UpdateComponent(EntityWrapper& entity, ComponentWrapper& scoreScreen, double dt)
{
if (!IsServer) {
return;
}
if(!entity.HasComponent("ScoreScreen")){
return;
}
int currentTeam = 0;
if(entity.HasComponent("Team")) {
currentTeam = (int)entity["Team"]["Team"];
} else {
return;
}
auto children = entity.ChildrenWithComponent("ScoreIdentity");
float position = 0.f;
for (auto it = m_PlayerIdentities.begin(); it != m_PlayerIdentities.end(); ++it) {
bool found = false;
for (auto& child : children) {
int ID = (int)child["ScoreIdentity"]["ID"];
if (it->first == ID) {
if (it->second.Team != currentTeam) {
m_World->DeleteEntity(child.ID);
(int&)entity["ScoreScreen"]["TotalIdentities"] -= 1;
break;
}
for (auto it2 = m_DisconnectedIdentities.begin(); it2 != m_DisconnectedIdentities.end(); ++it2) {
if (ID == *it2) {
m_World->DeleteEntity(child.ID);
(int&)entity["ScoreScreen"]["TotalIdentities"] -= 1;
it2 = m_DisconnectedIdentities.erase(it2);
it = m_PlayerIdentities.erase(it);
//Remove from m_playerIdentities
break;
}
}
found = true;
if(!child.Valid()) {
break;
}
//Update Deaths for child
(int&)child["ScoreIdentity"]["Kills"] = it->second.Kills;
//Update Kills for child
(int&)child["ScoreIdentity"]["Deaths"] = it->second.Deaths;
//KD is not updated at the moment.
if (it->second.Deaths != 0) {
(double&)child["ScoreIdentity"]["KD"] = it->second.Kills/it->second.Deaths;
}
//Update position for child
glm::vec3 offset = (glm::vec3)entity["ScoreScreen"]["Offset"];
(glm::vec3&) child["Transform"]["Position"] = offset * position;
position += 1.f;
break;
}
}
if (it == m_PlayerIdentities.end()) {
break;
}
if(found == false) {
if(it->second.Team != currentTeam) {
//This player is not the same team as this scoreboard should show.
continue;
}
//There is no entry for this player, create one.
auto entityFile = ResourceManager::Load<EntityFile>("Schema/Entities/ScoreIdentity.xml");
EntityWrapper scoreIdentity = entityFile->MergeInto(m_World);
glm::vec3 offset = (glm::vec3)entity["ScoreScreen"]["Offset"];
int newPosition = (int)entity["ScoreScreen"]["TotalIdentities"];
(glm::vec3&) scoreIdentity["Transform"]["Position"] = offset * (float)newPosition;
auto cScoreIdentity = scoreIdentity["ScoreIdentity"];
auto data = it->second;
(std::string&)cScoreIdentity["Name"] = data.Name;
(int&)cScoreIdentity["ID"] = data.ID;
m_World->SetParent(scoreIdentity.ID, entity.ID);
(int&)entity["ScoreScreen"]["TotalIdentities"] += 1;
}
}
//Local player should have an icon, compare with LocalPlayer somthing
}
bool ScoreScreenSystem::OnPlayerDeath(const Events::KillDeath& e)
{
//When player die, add it to his score, and when possible the player who killed him.
std::unordered_map<int, PlayerData>::iterator got;
got = m_PlayerIdentities.find(e.Casualty);
if(got != m_PlayerIdentities.end()) {
got->second.Deaths++;
}
got = m_PlayerIdentities.find(e.Killer);
if (got != m_PlayerIdentities.end()) {
got->second.Kills++;
}
return 0;
}
bool ScoreScreenSystem::OnPlayerSpawn(const Events::PlayerSpawned& e)
{
//When a player spawn, add data to the list entry with the same ID.
std::unordered_map<int, PlayerData>::iterator got;
got = m_PlayerIdentities.find(e.PlayerID);
if(got == m_PlayerIdentities.end()) {
LOG_ERROR("Player spawned without having an entry on score screen");
return 0;
}
auto& data = got->second;
data.Player = e.Player;
data.Team = (int)data.Player["Team"]["Team"];
return 0;
}
bool ScoreScreenSystem::OnPlayerConnected(const Events::PlayerConnected& e)
{
//player has connected, add his data to the list of ScoreIdentities
PlayerData data;
data.ID = e.PlayerID;
data.Name = e.PlayerName;
m_PlayerIdentities.insert( {data.ID, data} );
return 0;
}
bool ScoreScreenSystem::OnPlayerDisconnected(const Events::PlayerDisconnected& e)
{
//player has disconnected, remove him from list of ScoreIdentities
m_DisconnectedIdentities.push_back(e.PlayerID);
return 0;
}
+10 -2
View File
@@ -35,9 +35,17 @@ void TextFieldReader::UpdateComponent(EntityWrapper& entity, ComponentWrapper& c
if (field.Type == "int") { if (field.Type == "int") {
text = boost::lexical_cast<std::string>((const int&)component[fieldName]); text = boost::lexical_cast<std::string>((const int&)component[fieldName]);
} else if (field.Type == "float") { } else if (field.Type == "float") {
text = boost::lexical_cast<std::string>((const float&)component[fieldName]); std::ostringstream ss;
float f = (float)component[fieldName];
ss << std::fixed << std::setprecision(2);
ss << f;
text = ss.str();
} else if (field.Type == "double") { } else if (field.Type == "double") {
text = boost::lexical_cast<std::string>((const double&)component[fieldName]); std::ostringstream ss;
double d = (double)component[fieldName];
ss << std::fixed << std::setprecision(1);
ss << d;
text = ss.str();
} else if (field.Type == "bool") { } else if (field.Type == "bool") {
text = boost::lexical_cast<std::string>((const bool&)component[fieldName]); text = boost::lexical_cast<std::string>((const bool&)component[fieldName]);
} else if (field.Type == "string") { } else if (field.Type == "string") {
@@ -10,18 +10,28 @@ void AssaultWeaponBehaviour::UpdateComponent(EntityWrapper& entity, ComponentWra
void AssaultWeaponBehaviour::UpdateWeapon(ComponentWrapper cWeapon, WeaponInfo& wi, double dt) void AssaultWeaponBehaviour::UpdateWeapon(ComponentWrapper cWeapon, WeaponInfo& wi, double dt)
{ {
// Decrement reload timer
double& reloadTimer = cWeapon["ReloadTimer"];
reloadTimer = glm::max(0.0, reloadTimer - dt);
// Start reloading automatically if at 0 mag ammo // Start reloading automatically if at 0 mag ammo
int& magAmmo = cWeapon["MagazineAmmo"]; int& magAmmo = cWeapon["MagazineAmmo"];
if (m_ConfigAutoReload && magAmmo <= 0) { if (m_ConfigAutoReload && magAmmo <= 0) {
OnReload(cWeapon, wi); OnReload(cWeapon, wi);
} }
// Handle reloading // Only start reloading once we're done firing
bool& reloadQueued = cWeapon["ReloadQueued"];
double& fireCooldown = cWeapon["FireCooldown"];
bool& isReloading = cWeapon["IsReloading"]; bool& isReloading = cWeapon["IsReloading"];
if (reloadQueued && fireCooldown <= 0) {
reloadQueued = fireCooldown;
isReloading = true;
}
// Decrement reload timer
double& reloadTimer = cWeapon["ReloadTimer"];
if (isReloading) {
reloadTimer = glm::max(0.0, reloadTimer - dt);
}
// Handle reloading
if (isReloading && reloadTimer <= 0.0) { if (isReloading && reloadTimer <= 0.0) {
int& magSize = cWeapon["MagazineSize"]; int& magSize = cWeapon["MagazineSize"];
int& ammo = cWeapon["Ammo"]; int& ammo = cWeapon["Ammo"];
@@ -29,6 +39,12 @@ void AssaultWeaponBehaviour::UpdateWeapon(ComponentWrapper cWeapon, WeaponInfo&
ammo = glm::max(0, ammo - (magSize - magAmmo)); ammo = glm::max(0, ammo - (magSize - magAmmo));
magAmmo = glm::min(magSize, ammo); magAmmo = glm::min(magSize, ammo);
isReloading = false; isReloading = false;
if (wi.FirstPersonEntity.Valid()) {
wi.FirstPersonEntity["Model"]["Visible"] = true;
}
if (wi.ThirdPersonEntity.Valid()) {
wi.ThirdPersonEntity["Model"]["Visible"] = true;
}
} }
// Restore view angle // Restore view angle
@@ -46,6 +62,20 @@ void AssaultWeaponBehaviour::UpdateWeapon(ComponentWrapper cWeapon, WeaponInfo&
} }
} }
// Update first person run animation
ComponentWrapper cPlayer = wi.Player["Player"];
ComponentWrapper cPhysics = wi.Player["Physics"];
const float& movementSpeed = cPlayer["MovementSpeed"];
float speed = glm::length((const glm::vec3&)cPhysics["Velocity"]);
float animationWeight = glm::min(speed, movementSpeed) / movementSpeed;
EntityWrapper rootNode = wi.FirstPersonEntity.FirstParentWithComponent("Model");
if (rootNode.Valid()) {
EntityWrapper blend = rootNode.FirstChildByName("MovementBlend");
if (blend.Valid()) {
(double&)blend["Blend"]["Weight"] = animationWeight;
}
}
// Fire if we're able to fire // Fire if we're able to fire
if (canFire(cWeapon, wi)) { if (canFire(cWeapon, wi)) {
fireBullet(cWeapon, wi); fireBullet(cWeapon, wi);
@@ -67,8 +97,9 @@ void AssaultWeaponBehaviour::OnCeasePrimaryFire(ComponentWrapper cWeapon, Weapon
void AssaultWeaponBehaviour::OnReload(ComponentWrapper cWeapon, WeaponInfo& wi) void AssaultWeaponBehaviour::OnReload(ComponentWrapper cWeapon, WeaponInfo& wi)
{ {
bool& reloadQueued = cWeapon["ReloadQueued"];
bool& isReloading = cWeapon["IsReloading"]; bool& isReloading = cWeapon["IsReloading"];
if (isReloading) { if (reloadQueued || isReloading) {
return; return;
} }
@@ -86,8 +117,35 @@ void AssaultWeaponBehaviour::OnReload(ComponentWrapper cWeapon, WeaponInfo& wi)
double& reloadTimer = cWeapon["ReloadTimer"]; double& reloadTimer = cWeapon["ReloadTimer"];
// Start reload // Start reload
isReloading = true; reloadQueued = true;
reloadTimer = reloadTime; reloadTimer = reloadTime;
// Play animation
playAnimationAndReturn(wi.FirstPersonEntity, "BlendTreeAssaultWeapon", "Reload");
if (IsClient) {
// Spawn explosion effect
EntityWrapper reloadEffectSpawner = wi.FirstPersonEntity.FirstChildByName("FirstPersonReloadSpawner");
if (reloadEffectSpawner.Valid()) {
SpawnerSystem::Spawn(reloadEffectSpawner, reloadEffectSpawner);
}
if (wi.FirstPersonEntity.Valid()) {
wi.FirstPersonEntity["Model"]["Visible"] = false;
}
if (wi.ThirdPersonEntity.Valid()) {
wi.ThirdPersonEntity["Model"]["Visible"] = false;
}
}
// Sound
Events::PlaySoundOnEntity e;
e.EmitterID = wi.Player.ID;
e.FilePath = "Audio/weapon/Assault/AssaultWeaponReload.wav";
m_EventBroker->Publish(e);
}
void AssaultWeaponBehaviour::OnEquip(ComponentWrapper cWeapon, WeaponInfo& wi)
{
cWeapon["FireCooldown"] = (double)cWeapon["EquipTime"];
} }
void AssaultWeaponBehaviour::OnHolster(ComponentWrapper cWeapon, WeaponInfo& wi) void AssaultWeaponBehaviour::OnHolster(ComponentWrapper cWeapon, WeaponInfo& wi)
@@ -161,14 +219,23 @@ void AssaultWeaponBehaviour::fireBullet(ComponentWrapper cWeapon, WeaponInfo& wi
m_EventBroker->Publish(e); m_EventBroker->Publish(e);
} }
} }
// Play animation
playAnimationAndReturn(wi.FirstPersonEntity, "BlendTreeAssaultWeapon", "Fire");
// Sound
Events::PlaySoundOnEntity e;
e.EmitterID = wi.Player.ID;
e.FilePath = "Audio/weapon/Assault/AssaultWeaponFire.wav";
m_EventBroker->Publish(e);
} }
bool AssaultWeaponBehaviour::canFire(ComponentWrapper cWeapon, WeaponInfo& wi) bool AssaultWeaponBehaviour::canFire(ComponentWrapper cWeapon, WeaponInfo& wi)
{ {
bool triggerHeld = cWeapon["TriggerHeld"]; bool triggerHeld = cWeapon["TriggerHeld"];
bool cooldownPassed = (double)cWeapon["FireCooldown"] <= 0.0; bool cooldownPassed = (double)cWeapon["FireCooldown"] <= 0.0;
bool isReloading = cWeapon["IsReloading"]; bool isNotReloading = !(bool)cWeapon["IsReloading"];
return triggerHeld && cooldownPassed; return triggerHeld && cooldownPassed && isNotReloading;
} }
bool AssaultWeaponBehaviour::dealDamage(ComponentWrapper cWeapon, WeaponInfo& wi) bool AssaultWeaponBehaviour::dealDamage(ComponentWrapper cWeapon, WeaponInfo& wi)
@@ -36,6 +36,7 @@ void DefenderWeaponBehaviour::UpdateWeapon(ComponentWrapper cWeapon, WeaponInfo&
m_EventBroker->Publish(e); m_EventBroker->Publish(e);
} else { } else {
isReloading = false; isReloading = false;
playAnimationAndReturn(wi.FirstPersonEntity, "FinalBlend", "Idle");
} }
} }
@@ -96,6 +97,9 @@ void DefenderWeaponBehaviour::OnReload(ComponentWrapper cWeapon, WeaponInfo& wi)
// Start reload // Start reload
isReloading = true; isReloading = true;
reloadTimer = reloadTime; reloadTimer = reloadTime;
// Play animation
playAnimationAndReturn(wi.FirstPersonEntity, "FinalBlend", "Reload");
} }
void DefenderWeaponBehaviour::OnHolster(ComponentWrapper cWeapon, WeaponInfo& wi) void DefenderWeaponBehaviour::OnHolster(ComponentWrapper cWeapon, WeaponInfo& wi)
@@ -115,8 +119,40 @@ bool DefenderWeaponBehaviour::OnInputCommand(ComponentWrapper cWeapon, WeaponInf
if (attachment.Valid()) { if (attachment.Valid()) {
if (e.Value > 0) { if (e.Value > 0) {
SpawnerSystem::Spawn(attachment, attachment); SpawnerSystem::Spawn(attachment, attachment);
EntityWrapper root = wi.FirstPersonEntity.FirstParentWithComponent("Model");
if (root.Valid()) {
EntityWrapper subTree = root.FirstChildByName("FinalBlend");
if (subTree.Valid()) {
EntityWrapper animationNode = subTree.FirstChildByName("Shield");
if (animationNode.Valid()) {
Events::AutoAnimationBlend eFireBlend;
eFireBlend.RootNode = root;
eFireBlend.NodeName = "Shield";
eFireBlend.Restart = true;
eFireBlend.Start = true;
m_EventBroker->Publish(eFireBlend);
}
}
}
} else { } else {
attachment.DeleteChildren(); attachment.DeleteChildren();
EntityWrapper root = wi.FirstPersonEntity.FirstParentWithComponent("Model");
if (root.Valid()) {
EntityWrapper subTree = root.FirstChildByName("FinalBlend");
if (subTree.Valid()) {
EntityWrapper animationNode = subTree.FirstChildByName("ActionBlend");
if (animationNode.Valid()) {
Events::AutoAnimationBlend eFireBlend;
eFireBlend.RootNode = root;
eFireBlend.NodeName = "ActionBlend";
eFireBlend.Restart = true;
eFireBlend.Start = true;
m_EventBroker->Publish(eFireBlend);
}
}
}
} }
} }
} }
@@ -195,6 +231,9 @@ void DefenderWeaponBehaviour::fireShell(ComponentWrapper cWeapon, WeaponInfo& wi
} }
} }
// Play animation
playAnimationAndReturn(wi.FirstPersonEntity, "BlendTreeDefenderWeapon", "Fire");
// Sound // Sound
Events::PlaySoundOnEntity e; Events::PlaySoundOnEntity e;
e.EmitterID = wi.Player.ID; e.EmitterID = wi.Player.ID;