Compare commits
189 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| df485ccf7b | |||
| 85a4d98c81 | |||
| ef020a3770 | |||
| 160b7183b2 | |||
| 5edf5a41f1 | |||
| ff6ec82a6c | |||
| bd62b5873d | |||
| d59ab5aba2 | |||
| f623232a2b | |||
| 6a18cb88af | |||
| b499f4b020 | |||
| bef95235d0 | |||
| 9a23d8887a | |||
| e4513376bb | |||
| 445248af55 | |||
| 64a7239b17 | |||
| 7498cebf5e | |||
| 2b8debbfff | |||
| caf55fb8d1 | |||
| 6f739e22f3 | |||
| 8cf83454d7 | |||
| 41f0daaf3f | |||
| deb6ff1b16 | |||
| 4d60f387ed | |||
| f740d46683 | |||
| 75dcdcec41 | |||
| 254caf9e5d | |||
| 1c6750f5b0 | |||
| 3548cfa248 | |||
| 973ccd34c9 | |||
| 43b8fd29f6 | |||
| a6548a72b3 | |||
| 7deb32431e | |||
| fc06a4babc | |||
| c6e9aad0c7 | |||
| afe43c5f44 | |||
| 2381f01d12 | |||
| b9147344e1 | |||
| 70bbc5ed0a | |||
| 0183e1bdb7 | |||
| 983f90504d | |||
| bdebc9de62 | |||
| f1345419b6 | |||
| 5e70d6eef6 | |||
| 4aa9100c69 | |||
| 7b34e001ba | |||
| c2e05de89f | |||
| ea9c4d19d0 | |||
| f3bfe388af | |||
| 70cab9ef30 | |||
| f1a54a89b3 | |||
| b098bd2bd3 | |||
| 60037c2849 | |||
| cd67253173 | |||
| a596b8746b | |||
| 35876f6425 | |||
| f6ce98249e | |||
| 00588b07c5 | |||
| 3376f4a16e | |||
| 25d2aa3464 | |||
| 29aefc5af2 | |||
| 39ae83efd4 | |||
| 86824f1b1f | |||
| 8189e3c00c | |||
| 4d01cdf895 | |||
| 7e7ca7edcf | |||
| e9a576341e | |||
| f52cddb445 | |||
| 78a1037983 | |||
| 85523343b2 | |||
| 410e349329 | |||
| ce27b224df | |||
| b45de542da | |||
| f0763bc2a3 | |||
| dfa96f74e1 | |||
| 5d6d0f82b9 | |||
| a124ab2400 | |||
| d2263b0c90 | |||
| a8ffb24040 | |||
| 893ef38237 | |||
| f197993beb | |||
| ad9bb5fba4 | |||
| 982837052a | |||
| 8854794cbc | |||
| e0c4394f20 | |||
| 260203fa4d | |||
| d030e8f699 | |||
| 61984d2c4a | |||
| cfe023cc1d | |||
| 4cafb2fc4c | |||
| 46e17b7e0d | |||
| a6445c65aa | |||
| 162523d3ca | |||
| dbe56280a6 | |||
| 3fb975a8d9 | |||
| 267a60ef30 | |||
| 68af853a03 | |||
| 3142c701e3 | |||
| b62e42567c | |||
| 9e3dfff7b6 | |||
| 79eaa7364c | |||
| 51979d7f0c | |||
| 3fc44e944c | |||
| 1760f9dfb1 | |||
| d4242bbead | |||
| 631dd57eeb | |||
| 9cb5f4bd2f | |||
| a6425160fd | |||
| 88eb3ca2db | |||
| 3e90ed564c | |||
| 4b29d48f27 | |||
| c4594524da | |||
| 2a93e2ae7f | |||
| 14b1d541dc | |||
| 765509b510 | |||
| 8952c1a7e4 | |||
| fc305f8bf4 | |||
| 62c3f72355 | |||
| 92553f1e93 | |||
| 70cbb02cb2 | |||
| 0c7f2c5198 | |||
| d7780d8248 | |||
| 601ce85c05 | |||
| 4c1a49a8a4 | |||
| 01a164847c | |||
| 794635b6a1 | |||
| 0a3b6f4da1 | |||
| 3bc7dceca5 | |||
| e0410d4345 | |||
| 6f1fd19ac7 | |||
| 6680f6863f | |||
| 4092f6b4d4 | |||
| 504f301e4d | |||
| 6ba6deb863 | |||
| cc604f8e9a | |||
| e97f4a3563 | |||
| d995713d3b | |||
| e39e4064f2 | |||
| 0d50ede6f5 | |||
| 4786986abd | |||
| e34856468a | |||
| e2357b8625 | |||
| 6ec2258758 | |||
| 9f447afbdb | |||
| 7faed50507 | |||
| 6fbb962b5e | |||
| db62d767ac | |||
| e7da11fda4 | |||
| 8f257b9a58 | |||
| c8fe6853c0 | |||
| 76a8b43ca3 | |||
| 0bf756dc08 | |||
| 696f44a673 | |||
| 5e9a3774ab | |||
| db18a45368 | |||
| a060640da3 | |||
| b8a41b7c13 | |||
| 9533920684 | |||
| f47f913bf5 | |||
| ed5ac2e923 | |||
| 7a8604bf2b | |||
| 3a1056a2c3 | |||
| 59be714fdc | |||
| 147b116f20 | |||
| f0b425614d | |||
| 4b672b11e7 | |||
| e865971fdd | |||
| 878c71b56a | |||
| ec4d5fbfa8 | |||
| 184af95507 | |||
| e6527196ed | |||
| c14f3789f7 | |||
| a20ca49d53 | |||
| 774bb8ce56 | |||
| 0cc58f088a | |||
| 00805d30d0 | |||
| 2f6261dfbf | |||
| 2cd0e94a60 | |||
| 8f92de3683 | |||
| 31c1c0ac8d | |||
| 7ae42a5bf7 | |||
| 123c198e19 | |||
| 9bd3da409d | |||
| a8a38716bd | |||
| 8f007f6daf | |||
| 4c2ce3882e | |||
| 7b6902eafe | |||
| 46854a63dd | |||
| dc66891d60 |
+1
-1
Submodule assets updated: a3c92ac876...e8174f630f
@@ -8,14 +8,14 @@
|
|||||||
class CollidableOctreeSystem : public ImpureSystem, public PureSystem
|
class CollidableOctreeSystem : public ImpureSystem, public PureSystem
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
CollidableOctreeSystem(EventBroker* eventBroker, Octree<AABB>* octree)
|
CollidableOctreeSystem(World* world, EventBroker* eventBroker, Octree<AABB>* octree)
|
||||||
: System(eventBroker)
|
: System(world, eventBroker)
|
||||||
, PureSystem("Collidable")
|
, PureSystem("Collidable")
|
||||||
, m_Octree(octree)
|
, m_Octree(octree)
|
||||||
{ }
|
{ }
|
||||||
|
|
||||||
virtual void Update(World* world, double dt) override;
|
virtual void Update(double dt) override;
|
||||||
virtual void UpdateComponent(World* world, EntityWrapper& entity, ComponentWrapper& component, double dt) override;
|
virtual void UpdateComponent(EntityWrapper& entity, ComponentWrapper& component, double dt) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Octree<AABB>* m_Octree;
|
Octree<AABB>* m_Octree;
|
||||||
|
|||||||
@@ -13,8 +13,8 @@
|
|||||||
class CollisionSystem : public PureSystem
|
class CollisionSystem : public PureSystem
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
CollisionSystem(EventBroker* eventBroker, Octree<AABB>* octree)
|
CollisionSystem(World* world, EventBroker* eventBroker, Octree<AABB>* octree)
|
||||||
: System(eventBroker)
|
: System(world, eventBroker)
|
||||||
, PureSystem("Collidable")
|
, PureSystem("Collidable")
|
||||||
, m_Octree(octree)
|
, m_Octree(octree)
|
||||||
, zPress(false)
|
, zPress(false)
|
||||||
@@ -23,7 +23,7 @@ public:
|
|||||||
EVENT_SUBSCRIBE_MEMBER(m_EKeyUp, &CollisionSystem::OnKeyUp);
|
EVENT_SUBSCRIBE_MEMBER(m_EKeyUp, &CollisionSystem::OnKeyUp);
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual void UpdateComponent(World* world, EntityWrapper& entity, ComponentWrapper& component, double dt) override;
|
virtual void UpdateComponent(EntityWrapper& entity, ComponentWrapper& component, double dt) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Octree<AABB>* m_Octree;
|
Octree<AABB>* m_Octree;
|
||||||
|
|||||||
@@ -14,8 +14,8 @@ class AABB;
|
|||||||
class TriggerSystem : public PureSystem
|
class TriggerSystem : public PureSystem
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
TriggerSystem(EventBroker* eventBroker, Octree<AABB>* octree)
|
TriggerSystem(World* world, EventBroker* eventBroker, Octree<AABB>* octree)
|
||||||
: System(eventBroker)
|
: System(world, eventBroker)
|
||||||
, PureSystem("Trigger")
|
, PureSystem("Trigger")
|
||||||
, m_Octree(octree)
|
, m_Octree(octree)
|
||||||
{
|
{
|
||||||
@@ -24,7 +24,7 @@ public:
|
|||||||
EVENT_SUBSCRIBE_MEMBER(m_ELeave, &TriggerSystem::OnLeave);
|
EVENT_SUBSCRIBE_MEMBER(m_ELeave, &TriggerSystem::OnLeave);
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual void UpdateComponent(World* world, EntityWrapper& entity, ComponentWrapper& component, double dt) override;
|
virtual void UpdateComponent(EntityWrapper& entity, ComponentWrapper& component, double dt) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Octree<AABB>* m_Octree;
|
Octree<AABB>* m_Octree;
|
||||||
|
|||||||
@@ -4,6 +4,7 @@
|
|||||||
#include <vector>
|
#include <vector>
|
||||||
#include <map>
|
#include <map>
|
||||||
#include <unordered_map>
|
#include <unordered_map>
|
||||||
|
#include <algorithm>
|
||||||
|
|
||||||
#include "Core/Util/Logging.h"
|
#include "Core/Util/Logging.h"
|
||||||
#include "Core/Util/IfDebug.h"
|
#include "Core/Util/IfDebug.h"
|
||||||
@@ -5,12 +5,14 @@
|
|||||||
|
|
||||||
struct ComponentInfo
|
struct ComponentInfo
|
||||||
{
|
{
|
||||||
|
typedef int EnumType;
|
||||||
|
|
||||||
struct Meta_t
|
struct Meta_t
|
||||||
{
|
{
|
||||||
std::string Annotation;
|
std::string Annotation;
|
||||||
unsigned int Allocation = 0;
|
unsigned int Allocation = 0;
|
||||||
std::map<std::string, std::string> FieldAnnotations;
|
std::map<std::string, std::string> FieldAnnotations;
|
||||||
std::map<std::string, std::map<std::string, int>> FieldEnumDefinitions;
|
std::map<std::string, std::map<std::string, EnumType>> FieldEnumDefinitions;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct Field_t
|
struct Field_t
|
||||||
|
|||||||
@@ -61,6 +61,7 @@ public:
|
|||||||
|
|
||||||
iterator begin() const;
|
iterator begin() const;
|
||||||
iterator end() const;
|
iterator end() const;
|
||||||
|
size_t size() const;
|
||||||
|
|
||||||
//Dumps information about what the pool memory looks like right now
|
//Dumps information about what the pool memory looks like right now
|
||||||
//into an output stream (e.g. file/std::cout, anything that has an operator<<)
|
//into an output stream (e.g. file/std::cout, anything that has an operator<<)
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ struct ComponentWrapper
|
|||||||
const ::EntityID EntityID;
|
const ::EntityID EntityID;
|
||||||
char* Data;
|
char* Data;
|
||||||
|
|
||||||
int Enum(const char* fieldName, const char* enumKey)
|
ComponentInfo::EnumType Enum(const char* fieldName, const char* enumKey)
|
||||||
{
|
{
|
||||||
return Info.Meta->FieldEnumDefinitions.at(fieldName).at(enumKey);
|
return Info.Meta->FieldEnumDefinitions.at(fieldName).at(enumKey);
|
||||||
}
|
}
|
||||||
@@ -58,7 +58,7 @@ struct ComponentWrapper
|
|||||||
|
|
||||||
public:
|
public:
|
||||||
// Return the integer value of an enum type key for this field
|
// Return the integer value of an enum type key for this field
|
||||||
int Enum(const char* enumKey) { return m_Component->Enum(m_PropertyName.c_str(), enumKey); }
|
ComponentInfo::EnumType Enum(const char* enumKey) { return m_Component->Enum(m_PropertyName.c_str(), enumKey); }
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
operator T&() { return m_Component->Field<T>(m_PropertyName); }
|
operator T&() { return m_Component->Field<T>(m_PropertyName); }
|
||||||
@@ -91,7 +91,7 @@ public:
|
|||||||
void AddProperty(std::string fieldName, T defaultValue)
|
void AddProperty(std::string fieldName, T defaultValue)
|
||||||
{
|
{
|
||||||
m_DefaultValues.push_back(defaultValue);
|
m_DefaultValues.push_back(defaultValue);
|
||||||
m_ComponentInfo.Fields[fieldName].Name = typeid(T).name();
|
m_ComponentInfo.Fields[fieldName].Type = typeid(T).name();
|
||||||
m_ComponentInfo.Fields[fieldName].Offset = m_ComponentInfo.Stride;
|
m_ComponentInfo.Fields[fieldName].Offset = m_ComponentInfo.Stride;
|
||||||
m_ComponentInfo.Fields[fieldName].Stride = sizeof(T);
|
m_ComponentInfo.Fields[fieldName].Stride = sizeof(T);
|
||||||
m_ComponentInfo.Stride += sizeof(T);
|
m_ComponentInfo.Stride += sizeof(T);
|
||||||
|
|||||||
@@ -0,0 +1,20 @@
|
|||||||
|
#ifndef ECaptured_h__
|
||||||
|
#define ECaptured_h__
|
||||||
|
|
||||||
|
#include "EventBroker.h"
|
||||||
|
#include "../Core/Entity.h"
|
||||||
|
#include "Engine/GLM.h"
|
||||||
|
|
||||||
|
namespace Events
|
||||||
|
{
|
||||||
|
|
||||||
|
//triggers when a capturePoint has been taken over
|
||||||
|
struct Captured : Event
|
||||||
|
{
|
||||||
|
int TeamNumberThatCapturedCapturePoint;
|
||||||
|
EntityID CapturePointID;
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
@@ -11,6 +11,9 @@ struct KeyDown : Event
|
|||||||
{
|
{
|
||||||
/** GLFW key code */
|
/** GLFW key code */
|
||||||
int KeyCode;
|
int KeyCode;
|
||||||
|
bool ModCtrl;
|
||||||
|
bool ModAlt;
|
||||||
|
bool ModShift;
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,6 +11,9 @@ struct KeyUp : Event
|
|||||||
{
|
{
|
||||||
/** GLFW key code */
|
/** GLFW key code */
|
||||||
int KeyCode;
|
int KeyCode;
|
||||||
|
bool ModCtrl;
|
||||||
|
bool ModAlt;
|
||||||
|
bool ModShift;
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,22 @@
|
|||||||
|
#ifndef EPause_h__
|
||||||
|
#define EPause_h__
|
||||||
|
|
||||||
|
#include "EventBroker.h"
|
||||||
|
#include "World.h"
|
||||||
|
|
||||||
|
namespace Events
|
||||||
|
{
|
||||||
|
|
||||||
|
struct Pause : Event
|
||||||
|
{
|
||||||
|
::World* World;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct Resume : Event
|
||||||
|
{
|
||||||
|
::World* World;
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
@@ -11,8 +11,6 @@ struct PlayerDamage : Event
|
|||||||
{
|
{
|
||||||
double DamageAmount;
|
double DamageAmount;
|
||||||
EntityID PlayerDamagedID;
|
EntityID PlayerDamagedID;
|
||||||
//optional TypeOfDamage
|
|
||||||
std::string TypeOfDamage;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,19 @@
|
|||||||
|
#ifndef EShoot_h__
|
||||||
|
#define EShoot_h__
|
||||||
|
|
||||||
|
#include "EventBroker.h"
|
||||||
|
#include "../Core/Entity.h"
|
||||||
|
#include "Engine/GLM.h"
|
||||||
|
|
||||||
|
namespace Events
|
||||||
|
{
|
||||||
|
|
||||||
|
struct Shoot : Event
|
||||||
|
{
|
||||||
|
//ID for who made the shot
|
||||||
|
EntityID shooter;
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
#ifndef EWin_h__
|
||||||
|
#define EWin_h__
|
||||||
|
|
||||||
|
#include "EventBroker.h"
|
||||||
|
#include "../Core/Entity.h"
|
||||||
|
#include "Engine/GLM.h"
|
||||||
|
|
||||||
|
namespace Events
|
||||||
|
{
|
||||||
|
|
||||||
|
//triggers when a team has captured all capturePoints
|
||||||
|
struct Win : Event
|
||||||
|
{
|
||||||
|
//can be 0 = none, 1,2
|
||||||
|
int TeamThatWon;
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
@@ -2,6 +2,7 @@
|
|||||||
#define EntityWrapper_h__
|
#define EntityWrapper_h__
|
||||||
|
|
||||||
#include <boost/optional.hpp>
|
#include <boost/optional.hpp>
|
||||||
|
#include <boost/functional/hash.hpp>
|
||||||
#include "ComponentWrapper.h"
|
#include "ComponentWrapper.h"
|
||||||
|
|
||||||
class World;
|
class World;
|
||||||
@@ -23,10 +24,28 @@ struct EntityWrapper
|
|||||||
static const EntityWrapper Invalid;
|
static const EntityWrapper Invalid;
|
||||||
|
|
||||||
bool HasComponent(const std::string& componentName);
|
bool HasComponent(const std::string& componentName);
|
||||||
|
EntityWrapper Parent();
|
||||||
|
bool Valid();
|
||||||
|
|
||||||
ComponentWrapper operator[](const std::string& componentName);
|
ComponentWrapper operator[](const char* componentName);
|
||||||
bool operator==(const EntityWrapper& e);
|
bool operator==(const EntityWrapper& e) const;
|
||||||
explicit operator EntityID();
|
bool operator!=(const EntityWrapper& e) const;
|
||||||
|
explicit operator EntityID() const;
|
||||||
|
operator bool();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
namespace std
|
||||||
|
{
|
||||||
|
template<> struct hash<EntityWrapper>
|
||||||
|
{
|
||||||
|
std::size_t operator()(const EntityWrapper& e) const
|
||||||
|
{
|
||||||
|
std::size_t seed = 0;
|
||||||
|
boost::hash_combine(seed, e.World);
|
||||||
|
boost::hash_combine(seed, e.ID);
|
||||||
|
return seed;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -11,14 +11,14 @@ class System
|
|||||||
friend class SystemPipeline;
|
friend class SystemPipeline;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
System()
|
System(World* world, EventBroker) { }
|
||||||
: m_EventBroker(nullptr)
|
System(World* world, EventBroker* eventBroker)
|
||||||
{ }
|
: m_World(world)
|
||||||
System(EventBroker* eventBroker)
|
, m_EventBroker(eventBroker)
|
||||||
: m_EventBroker(eventBroker)
|
|
||||||
{ }
|
{ }
|
||||||
virtual ~System() = default;
|
virtual ~System() = default;
|
||||||
|
|
||||||
|
World* m_World;
|
||||||
EventBroker* m_EventBroker;
|
EventBroker* m_EventBroker;
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -34,7 +34,7 @@ protected:
|
|||||||
|
|
||||||
const std::string m_ComponentType;
|
const std::string m_ComponentType;
|
||||||
|
|
||||||
virtual void UpdateComponent(World* world, EntityWrapper& entity, ComponentWrapper& component, double dt) = 0;
|
virtual void UpdateComponent(EntityWrapper& entity, ComponentWrapper& cComponent, double dt) = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
class ImpureSystem : public virtual System
|
class ImpureSystem : public virtual System
|
||||||
@@ -45,7 +45,7 @@ protected:
|
|||||||
ImpureSystem() = default;
|
ImpureSystem() = default;
|
||||||
virtual ~ImpureSystem() = default;
|
virtual ~ImpureSystem() = default;
|
||||||
|
|
||||||
virtual void Update(World* world, double dt) = 0;
|
virtual void Update(double dt) = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
@@ -5,13 +5,19 @@
|
|||||||
#include "EventBroker.h"
|
#include "EventBroker.h"
|
||||||
#include "System.h"
|
#include "System.h"
|
||||||
#include "World.h"
|
#include "World.h"
|
||||||
|
#include "EPause.h"
|
||||||
|
|
||||||
class SystemPipeline
|
class SystemPipeline
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
SystemPipeline(EventBroker* eventBroker)
|
SystemPipeline(World* world, EventBroker* eventBroker)
|
||||||
: m_EventBroker(eventBroker)
|
: m_World(world)
|
||||||
{ }
|
, m_EventBroker(eventBroker)
|
||||||
|
{
|
||||||
|
EVENT_SUBSCRIBE_MEMBER(m_EPause, &SystemPipeline::OnPause);
|
||||||
|
EVENT_SUBSCRIBE_MEMBER(m_EResume, &SystemPipeline::OnResume);
|
||||||
|
}
|
||||||
|
|
||||||
~SystemPipeline()
|
~SystemPipeline()
|
||||||
{
|
{
|
||||||
for (UnorderedSystems& group : m_OrderedSystemGroups) {
|
for (UnorderedSystems& group : m_OrderedSystemGroups) {
|
||||||
@@ -29,7 +35,7 @@ public:
|
|||||||
m_OrderedSystemGroups.resize(updateOrderLevel + 1);
|
m_OrderedSystemGroups.resize(updateOrderLevel + 1);
|
||||||
}
|
}
|
||||||
UnorderedSystems& group = m_OrderedSystemGroups[updateOrderLevel];
|
UnorderedSystems& group = m_OrderedSystemGroups[updateOrderLevel];
|
||||||
System* system = new T(m_EventBroker, args...);
|
System* system = new T(m_World, m_EventBroker, args...);
|
||||||
group.Systems[typeid(T).name()] = system;
|
group.Systems[typeid(T).name()] = system;
|
||||||
|
|
||||||
PureSystem* pureSystem = dynamic_cast<PureSystem*>(system);
|
PureSystem* pureSystem = dynamic_cast<PureSystem*>(system);
|
||||||
@@ -47,8 +53,12 @@ public:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Update(World* world, double dt)
|
void Update(double dt)
|
||||||
{
|
{
|
||||||
|
if (m_Paused) {
|
||||||
|
dt = 0.0;
|
||||||
|
}
|
||||||
|
|
||||||
for (UnorderedSystems& group : m_OrderedSystemGroups) {
|
for (UnorderedSystems& group : m_OrderedSystemGroups) {
|
||||||
// Process events
|
// Process events
|
||||||
for (auto& pair : group.Systems) {
|
for (auto& pair : group.Systems) {
|
||||||
@@ -57,18 +67,18 @@ public:
|
|||||||
|
|
||||||
// Update
|
// Update
|
||||||
for (auto& system : group.ImpureSystems) {
|
for (auto& system : group.ImpureSystems) {
|
||||||
system->Update(world, dt);
|
system->Update(dt);
|
||||||
}
|
}
|
||||||
for (auto& pair : group.PureSystems) {
|
for (auto& pair : group.PureSystems) {
|
||||||
const std::string& componentName = pair.first;
|
const std::string& componentName = pair.first;
|
||||||
auto& systems = pair.second;
|
auto& systems = pair.second;
|
||||||
const ComponentPool* pool = world->GetComponents(componentName);
|
const ComponentPool* pool = m_World->GetComponents(componentName);
|
||||||
if (pool == nullptr) {
|
if (pool == nullptr) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
for (auto& component : *pool) {
|
for (auto& component : *pool) {
|
||||||
for (auto& system : systems) {
|
for (auto& system : systems) {
|
||||||
system->UpdateComponent(world, EntityWrapper(world, component.EntityID), component, dt);
|
system->UpdateComponent(EntityWrapper(m_World, component.EntityID), component, dt);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -76,7 +86,10 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
World* m_World;
|
||||||
EventBroker* m_EventBroker;
|
EventBroker* m_EventBroker;
|
||||||
|
bool m_Paused = false;
|
||||||
|
|
||||||
struct UnorderedSystems
|
struct UnorderedSystems
|
||||||
{
|
{
|
||||||
std::map<std::string, System*> Systems;
|
std::map<std::string, System*> Systems;
|
||||||
@@ -84,6 +97,21 @@ private:
|
|||||||
std::vector<ImpureSystem*> ImpureSystems;
|
std::vector<ImpureSystem*> ImpureSystems;
|
||||||
};
|
};
|
||||||
std::vector<UnorderedSystems> m_OrderedSystemGroups;
|
std::vector<UnorderedSystems> m_OrderedSystemGroups;
|
||||||
|
|
||||||
|
EventRelay<SystemPipeline, Events::Pause> m_EPause;
|
||||||
|
bool OnPause(const Events::Pause& e) {
|
||||||
|
if (e.World == m_World) {
|
||||||
|
m_Paused = true;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
EventRelay<SystemPipeline, Events::Resume> m_EResume;
|
||||||
|
bool OnResume(const Events::Resume& e) {
|
||||||
|
if (e.World == m_World) {
|
||||||
|
m_Paused = false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
@@ -0,0 +1,22 @@
|
|||||||
|
#ifndef UniformScaleSystem_h__
|
||||||
|
#define UniformScaleSystem_h__
|
||||||
|
|
||||||
|
#include "../GLM.h"
|
||||||
|
#include "System.h"
|
||||||
|
#include "../Rendering/ESetCamera.h"
|
||||||
|
|
||||||
|
class UniformScaleSystem : public PureSystem
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
UniformScaleSystem(World* world, EventBroker* eventBroker);
|
||||||
|
|
||||||
|
virtual void UpdateComponent(EntityWrapper& entity, ComponentWrapper& cUniformScale, double dt) override;
|
||||||
|
|
||||||
|
private:
|
||||||
|
EntityWrapper m_Camera = EntityWrapper::Invalid;
|
||||||
|
|
||||||
|
EventRelay<UniformScaleSystem, Events::SetCamera> m_ESetCamera;
|
||||||
|
bool OnSetCamera(const Events::SetCamera& e);
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
||||||
@@ -0,0 +1,153 @@
|
|||||||
|
#ifndef EditorGUI_h__
|
||||||
|
#define EditorGUI_h__
|
||||||
|
|
||||||
|
#include <imgui/imgui.h>
|
||||||
|
#define IMGUI_DEFINE_MATH_OPERATORS
|
||||||
|
#include <imgui/imgui_internal.h>
|
||||||
|
#include <nativefiledialog/nfd.h>
|
||||||
|
#include <boost/filesystem.hpp>
|
||||||
|
#include <boost/any.hpp>
|
||||||
|
#include "../Common.h"
|
||||||
|
#include "../GLM.h"
|
||||||
|
#include <glm/gtx/common.hpp>
|
||||||
|
|
||||||
|
#include "EditorWidgetSystem.h"
|
||||||
|
#include "../Core/EventBroker.h"
|
||||||
|
#include "../Core/World.h"
|
||||||
|
#include "../Core/EntityWrapper.h"
|
||||||
|
#include "../Core/ResourceManager.h"
|
||||||
|
#include "../Core/EPause.h"
|
||||||
|
#include "../Core/EKeyDown.h"
|
||||||
|
#include "../Rendering/Texture.h"
|
||||||
|
|
||||||
|
class EditorGUI
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
EditorGUI(World* world, EventBroker* eventBroker);
|
||||||
|
|
||||||
|
enum class WidgetMode
|
||||||
|
{
|
||||||
|
Translate,
|
||||||
|
Rotate,
|
||||||
|
Scale
|
||||||
|
};
|
||||||
|
|
||||||
|
void Draw();
|
||||||
|
|
||||||
|
void SelectEntity(EntityWrapper entity);
|
||||||
|
void SetDirty(EntityWrapper entity);
|
||||||
|
|
||||||
|
// Called when an entity is selected in the entity tree
|
||||||
|
typedef std::function<void(EntityWrapper)> OnEntitySelectedCallback_t;
|
||||||
|
void SetEntitySelectedCallback(OnEntitySelectedCallback_t f) { m_OnEntitySelected = f; }
|
||||||
|
// Called when the user means to import an entity file.
|
||||||
|
// @param EntityWrapper The entity to parent the imported entity to. The entity will be imported into the world of this entity.
|
||||||
|
// @param boost::filesystem::path The path to the entity to import
|
||||||
|
// @return EntityWrapper The newly created entity
|
||||||
|
typedef std::function<EntityWrapper(EntityWrapper, boost::filesystem::path)> OnEntityImport_t;
|
||||||
|
void SetEntityImportCallback(OnEntityImport_t f) { m_OnEntityImport = f; }
|
||||||
|
// Called when the user means to save an entity to file.
|
||||||
|
// Permitted to throw exceptions on save failure.
|
||||||
|
typedef std::function<void(EntityWrapper, boost::filesystem::path)> OnEntitySave_t;
|
||||||
|
void SetEntitySaveCallback(OnEntitySave_t f) { m_OnEntitySave = f; }
|
||||||
|
// Called when the user means to create a new entity.
|
||||||
|
// @param EntityWrapper The parent of the entity to be created
|
||||||
|
// @return EntityWrapper The newly created entity
|
||||||
|
typedef std::function<EntityWrapper(EntityWrapper)> OnEntityCreate_t;
|
||||||
|
void SetEntityCreateCallback(OnEntityCreate_t f) { m_OnEntityCreate = f; }
|
||||||
|
// Called when the user means to delete an entity.
|
||||||
|
typedef std::function<void(EntityWrapper)> OnEntityDelete_t;
|
||||||
|
void SetEntityDeleteCallback(OnEntityDelete_t f) { m_OnEntityDelete = f; }
|
||||||
|
// Called when the user means to change the parent of an entity.
|
||||||
|
typedef std::function<void(EntityWrapper, EntityWrapper)> OnEntityChangeParent_t;
|
||||||
|
void SetEntityChangeParentCallback(OnEntityChangeParent_t f) { m_OnEntityChangeParent = f; }
|
||||||
|
// Called when the user means to rename an entity.
|
||||||
|
typedef std::function<void(EntityWrapper, const std::string&)> OnEntityChangeName_t;
|
||||||
|
void SetEntityChangeNameCallback(OnEntityChangeName_t f) { m_OnEntityChangeName = f; }
|
||||||
|
// Called when the user means to attach a new component to an entity.
|
||||||
|
typedef std::function<void(EntityWrapper, const std::string&)> OnComponentAttach_t;
|
||||||
|
void SetComponentAttachCallback(OnComponentAttach_t f) { m_OnComponentAttach = f; }
|
||||||
|
// Called when the user means to delete a component off an entity.
|
||||||
|
typedef std::function<void(EntityWrapper, const std::string&)> OnComponentDelete_t;
|
||||||
|
void SetComponentDeleteCallback(OnComponentDelete_t f) { m_OnComponentDelete = f; }
|
||||||
|
// Called when the user selects a widget mode.
|
||||||
|
typedef std::function<void(WidgetMode)> OnWidgetMode_t;
|
||||||
|
void SetWidgetModeCallback(OnWidgetMode_t f) { m_OnWidgetMode = f; }
|
||||||
|
|
||||||
|
private:
|
||||||
|
World* m_World;
|
||||||
|
EventBroker* m_EventBroker;
|
||||||
|
|
||||||
|
struct EntityFileInfo
|
||||||
|
{
|
||||||
|
boost::filesystem::path Path;
|
||||||
|
bool Dirty = false;
|
||||||
|
};
|
||||||
|
|
||||||
|
// Config variables
|
||||||
|
const boost::filesystem::path m_DefaultEntityPath = boost::filesystem::path("Schema") / boost::filesystem::path("Entities");
|
||||||
|
|
||||||
|
// State
|
||||||
|
EntityWrapper m_CurrentSelection = EntityWrapper::Invalid;
|
||||||
|
std::unordered_map<EntityWrapper, EntityFileInfo> m_EntityFiles;
|
||||||
|
EntityWrapper m_CurrentlyDragging = EntityWrapper::Invalid;
|
||||||
|
std::string m_LastErrorMessage;
|
||||||
|
WidgetMode m_CurrentWidgetMode = WidgetMode::Translate;
|
||||||
|
std::set<std::string> m_ModalsToOpen;
|
||||||
|
std::map<std::string, boost::any> m_ModalData;
|
||||||
|
|
||||||
|
// Callbacks
|
||||||
|
OnEntitySelectedCallback_t m_OnEntitySelected = nullptr;
|
||||||
|
OnEntityImport_t m_OnEntityImport = nullptr;
|
||||||
|
OnEntitySave_t m_OnEntitySave = nullptr;
|
||||||
|
OnEntityCreate_t m_OnEntityCreate = nullptr;
|
||||||
|
OnEntityDelete_t m_OnEntityDelete = nullptr;
|
||||||
|
OnEntityChangeParent_t m_OnEntityChangeParent = nullptr;
|
||||||
|
OnEntityChangeName_t m_OnEntityChangeName = nullptr;
|
||||||
|
OnComponentAttach_t m_OnComponentAttach = nullptr;
|
||||||
|
OnComponentDelete_t m_OnComponentDelete = nullptr;
|
||||||
|
OnWidgetMode_t m_OnWidgetMode = nullptr;
|
||||||
|
|
||||||
|
// Events
|
||||||
|
EventRelay<EditorGUI, Events::KeyDown> m_EKeyDown;
|
||||||
|
bool OnKeyDown(const Events::KeyDown& e);
|
||||||
|
|
||||||
|
// Utility functions
|
||||||
|
boost::filesystem::path fileOpenDialog();
|
||||||
|
boost::filesystem::path fileSaveDialog();
|
||||||
|
const std::string formatEntityName(EntityWrapper entity);
|
||||||
|
GLuint tryLoadTexture(std::string filePath);
|
||||||
|
void openModal(const std::string& modal);
|
||||||
|
|
||||||
|
// Entity file handling methods
|
||||||
|
void entityImport(World* world);
|
||||||
|
void entitySave(EntityWrapper entity, bool saveAs = false);
|
||||||
|
void entityCreate(World* world, EntityWrapper parent);
|
||||||
|
void entityDelete(EntityWrapper entity);
|
||||||
|
void entityChangeParent(EntityWrapper entity, EntityWrapper parent);
|
||||||
|
|
||||||
|
// UI drawing methods
|
||||||
|
void drawMenu();
|
||||||
|
void drawTools();
|
||||||
|
void drawEntities(World* world);
|
||||||
|
void drawEntitiesRecursive(World* world, EntityID parent);
|
||||||
|
bool drawEntityNode(EntityWrapper entity);
|
||||||
|
void drawComponents(EntityWrapper entity);
|
||||||
|
bool drawComponentNode(EntityWrapper entity, const ComponentInfo& componentType);
|
||||||
|
bool drawComponentField(ComponentWrapper& c, const ComponentInfo::Field_t& field);
|
||||||
|
bool drawComponentField_Vector(ComponentWrapper &c, const ComponentInfo::Field_t &field);
|
||||||
|
bool drawComponentField_Color(ComponentWrapper &c, const ComponentInfo::Field_t &field);
|
||||||
|
bool drawComponentField_int(ComponentWrapper &c, const ComponentInfo::Field_t &field);
|
||||||
|
bool drawComponentField_enum(ComponentWrapper &c, const ComponentInfo::Field_t &field);
|
||||||
|
bool drawComponentField_float(ComponentWrapper &c, const ComponentInfo::Field_t &field);
|
||||||
|
bool drawComponentField_double(ComponentWrapper &c, const ComponentInfo::Field_t &field);
|
||||||
|
bool drawComponentField_bool(ComponentWrapper &c, const ComponentInfo::Field_t &field);
|
||||||
|
bool drawComponentField_string(ComponentWrapper &c, const ComponentInfo::Field_t &field);
|
||||||
|
void drawModals();
|
||||||
|
|
||||||
|
// Custom UI elements
|
||||||
|
bool createDeleteButton(const std::string& componentType);
|
||||||
|
void createWidgetToolButton(WidgetMode mode);
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
||||||
@@ -0,0 +1,27 @@
|
|||||||
|
#ifndef EditorRenderSystem_h__
|
||||||
|
#define EditorRenderSystem_h__
|
||||||
|
|
||||||
|
#include "../Core/System.h"
|
||||||
|
#include "../Rendering/IRenderer.h"
|
||||||
|
#include "../Rendering/ModelJob.h"
|
||||||
|
#include "../Rendering/Camera.h"
|
||||||
|
#include "../Rendering/ESetCamera.h"
|
||||||
|
|
||||||
|
class EditorRenderSystem : public ImpureSystem
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
EditorRenderSystem(World* world, EventBroker* eventBroker, IRenderer* renderer, RenderFrame* renderFrame);
|
||||||
|
|
||||||
|
virtual void Update(double dt) override;
|
||||||
|
|
||||||
|
private:
|
||||||
|
IRenderer* m_Renderer;
|
||||||
|
RenderFrame* m_RenderFrame;
|
||||||
|
Camera* m_EditorCamera;
|
||||||
|
EntityWrapper m_CurrentCamera = EntityWrapper::Invalid;
|
||||||
|
|
||||||
|
EventRelay<EditorRenderSystem, Events::SetCamera> m_ESetCamera;
|
||||||
|
bool OnSetCamera(Events::SetCamera& e);
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
||||||
@@ -0,0 +1,29 @@
|
|||||||
|
#include <numeric>
|
||||||
|
#include <iomanip>
|
||||||
|
#include <imgui/imgui.h>
|
||||||
|
#include "../Common.h"
|
||||||
|
#include "../GLM.h"
|
||||||
|
#include "../OpenGL.h"
|
||||||
|
|
||||||
|
class EditorStats
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
EditorStats();
|
||||||
|
void Draw(double dt);
|
||||||
|
|
||||||
|
private:
|
||||||
|
// FPS graph
|
||||||
|
const unsigned int m_SampleSize = 100;
|
||||||
|
unsigned int m_FrameCount = 0;
|
||||||
|
std::vector<double> m_FrameTimes;
|
||||||
|
double m_TimeAccumulator = 0.0;
|
||||||
|
double m_AveragedSamplesPerSecond = 10.0;
|
||||||
|
const unsigned int m_AveragedSampleSize = 100;
|
||||||
|
unsigned int m_CurrentAveragedSampleIndex = 0;
|
||||||
|
std::vector<double> m_AveragedSamples;
|
||||||
|
void drawFPSGraph(double dt);
|
||||||
|
|
||||||
|
void drawRAMUsage(double dt);
|
||||||
|
|
||||||
|
void drawVRAMStats(double dt);
|
||||||
|
};
|
||||||
@@ -1,94 +1,59 @@
|
|||||||
#include <imgui/imgui.h>
|
|
||||||
#include <glm/gtx/common.hpp>
|
|
||||||
#include <boost/filesystem/path.hpp>
|
|
||||||
#include <nativefiledialog/nfd.h>
|
|
||||||
#include "../Core/System.h"
|
#include "../Core/System.h"
|
||||||
#include "../Core/EMousePress.h"
|
|
||||||
#include "../Core/EMouseRelease.h"
|
|
||||||
#include "../Core/EMouseMove.h"
|
|
||||||
#include "../Core/ConfigFile.h"
|
|
||||||
#include "../Input/EInputCommand.h"
|
|
||||||
#include "../Rendering/IRenderer.h"
|
#include "../Rendering/IRenderer.h"
|
||||||
#include "../Core/Transform.h"
|
#include "../Rendering/Camera.h"
|
||||||
#include "../Core/EFileDropped.h"
|
#include "../Rendering/DebugCameraInputController.h"
|
||||||
|
#include "../Rendering/ESetCamera.h"
|
||||||
|
#include "../Core/World.h"
|
||||||
|
#include "../Core/SystemPipeline.h"
|
||||||
|
#include "../Core/ResourceManager.h"
|
||||||
#include "../Core/EntityFilePreprocessor.h"
|
#include "../Core/EntityFilePreprocessor.h"
|
||||||
#include "../Core/EntityFileParser.h"
|
#include "../Core/EntityFileParser.h"
|
||||||
#include "../Core/EntityFileWriter.h"
|
#include "../Core/EntityFileWriter.h"
|
||||||
|
#include "../Core/EMousePress.h"
|
||||||
|
#include "EditorGUI.h"
|
||||||
|
#include "EditorStats.h"
|
||||||
|
|
||||||
class EditorSystem : public ImpureSystem
|
class EditorSystem : public ImpureSystem
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
EditorSystem(EventBroker* eventBroker, IRenderer* renderer);
|
EditorSystem(World* world, EventBroker* eventBroker, IRenderer* renderer, RenderFrame* renderFrame);
|
||||||
|
~EditorSystem();
|
||||||
|
|
||||||
virtual void Update(World* world, double dt) override;
|
void Update(double dt);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
IRenderer* m_Renderer;
|
IRenderer* m_Renderer;
|
||||||
World* m_World = nullptr;
|
RenderFrame* m_RenderFrame;
|
||||||
Camera* m_Camera = nullptr;
|
World* m_EditorWorld;
|
||||||
|
SystemPipeline* m_EditorWorldSystemPipeline;
|
||||||
|
Camera* m_EditorCamera;
|
||||||
|
EntityWrapper m_Camera = EntityWrapper::Invalid;
|
||||||
|
DebugCameraInputController<EditorSystem>* m_DebugCameraInputController;
|
||||||
|
EditorGUI* m_EditorGUI;
|
||||||
|
EditorStats* m_EditorStats;
|
||||||
|
|
||||||
bool m_Enabled;
|
// State
|
||||||
bool m_Visible;
|
EditorGUI::WidgetMode m_WidgetMode = EditorGUI::WidgetMode::Translate;
|
||||||
boost::filesystem::path m_DefaultEntityDir;
|
EntityWrapper m_Widget = EntityWrapper::Invalid;
|
||||||
boost::filesystem::path m_CurrentFile;
|
EntityWrapper m_CurrentSelection = EntityWrapper::Invalid;
|
||||||
std::vector<glm::vec2> m_PickingQueue;
|
|
||||||
|
|
||||||
enum class WidgetMode
|
// Utility functions
|
||||||
{
|
EntityWrapper importEntity(EntityWrapper parent, boost::filesystem::path filePath);
|
||||||
None,
|
void setWidgetMode(EditorGUI::WidgetMode mode);
|
||||||
Translate,
|
|
||||||
Rotate,
|
|
||||||
Scale
|
|
||||||
} m_WidgetMode = WidgetMode::None;
|
|
||||||
|
|
||||||
enum class WidgetSpace
|
// GUI callbacks
|
||||||
{
|
void OnEntitySelected(EntityWrapper entity);
|
||||||
Local,
|
void OnEntitySave(EntityWrapper entity, boost::filesystem::path filePath);
|
||||||
Global
|
EntityWrapper OnEntityCreate(EntityWrapper parent);
|
||||||
} m_WidgetSpace = WidgetSpace::Global;
|
void OnEntityDelete(EntityWrapper entity);
|
||||||
|
void OnEntityChangeParent(EntityWrapper entity, EntityWrapper parent);
|
||||||
|
void OnEntityChangeName(EntityWrapper entity, const std::string& name);
|
||||||
|
void OnComponentAttach(EntityWrapper entity, const std::string& componentType);
|
||||||
|
void OnComponentDelete(EntityWrapper entity, const std::string& componentType);
|
||||||
|
|
||||||
EntityID m_Widget = EntityID_Invalid;
|
// Events
|
||||||
EntityID m_WidgetX = EntityID_Invalid;
|
|
||||||
EntityID m_WidgetPlaneX = EntityID_Invalid;
|
|
||||||
EntityID m_WidgetY = EntityID_Invalid;
|
|
||||||
EntityID m_WidgetPlaneY = EntityID_Invalid;
|
|
||||||
EntityID m_WidgetZ = EntityID_Invalid;
|
|
||||||
EntityID m_WidgetPlaneZ = EntityID_Invalid;
|
|
||||||
EntityID m_WidgetOrigin = EntityID_Invalid;
|
|
||||||
glm::vec3 m_WidgetCurrentAxis;
|
|
||||||
float m_WidgetPickingDepth = 0.f;
|
|
||||||
glm::vec3 m_WidgetPickingPosition = glm::vec3(0);
|
|
||||||
|
|
||||||
EntityID m_Selection = EntityID_Invalid;
|
|
||||||
EntityID m_LastSelection = EntityID_Invalid;
|
|
||||||
EntityID m_UIDraggingEntity = EntityID_Invalid;
|
|
||||||
glm::vec3 m_Position;
|
|
||||||
std::string m_LastDroppedFile;
|
|
||||||
|
|
||||||
static boost::filesystem::path openDialog(boost::filesystem::path defaultPath);
|
|
||||||
static boost::filesystem::path saveDialog(boost::filesystem::path defaultPath);
|
|
||||||
|
|
||||||
EventRelay<EditorSystem, Events::InputCommand> m_EInputCommand;
|
|
||||||
bool OnInputCommand(const Events::InputCommand& e);
|
|
||||||
EventRelay<EditorSystem, Events::MouseRelease> m_EMouseRelease;
|
|
||||||
bool OnMouseRelease(const Events::MouseRelease& e);
|
|
||||||
EventRelay<EditorSystem, Events::MousePress> m_EMousePress;
|
EventRelay<EditorSystem, Events::MousePress> m_EMousePress;
|
||||||
bool OnMousePress(const Events::MousePress& e);
|
bool OnMousePress(const Events::MousePress& e);
|
||||||
EventRelay<EditorSystem, Events::MouseMove> m_EMouseMove;
|
EventRelay<EditorSystem, Events::WidgetDelta> m_EWidgetDelta;
|
||||||
bool OnMouseMove(const Events::MouseMove& e);
|
bool OnWidgetDelta(const Events::WidgetDelta& e);
|
||||||
EventRelay<EditorSystem, Events::FileDropped> m_EFileDropped;
|
|
||||||
bool OnFileDropped(const Events::FileDropped& e);
|
|
||||||
|
|
||||||
void Picking();
|
|
||||||
void createWidget();
|
|
||||||
void updateWidget();
|
|
||||||
void setWidgetMode(WidgetMode newMode);
|
|
||||||
void setWidgetSpace(WidgetSpace space);
|
|
||||||
void drawUI(World* world, double dt);
|
|
||||||
bool createDeleteButton(std::string componentType);
|
|
||||||
bool createEntityNode(World* world, EntityID entity);
|
|
||||||
void changeParent(EntityID entity, EntityID newParent);
|
|
||||||
void fileImport(World* world);
|
|
||||||
void fileSave(World* world);
|
|
||||||
void fileSaveAs(World* world);
|
|
||||||
};
|
};
|
||||||
@@ -0,0 +1,49 @@
|
|||||||
|
#ifndef EditorWidgetSystem_h__
|
||||||
|
#define EditorWidgetSystem_h__
|
||||||
|
|
||||||
|
#include <imgui/imgui.h>
|
||||||
|
#include "../GLM.h"
|
||||||
|
#include "../Core/System.h"
|
||||||
|
#include "../Rendering/IRenderer.h"
|
||||||
|
#include "../Rendering/Util/ScreenCoords.h"
|
||||||
|
#include "../Core/EMouseMove.h"
|
||||||
|
#include "../Core/EMousePress.h"
|
||||||
|
#include "../Core/EMouseRelease.h"
|
||||||
|
|
||||||
|
namespace Events
|
||||||
|
{
|
||||||
|
|
||||||
|
struct WidgetDelta : Event
|
||||||
|
{
|
||||||
|
glm::vec3 Translation;
|
||||||
|
glm::vec3 Rotation;
|
||||||
|
glm::vec3 Scale;
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
class EditorWidgetSystem : public ImpureSystem, PureSystem
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
EditorWidgetSystem(World* world, EventBroker* eventBroker, IRenderer* renderer);
|
||||||
|
|
||||||
|
virtual void Update(double dt) override;
|
||||||
|
virtual void UpdateComponent(EntityWrapper& entity, ComponentWrapper& cEditorWidget, double dt) override;
|
||||||
|
|
||||||
|
private:
|
||||||
|
IRenderer* m_Renderer;
|
||||||
|
|
||||||
|
// State
|
||||||
|
EntityWrapper m_PickEntity = EntityWrapper::Invalid;
|
||||||
|
PickData m_PickData;
|
||||||
|
glm::vec2 m_MouseDelta;
|
||||||
|
|
||||||
|
EventRelay<EditorWidgetSystem, Events::MouseMove> m_EMouseMove;
|
||||||
|
bool OnMouseMove(const Events::MouseMove& e);
|
||||||
|
EventRelay<EditorWidgetSystem, Events::MousePress> m_EMousePress;
|
||||||
|
bool OnMousePress(const Events::MousePress& e);
|
||||||
|
EventRelay<EditorWidgetSystem, Events::MouseRelease> m_EMouseRelease;
|
||||||
|
bool OnMouseRelease(const Events::MouseRelease& e);
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
||||||
@@ -7,4 +7,5 @@
|
|||||||
#include <glm/gtx/rotate_vector.hpp>
|
#include <glm/gtx/rotate_vector.hpp>
|
||||||
#include <glm/gtc/quaternion.hpp>
|
#include <glm/gtc/quaternion.hpp>
|
||||||
#include <glm/gtx/quaternion.hpp>
|
#include <glm/gtx/quaternion.hpp>
|
||||||
#include <glm/gtc/type_ptr.hpp>
|
#include <glm/gtc/type_ptr.hpp>
|
||||||
|
#include <glm/gtx/projection.hpp>
|
||||||
@@ -3,9 +3,12 @@
|
|||||||
|
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <ctime>
|
#include <ctime>
|
||||||
|
#include <limits>
|
||||||
|
#include <queue>
|
||||||
|
|
||||||
#include <glm/common.hpp>
|
#include <glm/common.hpp>
|
||||||
#include <boost/asio.hpp>
|
#include <boost/asio.hpp>
|
||||||
|
#include <boost/shared_array.hpp>
|
||||||
|
|
||||||
#include "Network/Network.h"
|
#include "Network/Network.h"
|
||||||
#include "Network/MessageType.h"
|
#include "Network/MessageType.h"
|
||||||
@@ -15,6 +18,8 @@
|
|||||||
#include "Core/EventBroker.h"
|
#include "Core/EventBroker.h"
|
||||||
#include "Core/ConfigFile.h"
|
#include "Core/ConfigFile.h"
|
||||||
#include "Input/EInputCommand.h"
|
#include "Input/EInputCommand.h"
|
||||||
|
#include "Core/EPlayerDamage.h"
|
||||||
|
#include "Network/EInterpolate.h"
|
||||||
|
|
||||||
class Client : public Network
|
class Client : public Network
|
||||||
{
|
{
|
||||||
@@ -32,8 +37,6 @@ private:
|
|||||||
// Sending message to server logic
|
// Sending message to server logic
|
||||||
int bytesRead = -1;
|
int bytesRead = -1;
|
||||||
char readBuf[INPUTSIZE] = { 0 };
|
char readBuf[INPUTSIZE] = { 0 };
|
||||||
int snapshotInterval = 33;
|
|
||||||
std::clock_t previousSnapshotMessage = std::clock();
|
|
||||||
|
|
||||||
// Packet loss logic
|
// Packet loss logic
|
||||||
unsigned int m_PacketID = 0;
|
unsigned int m_PacketID = 0;
|
||||||
@@ -44,40 +47,55 @@ private:
|
|||||||
World* m_World;
|
World* m_World;
|
||||||
std::string m_PlayerName;
|
std::string m_PlayerName;
|
||||||
int m_PlayerID = -1;
|
int m_PlayerID = -1;
|
||||||
|
EntityID m_ServerEntityID = std::numeric_limits<EntityID>::max();
|
||||||
|
bool m_IsConnected = false;
|
||||||
|
// Server Client Lookup map
|
||||||
|
// Assumes that root node for client and server is EntityID 0.
|
||||||
|
|
||||||
|
// Don't Add items to these two maps with insert, use insertIntoServerClientMaps(EntityID, EntityID)!!!!
|
||||||
|
std::unordered_map<EntityID, EntityID> m_ServerIDToClientID;
|
||||||
|
std::unordered_map<EntityID, EntityID> m_ClientIDToServerID;
|
||||||
|
|
||||||
// Network logic
|
// Network logic
|
||||||
PlayerDefinition m_PlayerDefinitions[MAXCONNECTIONS];
|
PlayerDefinition m_PlayerDefinitions[MAXCONNECTIONS];
|
||||||
SnapshotDefinitions m_NextSnapshot;
|
SnapshotDefinitions m_NextSnapshot;
|
||||||
double m_DurationOfPingTime;
|
double m_DurationOfPingTime;
|
||||||
std::clock_t m_StartPingTime;
|
std::clock_t m_StartPingTime;
|
||||||
// Use to check if we should send disconnect message
|
std::vector<Events::InputCommand> m_InputCommandBuffer;
|
||||||
// if game is turned of by closing window.
|
|
||||||
bool m_WasStarted = false;
|
|
||||||
|
|
||||||
// Private member functions
|
// Private member functions
|
||||||
void readFromServer();
|
void readFromServer();
|
||||||
void sendSnapshotToServer();
|
|
||||||
int receive(char* data, size_t length);
|
int receive(char* data, size_t length);
|
||||||
void send(Packet& packet);
|
void send(Packet& packet);
|
||||||
void connect();
|
void connect();
|
||||||
void disconnect();
|
void disconnect();
|
||||||
void ping();
|
void ping();
|
||||||
void moveMessageHead(char*& data, size_t& length, size_t stepSize);
|
|
||||||
void parseMessageType(Packet& packet);
|
void parseMessageType(Packet& packet);
|
||||||
void parseEventMessage(Packet& packet);
|
|
||||||
void updateFields(Packet& packet, const ComponentInfo& componentInfo, const EntityID& entityID, const std::string& componentType);
|
void updateFields(Packet& packet, const ComponentInfo& componentInfo, const EntityID& entityID, const std::string& componentType);
|
||||||
void parseConnect(Packet& packet);
|
void parseConnect(Packet& packet);
|
||||||
|
void parsePlayerConnected(Packet& packet);
|
||||||
void parsePing();
|
void parsePing();
|
||||||
void parseServerPing();
|
void parseServerPing();
|
||||||
|
void InterpolateFields(Packet & packet, const ComponentInfo & componentInfo, const EntityID & entityID, const std::string & componentType);
|
||||||
void parseSnapshot(Packet& packet);
|
void parseSnapshot(Packet& packet);
|
||||||
void identifyPacketLoss();
|
void identifyPacketLoss();
|
||||||
bool isConnected();
|
bool hasServerTimedOut();
|
||||||
EntityID createPlayer();
|
EntityID createPlayer();
|
||||||
|
void sendInputCommands();
|
||||||
|
void becomePlayer();
|
||||||
|
// Mapping Logic
|
||||||
|
// Returns if local EntityID exist in map
|
||||||
|
bool clientServerMapsHasEntity(EntityID clientEntityID);
|
||||||
|
// Returns if server EntityID exist in map
|
||||||
|
bool serverClientMapsHasEntity(EntityID serverEntityID);
|
||||||
|
void insertIntoServerClientMaps(EntityID serverEntityID, EntityID clientEntityID);
|
||||||
|
|
||||||
// Events
|
// Events
|
||||||
EventBroker* m_EventBroker;
|
EventBroker* m_EventBroker;
|
||||||
EventRelay<Client, Events::InputCommand> m_EInputCommand;
|
EventRelay<Client, Events::InputCommand> m_EInputCommand;
|
||||||
bool OnInputCommand(const Events::InputCommand &e);
|
bool OnInputCommand(const Events::InputCommand& e);
|
||||||
|
EventRelay<Client, Events::PlayerDamage> m_EPlayeDamage;
|
||||||
|
bool OnPlayerDamage(const Events::PlayerDamage& e);
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -0,0 +1,20 @@
|
|||||||
|
#ifndef Events_Interpolate_h__
|
||||||
|
#define Events_Interpolate_h__
|
||||||
|
|
||||||
|
#include <boost/shared_array.hpp>
|
||||||
|
|
||||||
|
#include "Core/EventBroker.h"
|
||||||
|
#include "Core/Entity.h"
|
||||||
|
|
||||||
|
namespace Events
|
||||||
|
{
|
||||||
|
|
||||||
|
struct Interpolate : Event
|
||||||
|
{
|
||||||
|
EntityID Entity;
|
||||||
|
boost::shared_array<char> DataArray;
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
@@ -11,7 +11,10 @@ enum class MessageType
|
|||||||
ServerPing,
|
ServerPing,
|
||||||
Message,
|
Message,
|
||||||
Snapshot,
|
Snapshot,
|
||||||
Event,
|
OnInputCommand,
|
||||||
|
OnPlayerDamage,
|
||||||
|
PlayerConnected,
|
||||||
|
BecomePlayer
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -7,6 +7,7 @@
|
|||||||
|
|
||||||
#define MAXCONNECTIONS 8
|
#define MAXCONNECTIONS 8
|
||||||
#define INPUTSIZE 4097
|
#define INPUTSIZE 4097
|
||||||
|
#define TIMEOUTMS 15000
|
||||||
|
|
||||||
class Network
|
class Network
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ public:
|
|||||||
Packet(MessageType type, unsigned int& packetID);
|
Packet(MessageType type, unsigned int& packetID);
|
||||||
// Used to create packet from already existing data buffer.
|
// Used to create packet from already existing data buffer.
|
||||||
Packet(char* data, const int sizeOfPacket);
|
Packet(char* data, const int sizeOfPacket);
|
||||||
|
Packet(MessageType type);
|
||||||
~Packet();
|
~Packet();
|
||||||
void Init(MessageType type, unsigned int& packetID);
|
void Init(MessageType type, unsigned int& packetID);
|
||||||
|
|
||||||
@@ -49,7 +50,7 @@ public:
|
|||||||
// Pops the first element as if it was a string.
|
// Pops the first element as if it was a string.
|
||||||
std::string ReadString();
|
std::string ReadString();
|
||||||
char* ReadData(int SizeOfData);
|
char* ReadData(int SizeOfData);
|
||||||
|
void ChangePacketID(unsigned int& packetID);
|
||||||
int Size() { return m_Offset; };
|
int Size() { return m_Offset; };
|
||||||
char* Data() { return m_Data; };
|
char* Data() { return m_Data; };
|
||||||
unsigned int DataReadSize() { return m_ReturnDataOffset; }
|
unsigned int DataReadSize() { return m_ReturnDataOffset; }
|
||||||
|
|||||||
@@ -6,6 +6,8 @@ struct PlayerDefinition {
|
|||||||
int EntityID = -1;
|
int EntityID = -1;
|
||||||
std::string Name = "";
|
std::string Name = "";
|
||||||
boost::asio::ip::udp::endpoint Endpoint;
|
boost::asio::ip::udp::endpoint Endpoint;
|
||||||
|
unsigned int PacketID;
|
||||||
|
std::clock_t StopTime;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -11,7 +11,9 @@
|
|||||||
#include "Network/PlayerDefinition.h"
|
#include "Network/PlayerDefinition.h"
|
||||||
#include "Core/World.h"
|
#include "Core/World.h"
|
||||||
#include "Core/EventBroker.h"
|
#include "Core/EventBroker.h"
|
||||||
#include "Network/Network.h"
|
#include "../Network/Network.h"
|
||||||
|
#include "Input/EInputCommand.h"
|
||||||
|
#include "Core/EPlayerDamage.h"
|
||||||
|
|
||||||
class Server : public Network
|
class Server : public Network
|
||||||
{
|
{
|
||||||
@@ -25,9 +27,10 @@ private:
|
|||||||
boost::asio::ip::udp::endpoint m_ReceiverEndpoint;
|
boost::asio::ip::udp::endpoint m_ReceiverEndpoint;
|
||||||
boost::asio::io_service m_IOService;
|
boost::asio::io_service m_IOService;
|
||||||
boost::asio::ip::udp::socket m_Socket;
|
boost::asio::ip::udp::socket m_Socket;
|
||||||
PlayerDefinition m_PlayerDefinitions[MAXCONNECTIONS];
|
|
||||||
|
|
||||||
// Sending messages to client logic
|
// Sending messages to client logic
|
||||||
|
PlayerDefinition m_PlayerDefinitions[MAXCONNECTIONS];
|
||||||
|
std::vector<PlayerDefinition> m_ConnectedUsers;
|
||||||
char readBuffer[INPUTSIZE] = { 0 };
|
char readBuffer[INPUTSIZE] = { 0 };
|
||||||
int bytesRead = 0;
|
int bytesRead = 0;
|
||||||
// time for previouse message
|
// time for previouse message
|
||||||
@@ -41,40 +44,38 @@ private:
|
|||||||
|
|
||||||
//Timers
|
//Timers
|
||||||
std::clock_t m_StartPingTime;
|
std::clock_t m_StartPingTime;
|
||||||
std::clock_t m_StopTimes[8];
|
|
||||||
|
|
||||||
// Game logic
|
// Game logic
|
||||||
World* m_World;
|
World* m_World;
|
||||||
EventBroker* m_EventBroker;
|
EventBroker* m_EventBroker;
|
||||||
// vec.size() = ammount of players to create, stores playerID's
|
|
||||||
std::vector<unsigned int> m_PlayersToCreate;
|
|
||||||
|
|
||||||
// Packet loss logic
|
// Packet loss logic
|
||||||
unsigned int m_PacketID;
|
unsigned int m_PacketID = 0;
|
||||||
unsigned int m_PreviousPacketID;
|
unsigned int m_PreviousPacketID = 0;
|
||||||
unsigned int m_SendPacketID;
|
|
||||||
|
|
||||||
// Private member functions
|
// Private member functions
|
||||||
int receive(char* data, size_t length);
|
int receive(char* data, size_t length);
|
||||||
void readFromClients();
|
void readFromClients();
|
||||||
void send(Packet& packet, int playerID);
|
void send(Packet& packet, int playerID);
|
||||||
void send(Packet& packet);
|
void send(Packet& packet);
|
||||||
void moveMessageHead(char*& data, size_t& length, size_t stepSize);
|
|
||||||
void broadcast(std::string message);
|
|
||||||
void broadcast(Packet& packet);
|
void broadcast(Packet& packet);
|
||||||
void sendSnapshot();
|
void sendSnapshot();
|
||||||
void sendPing();
|
void sendPing();
|
||||||
void checkForTimeOuts();
|
void checkForTimeOuts();
|
||||||
void disconnect(int i);
|
void disconnect(int i);
|
||||||
void parseMessageType(Packet& packet);
|
void parseMessageType(Packet& packet);
|
||||||
void parseEvent(Packet& packet);
|
void parseOnInputCommand(Packet& packet);
|
||||||
|
void parseOnPlayerDamage(Packet& packet);
|
||||||
void parseConnect(Packet& packet);
|
void parseConnect(Packet& packet);
|
||||||
void parseDisconnect();
|
void parseDisconnect();
|
||||||
void parseClientPing();
|
void parseClientPing();
|
||||||
void parseServerPing();
|
void parseServerPing();
|
||||||
void parseSnapshot(Packet& packet);
|
|
||||||
void identifyPacketLoss();
|
void identifyPacketLoss();
|
||||||
EntityID createPlayer();
|
void createPlayer();
|
||||||
|
int GetPlayerIDFromEndpoint(boost::asio::ip::udp::endpoint endpoint);
|
||||||
|
// Debug event
|
||||||
|
EventRelay<Server, Events::InputCommand> m_EInputCommand;
|
||||||
|
bool OnInputCommand(const Events::InputCommand& e);
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
#define Camera_h__
|
#define Camera_h__
|
||||||
|
|
||||||
#include "../GLM.h"
|
#include "../GLM.h"
|
||||||
|
#include "../Core/Util/Rectangle.h"
|
||||||
|
|
||||||
class Camera
|
class Camera
|
||||||
{
|
{
|
||||||
@@ -32,7 +33,6 @@ public:
|
|||||||
glm::mat4 ViewMatrix() const { return m_ViewMatrix; }
|
glm::mat4 ViewMatrix() const { return m_ViewMatrix; }
|
||||||
void SetViewMatrix(glm::mat4 val);
|
void SetViewMatrix(glm::mat4 val);
|
||||||
|
|
||||||
|
|
||||||
float AspectRatio() const { return m_AspectRatio; }
|
float AspectRatio() const { return m_AspectRatio; }
|
||||||
void SetAspectRatio(float val);
|
void SetAspectRatio(float val);
|
||||||
|
|
||||||
@@ -48,6 +48,8 @@ public:
|
|||||||
void UpdateViewMatrix();
|
void UpdateViewMatrix();
|
||||||
void UpdateProjectionMatrix();
|
void UpdateProjectionMatrix();
|
||||||
|
|
||||||
|
glm::vec2 WorldToScreen(glm::vec3 worldCoord, Rectangle resolution);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
glm::vec3 m_Position;
|
glm::vec3 m_Position;
|
||||||
|
|||||||
@@ -1,5 +1,10 @@
|
|||||||
|
#ifndef DebugCameraInputController_h__
|
||||||
|
#define DebugCameraInputController_h__
|
||||||
|
|
||||||
#include <imgui/imgui.h>
|
#include <imgui/imgui.h>
|
||||||
#include "../Input/FirstPersonInputController.h"
|
#include "../Input/FirstPersonInputController.h"
|
||||||
|
#include "../Core/EMousePress.h"
|
||||||
|
#include "../Core/EMouseRelease.h"
|
||||||
|
|
||||||
template <typename EventContext>
|
template <typename EventContext>
|
||||||
class DebugCameraInputController : public FirstPersonInputController<EventContext>
|
class DebugCameraInputController : public FirstPersonInputController<EventContext>
|
||||||
@@ -7,7 +12,10 @@ class DebugCameraInputController : public FirstPersonInputController<EventContex
|
|||||||
public:
|
public:
|
||||||
DebugCameraInputController(EventBroker* eventBroker, unsigned int playerID)
|
DebugCameraInputController(EventBroker* eventBroker, unsigned int playerID)
|
||||||
: FirstPersonInputController(eventBroker, playerID)
|
: FirstPersonInputController(eventBroker, playerID)
|
||||||
{ }
|
{
|
||||||
|
EVENT_SUBSCRIBE_MEMBER(m_EMousePress, &DebugCameraInputController::OnMousePress);
|
||||||
|
EVENT_SUBSCRIBE_MEMBER(m_EMouseRelease, &DebugCameraInputController::OnMouseRelease);
|
||||||
|
}
|
||||||
|
|
||||||
void SetPosition(const glm::vec3 position) { m_Position = position; }
|
void SetPosition(const glm::vec3 position) { m_Position = position; }
|
||||||
void SetOrientation(const glm::quat orientation) { m_Orientation = orientation; }
|
void SetOrientation(const glm::quat orientation) { m_Orientation = orientation; }
|
||||||
@@ -19,17 +27,6 @@ public:
|
|||||||
{
|
{
|
||||||
ImGuiIO& io = ImGui::GetIO();
|
ImGuiIO& io = ImGui::GetIO();
|
||||||
|
|
||||||
if (e.Command == "PrimaryFire") {
|
|
||||||
if (e.Value > 0) {
|
|
||||||
if (!io.WantCaptureMouse) {
|
|
||||||
LockMouse();
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
UnlockMouse();
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!io.WantCaptureKeyboard) {
|
if (!io.WantCaptureKeyboard) {
|
||||||
if (e.Command == "Right") {
|
if (e.Command == "Right") {
|
||||||
float value = std::max(-1.f, std::min(e.Value, 1.f));
|
float value = std::max(-1.f, std::min(e.Value, 1.f));
|
||||||
@@ -63,4 +60,25 @@ protected:
|
|||||||
glm::vec3 m_Velocity = glm::vec3(0, 0, 0);
|
glm::vec3 m_Velocity = glm::vec3(0, 0, 0);
|
||||||
float m_BaseSpeed = 2.0f;
|
float m_BaseSpeed = 2.0f;
|
||||||
float m_Speed = m_BaseSpeed;
|
float m_Speed = m_BaseSpeed;
|
||||||
};
|
EventRelay<EventContext, Events::MousePress> m_EMousePress;
|
||||||
|
bool OnMousePress(const Events::MousePress& e)
|
||||||
|
{
|
||||||
|
if (e.Button == GLFW_MOUSE_BUTTON_2) {
|
||||||
|
ImGuiIO& io = ImGui::GetIO();
|
||||||
|
if (!io.WantCaptureMouse) {
|
||||||
|
LockMouse();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
EventRelay<EventContext, Events::MouseRelease> m_EMouseRelease;
|
||||||
|
bool OnMouseRelease(const Events::MouseRelease& e)
|
||||||
|
{
|
||||||
|
if (e.Button == GLFW_MOUSE_BUTTON_2) {
|
||||||
|
UnlockMouse();
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
||||||
@@ -0,0 +1,35 @@
|
|||||||
|
#ifndef DirectionalLightJob_h__
|
||||||
|
#define DirectionalLightJob_h__
|
||||||
|
|
||||||
|
#include <cstdint>
|
||||||
|
|
||||||
|
#include "../Common.h"
|
||||||
|
#include "../GLM.h"
|
||||||
|
#include "../Core/ComponentWrapper.h"
|
||||||
|
#include "RenderJob.h"
|
||||||
|
#include "../Core/Transform.h"
|
||||||
|
#include "../Core/World.h"
|
||||||
|
|
||||||
|
struct DirectionalLightJob : RenderJob
|
||||||
|
{
|
||||||
|
DirectionalLightJob(ComponentWrapper transformComponent, ComponentWrapper directionalLightComponent, World* m_World)
|
||||||
|
: RenderJob()
|
||||||
|
{
|
||||||
|
|
||||||
|
Direction = glm::vec4(0,0,-1,0) * glm::inverse(Transform::AbsoluteOrientation(m_World, transformComponent.EntityID));
|
||||||
|
//Direction = glm::vec4((glm::vec3)directionalLightComponent["Direction"], 0.f);
|
||||||
|
Color = (glm::vec4)directionalLightComponent["Color"];
|
||||||
|
Intensity = (double)directionalLightComponent["Intensity"];
|
||||||
|
};
|
||||||
|
|
||||||
|
glm::vec4 Direction;
|
||||||
|
glm::vec4 Color;
|
||||||
|
float Intensity;
|
||||||
|
|
||||||
|
void CalculateHash() override
|
||||||
|
{
|
||||||
|
Hash = 0;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
||||||
@@ -0,0 +1,53 @@
|
|||||||
|
#ifndef DrawBloomPass_h__
|
||||||
|
#define DrawBloomPass_h__
|
||||||
|
|
||||||
|
#include "IRenderer.h"
|
||||||
|
#include "DrawBloomPassState.h"
|
||||||
|
//#include "LightCullingPass.h" Finalpass om den skall skickas in
|
||||||
|
#include "FrameBuffer.h"
|
||||||
|
#include "ShaderProgram.h"
|
||||||
|
//#include "Util/UnorderedMapVec2.h"
|
||||||
|
#include "Texture.h"
|
||||||
|
|
||||||
|
class DrawBloomPass
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
DrawBloomPass(IRenderer* renderer /* ,Texture or finalpass*/ );
|
||||||
|
~DrawBloomPass() { }
|
||||||
|
void InitializeTextures();
|
||||||
|
void InitializeFrameBuffers();
|
||||||
|
void InitializeShaderPrograms();
|
||||||
|
void InitializeBuffers();
|
||||||
|
void ClearBuffer();
|
||||||
|
|
||||||
|
void FillGaussianBuffer(FrameBuffer* fb);
|
||||||
|
|
||||||
|
void Draw(GLuint texture);
|
||||||
|
|
||||||
|
//Getters
|
||||||
|
//Return the blurred result of the texture that was sent into draw
|
||||||
|
GLuint GaussianTexture() const { return m_GaussianTexture_vert; }
|
||||||
|
|
||||||
|
|
||||||
|
private:
|
||||||
|
void GenerateTexture(GLuint* texture, GLenum wrapping, GLenum filtering, glm::vec2 dimensions, GLint internalFormat, GLint format, GLenum type) const;
|
||||||
|
|
||||||
|
Texture* m_WhiteTexture;
|
||||||
|
Model* m_ScreenQuad;
|
||||||
|
|
||||||
|
const IRenderer* m_Renderer;
|
||||||
|
//const LightCullingPass* m_LightCullingPass
|
||||||
|
GLuint m_iterations = 9;
|
||||||
|
|
||||||
|
GLuint m_GaussianTexture_horiz;
|
||||||
|
GLuint m_GaussianTexture_vert;
|
||||||
|
|
||||||
|
FrameBuffer m_GaussianFrameBuffer_horiz;
|
||||||
|
FrameBuffer m_GaussianFrameBuffer_vert;
|
||||||
|
|
||||||
|
ShaderProgram* m_GaussianProgram_horiz;
|
||||||
|
ShaderProgram* m_GaussianProgram_vert;
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
#ifndef DrawBloomPassState_h__
|
||||||
|
#define DrawBloomPassState_h__
|
||||||
|
|
||||||
|
#include "Rendering/RenderState.h"
|
||||||
|
|
||||||
|
class DrawBloomPassState : public RenderState
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
DrawBloomPassState();
|
||||||
|
~DrawBloomPassState();
|
||||||
|
private:
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
||||||
@@ -0,0 +1,29 @@
|
|||||||
|
#ifndef DrawColorCorrectionPass_h__
|
||||||
|
#define DrawColorCorrectionPass_h__
|
||||||
|
|
||||||
|
#include "IRenderer.h"
|
||||||
|
#include "DrawScreenQuadPassState.h"
|
||||||
|
#include "FrameBuffer.h"
|
||||||
|
#include "ShaderProgram.h"
|
||||||
|
//#include "Util/UnorderedMapVec2.h"
|
||||||
|
#include "Texture.h"
|
||||||
|
|
||||||
|
class DrawColorCorrectionPass
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
DrawColorCorrectionPass(IRenderer* renderer);
|
||||||
|
~DrawColorCorrectionPass() { }
|
||||||
|
void InitializeFrameBuffers();
|
||||||
|
void InitializeShaderPrograms();
|
||||||
|
|
||||||
|
void Draw(GLuint sceneTexture, GLuint bloomTexture);
|
||||||
|
private:
|
||||||
|
const IRenderer* m_Renderer;
|
||||||
|
|
||||||
|
ShaderProgram* m_ColorCorrectionProgram;
|
||||||
|
|
||||||
|
Model* m_ScreenQuad;
|
||||||
|
GLfloat m_Exposure;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
||||||
@@ -17,22 +17,32 @@ public:
|
|||||||
void InitializeTextures();
|
void InitializeTextures();
|
||||||
void InitializeFrameBuffers();
|
void InitializeFrameBuffers();
|
||||||
void InitializeShaderPrograms();
|
void InitializeShaderPrograms();
|
||||||
|
|
||||||
void Draw(RenderScene& scene);
|
void Draw(RenderScene& scene);
|
||||||
|
void ClearBuffer();
|
||||||
|
|
||||||
//Getters
|
//Return the texture that is used in later stages to apply the bloom effect
|
||||||
|
GLuint BloomTexture() const { return m_BloomTexture; }
|
||||||
|
//Return the texture with diffuse and lighting of the scene.
|
||||||
|
GLuint SceneTexture() const { return m_SceneTexture; }
|
||||||
|
FrameBuffer* FinalPassFrameBuffer() { return &m_FinalPassFrameBuffer; }
|
||||||
|
|
||||||
|
|
||||||
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;
|
||||||
|
|
||||||
Texture* m_WhiteTexture;
|
Texture* m_WhiteTexture;
|
||||||
|
Texture* m_BlackTexture;
|
||||||
|
|
||||||
|
FrameBuffer m_FinalPassFrameBuffer;
|
||||||
|
GLuint m_BloomTexture;
|
||||||
|
GLuint m_SceneTexture;
|
||||||
|
GLuint m_DepthBuffer;
|
||||||
|
|
||||||
const IRenderer* m_Renderer;
|
const IRenderer* m_Renderer;
|
||||||
const LightCullingPass* m_LightCullingPass;
|
const LightCullingPass* m_LightCullingPass;
|
||||||
|
|
||||||
ShaderProgram* m_ForwardPlusProgram;
|
ShaderProgram* m_ForwardPlusProgram;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
@@ -6,7 +6,7 @@
|
|||||||
class DrawFinalPassState : public RenderState
|
class DrawFinalPassState : public RenderState
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
DrawFinalPassState();
|
DrawFinalPassState(GLuint frameBuffer);
|
||||||
~DrawFinalPassState();
|
~DrawFinalPassState();
|
||||||
private:
|
private:
|
||||||
|
|
||||||
|
|||||||
@@ -1,42 +0,0 @@
|
|||||||
#ifndef DrawScenePass_h__
|
|
||||||
#define DrawScenePass_h__
|
|
||||||
|
|
||||||
#include "IRenderer.h"
|
|
||||||
#include "DrawScenePassState.h"
|
|
||||||
#include "FrameBuffer.h"
|
|
||||||
#include "ShaderProgram.h"
|
|
||||||
#include "Util/UnorderedMapVec2.h"
|
|
||||||
#include "Texture.h"
|
|
||||||
|
|
||||||
class DrawScenePass
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
DrawScenePass(IRenderer* renderer);
|
|
||||||
~DrawScenePass() { }
|
|
||||||
void InitializeTextures();
|
|
||||||
void InitializeFrameBuffers();
|
|
||||||
void InitializeShaderPrograms();
|
|
||||||
|
|
||||||
void Draw(RenderScene& scene);
|
|
||||||
|
|
||||||
//Getters
|
|
||||||
|
|
||||||
|
|
||||||
private:
|
|
||||||
void GenerateTexture(GLuint* texture, GLenum wrapping, GLenum filtering, glm::vec2 dimensions, GLint internalFormat, GLint format, GLenum type) const;
|
|
||||||
|
|
||||||
static bool DepthSort(const std::shared_ptr<RenderJob> &i, const std::shared_ptr<RenderJob> &j)
|
|
||||||
{
|
|
||||||
return (i->Depth < j->Depth);
|
|
||||||
};
|
|
||||||
|
|
||||||
Texture* m_WhiteTexture;
|
|
||||||
|
|
||||||
const IRenderer* m_Renderer;
|
|
||||||
|
|
||||||
ShaderProgram* m_BasicForwardProgram;
|
|
||||||
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif
|
|
||||||
@@ -1,15 +0,0 @@
|
|||||||
#ifndef DrawScenePassState_h__
|
|
||||||
#define DrawScenePassState_h__
|
|
||||||
|
|
||||||
#include "Rendering/RenderState.h"
|
|
||||||
|
|
||||||
class DrawScenePassState : public RenderState
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
DrawScenePassState();
|
|
||||||
~DrawScenePassState();
|
|
||||||
private:
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif
|
|
||||||
@@ -0,0 +1,28 @@
|
|||||||
|
#ifndef DrawScreenQuadPass_h__
|
||||||
|
#define DrawScreenQuadPass_h__
|
||||||
|
|
||||||
|
#include "IRenderer.h"
|
||||||
|
#include "DrawScreenQuadPassState.h"
|
||||||
|
#include "FrameBuffer.h"
|
||||||
|
#include "ShaderProgram.h"
|
||||||
|
//#include "Util/UnorderedMapVec2.h"
|
||||||
|
#include "Texture.h"
|
||||||
|
|
||||||
|
class DrawScreenQuadPass
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
DrawScreenQuadPass(IRenderer* renderer);
|
||||||
|
~DrawScreenQuadPass() { }
|
||||||
|
void InitializeFrameBuffers();
|
||||||
|
void InitializeShaderPrograms();
|
||||||
|
|
||||||
|
void Draw(GLuint texture);
|
||||||
|
private:
|
||||||
|
const IRenderer* m_Renderer;
|
||||||
|
|
||||||
|
ShaderProgram* m_DrawQuadProgram;
|
||||||
|
|
||||||
|
Model* m_ScreenQuad;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
#ifndef DrawScreenQuadPassState_h__
|
||||||
|
#define DrawScreenQuadPassState_h__
|
||||||
|
|
||||||
|
#include "Rendering/RenderState.h"
|
||||||
|
|
||||||
|
class DrawScreenQuadPassState : public RenderState
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
DrawScreenQuadPassState();
|
||||||
|
~DrawScreenQuadPassState();
|
||||||
|
private:
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
||||||
@@ -2,20 +2,14 @@
|
|||||||
#define Events_SetCamera_h__
|
#define Events_SetCamera_h__
|
||||||
|
|
||||||
#include "../Core/EventBroker.h"
|
#include "../Core/EventBroker.h"
|
||||||
#include "../Core/Entity.h"
|
#include "../Core/EntityWrapper.h"
|
||||||
#include <string.h>
|
|
||||||
|
|
||||||
namespace Events
|
namespace Events
|
||||||
{
|
{
|
||||||
|
|
||||||
struct SetCamera : Event
|
struct SetCamera : Event
|
||||||
{
|
{
|
||||||
public:
|
EntityWrapper CameraEntity;
|
||||||
SetCamera() { };
|
|
||||||
std::string Name;
|
|
||||||
|
|
||||||
private:
|
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,36 @@
|
|||||||
|
#ifndef Font_h__
|
||||||
|
#define Font_h__
|
||||||
|
|
||||||
|
#include <ft2build.h>
|
||||||
|
#include FT_FREETYPE_H
|
||||||
|
#include FT_GLYPH_H
|
||||||
|
#include <boost/tokenizer.hpp>
|
||||||
|
#include <boost/lexical_cast.hpp>
|
||||||
|
|
||||||
|
#include "../OpenGL.h"
|
||||||
|
#include "../GLM.h"
|
||||||
|
#include "../Core/ResourceManager.h"
|
||||||
|
|
||||||
|
class Font : public Resource
|
||||||
|
{
|
||||||
|
friend class ResourceManager;
|
||||||
|
private:
|
||||||
|
Font(std::string path);
|
||||||
|
|
||||||
|
public:
|
||||||
|
struct Character {
|
||||||
|
GLuint TextureID; // ID handle of the glyph texture
|
||||||
|
glm::ivec2 Size; // Size of glyph
|
||||||
|
glm::ivec2 Bearing; // Offset from baseline to left/top of glyph
|
||||||
|
GLuint Advance; // Offset to advance to next glyph
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
int FontSize = 16;
|
||||||
|
|
||||||
|
~Font();
|
||||||
|
|
||||||
|
std::map<GLchar, Character> m_Characters;
|
||||||
|
};
|
||||||
|
#endif
|
||||||
@@ -31,15 +31,6 @@ public:
|
|||||||
void SetFullscreen(bool fullscreen) { m_Fullscreen = fullscreen; }
|
void SetFullscreen(bool fullscreen) { m_Fullscreen = fullscreen; }
|
||||||
bool VSYNC() const { return m_VSYNC; }
|
bool VSYNC() const { return m_VSYNC; }
|
||||||
void SetVSYNC(bool vsync) { m_VSYNC = vsync; }
|
void SetVSYNC(bool vsync) { m_VSYNC = vsync; }
|
||||||
::Camera* Camera() const { return m_Camera; }
|
|
||||||
void SetCamera(::Camera* camera)
|
|
||||||
{
|
|
||||||
if (camera == nullptr) {
|
|
||||||
m_Camera = m_DefaultCamera;
|
|
||||||
} else {
|
|
||||||
m_Camera = camera;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
virtual void Initialize() = 0;
|
virtual void Initialize() = 0;
|
||||||
virtual void Update(double dt) = 0;
|
virtual void Update(double dt) = 0;
|
||||||
virtual void Draw(RenderFrame& rq) = 0;
|
virtual void Draw(RenderFrame& rq) = 0;
|
||||||
@@ -54,8 +45,6 @@ protected:
|
|||||||
int m_GLVersion[2];
|
int m_GLVersion[2];
|
||||||
std::string m_GLVendor;
|
std::string m_GLVendor;
|
||||||
GLFWwindow* m_Window = nullptr;
|
GLFWwindow* m_Window = nullptr;
|
||||||
::Camera* m_DefaultCamera;
|
|
||||||
::Camera* m_Camera = nullptr;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // Renderer_h__
|
#endif // Renderer_h__
|
||||||
|
|||||||
@@ -46,8 +46,8 @@ private:
|
|||||||
int m_NumberOfTiles = 0;
|
int m_NumberOfTiles = 0;
|
||||||
|
|
||||||
struct Plane {
|
struct Plane {
|
||||||
glm::vec3 Normal;
|
glm::vec3 Normal = glm::vec3(0.f);
|
||||||
float d;
|
float d = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct Frustum {
|
struct Frustum {
|
||||||
@@ -56,20 +56,21 @@ private:
|
|||||||
Frustum* m_Frustums;
|
Frustum* m_Frustums;
|
||||||
|
|
||||||
//This should be a component
|
//This should be a component
|
||||||
struct PointLight {
|
struct LightSource {
|
||||||
glm::vec4 Position = glm::vec4(0.f);
|
glm::vec4 Position = glm::vec4(0.f);
|
||||||
|
glm::vec4 Direction = glm::vec4(10.f);
|
||||||
glm::vec4 Color = glm::vec4(1.f);
|
glm::vec4 Color = glm::vec4(1.f);
|
||||||
float Radius = 5.f;
|
float Radius = 5.f;
|
||||||
float Intensity = 0.8f;
|
float Intensity = 0.8f;
|
||||||
float Falloff = 0.3f;
|
float Falloff = 0.3f;
|
||||||
float Padding = 1337;
|
enum Type_t { Zero, Point, Directional, Spot } Type;
|
||||||
};
|
};
|
||||||
std::vector<PointLight> m_PointLights;
|
std::vector<LightSource> m_LightSources;
|
||||||
|
|
||||||
struct LightGrid {
|
struct LightGrid {
|
||||||
float Start;
|
float Start = 0;
|
||||||
float Amount;
|
float Amount = 0;
|
||||||
glm::vec2 Padding;
|
glm::vec2 Padding = glm::vec2(1.f, 2.f);
|
||||||
};
|
};
|
||||||
|
|
||||||
LightGrid* m_LightGrid;
|
LightGrid* m_LightGrid;
|
||||||
|
|||||||
@@ -12,6 +12,7 @@
|
|||||||
#include "../Core/ResourceManager.h"
|
#include "../Core/ResourceManager.h"
|
||||||
#include "Camera.h"
|
#include "Camera.h"
|
||||||
#include "../Core/World.h"
|
#include "../Core/World.h"
|
||||||
|
#include "../Core/Transform.h"
|
||||||
|
|
||||||
struct ModelJob : RenderJob
|
struct ModelJob : RenderJob
|
||||||
{
|
{
|
||||||
@@ -28,6 +29,9 @@ struct ModelJob : RenderJob
|
|||||||
Matrix = matrix;
|
Matrix = matrix;
|
||||||
Color = modelComponent["Color"];
|
Color = modelComponent["Color"];
|
||||||
Entity = modelComponent.EntityID;
|
Entity = modelComponent.EntityID;
|
||||||
|
glm::vec3 abspos = Transform::AbsolutePosition(world, modelComponent.EntityID);
|
||||||
|
glm::vec3 worldpos = glm::vec3(camera->ViewMatrix() * glm::vec4(abspos, 1));
|
||||||
|
Depth = worldpos.z;
|
||||||
World = world;
|
World = world;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -14,7 +14,6 @@ struct RenderJob
|
|||||||
friend class RenderQueue;
|
friend class RenderQueue;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
float Depth;
|
float Depth;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|||||||
@@ -11,54 +11,26 @@
|
|||||||
#include "Camera.h"
|
#include "Camera.h"
|
||||||
#include "RenderJob.h"
|
#include "RenderJob.h"
|
||||||
#include "ModelJob.h"
|
#include "ModelJob.h"
|
||||||
|
#include "TextJob.h"
|
||||||
#include "PointLightJob.h"
|
#include "PointLightJob.h"
|
||||||
|
#include "DirectionalLightJob.h"
|
||||||
|
|
||||||
/*
|
|
||||||
struct SpriteJob : RenderJob
|
|
||||||
{
|
|
||||||
unsigned int ShaderID = 0;
|
|
||||||
unsigned int TextureID = 0;
|
|
||||||
|
|
||||||
glm::mat4 ModelMatrix;
|
|
||||||
const Texture* DiffuseTexture = nullptr;
|
|
||||||
const Texture* NormalTexture = nullptr;
|
|
||||||
const Texture* SpecularTexture = nullptr;
|
|
||||||
glm::vec4 Color;
|
|
||||||
|
|
||||||
void CalculateHash() override
|
|
||||||
{
|
|
||||||
Hash = TextureID;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
struct PointLightJob : RenderJob
|
|
||||||
{
|
|
||||||
glm::vec4 Position;
|
|
||||||
glm::vec4 Color;
|
|
||||||
float Radius;
|
|
||||||
float Intensity;
|
|
||||||
float Falloff;
|
|
||||||
float padding = 123;
|
|
||||||
|
|
||||||
void CalculateHash() override
|
|
||||||
{
|
|
||||||
Hash = 0;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
*/
|
|
||||||
|
|
||||||
struct RenderScene
|
struct RenderScene
|
||||||
{
|
{
|
||||||
::Camera* Camera;
|
::Camera* Camera = nullptr;
|
||||||
std::list<std::shared_ptr<RenderJob>> ForwardJobs;
|
std::list<std::shared_ptr<RenderJob>> ForwardJobs;
|
||||||
std::list<std::shared_ptr<RenderJob>> PointLightJobs;
|
std::list<std::shared_ptr<RenderJob>> PointLightJobs;
|
||||||
|
std::list<std::shared_ptr<RenderJob>> TextJobs;
|
||||||
|
std::list<std::shared_ptr<RenderJob>> DirectionalLightJobs;
|
||||||
Rectangle Viewport;
|
Rectangle Viewport;
|
||||||
|
bool ClearDepth = false;
|
||||||
|
|
||||||
void Clear()
|
void Clear()
|
||||||
{
|
{
|
||||||
ForwardJobs.clear();
|
ForwardJobs.clear();
|
||||||
PointLightJobs.clear();
|
PointLightJobs.clear();
|
||||||
|
TextJobs.clear();
|
||||||
|
DirectionalLightJobs.clear();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -94,5 +66,4 @@ public:
|
|||||||
private:
|
private:
|
||||||
int m_Size = 0;
|
int m_Size = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
@@ -16,10 +16,10 @@ public:
|
|||||||
bool Disable(GLenum cap);
|
bool Disable(GLenum cap);
|
||||||
bool CullFace(GLenum mode);
|
bool CullFace(GLenum mode);
|
||||||
bool ClearColor(glm::vec4 color);
|
bool ClearColor(glm::vec4 color);
|
||||||
bool Clear(GLbitfield mask);
|
|
||||||
bool BindFramebuffer(GLint framebuffer);
|
bool BindFramebuffer(GLint framebuffer);
|
||||||
bool BlendEquation(GLenum mode);
|
bool BlendEquation(GLenum mode);
|
||||||
bool BlendFunc(GLenum sfactor, GLenum dfactor);
|
bool BlendFunc(GLenum sfactor, GLenum dfactor);
|
||||||
|
bool DepthMask(GLboolean flag);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
std::vector<std::function<void(void)>> m_ResetFunctions;
|
std::vector<std::function<void(void)>> m_ResetFunctions;
|
||||||
|
|||||||
@@ -20,36 +20,27 @@
|
|||||||
class RenderSystem : public ImpureSystem
|
class RenderSystem : public ImpureSystem
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
RenderSystem(EventBroker* eventBrokerer, const IRenderer* renderer, RenderFrame* renderFrame);
|
RenderSystem(World* world, EventBroker* eventBrokerer, const IRenderer* renderer, RenderFrame* renderFrame);
|
||||||
~RenderSystem();
|
~RenderSystem();
|
||||||
|
|
||||||
virtual void Update(World* world, double dt) override;
|
virtual void Update(double dt) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
World* m_World = nullptr;
|
|
||||||
const IRenderer* m_Renderer;
|
const IRenderer* m_Renderer;
|
||||||
|
|
||||||
RenderFrame* m_RenderFrame;
|
RenderFrame* m_RenderFrame;
|
||||||
bool m_SwitchCamera = false;
|
|
||||||
Camera* m_Camera;
|
Camera* m_Camera;
|
||||||
DebugCameraInputController<RenderSystem>* m_DebugCameraInputController;
|
EntityWrapper m_CurrentCamera = EntityWrapper::Invalid;
|
||||||
|
|
||||||
std::list<ComponentWrapper> m_CameraComponents;
|
|
||||||
|
|
||||||
EventRelay<RenderSystem, Events::SetCamera> m_ESetCamera;
|
EventRelay<RenderSystem, Events::SetCamera> m_ESetCamera;
|
||||||
bool OnSetCamera(const Events::SetCamera &event);
|
bool OnSetCamera(Events::SetCamera &event);
|
||||||
EntityID m_CurrentCamera = EntityID_Invalid;
|
void fillText(std::list<std::shared_ptr<RenderJob>>& jobs, World* world);
|
||||||
|
void fillPointLights(std::list<std::shared_ptr<RenderJob>>& jobs, World* world);
|
||||||
void switchCamera(EntityID entity);
|
void fillDirectionalLights(std::list<std::shared_ptr<RenderJob>>& jobs, World* world);
|
||||||
|
|
||||||
void updateCamera(World* world, double dt);
|
|
||||||
void updateProjectionMatrix(ComponentWrapper& cameraComponent);
|
|
||||||
|
|
||||||
void fillModels(std::list<std::shared_ptr<RenderJob>>& jobs, World* world);
|
|
||||||
void fillLight(std::list<std::shared_ptr<RenderJob>>& jobs, World* world);
|
|
||||||
|
|
||||||
EventRelay<RenderSystem, Events::InputCommand> m_EInputCommand;
|
EventRelay<RenderSystem, Events::InputCommand> m_EInputCommand;
|
||||||
bool OnInputCommand(const Events::InputCommand& e);
|
bool OnInputCommand(const Events::InputCommand& e);
|
||||||
|
|
||||||
|
void fillModels(std::list<std::shared_ptr<RenderJob>>& jobs);
|
||||||
|
void fillLight(std::list<std::shared_ptr<RenderJob>>& jobs);
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
@@ -11,20 +11,23 @@
|
|||||||
#include "FrameBuffer.h"
|
#include "FrameBuffer.h"
|
||||||
#include "../Core/World.h"
|
#include "../Core/World.h"
|
||||||
#include "PickingPass.h"
|
#include "PickingPass.h"
|
||||||
#include "DrawScenePass.h"
|
|
||||||
#include "LightCullingPass.h"
|
#include "LightCullingPass.h"
|
||||||
#include "DrawFinalPass.h"
|
#include "DrawFinalPass.h"
|
||||||
|
#include "DrawScreenQuadPass.h"
|
||||||
|
#include "DrawBloomPass.h"
|
||||||
|
#include "DrawColorCorrectionPass.h"
|
||||||
#include "../Core/EventBroker.h"
|
#include "../Core/EventBroker.h"
|
||||||
#include "ImGuiRenderPass.h"
|
#include "ImGuiRenderPass.h"
|
||||||
#include "Camera.h"
|
#include "Camera.h"
|
||||||
#include "../Core/Transform.h"
|
#include "../Core/Transform.h"
|
||||||
|
#include "imgui/imgui.h"
|
||||||
|
#include "TextPass.h"
|
||||||
|
|
||||||
class Renderer : public IRenderer
|
class Renderer : public IRenderer
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
Renderer(EventBroker* eventBroker, World* world)
|
Renderer(EventBroker* eventBroker)
|
||||||
: m_EventBroker(eventBroker)
|
: m_EventBroker(eventBroker)
|
||||||
, m_World(world)
|
|
||||||
{ }
|
{ }
|
||||||
|
|
||||||
virtual void Initialize() override;
|
virtual void Initialize() override;
|
||||||
@@ -36,7 +39,7 @@ public:
|
|||||||
private:
|
private:
|
||||||
//----------------------Variables----------------------//
|
//----------------------Variables----------------------//
|
||||||
EventBroker* m_EventBroker;
|
EventBroker* m_EventBroker;
|
||||||
World* m_World;
|
TextPass* m_TextPass;
|
||||||
|
|
||||||
Texture* m_ErrorTexture;
|
Texture* m_ErrorTexture;
|
||||||
Texture* m_WhiteTexture;
|
Texture* m_WhiteTexture;
|
||||||
@@ -45,11 +48,15 @@ private:
|
|||||||
Model* m_UnitQuad;
|
Model* m_UnitQuad;
|
||||||
Model* m_UnitSphere;
|
Model* m_UnitSphere;
|
||||||
|
|
||||||
DrawScenePass* m_DrawScenePass;
|
int m_DebugTextureToDraw = 0;
|
||||||
|
|
||||||
PickingPass* m_PickingPass;
|
PickingPass* m_PickingPass;
|
||||||
LightCullingPass* m_LightCullingPass;
|
LightCullingPass* m_LightCullingPass;
|
||||||
ImGuiRenderPass* m_ImGuiRenderPass;
|
ImGuiRenderPass* m_ImGuiRenderPass;
|
||||||
DrawFinalPass* m_DrawFinalPass;
|
DrawFinalPass* m_DrawFinalPass;
|
||||||
|
DrawScreenQuadPass* m_DrawScreenQuadPass;
|
||||||
|
DrawBloomPass* m_DrawBloomPass;
|
||||||
|
DrawColorCorrectionPass* m_DrawColorCorrectionPass;
|
||||||
|
|
||||||
//----------------------Functions----------------------//
|
//----------------------Functions----------------------//
|
||||||
void InitializeWindow();
|
void InitializeWindow();
|
||||||
@@ -59,14 +66,13 @@ private:
|
|||||||
//TODO: Renderer: Get InputUpdate out of renderer
|
//TODO: Renderer: Get InputUpdate out of renderer
|
||||||
void InputUpdate(double dt);
|
void InputUpdate(double dt);
|
||||||
//void PickingPass(RenderQueueCollection& rq);
|
//void PickingPass(RenderQueueCollection& rq);
|
||||||
void DrawScreenQuad(GLuint textureToDraw);
|
//void DrawScreenQuad(GLuint textureToDraw);
|
||||||
|
|
||||||
static bool DepthSort(const std::shared_ptr<RenderJob> &i, const std::shared_ptr<RenderJob> &j) { return (i->Depth < j->Depth); }
|
static bool DepthSort(const std::shared_ptr<RenderJob> &i, const std::shared_ptr<RenderJob> &j) { return (i->Depth < j->Depth); }
|
||||||
void FillDepth(RenderScene& scene);
|
void SortRenderJobsByDepth(RenderScene &scene);
|
||||||
void GenerateTexture(GLuint* texture, GLenum wrapping, GLenum filtering, glm::vec2 dimensions, GLint internalFormat, GLint format, GLenum type);
|
void GenerateTexture(GLuint* texture, GLenum wrapping, GLenum filtering, glm::vec2 dimensions, GLint internalFormat, GLint format, GLenum type);
|
||||||
//--------------------ShaderPrograms-------------------//
|
//--------------------ShaderPrograms-------------------//
|
||||||
ShaderProgram* m_BasicForwardProgram;
|
ShaderProgram* m_BasicForwardProgram;
|
||||||
ShaderProgram* m_DrawScreenQuadProgram;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
@@ -0,0 +1,58 @@
|
|||||||
|
#ifndef TextJob_h__
|
||||||
|
#define TextJob_h__
|
||||||
|
|
||||||
|
#include <cstdint>
|
||||||
|
|
||||||
|
#include "../Common.h"
|
||||||
|
#include "../GLM.h"
|
||||||
|
#include "../Core/ComponentWrapper.h"
|
||||||
|
#include "Texture.h"
|
||||||
|
#include "RenderJob.h"
|
||||||
|
#include "../Core/ResourceManager.h"
|
||||||
|
#include "Font.h"
|
||||||
|
|
||||||
|
struct TextJob : RenderJob
|
||||||
|
{
|
||||||
|
TextJob(glm::mat4 matrix, Font* font, ComponentWrapper textComponent)
|
||||||
|
: RenderJob()
|
||||||
|
{
|
||||||
|
Matrix = matrix;
|
||||||
|
Color = (glm::vec4)textComponent["Color"];
|
||||||
|
Content = (std::string)textComponent["Content"];
|
||||||
|
Resource = font;
|
||||||
|
|
||||||
|
if ((int)textComponent["Alignment"] == textComponent["Alignment"].Enum("Left")) {
|
||||||
|
Alignment = AlignmentEnum::Left;
|
||||||
|
} else if ((int)textComponent["Alignment"] == textComponent["Alignment"].Enum("Right")) {
|
||||||
|
Alignment = AlignmentEnum::Right;
|
||||||
|
} else if ((int)textComponent["Alignment"] == textComponent["Alignment"].Enum("Center")) {
|
||||||
|
Alignment = AlignmentEnum::Center;
|
||||||
|
} else {
|
||||||
|
LOG_ERROR("Text alignment invalid");
|
||||||
|
Alignment = AlignmentEnum::Left;
|
||||||
|
}
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
enum class AlignmentEnum
|
||||||
|
{
|
||||||
|
Left,
|
||||||
|
Right,
|
||||||
|
Center
|
||||||
|
};
|
||||||
|
|
||||||
|
glm::mat4 Matrix;
|
||||||
|
glm::vec4 Color;
|
||||||
|
std::string Content;
|
||||||
|
Font* Resource;
|
||||||
|
AlignmentEnum Alignment;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void CalculateHash() override
|
||||||
|
{
|
||||||
|
Hash = 0;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
||||||
@@ -0,0 +1,33 @@
|
|||||||
|
#ifndef TextRenderer_h__
|
||||||
|
#define TextRenderer_h__
|
||||||
|
|
||||||
|
#include <ft2build.h>
|
||||||
|
#include FT_FREETYPE_H
|
||||||
|
|
||||||
|
#include "../OpenGL.h"
|
||||||
|
#include "../GLM.h"
|
||||||
|
#include "ShaderProgram.h"
|
||||||
|
#include "Font.h"
|
||||||
|
#include "../Core/ResourceManager.h"
|
||||||
|
#include "RenderQueue.h"
|
||||||
|
#include "TextPassState.h"
|
||||||
|
#include "FrameBuffer.h"
|
||||||
|
|
||||||
|
class TextPass
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
TextPass();
|
||||||
|
void Initialize();
|
||||||
|
void Update();
|
||||||
|
void Draw(RenderScene& scene, FrameBuffer& frameBuffer);
|
||||||
|
|
||||||
|
private:
|
||||||
|
void renderText(std::string text, Font* font, TextJob::AlignmentEnum alignment, glm::vec4 color, glm::mat4 modelMatrix, glm::mat4 projectionMatrix, glm::mat4 viewMatrix);
|
||||||
|
|
||||||
|
Font* font;
|
||||||
|
GLuint VAO, VBO;
|
||||||
|
ShaderProgram* m_TextProgram;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
#endif
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
#ifndef TextPassState_h__
|
||||||
|
#define TextPassState_h__
|
||||||
|
|
||||||
|
#include "Rendering/RenderState.h"
|
||||||
|
|
||||||
|
class TextPassState : public RenderState
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
TextPassState(GLuint frameBuffer);
|
||||||
|
~TextPassState();
|
||||||
|
private:
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
||||||
@@ -18,6 +18,7 @@ public:
|
|||||||
void Bind(GLenum textureUnit = GL_TEXTURE0);
|
void Bind(GLenum textureUnit = GL_TEXTURE0);
|
||||||
|
|
||||||
GLuint m_Texture = 0;
|
GLuint m_Texture = 0;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -0,0 +1,17 @@
|
|||||||
|
#ifndef CommonFuntions_h__
|
||||||
|
#define CommonFuntions_h__
|
||||||
|
|
||||||
|
#include "../../Common.h"
|
||||||
|
#include "../../OpenGL.h"
|
||||||
|
#include "../../GLM.h"
|
||||||
|
|
||||||
|
class CommonFuntions
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
CommonFuntions() = delete;
|
||||||
|
|
||||||
|
private:
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
||||||
+2
-1
@@ -19,7 +19,8 @@
|
|||||||
#include "Rendering/RenderSystem.h"
|
#include "Rendering/RenderSystem.h"
|
||||||
#include "Core/EntityFileParser.h"
|
#include "Core/EntityFileParser.h"
|
||||||
#include "Core/Octree.h"
|
#include "Core/Octree.h"
|
||||||
|
#include "Rendering/Font.h"
|
||||||
|
#include "Systems/InterpolationSystem.h"
|
||||||
// Network
|
// Network
|
||||||
#include <boost/thread.hpp>
|
#include <boost/thread.hpp>
|
||||||
#include "Network/Network.h"
|
#include "Network/Network.h"
|
||||||
|
|||||||
@@ -0,0 +1,55 @@
|
|||||||
|
#ifndef CapturePointSystem_h__
|
||||||
|
#define CapturePointSystem_h__
|
||||||
|
|
||||||
|
#include <GLFW/glfw3.h>
|
||||||
|
#include <glm/common.hpp>
|
||||||
|
|
||||||
|
#include "Common.h"
|
||||||
|
#include "Core/System.h"
|
||||||
|
#include "Engine/Collision/ETrigger.h"
|
||||||
|
#include "Core/ECaptured.h"
|
||||||
|
#include "Core/EWin.h"
|
||||||
|
|
||||||
|
#include <tuple>
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
|
class CapturePointSystem : public PureSystem
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
//WARNING: on new map, destroy all info in the vectors, as well as reset all variables (just make new?)
|
||||||
|
CapturePointSystem(World* world, EventBroker* eventBroker);
|
||||||
|
|
||||||
|
//updatecomponent
|
||||||
|
virtual void UpdateComponent(EntityWrapper& entity, ComponentWrapper& capturePoint, double dt) override;
|
||||||
|
|
||||||
|
private:
|
||||||
|
//methods which will take care of specific events
|
||||||
|
EventRelay<CapturePointSystem, Events::TriggerTouch> m_ETriggerTouch;
|
||||||
|
bool CapturePointSystem::OnTriggerTouch(const Events::TriggerTouch& e);
|
||||||
|
EventRelay<CapturePointSystem, Events::TriggerLeave> m_ETriggerLeave;
|
||||||
|
bool CapturePointSystem::OnTriggerLeave(const Events::TriggerLeave& e);
|
||||||
|
EventRelay<CapturePointSystem, Events::Captured> m_ECaptured;
|
||||||
|
bool CapturePointSystem::OnCaptured(const Events::Captured& e);
|
||||||
|
|
||||||
|
bool m_WinnerWasFound = false;
|
||||||
|
//need to track these variables for the captureSystem to work as per design!
|
||||||
|
const int m_NotACapturePoint = 999;
|
||||||
|
int m_RedTeamNextPossibleCapturePoint = m_NotACapturePoint;
|
||||||
|
int m_BlueTeamNextPossibleCapturePoint = m_NotACapturePoint;
|
||||||
|
int m_RedTeamHomeCapturePoint = m_NotACapturePoint;
|
||||||
|
int m_BlueTeamHomeCapturePoint = m_NotACapturePoint;
|
||||||
|
|
||||||
|
int m_NumberOfCapturePoints = 0;
|
||||||
|
std::map<int, EntityID> m_CapturePointNumberToEntityIDMap;
|
||||||
|
|
||||||
|
//std::vector<ComponentWrapper>
|
||||||
|
|
||||||
|
const double m_CaptureTimeToTakeOver = 15.0;
|
||||||
|
bool m_ResetTimers = false;
|
||||||
|
|
||||||
|
//vectors which will keep track of enter/leave changes
|
||||||
|
std::vector<std::tuple<EntityID, EntityID>> m_ETriggerTouchVector;
|
||||||
|
std::vector<std::tuple<EntityID, EntityID>> m_ETriggerLeaveVector;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
||||||
@@ -16,10 +16,10 @@
|
|||||||
class HealthSystem : public PureSystem
|
class HealthSystem : public PureSystem
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
HealthSystem(EventBroker* eventBroker);
|
HealthSystem(World* world, EventBroker* eventBroker);
|
||||||
|
|
||||||
//updatecomponent
|
//updatecomponent
|
||||||
virtual void UpdateComponent(World* world, 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
|
//methods which will take care of specific events
|
||||||
|
|||||||
@@ -0,0 +1,53 @@
|
|||||||
|
#ifndef Systems_InterpolationSystem_h__
|
||||||
|
#define Systems_InterpolationSystem_h__
|
||||||
|
|
||||||
|
#include <queue>
|
||||||
|
#include <unordered_map>
|
||||||
|
#include <boost/shared_array.hpp>
|
||||||
|
#include <glm/common.hpp>
|
||||||
|
#include <glm/gtc/quaternion.hpp>
|
||||||
|
|
||||||
|
#include "Common.h"
|
||||||
|
#include "Core/System.h"
|
||||||
|
#include "Core/EventBroker.h"
|
||||||
|
|
||||||
|
#include "Network/EInterpolate.h"
|
||||||
|
|
||||||
|
#define SNAPSHOTINTERVAL 0.05f
|
||||||
|
|
||||||
|
class InterpolationSystem : public PureSystem
|
||||||
|
{
|
||||||
|
struct Transform
|
||||||
|
{
|
||||||
|
glm::vec3 Position;
|
||||||
|
glm::vec3 Scale;
|
||||||
|
glm::quat Orientation;
|
||||||
|
double interpolationTime;
|
||||||
|
};
|
||||||
|
public:
|
||||||
|
InterpolationSystem(World* world, EventBroker* eventBroker)
|
||||||
|
: System(world, eventBroker)
|
||||||
|
, PureSystem("Transform")
|
||||||
|
{
|
||||||
|
EVENT_SUBSCRIBE_MEMBER(m_EInterpolate, &InterpolationSystem::OnInterpolate);
|
||||||
|
}
|
||||||
|
~InterpolationSystem() { }
|
||||||
|
virtual void UpdateComponent(EntityWrapper& entity, ComponentWrapper& transform, double dt) override;
|
||||||
|
private:
|
||||||
|
std::unordered_map<EntityID, Transform> m_NextTransform;
|
||||||
|
std::unordered_map<EntityID, Transform> m_LastReceivedTransform;
|
||||||
|
|
||||||
|
//glm::vec3 vectorInterpolation(glm::vec3 prev, glm::vec3 next, double currentTime);
|
||||||
|
template <typename T>
|
||||||
|
T vectorInterpolation(T prev, T next, double currentTime)
|
||||||
|
{
|
||||||
|
T difference = next - prev;
|
||||||
|
T vector = (difference / SNAPSHOTINTERVAL) * static_cast<float>(currentTime);
|
||||||
|
return vector;
|
||||||
|
}
|
||||||
|
|
||||||
|
EventRelay<InterpolationSystem, Events::Interpolate> m_EInterpolate;
|
||||||
|
bool InterpolationSystem::OnInterpolate(const Events::Interpolate& e);
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
||||||
@@ -5,10 +5,10 @@
|
|||||||
class PlayerMovementSystem : public PureSystem
|
class PlayerMovementSystem : public PureSystem
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
PlayerMovementSystem(EventBroker* eventBroker)
|
PlayerMovementSystem(World* world, EventBroker* eventBroker)
|
||||||
: System(eventBroker)
|
: System(world, eventBroker)
|
||||||
, PureSystem("Player")
|
, PureSystem("Player")
|
||||||
{ }
|
{ }
|
||||||
|
|
||||||
virtual void UpdateComponent(World* world, EntityWrapper& entity, ComponentWrapper& component, double dt);
|
virtual void UpdateComponent(EntityWrapper& entity, ComponentWrapper& component, double dt);
|
||||||
};
|
};
|
||||||
@@ -6,9 +6,9 @@
|
|||||||
class PlayerSpawnSystem : public ImpureSystem
|
class PlayerSpawnSystem : public ImpureSystem
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
PlayerSpawnSystem(EventBroker* eventBroker);
|
PlayerSpawnSystem(World* world, EventBroker* eventBroker);
|
||||||
|
|
||||||
virtual void Update(World* world, double dt) override;
|
virtual void Update(double dt) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
EventRelay<PlayerSpawnSystem, Events::InputCommand> m_OnInputCommand;
|
EventRelay<PlayerSpawnSystem, Events::InputCommand> m_OnInputCommand;
|
||||||
|
|||||||
@@ -4,14 +4,14 @@
|
|||||||
class RaptorCopterSystem : public PureSystem
|
class RaptorCopterSystem : public PureSystem
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
RaptorCopterSystem(EventBroker* eventBroker)
|
RaptorCopterSystem(World* world, EventBroker* eventBroker)
|
||||||
: System(eventBroker)
|
: System(world, eventBroker)
|
||||||
, PureSystem("RaptorCopter")
|
, PureSystem("RaptorCopter")
|
||||||
{ }
|
{ }
|
||||||
|
|
||||||
virtual void UpdateComponent(World* world, EntityWrapper& entity, ComponentWrapper& component, double dt) override
|
virtual void UpdateComponent(EntityWrapper& entity, ComponentWrapper& component, double dt) override
|
||||||
{
|
{
|
||||||
ComponentWrapper& transform = world->GetComponent(component.EntityID, "Transform");
|
ComponentWrapper& transform = m_World->GetComponent(component.EntityID, "Transform");
|
||||||
(glm::vec3&)transform["Orientation"] += (float)(double)component["Speed"] * (float)dt * (glm::vec3)component["Axis"];
|
(glm::vec3&)transform["Orientation"] += (float)(double)component["Speed"] * (float)dt * (glm::vec3)component["Axis"];
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@@ -13,7 +13,7 @@
|
|||||||
class SpawnerSystem : public System
|
class SpawnerSystem : public System
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
SpawnerSystem(EventBroker* eventBroker);
|
SpawnerSystem(World* world, EventBroker* eventBroker);
|
||||||
|
|
||||||
static EntityWrapper Spawn(EntityWrapper spawner, EntityWrapper parent = EntityWrapper::Invalid);
|
static EntityWrapper Spawn(EntityWrapper spawner, EntityWrapper parent = EntityWrapper::Invalid);
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,38 @@
|
|||||||
|
#ifndef WeaponSystem_h__
|
||||||
|
#define WeaponSystem_h__
|
||||||
|
|
||||||
|
//#include <GLFW/glfw3.h>
|
||||||
|
//#include <glm/common.hpp>
|
||||||
|
#include "Rendering/IRenderer.h"
|
||||||
|
|
||||||
|
#include "Common.h"
|
||||||
|
#include "Core/System.h"
|
||||||
|
#include "Core/EPlayerDamage.h"
|
||||||
|
#include "Core/EShoot.h"
|
||||||
|
#include "Input/EInputCommand.h"
|
||||||
|
|
||||||
|
#include <tuple>
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
|
|
||||||
|
class WeaponSystem : public ImpureSystem
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
WeaponSystem(World* world, EventBroker* eventBroker, IRenderer* renderer);
|
||||||
|
|
||||||
|
virtual void Update(double dt) override;
|
||||||
|
|
||||||
|
private:
|
||||||
|
//methods which will take care of specific events
|
||||||
|
EventRelay<WeaponSystem, Events::Shoot> m_EShoot;
|
||||||
|
bool WeaponSystem::OnShoot(const Events::Shoot& e);
|
||||||
|
|
||||||
|
EventRelay<WeaponSystem, Events::InputCommand> m_EInputCommand;
|
||||||
|
bool WeaponSystem::OnInputCommand(const Events::InputCommand& e);
|
||||||
|
|
||||||
|
IRenderer* m_Renderer;
|
||||||
|
|
||||||
|
std::vector<std::tuple<EntityID, glm::vec2>> m_EShootVector;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
||||||
@@ -6,11 +6,14 @@
|
|||||||
<xs:include schemaLocation="Components/Model.xsd"/>
|
<xs:include schemaLocation="Components/Model.xsd"/>
|
||||||
<xs:include schemaLocation="Components/RaptorCopter.xsd"/>
|
<xs:include schemaLocation="Components/RaptorCopter.xsd"/>
|
||||||
<xs:include schemaLocation="Components/Player.xsd"/>
|
<xs:include schemaLocation="Components/Player.xsd"/>
|
||||||
|
<xs:include schemaLocation="Components/Text.xsd"/>
|
||||||
<xs:include schemaLocation="Components/Camera.xsd"/>
|
<xs:include schemaLocation="Components/Camera.xsd"/>
|
||||||
<xs:include schemaLocation="Components/AABB.xsd"/>
|
<xs:include schemaLocation="Components/AABB.xsd"/>
|
||||||
<xs:include schemaLocation="Components/PointLight.xsd"/>
|
<xs:include schemaLocation="Components/PointLight.xsd"/>
|
||||||
|
<xs:include schemaLocation="Components/DirectionalLight.xsd"/>
|
||||||
<xs:include schemaLocation="Components/Trigger.xsd"/>
|
<xs:include schemaLocation="Components/Trigger.xsd"/>
|
||||||
<xs:include schemaLocation="Components/Health.xsd"/>
|
<xs:include schemaLocation="Components/Health.xsd"/>
|
||||||
|
<xs:include schemaLocation="Components/CapturePoint.xsd"/>
|
||||||
<xs:include schemaLocation="Components/Listener.xsd"/>
|
<xs:include schemaLocation="Components/Listener.xsd"/>
|
||||||
<xs:include schemaLocation="Components/SoundEmitter.xsd"/>
|
<xs:include schemaLocation="Components/SoundEmitter.xsd"/>
|
||||||
<xs:include schemaLocation="Components/Collidable.xsd"/>
|
<xs:include schemaLocation="Components/Collidable.xsd"/>
|
||||||
@@ -18,4 +21,6 @@
|
|||||||
<xs:include schemaLocation="Components/SpawnPoint.xsd"/>
|
<xs:include schemaLocation="Components/SpawnPoint.xsd"/>
|
||||||
<xs:include schemaLocation="Components/PlayerSpawn.xsd"/>
|
<xs:include schemaLocation="Components/PlayerSpawn.xsd"/>
|
||||||
<xs:include schemaLocation="Components/Team.xsd"/>
|
<xs:include schemaLocation="Components/Team.xsd"/>
|
||||||
|
<xs:include schemaLocation="Components/UniformScale.xsd"/>
|
||||||
|
<xs:include schemaLocation="Components/EditorWidget.xsd"/>
|
||||||
</xs:schema>
|
</xs:schema>
|
||||||
@@ -1,6 +1,5 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
|
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
|
||||||
<Camera xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="Camera.xsd">
|
<Camera xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="Camera.xsd">
|
||||||
<Name>cam</Name>
|
|
||||||
<FOV>45</FOV>
|
<FOV>45</FOV>
|
||||||
<NearClip>0.01</NearClip>
|
<NearClip>0.01</NearClip>
|
||||||
<FarClip>5000</FarClip>
|
<FarClip>5000</FarClip>
|
||||||
|
|||||||
@@ -9,7 +9,6 @@
|
|||||||
</xs:annotation>
|
</xs:annotation>
|
||||||
<xs:complexType>
|
<xs:complexType>
|
||||||
<xs:all>
|
<xs:all>
|
||||||
<xs:element name="Name" type="t:string" minOccurs="0"/>
|
|
||||||
<xs:element name="FOV" type="t:double" minOccurs="0">
|
<xs:element name="FOV" type="t:double" minOccurs="0">
|
||||||
<xs:annotation><xs:documentation>Vertical Field of View in degrees</xs:documentation></xs:annotation>
|
<xs:annotation><xs:documentation>Vertical Field of View in degrees</xs:documentation></xs:annotation>
|
||||||
</xs:element>
|
</xs:element>
|
||||||
|
|||||||
@@ -0,0 +1,6 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
|
||||||
|
<CapturePoint xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="CapturePoint.xsd">
|
||||||
|
<CapturePointNumber>0</CapturePointNumber>
|
||||||
|
<CaptureTimer>0</CaptureTimer>
|
||||||
|
<HomePointForTeam><Spectator/></HomePointForTeam>
|
||||||
|
</CapturePoint>
|
||||||
@@ -0,0 +1,44 @@
|
|||||||
|
<?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:complexType name="TeamEnum" mixed="true">
|
||||||
|
<xs:complexContent>
|
||||||
|
<xs:extension base="t:enum">
|
||||||
|
<xs:choice>
|
||||||
|
<xs:element name="Spectator" type="xs:integer" fixed="1" minOccurs="0"/>
|
||||||
|
<xs:element name="Red" type="xs:integer" fixed="2" minOccurs="0"/>
|
||||||
|
<xs:element name="Blue" type="xs:integer" fixed="3" minOccurs="0"/>
|
||||||
|
</xs:choice>
|
||||||
|
</xs:extension>
|
||||||
|
</xs:complexContent>
|
||||||
|
</xs:complexType>
|
||||||
|
|
||||||
|
<xs:element name="CapturePoint">
|
||||||
|
<xs:annotation>
|
||||||
|
<xs:documentation>A Capture Point. Add a Team Component to specify who currently owns it</xs:documentation>
|
||||||
|
</xs:annotation>
|
||||||
|
<xs:complexType>
|
||||||
|
<xs:all>
|
||||||
|
<xs:element name="CaptureTimer" type="t:double" minOccurs="0">
|
||||||
|
<xs:annotation>
|
||||||
|
<xs:documentation>CaptureTimer handled by Capture Point System</xs:documentation>
|
||||||
|
</xs:annotation>
|
||||||
|
</xs:element>
|
||||||
|
<xs:element name="CapturePointNumber" type="t:int" minOccurs="0">
|
||||||
|
<xs:annotation>
|
||||||
|
<xs:documentation>CapturePointNumber specify an int number for this</xs:documentation>
|
||||||
|
</xs:annotation>
|
||||||
|
</xs:element>
|
||||||
|
|
||||||
|
<xs:element name="HomePointForTeam" type="TeamEnum" minOccurs="0">
|
||||||
|
<xs:annotation>
|
||||||
|
<xs:documentation>Specify if this is a HomePoint for either team</xs:documentation>
|
||||||
|
</xs:annotation>
|
||||||
|
</xs:element>
|
||||||
|
|
||||||
|
</xs:all>
|
||||||
|
</xs:complexType>
|
||||||
|
</xs:element>
|
||||||
|
</xs:schema>
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
|
||||||
|
<DirectionalLight xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="DirectionalLight.xsd">
|
||||||
|
<Color R="1" G="1" B="1" A="1"/>
|
||||||
|
<Intensity>0.8</Intensity>
|
||||||
|
<Visible>true</Visible>
|
||||||
|
</DirectionalLight>
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
<?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="DirectionalLight">
|
||||||
|
<xs:annotation>
|
||||||
|
<xs:documentation>A directional light that shines bright like the future.</xs:documentation>
|
||||||
|
</xs:annotation>
|
||||||
|
<xs:complexType>
|
||||||
|
<xs:all>
|
||||||
|
<xs:element name="Color" type="t:Color" minOccurs="0"/>
|
||||||
|
<xs:element name="Intensity" type="t:double" minOccurs="0"/>
|
||||||
|
<xs:element name="Visible" type="t:bool" minOccurs="0"/>
|
||||||
|
</xs:all>
|
||||||
|
</xs:complexType>
|
||||||
|
</xs:element>
|
||||||
|
</xs:schema>
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
|
||||||
|
<EditorWidget xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="EditorWidget.xsd">
|
||||||
|
<Type><Translate/></Type>
|
||||||
|
<Axis X="0" Y="0" Z="0"/>
|
||||||
|
</EditorWidget>
|
||||||
@@ -0,0 +1,26 @@
|
|||||||
|
<?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:complexType name="WidgetEnum" mixed="true">
|
||||||
|
<xs:complexContent>
|
||||||
|
<xs:extension base="t:enum">
|
||||||
|
<xs:choice>
|
||||||
|
<xs:element name="Translate" type="xs:integer" fixed="0" minOccurs="0"/>
|
||||||
|
<xs:element name="Rotate" type="xs:integer" fixed="1" minOccurs="0"/>
|
||||||
|
<xs:element name="Scale" type="xs:integer" fixed="2" minOccurs="0"/>
|
||||||
|
</xs:choice>
|
||||||
|
</xs:extension>
|
||||||
|
</xs:complexContent>
|
||||||
|
</xs:complexType>
|
||||||
|
|
||||||
|
<xs:element name="EditorWidget">
|
||||||
|
<xs:complexType>
|
||||||
|
<xs:all>
|
||||||
|
<xs:element name="Type" type="WidgetEnum" minOccurs="0"/>
|
||||||
|
<xs:element name="Axis" type="t:Vector" minOccurs="0"/>
|
||||||
|
</xs:all>
|
||||||
|
</xs:complexType>
|
||||||
|
</xs:element>
|
||||||
|
</xs:schema>
|
||||||
@@ -9,7 +9,9 @@
|
|||||||
</xs:annotation>
|
</xs:annotation>
|
||||||
<xs:complexType>
|
<xs:complexType>
|
||||||
<xs:all>
|
<xs:all>
|
||||||
<xs:element name="Velocity" type="t:Vector" minOccurs="0"/>
|
<xs:element name="Velocity" type="t:Vector" minOccurs="0">
|
||||||
|
<xs:annotation><xs:documentation>m/s^2</xs:documentation></xs:annotation>
|
||||||
|
</xs:element>
|
||||||
<xs:element name="Gravity" type="t:bool" minOccurs="0"/>
|
<xs:element name="Gravity" type="t:bool" minOccurs="0"/>
|
||||||
</xs:all>
|
</xs:all>
|
||||||
</xs:complexType>
|
</xs:complexType>
|
||||||
|
|||||||
@@ -4,6 +4,9 @@
|
|||||||
<xs:import schemaLocation="../Types.xsd" namespace="types"/>
|
<xs:import schemaLocation="../Types.xsd" namespace="types"/>
|
||||||
|
|
||||||
<xs:element name="Player">
|
<xs:element name="Player">
|
||||||
|
<xs:annotation>
|
||||||
|
<xs:documentation>The player charachter</xs:documentation>
|
||||||
|
</xs:annotation>
|
||||||
<xs:complexType>
|
<xs:complexType>
|
||||||
<xs:all>
|
<xs:all>
|
||||||
<xs:element name="Velocity" type="t:Vector" minOccurs="0"/>
|
<xs:element name="Velocity" type="t:Vector" minOccurs="0"/>
|
||||||
|
|||||||
@@ -12,7 +12,7 @@
|
|||||||
<xs:element name="Color" type="t:Color" minOccurs="0"/>
|
<xs:element name="Color" type="t:Color" minOccurs="0"/>
|
||||||
<xs:element name="Radius" type="t:double" minOccurs="0"/>
|
<xs:element name="Radius" type="t:double" minOccurs="0"/>
|
||||||
<xs:element name="Intensity" type="t:double" minOccurs="0"/>
|
<xs:element name="Intensity" type="t:double" minOccurs="0"/>
|
||||||
<xs:element name="Falloff">
|
<xs:element name="Falloff" minOccurs="0">
|
||||||
<xs:simpleType>
|
<xs:simpleType>
|
||||||
<xs:restriction base="t:double">
|
<xs:restriction base="t:double">
|
||||||
<xs:minInclusive value="0"/>
|
<xs:minInclusive value="0"/>
|
||||||
|
|||||||
@@ -14,7 +14,7 @@
|
|||||||
</xs:extension>
|
</xs:extension>
|
||||||
</xs:complexContent>
|
</xs:complexContent>
|
||||||
</xs:complexType>
|
</xs:complexType>
|
||||||
|
|
||||||
<xs:element name="Team">
|
<xs:element name="Team">
|
||||||
<xs:annotation>
|
<xs:annotation>
|
||||||
<xs:documentation>Represents entity team affiliation</xs:documentation>
|
<xs:documentation>Represents entity team affiliation</xs:documentation>
|
||||||
|
|||||||
@@ -0,0 +1,8 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
|
||||||
|
<Text xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="Text.xsd">
|
||||||
|
<Content>Text</Content>
|
||||||
|
<Resource></Resource>
|
||||||
|
<Color R="1" G="1" B="1" A="1"/>
|
||||||
|
<Visible>true</Visible>
|
||||||
|
<Alignment><Center/></Alignment>
|
||||||
|
</Text>
|
||||||
@@ -0,0 +1,42 @@
|
|||||||
|
<?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:complexType name="AlignmentEnum" mixed="true">
|
||||||
|
<xs:complexContent>
|
||||||
|
<xs:extension base="t:enum">
|
||||||
|
<xs:choice>
|
||||||
|
<xs:element name="Right" type="xs:integer" fixed="0" minOccurs="0"/>
|
||||||
|
<xs:element name="Left" type="xs:integer" fixed="1" minOccurs="0"/>
|
||||||
|
<xs:element name="Center" type="xs:integer" fixed="2" minOccurs="0"/>
|
||||||
|
</xs:choice>
|
||||||
|
</xs:extension>
|
||||||
|
</xs:complexContent>
|
||||||
|
</xs:complexType>
|
||||||
|
|
||||||
|
<xs:element name="Text">
|
||||||
|
<xs:annotation>
|
||||||
|
<xs:documentation>A visible font loaded from disk</xs:documentation>
|
||||||
|
</xs:annotation>
|
||||||
|
<xs:complexType>
|
||||||
|
<xs:all>
|
||||||
|
<xs:element name="Content" type="t:string" minOccurs="0">
|
||||||
|
<xs:annotation><xs:documentation>the content of the string printed</xs:documentation></xs:annotation>
|
||||||
|
</xs:element>
|
||||||
|
<xs:element name="Resource" type="t:string" minOccurs="0">
|
||||||
|
<xs:annotation><xs:documentation>The asset file, font resolution, example: Fonts/font.ttf,16</xs:documentation></xs:annotation>
|
||||||
|
</xs:element>
|
||||||
|
<xs:element name="Color" type="t:Color" minOccurs="0">
|
||||||
|
<xs:annotation><xs:documentation>Color</xs:documentation></xs:annotation>
|
||||||
|
</xs:element>
|
||||||
|
<xs:element name="Visible" type="t:bool" minOccurs="0">
|
||||||
|
<xs:annotation><xs:documentation>Wether the text is visible or not</xs:documentation></xs:annotation>
|
||||||
|
</xs:element>
|
||||||
|
<xs:element name="Alignment" type="AlignmentEnum" minOccurs="0">
|
||||||
|
<xs:annotation><xs:documentation>Text alignment</xs:documentation></xs:annotation>
|
||||||
|
</xs:element>
|
||||||
|
</xs:all>
|
||||||
|
</xs:complexType>
|
||||||
|
</xs:element>
|
||||||
|
</xs:schema>
|
||||||
Executable
+4
@@ -0,0 +1,4 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
|
||||||
|
<UniformScale xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="UniformScale.xsd">
|
||||||
|
<Scale X="1" Y="1" Z="1"/>
|
||||||
|
</UniformScale>
|
||||||
Executable
+16
@@ -0,0 +1,16 @@
|
|||||||
|
<?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="UniformScale">
|
||||||
|
<xs:annotation>
|
||||||
|
<xs:documentation>Keeps an entity at an uniform scale relative to the camera</xs:documentation>
|
||||||
|
</xs:annotation>
|
||||||
|
<xs:complexType>
|
||||||
|
<xs:all>
|
||||||
|
<xs:element name="Scale" type="t:Vector" minOccurs="0"/>
|
||||||
|
</xs:all>
|
||||||
|
</xs:complexType>
|
||||||
|
</xs:element>
|
||||||
|
</xs:schema>
|
||||||
@@ -0,0 +1,156 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
|
||||||
|
<Entity xmlns:c="components" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../Types/Entity.xsd">
|
||||||
|
|
||||||
|
<Components>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
|
||||||
|
<Children>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>../assets/Models/DummyScene.obj</Resource>
|
||||||
|
</c:Model>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:Health>
|
||||||
|
<Health>60</Health>
|
||||||
|
</c:Health>
|
||||||
|
<c:AABB/>
|
||||||
|
<c:Camera/>
|
||||||
|
<c:Listener/>
|
||||||
|
<c:Player/>
|
||||||
|
<c:Team>
|
||||||
|
<Team>3</Team>
|
||||||
|
</c:Team>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="-0.151326105" Y="13.5594187" Z="12.5957394"/>
|
||||||
|
<Orientation X="-0.872664392" Y="0.157068729" Z="4.90324332e-08"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:AABB/>
|
||||||
|
<c:CapturePoint>
|
||||||
|
<HomePointForTeam>3</HomePointForTeam>
|
||||||
|
</c:CapturePoint>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>../assets/Models/Core/UnitSphere.obj</Resource>
|
||||||
|
<Color A="1" B="1" G="0.200000003" R="0"/>
|
||||||
|
</c:Model>
|
||||||
|
<c:Team>
|
||||||
|
<Team>3</Team>
|
||||||
|
</c:Team>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="5.48757935" Y="2.62824345" Z="0"/>
|
||||||
|
</c:Transform>
|
||||||
|
<c:Trigger/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:AABB/>
|
||||||
|
<c:CapturePoint>
|
||||||
|
<CapturePointNumber>1</CapturePointNumber>
|
||||||
|
</c:CapturePoint>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>../assets/Models/Core/UnitSphere.obj</Resource>
|
||||||
|
<Color A="1" B="0" G="1" R="1"/>
|
||||||
|
</c:Model>
|
||||||
|
<c:Team>
|
||||||
|
<Team>3</Team>
|
||||||
|
</c:Team>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="1.91470337" Y="2.32191443" Z="0"/>
|
||||||
|
</c:Transform>
|
||||||
|
<c:Trigger/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:AABB/>
|
||||||
|
<c:CapturePoint>
|
||||||
|
<CapturePointNumber>2</CapturePointNumber>
|
||||||
|
</c:CapturePoint>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>../assets/Models/Core/UnitSphere.obj</Resource>
|
||||||
|
<Color A="1" B="1" G="1" R="0"/>
|
||||||
|
</c:Model>
|
||||||
|
<c:Team>
|
||||||
|
<Team>2</Team>
|
||||||
|
</c:Team>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="-1.31178355" Y="2.16289616" Z="0"/>
|
||||||
|
</c:Transform>
|
||||||
|
<c:Trigger/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:AABB/>
|
||||||
|
<c:CapturePoint>
|
||||||
|
<HomePointForTeam>2</HomePointForTeam>
|
||||||
|
<CapturePointNumber>3</CapturePointNumber>
|
||||||
|
</c:CapturePoint>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>../assets/Models/Core/UnitSphere.obj</Resource>
|
||||||
|
<Color A="1" B="0" G="0.200000003" R="1"/>
|
||||||
|
</c:Model>
|
||||||
|
<c:Team>
|
||||||
|
<Team>2</Team>
|
||||||
|
</c:Team>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="-4.27947044" Y="1.99913001" Z="0"/>
|
||||||
|
</c:Transform>
|
||||||
|
<c:Trigger/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:Health/>
|
||||||
|
<c:AABB/>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>../assets/Models/Core/UnitCube.obj</Resource>
|
||||||
|
<Color A="1" B="0.482352942" G="0.490196079" R="1"/>
|
||||||
|
</c:Model>
|
||||||
|
<c:Player/>
|
||||||
|
<c:Team>
|
||||||
|
<Team>2</Team>
|
||||||
|
</c:Team>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="-1.67672658" Y="2.23822045" Z="-0.0577065349"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:Health/>
|
||||||
|
<c:AABB/>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>../assets/Models/Core/UnitCube.obj</Resource>
|
||||||
|
<Color A="1" B="1" G="0.196078435" R="0.196078435"/>
|
||||||
|
</c:Model>
|
||||||
|
<c:Player/>
|
||||||
|
<c:Team>
|
||||||
|
<Team>3</Team>
|
||||||
|
</c:Team>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="2.40398169" Y="2.02053547" Z="-0.0348547697"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
|
||||||
|
</Entity>
|
||||||
@@ -0,0 +1,158 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
|
||||||
|
<Entity xmlns:c="components" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../Types/Entity.xsd">
|
||||||
|
|
||||||
|
<Components>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
|
||||||
|
<Children>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>../assets/Models/DummyScene.obj</Resource>
|
||||||
|
</c:Model>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:Health>
|
||||||
|
<Health>60</Health>
|
||||||
|
</c:Health>
|
||||||
|
<c:AABB/>
|
||||||
|
<c:Camera/>
|
||||||
|
<c:Listener/>
|
||||||
|
<c:Player/>
|
||||||
|
<c:Team>
|
||||||
|
<Team>3</Team>
|
||||||
|
</c:Team>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="-2.38960934" Y="11.7122087" Z="11.4659815"/>
|
||||||
|
<Orientation X="-0.645771146" Y="-1.17512627e-05" Z="1.76718231e-07"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:AABB/>
|
||||||
|
<c:CapturePoint>
|
||||||
|
<HomePointForTeam>3</HomePointForTeam>
|
||||||
|
<CaptureTimer>6.9158446328696002</CaptureTimer>
|
||||||
|
</c:CapturePoint>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>../assets/Models/Core/UnitSphere.obj</Resource>
|
||||||
|
<Color A="1" B="0" G="1" R="1"/>
|
||||||
|
</c:Model>
|
||||||
|
<c:Team>
|
||||||
|
<Team>3</Team>
|
||||||
|
</c:Team>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="5.48757935" Y="2.62824345" Z="0"/>
|
||||||
|
</c:Transform>
|
||||||
|
<c:Trigger/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:AABB/>
|
||||||
|
<c:CapturePoint>
|
||||||
|
<CaptureTimer>-13.234195338196177</CaptureTimer>
|
||||||
|
<CapturePointNumber>1</CapturePointNumber>
|
||||||
|
</c:CapturePoint>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>../assets/Models/Core/UnitSphere.obj</Resource>
|
||||||
|
<Color A="1" B="1" G="1" R="0"/>
|
||||||
|
</c:Model>
|
||||||
|
<c:Team>
|
||||||
|
<Team>2</Team>
|
||||||
|
</c:Team>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="1.38422918" Y="2.32191443" Z="0"/>
|
||||||
|
</c:Transform>
|
||||||
|
<c:Trigger/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:AABB/>
|
||||||
|
<c:CapturePoint>
|
||||||
|
<CapturePointNumber>2</CapturePointNumber>
|
||||||
|
</c:CapturePoint>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>../assets/Models/Core/UnitSphere.obj</Resource>
|
||||||
|
<Color A="1" B="0" G="0.200000003" R="1"/>
|
||||||
|
</c:Model>
|
||||||
|
<c:Team>
|
||||||
|
<Team>2</Team>
|
||||||
|
</c:Team>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="-1.79222715" Y="2.16289616" Z="0"/>
|
||||||
|
</c:Transform>
|
||||||
|
<c:Trigger/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:AABB/>
|
||||||
|
<c:CapturePoint>
|
||||||
|
<HomePointForTeam>2</HomePointForTeam>
|
||||||
|
<CapturePointNumber>3</CapturePointNumber>
|
||||||
|
</c:CapturePoint>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>../assets/Models/Core/UnitSphere.obj</Resource>
|
||||||
|
<Color A="1" B="0" G="0.200000003" R="1"/>
|
||||||
|
</c:Model>
|
||||||
|
<c:Team>
|
||||||
|
<Team>2</Team>
|
||||||
|
</c:Team>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="-4.27947044" Y="1.99913001" Z="0"/>
|
||||||
|
</c:Transform>
|
||||||
|
<c:Trigger/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:Health/>
|
||||||
|
<c:AABB/>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>../assets/Models/Core/UnitCube.obj</Resource>
|
||||||
|
<Color A="1" B="0.482352942" G="0.490196079" R="1"/>
|
||||||
|
</c:Model>
|
||||||
|
<c:Player/>
|
||||||
|
<c:Team>
|
||||||
|
<Team>2</Team>
|
||||||
|
</c:Team>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="4.99647331" Y="2.23822045" Z="1.80651212"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:Health/>
|
||||||
|
<c:AABB/>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>../assets/Models/Core/UnitCube.obj</Resource>
|
||||||
|
<Color A="1" B="1" G="0.196078435" R="0.196078435"/>
|
||||||
|
</c:Model>
|
||||||
|
<c:Player/>
|
||||||
|
<c:Team>
|
||||||
|
<Team>3</Team>
|
||||||
|
</c:Team>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="2.7091608" Y="2.02053547" Z="-0.0348547697"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
|
||||||
|
</Entity>
|
||||||
@@ -0,0 +1,152 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
|
||||||
|
<Entity xmlns:c="components" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../Types/Entity.xsd">
|
||||||
|
|
||||||
|
<Components>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
|
||||||
|
<Children>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>../assets/Models/DummyScene.obj</Resource>
|
||||||
|
</c:Model>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:Health>
|
||||||
|
<Health>60</Health>
|
||||||
|
</c:Health>
|
||||||
|
<c:AABB/>
|
||||||
|
<c:Camera/>
|
||||||
|
<c:Listener/>
|
||||||
|
<c:Player/>
|
||||||
|
<c:Team>
|
||||||
|
<Team>3</Team>
|
||||||
|
</c:Team>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="-0.151326105" Y="13.5594187" Z="12.5957394"/>
|
||||||
|
<Orientation X="-0.872664511" Y="0.157068729" Z="3.01738083e-08"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:AABB/>
|
||||||
|
<c:CapturePoint>
|
||||||
|
<HomePointForTeam>3</HomePointForTeam>
|
||||||
|
</c:CapturePoint>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>../assets/Models/Core/UnitSphere.obj</Resource>
|
||||||
|
<Color A="1" B="1" G="0.200000003" R="0"/>
|
||||||
|
</c:Model>
|
||||||
|
<c:Team>
|
||||||
|
<Team>3</Team>
|
||||||
|
</c:Team>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="5.48757935" Y="2.62824345" Z="0"/>
|
||||||
|
</c:Transform>
|
||||||
|
<c:Trigger/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:AABB/>
|
||||||
|
<c:CapturePoint>
|
||||||
|
<CapturePointNumber>1</CapturePointNumber>
|
||||||
|
</c:CapturePoint>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>../assets/Models/Core/UnitSphere.obj</Resource>
|
||||||
|
<Color A="1" B="1" G="1" R="0"/>
|
||||||
|
</c:Model>
|
||||||
|
<c:Team/>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="1.91470337" Y="2.32191443" Z="0"/>
|
||||||
|
</c:Transform>
|
||||||
|
<c:Trigger/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:AABB/>
|
||||||
|
<c:CapturePoint>
|
||||||
|
<CapturePointNumber>2</CapturePointNumber>
|
||||||
|
</c:CapturePoint>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>../assets/Models/Core/UnitSphere.obj</Resource>
|
||||||
|
<Color A="1" B="0" G="1" R="1"/>
|
||||||
|
</c:Model>
|
||||||
|
<c:Team/>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="-1.31178355" Y="2.16289616" Z="0"/>
|
||||||
|
</c:Transform>
|
||||||
|
<c:Trigger/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:AABB/>
|
||||||
|
<c:CapturePoint>
|
||||||
|
<HomePointForTeam>2</HomePointForTeam>
|
||||||
|
<CapturePointNumber>3</CapturePointNumber>
|
||||||
|
</c:CapturePoint>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>../assets/Models/Core/UnitSphere.obj</Resource>
|
||||||
|
<Color A="1" B="0" G="0.200000003" R="1"/>
|
||||||
|
</c:Model>
|
||||||
|
<c:Team>
|
||||||
|
<Team>2</Team>
|
||||||
|
</c:Team>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="-4.27947044" Y="1.99913001" Z="0"/>
|
||||||
|
</c:Transform>
|
||||||
|
<c:Trigger/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:Health/>
|
||||||
|
<c:AABB/>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>../assets/Models/Core/UnitCube.obj</Resource>
|
||||||
|
<Color A="1" B="0.482352942" G="0.490196079" R="1"/>
|
||||||
|
</c:Model>
|
||||||
|
<c:Player/>
|
||||||
|
<c:Team>
|
||||||
|
<Team>2</Team>
|
||||||
|
</c:Team>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="-5.74354839" Y="2.23822045" Z="-0.0577065349"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:Health/>
|
||||||
|
<c:AABB/>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>../assets/Models/Core/UnitCube.obj</Resource>
|
||||||
|
<Color A="1" B="1" G="0.196078435" R="0.196078435"/>
|
||||||
|
</c:Model>
|
||||||
|
<c:Player/>
|
||||||
|
<c:Team>
|
||||||
|
<Team>3</Team>
|
||||||
|
</c:Team>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="6.96941662" Y="2.02053547" Z="-0.0348547697"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
|
||||||
|
</Entity>
|
||||||
@@ -0,0 +1,212 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
|
||||||
|
<Entity xmlns:c="components" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../Types/Entity.xsd">
|
||||||
|
|
||||||
|
<Components>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
|
||||||
|
<Children>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>../assets/Models/DummyScene.obj</Resource>
|
||||||
|
</c:Model>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:Health>
|
||||||
|
<Health>60</Health>
|
||||||
|
</c:Health>
|
||||||
|
<c:AABB/>
|
||||||
|
<c:Camera/>
|
||||||
|
<c:Listener/>
|
||||||
|
<c:Player/>
|
||||||
|
<c:Team>
|
||||||
|
<Team>3</Team>
|
||||||
|
</c:Team>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="-0.151326105" Y="13.5594187" Z="12.5957394"/>
|
||||||
|
<Orientation X="-0.942477643" Y="0.157067701" Z="-1.50870125e-08"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:AABB/>
|
||||||
|
<c:CapturePoint>
|
||||||
|
<HomePointForTeam>3</HomePointForTeam>
|
||||||
|
</c:CapturePoint>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>../assets/Models/Core/UnitSphere.obj</Resource>
|
||||||
|
<Color A="1" B="1" G="0.200000003" R="0"/>
|
||||||
|
</c:Model>
|
||||||
|
<c:Team>
|
||||||
|
<Team>3</Team>
|
||||||
|
</c:Team>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="5.39647007" Y="2.36802292" Z="0.0546064377"/>
|
||||||
|
</c:Transform>
|
||||||
|
<c:Trigger/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:AABB/>
|
||||||
|
<c:CapturePoint>
|
||||||
|
<CapturePointNumber>1</CapturePointNumber>
|
||||||
|
</c:CapturePoint>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>../assets/Models/Core/UnitSphere.obj</Resource>
|
||||||
|
<Color A="1" B="0" G="1" R="1"/>
|
||||||
|
</c:Model>
|
||||||
|
<c:Team>
|
||||||
|
<Team>3</Team>
|
||||||
|
</c:Team>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="4.21088505" Y="2.32191443" Z="0"/>
|
||||||
|
</c:Transform>
|
||||||
|
<c:Trigger/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:AABB/>
|
||||||
|
<c:CapturePoint>
|
||||||
|
<CapturePointNumber>2</CapturePointNumber>
|
||||||
|
</c:CapturePoint>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>../assets/Models/Core/UnitSphere.obj</Resource>
|
||||||
|
<Color A="1" B="1" G="1" R="0"/>
|
||||||
|
</c:Model>
|
||||||
|
<c:Team>
|
||||||
|
<Team>2</Team>
|
||||||
|
</c:Team>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="2.30499458" Y="2.04659939" Z="0"/>
|
||||||
|
</c:Transform>
|
||||||
|
<c:Trigger/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:AABB/>
|
||||||
|
<c:CapturePoint>
|
||||||
|
<CapturePointNumber>3</CapturePointNumber>
|
||||||
|
</c:CapturePoint>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>../assets/Models/Core/UnitSphere.obj</Resource>
|
||||||
|
<Color A="1" B="0" G="0.200000003" R="1"/>
|
||||||
|
</c:Model>
|
||||||
|
<c:Team>
|
||||||
|
<Team>2</Team>
|
||||||
|
</c:Team>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0.196968079" Y="1.99913001" Z="0"/>
|
||||||
|
</c:Transform>
|
||||||
|
<c:Trigger/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:AABB/>
|
||||||
|
<c:CapturePoint>
|
||||||
|
<HomePointForTeam>2</HomePointForTeam>
|
||||||
|
<CapturePointNumber>4</CapturePointNumber>
|
||||||
|
</c:CapturePoint>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>../assets/Models/Core/UnitSphere.obj</Resource>
|
||||||
|
<Color A="1" B="0" G="0.200000003" R="1"/>
|
||||||
|
</c:Model>
|
||||||
|
<c:Team>
|
||||||
|
<Team>2</Team>
|
||||||
|
</c:Team>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="-1.82539892" Y="1.96172595" Z="0"/>
|
||||||
|
</c:Transform>
|
||||||
|
<c:Trigger/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:Health/>
|
||||||
|
<c:AABB/>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>../assets/Models/Core/UnitCube.obj</Resource>
|
||||||
|
<Color A="1" B="0.482352942" G="0.490196079" R="1"/>
|
||||||
|
</c:Model>
|
||||||
|
<c:Player/>
|
||||||
|
<c:Team>
|
||||||
|
<Team>2</Team>
|
||||||
|
</c:Team>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="1.15194035" Y="2.23822045" Z="-0.0577065349"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:Health/>
|
||||||
|
<c:AABB/>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>../assets/Models/Core/UnitCube.obj</Resource>
|
||||||
|
<Color A="1" B="0.482352942" G="0.490196079" R="1"/>
|
||||||
|
</c:Model>
|
||||||
|
<c:Player/>
|
||||||
|
<c:Team>
|
||||||
|
<Team>2</Team>
|
||||||
|
</c:Team>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="-0.266237378" Y="2.23822045" Z="0.344228983"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:Health/>
|
||||||
|
<c:AABB/>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>../assets/Models/Core/UnitCube.obj</Resource>
|
||||||
|
<Color A="1" B="1" G="0.196078435" R="0.196078435"/>
|
||||||
|
</c:Model>
|
||||||
|
<c:Player/>
|
||||||
|
<c:Team>
|
||||||
|
<Team>3</Team>
|
||||||
|
</c:Team>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="6.96941662" Y="2.02053547" Z="1.9484092"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:Health/>
|
||||||
|
<c:AABB/>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>../assets/Models/Core/UnitCube.obj</Resource>
|
||||||
|
<Color A="1" B="1" G="0.196078435" R="0.196078435"/>
|
||||||
|
</c:Model>
|
||||||
|
<c:Player/>
|
||||||
|
<c:Team>
|
||||||
|
<Team>3</Team>
|
||||||
|
</c:Team>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="3.63076782" Y="2.5672617" Z="-0.0348547697"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
|
||||||
|
</Entity>
|
||||||
@@ -0,0 +1,205 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
|
||||||
|
<Entity xmlns:c="components" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../Types/Entity.xsd">
|
||||||
|
|
||||||
|
<Components>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
|
||||||
|
<Children>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>../assets/Models/DummyScene.obj</Resource>
|
||||||
|
</c:Model>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:Health>
|
||||||
|
<Health>60</Health>
|
||||||
|
</c:Health>
|
||||||
|
<c:AABB/>
|
||||||
|
<c:Camera/>
|
||||||
|
<c:Listener/>
|
||||||
|
<c:Player/>
|
||||||
|
<c:Team>
|
||||||
|
<Team>3</Team>
|
||||||
|
</c:Team>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="-0.151326105" Y="13.5594187" Z="12.5957394"/>
|
||||||
|
<Orientation X="-0.62831825" Y="0.0872534811" Z="-7.47903606e-09"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:AABB/>
|
||||||
|
<c:CapturePoint>
|
||||||
|
<HomePointForTeam>3</HomePointForTeam>
|
||||||
|
</c:CapturePoint>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>../assets/Models/Core/UnitSphere.obj</Resource>
|
||||||
|
<Color A="1" B="1" G="0.200000003" R="0"/>
|
||||||
|
</c:Model>
|
||||||
|
<c:Team>
|
||||||
|
<Team>3</Team>
|
||||||
|
</c:Team>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="5.39647007" Y="2.36802292" Z="0.0546064377"/>
|
||||||
|
</c:Transform>
|
||||||
|
<c:Trigger/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:AABB/>
|
||||||
|
<c:CapturePoint>
|
||||||
|
<CapturePointNumber>1</CapturePointNumber>
|
||||||
|
</c:CapturePoint>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>../assets/Models/Core/UnitSphere.obj</Resource>
|
||||||
|
<Color A="1" B="1" G="1" R="0"/>
|
||||||
|
</c:Model>
|
||||||
|
<c:Team/>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="3.68890452" Y="2.32191443" Z="0"/>
|
||||||
|
</c:Transform>
|
||||||
|
<c:Trigger/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:AABB/>
|
||||||
|
<c:CapturePoint>
|
||||||
|
<CapturePointNumber>2</CapturePointNumber>
|
||||||
|
</c:CapturePoint>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>../assets/Models/Core/UnitSphere.obj</Resource>
|
||||||
|
</c:Model>
|
||||||
|
<c:Team/>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="1.98802853" Y="2.16289616" Z="0"/>
|
||||||
|
</c:Transform>
|
||||||
|
<c:Trigger/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:AABB/>
|
||||||
|
<c:CapturePoint>
|
||||||
|
<CapturePointNumber>3</CapturePointNumber>
|
||||||
|
</c:CapturePoint>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>../assets/Models/Core/UnitSphere.obj</Resource>
|
||||||
|
<Color A="1" B="0" G="1" R="1"/>
|
||||||
|
</c:Model>
|
||||||
|
<c:Team/>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0.196968079" Y="1.99913001" Z="0"/>
|
||||||
|
</c:Transform>
|
||||||
|
<c:Trigger/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:AABB/>
|
||||||
|
<c:CapturePoint>
|
||||||
|
<HomePointForTeam>2</HomePointForTeam>
|
||||||
|
<CapturePointNumber>4</CapturePointNumber>
|
||||||
|
</c:CapturePoint>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>../assets/Models/Core/UnitSphere.obj</Resource>
|
||||||
|
<Color A="1" B="0" G="0.200000003" R="1"/>
|
||||||
|
</c:Model>
|
||||||
|
<c:Team>
|
||||||
|
<Team>2</Team>
|
||||||
|
</c:Team>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="-1.82539892" Y="1.96172595" Z="0"/>
|
||||||
|
</c:Transform>
|
||||||
|
<c:Trigger/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:Health/>
|
||||||
|
<c:AABB/>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>../assets/Models/Core/UnitCube.obj</Resource>
|
||||||
|
<Color A="1" B="0.482352942" G="0.490196079" R="1"/>
|
||||||
|
</c:Model>
|
||||||
|
<c:Player/>
|
||||||
|
<c:Team>
|
||||||
|
<Team>2</Team>
|
||||||
|
</c:Team>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="-7.44269609" Y="2.23822045" Z="-0.0577065349"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:Health/>
|
||||||
|
<c:AABB/>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>../assets/Models/Core/UnitCube.obj</Resource>
|
||||||
|
<Color A="1" B="0.482352942" G="0.490196079" R="1"/>
|
||||||
|
</c:Model>
|
||||||
|
<c:Player/>
|
||||||
|
<c:Team>
|
||||||
|
<Team>2</Team>
|
||||||
|
</c:Team>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="-5.74354839" Y="2.23822045" Z="1.40012479"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:Health/>
|
||||||
|
<c:AABB/>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>../assets/Models/Core/UnitCube.obj</Resource>
|
||||||
|
<Color A="1" B="1" G="0.196078435" R="0.196078435"/>
|
||||||
|
</c:Model>
|
||||||
|
<c:Player/>
|
||||||
|
<c:Team>
|
||||||
|
<Team>3</Team>
|
||||||
|
</c:Team>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="6.96941662" Y="2.02053547" Z="1.9484092"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:Health/>
|
||||||
|
<c:AABB/>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>../assets/Models/Core/UnitCube.obj</Resource>
|
||||||
|
<Color A="1" B="1" G="0.196078435" R="0.196078435"/>
|
||||||
|
</c:Model>
|
||||||
|
<c:Player/>
|
||||||
|
<c:Team>
|
||||||
|
<Team>3</Team>
|
||||||
|
</c:Team>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="7.70311165" Y="2.02053547" Z="-0.0348547697"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
|
||||||
|
</Entity>
|
||||||
@@ -13,6 +13,7 @@
|
|||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Transform>
|
<c:Transform>
|
||||||
<Scale X="100" Y="1" Z="100"/>
|
<Scale X="100" Y="1" Z="100"/>
|
||||||
|
<Orientation X="0" Y="2.59200001" Z="0"/>
|
||||||
</c:Transform>
|
</c:Transform>
|
||||||
</Components>
|
</Components>
|
||||||
<Children/>
|
<Children/>
|
||||||
@@ -45,9 +46,58 @@
|
|||||||
<Entity>
|
<Entity>
|
||||||
<Components>
|
<Components>
|
||||||
<c:Camera/>
|
<c:Camera/>
|
||||||
|
<c:Listener/>
|
||||||
<c:Transform>
|
<c:Transform>
|
||||||
<Position X="5.85247707" Y="3.8454349" Z="-1.14486957"/>
|
<Position X="1.36896265" Y="4.4259491" Z="10.6640663"/>
|
||||||
<Orientation X="2.51327395" Y="1.23916209" Z="-3.1415925"/>
|
<Orientation X="-0.0349078141" Y="0.157154545" Z="-2.60252193e-07"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:DirectionalLight/>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>Models/DirectionalLightWidget.obj</Resource>
|
||||||
|
</c:Model>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="2.1529963" Y="6.59221172" Z="0.169116676"/>
|
||||||
|
<Orientation X="4.32000017" Y="4.6340003" Z="0"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>Models/Assault.obj</Resource>
|
||||||
|
</c:Model>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="-2.00568962" Y="0.527161121" Z="0"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>Models/SecondaryWeapon.fbx</Resource>
|
||||||
|
</c:Model>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="-0.546139359" Y="0.853016734" Z="0.177482292"/>
|
||||||
|
<Orientation X="1.47266471" Y="0.524984181" Z="1.243698"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
</Entity>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>Models/Core/UnitSphere.obj</Resource>
|
||||||
|
</c:Model>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0" Y="3.70000029" Z="0"/>
|
||||||
</c:Transform>
|
</c:Transform>
|
||||||
</Components>
|
</Components>
|
||||||
<Children/>
|
<Children/>
|
||||||
|
|||||||
@@ -0,0 +1,69 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
|
||||||
|
<Entity name="WidgetRotate" xmlns:c="components" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../Types/Entity.xsd">
|
||||||
|
|
||||||
|
<Components>
|
||||||
|
<c:Transform/>
|
||||||
|
<c:UniformScale>
|
||||||
|
<Scale X="0.200000003" Y="0.200000003" Z="0.200000003"/>
|
||||||
|
</c:UniformScale>
|
||||||
|
</Components>
|
||||||
|
|
||||||
|
<Children>
|
||||||
|
<Entity name="X">
|
||||||
|
<Components>
|
||||||
|
<c:EditorWidget>
|
||||||
|
<Type>
|
||||||
|
<Rotate/>
|
||||||
|
</Type>
|
||||||
|
<Axis X="1" Y="0" Z="0"/>
|
||||||
|
</c:EditorWidget>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>Models/RotationWidgetX.obj</Resource>
|
||||||
|
</c:Model>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="Y">
|
||||||
|
<Components>
|
||||||
|
<c:EditorWidget>
|
||||||
|
<Type>
|
||||||
|
<Rotate/>
|
||||||
|
</Type>
|
||||||
|
<Axis X="0" Y="1" Z="0"/>
|
||||||
|
</c:EditorWidget>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>Models/RotationWidgetY.obj</Resource>
|
||||||
|
</c:Model>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="Z">
|
||||||
|
<Components>
|
||||||
|
<c:EditorWidget>
|
||||||
|
<Type>
|
||||||
|
<Rotate/>
|
||||||
|
</Type>
|
||||||
|
<Axis X="0" Y="0" Z="1"/>
|
||||||
|
</c:EditorWidget>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>Models/RotationWidgetZ.obj</Resource>
|
||||||
|
</c:Model>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="Light">
|
||||||
|
<Components>
|
||||||
|
<c:PointLight>
|
||||||
|
<Intensity>-1</Intensity>
|
||||||
|
<Falloff>0</Falloff>
|
||||||
|
</c:PointLight>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
|
||||||
|
</Entity>
|
||||||
@@ -0,0 +1,68 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
|
||||||
|
<Entity name="WidgetScale" xmlns:c="components" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../Types/Entity.xsd">
|
||||||
|
|
||||||
|
<Components>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>Models/ScaleWidgetOrigin.obj</Resource>
|
||||||
|
</c:Model>
|
||||||
|
<c:Transform/>
|
||||||
|
<c:UniformScale>
|
||||||
|
<Scale X="0.200000003" Y="0.200000003" Z="0.200000003"/>
|
||||||
|
</c:UniformScale>
|
||||||
|
</Components>
|
||||||
|
|
||||||
|
<Children>
|
||||||
|
<Entity name="X">
|
||||||
|
<Components>
|
||||||
|
<c:EditorWidget>
|
||||||
|
<Type>
|
||||||
|
<Scale/>
|
||||||
|
</Type>
|
||||||
|
</c:EditorWidget>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>Models/ScaleWidgetX.obj</Resource>
|
||||||
|
</c:Model>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="Y">
|
||||||
|
<Components>
|
||||||
|
<c:EditorWidget>
|
||||||
|
<Type>
|
||||||
|
<Scale/>
|
||||||
|
</Type>
|
||||||
|
</c:EditorWidget>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>Models/ScaleWidgetY.obj</Resource>
|
||||||
|
</c:Model>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="Z">
|
||||||
|
<Components>
|
||||||
|
<c:EditorWidget>
|
||||||
|
<Type>
|
||||||
|
<Scale/>
|
||||||
|
</Type>
|
||||||
|
</c:EditorWidget>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>Models/ScaleWidgetZ.obj</Resource>
|
||||||
|
</c:Model>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="Light">
|
||||||
|
<Components>
|
||||||
|
<c:PointLight/>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0.300000012" Y="0.300000012" Z="0.300000012"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
|
||||||
|
</Entity>
|
||||||
@@ -0,0 +1,98 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
|
||||||
|
<Entity name="WidgetTranslate" xmlns:c="components" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../Types/Entity.xsd">
|
||||||
|
|
||||||
|
<Components>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>Models/TranslationWidgetOrigin.obj</Resource>
|
||||||
|
</c:Model>
|
||||||
|
<c:Transform/>
|
||||||
|
<c:UniformScale>
|
||||||
|
<Scale X="0.200000003" Y="0.200000003" Z="0.200000003"/>
|
||||||
|
</c:UniformScale>
|
||||||
|
</Components>
|
||||||
|
|
||||||
|
<Children>
|
||||||
|
<Entity name="X">
|
||||||
|
<Components>
|
||||||
|
<c:EditorWidget>
|
||||||
|
<Axis X="1" Y="0" Z="0"/>
|
||||||
|
</c:EditorWidget>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>Models/TranslationWidgetX.obj</Resource>
|
||||||
|
</c:Model>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="Y">
|
||||||
|
<Components>
|
||||||
|
<c:EditorWidget>
|
||||||
|
<Axis X="0" Y="1" Z="0"/>
|
||||||
|
</c:EditorWidget>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>Models/TranslationWidgetY.obj</Resource>
|
||||||
|
</c:Model>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="Z">
|
||||||
|
<Components>
|
||||||
|
<c:EditorWidget>
|
||||||
|
<Axis X="0" Y="0" Z="1"/>
|
||||||
|
</c:EditorWidget>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>Models/TranslationWidgetZ.obj</Resource>
|
||||||
|
</c:Model>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="XPlane">
|
||||||
|
<Components>
|
||||||
|
<c:EditorWidget>
|
||||||
|
<Axis X="0" Y="1" Z="1"/>
|
||||||
|
</c:EditorWidget>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>Models/WidgetPlaneX.obj</Resource>
|
||||||
|
</c:Model>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="YPlane">
|
||||||
|
<Components>
|
||||||
|
<c:EditorWidget>
|
||||||
|
<Axis X="1" Y="0" Z="1"/>
|
||||||
|
</c:EditorWidget>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>Models/WidgetPlaneY.obj</Resource>
|
||||||
|
</c:Model>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="ZPlane">
|
||||||
|
<Components>
|
||||||
|
<c:EditorWidget>
|
||||||
|
<Axis X="1" Y="1" Z="0"/>
|
||||||
|
</c:EditorWidget>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>Models/WidgetPlaneZ.obj</Resource>
|
||||||
|
</c:Model>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="Light">
|
||||||
|
<Components>
|
||||||
|
<c:PointLight/>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0.400000006" Y="0.400000006" Z="0.400000006"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
|
||||||
|
</Entity>
|
||||||
@@ -1,58 +1,262 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
|
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
|
||||||
<Entity xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../Types/Entity.xsd" xmlns:c="components">
|
<Entity xmlns:c="components" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../Types/Entity.xsd">
|
||||||
|
|
||||||
<Components>
|
<Components>
|
||||||
<c:Transform>
|
<c:Transform/>
|
||||||
<Position X="0" Y="0" Z="0"/>
|
</Components>
|
||||||
<Orientation X="0" Y="0" Z="0"/>
|
|
||||||
</c:Transform>
|
<Children>
|
||||||
</Components>
|
<Entity>
|
||||||
<Children>
|
<Components>
|
||||||
<Entity>
|
<c:Camera>
|
||||||
<Components>
|
<Name>ActionCamera</Name>
|
||||||
<c:Transform>
|
</c:Camera>
|
||||||
<Position X="0" Y="1" Z="10"/>
|
<c:Model>
|
||||||
</c:Transform>
|
<Resource>Models/Camera.obj</Resource>
|
||||||
<c:Model>
|
</c:Model>
|
||||||
<Resource>Models/Camera.obj</Resource>
|
<c:Transform>
|
||||||
</c:Model>
|
<Position X="-0.504807115" Y="6.00582743" Z="9.68687439"/>
|
||||||
<c:Camera>
|
<Orientation X="-0.733036518" Y="0.000105090476" Z="5.12391125e-07"/>
|
||||||
<Name>MainCamera</Name>
|
</c:Transform>
|
||||||
</c:Camera>
|
</Components>
|
||||||
</Components>
|
<Children>
|
||||||
</Entity>
|
<Entity>
|
||||||
<Entity>
|
<Components>
|
||||||
<Components>
|
<c:Text>
|
||||||
<c:Transform>
|
<Content>Camera #2</Content>
|
||||||
<Position X="5" Y="1" Z="5"/>
|
<Resource>Fonts/DroidSans.ttf,64</Resource>
|
||||||
</c:Transform>
|
<Alignment>0</Alignment>
|
||||||
<c:Model>
|
</c:Text>
|
||||||
<Resource>Models/Camera.obj</Resource>
|
<c:Transform>
|
||||||
</c:Model>
|
<Position X="0.700063765" Y="0.310270816" Z="-1"/>
|
||||||
<c:Camera>
|
<Scale X="0.100000001" Y="0.100000001" Z="0.100000001"/>
|
||||||
<Name>ActionCamera</Name>
|
</c:Transform>
|
||||||
</c:Camera>
|
</Components>
|
||||||
</Components>
|
<Children/>
|
||||||
</Entity>
|
</Entity>
|
||||||
<Entity>
|
</Children>
|
||||||
<Components>
|
</Entity>
|
||||||
<c:Transform>
|
<Entity>
|
||||||
<Position X="0" Y="-1" Z="0"/>
|
<Components>
|
||||||
<Scale X="100" Y="1" Z="100"/>
|
<c:Model>
|
||||||
</c:Transform>
|
<Resource>Models/Core/UnitPlane.obj</Resource>
|
||||||
<c:Model>
|
</c:Model>
|
||||||
<Resource>Models/Core/UnitPlane.obj</Resource>
|
<c:Transform>
|
||||||
</c:Model>
|
<Position X="0" Y="-1" Z="0.600000024"/>
|
||||||
</Components>
|
<Scale X="100" Y="1" Z="100"/>
|
||||||
</Entity>
|
</c:Transform>
|
||||||
<Entity>
|
</Components>
|
||||||
<Components>
|
<Children/>
|
||||||
<c:Transform>
|
</Entity>
|
||||||
<Position X="0" Y="0" Z="0"/>
|
<Entity>
|
||||||
</c:Transform>
|
<Components>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>An error</Resource>
|
<Resource>Models/Assault.obj</Resource>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
</Components>
|
<c:Transform>
|
||||||
</Entity>
|
<Position X="-2.5" Y="0" Z="1"/>
|
||||||
</Children>
|
</c:Transform>
|
||||||
</Entity>
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:Text>
|
||||||
|
<Content>Welcome!</Content>
|
||||||
|
<Resource>Fonts/DroidSans.ttf,1280</Resource>
|
||||||
|
</c:Text>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0" Y="0" Z="0.700000048"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:RaptorCopter>
|
||||||
|
<Speed>2</Speed>
|
||||||
|
<Axis X="0" Y="1" Z="0"/>
|
||||||
|
</c:RaptorCopter>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0" Y="2.37320328" Z="0"/>
|
||||||
|
<Orientation X="0" Y="8252.15918" Z="0"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:PointLight>
|
||||||
|
<Color A="1" B="1" G="0" R="1"/>
|
||||||
|
<Radius>6</Radius>
|
||||||
|
<Intensity>0.5</Intensity>
|
||||||
|
</c:PointLight>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="-2.5" Y="0" Z="0"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:PointLight>
|
||||||
|
<Color A="1" B="0" G="0" R="1"/>
|
||||||
|
<Radius>8</Radius>
|
||||||
|
</c:PointLight>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="-5" Y="0" Z="0"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
</Entity>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:PointLight>
|
||||||
|
<Color A="1" B="0" G="1" R="1"/>
|
||||||
|
<Radius>6</Radius>
|
||||||
|
<Intensity>0.5</Intensity>
|
||||||
|
</c:PointLight>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0" Y="0" Z="-2.5"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:PointLight>
|
||||||
|
<Color A="1" B="0" G="1" R="0"/>
|
||||||
|
<Radius>8</Radius>
|
||||||
|
</c:PointLight>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0" Y="0" Z="-5"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
</Entity>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:PointLight>
|
||||||
|
<Color A="1" B="1" G="1" R="0"/>
|
||||||
|
<Radius>6</Radius>
|
||||||
|
<Intensity>0.5</Intensity>
|
||||||
|
</c:PointLight>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0" Y="0" Z="2.5"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:PointLight>
|
||||||
|
<Color A="1" B="1" G="0.00784313772" R="0"/>
|
||||||
|
<Radius>8</Radius>
|
||||||
|
</c:PointLight>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0" Y="0" Z="5"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
</Entity>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:PointLight>
|
||||||
|
<Radius>6</Radius>
|
||||||
|
<Intensity>0.5</Intensity>
|
||||||
|
</c:PointLight>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="2.5" Y="0" Z="0"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:PointLight>
|
||||||
|
<Radius>8</Radius>
|
||||||
|
</c:PointLight>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="5" Y="0" Z="0"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
</Entity>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>Models/Assault.obj</Resource>
|
||||||
|
</c:Model>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="2.5" Y="0" Z="1"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:Camera>
|
||||||
|
<Name>MainCamera</Name>
|
||||||
|
</c:Camera>
|
||||||
|
<c:Listener/>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>Models/Camera.obj</Resource>
|
||||||
|
<Visible>false</Visible>
|
||||||
|
</c:Model>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="-1.27354908" Y="5.18422079" Z="10.6223917"/>
|
||||||
|
<Orientation X="-0.436328411" Y="-0.0523675606" Z="1.67869363e-08"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:Text>
|
||||||
|
<Content>Taiwan #1</Content>
|
||||||
|
<Resource>Fonts/DroidSans.ttf,64</Resource>
|
||||||
|
<Alignment>0</Alignment>
|
||||||
|
</c:Text>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0.716896772" Y="0.296712071" Z="-1"/>
|
||||||
|
<Scale X="0.100000001" Y="0.100000001" Z="0.100000001"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
</Entity>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:DirectionalLight>
|
||||||
|
<Color A="1" B="0.996078432" G="1" R="1"/>
|
||||||
|
<Intensity>0.80000001192092896</Intensity>
|
||||||
|
</c:DirectionalLight>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>Models/DirectionalLightWidget.obj</Resource>
|
||||||
|
</c:Model>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="-0.0013256073" Y="1.89540339" Z="6.53467274"/>
|
||||||
|
<Orientation X="-0.859663308" Y="-0.100310192" Z="-0.404723018"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>Models/Core/UnitCube.obj</Resource>
|
||||||
|
</c:Model>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="-5.4082036" Y="0" Z="-1.84950542"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
|
||||||
|
</Entity>
|
||||||
|
|||||||
@@ -0,0 +1,209 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
|
||||||
|
<Entity xmlns:c="components" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../Types/Entity.xsd">
|
||||||
|
|
||||||
|
<Components>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
|
||||||
|
<Children>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>../assets/Models/DummyScene.obj</Resource>
|
||||||
|
</c:Model>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:Health>
|
||||||
|
<Health>60</Health>
|
||||||
|
</c:Health>
|
||||||
|
<c:AABB/>
|
||||||
|
<c:Camera/>
|
||||||
|
<c:Listener/>
|
||||||
|
<c:Player/>
|
||||||
|
<c:Team>
|
||||||
|
<Team>3</Team>
|
||||||
|
</c:Team>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="5.7693491" Y="2.00600648" Z="2.02424884"/>
|
||||||
|
<Orientation X="0.157079354" Y="-0.872667432" Z="1.15912746e-08"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:AABB/>
|
||||||
|
<c:CapturePoint>
|
||||||
|
<HomePointForTeam>3</HomePointForTeam>
|
||||||
|
</c:CapturePoint>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>../assets/Models/Core/UnitSphere.obj</Resource>
|
||||||
|
<Color A="1" B="1" G="0.200000003" R="0"/>
|
||||||
|
</c:Model>
|
||||||
|
<c:Team>
|
||||||
|
<Team>3</Team>
|
||||||
|
</c:Team>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="5.39647007" Y="2.36802292" Z="0.0546064377"/>
|
||||||
|
</c:Transform>
|
||||||
|
<c:Trigger/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:AABB/>
|
||||||
|
<c:CapturePoint>
|
||||||
|
<CapturePointNumber>1</CapturePointNumber>
|
||||||
|
</c:CapturePoint>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>../assets/Models/Core/UnitSphere.obj</Resource>
|
||||||
|
<Color A="1" B="1" G="1" R="0"/>
|
||||||
|
</c:Model>
|
||||||
|
<c:Team/>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="3.68890452" Y="2.32191443" Z="0"/>
|
||||||
|
</c:Transform>
|
||||||
|
<c:Trigger/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:AABB/>
|
||||||
|
<c:CapturePoint>
|
||||||
|
<CapturePointNumber>2</CapturePointNumber>
|
||||||
|
</c:CapturePoint>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>../assets/Models/Core/UnitSphere.obj</Resource>
|
||||||
|
</c:Model>
|
||||||
|
<c:Team/>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="1.98802853" Y="2.16289616" Z="0"/>
|
||||||
|
</c:Transform>
|
||||||
|
<c:Trigger/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:AABB/>
|
||||||
|
<c:CapturePoint>
|
||||||
|
<CapturePointNumber>3</CapturePointNumber>
|
||||||
|
</c:CapturePoint>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>../assets/Models/Core/UnitSphere.obj</Resource>
|
||||||
|
<Color A="1" B="0" G="1" R="1"/>
|
||||||
|
</c:Model>
|
||||||
|
<c:Team/>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0.196968079" Y="1.99913001" Z="0"/>
|
||||||
|
</c:Transform>
|
||||||
|
<c:Trigger/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:AABB/>
|
||||||
|
<c:CapturePoint>
|
||||||
|
<HomePointForTeam>2</HomePointForTeam>
|
||||||
|
<CapturePointNumber>4</CapturePointNumber>
|
||||||
|
</c:CapturePoint>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>../assets/Models/Core/UnitSphere.obj</Resource>
|
||||||
|
<Color A="1" B="0" G="0.200000003" R="1"/>
|
||||||
|
</c:Model>
|
||||||
|
<c:Team>
|
||||||
|
<Team>2</Team>
|
||||||
|
</c:Team>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="-1.82539892" Y="1.96172595" Z="0"/>
|
||||||
|
</c:Transform>
|
||||||
|
<c:Trigger/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:Health/>
|
||||||
|
<c:AABB/>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>../assets/Models/Core/UnitCube.obj</Resource>
|
||||||
|
<Color A="1" B="0.482352942" G="0.490196079" R="1"/>
|
||||||
|
</c:Model>
|
||||||
|
<c:Player/>
|
||||||
|
<c:Team>
|
||||||
|
<Team>2</Team>
|
||||||
|
</c:Team>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="-7.44269609" Y="2.23822045" Z="-0.0577065349"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:Health/>
|
||||||
|
<c:AABB/>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>../assets/Models/Core/UnitCube.obj</Resource>
|
||||||
|
<Color A="1" B="0.482352942" G="0.490196079" R="1"/>
|
||||||
|
</c:Model>
|
||||||
|
<c:Player/>
|
||||||
|
<c:Team>
|
||||||
|
<Team>2</Team>
|
||||||
|
</c:Team>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="-5.74354839" Y="2.23822045" Z="1.40012479"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:Health>
|
||||||
|
<Health>0</Health>
|
||||||
|
</c:Health>
|
||||||
|
<c:AABB/>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>../assets/Models/Core/UnitCube.obj</Resource>
|
||||||
|
<Color A="1" B="0" G="0" R="2.25"/>
|
||||||
|
</c:Model>
|
||||||
|
<c:Player/>
|
||||||
|
<c:Team>
|
||||||
|
<Team>3</Team>
|
||||||
|
</c:Team>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="6.96941662" Y="2.02053547" Z="1.9484092"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:Health>
|
||||||
|
<Health>0</Health>
|
||||||
|
</c:Health>
|
||||||
|
<c:AABB/>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>../assets/Models/Core/UnitCube.obj</Resource>
|
||||||
|
<Color A="1" B="0" G="0" R="4.5"/>
|
||||||
|
</c:Model>
|
||||||
|
<c:Player/>
|
||||||
|
<c:Team>
|
||||||
|
<Team>3</Team>
|
||||||
|
</c:Team>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="7.70311165" Y="2.02053547" Z="-0.0348547697"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
|
||||||
|
</Entity>
|
||||||
@@ -9,12 +9,11 @@
|
|||||||
<Resource>Models/DummyScene.obj</Resource>
|
<Resource>Models/DummyScene.obj</Resource>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
</Components>
|
</Components>
|
||||||
</Entity>
|
|
||||||
<Children>
|
<Children>
|
||||||
<Entity>
|
<Entity>
|
||||||
<Components>
|
<Components>
|
||||||
<c:Transform>
|
<c:Transform>
|
||||||
<Position X="0" Y="-0"/>
|
<Position X="0" Y="0" Z="-2"/>
|
||||||
<Scale X="1" Y="1" Z="1"/>
|
<Scale X="1" Y="1" Z="1"/>
|
||||||
</c:Transform>
|
</c:Transform>
|
||||||
<c:Camera>
|
<c:Camera>
|
||||||
@@ -24,4 +23,6 @@
|
|||||||
</c:Model>
|
</c:Model>
|
||||||
</Components>
|
</Components>
|
||||||
</Entity>
|
</Entity>
|
||||||
|
<EntityRef file="Schema/Entities/EditorWidget.xml"/>
|
||||||
</Children>
|
</Children>
|
||||||
|
</Entity>
|
||||||
|
|||||||
@@ -16,9 +16,11 @@
|
|||||||
<xs:element ref="c:RaptorCopter" minOccurs="0"/>
|
<xs:element ref="c:RaptorCopter" minOccurs="0"/>
|
||||||
<xs:element ref="c:Player" minOccurs="0"/>
|
<xs:element ref="c:Player" minOccurs="0"/>
|
||||||
<xs:element ref="c:Camera" minOccurs="0"/>
|
<xs:element ref="c:Camera" minOccurs="0"/>
|
||||||
|
<xs:element ref="c:Text" minOccurs="0"/>
|
||||||
<xs:element ref="c:AABB" minOccurs="0"/>
|
<xs:element ref="c:AABB" minOccurs="0"/>
|
||||||
<xs:element ref="c:Trigger" minOccurs="0"/>
|
<xs:element ref="c:Trigger" minOccurs="0"/>
|
||||||
<xs:element ref="c:Health" minOccurs="0"/>
|
<xs:element ref="c:Health" minOccurs="0"/>
|
||||||
|
<xs:element ref="c:CapturePoint" minOccurs="0"/>
|
||||||
<xs:element ref="c:PointLight" minOccurs="0"/>
|
<xs:element ref="c:PointLight" minOccurs="0"/>
|
||||||
<xs:element ref="c:Listener" minOccurs="0"/>
|
<xs:element ref="c:Listener" minOccurs="0"/>
|
||||||
<xs:element ref="c:SoundEmitter" minOccurs="0"/>
|
<xs:element ref="c:SoundEmitter" minOccurs="0"/>
|
||||||
@@ -27,6 +29,9 @@
|
|||||||
<xs:element ref="c:SpawnPoint" minOccurs="0"/>
|
<xs:element ref="c:SpawnPoint" minOccurs="0"/>
|
||||||
<xs:element ref="c:PlayerSpawn" minOccurs="0"/>
|
<xs:element ref="c:PlayerSpawn" minOccurs="0"/>
|
||||||
<xs:element ref="c:Team" minOccurs="0"/>
|
<xs:element ref="c:Team" minOccurs="0"/>
|
||||||
|
<xs:element ref="c:DirectionalLight" minOccurs="0"/>
|
||||||
|
<xs:element ref="c:UniformScale" minOccurs="0"/>
|
||||||
|
<xs:element ref="c:EditorWidget" minOccurs="0"/>
|
||||||
</xs:all>
|
</xs:all>
|
||||||
</xs:complexType>
|
</xs:complexType>
|
||||||
</xs:element>
|
</xs:element>
|
||||||
@@ -37,9 +42,7 @@
|
|||||||
<xs:element ref="Entity" minOccurs="0" maxOccurs="unbounded"/>
|
<xs:element ref="Entity" minOccurs="0" maxOccurs="unbounded"/>
|
||||||
<xs:element name="EntityRef" minOccurs="0" maxOccurs="unbounded">
|
<xs:element name="EntityRef" minOccurs="0" maxOccurs="unbounded">
|
||||||
<xs:complexType>
|
<xs:complexType>
|
||||||
<xs:all>
|
<xs:attribute name="file" type="xs:string" minOccurs="0"/>
|
||||||
<xs:attribute name="file" type="xs:string" minOccurs="0"/>
|
|
||||||
</xs:all>
|
|
||||||
</xs:complexType>
|
</xs:complexType>
|
||||||
</xs:element>
|
</xs:element>
|
||||||
</xs:sequence>
|
</xs:sequence>
|
||||||
@@ -47,7 +50,7 @@
|
|||||||
</xs:element>
|
</xs:element>
|
||||||
</xs:all>
|
</xs:all>
|
||||||
<xs:attribute ref="xml:base"/>
|
<xs:attribute ref="xml:base"/>
|
||||||
<xs:attribute name="name" type="xs:string" minOccurs="0" default=""/>
|
<xs:attribute name="name" type="xs:string" minOccurs="0" default=""/>
|
||||||
</xs:complexType>
|
</xs:complexType>
|
||||||
</xs:element>
|
</xs:element>
|
||||||
</xs:schema>
|
</xs:schema>
|
||||||
@@ -27,19 +27,20 @@ layout (std430, binding = 0) buffer FrustumBuffer
|
|||||||
Frustum Data[];
|
Frustum Data[];
|
||||||
} Frustums;
|
} Frustums;
|
||||||
|
|
||||||
struct PointLight {
|
struct LightSource {
|
||||||
vec4 Position;
|
vec4 Position;
|
||||||
|
vec4 Direction;
|
||||||
vec4 Color;
|
vec4 Color;
|
||||||
float Radius;
|
float Radius;
|
||||||
float Intensity;
|
float Intensity;
|
||||||
float Falloff;
|
float Falloff;
|
||||||
float Padding;
|
int Type;
|
||||||
};
|
};
|
||||||
|
|
||||||
layout (std430, binding = 1) buffer LightBuffer
|
layout (std430, binding = 1) buffer LightBuffer
|
||||||
{
|
{
|
||||||
PointLight List[];
|
LightSource List[];
|
||||||
} PointLights;
|
} LightSources;
|
||||||
|
|
||||||
struct LightGrid {
|
struct LightGrid {
|
||||||
float Start;
|
float Start;
|
||||||
@@ -106,8 +107,7 @@ layout (local_size_x = 16, local_size_y = 16, local_size_z = 1) in;
|
|||||||
void main ()
|
void main ()
|
||||||
{
|
{
|
||||||
GroupIndex = int(gl_WorkGroupID.x + (gl_WorkGroupID.y * int(ScreenDimensions.x/TILE_SIZE)));
|
GroupIndex = int(gl_WorkGroupID.x + (gl_WorkGroupID.y * int(ScreenDimensions.x/TILE_SIZE)));
|
||||||
if(gl_LocalInvocationIndex == 0)
|
if(gl_LocalInvocationIndex == 0) {
|
||||||
{
|
|
||||||
GroupLightCount = 0;
|
GroupLightCount = 0;
|
||||||
GroupFrustum = Frustums.Data[GroupIndex];
|
GroupFrustum = Frustums.Data[GroupIndex];
|
||||||
}
|
}
|
||||||
@@ -115,22 +115,25 @@ void main ()
|
|||||||
barrier();
|
barrier();
|
||||||
memoryBarrierShared();
|
memoryBarrierShared();
|
||||||
|
|
||||||
for(int i = int(gl_LocalInvocationIndex); i < PointLights.List.length(); i += TILE_SIZE*TILE_SIZE)
|
for(int i = int(gl_LocalInvocationIndex); i < LightSources.List.length(); i += TILE_SIZE*TILE_SIZE) {
|
||||||
{
|
LightSource light = LightSources.List[i];
|
||||||
PointLight light = PointLights.List[i];
|
|
||||||
|
|
||||||
//if pointlight
|
//if pointlight
|
||||||
//Pos i view antagligen
|
//Pos i view antagligen
|
||||||
if(SphereInsideFrustrum( vec3(V * light.Position), light.Radius, GroupFrustum))
|
if(light.Type == 1) {
|
||||||
{
|
if(SphereInsideFrustrum( vec3(V * light.Position), light.Radius, GroupFrustum)) {
|
||||||
//TODO: Fix transparent and opaque list, and depth test.
|
//TODO: Fix transparent and opaque list, and depth test.
|
||||||
AppendLight( i );
|
AppendLight( i );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//if conelight
|
//if conelight
|
||||||
|
|
||||||
//if directional
|
//if directional
|
||||||
|
if(light.Type == 2) {
|
||||||
|
AppendLight( i );
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,32 @@
|
|||||||
|
#version 430
|
||||||
|
|
||||||
|
layout (binding = 0) uniform sampler2D SceneTexture;
|
||||||
|
layout (binding = 1) uniform sampler2D BloomTexture;
|
||||||
|
uniform float Exposure;
|
||||||
|
|
||||||
|
in VertexData{
|
||||||
|
vec2 TextureCoordinate;
|
||||||
|
}Input;
|
||||||
|
|
||||||
|
out vec4 fragmentColor;
|
||||||
|
|
||||||
|
void main()
|
||||||
|
{
|
||||||
|
const float gamma = 2.2;
|
||||||
|
vec4 hdrColor = texture(SceneTexture, Input.TextureCoordinate);
|
||||||
|
vec4 bloomColor = texture(BloomTexture, Input.TextureCoordinate);
|
||||||
|
hdrColor += bloomColor;
|
||||||
|
|
||||||
|
//Toon mapping thingy
|
||||||
|
vec3 result = vec3(1.0) - exp(-hdrColor.rgb * Exposure);
|
||||||
|
|
||||||
|
//gamme correction
|
||||||
|
result = pow(result, vec3(1.0 / gamma));
|
||||||
|
|
||||||
|
fragmentColor = vec4(result, 1.0);
|
||||||
|
//fragmentColor = hdrColor;
|
||||||
|
//fragmentColor = bloomColor;
|
||||||
|
//fragmentColor = vec4(1,0.5,0.7,1);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user