Compare commits

...

83 Commits

Author SHA1 Message Date
Jocke 34a71b0767 Fixed linking issue. 2016-02-22 17:24:35 +01:00
Jocke b2d8cddfb7 WE now send the map on connect after that only player information. 2016-02-22 16:46:31 +01:00
Jocke ed9149fe63 Network buffer should now dynamically increase when needed. 2016-02-22 16:04:27 +01:00
William Moberg bac23f6e8c Merge pull request #124 from teamfisk/FixNetworkBugs
Test text here. Good work Jocke.
2016-02-19 16:47:34 +01:00
Jocke 68f2d5327d added extra check in HealthSystem 2016-02-19 16:37:26 +01:00
Jocke 2263fd2ad6 Fixed crash in Client::parsePlayerDamage. 2016-02-19 16:18:16 +01:00
William Moberg 8cc928b5f4 Merge pull request #122 from teamfisk/WorldSnapshots
World snapshots
2016-02-19 15:12:31 +01:00
Jace 881ce7b02f Proper string handling without nasty memory leaks. PHEW. 2016-02-19 15:11:10 +01:00
Jace c130fdda5e Merge pull request #123 from teamfisk/BoxModelCollision
Falling through ground + dash fix.
2016-02-19 14:53:37 +01:00
William Moberg 4c87ca10b9 Merge branch 'master' into BoxModelCollision 2016-02-19 14:17:17 +01:00
William Moberg 22664848dc You should not be able to fall through ground or dash thru walls. Very thin objects may still be possible to go through, e.g. the grid border walls in GameMap.xml. 2016-02-19 14:16:22 +01:00
Tleety d135ea2da6 Small fix 2016-02-19 13:53:43 +01:00
Jace 844825813b Merge pull request #121 from teamfisk/ResolutionChange
Resolution change
2016-02-19 13:31:06 +01:00
Tleety 722b795d37 Fixed spelling 2016-02-19 13:30:41 +01:00
Tleety cf2bf4e14d Merge remote-tracking branch 'origin/master' into ResolutionChange 2016-02-19 13:17:31 +01:00
Jace 2ac584bafb Merge pull request #113 from teamfisk/Menu-Tobias
Menu tobias
2016-02-19 13:16:50 +01:00
Tleety 6e5335a266 Release now return name and entity of the entity that was previously klicked. 2016-02-19 13:16:26 +01:00
Tleety fc5d054cb2 Entity is now sent with the click events.
Fixed small things
2016-02-19 12:49:07 +01:00
Tleety 8c9f4bb84b Resize should now be working correctly. 2016-02-19 11:42:52 +01:00
Tleety e15a7b9485 You can now change resolution without any apparent bugs. 2016-02-18 18:00:26 +01:00
William Moberg a141da3d8c Merge pull request #118 from teamfisk/AndersTest
Test fixes
2016-02-18 15:29:33 +01:00
Jace ca907b912e Copy constructor for deep copy of World. 2016-02-18 13:54:32 +01:00
Jace 97499f1c28 Made ComponentPool copyable by making sure string fields are handled properly 2016-02-18 11:37:03 +01:00
verysecrethero 64610e3c03 Fixed so some of the tests are working again. Also removed the test errors 2016-02-18 11:27:07 +01:00
Jace 5dd85d2748 Merge pull request #110 from teamfisk/PerformanceTiming
Performance timing
2016-02-18 10:33:24 +01:00
Jace 261c2e021e Merge pull request #115 from teamfisk/Respawning
Spawn blocking fix
2016-02-18 10:26:08 +01:00
William Moberg 581a7b470c Merge pull request #94 from teamfisk/AndersTest
Added 3 PickupSpawnSystem test
2016-02-18 10:21:37 +01:00
Tleety 3e7936ef00 You can now change resolution by pressing buttons. 2016-02-17 17:44:33 +01:00
verysecrethero 8845054965 Merge remote-tracking branch 'origin/master' into PerformanceTiming
# Conflicts:
#	resources/Schema/Entities/NewMap.xml
2016-02-17 16:59:26 +01:00
Tleety 7dfd68467e Merge branch 'Menu-Tobias' into ResolutionChange 2016-02-17 16:54:06 +01:00
William Moberg 52355a63e2 Merge branch 'master' into Respawning 2016-02-17 16:08:00 +01:00
William Moberg 72db672dbf Ray will not hit objects in octree if they are transparent or invisible. 2016-02-17 16:06:35 +01:00
Tobias Dahl 0d665c10fe Merge pull request #114 from teamfisk/HealthPickup
The rotation of the Pickups are now also included in the AmmoPickup.x…
2016-02-17 14:56:45 +01:00
William Moberg 23bb1a6405 Cannot respawn inside other players, unless all are blocked. 2016-02-17 14:54:59 +01:00
verysecrethero b8222c7b2e The rotation of the Pickups are now also included in the AmmoPickup.xml, HealthPickup.xml 2016-02-17 14:54:42 +01:00
Tobias Dahl 43bbc063cf Merge pull request #111 from teamfisk/HealthPickup
Fixed RespawnModel of Pickups
2016-02-17 14:39:09 +01:00
verysecrethero 3e4b87da7c Merge remote-tracking branch 'origin/master' into HealthPickup
# Conflicts:
#	resources/Schema/Entities/NewMap.xml
2016-02-17 14:32:59 +01:00
verysecrethero ac9ce8ea83 Merge remote-tracking branch 'origin/master' into HealthPickup 2016-02-17 14:30:31 +01:00
Tobias Dahl 99643fd748 Merge pull request #112 from teamfisk/AssaultDash
You can now AssaultDash in the air
2016-02-17 14:24:58 +01:00
Tleety a6c30100af FrameWork for menu buttons 2016-02-17 14:16:17 +01:00
verysecrethero 833015f45e Small code cleanup for PerformanceTimer 2016-02-17 13:44:41 +01:00
Tleety 657125b469 Moved menu code into GUI
Button events are now sent when you click.
2016-02-17 13:44:11 +01:00
verysecrethero 8f28c760dd You can now AssaultDash in the air 2016-02-17 11:47:10 +01:00
verysecrethero b13362360a Fixed RespawnModel of Pickups 2016-02-17 11:22:42 +01:00
Jace 0af9edc6e5 Editor is properly disabled when disabled in config 2016-02-17 10:53:20 +01:00
verysecrethero ec10ef3ffc Merge remote-tracking branch 'origin/master' into HealthPickup 2016-02-17 10:32:35 +01:00
verysecrethero b2a437731e Small cleanup in the code 2016-02-16 17:58:27 +01:00
verysecrethero 42b49f9dba Added more timers to Rendering. 2016-02-16 17:51:39 +01:00
verysecrethero 4b8f1d95a3 Added static class PerformanceTimer. Changed CMakeLists for engine to include boost timer. Added F2,F3 functions in editor. Added some timing, more to be added 2016-02-16 16:57:46 +01:00
Tleety 8f84a5ddd6 Buttons are now clickable 2016-02-16 16:28:19 +01:00
Tleety 6bc7131290 Glow Intencity can now be changed in the model component. 2016-02-16 14:57:21 +01:00
Tleety 4214bf10a1 Components for menu/buttons 2016-02-16 14:05:57 +01:00
Jace 969e7cb0d5 Merge remote-tracking branch 'origin/FixNetworkToPlayTest' 2016-02-12 09:18:32 +01:00
Jace 47a365a8fc Inverted capture point numbers to fix HUD 2016-02-12 09:17:39 +01:00
Jace 71c03326aa Debug.EditorEnabled 2016-02-12 09:17:28 +01:00
Jace 0a31fa3dfd Merge branch 'master' of github.com:teamfisk/TacticalZ 2016-02-12 09:08:17 +01:00
Jace ca457d9c00 Player names 2016-02-12 09:07:59 +01:00
antc13 a08e54a147 Blocked up a path in the Spawns a bit more. 2016-02-12 08:44:40 +01:00
Jace 10846be820 Merge pull request #109 from teamfisk/Sound
Added weapon sounds.
2016-02-12 08:23:30 +01:00
stiffly 9df7b32ca1 Merge remote-tracking branch 'origin/master' into Sound 2016-02-12 08:20:01 +01:00
stiffly 3d4a7de59d MiniDump.cpp was not added to CMakeLists.txt. 2016-02-12 08:19:47 +01:00
stiffly 1cdcbf9b32 Merge remote-tracking branch 'origin/master' into Sound
# Conflicts:
#	src/Game/Systems/PlayerSpawnSystem.cpp
#	src/Game/Systems/Weapon/AssaultWeaponBehaviour.cpp
2016-02-12 08:19:29 +01:00
antc13 9e8d2b99df Merge branch 'master' of https://github.com/teamfisk/TacticalZ 2016-02-12 08:16:23 +01:00
antc13 ba4877c3f7 Moved Spawn locations and added ammo/health pickups around the map. 2016-02-12 08:16:12 +01:00
stiffly af39b892cd Now plays a "Empty sound", "reload sound" and "hit mark sound" on appropriate occasions. 2016-02-12 08:05:35 +01:00
Jace 1ed5107d9b Merge pull request #108 from teamfisk/MiniDump
Minidump on crash
2016-02-12 08:04:25 +01:00
antc13 2ce7179d19 Merge branch 'master' of https://github.com/teamfisk/TacticalZ 2016-02-12 07:49:58 +01:00
Jace eb7b22c757 Latest assets 2016-02-12 07:48:26 +01:00
Jace b48d491ad7 Complete blue and red player entities 2016-02-12 07:45:51 +01:00
Jace 47f4711b85 Merge remote-tracking branch 'origin/Menu' into WeaponSystem
# Conflicts:
#	resources/Schema/Entities/Player.xml
#	resources/Schema/Types/Entity.xsd
#	src/Game/Systems/PlayerSpawnSystem.cpp
2016-02-12 07:18:20 +01:00
viktorljung f146971db0 Fixed size 2016-02-12 05:45:17 +01:00
viktorljung 60b2c9bc9b KillFeed 2016-02-12 05:41:05 +01:00
William Moberg 422bedb844 MiniDump name now depends on time e.g. TacticalZ Fri 04-20-49. 2016-02-12 04:22:11 +01:00
stiffly 1da432ba23 WIP sounds 2016-02-12 04:03:35 +01:00
William Moberg 215b1b1aa4 On crash, takes minidump, then show MessageBox, and exit app. 2016-02-12 03:32:42 +01:00
antc13 f49cacf167 Merge branch 'master' of https://github.com/teamfisk/TacticalZ 2016-02-12 02:47:50 +01:00
antc13 a5168bd1c2 Merge branch 'master' of https://github.com/teamfisk/TacticalZ 2016-02-12 02:46:52 +01:00
antc13 784e1eb69b Changed Colors on some materials and changed bridges to red and blue bridges. 2016-02-12 02:46:44 +01:00
viktorljung 987dafb44a Fixed Health text color 2016-02-12 02:38:11 +01:00
verysecrethero 02cd822cf1 Tiny test refactoring 2016-02-10 17:04:05 +01:00
verysecrethero f7756ff60f Tiny refactoring of PickupSpawnTest. Updated and fixed HealthSystemTest. 2016-02-10 16:51:00 +01:00
verysecrethero 2d5f71e442 Added 3 PickupSpawnSystem tests. 2016-02-10 16:25:47 +01:00
verysecrethero 503613907e Merge remote-tracking branch 'origin/master' into HealthPickup 2016-02-08 11:39:05 +01:00
119 changed files with 4852 additions and 982 deletions
+1 -1
Submodule assets updated: 078e014f3d...1e7adc749e
+9 -1
View File
@@ -78,13 +78,21 @@ bool AABBvsTriangles(const AABB& box,
bool& isOnGround, bool& isOnGround,
glm::vec3& outResolutionVector); glm::vec3& outResolutionVector);
//Detects collision, but does not resolve.
bool AABBvsTriangles(const AABB& box,
const RawModel::Vertex* modelVertices,
const std::vector<unsigned int>& modelIndices,
const glm::mat4& modelMatrix);
//Return true if the boxes are intersecting. //Return true if the boxes are intersecting.
bool AABBVsAABB(const AABB& a, const AABB& b); bool AABBVsAABB(const AABB& a, const AABB& b);
//Return true if the boxes are intersecting. //Return true if the boxes are intersecting.
//Also outputs the minimum translation that box [a] would need in order to resolve collision. //Also outputs the minimum translation that box [a] would need in order to resolve collision.
bool AABBVsAABB(const AABB& a, const AABB& b, glm::vec3& minimumTranslation); bool AABBVsAABB(const AABB& a, const AABB& b, glm::vec3& minimumTranslation);
// Calculates an absolute AABB from an entity AABB component // Calculates an absolute AABB from an entity AABB component or Model component.
// if takeModelBox is true, the AABB component will be ignored and box is calculated from Model.
// if takeModelBox is false, the AABB component will be prefered, if it exists.
boost::optional<EntityAABB> EntityAbsoluteAABB(EntityWrapper& entity, bool takeModelBox = false); boost::optional<EntityAABB> EntityAbsoluteAABB(EntityWrapper& entity, bool takeModelBox = false);
boost::optional<EntityAABB> AbsoluteAABBExplosionEffect(EntityWrapper& entity); boost::optional<EntityAABB> AbsoluteAABBExplosionEffect(EntityWrapper& entity);
//Returns the first entity hit by the input ray. entitiesPotentiallyHitSorted needs to be sorted //Returns the first entity hit by the input ray. entitiesPotentiallyHitSorted needs to be sorted
+2 -2
View File
@@ -15,11 +15,11 @@ class CollisionSystem : public PureSystem
public: public:
CollisionSystem(SystemParams params, Octree<EntityAABB>* octree) CollisionSystem(SystemParams params, Octree<EntityAABB>* octree)
: System(params) : System(params)
, PureSystem("Collidable") , PureSystem("Physics")
, m_Octree(octree) , m_Octree(octree)
{ } { }
virtual void UpdateComponent(EntityWrapper& entity, ComponentWrapper& component, double dt) override; virtual void UpdateComponent(EntityWrapper& entity, ComponentWrapper& cPhysics, double dt) override;
private: private:
Octree<EntityAABB>* m_Octree; Octree<EntityAABB>* m_Octree;
+3 -1
View File
@@ -2,6 +2,7 @@
#define ComponentInfo_h__ #define ComponentInfo_h__
#include "../Common.h" #include "../Common.h"
#include <boost/shared_array.hpp>
struct ComponentInfo struct ComponentInfo
{ {
@@ -27,8 +28,9 @@ struct ComponentInfo
std::string Name; std::string Name;
std::unordered_map<std::string, Field_t> Fields; std::unordered_map<std::string, Field_t> Fields;
std::vector<std::string> FieldsInOrder; std::vector<std::string> FieldsInOrder;
std::vector<std::string> StringFields;
unsigned int Stride = 0; unsigned int Stride = 0;
std::shared_ptr<char> Defaults = nullptr; boost::shared_array<char> Defaults = nullptr;
std::shared_ptr<Meta_t> Meta = nullptr; std::shared_ptr<Meta_t> Meta = nullptr;
}; };
+3 -1
View File
@@ -1,6 +1,7 @@
#ifndef ComponentPool_h__ #ifndef ComponentPool_h__
#define ComponentPool_h__ #define ComponentPool_h__
#include <set>
#include "MemoryPool.h" #include "MemoryPool.h"
#include "ComponentInfo.h" #include "ComponentInfo.h"
#include "ComponentWrapper.h" #include "ComponentWrapper.h"
@@ -45,7 +46,8 @@ public:
: m_ComponentInfo(ci) : m_ComponentInfo(ci)
, m_Pool(ci.Meta->Allocation, sizeof(EntityID) + ci.Stride) , m_Pool(ci.Meta->Allocation, sizeof(EntityID) + ci.Stride)
{ } { }
ComponentPool(const ComponentPool& other) = delete; ~ComponentPool();
ComponentPool(const ComponentPool& other);
ComponentPool(const ComponentPool&& other) = delete; ComponentPool(const ComponentPool&& other) = delete;
const ::ComponentInfo& ComponentInfo() const { return m_ComponentInfo; } const ::ComponentInfo& ComponentInfo() const { return m_ComponentInfo; }
+64 -10
View File
@@ -2,11 +2,29 @@
#define ComponentWrapper_h__ #define ComponentWrapper_h__
#include <boost/shared_array.hpp> #include <boost/shared_array.hpp>
#include <boost/any.hpp>
#include "../Common.h" #include "../Common.h"
#include "Entity.h" #include "Entity.h"
#include "ComponentInfo.h" #include "ComponentInfo.h"
#include "Util/Any.h" #include "Util/Any.h"
template <typename T, typename Enable = void>
struct ComponentField { };
template <typename T>
struct ComponentField<T, typename std::enable_if<std::is_trivially_copyable<T>::value>::type>
{
static T& Get(const ComponentInfo::Field_t& info, char* data) { return *reinterpret_cast<T*>(data); }
static void Set(const ComponentInfo::Field_t& info, char* data, const T& value) { Get(data) = value; }
};
template <>
struct ComponentField<std::string, void>
{
static std::string& Get(const ComponentInfo::Field_t& info, char* data) { return **reinterpret_cast<std::string**>(data); }
static void Set(const ComponentInfo::Field_t& info, char* data, const std::string& value) { Get(info, data) = value; }
};
struct ComponentWrapper struct ComponentWrapper
{ {
ComponentWrapper(const ComponentInfo& componentInfo, char* data) ComponentWrapper(const ComponentInfo& componentInfo, char* data)
@@ -47,7 +65,31 @@ struct ComponentWrapper
void Copy(ComponentWrapper& destination) void Copy(ComponentWrapper& destination)
{ {
memcpy(destination.Data, this->Data, Info.Stride); // Copy trivial data
memcpy(destination.Data, Data, Info.Stride);
// Duplicate strings
SolidifyStrings(destination);
}
// When component data has been copied, strings need to be reconstructed or they'll refer to the same data!
static void SolidifyStrings(ComponentWrapper& component)
{
for (auto& name : component.Info.StringFields) {
std::size_t offset = component.Info.Fields.at(name).Offset;
std::string value = *reinterpret_cast<const std::string*>(component.Data + offset);
new (component.Data + offset) std::string(value);
}
}
// This needs to be called to properly free component data, because strings.
static void Destroy(ComponentInfo info, char* data)
{
// Call std::string destructors
for (auto& name : info.StringFields) {
std::size_t offset = info.Fields.at(name).Offset;
auto field = reinterpret_cast<std::string*>(data + offset);
field->~basic_string();
}
} }
struct SubscriptProxy struct SubscriptProxy
@@ -102,26 +144,38 @@ public:
ComponentWrapperFactory(std::string componentTypeName, unsigned int allocation = 0) ComponentWrapperFactory(std::string componentTypeName, unsigned int allocation = 0)
{ {
m_ComponentInfo.Name = componentTypeName; m_ComponentInfo.Name = componentTypeName;
m_ComponentInfo.Meta = std::make_shared<ComponentInfo::Meta_t>();
m_ComponentInfo.Meta->Allocation = allocation; m_ComponentInfo.Meta->Allocation = allocation;
} }
template <typename T> template <typename T>
void AddProperty(std::string fieldName, T defaultValue) void AddProperty(std::string fieldName, T defaultValue)
{ {
m_DefaultValues.push_back(defaultValue); auto& field = m_ComponentInfo.Fields[fieldName];
m_ComponentInfo.Fields[fieldName].Type = typeid(T).name(); field.Name = fieldName;
m_ComponentInfo.Fields[fieldName].Offset = m_ComponentInfo.Stride; field.Type = typeid(T).name();
m_ComponentInfo.Fields[fieldName].Stride = sizeof(T); field.Offset = m_ComponentInfo.Stride;
field.Stride = sizeof(T);
m_ComponentInfo.FieldsInOrder.push_back(field.Name);
if (field.Type == typeid(std::string).name()) {
field.Type = "string";
m_ComponentInfo.StringFields.push_back(field.Name);
}
m_ComponentInfo.Stride += sizeof(T); m_ComponentInfo.Stride += sizeof(T);
m_DefaultValues.push_back(std::make_pair(field, defaultValue));
} }
ComponentInfo& Finalize() ComponentInfo& Finalize()
{ {
m_ComponentInfo.Defaults = std::shared_ptr<char>(new char[m_ComponentInfo.Stride]); m_ComponentInfo.Defaults = boost::shared_array<char>(new char[m_ComponentInfo.Stride]);
std::size_t offset = 0; std::size_t offset = 0;
for (auto& val : m_DefaultValues) { for (auto& pair : m_DefaultValues) {
memcpy(m_ComponentInfo.Defaults.get() + offset, val.Data.get(), val.Size); if (pair.first.Type == "string") {
offset += val.Size; new (m_ComponentInfo.Defaults.get() + offset) std::string(*reinterpret_cast<std::string*>(pair.second.Data.get()));
} else {
memcpy(m_ComponentInfo.Defaults.get() + offset, pair.second.Data.get(), pair.second.Size);
}
offset += pair.second.Size;
} }
return m_ComponentInfo; return m_ComponentInfo;
@@ -131,7 +185,7 @@ public:
private: private:
ComponentInfo m_ComponentInfo; ComponentInfo m_ComponentInfo;
std::vector<Any> m_DefaultValues; std::vector<std::pair<ComponentInfo::Field_t, Any>> m_DefaultValues;
}; };
#endif #endif
+21 -4
View File
@@ -66,9 +66,25 @@ public:
, m_LowestAllocatedSlot(m_NumSlots) , m_LowestAllocatedSlot(m_NumSlots)
{ } { }
//We may get problems with memory being released MemoryPool(const MemoryPool<T>& other)
//prematurely, etc. if we allow copies. : m_StartAddress(new char[other.m_NumSlots*other.m_Stride])
MemoryPool(const MemoryPool<T>& other) = delete; , m_SlotIsAllocated(other.m_SlotIsAllocated)
, m_ExtraMemory()
, m_NumSlots(other.m_NumSlots)
, m_LowestAllocatedSlot(other.m_LowestAllocatedSlot)
, m_NumAllocatedSlots(other.m_NumAllocatedSlots)
, m_Stride(other.m_Stride)
, m_CurrentAllocSlot(other.m_CurrentAllocSlot)
{
// Copy statically allocated pool
memcpy(m_StartAddress, other.m_StartAddress, m_NumSlots*m_Stride);
// Copy dynamically allocated memory
for (char* otherAddr : other.m_ExtraMemory) {
char* addr = (char*)malloc(m_Stride);
memcpy(addr, otherAddr, m_Stride);
m_ExtraMemory.push_back(addr);
}
}
MemoryPool(const MemoryPool<T>&& other) = delete; MemoryPool(const MemoryPool<T>&& other) = delete;
//Free all memory that has been allocated. //Free all memory that has been allocated.
@@ -78,8 +94,9 @@ public:
delete[] m_StartAddress; delete[] m_StartAddress;
m_StartAddress = nullptr; m_StartAddress = nullptr;
} }
for (char* addr : m_ExtraMemory) for (char* addr : m_ExtraMemory) {
free(addr); free(addr);
}
m_ExtraMemory.clear(); m_ExtraMemory.clear();
} }
+25
View File
@@ -0,0 +1,25 @@
#ifndef PerformanceTimer_h__
#define PerformanceTimer_h__
#include "../Common.h"
#include <boost/timer/timer.hpp>
using boost::timer::cpu_timer;
class PerformanceTimer
{
public:
static void StartTimer(std::string nameOfTimer);
static void StartTimerAndStopPrevious(std::string nameOfTimer);
static void StopTimer(std::string nameOfTimer);
static void SetFrameNumber(int frameNumber);
static void ResetAllTimers();
static void CreateExcelData();
private:
static std::map<std::string, cpu_timer> timers;
static cpu_timer m_Timer;
static std::string currentTimerRunning;
};
#endif
+7
View File
@@ -6,6 +6,7 @@
#include "System.h" #include "System.h"
#include "World.h" #include "World.h"
#include "EPause.h" #include "EPause.h"
#include "PerformanceTimer.h"
class SystemPipeline class SystemPipeline
{ {
@@ -72,7 +73,10 @@ public:
// Update // Update
for (auto& system : group.ImpureSystems) { for (auto& system : group.ImpureSystems) {
auto className = (std::string)typeid(*system).name();
PerformanceTimer::StartTimer(className);
system->Update(dt); system->Update(dt);
PerformanceTimer::StopTimer(className);
} }
for (auto& pair : group.PureSystems) { for (auto& pair : group.PureSystems) {
const std::string& componentName = pair.first; const std::string& componentName = pair.first;
@@ -83,7 +87,10 @@ public:
} }
for (auto& component : *pool) { for (auto& component : *pool) {
for (auto& system : systems) { for (auto& system : systems) {
auto className = (std::string)typeid(*system).name();
PerformanceTimer::StartTimer(className);
system->UpdateComponent(EntityWrapper(m_World, component.EntityID), component, dt); system->UpdateComponent(EntityWrapper(m_World, component.EntityID), component, dt);
PerformanceTimer::StopTimer(className);
} }
} }
} }
+4 -3
View File
@@ -2,6 +2,7 @@
#define Util_Any_h__ #define Util_Any_h__
#include <memory> #include <memory>
#include <boost/shared_array.hpp>
struct Any struct Any
{ {
@@ -10,7 +11,7 @@ struct Any
template <typename T> template <typename T>
Any(const T& value) Any(const T& value)
{ {
Data = std::shared_ptr<char>(new char[sizeof(T)]); Data = boost::shared_array<char>(new char[sizeof(T)]);
Size = sizeof(T); Size = sizeof(T);
memcpy(Data.get(), &value, Size); memcpy(Data.get(), &value, Size);
} }
@@ -18,7 +19,7 @@ struct Any
template <typename T> template <typename T>
Any(T&& value) Any(T&& value)
{ {
Data = std::shared_ptr<char>(new char[sizeof(T)]); Data = boost::shared_array<char>(new char[sizeof(T)]);
Size = sizeof(T); Size = sizeof(T);
memcpy(Data.get(), &value, Size); memcpy(Data.get(), &value, Size);
} }
@@ -35,7 +36,7 @@ struct Any
return Any(value); return Any(value);
} }
std::shared_ptr<char> Data = nullptr; boost::shared_array<char> Data = nullptr;
std::size_t Size = 0; std::size_t Size = 0;
}; };
+1
View File
@@ -15,6 +15,7 @@ public:
: m_EventBroker(eventBroker) : m_EventBroker(eventBroker)
{ } { }
~World(); ~World();
World(const World& other);
// Create empty entity // Create empty entity
EntityID CreateEntity(EntityID parent = 0); EntityID CreateEntity(EntityID parent = 0);
-165
View File
@@ -1,165 +0,0 @@
#ifndef GUI_BUTTON_H__
#define GUI_BUTTON_H__
#include "GUI/TextureFrame.h"
#include "GUI/EButtonEnter.h"
#include "GUI/EButtonLeave.h"
#include "GUI/EButtonPress.h"
#include "GUI/EButtonRelease.h"
#include "Core/EMouseMove.h"
#include "Core/EMousePress.h"
#include "Core/EMouseRelease.h"
namespace dd
{
namespace GUI
{
class Button : public TextureFrame
{
public:
Button(Frame* parent, std::string name)
: TextureFrame(parent, name)
{
EVENT_SUBSCRIBE_MEMBER(m_EMouseMove, &Button::OnMouseMove);
EVENT_SUBSCRIBE_MEMBER(m_EMousePress, &Button::OnMousePress);
EVENT_SUBSCRIBE_MEMBER(m_EMouseRelease, &Button::OnMouseRelease);
}
void SetTextureHover(std::string resourceName)
{
m_TextureHover = resourceName;
}
void SetTextureReleased(std::string resourceName)
{
m_TextureReleased = resourceName;
SetTexture(resourceName);
}
void SetTexturePressed(std::string resourceName)
{
m_TexturePressed = resourceName;
}
void Draw(RenderScene& rq) override
{
if (m_Texture == nullptr && !m_TextureReleased.empty()) {
SetTexture(m_TextureReleased);
}
TextureFrame::Draw(rq);
}
virtual void OnEnter() { }
virtual void OnLeave() { }
virtual void OnPress() { }
virtual void OnRelease() { }
protected:
bool m_MouseIsOver = false;
bool m_IsDown = false;
virtual bool OnMouseMove(const Events::MouseMove& event)
{
if (Hidden()) {
return false;
}
bool isOver = Rectangle::Intersects(AbsoluteRectangle(), Rectangle(event.X, event.Y, 1, 1));
if (isOver && !m_MouseIsOver) { // Enter
if (!m_IsDown) {
if (!m_TextureHover.empty()) {
SetTexture(m_TextureHover);
}
}
OnEnter();
Events::ButtonEnter e;
e.FrameName = m_Name;
EventBroker->Publish(e);
Events::PlaySound soundEvent;
soundEvent.FilePath = "Sounds/GUI/hover-n.wav";
EventBroker->Publish(soundEvent);
} else if (!isOver && m_MouseIsOver) { // Leave
if (!m_IsDown) {
if (!m_TextureReleased.empty()) {
SetTexture(m_TextureReleased);
}
}
OnLeave();
Events::ButtonLeave e;
e.FrameName = m_Name;
EventBroker->Publish(e);
}
m_MouseIsOver = isOver;
return true;
}
virtual bool OnMousePress(const Events::MousePress& event)
{
if (Hidden()) {
//LOG_DEBUG("Pressed hidden button");
return false;
}
if (!Rectangle::Intersects(AbsoluteRectangle(), Rectangle(event.X, event.Y, 1, 1))) {
return false;
}
if (!m_TexturePressed.empty()) {
SetTexture(m_TexturePressed);
}
m_IsDown = true;
OnPress();
Events::ButtonPress e;
e.FrameName = m_Name;
e.Button = this;
EventBroker->Publish(e);
return true;
}
virtual bool OnMouseRelease(const Events::MouseRelease& event)
{
if (Hidden()) {
//LOG_DEBUG("Released hidden button");
return false;
}
bool isOver = Rectangle::Intersects(AbsoluteRectangle(), Rectangle(event.X, event.Y, 1, 1));
if (!isOver && !m_IsDown) {
return false;
}
if (m_MouseIsOver) {
if (!m_TextureHover.empty()) {
SetTexture(m_TextureHover);
}
} else {
if (!m_TextureReleased.empty()) {
SetTexture(m_TextureReleased);
}
}
m_IsDown = false;
OnRelease();
Events::ButtonRelease e;
e.FrameName = m_Name;
e.Button = this;
EventBroker->Publish(e);
return true;
}
private:
EventRelay<Frame, Events::MouseMove> m_EMouseMove;
EventRelay<Frame, Events::MousePress> m_EMousePress;
EventRelay<Frame, Events::MouseRelease> m_EMouseRelease;
std::string m_TextureHover;
std::string m_TexturePressed;
std::string m_TextureReleased;
};
}
}
#endif
+44
View File
@@ -0,0 +1,44 @@
#ifndef ButtonSystem_h__
#define ButtonSystem_h__
#include "../Rendering/IRenderer.h"
#include "../Core/ConfigFile.h"
#include "../Rendering/PickingPass.h"
#include "../Core/ResourceManager.h"
#include "../Core/System.h"
#include "../Core/Event.h"
#include "../Core/EMousePress.h"
#include "../Core/EMouseRelease.h"
#include "../Core/ELockMouse.h"
#include "EButtonPressed.h"
#include "EButtonReleased.h"
#include "EButtonClicked.h"
class ButtonSystem : public PureSystem
{
public:
ButtonSystem(SystemParams params, IRenderer* renderer);
virtual void UpdateComponent(EntityWrapper& entity, ComponentWrapper& component, double dt) override;
private:
IRenderer* m_Renderer;
bool m_MouseIsLocked = false;
EntityWrapper m_PickEntity = EntityWrapper::Invalid;
PickData m_PickData;
EventRelay<ButtonSystem, Events::LockMouse> m_EMouseLock;
bool OnMouseLock(const Events::LockMouse& e);
EventRelay<ButtonSystem, Events::UnlockMouse> m_EMouseUnlock;
bool OnMouseUnlock(const Events::UnlockMouse& e);
EventRelay<ButtonSystem, Events::MousePress> m_EMousePress;
bool OnMousePress(const Events::MousePress& e);
EventRelay<ButtonSystem, Events::MouseRelease> m_EMouseRelease;
bool OnMouseRelease(const Events::MouseRelease& e);
};
#endif
+16
View File
@@ -0,0 +1,16 @@
#ifndef Events_ButtonClicked_h__
#define Events_ButtonClicked_h__
#include "Core/Event.h"
namespace Events
{
struct ButtonClicked : public Event {
std::string EntityName;
EntityWrapper Entity;
};
}
#endif
-17
View File
@@ -1,17 +0,0 @@
#ifndef Events_ButtonEnter_h__
#define Events_ButtonEnter_h__
#include "../Core/EventBroker.h"
namespace Events
{
/** Thrown on GUI button hover. */
struct ButtonEnter : Event
{
std::string FrameName;
};
}
#endif
-17
View File
@@ -1,17 +0,0 @@
#ifndef Events_ButtonLeave_h__
#define Events_ButtonLeave_h__
#include "../Core/EventBroker.h"
namespace Events
{
/** Thrown on GUI button hover. */
struct ButtonLeave : Event
{
std::string FrameName;
};
}
#endif
-20
View File
@@ -1,20 +0,0 @@
#ifndef Events_ButtonPress_h__
#define Events_ButtonPress_h__
#include "../Core/EventBroker.h"
namespace GUI { class Button; }
namespace Events
{
/** Thrown on GUI button press. */
struct ButtonPress : Event
{
std::string FrameName;
GUI::Button* Button;
};
}
#endif
+16
View File
@@ -0,0 +1,16 @@
#ifndef Events_ButtonPressed_h__
#define Events_ButtonPressed_h__
#include "Core/Event.h"
namespace Events
{
struct ButtonPressed : public Event {
std::string EntityName;
EntityWrapper Entity;
};
}
#endif
-20
View File
@@ -1,20 +0,0 @@
#ifndef Events_ButtonRelease_h__
#define Events_ButtonRelease_h__
#include "../Core/EventBroker.h"
namespace GUI { class Button; }
namespace Events
{
/** Thrown on GUI button release. */
struct ButtonRelease : Event
{
std::string FrameName;
GUI::Button* Button;
};
}
#endif
+16
View File
@@ -0,0 +1,16 @@
#ifndef Events_ButtonReleased_h__
#define Events_ButtonReleased_h__
#include "Core/Event.h"
namespace Events
{
struct ButtonReleased : public Event {
std::string EntityName;
EntityWrapper Entity;
};
}
#endif
-261
View File
@@ -1,261 +0,0 @@
#ifndef GUI_Frame_h__
#define GUI_Frame_h__
#include "../Common.h"
#include "../Core/Util/Rectangle.h"
#include "../Core/EventBroker.h"
#include "../Core/EKeyDown.h"
#include "../Core/EKeyUp.h"
#include "../Core/ResourceManager.h"
#include "../Rendering/RenderQueue.h"
#include "../Rendering/Texture.h"
#include "../Input/EInputCommand.h"
namespace GUI
{
class Frame : public Rectangle
{
public:
enum class Anchor
{
Left,
Right,
Top,
Bottom
};
static const int BaseWidth = 1280;
static const int BaseHeight = 720;
// Set up a base frame with an event broker
Frame(EventBroker* eventBroker)
: m_EventBroker(eventBroker)
, BaseFrame(this)
, m_Name("UIParent")
, Rectangle() { }
// Create a frame as a child
Frame(Frame* parent, std::string name)
: m_Name(name)
{
SetParent(parent);
Width = parent->Width;
Height = parent->Height;
EVENT_SUBSCRIBE_MEMBER(m_EKeyDown, &Frame::OnKeyDown);
EVENT_SUBSCRIBE_MEMBER(m_EKeyUp, &Frame::OnKeyUp);
EVENT_SUBSCRIBE_MEMBER(m_EInputCommand, &Frame::OnCommand);
}
~Frame()
{
/*for (auto layer : m_Children)
{
for (auto child : layer.second)
{
delete child.second;
}
}
if (m_Parent)
{
m_Parent->RemoveChild(this);
}*/
}
Frame* Parent() const { return m_Parent; }
void SetParent(Frame* parent)
{
if (parent == nullptr) {
LOG_ERROR("Failed to parent frame \"%s\": Invalid parent", m_Name.c_str());
return;
}
m_Layer = parent->Layer() + 1;
parent->AddChild(this);
m_Parent = parent;
m_EventBroker = parent->m_EventBroker;
BaseFrame = parent->BaseFrame;
}
void AddChild(Frame* child)
{
m_Children[child->m_Layer].insert(std::make_pair(child->Name(), child));
if (m_Parent) {
m_Parent->AddChild(child);
}
}
void RemoveChild(Frame* child)
{
auto it = m_Children.find(child->m_Layer);
if (it != m_Children.end()) {
m_Children.erase(it);
}
if (m_Parent) {
m_Parent->RemoveChild(child);
}
}
std::string Name() const { return m_Name; }
void SetName(std::string val) { m_Name = val; }
int Layer() const { return m_Layer; }
bool Hidden() const
{
if (m_Parent)
return m_Parent->Hidden() || m_Hidden;
else
return m_Hidden;
}
bool Visible() const
{
return !Hidden();
}
virtual void Hide() { m_Hidden = true; }
virtual void Show() { m_Hidden = false; }
int Left() const override
{
if (m_Parent)
return m_Parent->Left() + X;
else
return X;
}
void SetLeft(int absLeft) override
{
if (m_Parent) {
X = absLeft - m_Parent->Left();
} else {
X = absLeft;
}
}
int Right() const override
{
return Left() + Width;
}
void SetRight(int absRight) override
{
if (m_Parent) {
X = absRight - Width - m_Parent->Left();
} else {
X = absRight - Width;
}
}
int Top() const override
{
if (m_Parent)
return m_Parent->Top() + Y;
else
return Y;
}
void SetTop(int absTop) override
{
if (m_Parent) {
Y = absTop - m_Parent->Top();
} else {
Y = absTop;
}
}
int Bottom() const override
{
return Top() + Height;
}
void SetBottom(int absBottom) override
{
if (m_Parent) {
Y = absBottom - Height - m_Parent->Top();
} else {
Y = absBottom - Height;
}
}
glm::vec2 Scale()
{
if (m_Parent)
return m_Parent->Scale();
else
return glm::vec2(Width, Height) / glm::vec2(BaseWidth, BaseHeight);
}
Rectangle AbsoluteRectangle()
{
int left = Left();
if (m_Parent)
left = std::max(left, m_Parent->Left());
int top = Top();
if (m_Parent)
top = std::max(top, m_Parent->Top());
int width = Right() - left;
int height = Bottom() - top;
return Rectangle(left, top, width, height);
}
void UpdateLayered(double dt)
{
// Update ourselves
this->Update(dt);
// Update children
for (auto& pairLayer : m_Children) {
auto children = pairLayer.second;
for (auto& pairChild : children) {
auto child = pairChild.second;
child->Update(dt);
}
}
}
virtual void Update(double dt) { }
void DrawLayered(RenderScene& rq)
{
if (this->Hidden())
return;
// Draw ourselves
this->Draw(rq);
// Draw children
for (auto& pairLayer : m_Children) {
auto children = pairLayer.second;
for (auto& pairChild : children) {
auto child = pairChild.second;
if (child->Hidden())
continue;
child->Draw(rq);
}
}
}
virtual void Draw(RenderScene& rq) { }
protected:
::EventBroker* m_EventBroker;
Frame* BaseFrame = nullptr;
std::string m_Name = "Unnamed";
int m_Layer = 0;
bool m_Hidden = false;
Frame* m_Parent = nullptr;
typedef std::multimap<std::string, Frame*> Children_t; // name -> frame
std::map<int, Children_t> m_Children; // layer -> Children_t
virtual bool OnKeyDown(const Events::KeyDown& event) { return false; }
virtual bool OnKeyUp(const Events::KeyUp& event) { return false; }
virtual bool OnCommand(const Events::InputCommand& event) { return false; }
private:
EventRelay<Frame, Events::KeyDown> m_EKeyDown;
EventRelay<Frame, Events::KeyUp> m_EKeyUp;
EventRelay<Frame, Events::InputCommand> m_EInputCommand;
};
}
#endif
+33
View File
@@ -0,0 +1,33 @@
#ifndef MainMenuSystem_h__
#define MainMenuSystem_h__
#include "../Core/System.h"
#include "../Rendering/IRenderer.h"
#include "../Core/ResourceManager.h"
#include "../Core/Event.h"
#include "EButtonClicked.h"
#include "EButtonPressed.h"
#include "EButtonReleased.h"
class MainMenuSystem : public ImpureSystem
{
public:
MainMenuSystem(SystemParams params, IRenderer* renderer);
virtual void Update(double dt) override;
private:
IRenderer* m_Renderer;
EventRelay<MainMenuSystem, Events::ButtonClicked> m_EClicked;
bool OnButtonClick(const Events::ButtonClicked& e);
EventRelay<MainMenuSystem, Events::ButtonReleased> m_EReleased;
bool OnButtonRelease(const Events::ButtonReleased& e);
EventRelay<MainMenuSystem, Events::ButtonPressed> m_EPressed;
bool OnButtonPress(const Events::ButtonPressed& e);
};
#endif
-112
View File
@@ -1,112 +0,0 @@
#ifndef GUI_TextureFrame_h__
#define GUI_TextureFrame_h__
#include "Frame.h"
#include "../Rendering/Texture.h"
#include "../Rendering/Util/CommonFunctions.h"
namespace GUI
{
class TextureFrame : public Frame
{
public:
TextureFrame(Frame* parent, std::string name)
: Frame(parent, name) { }
void EnableScissor() { m_ScissorEnabled = true; }
void DisableScissor() { m_ScissorEnabled = false; }
void Draw(RenderScene& rq) override
{
if (m_Texture == nullptr)
return;
// Texture while fading
if (m_FadeTexture && m_CurrentFade < 1) {
FrameJob job;
job.Scissor = (m_ScissorEnabled) ? m_Parent->AbsoluteRectangle() : Rectangle();
job.Viewport = Rectangle(Left(), Top(), Width, Height);
job.TextureID = m_FadeTexture->ResourceID;
job.DiffuseTexture = m_FadeTexture;
job.Color = glm::vec4(m_Color.r, m_Color.g, m_Color.b, m_Color.a);
job.Name = Name();
rq.GUI.Add(job);
}
// Main texture
{
FrameJob job;
job.Scissor = (m_ScissorEnabled) ? m_Parent->AbsoluteRectangle() : Rectangle();
job.Viewport = Rectangle(Left(), Top(), Width, Height);
job.TextureID = m_Texture->ResourceID;
job.DiffuseTexture = m_Texture;
job.Color = glm::vec4(m_Color.r, m_Color.g, m_Color.b, m_Color.a * m_CurrentFade);
job.Name = Name();
rq.GUI.Add(job);
}
}
std::string Texture() const { return m_TextureName; }
void SetTexture(std::string resourceName)
{
if (resourceName.empty()) {
m_Texture = nullptr;
return;
}
m_Texture = CommonFunctions::LoadTexture(resourceName, false);
m_TextureName = resourceName;
if (m_Texture == nullptr) {
m_Texture = CommonFunctions::LoadTexture("Textures/Core/ErrorTexture.png", false);
}
SizeToTexture();
}
void SizeToTexture()
{
if (m_Texture != nullptr) {
this->Width = m_Texture->Width;
this->Height = m_Texture->Height;
}
}
void FadeToTexture(std::string resourceName, double duration)
{
m_FadeTexture = m_Texture;
SetTexture(resourceName);
m_FadeDuration = duration;
m_CurrentFade = 0.f;
}
void Update(double dt) override
{
if (m_CurrentFade < 1) {
m_CurrentFade += dt / m_FadeDuration;
if (m_CurrentFade > 1) {
m_FadeTexture = nullptr;
m_CurrentFade = 1;
m_FadeDuration = 0;
}
}
}
glm::vec4 Color() const { return m_Color; }
void SetColor(glm::vec4 val) { m_Color = val; }
protected:
bool m_ScissorEnabled = true;
Texture* m_Texture = nullptr;
std::string m_TextureName;
Texture* m_FadeTexture = nullptr;
glm::vec4 m_Color = glm::vec4(1.f, 1.f, 1.f, 1.f);
float m_FadeDuration = 0.f;
float m_CurrentFade = 1.f;
};
}
#endif
@@ -202,7 +202,7 @@ void FirstPersonInputController<EventContext>::AssaultDashCheck(double dt, bool
} }
//dashing with shift //dashing with shift
if (m_ShiftDashing && m_AssaultDashCoolDownTimer <= 0.0f && !isJumping) { if (m_ShiftDashing && m_AssaultDashCoolDownTimer <= 0.0f) {
//player is dashing with shift //player is dashing with shift
//the wanted-direction is set in playermovement already so we dont need to check what direction we want to dash in! //the wanted-direction is set in playermovement already so we dont need to check what direction we want to dash in!
m_AssaultDashCoolDownTimer = assaultDashCoolDownMaxTimer; m_AssaultDashCoolDownTimer = assaultDashCoolDownMaxTimer;
@@ -227,7 +227,7 @@ void FirstPersonInputController<EventContext>::AssaultDashCheck(double dt, bool
} }
m_ValidDoubleTap = false; m_ValidDoubleTap = false;
if (!(m_AssaultDashCoolDownTimer <= 0.0f && !isJumping)) { if (!(m_AssaultDashCoolDownTimer <= 0.0f)) {
//if we cant dash at the moment, then just reset the tap-sensitivity-timer //if we cant dash at the moment, then just reset the tap-sensitivity-timer
m_AssaultDashDoubleTapDeltaTime = 0.f; m_AssaultDashDoubleTapDeltaTime = 0.f;
return; return;
+4 -1
View File
@@ -9,13 +9,16 @@ typedef unsigned int PacketID;
class NetworkClient class NetworkClient
{ {
public: public:
NetworkClient();
virtual ~NetworkClient();
virtual void Connect(std::string playerName, std::string address, int port) = 0; virtual void Connect(std::string playerName, std::string address, int port) = 0;
virtual void Disconnect() = 0; virtual void Disconnect() = 0;
virtual void Receive(Packet& packet) = 0; virtual void Receive(Packet& packet) = 0;
virtual void Send(Packet & packet) = 0; virtual void Send(Packet & packet) = 0;
virtual bool IsSocketAvailable() = 0; virtual bool IsSocketAvailable() = 0;
protected: protected:
char m_ReadBuffer[BUFFERSIZE] = { 0 }; char* m_ReadBuffer;
unsigned int m_BufferSize = BUFFERSIZE;
}; };
#endif #endif
+4 -1
View File
@@ -10,12 +10,15 @@ typedef unsigned int PacketID;
class NetworkServer class NetworkServer
{ {
public: public:
NetworkServer();
virtual ~NetworkServer();
virtual void AcceptNewConnections(int& nextPlayerID, std::map<PlayerID, PlayerDefinition>& connectedPlayers) = 0; virtual void AcceptNewConnections(int& nextPlayerID, std::map<PlayerID, PlayerDefinition>& connectedPlayers) = 0;
virtual void Receive(Packet & packet, PlayerDefinition & playerDefinition) = 0; virtual void Receive(Packet & packet, PlayerDefinition & playerDefinition) = 0;
virtual void Send(Packet & packet, PlayerDefinition & playerDefinition) = 0; virtual void Send(Packet & packet, PlayerDefinition & playerDefinition) = 0;
virtual void Send(Packet & packet) = 0; virtual void Send(Packet & packet) = 0;
protected: protected:
char m_ReadBuffer[BUFFERSIZE] = { 0 }; char* m_ReadBuffer;
unsigned int m_BufferSize = BUFFERSIZE;
}; };
#endif #endif
+1
View File
@@ -64,6 +64,7 @@ private:
void reliableBroadcast(Packet& packet); void reliableBroadcast(Packet& packet);
void unreliableBroadcast(Packet& packet); void unreliableBroadcast(Packet& packet);
void sendSnapshot(); void sendSnapshot();
void addPlayersToPacket(Packet& packet, EntityID entityID);
void addChildrenToPacket(Packet& packet, EntityID entityID); void addChildrenToPacket(Packet& packet, EntityID entityID);
void addInputCommandsToPacket(Packet& packet); void addInputCommandsToPacket(Packet& packet);
void sendPing(); void sendPing();
+1 -1
View File
@@ -20,7 +20,7 @@ private:
boost::asio::ip::tcp::endpoint m_Endpoint; boost::asio::ip::tcp::endpoint m_Endpoint;
boost::asio::io_service m_IOService; boost::asio::io_service m_IOService;
std::unique_ptr<boost::asio::ip::tcp::socket> m_Socket; std::unique_ptr<boost::asio::ip::tcp::socket> m_Socket;
size_t readBuffer(char* data); size_t readBuffer();
PacketID m_SendPacketID = 0; PacketID m_SendPacketID = 0;
bool m_IsConnected = false; bool m_IsConnected = false;
}; };
+1 -1
View File
@@ -25,7 +25,7 @@ private:
void handle_accept(boost::shared_ptr<boost::asio::ip::tcp::socket> socket, void handle_accept(boost::shared_ptr<boost::asio::ip::tcp::socket> socket,
int& nextPlayerID, std::map<PlayerID, PlayerDefinition>& connectedPlayers, int& nextPlayerID, std::map<PlayerID, PlayerDefinition>& connectedPlayers,
const boost::system::error_code& error); const boost::system::error_code& error);
int readBuffer(char* data, PlayerDefinition& playerDefinition); int readBuffer(PlayerDefinition& playerDefinition);
}; };
#endif #endif
+1 -1
View File
@@ -20,7 +20,7 @@ private:
boost::asio::io_service m_IOService; boost::asio::io_service m_IOService;
boost::asio::ip::udp::endpoint m_ReceiverEndpoint; boost::asio::ip::udp::endpoint m_ReceiverEndpoint;
boost::shared_ptr<boost::asio::ip::udp::socket> m_Socket; boost::shared_ptr<boost::asio::ip::udp::socket> m_Socket;
int readBuffer(char* data); int readBuffer();
PacketID m_SendPacketID = 0; PacketID m_SendPacketID = 0;
}; };
+1 -1
View File
@@ -19,7 +19,7 @@ private:
boost::asio::io_service m_IOService; boost::asio::io_service m_IOService;
boost::asio::ip::udp::endpoint m_ReceiverEndpoint; boost::asio::ip::udp::endpoint m_ReceiverEndpoint;
std::unique_ptr<boost::asio::ip::udp::socket> m_Socket; std::unique_ptr<boost::asio::ip::udp::socket> m_Socket;
int readBuffer(char* data); int readBuffer();
}; };
#endif #endif
+2
View File
@@ -24,6 +24,8 @@ public:
void Draw(GLuint texture); void Draw(GLuint texture);
void OnWindowResize();
//Getters //Getters
//Return the blurred result of the texture that was sent into draw //Return the blurred result of the texture that was sent into draw
GLuint GaussianTexture() const { return m_GaussianTexture_vert; } GLuint GaussianTexture() const { return m_GaussianTexture_vert; }
+1 -1
View File
@@ -20,6 +20,7 @@ public:
void InitializeShaderPrograms(); void InitializeShaderPrograms();
void Draw(RenderScene& scene); void Draw(RenderScene& scene);
void ClearBuffer(); void ClearBuffer();
void OnWindowResize();
//Return the texture that is used in later stages to apply the bloom effect //Return the texture that is used in later stages to apply the bloom effect
GLuint BloomTexture() const { return m_BloomTexture; } GLuint BloomTexture() const { return m_BloomTexture; }
@@ -31,7 +32,6 @@ public:
FrameBuffer* FinalPassFrameBuffer() { return &m_FinalPassFrameBuffer; } FrameBuffer* FinalPassFrameBuffer() { return &m_FinalPassFrameBuffer; }
FrameBuffer* FinalPassFrameBufferLowRes() { return &m_FinalPassFrameBufferLowRes; } FrameBuffer* FinalPassFrameBufferLowRes() { return &m_FinalPassFrameBufferLowRes; }
private: private:
void GenerateTexture(GLuint* texture, GLenum wrapping, GLenum filtering, glm::vec2 dimensions, GLint internalFormat, GLint format, GLenum type) const; void GenerateTexture(GLuint* texture, GLenum wrapping, GLenum filtering, glm::vec2 dimensions, GLint internalFormat, GLint format, GLenum type) const;
void GenerateMipMapTexture(GLuint* texture, GLenum wrapping, glm::vec2 dimensions, GLint format, GLenum type, GLint numMipMaps) const; void GenerateMipMapTexture(GLuint* texture, GLenum wrapping, glm::vec2 dimensions, GLint format, GLenum type, GLint numMipMaps) const;
@@ -21,6 +21,7 @@ public:
void SetSSBOSizes(); void SetSSBOSizes();
void CullLights(RenderScene& scene); void CullLights(RenderScene& scene);
void FillLightList(RenderScene& scene); void FillLightList(RenderScene& scene);
void OnWindowResize();
GLuint FrustumSSBO() const { return m_FrustumSSBO; } GLuint FrustumSSBO() const { return m_FrustumSSBO; }
GLuint LightSSBO() const { return m_LightSSBO; } GLuint LightSSBO() const { return m_LightSSBO; }
+2 -1
View File
@@ -108,6 +108,7 @@ struct ModelJob : RenderJob
EndIndex = matGroup->EndIndex; EndIndex = matGroup->EndIndex;
Matrix = matrix; Matrix = matrix;
Color = modelComponent["Color"]; Color = modelComponent["Color"];
GlowIntensity = ((double)modelComponent["GlowIntensity"]);
Entity = modelComponent.EntityID; Entity = modelComponent.EntityID;
glm::vec3 abspos = Transform::AbsolutePosition(world, modelComponent.EntityID); glm::vec3 abspos = Transform::AbsolutePosition(world, modelComponent.EntityID);
glm::vec3 worldpos = glm::vec3(camera->ViewMatrix() * glm::vec4(abspos, 1)); glm::vec3 worldpos = glm::vec3(camera->ViewMatrix() * glm::vec4(abspos, 1));
@@ -170,7 +171,7 @@ struct ModelJob : RenderJob
::Skeleton::AnimationOffset AnimationOffset; ::Skeleton::AnimationOffset AnimationOffset;
float GlowIntensity = 8.0;
glm::vec4 DiffuseColor; glm::vec4 DiffuseColor;
glm::vec4 SpecularColor; glm::vec4 SpecularColor;
glm::vec4 IncandescenceColor; glm::vec4 IncandescenceColor;
+2
View File
@@ -22,6 +22,8 @@ public:
void Draw(RenderScene& scene); void Draw(RenderScene& scene);
void ClearPicking(); void ClearPicking();
void OnWindowResize();
//Getters //Getters
const ShaderProgram& PickingProgram() const { return *m_PickingProgram; } const ShaderProgram& PickingProgram() const { return *m_PickingProgram; }
//const std::unordered_map<glm::ivec2, EntityID>& PickingColorsToEntity() const { return m_PickingColorsToEntity; } //const std::unordered_map<glm::ivec2, EntityID>& PickingColorsToEntity() const { return m_PickingColorsToEntity; }
+8
View File
@@ -23,9 +23,12 @@
#include "imgui/imgui.h" #include "imgui/imgui.h"
#include "TextPass.h" #include "TextPass.h"
#include "Util/CommonFunctions.h" #include "Util/CommonFunctions.h"
#include "Core/PerformanceTimer.h"
class Renderer : public IRenderer class Renderer : public IRenderer
{ {
static void glfwFrameBufferCallback(GLFWwindow* window, int width, int height);
public: public:
Renderer(EventBroker* eventBroker) Renderer(EventBroker* eventBroker)
: m_EventBroker(eventBroker) : m_EventBroker(eventBroker)
@@ -37,8 +40,12 @@ public:
virtual PickData Pick(glm::vec2 screenCoord) override; virtual PickData Pick(glm::vec2 screenCoord) override;
private: private:
//----------------------Variables----------------------// //----------------------Variables----------------------//
static std::unordered_map <GLFWwindow*, Renderer*> m_WindowToRenderer;
EventBroker* m_EventBroker; EventBroker* m_EventBroker;
TextPass* m_TextPass; TextPass* m_TextPass;
@@ -50,6 +57,7 @@ private:
Model* m_UnitSphere; Model* m_UnitSphere;
int m_DebugTextureToDraw = 0; int m_DebugTextureToDraw = 0;
bool m_ResizeWindow = false;
PickingPass* m_PickingPass; PickingPass* m_PickingPass;
LightCullingPass* m_LightCullingPass; LightCullingPass* m_LightCullingPass;
+2
View File
@@ -40,6 +40,7 @@ struct SpriteJob : RenderJob
Depth = viewpos.z; Depth = viewpos.z;
} }
World = world; World = world;
Pickable = world->HasComponent(cSprite.EntityID, "Button");
FillColor = fillColor; FillColor = fillColor;
FillPercentage = fillPercentage; FillPercentage = fillPercentage;
@@ -60,6 +61,7 @@ struct SpriteJob : RenderJob
unsigned int StartIndex = 0; unsigned int StartIndex = 0;
unsigned int EndIndex = 0; unsigned int EndIndex = 0;
World* World; World* World;
bool Pickable;
glm::vec4 FillColor = glm::vec4(0); glm::vec4 FillColor = glm::vec4(0);
float FillPercentage = 0.0; float FillPercentage = 0.0;
+3 -2
View File
@@ -8,7 +8,6 @@
#include "Core/EventBroker.h" #include "Core/EventBroker.h"
#include "Rendering/Renderer.h" #include "Rendering/Renderer.h"
#include "Core/InputManager.h" #include "Core/InputManager.h"
#include "GUI/Frame.h"
#include "Core/World.h" #include "Core/World.h"
#include "Input/InputProxy.h" #include "Input/InputProxy.h"
#include "Input/KeyboardInputHandler.h" #include "Input/KeyboardInputHandler.h"
@@ -35,6 +34,9 @@
#include "Sound/SoundManager.h" #include "Sound/SoundManager.h"
#include "Systems/SoundSystem.h" #include "Systems/SoundSystem.h"
//Performance
#include "Core/PerformanceTimer.h"
class Game class Game
{ {
public: public:
@@ -53,7 +55,6 @@ private:
IRenderer* m_Renderer; IRenderer* m_Renderer;
InputManager* m_InputManager; InputManager* m_InputManager;
InputProxy* m_InputProxy; InputProxy* m_InputProxy;
GUI::Frame* m_FrameStack;
World* m_World; World* m_World;
Octree<EntityAABB>* m_OctreeCollision; Octree<EntityAABB>* m_OctreeCollision;
Octree<EntityAABB>* m_OctreeTrigger; Octree<EntityAABB>* m_OctreeTrigger;
+8
View File
@@ -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
+5 -3
View File
@@ -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,7 +25,9 @@ public:
virtual void UpdateComponent(EntityWrapper& entity, ComponentWrapper& component, double dt) override; virtual void UpdateComponent(EntityWrapper& entity, ComponentWrapper& component, double dt) override;
private: private:
//methods which will take care of specific events bool m_NetworkEnabled;
// 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);
EventRelay<HealthSystem, Events::PlayerHealthPickup> m_EPlayerHealthPickup; EventRelay<HealthSystem, Events::PlayerHealthPickup> m_EPlayerHealthPickup;
@@ -34,7 +37,6 @@ 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
+39
View File
@@ -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
+6 -1
View File
@@ -15,11 +15,16 @@ class SpawnerSystem : public System
public: public:
SpawnerSystem(SystemParams params); SpawnerSystem(SystemParams params);
static EntityWrapper Spawn(EntityWrapper spawner, EntityWrapper parent = EntityWrapper::Invalid); // If dontCollideComponent is set, to e.g. "Player", then all the spawner
// will try to pick a spawn location so that the spawned entity doesn't
// collide with anything that has that component and is collidable.
static EntityWrapper Spawn(EntityWrapper spawner, EntityWrapper parent = EntityWrapper::Invalid, const std::string& dontCollideComponent = "");
private: private:
EventRelay<SpawnerSystem, Events::SpawnerSpawn> m_OnSpawnerSpawn; EventRelay<SpawnerSystem, Events::SpawnerSpawn> m_OnSpawnerSpawn;
bool OnSpawnerSpawn(Events::SpawnerSpawn& e); bool OnSpawnerSpawn(Events::SpawnerSpawn& e);
static void transformEntityToSpawnPoint(EntityWrapper spawnedEntity, EntityWrapper spawnPoint);
static bool spawnedEntityIsColliding(EntityWrapper spawnedEntity, EntityWrapper spawnPoint, const std::string& dontCollideComponent);
}; };
#endif #endif
@@ -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();
+2
View File
@@ -26,3 +26,5 @@ N=SwitchToServer
M=SwitchToClient M=SwitchToClient
P=SwitchToPlayer P=SwitchToPlayer
K=TakeDamage,1500 K=TakeDamage,1500
F2=PerformanceTimingResetAllTimers
F3=PerformanceTimingCreateExcelData
+4
View File
@@ -41,4 +41,8 @@
<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/Menu.xsd"/>
<xs:include schemaLocation="Components/KillFeed.xsd"/>
<xs:include schemaLocation="Components/Page.xsd"/>
<xs:include schemaLocation="Components/Button.xsd"/>
</xs:schema> </xs:schema>
+3
View File
@@ -0,0 +1,3 @@
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<Button xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="Button.xsd">
</Button>
+10
View File
@@ -0,0 +1,10 @@
<?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="Button">
<xs:annotation>
<xs:documentation>Makes sprites klickable.</xs:documentation>
</xs:annotation>
</xs:element>
</xs:schema>
+3
View File
@@ -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>
+9
View File
@@ -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>
+3
View File
@@ -0,0 +1,3 @@
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<Menu xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="Menu.xsd">
</Menu>
+9
View File
@@ -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="Menu">
<xs:annotation>
<xs:documentation>Attach this to the center point of a menu that uses several pages.</xs:documentation>
</xs:annotation>
</xs:element>
</xs:schema>
+1
View File
@@ -8,4 +8,5 @@
<NormalMap>true</NormalMap> <NormalMap>true</NormalMap>
<SpecularMap>true</SpecularMap> <SpecularMap>true</SpecularMap>
<GlowMap>true</GlowMap> <GlowMap>true</GlowMap>
<GlowIntensity>3.0</GlowIntensity>
</Model> </Model>
+3
View File
@@ -33,6 +33,9 @@
<xs:element name="GlowMap" type="t:bool" minOccurs="0"> <xs:element name="GlowMap" type="t:bool" minOccurs="0">
<xs:annotation><xs:documentation>Whether the model should use the Glowmap or not</xs:documentation></xs:annotation> <xs:annotation><xs:documentation>Whether the model should use the Glowmap or not</xs:documentation></xs:annotation>
</xs:element> </xs:element>
<xs:element name="GlowIntensity" type="t:double" minOccurs="0">
<xs:annotation><xs:documentation>Intensity of the glow map</xs:documentation></xs:annotation>
</xs:element>
</xs:all> </xs:all>
</xs:complexType> </xs:complexType>
</xs:element> </xs:element>
+4
View File
@@ -0,0 +1,4 @@
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<Page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="Page.xsd">
<ID>0</ID>
</Page>
+14
View File
@@ -0,0 +1,14 @@
<?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="Page">
<xs:annotation>
<xs:documentation>Use this on a child to a Menu entity and make sure that ID is not the same as other pages.</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:all>
<xs:element name="ID" type="t:int" minOccurs="0"/>
</xs:all>
</xs:complexType>
</xs:element>
</xs:schema>
+1
View File
@@ -2,6 +2,7 @@
<Physics xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="Physics.xsd"> <Physics xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="Physics.xsd">
<Velocity X="0" Y="0" Z="0"/> <Velocity X="0" Y="0" Z="0"/>
<Gravity>true</Gravity> <Gravity>true</Gravity>
<PrevOrigin X="-9876.5" Y="-9876.5" Z="-9876.5"/>
<IsOnGround>false</IsOnGround> <IsOnGround>false</IsOnGround>
<VerticalStepHeight>0.33</VerticalStepHeight> <VerticalStepHeight>0.33</VerticalStepHeight>
</Physics> </Physics>
+1
View File
@@ -13,6 +13,7 @@
<xs:annotation><xs:documentation>m/s^2</xs:documentation></xs:annotation> <xs:annotation><xs:documentation>m/s^2</xs:documentation></xs:annotation>
</xs:element> </xs:element>
<xs:element name="Gravity" type="t:bool" minOccurs="0"/> <xs:element name="Gravity" type="t:bool" minOccurs="0"/>
<xs:element name="PrevOrigin" type="t:Vector" minOccurs="0"/>
<xs:element name="IsOnGround" type="t:bool" minOccurs="0"/> <xs:element name="IsOnGround" type="t:bool" minOccurs="0"/>
<xs:element name="VerticalStepHeight" type="t:double" minOccurs="0"> <xs:element name="VerticalStepHeight" type="t:double" minOccurs="0">
<xs:annotation><xs:documentation>The largest height of a "stair-step" that can be walked over</xs:documentation></xs:annotation> <xs:annotation><xs:documentation>The largest height of a "stair-step" that can be walked over</xs:documentation></xs:annotation>
+1 -1
View File
@@ -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>
+6 -1
View File
@@ -5,10 +5,15 @@
<c:AABB/> <c:AABB/>
<c:AmmoPickup/> <c:AmmoPickup/>
<c:Model> <c:Model>
<Resource>Models/Core/UnitSphere.mesh</Resource> <Resource>Models/Props/PickUps/AmmoPickUp.mesh</Resource>
</c:Model> </c:Model>
<c:RaptorCopter>
<Speed>0.1</Speed>
<Axis X="0" Y="1" Z="0"/>
</c:RaptorCopter>
<c:Transform> <c:Transform>
<Position X="0" Y="1" Z="0"/> <Position X="0" Y="1" Z="0"/>
<Scale X="0.3" Y="0.3" Z="0.3"/>
</c:Transform> </c:Transform>
<c:Trigger/> <c:Trigger/>
</Components> </Components>
+32
View File
@@ -0,0 +1,32 @@
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<Entity name="Button" xmlns:c="components" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../Types/Entity.xsd">
<Components>
<c:Button/>
<c:Sprite>
<DiffuseTexture>Textures/Core/White.png</DiffuseTexture>
</c:Sprite>
<c:Transform>
<Position X="0" Y="0.375197947" Z="0.0627754927"/>
<Scale X="0.600000024" Y="0.150000006" Z="1"/>
</c:Transform>
</Components>
<Children>
<Entity name="Text">
<Components>
<c:Text>
<Content>Play</Content>
<Resource>Fonts/DroidSans.ttf,64</Resource>
<Color A="1" B="1" G="0.847058833" R="0"/>
</c:Text>
<c:Transform>
<Position X="-0.00710564246" Y="-0.203304529" Z="0.00999999978"/>
<Scale X="0.300000012" Y="0.699999988" Z="4.30000019"/>
</c:Transform>
</Components>
<Children/>
</Entity>
</Children>
</Entity>
+255
View File
@@ -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
+5 -3
View File
@@ -144,7 +144,7 @@
</Team> </Team>
</c:Team> </c:Team>
<c:Transform> <c:Transform>
<Position X="57.7363472" Y="2.38900018" Z="79.5"/> <Position X="57.7363472" Y="4.98900032" Z="79.5"/>
</c:Transform> </c:Transform>
</Components> </Components>
<Children> <Children>
@@ -206,14 +206,16 @@
</Team> </Team>
</c:Team> </c:Team>
<c:Transform> <c:Transform>
<Position X="-60.2567062" Y="3.4000001" Z="-78.1000061"/> <Position X="-60.2567062" Y="9.40000057" Z="-78.1000061"/>
</c:Transform> </c:Transform>
</Components> </Components>
<Children> <Children>
<Entity> <Entity>
<Components> <Components>
<c:SpawnPoint/> <c:SpawnPoint/>
<c:Transform/> <c:Transform>
<Position X="0" Y="2.10000014" Z="0"/>
</c:Transform>
</Components> </Components>
<Children/> <Children/>
</Entity> </Entity>
+6 -1
View File
@@ -5,10 +5,15 @@
<c:AABB/> <c:AABB/>
<c:HealthPickup/> <c:HealthPickup/>
<c:Model> <c:Model>
<Resource>Models/Core/UnitSphere.mesh</Resource> <Resource>Models/Props/PickUps/HealthPickUp.mesh</Resource>
</c:Model> </c:Model>
<c:RaptorCopter>
<Speed>0.1</Speed>
<Axis X="0" Y="1" Z="0"/>
</c:RaptorCopter>
<c:Transform> <c:Transform>
<Position X="0" Y="1" Z="0"/> <Position X="0" Y="1" Z="0"/>
<Scale X="0.3" Y="0.3" Z="0.3"/>
</c:Transform> </c:Transform>
<c:Trigger/> <c:Trigger/>
</Components> </Components>
+298 -45
View File
@@ -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,22 +4158,8 @@
<Orientation X="0" Y="1.93500006" Z="0"/> <Orientation X="0" Y="1.93500006" Z="0"/>
</c:Transform> </c:Transform>
</Components> </Components>
<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/> <Children/>
</Entity> </Entity>
</Children>
</Entity>
<Entity> <Entity>
<Components> <Components>
<c:Collidable/> <c:Collidable/>
@@ -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="5.64500046" 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="5.78000021" 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="75.6124268" 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="72.2667694" 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="69.8748016" 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="70.1887283" 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="69.6374512" 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="67.7666702" 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="66.8154602" 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="64.0265808" Z="0"/>
</c:Transform>
<c:Trigger/>
</Components>
<Children/>
</Entity>
</Children>
</Entity>
</Children> </Children>
</Entity> </Entity>
+75 -23
View File
@@ -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>
+350 -45
View File
@@ -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>
+381 -44
View File
@@ -40,7 +40,7 @@
<Axis X="0" Y="1" Z="0"/> <Axis X="0" Y="1" Z="0"/>
</c:RaptorCopter> </c:RaptorCopter>
<c:Transform> <c:Transform>
<Orientation X="0" Y="7364.79053" Z="0"/> <Orientation X="0" Y="8433.37305" Z="0"/>
</c:Transform> </c:Transform>
</Components> </Components>
<Children> <Children>
@@ -77,18 +77,6 @@
</Entity> </Entity>
</Children> </Children>
</Entity> </Entity>
<Entity name="ListenerText">
<Components>
<c:Text>
<Content>Sound Test</Content>
<Resource>Fonts/DroidSans.ttf,64</Resource>
</c:Text>
<c:Transform>
<Orientation X="0" Y="3.31600022" Z="0"/>
</c:Transform>
</Components>
<Children/>
</Entity>
</Children> </Children>
</Entity> </Entity>
<Entity name="DirectionalLight"> <Entity name="DirectionalLight">
@@ -105,7 +93,7 @@
</c:RaptorCopter> </c:RaptorCopter>
<c:Transform> <c:Transform>
<Position X="2.1529963" Y="6.59221172" Z="0.169116676"/> <Position X="2.1529963" Y="6.59221172" Z="0.169116676"/>
<Orientation X="4.16300011" Y="17199.7988" Z="0"/> <Orientation X="4.16300011" Y="18271.9141" Z="0"/>
</c:Transform> </c:Transform>
</Components> </Components>
<Children/> <Children/>
@@ -180,7 +168,7 @@
<Axis X="0" Y="1" Z="0"/> <Axis X="0" Y="1" Z="0"/>
</c:RaptorCopter> </c:RaptorCopter>
<c:Transform> <c:Transform>
<Orientation X="0" Y="2019.28589" Z="0"/> <Orientation X="0" Y="2553.63574" Z="0"/>
</c:Transform> </c:Transform>
</Components> </Components>
<Children> <Children>
@@ -225,7 +213,7 @@
<Axis X="1" Y="1" Z="1"/> <Axis X="1" Y="1" Z="1"/>
</c:RaptorCopter> </c:RaptorCopter>
<c:Transform> <c:Transform>
<Orientation X="15792.2051" Y="15792.2051" Z="15792.2051"/> <Orientation X="16862.3945" Y="16862.3945" Z="16862.3945"/>
</c:Transform> </c:Transform>
</Components> </Components>
<Children> <Children>
@@ -289,7 +277,7 @@
<Axis X="0" Y="1" Z="0"/> <Axis X="0" Y="1" Z="0"/>
</c:RaptorCopter> </c:RaptorCopter>
<c:Transform> <c:Transform>
<Orientation X="0" Y="15589.2383" Z="0"/> <Orientation X="0" Y="16658.3906" Z="0"/>
</c:Transform> </c:Transform>
</Components> </Components>
<Children> <Children>
@@ -321,7 +309,7 @@
<Axis X="0.699999988" Y="1" Z="0.300000012"/> <Axis X="0.699999988" Y="1" Z="0.300000012"/>
</c:RaptorCopter> </c:RaptorCopter>
<c:Transform> <c:Transform>
<Orientation X="11456.2695" Y="16313.6973" Z="4881.66504"/> <Orientation X="12206.665" Y="17385.8008" Z="5202.3335"/>
</c:Transform> </c:Transform>
</Components> </Components>
<Children> <Children>
@@ -671,7 +659,7 @@
<Axis X="0" Y="1" Z="0"/> <Axis X="0" Y="1" Z="0"/>
</c:RaptorCopter> </c:RaptorCopter>
<c:Transform> <c:Transform>
<Orientation X="0" Y="316.505432" Z="0"/> <Orientation X="0" Y="851.386902" Z="0"/>
</c:Transform> </c:Transform>
</Components> </Components>
<Children> <Children>
@@ -718,7 +706,7 @@
<Axis X="0" Y="1" Z="0"/> <Axis X="0" Y="1" Z="0"/>
</c:RaptorCopter> </c:RaptorCopter>
<c:Transform> <c:Transform>
<Orientation X="0" Y="316.505432" Z="0"/> <Orientation X="0" Y="851.386902" Z="0"/>
</c:Transform> </c:Transform>
</Components> </Components>
<Children> <Children>
@@ -778,7 +766,7 @@
<Axis X="0" Y="1" Z="0"/> <Axis X="0" Y="1" Z="0"/>
</c:RaptorCopter> </c:RaptorCopter>
<c:Transform> <c:Transform>
<Orientation X="0" Y="316.505432" Z="0"/> <Orientation X="0" Y="851.386902" Z="0"/>
</c:Transform> </c:Transform>
</Components> </Components>
<Children> <Children>
@@ -825,7 +813,7 @@
<Axis X="0" Y="1" Z="0"/> <Axis X="0" Y="1" Z="0"/>
</c:RaptorCopter> </c:RaptorCopter>
<c:Transform> <c:Transform>
<Orientation X="0" Y="316.505432" Z="0"/> <Orientation X="0" Y="851.386902" Z="0"/>
</c:Transform> </c:Transform>
</Components> </Components>
<Children> <Children>
@@ -871,7 +859,7 @@
<Axis X="0" Y="1" Z="0"/> <Axis X="0" Y="1" Z="0"/>
</c:RaptorCopter> </c:RaptorCopter>
<c:Transform> <c:Transform>
<Orientation X="0" Y="316.505432" Z="0"/> <Orientation X="0" Y="851.386902" Z="0"/>
</c:Transform> </c:Transform>
</Components> </Components>
<Children> <Children>
@@ -918,7 +906,7 @@
<Axis X="0" Y="1" Z="0"/> <Axis X="0" Y="1" Z="0"/>
</c:RaptorCopter> </c:RaptorCopter>
<c:Transform> <c:Transform>
<Orientation X="0" Y="316.505432" Z="0"/> <Orientation X="0" Y="851.386902" Z="0"/>
</c:Transform> </c:Transform>
</Components> </Components>
<Children> <Children>
@@ -965,7 +953,7 @@
<Axis X="0" Y="1" Z="0"/> <Axis X="0" Y="1" Z="0"/>
</c:RaptorCopter> </c:RaptorCopter>
<c:Transform> <c:Transform>
<Orientation X="0" Y="316.505432" Z="0"/> <Orientation X="0" Y="851.386902" Z="0"/>
</c:Transform> </c:Transform>
</Components> </Components>
<Children> <Children>
@@ -1027,7 +1015,7 @@
</c:CapturePoint> </c:CapturePoint>
<c:Model> <c:Model>
<Resource>Models/Core/UnitCube.mesh</Resource> <Resource>Models/Core/UnitCube.mesh</Resource>
<Color A="0.300000012" B="0" G="0.200000003" R="1"/> <Color A="0.300000012" B="0" G="0" R="1"/>
<Transparent>true</Transparent> <Transparent>true</Transparent>
</c:Model> </c:Model>
<c:Team> <c:Team>
@@ -1077,7 +1065,7 @@
</c:CapturePoint> </c:CapturePoint>
<c:Model> <c:Model>
<Resource>Models/Core/UnitCube.mesh</Resource> <Resource>Models/Core/UnitCube.mesh</Resource>
<Color A="0.300000012" B="0" G="1" R="1"/> <Color A="0.300000012" B="1" G="1" R="1"/>
<Transparent>true</Transparent> <Transparent>true</Transparent>
</c:Model> </c:Model>
<c:Team/> <c:Team/>
@@ -1167,7 +1155,7 @@
</c:CapturePoint> </c:CapturePoint>
<c:Model> <c:Model>
<Resource>Models/Core/UnitCube.mesh</Resource> <Resource>Models/Core/UnitCube.mesh</Resource>
<Color A="0.300000012" B="1" G="1" R="0"/> <Color A="0.300000012" B="1" G="1" R="1"/>
<Transparent>true</Transparent> <Transparent>true</Transparent>
</c:Model> </c:Model>
<c:Team/> <c:Team/>
@@ -1217,7 +1205,7 @@
</c:CapturePoint> </c:CapturePoint>
<c:Model> <c:Model>
<Resource>Models/Core/UnitCube.mesh</Resource> <Resource>Models/Core/UnitCube.mesh</Resource>
<Color A="0.300000012" B="1" G="0.200000003" R="0"/> <Color A="0.300000012" B="1" G="0" R="0"/>
<Transparent>true</Transparent> <Transparent>true</Transparent>
</c:Model> </c:Model>
<c:Team> <c:Team>
@@ -1379,7 +1367,7 @@
<Axis X="0" Y="1" Z="0"/> <Axis X="0" Y="1" Z="0"/>
</c:RaptorCopter> </c:RaptorCopter>
<c:Transform> <c:Transform>
<Orientation X="0" Y="850.207886" Z="0"/> <Orientation X="0" Y="1385.11243" Z="0"/>
</c:Transform> </c:Transform>
</Components> </Components>
<Children> <Children>
@@ -1388,7 +1376,7 @@
<c:ExplosionEffect> <c:ExplosionEffect>
<ColorByDistance>true</ColorByDistance> <ColorByDistance>true</ColorByDistance>
<Velocity X="0.800000012" Y="0.0379999988" Z="0"/> <Velocity X="0.800000012" Y="0.0379999988" Z="0"/>
<TimeSinceDeath>0.75205058136495551</TimeSinceDeath> <TimeSinceDeath>0.8256214817261025</TimeSinceDeath>
<ExplosionDuration>3.7999999523162842</ExplosionDuration> <ExplosionDuration>3.7999999523162842</ExplosionDuration>
<EndColor A="0" B="23.5294113" G="11.7647057" R="0"/> <EndColor A="0" B="23.5294113" G="11.7647057" R="0"/>
<Randomness>true</Randomness> <Randomness>true</Randomness>
@@ -1435,7 +1423,7 @@
<Axis X="0" Y="1" Z="0"/> <Axis X="0" Y="1" Z="0"/>
</c:RaptorCopter> </c:RaptorCopter>
<c:Transform> <c:Transform>
<Orientation X="0" Y="850.207886" Z="0"/> <Orientation X="0" Y="1385.11243" Z="0"/>
</c:Transform> </c:Transform>
</Components> </Components>
<Children> <Children>
@@ -1444,7 +1432,7 @@
<c:ExplosionEffect> <c:ExplosionEffect>
<Velocity X="0.5" Y="1" Z="0"/> <Velocity X="0.5" Y="1" Z="0"/>
<ExplosionOrigin X="0" Y="0.900000036" Z="0"/> <ExplosionOrigin X="0" Y="0.900000036" Z="0"/>
<TimeSinceDeath>1.2019563319790627</TimeSinceDeath> <TimeSinceDeath>1.8641349174045843</TimeSinceDeath>
</c:ExplosionEffect> </c:ExplosionEffect>
<c:Model> <c:Model>
<Resource>Models/Characters/Assault/AssaultTPose.mesh</Resource> <Resource>Models/Characters/Assault/AssaultTPose.mesh</Resource>
@@ -1487,7 +1475,7 @@
<Axis X="0" Y="1" Z="0"/> <Axis X="0" Y="1" Z="0"/>
</c:RaptorCopter> </c:RaptorCopter>
<c:Transform> <c:Transform>
<Orientation X="0" Y="850.207886" Z="0"/> <Orientation X="0" Y="1385.11243" Z="0"/>
</c:Transform> </c:Transform>
</Components> </Components>
<Children> <Children>
@@ -1498,7 +1486,7 @@
<ColorByDistance>true</ColorByDistance> <ColorByDistance>true</ColorByDistance>
<Velocity X="0.300000012" Y="2" Z="0"/> <Velocity X="0.300000012" Y="2" Z="0"/>
<ExplosionOrigin X="0" Y="1.30000007" Z="-0.200000003"/> <ExplosionOrigin X="0" Y="1.30000007" Z="-0.200000003"/>
<TimeSinceDeath>0.68540211563899389</TimeSinceDeath> <TimeSinceDeath>1.8641349174045843</TimeSinceDeath>
<EndColor A="0" B="0.333333343" G="0.933333337" R="3.92156863"/> <EndColor A="0" B="0.333333343" G="0.933333337" R="3.92156863"/>
<Randomness>true</Randomness> <Randomness>true</Randomness>
</c:ExplosionEffect> </c:ExplosionEffect>
@@ -1543,7 +1531,7 @@
<Axis X="0" Y="1" Z="0"/> <Axis X="0" Y="1" Z="0"/>
</c:RaptorCopter> </c:RaptorCopter>
<c:Transform> <c:Transform>
<Orientation X="0" Y="857.984314" Z="0"/> <Orientation X="0" Y="1392.89258" Z="0"/>
</c:Transform> </c:Transform>
</Components> </Components>
<Children> <Children>
@@ -1553,7 +1541,7 @@
<ColorByDistance>true</ColorByDistance> <ColorByDistance>true</ColorByDistance>
<Velocity X="0" Y="0.699999988" Z="0"/> <Velocity X="0" Y="0.699999988" Z="0"/>
<ExplosionOrigin X="0" Y="-1.10000002" Z="0"/> <ExplosionOrigin X="0" Y="-1.10000002" Z="0"/>
<TimeSinceDeath>0.95150063648635763</TimeSinceDeath> <TimeSinceDeath>1.2301962937648341</TimeSinceDeath>
<ExplosionDuration>10</ExplosionDuration> <ExplosionDuration>10</ExplosionDuration>
<EndColor A="1" B="0" G="0" R="1"/> <EndColor A="1" B="0" G="0" R="1"/>
<RandomnessScalar>3</RandomnessScalar> <RandomnessScalar>3</RandomnessScalar>
@@ -1601,7 +1589,7 @@
<Axis X="0" Y="1" Z="0"/> <Axis X="0" Y="1" Z="0"/>
</c:RaptorCopter> </c:RaptorCopter>
<c:Transform> <c:Transform>
<Orientation X="0" Y="456.136078" Z="0"/> <Orientation X="0" Y="991.007263" Z="0"/>
</c:Transform> </c:Transform>
</Components> </Components>
<Children> <Children>
@@ -1611,7 +1599,7 @@
<ColorByDistance>true</ColorByDistance> <ColorByDistance>true</ColorByDistance>
<Velocity X="6" Y="0.100000001" Z="0"/> <Velocity X="6" Y="0.100000001" Z="0"/>
<ExplosionOrigin X="0" Y="-10" Z="0"/> <ExplosionOrigin X="0" Y="-10" Z="0"/>
<TimeSinceDeath>1.3515288978624223</TimeSinceDeath> <TimeSinceDeath>3.4214855659573402</TimeSinceDeath>
<ExponentialAccelaration>true</ExponentialAccelaration> <ExponentialAccelaration>true</ExponentialAccelaration>
<ExplosionDuration>5</ExplosionDuration> <ExplosionDuration>5</ExplosionDuration>
<Randomness>true</Randomness> <Randomness>true</Randomness>
@@ -1678,10 +1666,10 @@
</Entity> </Entity>
<Entity name="ShieldedCube"> <Entity name="ShieldedCube">
<Components> <Components>
<c:Shielded/>
<c:Model> <c:Model>
<Resource>Models/Core/UnitCube.mesh</Resource> <Resource>Models/Core/UnitCube.mesh</Resource>
</c:Model> </c:Model>
<c:Shielded/>
<c:Transform> <c:Transform>
<Position X="-3.34650159" Y="1.19966424" Z="3.09996605"/> <Position X="-3.34650159" Y="1.19966424" Z="3.09996605"/>
</c:Transform> </c:Transform>
@@ -1792,7 +1780,7 @@
<c:ExplosionEffect> <c:ExplosionEffect>
<ColorByDistance>true</ColorByDistance> <ColorByDistance>true</ColorByDistance>
<Velocity X="0.800000012" Y="0.0379999988" Z="0"/> <Velocity X="0.800000012" Y="0.0379999988" Z="0"/>
<TimeSinceDeath>1.3682019578975679</TimeSinceDeath> <TimeSinceDeath>0.8256214817261025</TimeSinceDeath>
<ExplosionDuration>3.7999999523162842</ExplosionDuration> <ExplosionDuration>3.7999999523162842</ExplosionDuration>
<EndColor A="0" B="23.5294113" G="11.7647057" R="0"/> <EndColor A="0" B="23.5294113" G="11.7647057" R="0"/>
<Randomness>true</Randomness> <Randomness>true</Randomness>
@@ -1836,12 +1824,12 @@
<Entity name="PlayerModel"> <Entity name="PlayerModel">
<Components> <Components>
<c:Animation/> <c:Animation/>
<c:Shielded/>
<c:HiddenForLocalPlayer/> <c:HiddenForLocalPlayer/>
<c:Model> <c:Model>
<Resource>Models/AssaultAnimated.mesh</Resource> <Resource>Models/AssaultAnimated.mesh</Resource>
<Color A="1" B="0" G="0" R="1"/> <Color A="1" B="0" G="0" R="1"/>
</c:Model> </c:Model>
<c:Shielded/>
<c:Transform/> <c:Transform/>
</Components> </Components>
<Children/> <Children/>
@@ -2095,7 +2083,7 @@
<Components> <Components>
<c:Sprite> <c:Sprite>
<DiffuseTexture>Textures/Core/UnitHexagon.png</DiffuseTexture> <DiffuseTexture>Textures/Core/UnitHexagon.png</DiffuseTexture>
<Color A="0.699999988" B="0" G="0.200000003" R="1"/> <Color A="0.699999988" B="0" G="0" R="1"/>
</c:Sprite> </c:Sprite>
<c:Transform> <c:Transform>
<Position X="-1.58304751" Y="0.919596612" Z="0"/> <Position X="-1.58304751" Y="0.919596612" Z="0"/>
@@ -2107,7 +2095,7 @@
<c:CapturePointHUD/> <c:CapturePointHUD/>
<c:Fill> <c:Fill>
<Percentage>1</Percentage> <Percentage>1</Percentage>
<Color A="0.699999988" B="0" G="0.200000003" R="1"/> <Color A="0.699999988" B="0" G="0" R="1"/>
</c:Fill> </c:Fill>
<c:Sprite> <c:Sprite>
<DiffuseTexture>Textures/Core/UnitHexagon_Rotated.png</DiffuseTexture> <DiffuseTexture>Textures/Core/UnitHexagon_Rotated.png</DiffuseTexture>
@@ -2145,6 +2133,355 @@
</Entity> </Entity>
</Children> </Children>
</Entity> </Entity>
<Entity name="MenuOirign">
<Components>
<c:Transform>
<Position X="-23.0533829" Y="0.938369572" Z="14.068408"/>
</c:Transform>
</Components>
<Children>
<Entity name="Camera">
<Components>
<c:Camera/>
<c:Model>
<Resource>Models/Widgets/Camera.mesh</Resource>
<Visible>false</Visible>
</c:Model>
<c:Transform/>
</Components>
<Children/>
</Entity>
<Entity name="MenuCenterPoint">
<Components>
<c:Menu/>
<c:Transform/>
</Components>
<Children>
<Entity name="Page0">
<Components>
<c:Page/>
<c:Transform/>
</Components>
<Children>
<Entity name="MenuBackground">
<Components>
<c:Sprite>
<DiffuseTexture>Textures/Core/ErrorTexture.png</DiffuseTexture>
</c:Sprite>
<c:Transform>
<Position X="0" Y="0" Z="-1"/>
</c:Transform>
</Components>
<Children>
<Entity name="Play">
<Components>
<c:Button/>
<c:Sprite>
<DiffuseTexture>Textures/Core/White.png</DiffuseTexture>
</c:Sprite>
<c:Transform>
<Position X="0" Y="0.388422519" Z="0.0627754927"/>
<Scale X="0.600000024" Y="0.150000006" Z="1"/>
</c:Transform>
</Components>
<Children>
<Entity name="Text">
<Components>
<c:Text>
<Content>Play</Content>
<Resource>Fonts/DroidSans.ttf,64</Resource>
<Color A="1" B="1" G="0.847058833" R="0"/>
</c:Text>
<c:Transform>
<Position X="-0.00710564246" Y="-0.203304529" Z="0.00999999978"/>
<Scale X="0.300000012" Y="0.699999988" Z="4.30000019"/>
</c:Transform>
</Components>
<Children/>
</Entity>
</Children>
</Entity>
<Entity name="Host">
<Components>
<c:Button/>
<c:Sprite>
<DiffuseTexture>Textures/Core/White.png</DiffuseTexture>
</c:Sprite>
<c:Transform>
<Position X="0" Y="0.214031488" Z="0.0627754927"/>
<Scale X="0.600000024" Y="0.150000006" Z="1"/>
</c:Transform>
</Components>
<Children>
<Entity name="Text">
<Components>
<c:Text>
<Content>Host</Content>
<Resource>Fonts/DroidSans.ttf,64</Resource>
<Color A="1" B="1" G="0.847058833" R="0"/>
</c:Text>
<c:Transform>
<Position X="-0.00710564246" Y="-0.203304529" Z="0.00999999978"/>
<Scale X="0.300000012" Y="0.699999988" Z="4.30000019"/>
</c:Transform>
</Components>
<Children/>
</Entity>
</Children>
</Entity>
<Entity name="Connecting">
<Components>
<c:Button/>
<c:Sprite>
<DiffuseTexture>Textures/Core/White.png</DiffuseTexture>
</c:Sprite>
<c:Transform>
<Position X="0" Y="0.0367300175" Z="0.0627754927"/>
<Scale X="0.600000024" Y="0.150000006" Z="1"/>
</c:Transform>
</Components>
<Children>
<Entity name="Text">
<Components>
<c:Text>
<Content>Connect</Content>
<Resource>Fonts/DroidSans.ttf,64</Resource>
<Color A="1" B="1" G="0.847058833" R="0"/>
</c:Text>
<c:Transform>
<Position X="-0.00710564246" Y="-0.203304529" Z="0.00999999978"/>
<Scale X="0.300000012" Y="0.699999988" Z="4.30000019"/>
</c:Transform>
</Components>
<Children/>
</Entity>
</Children>
</Entity>
<Entity name="Settings">
<Components>
<c:Button/>
<c:Sprite>
<DiffuseTexture>Textures/Core/White.png</DiffuseTexture>
</c:Sprite>
<c:Transform>
<Position X="0" Y="-0.148274168" Z="0.0627754927"/>
<Scale X="0.600000024" Y="0.150000006" Z="1"/>
</c:Transform>
</Components>
<Children>
<Entity name="Text">
<Components>
<c:Text>
<Content>Settings</Content>
<Resource>Fonts/DroidSans.ttf,64</Resource>
<Color A="1" B="1" G="0.847058833" R="0"/>
</c:Text>
<c:Transform>
<Position X="-0.00710564246" Y="-0.203304529" Z="0.00999999978"/>
<Scale X="0.300000012" Y="0.699999988" Z="4.30000019"/>
</c:Transform>
</Components>
<Children/>
</Entity>
</Children>
</Entity>
<Entity name="Quit">
<Components>
<c:Button/>
<c:Sprite>
<DiffuseTexture>Textures/Core/White.png</DiffuseTexture>
</c:Sprite>
<c:Transform>
<Position X="0" Y="-0.335298717" Z="0.0627754927"/>
<Scale X="0.600000024" Y="0.150000006" Z="1"/>
</c:Transform>
</Components>
<Children>
<Entity name="Text">
<Components>
<c:Text>
<Content>Quit</Content>
<Resource>Fonts/DroidSans.ttf,64</Resource>
<Color A="1" B="1" G="0.847058833" R="0"/>
</c:Text>
<c:Transform>
<Position X="-0.00710564246" Y="-0.203304529" Z="0.00999999978"/>
<Scale X="0.300000012" Y="0.699999988" Z="4.30000019"/>
</c:Transform>
</Components>
<Children/>
</Entity>
</Children>
</Entity>
</Children>
</Entity>
</Children>
</Entity>
<Entity name="Page1">
<Components>
<c:Page>
<ID>1</ID>
</c:Page>
<c:Transform>
<Orientation X="0" Y="0.989000022" Z="0"/>
</c:Transform>
</Components>
<Children>
<Entity name="MenuBackground">
<Components>
<c:Sprite>
<DiffuseTexture>Textures/Core/ErrorTexture.png</DiffuseTexture>
</c:Sprite>
<c:Transform>
<Position X="0" Y="0" Z="-1"/>
</c:Transform>
</Components>
<Children>
<Entity name="Res1080">
<Components>
<c:Button/>
<c:Sprite>
<DiffuseTexture>Textures/Core/White.png</DiffuseTexture>
</c:Sprite>
<c:Transform>
<Position X="0" Y="0.375197947" Z="0.0627754927"/>
<Scale X="0.600000024" Y="0.150000006" Z="1"/>
</c:Transform>
</Components>
<Children>
<Entity name="Text">
<Components>
<c:Text>
<Content>1920x1080</Content>
<Resource>Fonts/DroidSans.ttf,64</Resource>
<Color A="1" B="1" G="0.847058833" R="0"/>
</c:Text>
<c:Transform>
<Position X="-0.00710564246" Y="-0.203304529" Z="0.00999999978"/>
<Scale X="0.300000012" Y="0.699999988" Z="4.30000019"/>
</c:Transform>
</Components>
<Children/>
</Entity>
</Children>
</Entity>
<Entity name="Res720">
<Components>
<c:Button/>
<c:Sprite>
<DiffuseTexture>Textures/Core/White.png</DiffuseTexture>
</c:Sprite>
<c:Transform>
<Position X="0" Y="0.199327558" Z="0.0627754927"/>
<Scale X="0.600000024" Y="0.150000006" Z="1"/>
</c:Transform>
</Components>
<Children>
<Entity name="Text">
<Components>
<c:Text>
<Content>1280x720</Content>
<Resource>Fonts/DroidSans.ttf,64</Resource>
<Color A="1" B="1" G="0.847058833" R="0"/>
</c:Text>
<c:Transform>
<Position X="-0.00710564246" Y="-0.203304529" Z="0.00999999978"/>
<Scale X="0.300000012" Y="0.699999988" Z="4.30000019"/>
</c:Transform>
</Components>
<Children/>
</Entity>
</Children>
</Entity>
<Entity name="Res480">
<Components>
<c:Button/>
<c:Sprite>
<DiffuseTexture>Textures/Core/White.png</DiffuseTexture>
</c:Sprite>
<c:Transform>
<Position X="0" Y="0.0159880854" Z="0.0627754927"/>
<Scale X="0.600000024" Y="0.150000006" Z="1"/>
</c:Transform>
</Components>
<Children>
<Entity name="Text">
<Components>
<c:Text>
<Content>854x480</Content>
<Resource>Fonts/DroidSans.ttf,64</Resource>
<Color A="1" B="1" G="0.847058833" R="0"/>
</c:Text>
<c:Transform>
<Position X="-0.00710564246" Y="-0.203304529" Z="0.00999999978"/>
<Scale X="0.300000012" Y="0.699999988" Z="4.30000019"/>
</c:Transform>
</Components>
<Children/>
</Entity>
</Children>
</Entity>
<Entity name="FullScreen">
<Components>
<c:Button/>
<c:Sprite>
<DiffuseTexture>Textures/Core/White.png</DiffuseTexture>
</c:Sprite>
<c:Transform>
<Position X="0" Y="-0.164955258" Z="0.0627754927"/>
<Scale X="0.600000024" Y="0.150000006" Z="1"/>
</c:Transform>
</Components>
<Children>
<Entity name="Text">
<Components>
<c:Text>
<Content>FullScreen</Content>
<Resource>Fonts/DroidSans.ttf,64</Resource>
<Color A="1" B="1" G="0.847058833" R="0"/>
</c:Text>
<c:Transform>
<Position X="-0.00710564246" Y="-0.203304529" Z="0.00999999978"/>
<Scale X="0.300000012" Y="0.699999988" Z="4.30000019"/>
</c:Transform>
</Components>
<Children/>
</Entity>
</Children>
</Entity>
</Children>
</Entity>
</Children>
</Entity>
</Children>
</Entity>
<Entity name="Text">
<Components>
<c:Text>
<Content>Menu test area</Content>
<Resource>Fonts/DroidSans.ttf,64</Resource>
</c:Text>
<c:Transform>
<Position X="0" Y="4.22317314" Z="0"/>
<Orientation X="0" Y="1.68700004" Z="0"/>
</c:Transform>
</Components>
<Children/>
</Entity>
</Children>
</Entity>
<Entity name="ListenerText">
<Components>
<c:Text>
<Content>Sound Test</Content>
<Resource>Fonts/DroidSans.ttf,64</Resource>
</c:Text>
<c:Transform>
<Orientation X="0" Y="3.31600022" 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>
+299
View File
@@ -0,0 +1,299 @@
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<Entity name="MenuOirign" xmlns:c="components" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../Types/Entity.xsd">
<Components>
<c:Transform>
<Position X="-23.0533829" Y="0.938369572" Z="14.068408"/>
</c:Transform>
</Components>
<Children>
<Entity name="Camera">
<Components>
<c:Camera/>
<c:Model>
<Resource>Models/Widgets/Camera.mesh</Resource>
</c:Model>
<c:Transform/>
</Components>
<Children/>
</Entity>
<Entity name="MenuCenterPoint">
<Components>
<c:Menu/>
<c:Transform/>
</Components>
<Children>
<Entity name="Page0">
<Components>
<c:Page/>
<c:Transform/>
</Components>
<Children>
<Entity name="MenuBackground">
<Components>
<c:Sprite>
<DiffuseTexture>Textures/Core/ErrorTexture.png</DiffuseTexture>
</c:Sprite>
<c:Transform>
<Position X="0" Y="0" Z="-1"/>
</c:Transform>
</Components>
<Children>
<Entity name="Button">
<Components>
<c:Button/>
<c:Sprite>
<DiffuseTexture>Textures/Core/White.png</DiffuseTexture>
</c:Sprite>
<c:Transform>
<Position X="0" Y="0.388422519" Z="0.0627754927"/>
<Scale X="0.600000024" Y="0.150000006" Z="1"/>
</c:Transform>
</Components>
<Children>
<Entity name="Text">
<Components>
<c:Text>
<Content>Play</Content>
<Resource>Fonts/DroidSans.ttf,64</Resource>
<Color A="1" B="1" G="0.847058833" R="0"/>
</c:Text>
<c:Transform>
<Position X="-0.00710564246" Y="-0.203304529" Z="0.00999999978"/>
<Scale X="0.300000012" Y="0.699999988" Z="4.30000019"/>
</c:Transform>
</Components>
<Children/>
</Entity>
</Children>
</Entity>
<Entity name="Button">
<Components>
<c:Button/>
<c:Sprite>
<DiffuseTexture>Textures/Core/White.png</DiffuseTexture>
</c:Sprite>
<c:Transform>
<Position X="0" Y="0.214031488" Z="0.0627754927"/>
<Scale X="0.600000024" Y="0.150000006" Z="1"/>
</c:Transform>
</Components>
<Children>
<Entity name="Text">
<Components>
<c:Text>
<Content>Host</Content>
<Resource>Fonts/DroidSans.ttf,64</Resource>
<Color A="1" B="1" G="0.847058833" R="0"/>
</c:Text>
<c:Transform>
<Position X="-0.00710564246" Y="-0.203304529" Z="0.00999999978"/>
<Scale X="0.300000012" Y="0.699999988" Z="4.30000019"/>
</c:Transform>
</Components>
<Children/>
</Entity>
</Children>
</Entity>
<Entity name="Button">
<Components>
<c:Button/>
<c:Sprite>
<DiffuseTexture>Textures/Core/White.png</DiffuseTexture>
</c:Sprite>
<c:Transform>
<Position X="0" Y="0.0367300175" Z="0.0627754927"/>
<Scale X="0.600000024" Y="0.150000006" Z="1"/>
</c:Transform>
</Components>
<Children>
<Entity name="Text">
<Components>
<c:Text>
<Content>Connect</Content>
<Resource>Fonts/DroidSans.ttf,64</Resource>
<Color A="1" B="1" G="0.847058833" R="0"/>
</c:Text>
<c:Transform>
<Position X="-0.00710564246" Y="-0.203304529" Z="0.00999999978"/>
<Scale X="0.300000012" Y="0.699999988" Z="4.30000019"/>
</c:Transform>
</Components>
<Children/>
</Entity>
</Children>
</Entity>
<Entity name="Button">
<Components>
<c:Button/>
<c:Sprite>
<DiffuseTexture>Textures/Core/White.png</DiffuseTexture>
</c:Sprite>
<c:Transform>
<Position X="0" Y="-0.148274168" Z="0.0627754927"/>
<Scale X="0.600000024" Y="0.150000006" Z="1"/>
</c:Transform>
</Components>
<Children>
<Entity name="Text">
<Components>
<c:Text>
<Content>Settings</Content>
<Resource>Fonts/DroidSans.ttf,64</Resource>
<Color A="1" B="1" G="0.847058833" R="0"/>
</c:Text>
<c:Transform>
<Position X="-0.00710564246" Y="-0.203304529" Z="0.00999999978"/>
<Scale X="0.300000012" Y="0.699999988" Z="4.30000019"/>
</c:Transform>
</Components>
<Children/>
</Entity>
</Children>
</Entity>
<Entity name="Button">
<Components>
<c:Button/>
<c:Sprite>
<DiffuseTexture>Textures/Core/White.png</DiffuseTexture>
</c:Sprite>
<c:Transform>
<Position X="0" Y="-0.335298717" Z="0.0627754927"/>
<Scale X="0.600000024" Y="0.150000006" Z="1"/>
</c:Transform>
</Components>
<Children>
<Entity name="Text">
<Components>
<c:Text>
<Content>Quit</Content>
<Resource>Fonts/DroidSans.ttf,64</Resource>
<Color A="1" B="1" G="0.847058833" R="0"/>
</c:Text>
<c:Transform>
<Position X="-0.00710564246" Y="-0.203304529" Z="0.00999999978"/>
<Scale X="0.300000012" Y="0.699999988" Z="4.30000019"/>
</c:Transform>
</Components>
<Children/>
</Entity>
</Children>
</Entity>
</Children>
</Entity>
</Children>
</Entity>
<Entity name="Page1">
<Components>
<c:Page>
<ID>1</ID>
</c:Page>
<c:Transform>
<Orientation X="0" Y="0.989000022" Z="0"/>
</c:Transform>
</Components>
<Children>
<Entity name="MenuBackground">
<Components>
<c:Sprite>
<DiffuseTexture>Textures/Core/ErrorTexture.png</DiffuseTexture>
</c:Sprite>
<c:Transform>
<Position X="0" Y="0" Z="-1"/>
</c:Transform>
</Components>
<Children>
<Entity name="Button">
<Components>
<c:Button/>
<c:Sprite>
<DiffuseTexture>Textures/Core/White.png</DiffuseTexture>
</c:Sprite>
<c:Transform>
<Position X="0" Y="0.375197947" Z="0.0627754927"/>
<Scale X="0.600000024" Y="0.150000006" Z="1"/>
</c:Transform>
</Components>
<Children>
<Entity name="Text">
<Components>
<c:Text>
<Content>Resolution</Content>
<Resource>Fonts/DroidSans.ttf,64</Resource>
<Color A="1" B="1" G="0.847058833" R="0"/>
</c:Text>
<c:Transform>
<Position X="-0.00710564246" Y="-0.203304529" Z="0.00999999978"/>
<Scale X="0.300000012" Y="0.699999988" Z="4.30000019"/>
</c:Transform>
</Components>
<Children/>
</Entity>
</Children>
</Entity>
<Entity name="Button">
<Components>
<c:Button/>
<c:Sprite>
<DiffuseTexture>Textures/Core/White.png</DiffuseTexture>
</c:Sprite>
<c:Transform>
<Position X="0" Y="0.199327558" Z="0.0627754927"/>
<Scale X="0.600000024" Y="0.150000006" Z="1"/>
</c:Transform>
</Components>
<Children>
<Entity name="Text">
<Components>
<c:Text>
<Content>Option2</Content>
<Resource>Fonts/DroidSans.ttf,64</Resource>
<Color A="1" B="1" G="0.847058833" R="0"/>
</c:Text>
<c:Transform>
<Position X="-0.00710564246" Y="-0.203304529" Z="0.00999999978"/>
<Scale X="0.300000012" Y="0.699999988" Z="4.30000019"/>
</c:Transform>
</Components>
<Children/>
</Entity>
</Children>
</Entity>
<Entity name="Button">
<Components>
<c:Button/>
<c:Sprite>
<DiffuseTexture>Textures/Core/White.png</DiffuseTexture>
</c:Sprite>
<c:Transform>
<Position X="0" Y="0.0159880854" Z="0.0627754927"/>
<Scale X="0.600000024" Y="0.150000006" Z="1"/>
</c:Transform>
</Components>
<Children>
<Entity name="Text">
<Components>
<c:Text>
<Content>Butts</Content>
<Resource>Fonts/DroidSans.ttf,64</Resource>
<Color A="1" B="1" G="0.847058833" R="0"/>
</c:Text>
<c:Transform>
<Position X="-0.00710564246" Y="-0.203304529" Z="0.00999999978"/>
<Scale X="0.300000012" Y="0.699999988" Z="4.30000019"/>
</c:Transform>
</Components>
<Children/>
</Entity>
</Children>
</Entity>
</Children>
</Entity>
</Children>
</Entity>
</Children>
</Entity>
</Children>
</Entity>
+4
View File
@@ -44,8 +44,12 @@
<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:element ref="c:Menu" minOccurs="0"/>
<xs:element ref="c:Page" minOccurs="0"/>
<xs:element ref="c:Button" minOccurs="0"/>
</xs:all> </xs:all>
</xs:complexType> </xs:complexType>
</xs:element> </xs:element>
+2 -1
View File
@@ -9,6 +9,7 @@ uniform vec2 ScreenDimensions;
uniform vec4 FillColor; uniform vec4 FillColor;
uniform vec4 AmbientColor; uniform vec4 AmbientColor;
uniform float FillPercentage; uniform float FillPercentage;
uniform float GlowIntensity = 10;
uniform vec2 DiffuseUVRepeat; uniform vec2 DiffuseUVRepeat;
uniform vec2 NormalUVRepeat; uniform vec2 NormalUVRepeat;
@@ -166,7 +167,7 @@ void main()
color_result += FillColor; color_result += FillColor;
} }
sceneColor = vec4(color_result.xyz, clamp(color_result.a, 0, 1)); sceneColor = vec4(color_result.xyz, clamp(color_result.a, 0, 1));
color_result += glowTexel*3; color_result += glowTexel*GlowIntensity;
bloomColor = vec4(clamp(color_result.xyz - 1.0, 0, 100), 1.0); bloomColor = vec4(clamp(color_result.xyz - 1.0, 0, 100), 1.0);
+1 -1
View File
@@ -3,7 +3,7 @@ project(TacticalZ-Engine)
find_package(OpenGL REQUIRED) find_package(OpenGL REQUIRED)
find_package(GLEW REQUIRED) find_package(GLEW REQUIRED)
find_package(GLFW REQUIRED) find_package(GLFW REQUIRED)
find_package(Boost REQUIRED COMPONENTS system filesystem thread chrono program_options) find_package(Boost REQUIRED COMPONENTS system filesystem thread chrono timer program_options)
find_package(assimp REQUIRED) find_package(assimp REQUIRED)
find_package(ZLIB REQUIRED) find_package(ZLIB REQUIRED)
find_package(PNG REQUIRED) find_package(PNG REQUIRED)
+53 -7
View File
@@ -207,7 +207,7 @@ bool RayVsModel(const Ray& ray,
glm::vec3 v0 = Transform::TransformPoint(modelVertices[modelIndices[i++]].Position, modelMatrix); glm::vec3 v0 = Transform::TransformPoint(modelVertices[modelIndices[i++]].Position, modelMatrix);
glm::vec3 v1 = Transform::TransformPoint(modelVertices[modelIndices[i++]].Position, modelMatrix); glm::vec3 v1 = Transform::TransformPoint(modelVertices[modelIndices[i++]].Position, modelMatrix);
glm::vec3 v2 = Transform::TransformPoint(modelVertices[modelIndices[i++]].Position, modelMatrix); glm::vec3 v2 = Transform::TransformPoint(modelVertices[modelIndices[i++]].Position, modelMatrix);
float dist = INFINITY; float dist = outDistance;
float u; float u;
float v; float v;
if (RayVsTriangle(ray, v0, v1, v2, dist, u, v)) { if (RayVsTriangle(ray, v0, v1, v2, dist, u, v)) {
@@ -366,7 +366,8 @@ bool AABBvsTriangle(const AABB& box,
float verticalStepHeight, float verticalStepHeight,
bool& isOnGround, bool& isOnGround,
glm::vec3& boxVelocity, glm::vec3& boxVelocity,
glm::vec3& outResolution) glm::vec3& outResolution,
bool resolveCollision)
{ {
//Check so we don't have a zero area triangle when calculating the normal. //Check so we don't have a zero area triangle when calculating the normal.
//Also, don't check a triangle facing away from the player. //Also, don't check a triangle facing away from the player.
@@ -426,7 +427,7 @@ bool AABBvsTriangle(const AABB& box,
//if projections don't overlap, return false. //if projections don't overlap, return false.
if (!rectangleVsTriangle(boxMin, boxMax, t2D, resolutionVector, resolutionDist, pushedFromTriangleLine)) { if (!rectangleVsTriangle(boxMin, boxMax, t2D, resolutionVector, resolutionDist, pushedFromTriangleLine)) {
return false; return false;
} else { } else if (resolveCollision) {
//Overwrite the smallest resolution if this is smaller. //Overwrite the smallest resolution if this is smaller.
if (resolutionDist < resolveShortest.DistanceSq) { if (resolutionDist < resolveShortest.DistanceSq) {
resolveShortest.Vector = glm::vec3(0.f); resolveShortest.Vector = glm::vec3(0.f);
@@ -463,6 +464,11 @@ bool AABBvsTriangle(const AABB& box,
if (glm::abs(t) > 1) { if (glm::abs(t) > 1) {
return false; return false;
} }
if (!resolveCollision) {
return true;
}
glm::vec3 cornerResolution = (1+t) * diagonal; glm::vec3 cornerResolution = (1+t) * diagonal;
//Overwrite the smallest resolution if cornerResolution is smaller. //Overwrite the smallest resolution if cornerResolution is smaller.
float lenSq = glm::length2(cornerResolution); float lenSq = glm::length2(cornerResolution);
@@ -537,7 +543,8 @@ bool AABBvsTriangles(const AABB& box,
glm::vec3& boxVelocity, glm::vec3& boxVelocity,
float verticalStepHeight, float verticalStepHeight,
bool& isOnGround, bool& isOnGround,
glm::vec3& outResolutionVector) glm::vec3& outResolutionVector,
bool resolveCollision)
{ {
bool hit = false; bool hit = false;
@@ -553,7 +560,7 @@ bool AABBvsTriangles(const AABB& box,
}; };
glm::vec3 outVec; glm::vec3 outVec;
bool collideWithGround = isOnGround; bool collideWithGround = isOnGround;
if (AABBvsTriangle(newBox, triVertices, originalBoxVelocity, verticalStepHeight, collideWithGround, boxVelocity, outVec)) { if (AABBvsTriangle(newBox, triVertices, originalBoxVelocity, verticalStepHeight, collideWithGround, boxVelocity, outVec, resolveCollision)) {
hit = true; hit = true;
outResolutionVector += outVec; outResolutionVector += outVec;
newBox = AABB::FromOriginSize(newBox.Origin() + outVec, newBox.Size()); newBox = AABB::FromOriginSize(newBox.Origin() + outVec, newBox.Size());
@@ -569,6 +576,44 @@ bool AABBvsTriangles(const AABB& box,
return hit; return hit;
} }
bool AABBvsTriangles(const AABB& box,
const RawModel::Vertex* modelVertices,
const std::vector<unsigned int>& modelIndices,
const glm::mat4& modelMatrix,
glm::vec3& boxVelocity,
float verticalStepHeight,
bool& isOnGround,
glm::vec3& outResolutionVector)
{
return AABBvsTriangles(box,
modelVertices,
modelIndices,
modelMatrix,
boxVelocity,
verticalStepHeight,
isOnGround,
outResolutionVector,
true);
}
bool AABBvsTriangles(const AABB& box,
const RawModel::Vertex* modelVertices,
const std::vector<unsigned int>& modelIndices,
const glm::mat4& modelMatrix)
{
glm::vec3 vel, outres;
bool g;
return AABBvsTriangles(box,
modelVertices,
modelIndices,
modelMatrix,
vel,
0.f,
g,
outres,
false);
}
boost::optional<EntityAABB> EntityAbsoluteAABB(EntityWrapper& entity, bool takeModelBox) boost::optional<EntityAABB> EntityAbsoluteAABB(EntityWrapper& entity, bool takeModelBox)
{ {
AABB modelSpaceBox; AABB modelSpaceBox;
@@ -648,8 +693,9 @@ boost::optional<EntityAABB> EntityFirstHitByRay(const Ray& ray, std::vector<Enti
if (!entityBox.Entity.HasComponent("Model")) { if (!entityBox.Entity.HasComponent("Model")) {
continue; continue;
} }
std::string res = entityBox.Entity["Model"]["Resource"]; auto& cModel = entityBox.Entity["Model"];
if (res.empty()) { std::string res = cModel["Resource"];
if (res.empty() || (bool)cModel["Transparent"] || !((bool)cModel["Visible"])) {
continue; continue;
} }
Model* model; Model* model;
+54 -5
View File
@@ -3,24 +3,71 @@
#include "Core/AABB.h" #include "Core/AABB.h"
#include "Rendering/Model.h" #include "Rendering/Model.h"
void CollisionSystem::UpdateComponent(EntityWrapper& entity, ComponentWrapper& component, double dt) void CollisionSystem::UpdateComponent(EntityWrapper& entity, ComponentWrapper& cPhysics, double dt)
{ {
if (!entity.HasComponent("Physics")) { if (!entity.HasComponent("Collidable")) {
return; return;
} }
ComponentWrapper& cPhysics = entity["Physics"];
boost::optional<EntityAABB> boundingBox = Collision::EntityAbsoluteAABB(entity); boost::optional<EntityAABB> boundingBox = Collision::EntityAbsoluteAABB(entity);
if (!boundingBox) { if (!boundingBox) {
return; return;
} }
ComponentWrapper& cTransform = entity["Transform"]; ComponentWrapper& cTransform = entity["Transform"];
EntityAABB& boxA = *boundingBox; EntityAABB& boxA = *boundingBox;
bool everHitTheGround = false;
glm::vec3 size = boxA.Size();
float diameter = std::min(size.x, size.z);
glm::vec3 prevOrigin = (glm::vec3)cPhysics["PrevOrigin"];
glm::vec3 toCurrentPos = boxA.Origin() - prevOrigin;
float rayLength = glm::length(toCurrentPos) + 0.5f*diameter;
//If the entity has moved farther than the size of its box, we need to handle it specially.
bool traceCollision = rayLength > diameter;
//hack solution: If prevOrigin is less than -9000 in all dimensions,
//then it means it is not set, i.e. this is the first collision check for the entity.
if (traceCollision && glm::any(glm::greaterThan((glm::vec3)cPhysics["PrevOrigin"], glm::vec3(-9000.f)))) {
Ray ray(prevOrigin, toCurrentPos);
m_OctreeResult.clear();
m_Octree->ObjectsPossiblyHitByRay(ray, m_OctreeResult);
for (auto& boxB : m_OctreeResult) {
if (boxA.Entity == boxB.Entity) {
continue;
}
bool hit;
float dist;
if (boxB.Entity.HasComponent("Model")) {
RawModel* model;
std::string res = (std::string)boxB.Entity["Model"]["Resource"];
try {
model = ResourceManager::Load<RawModel, true>(res);
} catch (const std::exception&) {
continue;
}
float u, v;
hit = Collision::RayVsModel(ray, model->Vertices(), model->m_Indices, Transform::ModelMatrix(boxB.Entity), dist, u, v);
} else {
hit = Collision::RayVsAABB(ray, boxB, dist);
}
if (hit && dist < rayLength) {
//Set the entity to where it was colliding, minus the maximum box size.
//TODO: Perhaps this should be done slightly more properly.
glm::vec3 newOriginPos = ray.Origin() + (dist - 0.707107f*diameter) * ray.Direction();
glm::vec3 resolve = newOriginPos - boxA.Origin();
(glm::vec3&)cTransform["Position"] += resolve;
boxA = *Collision::EntityAbsoluteAABB(entity);
if (resolve.y > 0) {
everHitTheGround = true;
(bool)cPhysics["IsOnGround"] = true;
((glm::vec3&)cPhysics["Velocity"]).y = 0.f;
}
break;
}
}
}
// Collide against octree items // Collide against octree items
m_OctreeResult.clear(); m_OctreeResult.clear();
m_Octree->ObjectsInSameRegion(*boundingBox, m_OctreeResult); m_Octree->ObjectsInSameRegion(*boundingBox, m_OctreeResult);
bool everHitTheGround = false;
for (auto& boxB : m_OctreeResult) { for (auto& boxB : m_OctreeResult) {
glm::vec3 resolutionVector; glm::vec3 resolutionVector;
if (boxA.Entity == boxB.Entity) { if (boxA.Entity == boxB.Entity) {
@@ -64,4 +111,6 @@ void CollisionSystem::UpdateComponent(EntityWrapper& entity, ComponentWrapper& c
if (!everHitTheGround) { if (!everHitTheGround) {
(bool)cPhysics["IsOnGround"] = false; (bool)cPhysics["IsOnGround"] = false;
} }
(glm::vec3&)cPhysics["PrevOrigin"] = boxA.Origin();
} }
+39 -3
View File
@@ -1,7 +1,5 @@
#include "Core/ComponentPool.h" #include "Core/ComponentPool.h"
ComponentWrapper ComponentPoolForwardIterator::operator*() const ComponentWrapper ComponentPoolForwardIterator::operator*() const
{ {
char* data = &(*m_MemoryPoolIterator); char* data = &(*m_MemoryPoolIterator);
@@ -32,6 +30,34 @@ ComponentPoolForwardIterator& ComponentPoolForwardIterator::operator++()
return *this; return *this;
} }
ComponentPool::ComponentPool(const ComponentPool& other)
: m_ComponentInfo(other.m_ComponentInfo)
, m_Pool(other.m_Pool)
, m_EntityToComponent()
{
// Update EntityToComponent pointers
for (char& ptr : m_Pool) {
EntityID entity = *reinterpret_cast<EntityID*>(&ptr);
m_EntityToComponent[entity] = &ptr;
}
// Duplicate strings
for (auto& name : m_ComponentInfo.StringFields) {
for (auto& c : *this) {
std::string& val = c[name];
ComponentWrapper::SolidifyStrings(c);
}
}
}
ComponentPool::~ComponentPool()
{
// Destroy component data
for (auto& c : *this) {
ComponentWrapper::Destroy(c.Info, c.Data);
}
}
//const ::ComponentInfo& ComponentPool::ComponentInfo() const //const ::ComponentInfo& ComponentPool::ComponentInfo() const
//{ //{
// return m_ComponentInfo; // return m_ComponentInfo;
@@ -39,10 +65,19 @@ ComponentPoolForwardIterator& ComponentPoolForwardIterator::operator++()
ComponentWrapper ComponentPool::Allocate(EntityID entity) ComponentWrapper ComponentPool::Allocate(EntityID entity)
{ {
// Allocate pool data
char* data = m_Pool.Allocate(); char* data = m_Pool.Allocate();
// Copy EntityID
memcpy(data, &entity, sizeof(EntityID)); memcpy(data, &entity, sizeof(EntityID));
m_EntityToComponent[entity] = data; m_EntityToComponent[entity] = data;
return ComponentWrapper(m_ComponentInfo, data); ComponentWrapper component(m_ComponentInfo, data);
// Copy defaults
memcpy(component.Data, m_ComponentInfo.Defaults.get(), m_ComponentInfo.Stride);
ComponentWrapper::SolidifyStrings(component);
return component;
} }
ComponentWrapper ComponentPool::GetByEntity(EntityID ent) ComponentWrapper ComponentPool::GetByEntity(EntityID ent)
@@ -57,6 +92,7 @@ bool ComponentPool::KnowsEntity(EntityID ent)
void ComponentPool::Delete(ComponentWrapper& wrapper) void ComponentPool::Delete(ComponentWrapper& wrapper)
{ {
ComponentWrapper::Destroy(wrapper.Info, wrapper.Data);
m_EntityToComponent.erase(wrapper.EntityID); m_EntityToComponent.erase(wrapper.EntityID);
m_Pool.Free(wrapper.Data - sizeof(EntityID)); m_Pool.Free(wrapper.Data - sizeof(EntityID));
} }
+4 -1
View File
@@ -185,6 +185,9 @@ void EntityFilePreprocessor::parseComponentInfo()
field.Offset = fieldOffset; field.Offset = fieldOffset;
field.Stride = stride; field.Stride = stride;
compInfo.FieldsInOrder.push_back(name); compInfo.FieldsInOrder.push_back(name);
if (field.Type == "string") {
compInfo.StringFields.push_back(name);
}
fieldOffset += stride; fieldOffset += stride;
} }
@@ -201,7 +204,7 @@ void EntityFilePreprocessor::parseDefaults()
for (auto& ci : m_ComponentInfo) { for (auto& ci : m_ComponentInfo) {
// Allocate memory for default values // Allocate memory for default values
ci.second.Defaults = std::shared_ptr<char>(new char[ci.second.Stride]); ci.second.Defaults = boost::shared_array<char>(new char[ci.second.Stride], std::bind(&ComponentWrapper::Destroy, ci.second, std::placeholders::_1));
memset(ci.second.Defaults.get(), 0, ci.second.Stride); memset(ci.second.Defaults.get(), 0, ci.second.Stride);
std::string componentName = ci.first; std::string componentName = ci.first;
+76
View File
@@ -0,0 +1,76 @@
#include "Core/PerformanceTimer.h"
#include <ctime>
#include <fstream>
cpu_timer PerformanceTimer::m_Timer;
std::map<std::string, cpu_timer> PerformanceTimer::timers;
std::string PerformanceTimer::currentTimerRunning = "";
void PerformanceTimer::StartTimer(std::string nameOfTimer)
{
timers[nameOfTimer].stop();
timers[nameOfTimer].start();
currentTimerRunning = nameOfTimer;
}
void PerformanceTimer::StartTimerAndStopPrevious(std::string nameOfTimer)
{
//stop the current timer and start some other - useful to not have to stop timers all the time
if (currentTimerRunning != "") {
timers[currentTimerRunning].stop();
}
timers[nameOfTimer].stop();
timers[nameOfTimer].start();
currentTimerRunning = nameOfTimer;
}
void PerformanceTimer::StopTimer(std::string nameOfTimer)
{
timers[nameOfTimer].stop();
currentTimerRunning = nameOfTimer;
}
void PerformanceTimer::SetFrameNumber(int frameNumber)
{
}
void PerformanceTimer::ResetAllTimers()
{
//stop all timers
for (auto aTimer : timers)
{
aTimer.second.stop();
}
currentTimerRunning = "";
timers.clear();
}
void PerformanceTimer::CreateExcelData()
{
//get time
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("TacticalZ");
path += time + ".csv";
std::ofstream someFileStream;
someFileStream.open(path, std::ofstream::out);
someFileStream << "classname" << ',' << "walltime" << ',' << "userTime" << ',' << "systemTime" << '\n';
//write all timers to file
for (auto aTimer : timers)
{
//remove the "class" name in front of the string
auto className = aTimer.first;
if (className.find("class ") != std::string::npos) {
className.replace(0, 6, "");
}
auto wallTime = (double)aTimer.second.elapsed().wall*1e-3;
auto userTime = (double)aTimer.second.elapsed().user*1e-3;
auto systemTime = (double)aTimer.second.elapsed().system*1e-3;
someFileStream << className << "," << wallTime << ',' << userTime << ',' << systemTime << '\n';
}
someFileStream.close();
}
+15 -4
View File
@@ -9,7 +9,20 @@ World::~World()
} }
} }
EntityID World::CreateEntity(EntityID parent /*= 0*/) World::World(const World& other)
: m_EventBroker(other.m_EventBroker)
, m_CurrentEntityID(other.m_CurrentEntityID)
, m_EntityParents(other.m_EntityParents)
, m_EntityChildren(other.m_EntityChildren)
, m_EntityNames(other.m_EntityNames)
{
// Deep copy component pools
for (auto& kv : other.m_ComponentPools) {
m_ComponentPools[kv.first] = new ComponentPool(*kv.second);
}
}
EntityID World::CreateEntity(EntityID parent /*= EntityID_Invalid*/)
{ {
EntityID newEntity = generateEntityID(); EntityID newEntity = generateEntityID();
if (newEntity == parent) { if (newEntity == parent) {
@@ -44,10 +57,8 @@ ComponentWrapper World::AttachComponent(EntityID entity, const std::string& comp
ComponentPool* pool = m_ComponentPools.at(componentType); ComponentPool* pool = m_ComponentPools.at(componentType);
const ComponentInfo& ci = pool->ComponentInfo(); const ComponentInfo& ci = pool->ComponentInfo();
// Allocate space for the component // Allocate component with default values
ComponentWrapper c = pool->Allocate(entity); ComponentWrapper c = pool->Allocate(entity);
// Write default values
memcpy(c.Data, ci.Defaults.get(), ci.Stride);
return c; return c;
} }
+9
View File
@@ -40,8 +40,11 @@ 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();
} else {
Disable();
} }
} }
@@ -222,6 +225,12 @@ bool EditorSystem::OnInputCommand(const Events::InputCommand& e)
Enable(); Enable();
} }
} }
if (e.Command == "PerformanceTimingResetAllTimers" && e.Value > 0) {
PerformanceTimer::ResetAllTimers();
}
if (e.Command == "PerformanceTimingCreateExcelData" && e.Value > 0) {
PerformanceTimer::CreateExcelData();
}
return true; return true;
} }
+84
View File
@@ -0,0 +1,84 @@
#include "GUI/ButtonSystem.h"
ButtonSystem::ButtonSystem(SystemParams params, IRenderer* renderer)
: System(params)
, PureSystem("Button")
, m_Renderer(renderer)
{
EVENT_SUBSCRIBE_MEMBER(m_EMousePress, &ButtonSystem::OnMousePress);
EVENT_SUBSCRIBE_MEMBER(m_EMouseRelease, &ButtonSystem::OnMouseRelease);
EVENT_SUBSCRIBE_MEMBER(m_EMouseLock, &ButtonSystem::OnMouseLock);
EVENT_SUBSCRIBE_MEMBER(m_EMouseUnlock, &ButtonSystem::OnMouseUnlock);
}
bool ButtonSystem::OnMouseLock(const Events::LockMouse& e)
{
m_MouseIsLocked = true;
return true;
}
bool ButtonSystem::OnMouseUnlock(const Events::UnlockMouse& e)
{
m_MouseIsLocked = false;
return true;
}
bool ButtonSystem::OnMousePress(const Events::MousePress& e)
{
if (e.Button == GLFW_MOUSE_BUTTON_1 && !m_MouseIsLocked) {
m_PickData = m_Renderer->Pick(glm::vec2(e.X, e.Y));
if (m_PickData.Entity != EntityID_Invalid && m_PickData.World == m_World) {
if(m_World->HasComponent(m_PickData.Entity, "Button")) {
//Entity is a button, save it and send pressed event.
m_PickEntity = EntityWrapper(m_World, m_PickData.Entity);
//You have clicked on a button entity, send pressed event.
Events::ButtonPressed ePressed;
ePressed.Entity = m_PickEntity;
ePressed.EntityName = m_PickEntity.Name();
m_EventBroker->Publish(ePressed);
}
}
}
return true;
}
bool ButtonSystem::OnMouseRelease(const Events::MouseRelease& e)
{
if(!m_MouseIsLocked) {
//Mouse is not locked, send release event.
m_PickData = m_Renderer->Pick(glm::vec2(e.X, e.Y));
if(m_PickData.Entity != EntityID_Invalid && m_PickData.World == m_World) {
EntityWrapper ent = EntityWrapper(m_World, m_PickData.Entity);
Events::ButtonReleased eReleased;
eReleased.EntityName = m_PickEntity.Name();
eReleased.Entity = m_PickEntity;
m_EventBroker->Publish(eReleased);
if(m_World->HasComponent(m_PickData.Entity, "Button")) {
if (ent == m_PickEntity) {
//The entity you released the mouse button on is the same as you pressed it on. "Clicked"
Events::ButtonClicked eClicked;
eClicked.Entity = m_PickEntity;
eClicked.EntityName = m_PickEntity.Name();
m_EventBroker->Publish(eClicked);
}
}
}
}
return true;
}
void ButtonSystem::UpdateComponent(EntityWrapper& entity, ComponentWrapper& cHealth, double dt)
{
}
+57
View File
@@ -0,0 +1,57 @@
#include "GUI/MainMenuSystem.h"
MainMenuSystem::MainMenuSystem(SystemParams params, IRenderer* renderer)
: System(params)
, ImpureSystem()
, m_Renderer(renderer)
{
EVENT_SUBSCRIBE_MEMBER(m_EPressed, &MainMenuSystem::OnButtonPress);
EVENT_SUBSCRIBE_MEMBER(m_EReleased, &MainMenuSystem::OnButtonRelease);
EVENT_SUBSCRIBE_MEMBER(m_EClicked, &MainMenuSystem::OnButtonClick);
}
void MainMenuSystem::Update(double dt)
{
}
bool MainMenuSystem::OnButtonClick(const Events::ButtonClicked& e)
{
if(e.EntityName == "Play") {
//Run play code
} else if(e.EntityName == "Connect") {
//Run connect code
} else if(e.EntityName == "Host") {
//Run host code
} else if(e.EntityName == "Quit") {
printf("No, you stay");
} else if (e.EntityName == "Res1080") {
glfwSetWindowSize(m_Renderer->Window(), 1920, 1080);
printf("\n1080");
} else if (e.EntityName == "Res720") {
glfwSetWindowSize(m_Renderer->Window(), 1280, 720);
glViewport(0, 0, 1280, 720);
printf("\n720");
} else if (e.EntityName == "Res480") {
glfwSetWindowSize(m_Renderer->Window(), 854, 480);
glViewport(0, 0, 854, 480);
printf("\n480");
} else if (e.EntityName == "FullScreen") {
printf("No fullscreen for now");
}
return true;
}
bool MainMenuSystem::OnButtonRelease(const Events::ButtonReleased& e)
{
return true;
}
bool MainMenuSystem::OnButtonPress(const Events::ButtonPressed& e)
{
return true;
}
+3 -2
View File
@@ -437,11 +437,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) {
+11
View File
@@ -0,0 +1,11 @@
#include "Network/NetworkClient.h"
NetworkClient::NetworkClient()
{
m_ReadBuffer = new char[m_BufferSize];
}
NetworkClient::~NetworkClient()
{
delete[] m_ReadBuffer;
}
+11
View File
@@ -0,0 +1,11 @@
#include "Network/NetworkServer.h"
NetworkServer::NetworkServer()
{
m_ReadBuffer = new char[m_BufferSize];
}
NetworkServer::~NetworkServer()
{
delete[] m_ReadBuffer;
}
+53 -4
View File
@@ -84,7 +84,6 @@ void Server::Update()
if (isReadingData) { if (isReadingData) {
Network::Update(); Network::Update();
} }
} }
void Server::parseMessageType(Packet& packet) void Server::parseMessageType(Packet& packet)
@@ -147,7 +146,7 @@ void Server::sendSnapshot()
{ {
Packet packet(MessageType::Snapshot); Packet packet(MessageType::Snapshot);
addInputCommandsToPacket(packet); addInputCommandsToPacket(packet);
addChildrenToPacket(packet, EntityID_Invalid); addPlayersToPacket(packet, EntityID_Invalid);
unreliableBroadcast(packet); unreliableBroadcast(packet);
} }
@@ -164,7 +163,7 @@ void Server::addInputCommandsToPacket(Packet& packet)
m_InputCommandsToBroadcast.clear(); m_InputCommandsToBroadcast.clear();
} }
void Server::addChildrenToPacket(Packet & packet, EntityID entityID) void Server::addPlayersToPacket(Packet & packet, EntityID entityID)
{ {
auto itPair = m_World->GetChildren(entityID); auto itPair = m_World->GetChildren(entityID);
std::unordered_map<std::string, ComponentPool*> worldComponentPools = m_World->GetComponentPools(); std::unordered_map<std::string, ComponentPool*> worldComponentPools = m_World->GetComponentPools();
@@ -213,6 +212,49 @@ void Server::addChildrenToPacket(Packet & packet, EntityID entityID)
} }
} }
void Server::addChildrenToPacket(Packet & packet, EntityID entityID)
{
auto itPair = m_World->GetChildren(entityID);
std::unordered_map<std::string, ComponentPool*> worldComponentPools = m_World->GetComponentPools();
// Loop through every child
for (auto it = itPair.first; it != itPair.second; it++) {
EntityID childEntityID = it->second;
// Write EntityID and parentsID and Entity name
packet.WritePrimitive(childEntityID);
packet.WritePrimitive(entityID);
packet.WriteString(m_World->GetName(childEntityID));
// Write components to child
int numberOfComponents = 0;
for (auto& i : worldComponentPools) {
if (i.second->KnowsEntity(childEntityID)) {
numberOfComponents++;
}
}
// Write how many components should be read
packet.WritePrimitive(numberOfComponents);
for (auto& i : worldComponentPools) {
// If the entity exist in the pool
if (i.second->KnowsEntity(childEntityID)) {
ComponentWrapper componentWrapper = i.second->GetByEntity(childEntityID);
// ComponentType
packet.WriteString(componentWrapper.Info.Name);
// Loop through fields
for (auto& componentField : componentWrapper.Info.FieldsInOrder) {
ComponentInfo::Field_t fieldInfo = componentWrapper.Info.Fields.at(componentField);
if (fieldInfo.Type == "string") {
std::string& value = componentWrapper[componentField];
packet.WriteString(value);
} else {
packet.WriteData(componentWrapper.Data + fieldInfo.Offset, fieldInfo.Stride);
}
}
}
}
// Go to to your children
addChildrenToPacket(packet, childEntityID);
}
}
void Server::sendPing() void Server::sendPing()
{ {
// Prints connected players ping // Prints connected players ping
@@ -305,6 +347,11 @@ void Server::parseTCPConnect(Packet & packet)
connnectPacket.WritePrimitive(playerID); connnectPacket.WritePrimitive(playerID);
m_Reliable.Send(connnectPacket); m_Reliable.Send(connnectPacket);
Packet firstSnapshot(MessageType::Snapshot);
addInputCommandsToPacket(firstSnapshot);
addChildrenToPacket(firstSnapshot, EntityID_Invalid);
m_Reliable.Send(firstSnapshot);
// Send notification that a player has connected // Send notification that a player has connected
//Packet notificationPacket(MessageType::PlayerConnected); //Packet notificationPacket(MessageType::PlayerConnected);
//broadcast(notificationPacket); //broadcast(notificationPacket);
@@ -447,7 +494,9 @@ void Server::parsePing()
{ {
for (auto& kv : m_ConnectedPlayers) { for (auto& kv : m_ConnectedPlayers) {
if (kv.second.TCPAddress == m_Address && if (kv.second.TCPAddress == m_Address &&
kv.second.TCPPort == m_Port) { kv.second.TCPPort == m_Port
|| (kv.second.Endpoint.address() == m_Address
&& kv.second.Endpoint.port() == m_Port)) {
kv.second.StopTime = std::clock(); kv.second.StopTime = std::clock();
break; break;
} }
+39 -9
View File
@@ -56,32 +56,62 @@ void TCPClient::Disconnect()
void TCPClient::Receive(Packet& packet) void TCPClient::Receive(Packet& packet)
{ {
size_t bytesRead = readBuffer(m_ReadBuffer); size_t bytesRead = readBuffer();
if (bytesRead > 0) { if (bytesRead > 0) {
packet.ReconstructFromData(m_ReadBuffer, bytesRead); packet.ReconstructFromData(m_ReadBuffer, bytesRead);
} }
} }
size_t TCPClient::readBuffer(char* data) size_t TCPClient::readBuffer()
{ {
//if (!m_Socket) {
// return 0;
//}
//boost::system::error_code error;
//// Read size of packet
//size_t bytesReceived = m_Socket->read_some(boost
// ::asio::buffer((void*)data, sizeof(int)),
// error);
//int sizeOfPacket = 0;
//memcpy(&sizeOfPacket, data, sizeof(int));
//// Read the rest of the message
//bytesReceived += m_Socket->read_some(boost
// ::asio::buffer((void*)(data + bytesReceived), sizeOfPacket - bytesReceived),
// error);
//if (error) {
// //LOG_ERROR("receive: %s", error.message().c_str());
//}
//return bytesReceived;
if (!m_Socket) { if (!m_Socket) {
return 0; return 0;
} }
boost::system::error_code error; boost::system::error_code error;
// Read size of packet // Read size of packet
size_t bytesReceived = m_Socket->read_some(boost m_Socket->receive(boost
::asio::buffer((void*)data, sizeof(int)), ::asio::buffer((void*)m_ReadBuffer, sizeof(int)),
error); boost::asio::ip::tcp::socket::message_peek, error);
int sizeOfPacket = 0; unsigned int sizeOfPacket = 0;
memcpy(&sizeOfPacket, data, sizeof(int)); memcpy(&sizeOfPacket, m_ReadBuffer, sizeof(int));
// if the buffer is to small increase the size of it
// TODO if message is huge 1 time the buffer will not decrease.
if (sizeOfPacket > m_BufferSize) {
delete[] m_ReadBuffer;
m_ReadBuffer = new char[sizeOfPacket];
m_BufferSize = sizeOfPacket;
}
// Read the rest of the message // Read the rest of the message
bytesReceived += m_Socket->read_some(boost size_t bytesReceived = m_Socket->read_some(boost
::asio::buffer((void*)(data + bytesReceived), sizeOfPacket - bytesReceived), ::asio::buffer((void*)(m_ReadBuffer), sizeOfPacket),
error); error);
if (error) { if (error) {
//LOG_ERROR("receive: %s", error.message().c_str()); //LOG_ERROR("receive: %s", error.message().c_str());
} }
if (sizeOfPacket > 1000000)
LOG_WARNING("The packets received are bigger than 1MB");
return bytesReceived; return bytesReceived;
} }
+52 -12
View File
@@ -7,8 +7,7 @@ TCPServer::TCPServer()
} }
TCPServer::~TCPServer() TCPServer::~TCPServer()
{ { }
}
void TCPServer::AcceptNewConnections(int& nextPlayerID, std::map<PlayerID, PlayerDefinition>& connectedPlayers) void TCPServer::AcceptNewConnections(int& nextPlayerID, std::map<PlayerID, PlayerDefinition>& connectedPlayers)
{ {
@@ -51,8 +50,8 @@ void TCPServer::handle_accept(boost::shared_ptr<tcp::socket> socket,
void TCPServer::Send(Packet & packet, PlayerDefinition & playerDefinition) void TCPServer::Send(Packet & packet, PlayerDefinition & playerDefinition)
{ {
try {
packet.UpdateSize(); packet.UpdateSize();
try {
int bytesSent = playerDefinition.TCPSocket->send( int bytesSent = playerDefinition.TCPSocket->send(
boost::asio::buffer(packet.Data(), packet.Size()), boost::asio::buffer(packet.Data(), packet.Size()),
0); 0);
@@ -77,34 +76,75 @@ void TCPServer::Disconnect()
} }
//void TCPServer::Receive(Packet & packet, PlayerDefinition & playerDefinition)
//{
// int bytesRead = readBuffer(m_ReadBuffer, playerDefinition);
// if (bytesRead > 0) {
// packet.ReconstructFromData(m_ReadBuffer, bytesRead);
// }
// lastReceivedSocket = playerDefinition.TCPSocket;
//}
//
//int TCPServer::readBuffer(char* data, PlayerDefinition & playerDefinition)
//{
// if (!playerDefinition.TCPSocket) {
// return 0;
// }
// boost::system::error_code error;
// // Read size of packet
// size_t bytesReceived = playerDefinition.TCPSocket->read_some(boost
// ::asio::buffer((void*)data, sizeof(int)),
// error);
// int sizeOfPacket = 0;
// memcpy(&sizeOfPacket, data, sizeof(int));
//
// // Read the rest of the message
// bytesReceived += playerDefinition.TCPSocket->read_some(boost
// ::asio::buffer((void*)(data + bytesReceived), sizeOfPacket - bytesReceived),
// error);
// if (error) {
// //LOG_ERROR("receive: %s", error.message().c_str());
// }
// return bytesReceived;
//}
void TCPServer::Receive(Packet & packet, PlayerDefinition & playerDefinition) void TCPServer::Receive(Packet & packet, PlayerDefinition & playerDefinition)
{ {
int bytesRead = readBuffer(m_ReadBuffer, playerDefinition); int bytesRead = readBuffer(playerDefinition);
if (bytesRead > 0) { if (bytesRead > 0) {
packet.ReconstructFromData(m_ReadBuffer, bytesRead); packet.ReconstructFromData(m_ReadBuffer, bytesRead);
} }
lastReceivedSocket = playerDefinition.TCPSocket; lastReceivedSocket = playerDefinition.TCPSocket;
} }
int TCPServer::readBuffer(char* data, PlayerDefinition & playerDefinition) int TCPServer::readBuffer(PlayerDefinition & playerDefinition)
{ {
if (!playerDefinition.TCPSocket) { if (!playerDefinition.TCPSocket) {
return 0; return 0;
} }
boost::system::error_code error; boost::system::error_code error;
// Read size of packet // Read size of packet
size_t bytesReceived = playerDefinition.TCPSocket->read_some(boost playerDefinition.TCPSocket->receive(boost
::asio::buffer((void*)data, sizeof(int)), ::asio::buffer((void*)m_ReadBuffer, sizeof(int)),
error); boost::asio::ip::tcp::socket::message_peek, error);
int sizeOfPacket = 0; unsigned int sizeOfPacket = 0;
memcpy(&sizeOfPacket, data, sizeof(int)); memcpy(&sizeOfPacket, m_ReadBuffer, sizeof(int));
// if the buffer is to small increase the size of it
if (sizeOfPacket > m_BufferSize) {
delete[] m_ReadBuffer;
m_ReadBuffer = new char[sizeOfPacket];
m_BufferSize = sizeOfPacket;
}
// Read the rest of the message // Read the rest of the message
bytesReceived += playerDefinition.TCPSocket->read_some(boost size_t bytesReceived = playerDefinition.TCPSocket->read_some(boost
::asio::buffer((void*)(data + bytesReceived), sizeOfPacket - bytesReceived), ::asio::buffer((void*)(m_ReadBuffer), sizeOfPacket),
error); error);
if (error) { if (error) {
//LOG_ERROR("receive: %s", error.message().c_str()); //LOG_ERROR("receive: %s", error.message().c_str());
} }
if (sizeOfPacket > 1000000)
LOG_WARNING("The packets received are bigger than 1MB");
return bytesReceived; return bytesReceived;
} }
+38 -6
View File
@@ -27,30 +27,62 @@ void UDPClient::Disconnect()
void UDPClient::Receive(Packet& packet) void UDPClient::Receive(Packet& packet)
{ {
int bytesRead = readBuffer(m_ReadBuffer); int bytesRead = readBuffer();
if (bytesRead > 0) { if (bytesRead > 0) {
packet.ReconstructFromData(m_ReadBuffer, bytesRead); packet.ReconstructFromData(m_ReadBuffer, bytesRead);
} }
} }
int UDPClient::readBuffer(char* data) int UDPClient::readBuffer()
{ {
//if (!m_Socket) {
// return 0;
//}
//boost::system::error_code error;
//int bytesReceived = m_Socket->receive_from(boost
// ::asio::buffer((void*)data, BUFFERSIZE),
// m_ReceiverEndpoint,
// 0, error);
//if (error) {
// //LOG_ERROR("receive: %s", error.message().c_str());
//}
//return bytesReceived;
if (!m_Socket) { if (!m_Socket) {
return 0; return 0;
} }
boost::system::error_code error; boost::system::error_code error;
int bytesReceived = m_Socket->receive_from(boost // Read size of packet
::asio::buffer((void*)data, BUFFERSIZE), m_Socket->receive(boost
m_ReceiverEndpoint, ::asio::buffer((void*)m_ReadBuffer, sizeof(int)),
0, error); boost::asio::ip::udp::socket::message_peek, error);
int sizeOfPacket = 0;
memcpy(&sizeOfPacket, m_ReadBuffer, sizeof(int));
// if the buffer is to small increase the size of it
if (sizeOfPacket > m_BufferSize) {
delete[] m_ReadBuffer;
m_ReadBuffer = new char[sizeOfPacket];
m_BufferSize = sizeOfPacket;
}
size_t availableData = m_Socket->available();
// Read the rest of the message
size_t bytesReceived = m_Socket->receive_from(boost
::asio::buffer((void*)(m_ReadBuffer),
sizeOfPacket),
m_ReceiverEndpoint, 0, error);
if (error) { if (error) {
//LOG_ERROR("receive: %s", error.message().c_str()); //LOG_ERROR("receive: %s", error.message().c_str());
} }
if (sizeOfPacket > 1000000)
LOG_WARNING("The packets received are bigger than 1MB");
return bytesReceived; return bytesReceived;
} }
void UDPClient::Send(Packet& packet) void UDPClient::Send(Packet& packet)
{ {
packet.UpdateSize();
m_Socket->send_to(boost::asio::buffer( m_Socket->send_to(boost::asio::buffer(
packet.Data(), packet.Data(),
packet.Size()), packet.Size()),
+42 -10
View File
@@ -10,6 +10,7 @@ UDPServer::~UDPServer()
void UDPServer::Send(Packet& packet, PlayerDefinition & playerDefinition) void UDPServer::Send(Packet& packet, PlayerDefinition & playerDefinition)
{ {
packet.UpdateSize();
try { try {
int bytesSent = m_Socket->send_to( int bytesSent = m_Socket->send_to(
boost::asio::buffer(packet.Data(), packet.Size()), boost::asio::buffer(packet.Data(), packet.Size()),
@@ -23,6 +24,7 @@ void UDPServer::Send(Packet& packet, PlayerDefinition & playerDefinition)
// Send back to endpoint of received packet // Send back to endpoint of received packet
void UDPServer::Send(Packet & packet) void UDPServer::Send(Packet & packet)
{ {
packet.UpdateSize();
m_Socket->send_to( m_Socket->send_to(
boost::asio::buffer( boost::asio::buffer(
packet.Data(), packet.Data(),
@@ -33,7 +35,7 @@ void UDPServer::Send(Packet & packet)
void UDPServer::Receive(Packet & packet, PlayerDefinition & playerDefinition) void UDPServer::Receive(Packet & packet, PlayerDefinition & playerDefinition)
{ {
int bytesRead = readBuffer(m_ReadBuffer); int bytesRead = readBuffer();
if (bytesRead > 0) { if (bytesRead > 0) {
packet.ReconstructFromData(m_ReadBuffer, bytesRead); packet.ReconstructFromData(m_ReadBuffer, bytesRead);
} }
@@ -45,17 +47,47 @@ bool UDPServer::IsSocketAvailable()
return m_Socket->available(); return m_Socket->available();
} }
int UDPServer::readBuffer(char* data) int UDPServer::readBuffer()
{ {
boost::system::error_code error = boost::asio::error::host_not_found; //boost::system::error_code error = boost::asio::error::host_not_found;
unsigned int length = m_Socket->receive_from( //unsigned int length = m_Socket->receive_from(
boost::asio::buffer((void*)data // boost::asio::buffer((void*)data
, BUFFERSIZE) // , BUFFERSIZE)
, m_ReceiverEndpoint, 0, error); // , m_ReceiverEndpoint, 0, error);
if (error) { //if (error) {
LOG_WARNING(error.message().c_str()); // LOG_WARNING(error.message().c_str());
//}
//return length;
if (!m_Socket) {
return 0;
} }
return length; boost::system::error_code error;
// Read size of packet
m_Socket->receive_from(boost
::asio::buffer((void*)m_ReadBuffer, sizeof(int)),
m_ReceiverEndpoint, boost::asio::ip::udp::socket::message_peek, error);
unsigned int sizeOfPacket = 0;
memcpy(&sizeOfPacket, m_ReadBuffer, sizeof(int));
// if the buffer is to small increase the size of it
if (sizeOfPacket > m_BufferSize) {
delete[] m_ReadBuffer;
m_ReadBuffer = new char[sizeOfPacket];
m_BufferSize = sizeOfPacket;
}
// Read the rest of the message
size_t bytesReceived = m_Socket->receive_from(boost
::asio::buffer((void*)(m_ReadBuffer),
sizeOfPacket),
m_ReceiverEndpoint, 0, error);
if (error) {
//LOG_ERROR("receive: %s", error.message().c_str());
}
if (sizeOfPacket > 1000000)
LOG_WARNING("The packets received are bigger than 1MB");
return bytesReceived;
} }
void UDPServer::AcceptNewConnections(int& nextPlayerID, std::map<PlayerID, PlayerDefinition>& connectedPlayers) void UDPServer::AcceptNewConnections(int& nextPlayerID, std::map<PlayerID, PlayerDefinition>& connectedPlayers)
+9
View File
@@ -121,6 +121,15 @@ void DrawBloomPass::Draw(GLuint texture)
GLERROR("DrawBloomPass::Draw: END"); GLERROR("DrawBloomPass::Draw: END");
} }
void DrawBloomPass::OnWindowResize()
{
GenerateTexture(&m_GaussianTexture_vert, GL_CLAMP_TO_EDGE, GL_LINEAR, glm::vec2(m_Renderer->GetViewportSize().Width, m_Renderer->GetViewportSize().Height), GL_RGB16F, GL_RGB, GL_FLOAT);
m_GaussianFrameBuffer_vert.Generate();
GenerateTexture(&m_GaussianTexture_horiz, GL_CLAMP_TO_EDGE, GL_LINEAR, glm::vec2(m_Renderer->GetViewportSize().Width, m_Renderer->GetViewportSize().Height), GL_RGB16F, GL_RGB, GL_FLOAT);
m_GaussianFrameBuffer_horiz.Generate();
}
void DrawBloomPass::GenerateTexture(GLuint* texture, GLenum wrapping, GLenum filtering, glm::vec2 dimensions, GLint internalFormat, GLint format, GLenum type) const void DrawBloomPass::GenerateTexture(GLuint* texture, GLenum wrapping, GLenum filtering, glm::vec2 dimensions, GLint internalFormat, GLint format, GLenum type) const
{ {
glGenTextures(1, texture); glGenTextures(1, texture);
+30 -5
View File
@@ -274,6 +274,27 @@ void DrawFinalPass::ClearBuffer()
m_FinalPassFrameBuffer.Unbind(); m_FinalPassFrameBuffer.Unbind();
} }
void DrawFinalPass::OnWindowResize()
{
//InitializeFrameBuffers();
glBindRenderbuffer(GL_RENDERBUFFER, m_DepthBuffer);
glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH24_STENCIL8, m_Renderer->GetViewportSize().Width, m_Renderer->GetViewportSize().Height);
GenerateTexture(&m_SceneTexture, GL_CLAMP_TO_EDGE, GL_LINEAR, glm::vec2(m_Renderer->GetViewportSize().Width, m_Renderer->GetViewportSize().Height), GL_RGB16F, GL_RGB, GL_FLOAT);
GenerateTexture(&m_BloomTexture, GL_CLAMP_TO_EDGE, GL_LINEAR, glm::vec2(m_Renderer->GetViewportSize().Width, m_Renderer->GetViewportSize().Height), GL_RGB16F, GL_RGB, GL_FLOAT);
m_FinalPassFrameBuffer.Generate();
glBindRenderbuffer(GL_RENDERBUFFER, m_DepthBufferLowRes);
glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH24_STENCIL8, (int)(m_Renderer->GetViewportSize().Width/m_ShieldPixelRate), (int)(m_Renderer->GetViewportSize().Height/m_ShieldPixelRate));
GenerateTexture(&m_SceneTextureLowRes, GL_CLAMP_TO_EDGE, GL_NEAREST, glm::vec2((int)(m_Renderer->GetViewportSize().Width/m_ShieldPixelRate), (int)(m_Renderer->GetViewportSize().Height/m_ShieldPixelRate)), GL_RGB16F, GL_RGB, GL_FLOAT);
GenerateTexture(&m_BloomTextureLowRes, GL_CLAMP_TO_EDGE, GL_NEAREST, glm::vec2((int)(m_Renderer->GetViewportSize().Width/m_ShieldPixelRate), (int)(m_Renderer->GetViewportSize().Height/m_ShieldPixelRate)), GL_RGB16F, GL_RGB, GL_FLOAT);
m_FinalPassFrameBufferLowRes.Generate();
GLERROR("Error changing texture resolutions");
}
void DrawFinalPass::GenerateTexture(GLuint* texture, GLenum wrapping, GLenum filtering, glm::vec2 dimensions, GLint internalFormat, GLint format, GLenum type) const void DrawFinalPass::GenerateTexture(GLuint* texture, GLenum wrapping, GLenum filtering, glm::vec2 dimensions, GLint internalFormat, GLint format, GLenum type) const
{ {
glGenTextures(1, texture); glGenTextures(1, texture);
@@ -689,9 +710,6 @@ void DrawFinalPass::DrawSprites(std::list<std::shared_ptr<RenderJob>>&jobs, Rend
glDrawElements(GL_TRIANGLES, spriteJob->EndIndex - spriteJob->StartIndex + 1, GL_UNSIGNED_INT, (void*)(spriteJob->StartIndex*sizeof(unsigned int))); glDrawElements(GL_TRIANGLES, spriteJob->EndIndex - spriteJob->StartIndex + 1, GL_UNSIGNED_INT, (void*)(spriteJob->StartIndex*sizeof(unsigned int)));
} }
} }
// m_SpriteProgram->Unbind(); // m_SpriteProgram->Unbind();
} }
@@ -705,7 +723,7 @@ void DrawFinalPass::BindExplosionUniforms(GLuint shaderHandle, std::shared_ptr<E
glUniformMatrix4fv(glGetUniformLocation(shaderHandle, "P"), 1, GL_FALSE, glm::value_ptr(scene.Camera->ProjectionMatrix())); glUniformMatrix4fv(glGetUniformLocation(shaderHandle, "P"), 1, GL_FALSE, glm::value_ptr(scene.Camera->ProjectionMatrix()));
GLERROR("Bind 4 uniform"); GLERROR("Bind 4 uniform");
glUniform2f(glGetUniformLocation(shaderHandle, "ScreenDimensions"), m_Renderer->Resolution().Width, m_Renderer->Resolution().Height); glUniform2f(glGetUniformLocation(shaderHandle, "ScreenDimensions"), m_Renderer->GetViewportSize().Width, m_Renderer->GetViewportSize().Height);
GLERROR("Bind 5 uniform"); GLERROR("Bind 5 uniform");
glUniform3fv(glGetUniformLocation(shaderHandle, "ExplosionOrigin"), 1, glm::value_ptr(job->ExplosionOrigin)); glUniform3fv(glGetUniformLocation(shaderHandle, "ExplosionOrigin"), 1, glm::value_ptr(job->ExplosionOrigin));
@@ -738,6 +756,8 @@ void DrawFinalPass::BindExplosionUniforms(GLuint shaderHandle, std::shared_ptr<E
glUniform1f(glGetUniformLocation(shaderHandle, "FillPercentage"), job->FillPercentage); glUniform1f(glGetUniformLocation(shaderHandle, "FillPercentage"), job->FillPercentage);
GLERROR("Bind 19 uniform"); GLERROR("Bind 19 uniform");
glUniform4fv(glGetUniformLocation(shaderHandle, "AmbientColor"), 1, glm::value_ptr(scene.AmbientColor)); glUniform4fv(glGetUniformLocation(shaderHandle, "AmbientColor"), 1, glm::value_ptr(scene.AmbientColor));
GLERROR("Bind 20 uniform");
glUniform1f(glGetUniformLocation(shaderHandle, "GlowIntensity"), job->GlowIntensity);
GLERROR("END"); GLERROR("END");
} }
@@ -755,7 +775,7 @@ void DrawFinalPass::BindModelUniforms(GLuint shaderHandle, std::shared_ptr<Model
GLERROR("Bind 4 uniform"); GLERROR("Bind 4 uniform");
GLint Location_ScreenDimensions = glGetUniformLocation(shaderHandle, "ScreenDimensions"); GLint Location_ScreenDimensions = glGetUniformLocation(shaderHandle, "ScreenDimensions");
glUniform2f(Location_ScreenDimensions, m_Renderer->Resolution().Width, m_Renderer->Resolution().Height); glUniform2f(Location_ScreenDimensions, m_Renderer->GetViewportSize().Width, m_Renderer->GetViewportSize().Height);
GLERROR("Bind 5 uniform"); GLERROR("Bind 5 uniform");
GLint Location_FillPercentage = glGetUniformLocation(shaderHandle, "FillPercentage"); GLint Location_FillPercentage = glGetUniformLocation(shaderHandle, "FillPercentage");
@@ -773,6 +793,11 @@ void DrawFinalPass::BindModelUniforms(GLuint shaderHandle, std::shared_ptr<Model
GLint Location_AmbientColor = glGetUniformLocation(shaderHandle, "AmbientColor"); GLint Location_AmbientColor = glGetUniformLocation(shaderHandle, "AmbientColor");
glUniform4fv(Location_AmbientColor, 1, glm::value_ptr(scene.AmbientColor)); glUniform4fv(Location_AmbientColor, 1, glm::value_ptr(scene.AmbientColor));
GLERROR("Bind 10 uniform");
GLint Location_GlowIntensity = glGetUniformLocation(shaderHandle, "GlowIntensity");
glUniform1f(Location_GlowIntensity, job->GlowIntensity);
GLERROR("END"); GLERROR("END");
} }
+2 -2
View File
@@ -72,8 +72,8 @@ void FrameBuffer::Generate()
GLenum* bufferTextures = &attachments[0]; GLenum* bufferTextures = &attachments[0];
glDrawBuffers(attachments.size(), bufferTextures); glDrawBuffers(attachments.size(), bufferTextures);
if(GLERROR("4")) { if (GLERROR("GLBufferAttachement error")) {
printf("hello"); printf(": AttachmentSize %i", attachments.size());
} }
if (GLenum frameBufferStatus = glCheckFramebufferStatus(GL_FRAMEBUFFER) != GL_FRAMEBUFFER_COMPLETE) { if (GLenum frameBufferStatus = glCheckFramebufferStatus(GL_FRAMEBUFFER) != GL_FRAMEBUFFER_COMPLETE) {
+28
View File
@@ -110,6 +110,34 @@ void LightCullingPass::FillLightList(RenderScene& scene)
} }
} }
void LightCullingPass::OnWindowResize()
{
SetSSBOSizes();
glBindBuffer(GL_SHADER_STORAGE_BUFFER, m_FrustumSSBO);
glBufferData(GL_SHADER_STORAGE_BUFFER, sizeof(Frustum)*m_NumberOfTiles, nullptr, GL_DYNAMIC_COPY);
GLERROR("m_FrustumSSBO");
glBindBuffer(GL_SHADER_STORAGE_BUFFER, m_LightSSBO);
glBufferData(GL_SHADER_STORAGE_BUFFER, sizeof(LightSource) * 200, nullptr, GL_DYNAMIC_COPY);
GLERROR("m_LightSSBO");
glBindBuffer(GL_SHADER_STORAGE_BUFFER, m_LightGridSSBO);
glBufferData(GL_SHADER_STORAGE_BUFFER, sizeof(LightGrid)*m_NumberOfTiles, nullptr, GL_DYNAMIC_COPY);
GLERROR("m_LightGridSSBO");
glBindBuffer(GL_SHADER_STORAGE_BUFFER, m_LightOffsetSSBO);
glBufferData(GL_SHADER_STORAGE_BUFFER, sizeof(m_LightOffset), &m_LightOffset, GL_DYNAMIC_COPY);
GLERROR("m_LightOffsetSSBO");
glBindBuffer(GL_SHADER_STORAGE_BUFFER, m_LightIndexSSBO);
glBufferData(GL_SHADER_STORAGE_BUFFER, sizeof(float)*m_NumberOfTiles*MAX_LIGHTS_PER_TILE, m_LightIndex, GL_DYNAMIC_COPY);
GLERROR("m_LightIndexSSBO");
glBindBuffer(GL_SHADER_STORAGE_BUFFER, 0);
}
void LightCullingPass::InitializeSSBOs() void LightCullingPass::InitializeSSBOs()
{ {
glGenBuffers(1, &m_FrustumSSBO); glGenBuffers(1, &m_FrustumSSBO);
+57 -2
View File
@@ -15,6 +15,8 @@ PickingPass::~PickingPass()
} }
void PickingPass::InitializeTextures() void PickingPass::InitializeTextures()
{ {
GenerateTexture(&m_PickingTexture, GL_CLAMP_TO_BORDER, GL_LINEAR, GenerateTexture(&m_PickingTexture, GL_CLAMP_TO_BORDER, GL_LINEAR,
@@ -234,6 +236,52 @@ void PickingPass::Draw(RenderScene& scene)
} }
} }
for (auto& job : scene.Jobs.SpriteJob) {
auto spriteJob = std::dynamic_pointer_cast<SpriteJob>(job);
if (!spriteJob->Pickable) {
continue;
}
RenderState jobState;
if (spriteJob) {
if (spriteJob->Depth == 0) {
jobState.Disable(GL_DEPTH_TEST);
}
int pickColor[2] = { m_ColorCounter[0], m_ColorCounter[1] };
PickingInfo pickInfo;
pickInfo.Entity = spriteJob->Entity;
pickInfo.World = spriteJob->World;
pickInfo.Camera = scene.Camera;
auto color = m_EntityColors.find(std::make_tuple(pickInfo.Entity, pickInfo.World, pickInfo.Camera));
if (color != m_EntityColors.end()) {
pickColor[0] = color->second[0];
pickColor[1] = color->second[1];
} else {
m_EntityColors[std::make_tuple(pickInfo.Entity, pickInfo.World, pickInfo.Camera)] = glm::ivec2(pickColor[0], pickColor[1]);
if (m_ColorCounter[0] > 255) {
m_ColorCounter[0] = 0;
m_ColorCounter[1] += 1;
} else {
m_ColorCounter[0] += 1;
}
}
m_PickingColorsToEntity[glm::ivec2(pickColor[0], pickColor[1])] = pickInfo;
m_PickingProgram->Bind();
glUniformMatrix4fv(glGetUniformLocation(shaderHandle, "M"), 1, GL_FALSE, glm::value_ptr(spriteJob->Matrix));
glUniformMatrix4fv(glGetUniformLocation(shaderHandle, "V"), 1, GL_FALSE, glm::value_ptr(scene.Camera->ViewMatrix()));
glUniformMatrix4fv(glGetUniformLocation(shaderHandle, "P"), 1, GL_FALSE, glm::value_ptr(scene.Camera->ProjectionMatrix()));
glUniform2fv(glGetUniformLocation(shaderHandle, "PickingColor"), 1, glm::value_ptr(glm::vec2(pickColor[0], pickColor[1])));
glBindVertexArray(spriteJob->Model->VAO);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, spriteJob->Model->ElementBuffer);
glDrawElements(GL_TRIANGLES, spriteJob->EndIndex - spriteJob->StartIndex + 1, GL_UNSIGNED_INT, (void*)(spriteJob->StartIndex * sizeof(unsigned int)));
}
}
/* for (auto &job : scene.Jobs.TransparentShieldedObjects) { /* for (auto &job : scene.Jobs.TransparentShieldedObjects) {
auto modelJob = std::dynamic_pointer_cast<ModelJob>(job); auto modelJob = std::dynamic_pointer_cast<ModelJob>(job);
@@ -306,8 +354,6 @@ void PickingPass::Draw(RenderScene& scene)
delete state; delete state;
} }
void PickingPass::ClearPicking() void PickingPass::ClearPicking()
{ {
m_PickingColorsToEntity.clear(); m_PickingColorsToEntity.clear();
@@ -321,6 +367,15 @@ void PickingPass::ClearPicking()
m_PickingBuffer.Unbind(); m_PickingBuffer.Unbind();
} }
void PickingPass::OnWindowResize()
{
InitializeTextures();
glBindRenderbuffer(GL_RENDERBUFFER, m_DepthBuffer);
glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT, m_Renderer->GetViewportSize().Width, m_Renderer->GetViewportSize().Height);
m_PickingBuffer.Generate();
}
PickData PickingPass::Pick(glm::vec2 screenCoord) PickData PickingPass::Pick(glm::vec2 screenCoord)
{ {
int fbWidth; int fbWidth;
+35 -3
View File
@@ -1,5 +1,7 @@
#include "Rendering/Renderer.h" #include "Rendering/Renderer.h"
std::unordered_map<GLFWwindow*, Renderer*> Renderer::m_WindowToRenderer;
void Renderer::Initialize() void Renderer::Initialize()
{ {
InitializeWindow(); InitializeWindow();
@@ -12,7 +14,6 @@ void Renderer::Initialize()
m_TextPass = new TextPass(); m_TextPass = new TextPass();
m_TextPass->Initialize(); m_TextPass->Initialize();
/* m_ScreenQuad = ResourceManager::Load<Model>("Models/Core/ScreenQuad.obj"); /* m_ScreenQuad = ResourceManager::Load<Model>("Models/Core/ScreenQuad.obj");
m_UnitQuad = ResourceManager::Load<Model>("Models/Core/UnitQuad.obj"); m_UnitQuad = ResourceManager::Load<Model>("Models/Core/UnitQuad.obj");
m_UnitSphere = ResourceManager::Load<Model>("Models/Core/UnitSphere.obj");*/ m_UnitSphere = ResourceManager::Load<Model>("Models/Core/UnitSphere.obj");*/
@@ -20,6 +21,17 @@ void Renderer::Initialize()
m_ImGuiRenderPass = new ImGuiRenderPass(this, m_EventBroker); m_ImGuiRenderPass = new ImGuiRenderPass(this, m_EventBroker);
} }
void Renderer::glfwFrameBufferCallback(GLFWwindow* window, int width, int height)
{
glViewport(0, 0, width, height);
Renderer* currentRenderer = m_WindowToRenderer[window];
currentRenderer->m_ViewportSize = Rectangle(width, height);
currentRenderer->m_DrawFinalPass->OnWindowResize();
currentRenderer->m_LightCullingPass->OnWindowResize();
currentRenderer->m_PickingPass->OnWindowResize();
currentRenderer->m_DrawBloomPass->OnWindowResize();
}
void Renderer::InitializeWindow() void Renderer::InitializeWindow()
{ {
// Initialize GLFW // Initialize GLFW
@@ -39,6 +51,7 @@ void Renderer::InitializeWindow()
LOG_ERROR("GLFW: Failed to create window"); LOG_ERROR("GLFW: Failed to create window");
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
} }
glfwSetFramebufferSizeCallback(m_Window, &glfwFrameBufferCallback);
glfwMakeContextCurrent(m_Window); glfwMakeContextCurrent(m_Window);
// GL version info // GL version info
@@ -59,8 +72,10 @@ void Renderer::InitializeWindow()
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
} }
m_WindowToRenderer[m_Window] = this;
int windowSize[2]; int windowSize[2];
glfwGetWindowSize(m_Window, &windowSize[0], &windowSize[1]); glfwGetFramebufferSize(m_Window, &windowSize[0], &windowSize[1]);
m_ViewportSize = Rectangle(windowSize[0], windowSize[1]); m_ViewportSize = Rectangle(windowSize[0], windowSize[1]);
} }
@@ -99,34 +114,48 @@ void Renderer::Draw(RenderFrame& frame)
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
//Clear other buffers //Clear other buffers
PerformanceTimer::StartTimer("Renderer-ClearBuffers");
m_PickingPass->ClearPicking(); m_PickingPass->ClearPicking();
m_DrawFinalPass->ClearBuffer(); m_DrawFinalPass->ClearBuffer();
m_DrawBloomPass->ClearBuffer(); m_DrawBloomPass->ClearBuffer();
PerformanceTimer::StopTimer("Renderer-ClearBuffers");
for (auto scene : frame.RenderScenes){ for (auto scene : frame.RenderScenes){
PerformanceTimer::StartTimer("Renderer-Depth");
SortRenderJobsByDepth(*scene); SortRenderJobsByDepth(*scene);
GLERROR("SortByDepth"); GLERROR("SortByDepth");
PerformanceTimer::StartTimerAndStopPrevious("Renderer-Drawing PickingPass");
m_PickingPass->Draw(*scene); m_PickingPass->Draw(*scene);
GLERROR("Drawing pickingpass"); GLERROR("Drawing pickingpass");
PerformanceTimer::StartTimerAndStopPrevious("Renderer-Generate Frustrums");
m_LightCullingPass->GenerateNewFrustum(*scene); m_LightCullingPass->GenerateNewFrustum(*scene);
GLERROR("Generate frustums"); GLERROR("Generate frustums");
PerformanceTimer::StartTimerAndStopPrevious("Renderer-Filling Light List");
m_LightCullingPass->FillLightList(*scene); m_LightCullingPass->FillLightList(*scene);
GLERROR("Filling light list"); GLERROR("Filling light list");
PerformanceTimer::StartTimerAndStopPrevious("Renderer-Light Culling");
m_LightCullingPass->CullLights(*scene); m_LightCullingPass->CullLights(*scene);
GLERROR("LightCulling"); GLERROR("LightCulling");
PerformanceTimer::StartTimerAndStopPrevious("Renderer-Draw Geometry+Light");
m_DrawFinalPass->Draw(*scene); m_DrawFinalPass->Draw(*scene);
GLERROR("Draw Geometry+Light"); GLERROR("Draw Geometry+Light");
//m_DrawScenePass->Draw(*scene); //m_DrawScenePass->Draw(*scene);
PerformanceTimer::StartTimerAndStopPrevious("Renderer-Draw Text");
m_TextPass->Draw(*scene, *m_DrawFinalPass->FinalPassFrameBuffer()); m_TextPass->Draw(*scene, *m_DrawFinalPass->FinalPassFrameBuffer());
GLERROR("Draw Text"); GLERROR("Draw Text");
PerformanceTimer::StopTimer("Renderer-Draw Text");
} }
PerformanceTimer::StartTimer("Renderer-Draw Bloom");
m_DrawBloomPass->Draw(m_DrawFinalPass->BloomTexture()); m_DrawBloomPass->Draw(m_DrawFinalPass->BloomTexture());
PerformanceTimer::StopTimer("Renderer-Draw Bloom");
if (m_DebugTextureToDraw == 0) { if (m_DebugTextureToDraw == 0) {
PerformanceTimer::StartTimer("Renderer-Color Correction Pass");
m_DrawColorCorrectionPass->Draw(m_DrawFinalPass->SceneTexture(), m_DrawBloomPass->GaussianTexture(), m_DrawFinalPass->SceneTextureLowRes(), m_DrawFinalPass->BloomTextureLowRes(), frame.Gamma, frame.Exposure); m_DrawColorCorrectionPass->Draw(m_DrawFinalPass->SceneTexture(), m_DrawBloomPass->GaussianTexture(), m_DrawFinalPass->SceneTextureLowRes(), m_DrawFinalPass->BloomTextureLowRes(), frame.Gamma, frame.Exposure);
PerformanceTimer::StopTimer("Renderer-Color Correction Pass");
} }
PerformanceTimer::StartTimer("Renderer-Misc Debug Draws");
if (m_DebugTextureToDraw == 1) { if (m_DebugTextureToDraw == 1) {
m_DrawScreenQuadPass->Draw(m_DrawFinalPass->SceneTexture()); m_DrawScreenQuadPass->Draw(m_DrawFinalPass->SceneTexture());
} }
@@ -145,10 +174,13 @@ void Renderer::Draw(RenderFrame& frame)
if (m_DebugTextureToDraw == 6) { if (m_DebugTextureToDraw == 6) {
m_DrawScreenQuadPass->Draw(m_PickingPass->PickingTexture()); m_DrawScreenQuadPass->Draw(m_PickingPass->PickingTexture());
} }
PerformanceTimer::StopTimer("Renderer-Misc Debug Draws");
PerformanceTimer::StartTimer("Renderer-ImGuiRenderPass");
m_ImGuiRenderPass->Draw(); m_ImGuiRenderPass->Draw();
GLERROR("Imgui draw"); GLERROR("Imgui draw");
glfwSwapBuffers(m_Window); glfwSwapBuffers(m_Window);
PerformanceTimer::StopTimer("Renderer-ImGuiRenderPass");
} }
PickData Renderer::Pick(glm::vec2 screenCoord) PickData Renderer::Pick(glm::vec2 screenCoord)
-5
View File
@@ -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;

Some files were not shown because too many files have changed in this diff Show More