Compare commits
32 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| b547938928 | |||
| d1832c1741 | |||
| 4432891437 | |||
| a006db9e63 | |||
| 717af2c4a4 | |||
| 969e7cb0d5 | |||
| 47a365a8fc | |||
| 71c03326aa | |||
| 0a31fa3dfd | |||
| ca457d9c00 | |||
| a08e54a147 | |||
| 10846be820 | |||
| 9df7b32ca1 | |||
| 3d4a7de59d | |||
| 1cdcbf9b32 | |||
| 9e8d2b99df | |||
| ba4877c3f7 | |||
| af39b892cd | |||
| 1ed5107d9b | |||
| 2ce7179d19 | |||
| eb7b22c757 | |||
| b48d491ad7 | |||
| 47f4711b85 | |||
| f146971db0 | |||
| 60b2c9bc9b | |||
| 422bedb844 | |||
| 1da432ba23 | |||
| 215b1b1aa4 | |||
| f49cacf167 | |||
| a5168bd1c2 | |||
| 784e1eb69b | |||
| 987dafb44a |
+1
-1
Submodule assets updated: 078e014f3d...1e7adc749e
@@ -16,6 +16,8 @@ struct InputCommand : Event
|
|||||||
std::string Command;
|
std::string Command;
|
||||||
/** The value of the command. */
|
/** The value of the command. */
|
||||||
float Value = 0;
|
float Value = 0;
|
||||||
|
/** Timestamp of the command. */
|
||||||
|
double TimeStamp = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -33,8 +33,8 @@ public:
|
|||||||
~Client();
|
~Client();
|
||||||
|
|
||||||
void Connect(std::string address, int port);
|
void Connect(std::string address, int port);
|
||||||
void Update() override;
|
void Update(double dt) override;
|
||||||
|
private:
|
||||||
std::vector<Events::PlayerSpawned> m_PlayerSpawnEvents;
|
std::vector<Events::PlayerSpawned> m_PlayerSpawnEvents;
|
||||||
void parseSpawnEvents();
|
void parseSpawnEvents();
|
||||||
// Save for children
|
// Save for children
|
||||||
@@ -56,13 +56,13 @@ public:
|
|||||||
bool m_IsConnected = false;
|
bool m_IsConnected = false;
|
||||||
EntityWrapper m_LocalPlayer = EntityWrapper::Invalid;
|
EntityWrapper m_LocalPlayer = EntityWrapper::Invalid;
|
||||||
// Server Client Lookup map
|
// Server Client Lookup map
|
||||||
// Assumes that root node for client and server is EntityID 0.
|
|
||||||
|
|
||||||
// Don't Add items to these two maps with insert, use insertIntoServerClientMaps(EntityID, EntityID)!!!!
|
// Don't Add items to these two maps with insert, use insertIntoServerClientMaps(EntityID, EntityID)!!!!
|
||||||
std::unordered_map<EntityID, EntityID> m_ServerIDToClientID;
|
std::unordered_map<EntityID, EntityID> m_ServerIDToClientID;
|
||||||
std::unordered_map<EntityID, EntityID> m_ClientIDToServerID;
|
std::unordered_map<EntityID, EntityID> m_ClientIDToServerID;
|
||||||
|
|
||||||
// Network logic
|
// Network logic
|
||||||
|
UDPClient m_Unreliable;
|
||||||
|
TCPClient m_Reliable;
|
||||||
PlayerDefinition m_PlayerDefinitions[8];
|
PlayerDefinition m_PlayerDefinitions[8];
|
||||||
SnapshotDefinitions m_NextSnapshot;
|
SnapshotDefinitions m_NextSnapshot;
|
||||||
double m_DurationOfPingTime;
|
double m_DurationOfPingTime;
|
||||||
@@ -70,9 +70,9 @@ public:
|
|||||||
std::clock_t m_TimeSinceSentInputs;
|
std::clock_t m_TimeSinceSentInputs;
|
||||||
unsigned int m_SendInputIntervalMs;
|
unsigned int m_SendInputIntervalMs;
|
||||||
std::vector<Events::InputCommand> m_InputCommandBuffer;
|
std::vector<Events::InputCommand> m_InputCommandBuffer;
|
||||||
|
std::vector<Events::InputCommand> m_ReceivedInputCommands;
|
||||||
|
|
||||||
// Private member functions
|
// Private member functions
|
||||||
size_t receive(char* data);
|
|
||||||
void disconnect();
|
void disconnect();
|
||||||
void parseMessageType(Packet& packet);
|
void parseMessageType(Packet& packet);
|
||||||
void updateFields(Packet& packet, const ComponentInfo& componentInfo, const EntityID& entityID);
|
void updateFields(Packet& packet, const ComponentInfo& componentInfo, const EntityID& entityID);
|
||||||
@@ -88,6 +88,8 @@ public:
|
|||||||
void parseComponentDeletion(Packet& packet);
|
void parseComponentDeletion(Packet& packet);
|
||||||
void InterpolateFields(Packet & packet, const ComponentInfo & componentInfo, const EntityID & entityID, const std::string & componentType);
|
void InterpolateFields(Packet & packet, const ComponentInfo & componentInfo, const EntityID & entityID, const std::string & componentType);
|
||||||
void parseSnapshot(Packet& packet);
|
void parseSnapshot(Packet& packet);
|
||||||
|
void parseOnInputCommand(Packet& packet);
|
||||||
|
void publishInputCommands();
|
||||||
void identifyPacketLoss();
|
void identifyPacketLoss();
|
||||||
void hasServerTimedOut();
|
void hasServerTimedOut();
|
||||||
EntityID createPlayer();
|
EntityID createPlayer();
|
||||||
@@ -110,9 +112,6 @@ public:
|
|||||||
EventRelay<Client, Events::PlayerSpawned> m_EPlayerSpawned;
|
EventRelay<Client, Events::PlayerSpawned> m_EPlayerSpawned;
|
||||||
bool OnPlayerSpawned(const Events::PlayerSpawned& e);
|
bool OnPlayerSpawned(const Events::PlayerSpawned& e);
|
||||||
void parsePlayerDamage(Packet& packet);
|
void parsePlayerDamage(Packet& packet);
|
||||||
private:
|
|
||||||
UDPClient m_Unreliable;
|
|
||||||
TCPClient m_Reliable;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -22,11 +22,13 @@ public:
|
|||||||
Network(World* world, EventBroker* eventBroker);
|
Network(World* world, EventBroker* eventBroker);
|
||||||
virtual ~Network() { };
|
virtual ~Network() { };
|
||||||
|
|
||||||
virtual void Update() = 0;
|
virtual void Update(double dt) = 0;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
World* m_World;
|
World* m_World;
|
||||||
EventBroker* m_EventBroker;
|
EventBroker* m_EventBroker;
|
||||||
|
// for network
|
||||||
|
double m_TimeStamp = 0;
|
||||||
|
|
||||||
// For Debug
|
// For Debug
|
||||||
bool isReadingData = false;
|
bool isReadingData = false;
|
||||||
|
|||||||
@@ -26,7 +26,7 @@ public:
|
|||||||
Server(World* world, EventBroker* eventBroker, int port);
|
Server(World* world, EventBroker* eventBroker, int port);
|
||||||
~Server();
|
~Server();
|
||||||
|
|
||||||
void Update() override;
|
void Update(double dt) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
// Network channels
|
// Network channels
|
||||||
@@ -52,6 +52,7 @@ private:
|
|||||||
int checkTimeOutInterval = 100;
|
int checkTimeOutInterval = 100;
|
||||||
int m_NextPlayerID = 0;
|
int m_NextPlayerID = 0;
|
||||||
std::vector<Events::InputCommand> m_InputCommandsToBroadcast;
|
std::vector<Events::InputCommand> m_InputCommandsToBroadcast;
|
||||||
|
std::vector<Events::InputCommand> m_InputCommandsToPublish;
|
||||||
//Timers
|
//Timers
|
||||||
std::clock_t m_StartPingTime;
|
std::clock_t m_StartPingTime;
|
||||||
|
|
||||||
@@ -82,6 +83,7 @@ private:
|
|||||||
void parseTCPConnect(Packet & packet);
|
void parseTCPConnect(Packet & packet);
|
||||||
void parseDisconnect();
|
void parseDisconnect();
|
||||||
bool shouldSendToClient(EntityWrapper childEntity);
|
bool shouldSendToClient(EntityWrapper childEntity);
|
||||||
|
void publishInputCommands();
|
||||||
|
|
||||||
// Debug event
|
// Debug event
|
||||||
EventRelay<Server, Events::InputCommand> m_EInputCommand;
|
EventRelay<Server, Events::InputCommand> m_EInputCommand;
|
||||||
|
|||||||
@@ -0,0 +1,8 @@
|
|||||||
|
#ifndef MiniDump_h__
|
||||||
|
#define MiniDump_h__
|
||||||
|
|
||||||
|
#include <Windows.h>
|
||||||
|
|
||||||
|
void WINAPI Create_Dump(PEXCEPTION_POINTERS pException, BOOL File_Flag, BOOL Show_Flag);
|
||||||
|
|
||||||
|
#endif
|
||||||
@@ -9,7 +9,8 @@
|
|||||||
#include "Core/EPlayerDamage.h"
|
#include "Core/EPlayerDamage.h"
|
||||||
#include "Core/EPlayerHealthPickup.h"
|
#include "Core/EPlayerHealthPickup.h"
|
||||||
#include "Core/EPlayerDeath.h"
|
#include "Core/EPlayerDeath.h"
|
||||||
#include "../Engine/Input/EInputCommand.h"
|
#include "Core/ConfigFile.h"
|
||||||
|
#include "Input/EInputCommand.h"
|
||||||
|
|
||||||
#include <tuple>
|
#include <tuple>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
@@ -24,6 +25,8 @@ public:
|
|||||||
virtual void UpdateComponent(EntityWrapper& entity, ComponentWrapper& component, double dt) override;
|
virtual void UpdateComponent(EntityWrapper& entity, ComponentWrapper& component, double dt) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
bool m_NetworkEnabled;
|
||||||
|
|
||||||
//methods which will take care of specific events
|
//methods which will take care of specific events
|
||||||
EventRelay<HealthSystem, Events::PlayerDamage> m_EPlayerDamage;
|
EventRelay<HealthSystem, Events::PlayerDamage> m_EPlayerDamage;
|
||||||
bool HealthSystem::OnPlayerDamaged(Events::PlayerDamage& e);
|
bool HealthSystem::OnPlayerDamaged(Events::PlayerDamage& e);
|
||||||
@@ -34,7 +37,7 @@ private:
|
|||||||
|
|
||||||
//vector which will keep track of health changes
|
//vector which will keep track of health changes
|
||||||
std::vector<std::tuple<EntityID, double>> m_DeltaHealthVector;
|
std::vector<std::tuple<EntityID, double>> m_DeltaHealthVector;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
@@ -0,0 +1,39 @@
|
|||||||
|
#ifndef KillFeedSystem_h__
|
||||||
|
#define KillFeedSystem_h__
|
||||||
|
|
||||||
|
#include "../../Engine/Core/System.h"
|
||||||
|
#include "../../Engine/GLM.h"
|
||||||
|
#include "Core/EPlayerDeath.h"
|
||||||
|
|
||||||
|
class KillFeedSystem : public ImpureSystem
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
KillFeedSystem(SystemParams params)
|
||||||
|
: System(params)
|
||||||
|
{
|
||||||
|
EVENT_SUBSCRIBE_MEMBER(m_EPlayerDeath, &KillFeedSystem::OnPlayerDeath);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual void Update(double dt) override;
|
||||||
|
|
||||||
|
private:
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
EventRelay<KillFeedSystem, Events::PlayerDeath> m_EPlayerDeath;
|
||||||
|
bool KillFeedSystem::OnPlayerDeath(Events::PlayerDeath& e);
|
||||||
|
|
||||||
|
struct KillFeedInfo
|
||||||
|
{
|
||||||
|
std::string Content;
|
||||||
|
glm::vec4 Color;
|
||||||
|
float TimeToLive = 5.f;
|
||||||
|
};
|
||||||
|
|
||||||
|
std::list<KillFeedInfo> m_DeathQueue;
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
||||||
@@ -39,5 +39,5 @@ private:
|
|||||||
bool OnPlayerSpawned(Events::PlayerSpawned& e);
|
bool OnPlayerSpawned(Events::PlayerSpawned& e);
|
||||||
|
|
||||||
void updateMovementControllers(double dt);
|
void updateMovementControllers(double dt);
|
||||||
void updateVelocity(double dt);
|
void updateVelocity(EntityWrapper player, double dt);
|
||||||
};
|
};
|
||||||
@@ -7,6 +7,7 @@
|
|||||||
#include "Core/EPlayerDamage.h"
|
#include "Core/EPlayerDamage.h"
|
||||||
#include "Core/EShoot.h"
|
#include "Core/EShoot.h"
|
||||||
|
|
||||||
|
|
||||||
class AssaultWeaponBehaviour : public WeaponBehaviour
|
class AssaultWeaponBehaviour : public WeaponBehaviour
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@@ -36,7 +37,8 @@ private:
|
|||||||
void fireRound();
|
void fireRound();
|
||||||
void spawnTracer();
|
void spawnTracer();
|
||||||
float traceRayDistance(glm::vec3 origin, glm::vec3 direction);
|
float traceRayDistance(glm::vec3 origin, glm::vec3 direction);
|
||||||
void playSound();
|
void playFireSound();
|
||||||
|
void playEmptySound();
|
||||||
void viewPunch();
|
void viewPunch();
|
||||||
void finishReload();
|
void finishReload();
|
||||||
void playShootAnimation();
|
void playShootAnimation();
|
||||||
|
|||||||
@@ -41,4 +41,5 @@
|
|||||||
<xs:include schemaLocation="Components/Shielded.xsd"/>
|
<xs:include schemaLocation="Components/Shielded.xsd"/>
|
||||||
<xs:include schemaLocation="Components/CapturePointHUD.xsd"/>
|
<xs:include schemaLocation="Components/CapturePointHUD.xsd"/>
|
||||||
<xs:include schemaLocation="Components/AmmunitionHUD.xsd"/>
|
<xs:include schemaLocation="Components/AmmunitionHUD.xsd"/>
|
||||||
|
<xs:include schemaLocation="Components/KillFeed.xsd"/>
|
||||||
</xs:schema>
|
</xs:schema>
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
|
||||||
|
<KillFeed xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="KillFeed.xsd">
|
||||||
|
</KillFeed>
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
<?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="KillFeed">
|
||||||
|
<xs:annotation>
|
||||||
|
<xs:documentation>HUD element for tracking the 3 last kills, printed on the children with the names "KillFeed1", "KillFeed2", "KillFeed3"</xs:documentation>
|
||||||
|
</xs:annotation>
|
||||||
|
</xs:element>
|
||||||
|
</xs:schema>
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
|
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
|
||||||
<Text xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="Text.xsd">
|
<Text xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="Text.xsd">
|
||||||
<Content>Text</Content>
|
<Content></Content>
|
||||||
<Resource></Resource>
|
<Resource></Resource>
|
||||||
<Color R="1" G="1" B="1" A="1"/>
|
<Color R="1" G="1" B="1" A="1"/>
|
||||||
<Visible>true</Visible>
|
<Visible>true</Visible>
|
||||||
|
|||||||
@@ -0,0 +1,255 @@
|
|||||||
|
<?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>
|
||||||
|
<RPM>600</RPM>
|
||||||
|
</c:AssaultWeapon>
|
||||||
|
<c:Collidable/>
|
||||||
|
<c:DashAbility/>
|
||||||
|
<c:Health/>
|
||||||
|
<c:Physics>
|
||||||
|
<Velocity X="2.30999646e-23" Y="0" Z="1.05272533e-23"/>
|
||||||
|
</c:Physics>
|
||||||
|
<c:Player>
|
||||||
|
<MovementSpeed>5</MovementSpeed>
|
||||||
|
</c:Player>
|
||||||
|
<c:Team>
|
||||||
|
<Team>
|
||||||
|
<Red/>
|
||||||
|
</Team>
|
||||||
|
</c:Team>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0" Y="0.0288832653" Z="2.64837074"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
|
||||||
|
<Children>
|
||||||
|
<Entity name="Camera">
|
||||||
|
<Components>
|
||||||
|
<c:Camera/>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0" Y="1.27700007" Z="0"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children>
|
||||||
|
<Entity name="PlayerName">
|
||||||
|
<Components>
|
||||||
|
<c:Text>
|
||||||
|
<Resource>Fonts/DroidSans.ttf,100</Resource>
|
||||||
|
<Color A="1" B="0" G="1" R="0"/>
|
||||||
|
</c:Text>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0.100000001" Y="0.248000011" Z="-0.248000011"/>
|
||||||
|
<Scale X="0.100000001" Y="0.113000005" Z="0.5"/>
|
||||||
|
<Orientation X="0" Y="3.14199996" Z="0"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<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="HealthBar">
|
||||||
|
<Components>
|
||||||
|
<c:Fill>
|
||||||
|
<Percentage>1</Percentage>
|
||||||
|
<Color A="0" B="1" G="0" R="0"/>
|
||||||
|
</c:Fill>
|
||||||
|
<c:HealthHUD/>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>Models/Core/UnitHexagon.mesh</Resource>
|
||||||
|
<Color A="1" B="0.70588237" G="0.70588237" R="0.70588237"/>
|
||||||
|
</c:Model>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="-0.383000016" Y="-0.185000002" Z="0"/>
|
||||||
|
<Scale X="0.150000006" Y="0.150000006" Z="0.150000006"/>
|
||||||
|
<Orientation X="0" Y="0.594000041" Z="0"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="Crosshair">
|
||||||
|
<Components>
|
||||||
|
<c:Sprite>
|
||||||
|
<DiffuseTexture>Textures/Weapons/Crosshair/SmallThickHoleDot.png</DiffuseTexture>
|
||||||
|
<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>
|
||||||
|
</Children>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="Hands">
|
||||||
|
<Components>
|
||||||
|
<c:Animation>
|
||||||
|
<AnimationName1>Idle</AnimationName1>
|
||||||
|
<Time1>0.28963486380924053</Time1>
|
||||||
|
<Speed1>1</Speed1>
|
||||||
|
</c:Animation>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>Models/Characters/Assault/FirstPerson.mesh</Resource>
|
||||||
|
<Transparent>true</Transparent>
|
||||||
|
</c:Model>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children>
|
||||||
|
<Entity name="WeaponModel">
|
||||||
|
<Components>
|
||||||
|
<c:BoneAttachment>
|
||||||
|
<BoneName>R_Arm_Weapon_Joint</BoneName>
|
||||||
|
</c:BoneAttachment>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>Models/Weapons/Blue/AssaultWeaponBlue.mesh</Resource>
|
||||||
|
<Transparent>true</Transparent>
|
||||||
|
</c:Model>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0.120430455" Y="-0.231800437" Z="-0.181454748"/>
|
||||||
|
<Orientation X="0.0104047749" Y="-0.00268166233" Z="0.042844031"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children>
|
||||||
|
<Entity name="WeaponMuzzle">
|
||||||
|
<Components>
|
||||||
|
<c:Spawner>
|
||||||
|
<EntityFile>Schema/Entities/RayBlue.xml</EntityFile>
|
||||||
|
</c:Spawner>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0.00325386273" Y="0.0970000029" Z="-0.843000054"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="FirstPersonReloadSpawner">
|
||||||
|
<Components>
|
||||||
|
<c:Spawner>
|
||||||
|
<EntityFile>Schema/Entities/WeaponReloadEffect.xml</EntityFile>
|
||||||
|
</c:Spawner>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="ThirdPersonCamera">
|
||||||
|
<Components>
|
||||||
|
<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>Idle</AnimationName1>
|
||||||
|
<Time1>0.42156525436696768</Time1>
|
||||||
|
<Speed1>1</Speed1>
|
||||||
|
</c:Animation>
|
||||||
|
<c:AnimationOffset>
|
||||||
|
<AnimationName>AimRifle</AnimationName>
|
||||||
|
<Time>0.5</Time>
|
||||||
|
</c:AnimationOffset>
|
||||||
|
<c:HiddenForLocalPlayer/>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>Models/Characters/Assault/AssaultAnimations.mesh</Resource>
|
||||||
|
<Color A="1" B="0" G="0" R="1"/>
|
||||||
|
</c:Model>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children>
|
||||||
|
<Entity name="ThirdPersonWeaponModel">
|
||||||
|
<Components>
|
||||||
|
<c:BoneAttachment>
|
||||||
|
<BoneName>R_Arm_Weapon_Joint</BoneName>
|
||||||
|
</c:BoneAttachment>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>Models/Weapons/Blue/AssaultWeaponBlue.mesh</Resource>
|
||||||
|
<Visible>false</Visible>
|
||||||
|
</c:Model>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0.160716802" Y="1.02800739" Z="-0.215931982"/>
|
||||||
|
<Orientation X="-0.0627654716" Y="-0.0450839326" Z="0.119217664"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children>
|
||||||
|
<Entity name="ThirdPersonWeaponMuzzle">
|
||||||
|
<Components>
|
||||||
|
<c:Spawner>
|
||||||
|
<EntityFile>Schema/Entities/RayBlue.xml</EntityFile>
|
||||||
|
</c:Spawner>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0.00644115033" Y="0.096679531" Z="-0.436609417"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
</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>
|
||||||
|
</Children>
|
||||||
|
|
||||||
|
</Entity>
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -89,6 +89,7 @@
|
|||||||
<c:Collidable/>
|
<c:Collidable/>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>Models/Props/Highground5.mesh</Resource>
|
<Resource>Models/Props/Highground5.mesh</Resource>
|
||||||
|
<Color A="1" B="7.84313726" G="7.84313726" R="7.84313726"/>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Transform/>
|
<c:Transform/>
|
||||||
</Components>
|
</Components>
|
||||||
@@ -99,6 +100,7 @@
|
|||||||
<c:Collidable/>
|
<c:Collidable/>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>Models/Props/Highground6.mesh</Resource>
|
<Resource>Models/Props/Highground6.mesh</Resource>
|
||||||
|
<Color A="1" B="7.84313726" G="7.84313726" R="7.84313726"/>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Transform/>
|
<c:Transform/>
|
||||||
</Components>
|
</Components>
|
||||||
@@ -368,7 +370,7 @@
|
|||||||
<Components>
|
<Components>
|
||||||
<c:Collidable/>
|
<c:Collidable/>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>Models/Props/Pillars/SciFiPillar2.mesh</Resource>
|
<Resource>Models/Props/Pillars/SciFiPillar2Blue.mesh</Resource>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Transform>
|
<c:Transform>
|
||||||
<Position X="55.0098839" Y="0" Z="80.7891693"/>
|
<Position X="55.0098839" Y="0" Z="80.7891693"/>
|
||||||
@@ -381,7 +383,7 @@
|
|||||||
<Components>
|
<Components>
|
||||||
<c:Collidable/>
|
<c:Collidable/>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>Models/Props/Pillars/SciFiPillar2.mesh</Resource>
|
<Resource>Models/Props/Pillars/SciFiPillar2Red.mesh</Resource>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Transform>
|
<c:Transform>
|
||||||
<Position X="-57.6669235" Y="-0.0117412386" Z="-84.8278427"/>
|
<Position X="-57.6669235" Y="-0.0117412386" Z="-84.8278427"/>
|
||||||
@@ -591,7 +593,7 @@
|
|||||||
<Resource>Models/Props/Walls/BigWallBlue.mesh</Resource>
|
<Resource>Models/Props/Walls/BigWallBlue.mesh</Resource>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Transform>
|
<c:Transform>
|
||||||
<Position X="56.3723755" Y="-0.458255291" Z="53.1675453"/>
|
<Position X="57.2414131" Y="-0.458255291" Z="53.1675453"/>
|
||||||
</c:Transform>
|
</c:Transform>
|
||||||
</Components>
|
</Components>
|
||||||
<Children>
|
<Children>
|
||||||
@@ -724,7 +726,7 @@
|
|||||||
<Resource>Models/Props/Walls/BigWallBlue.mesh</Resource>
|
<Resource>Models/Props/Walls/BigWallBlue.mesh</Resource>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Transform>
|
<c:Transform>
|
||||||
<Position X="-2.87285304" Y="0" Z="0.0110195652"/>
|
<Position X="-3.20842171" Y="0" Z="0.0110195652"/>
|
||||||
<Scale X="1" Y="0.800000012" Z="1"/>
|
<Scale X="1" Y="0.800000012" Z="1"/>
|
||||||
</c:Transform>
|
</c:Transform>
|
||||||
</Components>
|
</Components>
|
||||||
@@ -737,7 +739,7 @@
|
|||||||
<Resource>Models/Props/Walls/BigWallBlue.mesh</Resource>
|
<Resource>Models/Props/Walls/BigWallBlue.mesh</Resource>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Transform>
|
<c:Transform>
|
||||||
<Position X="2.9002583" Y="0" Z="-0.00627081469"/>
|
<Position X="3.16696811" Y="0" Z="-0.00627081469"/>
|
||||||
<Scale X="1" Y="0.800000012" Z="1"/>
|
<Scale X="1" Y="0.800000012" Z="1"/>
|
||||||
</c:Transform>
|
</c:Transform>
|
||||||
</Components>
|
</Components>
|
||||||
@@ -1289,7 +1291,7 @@
|
|||||||
<Resource>Models/Props/Walls/BigWallBlue.mesh</Resource>
|
<Resource>Models/Props/Walls/BigWallBlue.mesh</Resource>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Transform>
|
<c:Transform>
|
||||||
<Position X="42.3930092" Y="-0.436794043" Z="53.3168259"/>
|
<Position X="42.6762505" Y="-0.436794043" Z="53.3168259"/>
|
||||||
</c:Transform>
|
</c:Transform>
|
||||||
</Components>
|
</Components>
|
||||||
<Children>
|
<Children>
|
||||||
@@ -1300,7 +1302,7 @@
|
|||||||
<Resource>Models/Props/Walls/BigWallBlue.mesh</Resource>
|
<Resource>Models/Props/Walls/BigWallBlue.mesh</Resource>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Transform>
|
<c:Transform>
|
||||||
<Position X="2.79896975" Y="0" Z="0"/>
|
<Position X="3.02606034" Y="0" Z="0"/>
|
||||||
</c:Transform>
|
</c:Transform>
|
||||||
</Components>
|
</Components>
|
||||||
<Children/>
|
<Children/>
|
||||||
@@ -1312,7 +1314,7 @@
|
|||||||
<Resource>Models/Props/Walls/BigWallBlue.mesh</Resource>
|
<Resource>Models/Props/Walls/BigWallBlue.mesh</Resource>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Transform>
|
<c:Transform>
|
||||||
<Position X="5.67178059" Y="0" Z="0"/>
|
<Position X="6.20324564" Y="0" Z="0"/>
|
||||||
</c:Transform>
|
</c:Transform>
|
||||||
</Components>
|
</Components>
|
||||||
<Children/>
|
<Children/>
|
||||||
@@ -1324,7 +1326,7 @@
|
|||||||
<Resource>Models/Props/Walls/BigWallBlue.mesh</Resource>
|
<Resource>Models/Props/Walls/BigWallBlue.mesh</Resource>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Transform>
|
<c:Transform>
|
||||||
<Position X="8.55263519" Y="0" Z="0"/>
|
<Position X="9.40820885" Y="0" Z="0"/>
|
||||||
</c:Transform>
|
</c:Transform>
|
||||||
</Components>
|
</Components>
|
||||||
<Children/>
|
<Children/>
|
||||||
@@ -1515,6 +1517,7 @@
|
|||||||
<c:Collidable/>
|
<c:Collidable/>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>Models/Props/Flora/SpecialRoot.mesh</Resource>
|
<Resource>Models/Props/Flora/SpecialRoot.mesh</Resource>
|
||||||
|
<Color A="1" B="1" G="7.84313726" R="7.84313726"/>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Transform>
|
<c:Transform>
|
||||||
<Position X="-37.5227966" Y="-0.41070056" Z="38.790432"/>
|
<Position X="-37.5227966" Y="-0.41070056" Z="38.790432"/>
|
||||||
@@ -1885,7 +1888,7 @@
|
|||||||
<Components>
|
<Components>
|
||||||
<c:Collidable/>
|
<c:Collidable/>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>Models/Props/Bridges/SciFiBridge.mesh</Resource>
|
<Resource>Models/Props/Bridges/SciFiBridge1Red.mesh</Resource>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Transform>
|
<c:Transform>
|
||||||
<Position X="45.3988762" Y="6.10456753" Z="-73.9011993"/>
|
<Position X="45.3988762" Y="6.10456753" Z="-73.9011993"/>
|
||||||
@@ -2004,7 +2007,7 @@
|
|||||||
<Components>
|
<Components>
|
||||||
<c:Collidable/>
|
<c:Collidable/>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>Models/Props/Bridges/SciFiBridge.mesh</Resource>
|
<Resource>Models/Props/Bridges/SciFiBridge1Blue.mesh</Resource>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Transform>
|
<c:Transform>
|
||||||
<Position X="-41.0066338" Y="6.08244133" Z="75.8575821"/>
|
<Position X="-41.0066338" Y="6.08244133" Z="75.8575821"/>
|
||||||
@@ -2138,7 +2141,7 @@
|
|||||||
<Components>
|
<Components>
|
||||||
<c:Collidable/>
|
<c:Collidable/>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>Models/Props/Bridges/SciFiBridge.mesh</Resource>
|
<Resource>Models/Props/Bridges/SciFiBridge1Blue.mesh</Resource>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Transform>
|
<c:Transform>
|
||||||
<Position X="-47.6850471" Y="7.0585866" Z="38.1646194"/>
|
<Position X="-47.6850471" Y="7.0585866" Z="38.1646194"/>
|
||||||
@@ -2151,7 +2154,7 @@
|
|||||||
<Components>
|
<Components>
|
||||||
<c:Collidable/>
|
<c:Collidable/>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>Models/Props/Bridges/SciFiBridge.mesh</Resource>
|
<Resource>Models/Props/Bridges/SciFiBridge1Blue.mesh</Resource>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Transform>
|
<c:Transform>
|
||||||
<Position X="-25.9571095" Y="6.43997049" Z="41.7452164"/>
|
<Position X="-25.9571095" Y="6.43997049" Z="41.7452164"/>
|
||||||
@@ -2178,7 +2181,7 @@
|
|||||||
<Components>
|
<Components>
|
||||||
<c:Collidable/>
|
<c:Collidable/>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>Models/Props/Bridges/SciFiBridge.mesh</Resource>
|
<Resource>Models/Props/Bridges/SciFiBridge1Red.mesh</Resource>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Transform>
|
<c:Transform>
|
||||||
<Position X="46.3167992" Y="6.36057663" Z="-37.5957794"/>
|
<Position X="46.3167992" Y="6.36057663" Z="-37.5957794"/>
|
||||||
@@ -2191,7 +2194,7 @@
|
|||||||
<Components>
|
<Components>
|
||||||
<c:Collidable/>
|
<c:Collidable/>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>Models/Props/Bridges/SciFiBridge.mesh</Resource>
|
<Resource>Models/Props/Bridges/SciFiBridge1Red.mesh</Resource>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Transform>
|
<c:Transform>
|
||||||
<Position X="25.2147388" Y="6.4451251" Z="-41.7257042"/>
|
<Position X="25.2147388" Y="6.4451251" Z="-41.7257042"/>
|
||||||
@@ -2730,6 +2733,7 @@
|
|||||||
<c:Collidable/>
|
<c:Collidable/>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>Models/Props/Flora/SpecialRoot.mesh</Resource>
|
<Resource>Models/Props/Flora/SpecialRoot.mesh</Resource>
|
||||||
|
<Color A="1" B="1" G="7.84313726" R="7.84313726"/>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Transform>
|
<c:Transform>
|
||||||
<Position X="36.8391495" Y="0.354240507" Z="-36.1228752"/>
|
<Position X="36.8391495" Y="0.354240507" Z="-36.1228752"/>
|
||||||
@@ -2948,6 +2952,7 @@
|
|||||||
<c:Collidable/>
|
<c:Collidable/>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>Models/Props/Flora/SpecialRoot.mesh</Resource>
|
<Resource>Models/Props/Flora/SpecialRoot.mesh</Resource>
|
||||||
|
<Color A="1" B="1" G="7.84313726" R="7.84313726"/>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Transform>
|
<c:Transform>
|
||||||
<Position X="-15.8430891" Y="2.84977508" Z="55.3108711"/>
|
<Position X="-15.8430891" Y="2.84977508" Z="55.3108711"/>
|
||||||
@@ -3061,6 +3066,7 @@
|
|||||||
<c:Collidable/>
|
<c:Collidable/>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>Models/Props/Flora/SpecialRoot.mesh</Resource>
|
<Resource>Models/Props/Flora/SpecialRoot.mesh</Resource>
|
||||||
|
<Color A="1" B="1" G="7.84313726" R="7.84313726"/>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Transform>
|
<c:Transform>
|
||||||
<Position X="16.3593407" Y="4.03186893" Z="-54.4961166"/>
|
<Position X="16.3593407" Y="4.03186893" Z="-54.4961166"/>
|
||||||
@@ -3304,6 +3310,60 @@
|
|||||||
</Components>
|
</Components>
|
||||||
<Children/>
|
<Children/>
|
||||||
</Entity>
|
</Entity>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:Collidable/>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>Models/Props/Stones/BigStone.mesh</Resource>
|
||||||
|
</c:Model>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="2.85156512" Y="-1.23010564" Z="-1.48294902"/>
|
||||||
|
<Scale X="1.50000012" Y="1" Z="1.4000001"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:Collidable/>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>Models/Props/Stones/MediumStone2.mesh</Resource>
|
||||||
|
</c:Model>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="-8.1107378" Y="1.61279738" Z="6.04347277"/>
|
||||||
|
<Scale X="2.70000005" Y="2.20000005" Z="2.4000001"/>
|
||||||
|
<Orientation X="1.02200007" Y="1.27200007" Z="0"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:Collidable/>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>Models/Props/Stones/BigStone.mesh</Resource>
|
||||||
|
</c:Model>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="-12.3116245" Y="3.30153632" Z="2.33947349"/>
|
||||||
|
<Orientation X="0" Y="3.46600008" Z="0"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:Collidable/>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>Models/Props/Stones/BigStone.mesh</Resource>
|
||||||
|
</c:Model>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="2.7208035" Y="0.631672204" Z="1.97706997"/>
|
||||||
|
<Orientation X="0" Y="0" Z="5.86300039"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
</Entity>
|
||||||
</Children>
|
</Children>
|
||||||
</Entity>
|
</Entity>
|
||||||
<Entity>
|
<Entity>
|
||||||
@@ -3313,7 +3373,7 @@
|
|||||||
<Resource>Models/Props/Stones/BigStone.mesh</Resource>
|
<Resource>Models/Props/Stones/BigStone.mesh</Resource>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Transform>
|
<c:Transform>
|
||||||
<Position X="-32.077774" Y="1.78250229" Z="-52.9675865"/>
|
<Position X="-32.141304" Y="1.78250229" Z="-52.9675865"/>
|
||||||
</c:Transform>
|
</c:Transform>
|
||||||
</Components>
|
</Components>
|
||||||
<Children>
|
<Children>
|
||||||
@@ -3343,6 +3403,46 @@
|
|||||||
</Components>
|
</Components>
|
||||||
<Children/>
|
<Children/>
|
||||||
</Entity>
|
</Entity>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:Collidable/>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>Models/Props/Stones/BigStone.mesh</Resource>
|
||||||
|
</c:Model>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="13.3016024" Y="-1.04082656" Z="-2.06582665"/>
|
||||||
|
<Orientation X="0" Y="1.17200005" Z="6.28300047"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:Collidable/>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>Models/Props/Stones/SmallStone1.mesh</Resource>
|
||||||
|
</c:Model>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="7.52924776" Y="0.407071143" Z="-2.09290624"/>
|
||||||
|
<Scale X="3.4000001" Y="5.70000029" Z="3.70000029"/>
|
||||||
|
<Orientation X="0" Y="1.7700001" Z="0"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:Collidable/>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>Models/Props/Stones/BigStone.mesh</Resource>
|
||||||
|
</c:Model>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="-5.73053885" Y="-0.909733951" Z="4.32710028"/>
|
||||||
|
<Orientation X="0" Y="3.46600008" Z="0"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
</Children>
|
</Children>
|
||||||
</Entity>
|
</Entity>
|
||||||
<Entity>
|
<Entity>
|
||||||
@@ -3692,7 +3792,7 @@
|
|||||||
<Resource>Models/Props/Stones/SmallStone1.mesh</Resource>
|
<Resource>Models/Props/Stones/SmallStone1.mesh</Resource>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Transform>
|
<c:Transform>
|
||||||
<Position X="17.9978104" Y="0.729522109" Z="64.9478226"/>
|
<Position X="17.9978104" Y="0.729522109" Z="65.3742523"/>
|
||||||
<Scale X="3" Y="3" Z="3"/>
|
<Scale X="3" Y="3" Z="3"/>
|
||||||
<Orientation X="2.68900013" Y="3.5940001" Z="0"/>
|
<Orientation X="2.68900013" Y="3.5940001" Z="0"/>
|
||||||
</c:Transform>
|
</c:Transform>
|
||||||
@@ -3942,7 +4042,7 @@
|
|||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Transform>
|
<c:Transform>
|
||||||
<Position X="-40.5458374" Y="-0.729142785" Z="-45.7907982"/>
|
<Position X="-40.5458374" Y="-0.729142785" Z="-45.7907982"/>
|
||||||
<Orientation X="4.93700027" Y="3.5" Z="1.37700009"/>
|
<Orientation X="4.93700027" Y="4.81200027" Z="1.37700009"/>
|
||||||
</c:Transform>
|
</c:Transform>
|
||||||
</Components>
|
</Components>
|
||||||
<Children/>
|
<Children/>
|
||||||
@@ -4058,21 +4158,7 @@
|
|||||||
<Orientation X="0" Y="1.93500006" Z="0"/>
|
<Orientation X="0" Y="1.93500006" Z="0"/>
|
||||||
</c:Transform>
|
</c:Transform>
|
||||||
</Components>
|
</Components>
|
||||||
<Children>
|
<Children/>
|
||||||
<Entity>
|
|
||||||
<Components>
|
|
||||||
<c:Collidable/>
|
|
||||||
<c:Model>
|
|
||||||
<Resource>Models/Props/PickUps/HealthPickUp.mesh</Resource>
|
|
||||||
</c:Model>
|
|
||||||
<c:Transform>
|
|
||||||
<Position X="0" Y="2.53721571" Z="0"/>
|
|
||||||
<Scale X="0.800000012" Y="0.800000012" Z="0.800000012"/>
|
|
||||||
</c:Transform>
|
|
||||||
</Components>
|
|
||||||
<Children/>
|
|
||||||
</Entity>
|
|
||||||
</Children>
|
|
||||||
</Entity>
|
</Entity>
|
||||||
<Entity>
|
<Entity>
|
||||||
<Components>
|
<Components>
|
||||||
@@ -4679,6 +4765,7 @@
|
|||||||
<HomePointForTeam>
|
<HomePointForTeam>
|
||||||
<Blue/>
|
<Blue/>
|
||||||
</HomePointForTeam>
|
</HomePointForTeam>
|
||||||
|
<CapturePointNumber>4</CapturePointNumber>
|
||||||
</c:CapturePoint>
|
</c:CapturePoint>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>Models/Core/UnitCylinder.mesh</Resource>
|
<Resource>Models/Core/UnitCylinder.mesh</Resource>
|
||||||
@@ -4714,7 +4801,7 @@
|
|||||||
<Entity>
|
<Entity>
|
||||||
<Components>
|
<Components>
|
||||||
<c:CapturePoint>
|
<c:CapturePoint>
|
||||||
<CapturePointNumber>1</CapturePointNumber>
|
<CapturePointNumber>3</CapturePointNumber>
|
||||||
</c:CapturePoint>
|
</c:CapturePoint>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>Models/Core/UnitCylinder.mesh</Resource>
|
<Resource>Models/Core/UnitCylinder.mesh</Resource>
|
||||||
@@ -4779,7 +4866,7 @@
|
|||||||
<Components>
|
<Components>
|
||||||
<c:CapturePoint>
|
<c:CapturePoint>
|
||||||
<CaptureTimer>1.5498908015879351</CaptureTimer>
|
<CaptureTimer>1.5498908015879351</CaptureTimer>
|
||||||
<CapturePointNumber>3</CapturePointNumber>
|
<CapturePointNumber>1</CapturePointNumber>
|
||||||
</c:CapturePoint>
|
</c:CapturePoint>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>Models/Core/UnitCylinder.mesh</Resource>
|
<Resource>Models/Core/UnitCylinder.mesh</Resource>
|
||||||
@@ -4814,7 +4901,6 @@
|
|||||||
<HomePointForTeam>
|
<HomePointForTeam>
|
||||||
<Red/>
|
<Red/>
|
||||||
</HomePointForTeam>
|
</HomePointForTeam>
|
||||||
<CapturePointNumber>4</CapturePointNumber>
|
|
||||||
</c:CapturePoint>
|
</c:CapturePoint>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>Models/Core/UnitCylinder.mesh</Resource>
|
<Resource>Models/Core/UnitCylinder.mesh</Resource>
|
||||||
@@ -4933,7 +5019,7 @@
|
|||||||
</Team>
|
</Team>
|
||||||
</c:Team>
|
</c:Team>
|
||||||
<c:Transform>
|
<c:Transform>
|
||||||
<Position X="0" Y="6.69097853" Z="0"/>
|
<Position X="-60.3695679" Y="2.14482641" Z="-79.3789597"/>
|
||||||
</c:Transform>
|
</c:Transform>
|
||||||
</Components>
|
</Components>
|
||||||
<Children>
|
<Children>
|
||||||
@@ -4942,9 +5028,10 @@
|
|||||||
<c:SpawnPoint/>
|
<c:SpawnPoint/>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>Models/Characters/Assault/AssaultTPose.mesh</Resource>
|
<Resource>Models/Characters/Assault/AssaultTPose.mesh</Resource>
|
||||||
|
<Visible>false</Visible>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Transform>
|
<c:Transform>
|
||||||
<Position X="1" Y="0" Z="0"/>
|
<Position X="9.3347702" Y="2.70210314" Z="2.33294678"/>
|
||||||
</c:Transform>
|
</c:Transform>
|
||||||
</Components>
|
</Components>
|
||||||
<Children/>
|
<Children/>
|
||||||
@@ -4954,9 +5041,10 @@
|
|||||||
<c:SpawnPoint/>
|
<c:SpawnPoint/>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>Models/Characters/Assault/AssaultTPose.mesh</Resource>
|
<Resource>Models/Characters/Assault/AssaultTPose.mesh</Resource>
|
||||||
|
<Visible>false</Visible>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Transform>
|
<c:Transform>
|
||||||
<Position X="-1" Y="0" Z="0"/>
|
<Position X="5.59104443" Y="2.14147282" Z="6.07936668"/>
|
||||||
</c:Transform>
|
</c:Transform>
|
||||||
</Components>
|
</Components>
|
||||||
<Children/>
|
<Children/>
|
||||||
@@ -4966,9 +5054,10 @@
|
|||||||
<c:SpawnPoint/>
|
<c:SpawnPoint/>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>Models/Characters/Assault/AssaultTPose.mesh</Resource>
|
<Resource>Models/Characters/Assault/AssaultTPose.mesh</Resource>
|
||||||
|
<Visible>false</Visible>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Transform>
|
<c:Transform>
|
||||||
<Position X="0" Y="0" Z="1"/>
|
<Position X="-2.2788806" Y="0" Z="3.17202592"/>
|
||||||
</c:Transform>
|
</c:Transform>
|
||||||
</Components>
|
</Components>
|
||||||
<Children/>
|
<Children/>
|
||||||
@@ -4978,9 +5067,10 @@
|
|||||||
<c:SpawnPoint/>
|
<c:SpawnPoint/>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>Models/Characters/Assault/AssaultTPose.mesh</Resource>
|
<Resource>Models/Characters/Assault/AssaultTPose.mesh</Resource>
|
||||||
|
<Visible>false</Visible>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Transform>
|
<c:Transform>
|
||||||
<Position X="0" Y="0" Z="-1"/>
|
<Position X="1.14053249" Y="0" Z="-1.67306876"/>
|
||||||
</c:Transform>
|
</c:Transform>
|
||||||
</Components>
|
</Components>
|
||||||
<Children/>
|
<Children/>
|
||||||
@@ -4999,7 +5089,7 @@
|
|||||||
</Team>
|
</Team>
|
||||||
</c:Team>
|
</c:Team>
|
||||||
<c:Transform>
|
<c:Transform>
|
||||||
<Position X="-4.2177043" Y="5.59916019" Z="0"/>
|
<Position X="60.0169258" Y="2.37972379" Z="76.2893906"/>
|
||||||
</c:Transform>
|
</c:Transform>
|
||||||
</Components>
|
</Components>
|
||||||
<Children>
|
<Children>
|
||||||
@@ -5008,9 +5098,10 @@
|
|||||||
<c:SpawnPoint/>
|
<c:SpawnPoint/>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>Models/Characters/Assault/AssaultTPose.mesh</Resource>
|
<Resource>Models/Characters/Assault/AssaultTPose.mesh</Resource>
|
||||||
|
<Visible>false</Visible>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Transform>
|
<c:Transform>
|
||||||
<Position X="1" Y="0" Z="0"/>
|
<Position X="2.02889442" Y="0.194165871" Z="-1.17950201"/>
|
||||||
</c:Transform>
|
</c:Transform>
|
||||||
</Components>
|
</Components>
|
||||||
<Children/>
|
<Children/>
|
||||||
@@ -5020,9 +5111,10 @@
|
|||||||
<c:SpawnPoint/>
|
<c:SpawnPoint/>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>Models/Characters/Assault/AssaultTPose.mesh</Resource>
|
<Resource>Models/Characters/Assault/AssaultTPose.mesh</Resource>
|
||||||
|
<Visible>false</Visible>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Transform>
|
<c:Transform>
|
||||||
<Position X="-1" Y="0" Z="0"/>
|
<Position X="-9.04242706" Y="1.82531989" Z="-0.421615779"/>
|
||||||
</c:Transform>
|
</c:Transform>
|
||||||
</Components>
|
</Components>
|
||||||
<Children/>
|
<Children/>
|
||||||
@@ -5032,9 +5124,10 @@
|
|||||||
<c:SpawnPoint/>
|
<c:SpawnPoint/>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>Models/Characters/Assault/AssaultTPose.mesh</Resource>
|
<Resource>Models/Characters/Assault/AssaultTPose.mesh</Resource>
|
||||||
|
<Visible>false</Visible>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Transform>
|
<c:Transform>
|
||||||
<Position X="0" Y="0" Z="1"/>
|
<Position X="1.64179754" Y="0.634559035" Z="4.27690458"/>
|
||||||
</c:Transform>
|
</c:Transform>
|
||||||
</Components>
|
</Components>
|
||||||
<Children/>
|
<Children/>
|
||||||
@@ -5044,15 +5137,175 @@
|
|||||||
<c:SpawnPoint/>
|
<c:SpawnPoint/>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>Models/Characters/Assault/AssaultTPose.mesh</Resource>
|
<Resource>Models/Characters/Assault/AssaultTPose.mesh</Resource>
|
||||||
|
<Visible>false</Visible>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Transform>
|
<c:Transform>
|
||||||
<Position X="0" Y="0" Z="-1"/>
|
<Position X="-6.58577824" Y="1.97348273" Z="-2.86768818"/>
|
||||||
</c:Transform>
|
</c:Transform>
|
||||||
</Components>
|
</Components>
|
||||||
<Children/>
|
<Children/>
|
||||||
</Entity>
|
</Entity>
|
||||||
</Children>
|
</Children>
|
||||||
</Entity>
|
</Entity>
|
||||||
|
<Entity name="HealthPickups">
|
||||||
|
<Components>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:HealthPickup/>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>Models/Props/PickUps/HealthPickUp.mesh</Resource>
|
||||||
|
</c:Model>
|
||||||
|
<c:RaptorCopter>
|
||||||
|
<Speed>0.10000000149011612</Speed>
|
||||||
|
<Axis X="0" Y="1" Z="0"/>
|
||||||
|
</c:RaptorCopter>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="48.9189453" Y="7.06223536" Z="-78.9347992"/>
|
||||||
|
<Scale X="0.300000012" Y="0.300000012" Z="0.300000012"/>
|
||||||
|
<Orientation X="0" Y="71.4059677" Z="0"/>
|
||||||
|
</c:Transform>
|
||||||
|
<c:Trigger/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:AmmoPickup/>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>Models/Props/PickUps/AmmoPickUp.mesh</Resource>
|
||||||
|
</c:Model>
|
||||||
|
<c:RaptorCopter>
|
||||||
|
<Speed>0.10000000149011612</Speed>
|
||||||
|
<Axis X="0" Y="1" Z="0"/>
|
||||||
|
</c:RaptorCopter>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="-59.3499641" Y="7.46932745" Z="-20.6276321"/>
|
||||||
|
<Scale X="0.300000012" Y="0.300000012" Z="0.300000012"/>
|
||||||
|
<Orientation X="0" Y="68.0603104" Z="0"/>
|
||||||
|
</c:Transform>
|
||||||
|
<c:Trigger/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:HealthPickup/>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>Models/Props/PickUps/HealthPickUp.mesh</Resource>
|
||||||
|
</c:Model>
|
||||||
|
<c:RaptorCopter>
|
||||||
|
<Speed>0.10000000149011612</Speed>
|
||||||
|
<Axis X="0" Y="1" Z="0"/>
|
||||||
|
</c:RaptorCopter>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="-1.13644195" Y="1.38919806" Z="38.9768829"/>
|
||||||
|
<Scale X="0.300000012" Y="0.300000012" Z="0.300000012"/>
|
||||||
|
<Orientation X="0" Y="65.6683426" Z="0"/>
|
||||||
|
</c:Transform>
|
||||||
|
<c:Trigger/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:HealthPickup/>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>Models/Props/PickUps/HealthPickUp.mesh</Resource>
|
||||||
|
</c:Model>
|
||||||
|
<c:RaptorCopter>
|
||||||
|
<Speed>0.10000000149011612</Speed>
|
||||||
|
<Axis X="0" Y="1" Z="0"/>
|
||||||
|
</c:RaptorCopter>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="54.7225227" Y="6.51863909" Z="29.0052128"/>
|
||||||
|
<Scale X="0.300000012" Y="0.300000012" Z="0.300000012"/>
|
||||||
|
<Orientation X="0" Y="65.9822693" Z="0"/>
|
||||||
|
</c:Transform>
|
||||||
|
<c:Trigger/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:AmmoPickup/>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>Models/Props/PickUps/AmmoPickUp.mesh</Resource>
|
||||||
|
</c:Model>
|
||||||
|
<c:RaptorCopter>
|
||||||
|
<Speed>0.10000000149011612</Speed>
|
||||||
|
<Axis X="0" Y="1" Z="0"/>
|
||||||
|
</c:RaptorCopter>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="-51.6792374" Y="8.44526482" Z="32.5153465"/>
|
||||||
|
<Scale X="0.300000012" Y="0.300000012" Z="0.300000012"/>
|
||||||
|
<Orientation X="0" Y="65.4309921" Z="0"/>
|
||||||
|
</c:Transform>
|
||||||
|
<c:Trigger/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:HealthPickup/>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>Models/Props/PickUps/HealthPickUp.mesh</Resource>
|
||||||
|
</c:Model>
|
||||||
|
<c:RaptorCopter>
|
||||||
|
<Speed>0.10000000149011612</Speed>
|
||||||
|
<Axis X="0" Y="1" Z="0"/>
|
||||||
|
</c:RaptorCopter>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="-42.3974304" Y="7.28327894" Z="81.9305344"/>
|
||||||
|
<Scale X="0.300000012" Y="0.300000012" Z="0.300000012"/>
|
||||||
|
<Orientation X="0" Y="63.560215" Z="0"/>
|
||||||
|
</c:Transform>
|
||||||
|
<c:Trigger/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:AmmoPickup/>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>Models/Props/PickUps/AmmoPickUp.mesh</Resource>
|
||||||
|
</c:Model>
|
||||||
|
<c:RaptorCopter>
|
||||||
|
<Speed>0.10000000149011612</Speed>
|
||||||
|
<Axis X="0" Y="1" Z="0"/>
|
||||||
|
</c:RaptorCopter>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="-9.85184956" Y="8.25567532" Z="39.6119232"/>
|
||||||
|
<Scale X="0.300000012" Y="0.300000012" Z="0.300000012"/>
|
||||||
|
<Orientation X="0" Y="62.6090584" Z="0"/>
|
||||||
|
</c:Transform>
|
||||||
|
<c:Trigger/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:AmmoPickup/>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>Models/Props/PickUps/AmmoPickUp.mesh</Resource>
|
||||||
|
</c:Model>
|
||||||
|
<c:RaptorCopter>
|
||||||
|
<Speed>0.10000000149011612</Speed>
|
||||||
|
<Axis X="0" Y="1" Z="0"/>
|
||||||
|
</c:RaptorCopter>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="49.2257118" Y="7.39368248" Z="-31.1810112"/>
|
||||||
|
<Scale X="0.300000012" Y="0.300000012" Z="0.300000012"/>
|
||||||
|
<Orientation X="0" Y="59.8201942" Z="0"/>
|
||||||
|
</c:Transform>
|
||||||
|
<c:Trigger/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
</Entity>
|
||||||
</Children>
|
</Children>
|
||||||
|
|
||||||
</Entity>
|
</Entity>
|
||||||
|
|||||||
@@ -35,20 +35,6 @@
|
|||||||
</c:Transform>
|
</c:Transform>
|
||||||
</Components>
|
</Components>
|
||||||
<Children>
|
<Children>
|
||||||
<Entity name="PlayerName">
|
|
||||||
<Components>
|
|
||||||
<c:Text>
|
|
||||||
<Resource>Fonts/DroidSans.ttf,100</Resource>
|
|
||||||
<Color A="1" B="0" G="1" R="0"/>
|
|
||||||
</c:Text>
|
|
||||||
<c:Transform>
|
|
||||||
<Position X="0.100000001" Y="0.248000011" Z="-0.248000011"/>
|
|
||||||
<Scale X="0.100000001" Y="0.113000005" Z="0.5"/>
|
|
||||||
<Orientation X="0" Y="3.14199996" Z="0"/>
|
|
||||||
</c:Transform>
|
|
||||||
</Components>
|
|
||||||
<Children/>
|
|
||||||
</Entity>
|
|
||||||
<Entity name="CameraModel">
|
<Entity name="CameraModel">
|
||||||
<Components>
|
<Components>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
@@ -106,7 +92,7 @@
|
|||||||
<c:Text>
|
<c:Text>
|
||||||
<Content>100/100</Content>
|
<Content>100/100</Content>
|
||||||
<Resource>Fonts/DroidSans.ttf,64</Resource>
|
<Resource>Fonts/DroidSans.ttf,64</Resource>
|
||||||
<Color A="0.392156869" B="1" G="0" R="0"/>
|
<Color A="0.505882382" B="3.92156863" G="1.17647064" R="0"/>
|
||||||
</c:Text>
|
</c:Text>
|
||||||
<c:Transform>
|
<c:Transform>
|
||||||
<Position X="-0.355000019" Y="-0.203000009" Z="0.0410000011"/>
|
<Position X="-0.355000019" Y="-0.203000009" Z="0.0410000011"/>
|
||||||
@@ -120,7 +106,7 @@
|
|||||||
<Components>
|
<Components>
|
||||||
<c:Fill>
|
<c:Fill>
|
||||||
<Percentage>1</Percentage>
|
<Percentage>1</Percentage>
|
||||||
<Color A="0.196078435" B="1" G="0" R="0"/>
|
<Color A="0.301960796" B="1" G="0" R="0"/>
|
||||||
</c:Fill>
|
</c:Fill>
|
||||||
<c:Sprite>
|
<c:Sprite>
|
||||||
<DiffuseTexture>Textures/HealthHUD3.png</DiffuseTexture>
|
<DiffuseTexture>Textures/HealthHUD3.png</DiffuseTexture>
|
||||||
@@ -306,17 +292,69 @@
|
|||||||
</Entity>
|
</Entity>
|
||||||
</Children>
|
</Children>
|
||||||
</Entity>
|
</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>
|
||||||
|
<Resource>Fonts/DroidSans.ttf,64</Resource>
|
||||||
|
<Alignment>
|
||||||
|
<Right/>
|
||||||
|
</Alignment>
|
||||||
|
</c:Text>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="KillFeed2">
|
||||||
|
<Components>
|
||||||
|
<c:Text>
|
||||||
|
<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>
|
||||||
|
<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>
|
||||||
</Children>
|
</Children>
|
||||||
</Entity>
|
</Entity>
|
||||||
<Entity name="Hands">
|
<Entity name="Hands">
|
||||||
<Components>
|
<Components>
|
||||||
<c:Animation>
|
<c:Animation>
|
||||||
<AnimationName1>Idle</AnimationName1>
|
<AnimationName1>Idle</AnimationName1>
|
||||||
<Time1>0.1719161089749548</Time1>
|
<Time1>1.6050530664521858</Time1>
|
||||||
<Speed1>1</Speed1>
|
<Speed1>1</Speed1>
|
||||||
</c:Animation>
|
</c:Animation>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>Models/Characters/Assault/FirstPerson.mesh</Resource>
|
<Resource>Models/Characters/Assault/FirstPerson.mesh</Resource>
|
||||||
|
<Color A="1" B="1" G="0.309803933" R="0"/>
|
||||||
<Transparent>true</Transparent>
|
<Transparent>true</Transparent>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Transform/>
|
<c:Transform/>
|
||||||
@@ -332,8 +370,8 @@
|
|||||||
<Transparent>true</Transparent>
|
<Transparent>true</Transparent>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Transform>
|
<c:Transform>
|
||||||
<Position X="0.120430604" Y="-0.229735136" Z="-0.181454614"/>
|
<Position X="0.12043035" Y="-0.234149337" Z="-0.181454644"/>
|
||||||
<Orientation X="0.0104046864" Y="-0.00268157595" Z="0.0428441279"/>
|
<Orientation X="0.0104045281" Y="-0.00268131681" Z="0.0428438708"/>
|
||||||
</c:Transform>
|
</c:Transform>
|
||||||
</Components>
|
</Components>
|
||||||
<Children>
|
<Children>
|
||||||
@@ -439,7 +477,7 @@
|
|||||||
<Components>
|
<Components>
|
||||||
<c:Animation>
|
<c:Animation>
|
||||||
<AnimationName1>Idle</AnimationName1>
|
<AnimationName1>Idle</AnimationName1>
|
||||||
<Time1>1.8038469763698401</Time1>
|
<Time1>1.620305457513453</Time1>
|
||||||
<Speed1>1</Speed1>
|
<Speed1>1</Speed1>
|
||||||
</c:Animation>
|
</c:Animation>
|
||||||
<c:AnimationOffset>
|
<c:AnimationOffset>
|
||||||
@@ -450,7 +488,6 @@
|
|||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>Models/Characters/Assault/AssaultAnimations.mesh</Resource>
|
<Resource>Models/Characters/Assault/AssaultAnimations.mesh</Resource>
|
||||||
<Color A="1" B="1" G="0.309803933" R="0"/>
|
<Color A="1" B="1" G="0.309803933" R="0"/>
|
||||||
<Visible>false</Visible>
|
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Transform/>
|
<c:Transform/>
|
||||||
</Components>
|
</Components>
|
||||||
@@ -464,8 +501,8 @@
|
|||||||
<Resource>Models/Weapons/Blue/AssaultWeaponBlue.mesh</Resource>
|
<Resource>Models/Weapons/Blue/AssaultWeaponBlue.mesh</Resource>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Transform>
|
<c:Transform>
|
||||||
<Position X="0.158596605" Y="1.02875519" Z="-0.215406924"/>
|
<Position X="0.160351232" Y="1.02591991" Z="-0.215102971"/>
|
||||||
<Orientation X="-0.0626692027" Y="-0.0361935981" Z="0.120094992"/>
|
<Orientation X="-0.0627480298" Y="-0.0432248674" Z="0.119431816"/>
|
||||||
</c:Transform>
|
</c:Transform>
|
||||||
</Components>
|
</Components>
|
||||||
<Children>
|
<Children>
|
||||||
@@ -520,6 +557,21 @@
|
|||||||
</Components>
|
</Components>
|
||||||
<Children/>
|
<Children/>
|
||||||
</Entity>
|
</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"/>
|
||||||
|
<Scale X="0.100000001" Y="0.113000005" Z="0.5"/>
|
||||||
|
<Orientation X="0" Y="3.14199996" Z="0"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
</Children>
|
</Children>
|
||||||
|
|
||||||
</Entity>
|
</Entity>
|
||||||
|
|||||||
@@ -23,9 +23,7 @@
|
|||||||
<Red/>
|
<Red/>
|
||||||
</Team>
|
</Team>
|
||||||
</c:Team>
|
</c:Team>
|
||||||
<c:Transform>
|
<c:Transform/>
|
||||||
<Position X="5519.44287" Y="0.0288832653" Z="2.64837074"/>
|
|
||||||
</c:Transform>
|
|
||||||
</Components>
|
</Components>
|
||||||
|
|
||||||
<Children>
|
<Children>
|
||||||
@@ -37,20 +35,6 @@
|
|||||||
</c:Transform>
|
</c:Transform>
|
||||||
</Components>
|
</Components>
|
||||||
<Children>
|
<Children>
|
||||||
<Entity name="PlayerName">
|
|
||||||
<Components>
|
|
||||||
<c:Text>
|
|
||||||
<Resource>Fonts/DroidSans.ttf,100</Resource>
|
|
||||||
<Color A="1" B="0" G="1" R="0"/>
|
|
||||||
</c:Text>
|
|
||||||
<c:Transform>
|
|
||||||
<Position X="0.100000001" Y="0.248000011" Z="-0.248000011"/>
|
|
||||||
<Scale X="0.100000001" Y="0.113000005" Z="0.5"/>
|
|
||||||
<Orientation X="0" Y="3.14199996" Z="0"/>
|
|
||||||
</c:Transform>
|
|
||||||
</Components>
|
|
||||||
<Children/>
|
|
||||||
</Entity>
|
|
||||||
<Entity name="CameraModel">
|
<Entity name="CameraModel">
|
||||||
<Components>
|
<Components>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
@@ -71,25 +55,6 @@
|
|||||||
</c:Transform>
|
</c:Transform>
|
||||||
</Components>
|
</Components>
|
||||||
<Children>
|
<Children>
|
||||||
<Entity name="HealthBar">
|
|
||||||
<Components>
|
|
||||||
<c:Fill>
|
|
||||||
<Percentage>1</Percentage>
|
|
||||||
<Color A="0" B="1" G="0" R="0"/>
|
|
||||||
</c:Fill>
|
|
||||||
<c:HealthHUD/>
|
|
||||||
<c:Model>
|
|
||||||
<Resource>Models/Core/UnitHexagon.mesh</Resource>
|
|
||||||
<Color A="1" B="0.70588237" G="0.70588237" R="0.70588237"/>
|
|
||||||
</c:Model>
|
|
||||||
<c:Transform>
|
|
||||||
<Position X="-0.383000016" Y="-0.185000002" Z="0"/>
|
|
||||||
<Scale X="0.150000006" Y="0.150000006" Z="0.150000006"/>
|
|
||||||
<Orientation X="0" Y="0.594000041" Z="0"/>
|
|
||||||
</c:Transform>
|
|
||||||
</Components>
|
|
||||||
<Children/>
|
|
||||||
</Entity>
|
|
||||||
<Entity name="Crosshair">
|
<Entity name="Crosshair">
|
||||||
<Components>
|
<Components>
|
||||||
<c:Sprite>
|
<c:Sprite>
|
||||||
@@ -112,17 +77,284 @@
|
|||||||
</Components>
|
</Components>
|
||||||
<Children/>
|
<Children/>
|
||||||
</Entity>
|
</Entity>
|
||||||
|
<Entity name="HealthHUD">
|
||||||
|
<Components>
|
||||||
|
<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:HealthHUD/>
|
||||||
|
<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:Transform>
|
||||||
|
<Position X="-0.355000019" Y="-0.203000009" Z="0.0410000011"/>
|
||||||
|
<Scale X="0.0350000001" Y="0.0350000001" Z="0.0350000001"/>
|
||||||
|
<Orientation X="0" Y="0.410000026" Z="0"/>
|
||||||
|
</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:Sprite>
|
||||||
|
<DiffuseTexture>Textures/HealthHUD3.png</DiffuseTexture>
|
||||||
|
<Color A="0.588235319" B="0" G="0" R="0"/>
|
||||||
|
</c:Sprite>
|
||||||
|
<c:HealthHUD/>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="-0.263000011" Y="-0.185000002" Z="0"/>
|
||||||
|
<Scale X="0.106000006" Y="0.333000004" Z="0.150000006"/>
|
||||||
|
<Orientation X="5.87300014" Y="0" Z="4.71200037"/>
|
||||||
|
</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>
|
||||||
|
<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>
|
||||||
|
</c:Sprite>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0" Y="0" Z="0.00999999978"/>
|
||||||
|
<Scale X="0.800000012" Y="0.800000012" Z="0.800000012"/>
|
||||||
|
<Orientation X="0" Y="0" Z="1.57079637"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="BackgroundHexagon">
|
||||||
|
<Components>
|
||||||
|
<c:Sprite>
|
||||||
|
<DiffuseTexture>Textures/Core/UnitHexagon.png</DiffuseTexture>
|
||||||
|
<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>
|
||||||
|
<Percentage>0.80222018197612788</Percentage>
|
||||||
|
<Color A="0.699999988" B="1" G="0.200000003" R="0"/>
|
||||||
|
</c:Fill>
|
||||||
|
<c:Sprite>
|
||||||
|
<DiffuseTexture>Textures/Core/UnitHexagon_Rotated.png</DiffuseTexture>
|
||||||
|
</c:Sprite>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0" Y="0" Z="0.00999999978"/>
|
||||||
|
<Scale X="0.800000012" Y="0.800000012" Z="0.800000012"/>
|
||||||
|
<Orientation X="0" Y="0" Z="1.57079637"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="BackgroundHexagon">
|
||||||
|
<Components>
|
||||||
|
<c:Sprite>
|
||||||
|
<DiffuseTexture>Textures/Core/UnitHexagon.png</DiffuseTexture>
|
||||||
|
<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>
|
||||||
|
<Color A="0.699999988" B="1" G="0.200000003" R="0"/>
|
||||||
|
</c:Fill>
|
||||||
|
<c:Sprite>
|
||||||
|
<DiffuseTexture>Textures/Core/UnitHexagon_Rotated.png</DiffuseTexture>
|
||||||
|
</c:Sprite>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0" Y="0" Z="0.00999999978"/>
|
||||||
|
<Scale X="0.800000012" Y="0.800000012" Z="0.800000012"/>
|
||||||
|
<Orientation X="0" Y="0" Z="1.57079637"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="BackgroundHexagon">
|
||||||
|
<Components>
|
||||||
|
<c:Sprite>
|
||||||
|
<DiffuseTexture>Textures/Core/UnitHexagon.png</DiffuseTexture>
|
||||||
|
<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>
|
||||||
|
</c:Sprite>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0" Y="0" Z="0.00999999978"/>
|
||||||
|
<Scale X="0.800000012" Y="0.800000012" Z="0.800000012"/>
|
||||||
|
<Orientation X="0" Y="0" Z="1.57079637"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="BackgroundHexagon">
|
||||||
|
<Components>
|
||||||
|
<c:Sprite>
|
||||||
|
<DiffuseTexture>Textures/Core/UnitHexagon.png</DiffuseTexture>
|
||||||
|
<Color A="0.699999988" B="0" G="0.200000003" 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>
|
||||||
|
<Color A="0.699999988" B="1" G="0.200000003" R="0"/>
|
||||||
|
</c:Fill>
|
||||||
|
<c:Sprite>
|
||||||
|
<DiffuseTexture>Textures/Core/UnitHexagon_Rotated.png</DiffuseTexture>
|
||||||
|
</c:Sprite>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0" Y="0" Z="0.00999999978"/>
|
||||||
|
<Scale X="0.800000012" Y="0.800000012" Z="0.800000012"/>
|
||||||
|
<Orientation X="0" Y="0" Z="1.57079637"/>
|
||||||
|
</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>
|
||||||
|
<Resource>Fonts/DroidSans.ttf,64</Resource>
|
||||||
|
<Alignment>
|
||||||
|
<Right/>
|
||||||
|
</Alignment>
|
||||||
|
</c:Text>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="KillFeed2">
|
||||||
|
<Components>
|
||||||
|
<c:Text>
|
||||||
|
<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>
|
||||||
|
<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>
|
||||||
</Children>
|
</Children>
|
||||||
</Entity>
|
</Entity>
|
||||||
<Entity name="Hands">
|
<Entity name="Hands">
|
||||||
<Components>
|
<Components>
|
||||||
<c:Animation>
|
<c:Animation>
|
||||||
<AnimationName1>Idle</AnimationName1>
|
<AnimationName1>Idle</AnimationName1>
|
||||||
<Time1>0.1719161089749548</Time1>
|
<Time1>1.6050530664521858</Time1>
|
||||||
<Speed1>1</Speed1>
|
<Speed1>1</Speed1>
|
||||||
</c:Animation>
|
</c:Animation>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>Models/Characters/Assault/FirstPerson.mesh</Resource>
|
<Resource>Models/Characters/Assault/FirstPerson.mesh</Resource>
|
||||||
|
<Color A="1" B="0" G="0" R="1"/>
|
||||||
<Transparent>true</Transparent>
|
<Transparent>true</Transparent>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Transform/>
|
<c:Transform/>
|
||||||
@@ -138,8 +370,8 @@
|
|||||||
<Transparent>true</Transparent>
|
<Transparent>true</Transparent>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Transform>
|
<c:Transform>
|
||||||
<Position X="0.1204307" Y="-0.228431284" Z="-0.181454539"/>
|
<Position X="0.12043035" Y="-0.234149337" Z="-0.181454644"/>
|
||||||
<Orientation X="0.0104045458" Y="-0.00268182717" Z="0.0428440496"/>
|
<Orientation X="0.0104045281" Y="-0.00268131681" Z="0.0428438708"/>
|
||||||
</c:Transform>
|
</c:Transform>
|
||||||
</Components>
|
</Components>
|
||||||
<Children>
|
<Children>
|
||||||
@@ -157,12 +389,70 @@
|
|||||||
<Entity name="FirstPersonReloadSpawner">
|
<Entity name="FirstPersonReloadSpawner">
|
||||||
<Components>
|
<Components>
|
||||||
<c:Spawner>
|
<c:Spawner>
|
||||||
<EntityFile>Schema/Entities/ReloadEffectView.xml</EntityFile>
|
<EntityFile>Schema/Entities/ReloadEffectViewRed.xml</EntityFile>
|
||||||
</c:Spawner>
|
</c:Spawner>
|
||||||
<c:Transform/>
|
<c:Transform/>
|
||||||
</Components>
|
</Components>
|
||||||
<Children/>
|
<Children/>
|
||||||
</Entity>
|
</Entity>
|
||||||
|
<Entity name="AmmunitionHUD">
|
||||||
|
<Components>
|
||||||
|
<c:AmmunitionHUD/>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="-0.0430000015" Y="0.131501317" Z="-0.0670000017"/>
|
||||||
|
<Scale X="0.400000006" Y="0.400000006" Z="0.400000006"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children>
|
||||||
|
<Entity name="AmmunitionHUDBackground">
|
||||||
|
<Components>
|
||||||
|
<c:Sprite>
|
||||||
|
<DiffuseTexture>Textures/Core/UnitHexagon.png</DiffuseTexture>
|
||||||
|
<Color A="0.588235319" B="0" G="0" R="0"/>
|
||||||
|
</c:Sprite>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0" Y="0" Z="-0.00200000009"/>
|
||||||
|
<Scale X="0.119999997" Y="0.119999997" Z="0.119999997"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="AmmunitionText">
|
||||||
|
<Components>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children>
|
||||||
|
<Entity name="MagazineAmmo">
|
||||||
|
<Components>
|
||||||
|
<c:Text>
|
||||||
|
<Content>32</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>
|
||||||
|
</Children>
|
||||||
|
</Entity>
|
||||||
</Children>
|
</Children>
|
||||||
</Entity>
|
</Entity>
|
||||||
</Children>
|
</Children>
|
||||||
@@ -187,7 +477,7 @@
|
|||||||
<Components>
|
<Components>
|
||||||
<c:Animation>
|
<c:Animation>
|
||||||
<AnimationName1>Idle</AnimationName1>
|
<AnimationName1>Idle</AnimationName1>
|
||||||
<Time1>1.8038469763698401</Time1>
|
<Time1>1.620305457513453</Time1>
|
||||||
<Speed1>1</Speed1>
|
<Speed1>1</Speed1>
|
||||||
</c:Animation>
|
</c:Animation>
|
||||||
<c:AnimationOffset>
|
<c:AnimationOffset>
|
||||||
@@ -197,7 +487,7 @@
|
|||||||
<c:HiddenForLocalPlayer/>
|
<c:HiddenForLocalPlayer/>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>Models/Characters/Assault/AssaultAnimations.mesh</Resource>
|
<Resource>Models/Characters/Assault/AssaultAnimations.mesh</Resource>
|
||||||
<Color A="1" B="1" G="0.309803933" R="0"/>
|
<Color A="1" B="0" G="0" R="1"/>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Transform/>
|
<c:Transform/>
|
||||||
</Components>
|
</Components>
|
||||||
@@ -211,8 +501,8 @@
|
|||||||
<Resource>Models/Weapons/Red/AssaultWeaponRed.mesh</Resource>
|
<Resource>Models/Weapons/Red/AssaultWeaponRed.mesh</Resource>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Transform>
|
<c:Transform>
|
||||||
<Position X="0.139178902" Y="0.782200813" Z="-0.246610582"/>
|
<Position X="0.160351232" Y="1.02591991" Z="-0.215102971"/>
|
||||||
<Orientation X="-0.228463098" Y="0.0975924358" Z="0.182726845"/>
|
<Orientation X="-0.0627480298" Y="-0.0432248674" Z="0.119431816"/>
|
||||||
</c:Transform>
|
</c:Transform>
|
||||||
</Components>
|
</Components>
|
||||||
<Children>
|
<Children>
|
||||||
@@ -230,7 +520,7 @@
|
|||||||
<Entity name="ThirdPersonReloadSpawner">
|
<Entity name="ThirdPersonReloadSpawner">
|
||||||
<Components>
|
<Components>
|
||||||
<c:Spawner>
|
<c:Spawner>
|
||||||
<EntityFile>Schema/Entities/ReloadEffectWorld.xml</EntityFile>
|
<EntityFile>Schema/Entities/ReloadEffectWorldRed.xml</EntityFile>
|
||||||
</c:Spawner>
|
</c:Spawner>
|
||||||
<c:Transform/>
|
<c:Transform/>
|
||||||
</Components>
|
</Components>
|
||||||
@@ -267,6 +557,21 @@
|
|||||||
</Components>
|
</Components>
|
||||||
<Children/>
|
<Children/>
|
||||||
</Entity>
|
</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.50199997" Z="-0.248000011"/>
|
||||||
|
<Scale X="0.100000001" Y="0.113000005" Z="0.5"/>
|
||||||
|
<Orientation X="0" Y="3.14199996" Z="0"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
</Children>
|
</Children>
|
||||||
|
|
||||||
</Entity>
|
</Entity>
|
||||||
|
|||||||
@@ -0,0 +1,24 @@
|
|||||||
|
<?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">
|
||||||
|
|
||||||
|
<Components>
|
||||||
|
<c:Lifetime>
|
||||||
|
<Lifetime>2</Lifetime>
|
||||||
|
</c:Lifetime>
|
||||||
|
<c:ExplosionEffect>
|
||||||
|
<ColorByDistance>true</ColorByDistance>
|
||||||
|
<Velocity X="3.33300018" Y="0.0320000015" Z="0"/>
|
||||||
|
<ExplosionOrigin X="0" Y="0.0790000036" Z="-0.329000026"/>
|
||||||
|
<ExponentialAccelaration>true</ExponentialAccelaration>
|
||||||
|
<EndColor A="0" B="1" G="1" R="19.6078434"/>
|
||||||
|
<Randomness>true</Randomness>
|
||||||
|
</c:ExplosionEffect>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>Models/Weapons/Red/AssaultWeaponRed.mesh</Resource>
|
||||||
|
</c:Model>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
|
||||||
|
<Children/>
|
||||||
|
|
||||||
|
</Entity>
|
||||||
@@ -10,11 +10,12 @@
|
|||||||
<Velocity X="1.63300014" Y="0.0320000015" Z="0"/>
|
<Velocity X="1.63300014" Y="0.0320000015" Z="0"/>
|
||||||
<ExplosionOrigin X="0" Y="0.0790000036" Z="-0.329000026"/>
|
<ExplosionOrigin X="0" Y="0.0790000036" Z="-0.329000026"/>
|
||||||
<ExponentialAccelaration>true</ExponentialAccelaration>
|
<ExponentialAccelaration>true</ExponentialAccelaration>
|
||||||
<EndColor A="0" B="19.6078434" G="19.6078434" R="1"/>
|
<EndColor A="0" B="19.6078434" G="19.6078434" R="0"/>
|
||||||
<Randomness>true</Randomness>
|
<Randomness>true</Randomness>
|
||||||
</c:ExplosionEffect>
|
</c:ExplosionEffect>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>Models/Weapons/Blue/AssaultWeaponBlue.mesh</Resource>
|
<Resource>Models/Weapons/Blue/AssaultWeaponBlue.mesh</Resource>
|
||||||
|
<Transparent>true</Transparent>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Transform/>
|
<c:Transform/>
|
||||||
</Components>
|
</Components>
|
||||||
|
|||||||
@@ -0,0 +1,25 @@
|
|||||||
|
<?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">
|
||||||
|
|
||||||
|
<Components>
|
||||||
|
<c:Lifetime>
|
||||||
|
<Lifetime>2</Lifetime>
|
||||||
|
</c:Lifetime>
|
||||||
|
<c:ExplosionEffect>
|
||||||
|
<ColorByDistance>true</ColorByDistance>
|
||||||
|
<Velocity X="1.63300014" Y="0.0320000015" Z="0"/>
|
||||||
|
<ExplosionOrigin X="0" Y="0.0790000036" Z="-0.329000026"/>
|
||||||
|
<ExponentialAccelaration>true</ExponentialAccelaration>
|
||||||
|
<EndColor A="0" B="1" G="1" R="19.6078434"/>
|
||||||
|
<Randomness>true</Randomness>
|
||||||
|
</c:ExplosionEffect>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>Models/Weapons/Red/AssaultWeaponRed.mesh</Resource>
|
||||||
|
<Transparent>true</Transparent>
|
||||||
|
</c:Model>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
|
||||||
|
<Children/>
|
||||||
|
|
||||||
|
</Entity>
|
||||||
@@ -44,6 +44,7 @@
|
|||||||
<xs:element ref="c:Shielded" minOccurs="0"/>
|
<xs:element ref="c:Shielded" minOccurs="0"/>
|
||||||
<xs:element ref="c:CapturePointHUD" minOccurs="0"/>
|
<xs:element ref="c:CapturePointHUD" minOccurs="0"/>
|
||||||
<xs:element ref="c:AmmunitionHUD" minOccurs="0"/>
|
<xs:element ref="c:AmmunitionHUD" minOccurs="0"/>
|
||||||
|
<xs:element ref="c:KillFeed" minOccurs="0"/>
|
||||||
<xs:element ref="c:Sprite" minOccurs="0"/>
|
<xs:element ref="c:Sprite" minOccurs="0"/>
|
||||||
<xs:element ref="c:AnimationOffset" minOccurs="0"/>
|
<xs:element ref="c:AnimationOffset" minOccurs="0"/>
|
||||||
</xs:all>
|
</xs:all>
|
||||||
|
|||||||
@@ -40,6 +40,7 @@ EditorSystem::EditorSystem(SystemParams params, IRenderer* renderer, RenderFrame
|
|||||||
|
|
||||||
m_EditorStats = new EditorStats();
|
m_EditorStats = new EditorStats();
|
||||||
|
|
||||||
|
m_Enabled = ResourceManager::Load<ConfigFile>("Config.ini")->Get<bool>("Debug.EditorEnabled", false);
|
||||||
if (m_Enabled) {
|
if (m_Enabled) {
|
||||||
Enable();
|
Enable();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -41,9 +41,11 @@ void Client::Connect(std::string address, int port)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Client::Update()
|
void Client::Update(double dt)
|
||||||
{
|
{
|
||||||
m_EventBroker->Process<Client>();
|
m_EventBroker->Process<Client>();
|
||||||
|
//m_TimeStamp += dt;
|
||||||
|
publishInputCommands();
|
||||||
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);
|
||||||
@@ -72,7 +74,8 @@ void Client::Update()
|
|||||||
sendInputCommands();
|
sendInputCommands();
|
||||||
m_TimeSinceSentInputs = std::clock();
|
m_TimeSinceSentInputs = std::clock();
|
||||||
}
|
}
|
||||||
// HACK: Send absolute player positions for now to avoid desync until we have reliable messages
|
// HACK: Send absolute player positions for now to avoid desync until we have reliable messages.
|
||||||
|
// Reliable messages and timestamps did not fix it.
|
||||||
sendLocalPlayerTransform();
|
sendLocalPlayerTransform();
|
||||||
|
|
||||||
hasServerTimedOut();
|
hasServerTimedOut();
|
||||||
@@ -122,6 +125,9 @@ void Client::parseMessageType(Packet& packet)
|
|||||||
case MessageType::OnPlayerDamage:
|
case MessageType::OnPlayerDamage:
|
||||||
parsePlayerDamage(packet);
|
parsePlayerDamage(packet);
|
||||||
break;
|
break;
|
||||||
|
case MessageType::OnInputCommand:
|
||||||
|
//parsePlayerDamage(packet);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -284,21 +290,30 @@ void Client::ignoreFields(Packet& packet, const ComponentInfo& componentInfo)
|
|||||||
|
|
||||||
void Client::parseSnapshot(Packet& packet)
|
void Client::parseSnapshot(Packet& packet)
|
||||||
{
|
{
|
||||||
// Read input commands
|
//// Read input commands
|
||||||
std::size_t numInputCommands = packet.ReadPrimitive<std::size_t>();
|
//std::size_t numInputCommands = packet.ReadPrimitive<std::size_t>();
|
||||||
for (std::size_t i = 0; i < numInputCommands; ++i) {
|
//for (std::size_t i = 0; i < numInputCommands; ++i) {
|
||||||
Events::InputCommand e;
|
// Events::InputCommand e;
|
||||||
e.PlayerID = packet.ReadPrimitive<EntityID>();
|
// e.PlayerID = packet.ReadPrimitive<EntityID>();
|
||||||
EntityID player = packet.ReadPrimitive<EntityID>();
|
// EntityID player = packet.ReadPrimitive<EntityID>();
|
||||||
std::string command = packet.ReadString();
|
// std::string command = packet.ReadString();
|
||||||
float value = packet.ReadPrimitive<float>();
|
// float value = packet.ReadPrimitive<float>();
|
||||||
if (m_ServerIDToClientID.find(player) != m_ServerIDToClientID.end()) {
|
// double timestamp = packet.ReadPrimitive<double>();
|
||||||
e.Player = EntityWrapper(m_World, m_ServerIDToClientID.at(player));
|
// if (m_ServerIDToClientID.find(player) != m_ServerIDToClientID.end()) {
|
||||||
e.Command = command;
|
// e.Player = EntityWrapper(m_World, m_ServerIDToClientID.at(player));
|
||||||
e.Value = value;
|
// e.Command = command;
|
||||||
m_EventBroker->Publish(e);
|
// e.Value = value;
|
||||||
}
|
// e.TimeStamp = timestamp;
|
||||||
}
|
// m_EventBroker->Publish(e);
|
||||||
|
// }
|
||||||
|
//}
|
||||||
|
|
||||||
|
// Read timestamp
|
||||||
|
double remoteTimestamp = packet.ReadPrimitive<double>();
|
||||||
|
//if (abs(remoteTimestamp - m_TimeStamp) > 0.100) {
|
||||||
|
// m_TimeStamp = remoteTimestamp;
|
||||||
|
// LOG_INFO("Resynced remote and local timestamp");
|
||||||
|
//}
|
||||||
|
|
||||||
// Read world state
|
// Read world state
|
||||||
while (packet.DataReadSize() < packet.Size()) {
|
while (packet.DataReadSize() < packet.Size()) {
|
||||||
@@ -359,6 +374,36 @@ void Client::parseSnapshot(Packet& packet)
|
|||||||
parseSpawnEvents();
|
parseSpawnEvents();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void Client::parseOnInputCommand(Packet & packet)
|
||||||
|
{
|
||||||
|
while (packet.DataReadSize() < packet.Size()) {
|
||||||
|
Events::InputCommand e;
|
||||||
|
e.PlayerID = packet.ReadPrimitive<int>();
|
||||||
|
e.Player = EntityWrapper(m_World, packet.ReadPrimitive<int>());
|
||||||
|
e.Command = packet.ReadString();
|
||||||
|
e.Value = packet.ReadPrimitive<float>();
|
||||||
|
e.TimeStamp = packet.ReadPrimitive<double>();
|
||||||
|
m_EventBroker->Publish(e);
|
||||||
|
m_ReceivedInputCommands.push_back(e);
|
||||||
|
//LOG_INFO("Server::parseOnInputCommand: Command is %s. Value is %f. PlayerID is %i.", e.Command.c_str(), e.Value, e.PlayerID);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void Client::publishInputCommands()
|
||||||
|
{
|
||||||
|
std::vector<Events::InputCommand> notPublishedEvents;
|
||||||
|
for (int i = 0; i < m_ReceivedInputCommands.size(); i++) {
|
||||||
|
if (m_ReceivedInputCommands.at(i).TimeStamp < m_TimeStamp) {
|
||||||
|
m_EventBroker->Publish(m_ReceivedInputCommands.at(i));
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
notPublishedEvents.push_back(m_ReceivedInputCommands.at(i));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
m_ReceivedInputCommands = notPublishedEvents;
|
||||||
|
}
|
||||||
|
|
||||||
void Client::disconnect()
|
void Client::disconnect()
|
||||||
{
|
{
|
||||||
m_IsConnected = false;
|
m_IsConnected = false;
|
||||||
@@ -402,7 +447,9 @@ bool Client::OnInputCommand(const Events::InputCommand & e)
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (m_IsConnected) {
|
if (m_IsConnected) {
|
||||||
m_InputCommandBuffer.push_back(e);
|
Events::InputCommand setTimestamp = e;
|
||||||
|
setTimestamp.TimeStamp = m_TimeStamp;
|
||||||
|
m_InputCommandBuffer.push_back(setTimestamp);
|
||||||
}
|
}
|
||||||
//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;
|
||||||
@@ -437,11 +484,12 @@ void Client::parsePlayerDamage(Packet& packet)
|
|||||||
{
|
{
|
||||||
Events::PlayerDamage e;
|
Events::PlayerDamage e;
|
||||||
PlayerID victimID = packet.ReadPrimitive<EntityID>();
|
PlayerID victimID = packet.ReadPrimitive<EntityID>();
|
||||||
if(!serverClientMapsHasEntity(victimID)){
|
PlayerID inflictorID = packet.ReadPrimitive<EntityID>();
|
||||||
|
if(!serverClientMapsHasEntity(victimID) || !serverClientMapsHasEntity(inflictorID)){
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
e.Inflictor = EntityWrapper(m_World, m_ServerIDToClientID.at(victimID));
|
e.Inflictor = EntityWrapper(m_World, m_ServerIDToClientID.at(victimID));
|
||||||
e.Victim = EntityWrapper(m_World, m_ServerIDToClientID.at(packet.ReadPrimitive<EntityID>()));
|
e.Victim = EntityWrapper(m_World, m_ServerIDToClientID.at(inflictorID));
|
||||||
e.Damage = packet.ReadPrimitive<double>();
|
e.Damage = packet.ReadPrimitive<double>();
|
||||||
// Don't rebroadcast our own player damage events or we'll have an infinite loop!
|
// Don't rebroadcast our own player damage events or we'll have an infinite loop!
|
||||||
if (e.Inflictor != m_LocalPlayer) {
|
if (e.Inflictor != m_LocalPlayer) {
|
||||||
@@ -515,6 +563,7 @@ void Client::sendInputCommands()
|
|||||||
for (int i = 0; i < m_InputCommandBuffer.size(); i++) {
|
for (int i = 0; i < m_InputCommandBuffer.size(); i++) {
|
||||||
packet.WriteString(m_InputCommandBuffer[i].Command);
|
packet.WriteString(m_InputCommandBuffer[i].Command);
|
||||||
packet.WritePrimitive(m_InputCommandBuffer[i].Value);
|
packet.WritePrimitive(m_InputCommandBuffer[i].Value);
|
||||||
|
packet.WritePrimitive(m_InputCommandBuffer[i].TimeStamp);
|
||||||
}
|
}
|
||||||
m_Reliable.Send(packet);
|
m_Reliable.Send(packet);
|
||||||
m_InputCommandBuffer.clear();
|
m_InputCommandBuffer.clear();
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ Network::Network(World* world, EventBroker* eventBroker)
|
|||||||
m_TimeoutMs = config->Get<int>("Networking.TimeoutMs", 20000);
|
m_TimeoutMs = config->Get<int>("Networking.TimeoutMs", 20000);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Network::Update()
|
void Network::Update(double dt)
|
||||||
{
|
{
|
||||||
updateNetworkData();
|
updateNetworkData();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
#include "Network/Server.h"
|
#include "Network/Server.h"
|
||||||
|
|
||||||
Server::Server(World* world, EventBroker* eventBroker, int port)
|
Server::Server(World* world, EventBroker* eventBroker, int port)
|
||||||
: Network(world, eventBroker)
|
: Network(world, eventBroker)
|
||||||
{
|
{
|
||||||
ConfigFile* config = ResourceManager::Load<ConfigFile>("Config.ini");
|
ConfigFile* config = ResourceManager::Load<ConfigFile>("Config.ini");
|
||||||
@@ -26,10 +26,12 @@ Server::~Server()
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void Server::Update()
|
void Server::Update(double dt)
|
||||||
{
|
{
|
||||||
|
m_EventBroker->Process<Server>();
|
||||||
|
m_TimeStamp += dt;
|
||||||
|
publishInputCommands();
|
||||||
PlayerDefinition pd;
|
PlayerDefinition pd;
|
||||||
|
|
||||||
m_Reliable.AcceptNewConnections(m_NextPlayerID, m_ConnectedPlayers);
|
m_Reliable.AcceptNewConnections(m_NextPlayerID, m_ConnectedPlayers);
|
||||||
for (auto& kv : m_ConnectedPlayers) {
|
for (auto& kv : m_ConnectedPlayers) {
|
||||||
while (kv.second.TCPSocket->available()) {
|
while (kv.second.TCPSocket->available()) {
|
||||||
@@ -80,11 +82,9 @@ void Server::Update()
|
|||||||
checkForTimeOuts();
|
checkForTimeOuts();
|
||||||
timOutTimer = currentTime;
|
timOutTimer = currentTime;
|
||||||
}
|
}
|
||||||
m_EventBroker->Process<Server>();
|
|
||||||
if (isReadingData) {
|
if (isReadingData) {
|
||||||
Network::Update();
|
Network::Update(dt);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void Server::parseMessageType(Packet& packet)
|
void Server::parseMessageType(Packet& packet)
|
||||||
@@ -146,7 +146,8 @@ void Server::unreliableBroadcast(Packet& packet)
|
|||||||
void Server::sendSnapshot()
|
void Server::sendSnapshot()
|
||||||
{
|
{
|
||||||
Packet packet(MessageType::Snapshot);
|
Packet packet(MessageType::Snapshot);
|
||||||
addInputCommandsToPacket(packet);
|
//addInputCommandsToPacket(packet);
|
||||||
|
packet.WritePrimitive(m_TimeStamp/*+ somePingvalue + offset*/);
|
||||||
addChildrenToPacket(packet, EntityID_Invalid);
|
addChildrenToPacket(packet, EntityID_Invalid);
|
||||||
unreliableBroadcast(packet);
|
unreliableBroadcast(packet);
|
||||||
}
|
}
|
||||||
@@ -160,6 +161,7 @@ void Server::addInputCommandsToPacket(Packet& packet)
|
|||||||
packet.WritePrimitive(m_ConnectedPlayers.at(command.PlayerID).EntityID);
|
packet.WritePrimitive(m_ConnectedPlayers.at(command.PlayerID).EntityID);
|
||||||
packet.WriteString(command.Command);
|
packet.WriteString(command.Command);
|
||||||
packet.WritePrimitive(command.Value);
|
packet.WritePrimitive(command.Value);
|
||||||
|
packet.WritePrimitive(command.TimeStamp);
|
||||||
}
|
}
|
||||||
m_InputCommandsToBroadcast.clear();
|
m_InputCommandsToBroadcast.clear();
|
||||||
}
|
}
|
||||||
@@ -280,7 +282,7 @@ void Server::parseTCPConnect(Packet & packet)
|
|||||||
// 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
|
||||||
|
|
||||||
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
|
||||||
@@ -333,6 +335,7 @@ void Server::disconnect(PlayerID playerID)
|
|||||||
e.PlayerID = playerID;
|
e.PlayerID = playerID;
|
||||||
m_EventBroker->Publish(e);
|
m_EventBroker->Publish(e);
|
||||||
//m_World->DeleteEntity(m_ConnectedPlayers[playerID].EntityID);
|
//m_World->DeleteEntity(m_ConnectedPlayers[playerID].EntityID);
|
||||||
|
// TODO Kolla Anders crashade efter timeout med break point
|
||||||
m_ConnectedPlayers[playerID].TCPSocket->shutdown(boost::asio::ip::tcp::socket::shutdown_both);
|
m_ConnectedPlayers[playerID].TCPSocket->shutdown(boost::asio::ip::tcp::socket::shutdown_both);
|
||||||
m_ConnectedPlayers[playerID].TCPSocket->close();
|
m_ConnectedPlayers[playerID].TCPSocket->close();
|
||||||
m_World->DeleteEntity(m_ConnectedPlayers[playerID].EntityID);
|
m_World->DeleteEntity(m_ConnectedPlayers[playerID].EntityID);
|
||||||
@@ -375,8 +378,7 @@ bool Server::OnInputCommand(const Events::InputCommand & e)
|
|||||||
}
|
}
|
||||||
isReadingData = !isReadingData;
|
isReadingData = !isReadingData;
|
||||||
m_SaveDataTimer = std::clock();
|
m_SaveDataTimer = std::clock();
|
||||||
}
|
} else if (e.Command == "KickPlayer" && e.Value > 0) {
|
||||||
if (e.Command == "KickPlayer" && e.Value > 0) {
|
|
||||||
kick(0);
|
kick(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -466,7 +468,9 @@ void Server::parseOnInputCommand(Packet& packet)
|
|||||||
e.PlayerID = player; // Set correct player id
|
e.PlayerID = player; // Set correct player id
|
||||||
e.Player = EntityWrapper(m_World, m_ConnectedPlayers.at(player).EntityID);
|
e.Player = EntityWrapper(m_World, m_ConnectedPlayers.at(player).EntityID);
|
||||||
e.Value = packet.ReadPrimitive<float>();
|
e.Value = packet.ReadPrimitive<float>();
|
||||||
m_EventBroker->Publish(e);
|
e.TimeStamp = packet.ReadPrimitive<double>();
|
||||||
|
/* m_EventBroker->Publish(e);*/
|
||||||
|
m_InputCommandsToPublish.push_back(e);
|
||||||
if (e.Command == "PrimaryFire" || e.Command == "Reload") {
|
if (e.Command == "PrimaryFire" || e.Command == "Reload") {
|
||||||
m_InputCommandsToBroadcast.push_back(e);
|
m_InputCommandsToBroadcast.push_back(e);
|
||||||
}
|
}
|
||||||
@@ -516,6 +520,20 @@ bool Server::shouldSendToClient(EntityWrapper childEntity)
|
|||||||
return childEntity.HasComponent("Player") || childEntity.FirstParentWithComponent("Player").Valid();
|
return childEntity.HasComponent("Player") || childEntity.FirstParentWithComponent("Player").Valid();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Server::publishInputCommands()
|
||||||
|
{
|
||||||
|
std::vector<Events::InputCommand> notPublishedEvents;
|
||||||
|
for (int i = 0; i < m_InputCommandsToPublish.size(); i++) {
|
||||||
|
if (m_InputCommandsToPublish.at(i).TimeStamp < m_TimeStamp) {
|
||||||
|
m_EventBroker->Publish(m_InputCommandsToPublish.at(i));
|
||||||
|
} else {
|
||||||
|
LOG_INFO("Did not instantly publish command");
|
||||||
|
notPublishedEvents.push_back(m_InputCommandsToPublish.at(i));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
m_InputCommandsToPublish = notPublishedEvents;
|
||||||
|
}
|
||||||
|
|
||||||
PlayerID Server::GetPlayerIDFromEndpoint()
|
PlayerID Server::GetPlayerIDFromEndpoint()
|
||||||
{
|
{
|
||||||
// check both tcp and udp connection
|
// check both tcp and udp connection
|
||||||
|
|||||||
@@ -121,7 +121,6 @@ void Skeleton::AccumulateBoneTransforms(bool noRootMotion, std::vector<Animation
|
|||||||
|
|
||||||
|
|
||||||
if (progress > 1.0f || progress < 0.0f) {
|
if (progress > 1.0f || progress < 0.0f) {
|
||||||
LOG_INFO("Progress: %f", progress);
|
|
||||||
progress = glm::clamp(progress, 0.0f, 1.0f);
|
progress = glm::clamp(progress, 0.0f, 1.0f);
|
||||||
}
|
}
|
||||||
Animation::Keyframe::BoneProperty currentBoneProperty = currentFrame.BoneProperties;
|
Animation::Keyframe::BoneProperty currentBoneProperty = currentFrame.BoneProperties;
|
||||||
@@ -241,7 +240,6 @@ void Skeleton::AccumulateBoneTransforms(bool noRootMotion, std::vector<Animation
|
|||||||
|
|
||||||
|
|
||||||
if (progress > 1.0f || progress < 0.0f) {
|
if (progress > 1.0f || progress < 0.0f) {
|
||||||
LOG_INFO("Progress: %f", progress);
|
|
||||||
progress = glm::clamp(progress, 0.0f, 1.0f);
|
progress = glm::clamp(progress, 0.0f, 1.0f);
|
||||||
}
|
}
|
||||||
Animation::Keyframe::BoneProperty currentBoneProperty = currentFrame.BoneProperties;
|
Animation::Keyframe::BoneProperty currentBoneProperty = currentFrame.BoneProperties;
|
||||||
@@ -489,7 +487,6 @@ glm::mat4 Skeleton::GetBoneTransform(bool noRootMotion, const Bone* bone, std::v
|
|||||||
|
|
||||||
|
|
||||||
if (progress > 1.0f || progress < 0.0f) {
|
if (progress > 1.0f || progress < 0.0f) {
|
||||||
LOG_INFO("Progress: %f", progress);
|
|
||||||
progress = glm::clamp(progress, 0.0f, 1.0f);
|
progress = glm::clamp(progress, 0.0f, 1.0f);
|
||||||
}
|
}
|
||||||
Animation::Keyframe::BoneProperty currentBoneProperty = currentFrame.BoneProperties;
|
Animation::Keyframe::BoneProperty currentBoneProperty = currentFrame.BoneProperties;
|
||||||
@@ -609,12 +606,10 @@ glm::mat4 Skeleton::GetBoneTransform(bool noRootMotion, const Bone* bone, std::v
|
|||||||
progress = (time - currentFrame.Time) / (animation->Duration - currentFrame.Time);
|
progress = (time - currentFrame.Time) / (animation->Duration - currentFrame.Time);
|
||||||
} else {
|
} else {
|
||||||
progress = (time - currentFrame.Time) / (nextFrame.Time - currentFrame.Time);
|
progress = (time - currentFrame.Time) / (nextFrame.Time - currentFrame.Time);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if (progress > 1.0f || progress < 0.0f) {
|
if (progress > 1.0f || progress < 0.0f) {
|
||||||
LOG_INFO("Progress: %f", progress);
|
|
||||||
progress = glm::clamp(progress, 0.0f, 1.0f);
|
progress = glm::clamp(progress, 0.0f, 1.0f);
|
||||||
}
|
}
|
||||||
Animation::Keyframe::BoneProperty currentBoneProperty = currentFrame.BoneProperties;
|
Animation::Keyframe::BoneProperty currentBoneProperty = currentFrame.BoneProperties;
|
||||||
|
|||||||
@@ -36,6 +36,7 @@ source_group(Network FILES ${SOURCE_FILES_Network})
|
|||||||
set(SOURCE_FILES
|
set(SOURCE_FILES
|
||||||
${SOURCE_FILES}
|
${SOURCE_FILES}
|
||||||
"Game.cpp"
|
"Game.cpp"
|
||||||
|
"MiniDump.cpp"
|
||||||
${SOURCE_FILES_Systems}
|
${SOURCE_FILES_Systems}
|
||||||
${SOURCE_FILES_Systems_Weapon}
|
${SOURCE_FILES_Systems_Weapon}
|
||||||
${SOURCE_FILES_Events}
|
${SOURCE_FILES_Events}
|
||||||
|
|||||||
+4
-2
@@ -25,6 +25,7 @@
|
|||||||
#include "Rendering/AnimationSystem.h"
|
#include "Rendering/AnimationSystem.h"
|
||||||
#include "Network/MultiplayerSnapshotFilter.h"
|
#include "Network/MultiplayerSnapshotFilter.h"
|
||||||
#include "Game/Systems/AmmunitionHUDSystem.h"
|
#include "Game/Systems/AmmunitionHUDSystem.h"
|
||||||
|
#include "Game/Systems/KillFeedSystem.h"
|
||||||
|
|
||||||
|
|
||||||
Game::Game(int argc, char* argv[])
|
Game::Game(int argc, char* argv[])
|
||||||
@@ -130,6 +131,7 @@ Game::Game(int argc, char* argv[])
|
|||||||
m_SystemPipeline->AddSystem<AmmoPickupSystem>(updateOrderLevel);
|
m_SystemPipeline->AddSystem<AmmoPickupSystem>(updateOrderLevel);
|
||||||
m_SystemPipeline->AddSystem<DamageIndicatorSystem>(updateOrderLevel);
|
m_SystemPipeline->AddSystem<DamageIndicatorSystem>(updateOrderLevel);
|
||||||
m_SystemPipeline->AddSystem<AmmunitionHUDSystem>(updateOrderLevel);
|
m_SystemPipeline->AddSystem<AmmunitionHUDSystem>(updateOrderLevel);
|
||||||
|
m_SystemPipeline->AddSystem<KillFeedSystem>(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");
|
||||||
@@ -197,10 +199,10 @@ void Game::Tick()
|
|||||||
// Update network
|
// Update network
|
||||||
m_EventBroker->Process<MultiplayerSnapshotFilter>();
|
m_EventBroker->Process<MultiplayerSnapshotFilter>();
|
||||||
if (m_NetworkClient != nullptr) {
|
if (m_NetworkClient != nullptr) {
|
||||||
m_NetworkClient->Update();
|
m_NetworkClient->Update(dt);
|
||||||
}
|
}
|
||||||
if (m_NetworkServer != nullptr) {
|
if (m_NetworkServer != nullptr) {
|
||||||
m_NetworkServer->Update();
|
m_NetworkServer->Update(dt);
|
||||||
}
|
}
|
||||||
//m_SoundManager->Update(dt);
|
//m_SoundManager->Update(dt);
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,110 @@
|
|||||||
|
/*
|
||||||
|
Author: Vladimir Sedach.
|
||||||
|
|
||||||
|
Purpose: demo of Call Stack creation by our own means,
|
||||||
|
and with MiniDumpWriteDump() function of DbgHelp.dll.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <iostream>
|
||||||
|
#include <ctime>
|
||||||
|
|
||||||
|
#include <windows.h>
|
||||||
|
#include <tlhelp32.h>
|
||||||
|
//#include "dbghelp.h"
|
||||||
|
|
||||||
|
//#define DEBUG_DPRINTF 1 //allow d()
|
||||||
|
//#include "wfun.h"
|
||||||
|
|
||||||
|
#pragma optimize("y", off) //generate stack frame pointers for all functions - same as /Oy- in the project
|
||||||
|
#pragma warning(disable: 4200) //nonstandard extension used : zero-sized array in struct/union
|
||||||
|
#pragma warning(disable: 4100) //unreferenced formal parameter
|
||||||
|
|
||||||
|
// In case you don't have dbghelp.h.
|
||||||
|
#ifndef _DBGHELP_
|
||||||
|
|
||||||
|
typedef struct _MINIDUMP_EXCEPTION_INFORMATION {
|
||||||
|
DWORD ThreadId;
|
||||||
|
PEXCEPTION_POINTERS ExceptionPointers;
|
||||||
|
BOOL ClientPointers;
|
||||||
|
} MINIDUMP_EXCEPTION_INFORMATION, *PMINIDUMP_EXCEPTION_INFORMATION;
|
||||||
|
|
||||||
|
typedef enum _MINIDUMP_TYPE {
|
||||||
|
MiniDumpNormal = 0x00000000,
|
||||||
|
MiniDumpWithDataSegs = 0x00000001,
|
||||||
|
} MINIDUMP_TYPE;
|
||||||
|
|
||||||
|
typedef BOOL (WINAPI * MINIDUMP_WRITE_DUMP)(
|
||||||
|
IN HANDLE hProcess,
|
||||||
|
IN DWORD ProcessId,
|
||||||
|
IN HANDLE hFile,
|
||||||
|
IN MINIDUMP_TYPE DumpType,
|
||||||
|
IN CONST PMINIDUMP_EXCEPTION_INFORMATION ExceptionParam, OPTIONAL
|
||||||
|
IN PVOID UserStreamParam, OPTIONAL
|
||||||
|
IN PVOID CallbackParam OPTIONAL
|
||||||
|
);
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
typedef BOOL (WINAPI * MINIDUMP_WRITE_DUMP)(
|
||||||
|
IN HANDLE hProcess,
|
||||||
|
IN DWORD ProcessId,
|
||||||
|
IN HANDLE hFile,
|
||||||
|
IN MINIDUMP_TYPE DumpType,
|
||||||
|
IN CONST PMINIDUMP_EXCEPTION_INFORMATION ExceptionParam, OPTIONAL
|
||||||
|
IN PMINIDUMP_USER_STREAM_INFORMATION UserStreamParam, OPTIONAL
|
||||||
|
IN PMINIDUMP_CALLBACK_INFORMATION CallbackParam OPTIONAL
|
||||||
|
);
|
||||||
|
#endif //#ifndef _DBGHELP_
|
||||||
|
|
||||||
|
HMODULE hDbgHelp;
|
||||||
|
MINIDUMP_WRITE_DUMP MiniDumpWriteDump_;
|
||||||
|
|
||||||
|
// Tool Help functions.
|
||||||
|
typedef HANDLE (WINAPI * CREATE_TOOL_HELP32_SNAPSHOT)(DWORD dwFlags, DWORD th32ProcessID);
|
||||||
|
|
||||||
|
//*************************************************************************************
|
||||||
|
void WINAPI Create_Dump(PEXCEPTION_POINTERS pException, BOOL File_Flag, BOOL Show_Flag)
|
||||||
|
//*************************************************************************************
|
||||||
|
// Create dump.
|
||||||
|
// pException can be either GetExceptionInformation() or NULL.
|
||||||
|
// If File_Flag = TRUE - write dump files (.dmz and .dmp) with the name of the current process.
|
||||||
|
// If Show_Flag = TRUE - show message with Get_Exception_Info() dump.
|
||||||
|
{
|
||||||
|
// Try to get MiniDumpWriteDump() address.
|
||||||
|
hDbgHelp = LoadLibrary("DBGHELP.DLL");
|
||||||
|
MiniDumpWriteDump_ = (MINIDUMP_WRITE_DUMP)GetProcAddress(hDbgHelp, "MiniDumpWriteDump");
|
||||||
|
|
||||||
|
// If MiniDumpWriteDump() of DbgHelp.dll available.
|
||||||
|
if (MiniDumpWriteDump_)
|
||||||
|
{
|
||||||
|
HANDLE hDump_File;
|
||||||
|
CHAR Dump_Path[MAX_PATH];
|
||||||
|
|
||||||
|
GetModuleFileName(NULL, Dump_Path, sizeof(Dump_Path)); //path of current process
|
||||||
|
std::time_t t = std::time(NULL);
|
||||||
|
char tStr[16];
|
||||||
|
std::strftime(tStr, 32, " %a %H-%M-%S", std::localtime(&t));
|
||||||
|
std::string time(tStr);
|
||||||
|
std::string path(Dump_Path);
|
||||||
|
path = path.substr(0, path.length() - 4);
|
||||||
|
path += time + ".dmp";
|
||||||
|
|
||||||
|
MINIDUMP_EXCEPTION_INFORMATION M;
|
||||||
|
M.ThreadId = GetCurrentThreadId();
|
||||||
|
M.ExceptionPointers = pException;
|
||||||
|
M.ClientPointers = 0;
|
||||||
|
|
||||||
|
hDump_File = CreateFile(path.c_str(), GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
|
||||||
|
|
||||||
|
MiniDumpWriteDump_(GetCurrentProcess(), GetCurrentProcessId(), hDump_File,
|
||||||
|
MiniDumpNormal, (pException) ? &M : NULL, NULL, NULL);
|
||||||
|
|
||||||
|
CloseHandle(hDump_File);
|
||||||
|
|
||||||
|
std::cout << "Memory dumped to: \"" << path.c_str() << "\"";
|
||||||
|
MessageBox(NULL, ("Application crashed, memory dumped to: " + path).c_str(), "MiniDump", MB_ICONHAND | MB_OK);
|
||||||
|
} else {
|
||||||
|
MessageBox(NULL, "Application crashed, memory dump failed.", "MiniDump", MB_ICONHAND | MB_OK);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@@ -15,6 +15,7 @@ bool MultiplayerSnapshotFilter::FilterComponent(EntityWrapper entity, SharedComp
|
|||||||
|| component.Info.Name == "AssaultWeapon"
|
|| component.Info.Name == "AssaultWeapon"
|
||||||
|| component.Info.Name == "Animation"
|
|| component.Info.Name == "Animation"
|
||||||
|| component.Info.Name == "AnimationOffset"
|
|| component.Info.Name == "AnimationOffset"
|
||||||
|
|| entity.Name() == "PlayerName"
|
||||||
) {
|
) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -27,7 +27,7 @@ void HealthHUDSystem::Update(double dt)
|
|||||||
s = s + "/";
|
s = s + "/";
|
||||||
s = s + std::to_string((int)(double)entityIDParent["Health"]["MaxHealth"]);
|
s = s + std::to_string((int)(double)entityIDParent["Health"]["MaxHealth"]);
|
||||||
float healthPercentage = (double)entityIDParent["Health"]["Health"]/(double)entityIDParent["Health"]["MaxHealth"];
|
float healthPercentage = (double)entityIDParent["Health"]["Health"]/(double)entityIDParent["Health"]["MaxHealth"];
|
||||||
(glm::vec4&)entity["Text"]["Color"] = glm::vec4(1.0 - healthPercentage, 0.f, healthPercentage, glm::vec4(entity["Text"]["Color"]).a);
|
//(glm::vec4&)entity["Text"]["Color"] = glm::vec4(1.0 - healthPercentage, 0.f, healthPercentage, glm::vec4(entity["Text"]["Color"]).a);
|
||||||
entity["Text"]["Content"] = s;
|
entity["Text"]["Content"] = s;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ HealthSystem::HealthSystem(SystemParams params)
|
|||||||
EVENT_SUBSCRIBE_MEMBER(m_EPlayerDamage, &HealthSystem::OnPlayerDamaged);
|
EVENT_SUBSCRIBE_MEMBER(m_EPlayerDamage, &HealthSystem::OnPlayerDamaged);
|
||||||
EVENT_SUBSCRIBE_MEMBER(m_EPlayerHealthPickup, &HealthSystem::OnPlayerHealthPickup);
|
EVENT_SUBSCRIBE_MEMBER(m_EPlayerHealthPickup, &HealthSystem::OnPlayerHealthPickup);
|
||||||
EVENT_SUBSCRIBE_MEMBER(m_InputCommand, &HealthSystem::OnInputCommand);
|
EVENT_SUBSCRIBE_MEMBER(m_InputCommand, &HealthSystem::OnInputCommand);
|
||||||
|
m_NetworkEnabled = ResourceManager::Load<ConfigFile>("Config.ini")->Get("Networking.StartNetwork", false);
|
||||||
}
|
}
|
||||||
|
|
||||||
void HealthSystem::UpdateComponent(EntityWrapper& entity, ComponentWrapper& cHealth, double dt)
|
void HealthSystem::UpdateComponent(EntityWrapper& entity, ComponentWrapper& cHealth, double dt)
|
||||||
@@ -23,7 +24,7 @@ void HealthSystem::UpdateComponent(EntityWrapper& entity, ComponentWrapper& cHea
|
|||||||
|
|
||||||
bool HealthSystem::OnPlayerDamaged(Events::PlayerDamage& e)
|
bool HealthSystem::OnPlayerDamaged(Events::PlayerDamage& e)
|
||||||
{
|
{
|
||||||
if (!IsServer) {
|
if (!IsServer && m_NetworkEnabled) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,80 @@
|
|||||||
|
#include "Game/Systems/KillFeedSystem.h"
|
||||||
|
|
||||||
|
void KillFeedSystem::Update(double dt)
|
||||||
|
{
|
||||||
|
auto killFeeds = m_World->GetComponents("KillFeed");
|
||||||
|
if (killFeeds == nullptr) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (auto& killFeedComponent : *killFeeds) {
|
||||||
|
EntityWrapper entity = EntityWrapper(m_World, killFeedComponent.EntityID);
|
||||||
|
|
||||||
|
for (int i = 1; i <= 3; i++) {
|
||||||
|
EntityWrapper child = entity.FirstChildByName("KillFeed" + std::to_string(i));
|
||||||
|
if (child.HasComponent("Text")) {
|
||||||
|
(std::string&)child["Text"]["Content"] = "";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
int feedIndex = 1;
|
||||||
|
for (auto it = m_DeathQueue.begin(); it != m_DeathQueue.end(); ) {
|
||||||
|
bool remove = false;
|
||||||
|
|
||||||
|
EntityWrapper child = entity.FirstChildByName("KillFeed" + std::to_string(feedIndex));
|
||||||
|
|
||||||
|
if (child.HasComponent("Text")) {
|
||||||
|
(std::string&)child["Text"]["Content"] = (*it).Content;
|
||||||
|
(glm::vec4&)child["Text"]["Color"] = (*it).Color;
|
||||||
|
|
||||||
|
(*it).TimeToLive -= dt;
|
||||||
|
|
||||||
|
if ((*it).TimeToLive <= 0.f) {
|
||||||
|
(std::string&)child["Text"]["Content"] = "";
|
||||||
|
(glm::vec4&)child["Text"]["Color"] = (*it).Color;
|
||||||
|
remove = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
feedIndex++;
|
||||||
|
if(feedIndex > 3) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(remove) {
|
||||||
|
it = m_DeathQueue.erase(it);
|
||||||
|
} else {
|
||||||
|
it++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bool KillFeedSystem::OnPlayerDeath(Events::PlayerDeath& e)
|
||||||
|
{
|
||||||
|
KillFeedInfo kfInfo;
|
||||||
|
|
||||||
|
if (e.Player.HasComponent("Team")) {
|
||||||
|
int red = e.Player["Team"].Enum("Team", "Red");
|
||||||
|
int blue = e.Player["Team"].Enum("Team", "Blue");
|
||||||
|
|
||||||
|
if ((int)e.Player["Team"]["Team"] == red) {
|
||||||
|
kfInfo.Content = "Blue Player killed Red Player";
|
||||||
|
kfInfo.Color = glm::vec4(0.f, 0.2f, 1.f, 0.8f);
|
||||||
|
m_DeathQueue.push_back(kfInfo);
|
||||||
|
} else if ((int)e.Player["Team"]["Team"] == blue) {
|
||||||
|
kfInfo.Content = "Red Player killed blue Player";
|
||||||
|
kfInfo.Color = glm::vec4(1.f, 0.f, 0.f, 0.8f);
|
||||||
|
m_DeathQueue.push_back(kfInfo);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if(m_DeathQueue.size() > 3) {
|
||||||
|
m_DeathQueue.pop_front();
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
@@ -16,7 +16,9 @@ PlayerMovementSystem::~PlayerMovementSystem()
|
|||||||
void PlayerMovementSystem::Update(double dt)
|
void PlayerMovementSystem::Update(double dt)
|
||||||
{
|
{
|
||||||
updateMovementControllers(dt);
|
updateMovementControllers(dt);
|
||||||
updateVelocity(dt);
|
if (LocalPlayer.Valid()) {
|
||||||
|
updateVelocity(LocalPlayer, dt);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void PlayerMovementSystem::updateMovementControllers(double dt)
|
void PlayerMovementSystem::updateMovementControllers(double dt)
|
||||||
@@ -79,18 +81,18 @@ void PlayerMovementSystem::updateMovementControllers(double dt)
|
|||||||
}
|
}
|
||||||
glm::vec3& velocity = cPhysics["Velocity"];
|
glm::vec3& velocity = cPhysics["Velocity"];
|
||||||
bool isOnGround = (bool)cPhysics["IsOnGround"];
|
bool isOnGround = (bool)cPhysics["IsOnGround"];
|
||||||
ImGui::Text(isOnGround ? "On ground" : "In air");
|
//ImGui::Text(isOnGround ? "On ground" : "In air");
|
||||||
ImGui::Text("velocity: (%f, %f, %f) |%f|", velocity.x, velocity.y, velocity.z, glm::length(velocity));
|
//ImGui::Text("velocity: (%f, %f, %f) |%f|", velocity.x, velocity.y, velocity.z, glm::length(velocity));
|
||||||
glm::vec3 groundVelocity(0.f, 0.f, 0.f);
|
glm::vec3 groundVelocity(0.f, 0.f, 0.f);
|
||||||
groundVelocity.x = velocity.x;
|
groundVelocity.x = velocity.x;
|
||||||
groundVelocity.z = velocity.z;
|
groundVelocity.z = velocity.z;
|
||||||
ImGui::Text("groundVelocity: (%f, %f, %f) |%f|", groundVelocity.x, groundVelocity.y, groundVelocity.z, glm::length(groundVelocity));
|
//ImGui::Text("groundVelocity: (%f, %f, %f) |%f|", groundVelocity.x, groundVelocity.y, groundVelocity.z, glm::length(groundVelocity));
|
||||||
ImGui::Text("wishDirection: (%f, %f, %f) |%f|", wishDirection.x, wishDirection.y, wishDirection.z, glm::length(wishDirection));
|
//ImGui::Text("wishDirection: (%f, %f, %f) |%f|", wishDirection.x, wishDirection.y, wishDirection.z, glm::length(wishDirection));
|
||||||
float currentSpeedProj = glm::dot(groundVelocity, wishDirection);
|
float currentSpeedProj = glm::dot(groundVelocity, wishDirection);
|
||||||
float addSpeed = wishSpeed - currentSpeedProj;
|
float addSpeed = wishSpeed - currentSpeedProj;
|
||||||
ImGui::Text("currentSpeedProj: %f", currentSpeedProj);
|
//ImGui::Text("currentSpeedProj: %f", currentSpeedProj);
|
||||||
ImGui::Text("wishSpeed: %f", wishSpeed);
|
//ImGui::Text("wishSpeed: %f", wishSpeed);
|
||||||
ImGui::Text("addSpeed: %f", addSpeed);
|
//ImGui::Text("addSpeed: %f", addSpeed);
|
||||||
|
|
||||||
if (addSpeed > 0) {
|
if (addSpeed > 0) {
|
||||||
static float accel = 15.f;
|
static float accel = 15.f;
|
||||||
@@ -221,15 +223,11 @@ void PlayerMovementSystem::updateMovementControllers(double dt)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void PlayerMovementSystem::updateVelocity(double dt)
|
void PlayerMovementSystem::updateVelocity(EntityWrapper player, double dt)
|
||||||
{
|
{
|
||||||
// Only apply velocity to local player
|
// Only apply velocity to local player
|
||||||
if (!LocalPlayer.Valid()) {
|
ComponentWrapper& cTransform = player["Transform"];
|
||||||
return;
|
ComponentWrapper& cPhysics = player["Physics"];
|
||||||
}
|
|
||||||
|
|
||||||
ComponentWrapper& cTransform = LocalPlayer["Transform"];
|
|
||||||
ComponentWrapper& cPhysics = LocalPlayer["Physics"];
|
|
||||||
glm::vec3& velocity = cPhysics["Velocity"];
|
glm::vec3& velocity = cPhysics["Velocity"];
|
||||||
bool isOnGround = (bool)cPhysics["IsOnGround"];
|
bool isOnGround = (bool)cPhysics["IsOnGround"];
|
||||||
|
|
||||||
|
|||||||
@@ -128,6 +128,12 @@ bool PlayerSpawnSystem::OnPlayerSpawned(Events::PlayerSpawned& e)
|
|||||||
// When a player is actually spawned (since the actual spawning is handled on the server)
|
// When a player is actually spawned (since the actual spawning is handled on the server)
|
||||||
// Hack should be moved.
|
// Hack should be moved.
|
||||||
|
|
||||||
|
// TODO: Set the player name to whatever
|
||||||
|
EntityWrapper playerName = e.Player.FirstChildByName("PlayerName");
|
||||||
|
if (playerName.Valid()) {
|
||||||
|
playerName["Text"]["Content"] = e.PlayerName;
|
||||||
|
}
|
||||||
|
|
||||||
if (!IsClient) {
|
if (!IsClient) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@@ -153,12 +159,6 @@ bool PlayerSpawnSystem::OnPlayerSpawned(Events::PlayerSpawned& e)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: Set the player name to whatever
|
|
||||||
EntityWrapper playerName = e.Player.FirstChildByName("PlayerName");
|
|
||||||
if (playerName.Valid()) {
|
|
||||||
playerName["Text"]["Content"] = e.PlayerName;
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -38,12 +38,18 @@ void AssaultWeaponBehaviour::Reload()
|
|||||||
|
|
||||||
// Don't reload if we're completly out of ammo
|
// Don't reload if we're completly out of ammo
|
||||||
if (ammo == 0) {
|
if (ammo == 0) {
|
||||||
|
playEmptySound();
|
||||||
|
m_TimeSinceLastFire = -0.0f; // HACK: To make empty sound play with interval
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
m_Reloading = true;
|
m_Reloading = true;
|
||||||
m_ReloadTimer = cAssaultWeapon["ReloadTime"];
|
m_ReloadTimer = cAssaultWeapon["ReloadTime"];
|
||||||
playReloadAnimation();
|
playReloadAnimation();
|
||||||
|
Events::PlaySoundOnEntity e;
|
||||||
|
e.EmitterID = cAssaultWeapon.EntityID;
|
||||||
|
e.FilePath = "Audio/weapon/reload.wav";
|
||||||
|
m_EventBroker->Publish(e);
|
||||||
}
|
}
|
||||||
|
|
||||||
void AssaultWeaponBehaviour::Update(double dt)
|
void AssaultWeaponBehaviour::Update(double dt)
|
||||||
@@ -127,7 +133,7 @@ void AssaultWeaponBehaviour::fireRound()
|
|||||||
if (magAmmo <= 0) {
|
if (magAmmo <= 0) {
|
||||||
Reload();
|
Reload();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Fire
|
// Fire
|
||||||
magAmmo -= 1;
|
magAmmo -= 1;
|
||||||
@@ -136,7 +142,7 @@ void AssaultWeaponBehaviour::fireRound()
|
|||||||
// Effects
|
// Effects
|
||||||
if (IsClient) {
|
if (IsClient) {
|
||||||
spawnTracer();
|
spawnTracer();
|
||||||
playSound();
|
playFireSound();
|
||||||
viewPunch();
|
viewPunch();
|
||||||
playShootAnimation();
|
playShootAnimation();
|
||||||
bool hit = shoot(cAssaultWeapon["BaseDamage"]);
|
bool hit = shoot(cAssaultWeapon["BaseDamage"]);
|
||||||
@@ -182,7 +188,7 @@ float AssaultWeaponBehaviour::traceRayDistance(glm::vec3 origin, glm::vec3 direc
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void AssaultWeaponBehaviour::playSound()
|
void AssaultWeaponBehaviour::playFireSound()
|
||||||
{
|
{
|
||||||
if (!IsClient) {
|
if (!IsClient) {
|
||||||
return;
|
return;
|
||||||
@@ -194,6 +200,19 @@ void AssaultWeaponBehaviour::playSound()
|
|||||||
m_EventBroker->Publish(e);
|
m_EventBroker->Publish(e);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void AssaultWeaponBehaviour::playEmptySound()
|
||||||
|
{
|
||||||
|
if (!IsClient) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
Events::PlaySoundOnEntity e;
|
||||||
|
e.EmitterID = m_Player.ID;
|
||||||
|
e.FilePath = "Audio/weapon/zeroAmmo.wav";
|
||||||
|
m_EventBroker->Publish(e);
|
||||||
|
}
|
||||||
|
|
||||||
void AssaultWeaponBehaviour::viewPunch()
|
void AssaultWeaponBehaviour::viewPunch()
|
||||||
{
|
{
|
||||||
EntityWrapper playerCamera = m_Player.FirstChildByName("Camera");
|
EntityWrapper playerCamera = m_Player.FirstChildByName("Camera");
|
||||||
@@ -386,5 +405,9 @@ void AssaultWeaponBehaviour::showHitMarker()
|
|||||||
EntityWrapper hitMarkerSpawner = m_Player.FirstChildByName("HitMarkerSpawner");
|
EntityWrapper hitMarkerSpawner = m_Player.FirstChildByName("HitMarkerSpawner");
|
||||||
if (hitMarkerSpawner.Valid()) {
|
if (hitMarkerSpawner.Valid()) {
|
||||||
SpawnerSystem::Spawn(hitMarkerSpawner, hitMarkerSpawner);
|
SpawnerSystem::Spawn(hitMarkerSpawner, hitMarkerSpawner);
|
||||||
|
Events::PlaySoundOnEntity e;
|
||||||
|
e.EmitterID = m_Player.ID;
|
||||||
|
e.FilePath = "Audio/weapon/hitclick.wav";
|
||||||
|
m_EventBroker->Publish(e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+18
-4
@@ -1,11 +1,25 @@
|
|||||||
#include "Game.h"
|
#include "Game.h"
|
||||||
|
#include "MiniDump.h"
|
||||||
|
|
||||||
|
LONG WINAPI CrashHandler(EXCEPTION_POINTERS* pException);
|
||||||
|
|
||||||
int main(int argc, char* argv[])
|
int main(int argc, char* argv[])
|
||||||
{
|
{
|
||||||
Game game(argc, argv);
|
::SetUnhandledExceptionFilter(CrashHandler);
|
||||||
while (game.Running()) {
|
|
||||||
game.Tick();
|
Game game(argc, argv);
|
||||||
}
|
while (game.Running()) {
|
||||||
|
game.Tick();
|
||||||
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
LONG WINAPI CrashHandler(EXCEPTION_POINTERS* pException)
|
||||||
|
{
|
||||||
|
//Take minidump. path should be bin/TacticalZ.dmp
|
||||||
|
//Then show MessageBox, and exit application.
|
||||||
|
Create_Dump(pException, 1, 1);
|
||||||
|
|
||||||
|
return EXCEPTION_EXECUTE_HANDLER;// EXCEPTION_CONTINUE_SEARCH
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user