Compare commits
154 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 4e23e7bf30 | |||
| a8ab49f202 | |||
| bbbab7b287 | |||
| 95289f47d6 | |||
| ccf4cae74b | |||
| 81943516a9 | |||
| e350074cb5 | |||
| 0394eacb6b | |||
| 9d9c6bdf1e | |||
| 9c08c351b8 | |||
| dded296cde | |||
| c3cc5ae70b | |||
| f05d0a1b0c | |||
| 6396925b68 | |||
| a53ab7f745 | |||
| 224e95f34a | |||
| 0825b10c75 | |||
| ed06eacf6f | |||
| 3c3149b13e | |||
| 67cf008122 | |||
| 8520192805 | |||
| 1ba9d97ab7 | |||
| fa781d5c88 | |||
| 97780395cf | |||
| b0bdca5cdd | |||
| 2c0f66d9c7 | |||
| 27cdccac75 | |||
| 646806b50e | |||
| b2d35c80f7 | |||
| f3a76eb13e | |||
| d931660c56 | |||
| 019e85a425 | |||
| 61275274f7 | |||
| e9d36c48a6 | |||
| 1e238b2407 | |||
| 1ebe174b94 | |||
| 08328a781c | |||
| c2128790af | |||
| afebf879a0 | |||
| 86f4ff0b3c | |||
| 645ee9013a | |||
| 4a5ab048bd | |||
| b6b96c5f11 | |||
| f6a7b8ea0c | |||
| 3d2f9fa79d | |||
| 49e6252ee1 | |||
| 97be22c4a5 | |||
| 94ff12cf66 | |||
| 0bbb627790 | |||
| 2c48c2680f | |||
| 09bb42b3f4 | |||
| d65ce805a5 | |||
| 067780c93f | |||
| 90192e016a | |||
| 5cea3bed3a | |||
| daa96baab5 | |||
| 001e2441dd | |||
| c09c2f4783 | |||
| 3c22dcc165 | |||
| 7212217460 | |||
| d83190290f | |||
| d5647ce89c | |||
| ecfacee587 | |||
| a93ccecfeb | |||
| 7140b740b5 | |||
| 830e0f66c9 | |||
| eec59a40c8 | |||
| 239a8e7a6a | |||
| 232bf66a09 | |||
| e69864680d | |||
| c69a80f5ba | |||
| b9d6d59c62 | |||
| b30891aecd | |||
| d3bc48f5f7 | |||
| b748deb1e1 | |||
| 060e674a6f | |||
| 2c64ffc3d1 | |||
| aa5878d6df | |||
| 7752832ce5 | |||
| 6f163bf3a3 | |||
| 93c6f3c0a3 | |||
| 14c5410524 | |||
| 9da1419895 | |||
| 8e86cc2123 | |||
| 11cf85cc73 | |||
| 3a5c0a2762 | |||
| 12c05d5a1c | |||
| 2b4e00e4b0 | |||
| 6610bb974d | |||
| d2cfa592f0 | |||
| 43719f8304 | |||
| 92ab22e779 | |||
| 933a32aa8d | |||
| 09fb3a6571 | |||
| becb197feb | |||
| 454eef8225 | |||
| febbadbd01 | |||
| fbdaf92953 | |||
| 3e2afd7bf2 | |||
| e90f802d48 | |||
| ceab837e27 | |||
| d1a309be10 | |||
| 71a86cab11 | |||
| b6e0332574 | |||
| d50caa1763 | |||
| c272857819 | |||
| 336b058c9f | |||
| 3a2b124cae | |||
| 02b69a86e7 | |||
| 571c41589a | |||
| 35376178b1 | |||
| 84499665d0 | |||
| 2733efdc0d | |||
| afa4f425a8 | |||
| 356cf72b0f | |||
| 6aec7555cc | |||
| 0a8ee1623f | |||
| 2e3e59a1e2 | |||
| c2833b10c4 | |||
| 938caa6ba2 | |||
| a64d227cab | |||
| da49dc35ee | |||
| d99bf60510 | |||
| 9cb41fcebe | |||
| 4357759715 | |||
| bb4a65a1db | |||
| 89bc063ef0 | |||
| 88ad127d8d | |||
| dba2fbdc0c | |||
| 69bb17aa90 | |||
| e8186a7062 | |||
| 83281fdaf1 | |||
| d763789490 | |||
| cb0feb0b84 | |||
| 9573958a86 | |||
| 210e11e659 | |||
| bbbebe077b | |||
| 4d19158600 | |||
| 4dcf5a8fa0 | |||
| 4ccda5ee43 | |||
| c5462b0363 | |||
| 25b3c02d29 | |||
| 6ba87d2942 | |||
| 51075aefc8 | |||
| 2efbedd4b4 | |||
| 8834d5f7a0 | |||
| c9b982bc89 | |||
| 2ec5023752 | |||
| 405002777c | |||
| 8fc8d56ee1 | |||
| 950f3f3cf7 | |||
| 246f56c823 | |||
| 57a5cb58e1 | |||
| c5b1afb0d4 |
@@ -12,3 +12,6 @@ tools/MayaExporter/x64/Debug/
|
|||||||
|
|
||||||
tools/MayaExporter/MayaExporter/Debug/
|
tools/MayaExporter/MayaExporter/Debug/
|
||||||
tools/MayaExporter/MayaExporter/GeneratedFiles/
|
tools/MayaExporter/MayaExporter/GeneratedFiles/
|
||||||
|
|
||||||
|
tools/MayaExporter/MayaExporter/x64/*
|
||||||
|
tools/MayaExporter/x64/*
|
||||||
|
|||||||
+1
-1
Submodule assets updated: c4898d8281...c56f6380ab
+1
-1
Submodule deps updated: bf83f099ba...ed45883a44
@@ -64,7 +64,7 @@ bool RayVsModel(const Ray& ray,
|
|||||||
float& outVCoord);
|
float& outVCoord);
|
||||||
|
|
||||||
bool AABBvsTriangles(const AABB& box,
|
bool AABBvsTriangles(const AABB& box,
|
||||||
const std::vector<RawModel::Vertex>& modelVertices,
|
const RawModel::Vertex* modelVertices,
|
||||||
const std::vector<unsigned int>& modelIndices,
|
const std::vector<unsigned int>& modelIndices,
|
||||||
const glm::mat4& modelMatrix,
|
const glm::mat4& modelMatrix,
|
||||||
glm::vec3& boxVelocity,
|
glm::vec3& boxVelocity,
|
||||||
@@ -79,7 +79,8 @@ bool AABBVsAABB(const AABB& a, const AABB& b);
|
|||||||
bool AABBVsAABB(const AABB& a, const AABB& b, glm::vec3& minimumTranslation);
|
bool AABBVsAABB(const AABB& a, const AABB& b, glm::vec3& minimumTranslation);
|
||||||
|
|
||||||
// Calculates an absolute AABB from an entity AABB component
|
// Calculates an absolute AABB from an entity AABB component
|
||||||
boost::optional<EntityAABB> EntityAbsoluteAABB(EntityWrapper& entity);
|
boost::optional<EntityAABB> EntityAbsoluteAABB(EntityWrapper& entity, bool takeModelBox = false);
|
||||||
|
boost::optional<EntityAABB> AbsoluteAABBExplosionEffect(EntityWrapper& entity);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -13,8 +13,8 @@
|
|||||||
class CollisionSystem : public PureSystem
|
class CollisionSystem : public PureSystem
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
CollisionSystem(World* world, EventBroker* eventBroker, Octree<EntityAABB>* octree)
|
CollisionSystem(SystemParams params, Octree<EntityAABB>* octree)
|
||||||
: System(world, eventBroker)
|
: System(params)
|
||||||
, PureSystem("Collidable")
|
, PureSystem("Collidable")
|
||||||
, m_Octree(octree)
|
, m_Octree(octree)
|
||||||
{ }
|
{ }
|
||||||
|
|||||||
+6
-6
@@ -1,17 +1,17 @@
|
|||||||
#ifndef CollidableOctreeSystem_h__
|
#ifndef FillFrustumOctreeSystem_h__
|
||||||
#define CollidableOctreeSystem_h__
|
#define FillFrustumOctreeSystem_h__
|
||||||
|
|
||||||
#include "../Core/System.h"
|
#include "../Core/System.h"
|
||||||
#include "../Core/Octree.h"
|
#include "../Core/Octree.h"
|
||||||
#include "Collision.h"
|
#include "Collision.h"
|
||||||
#include "EntityAABB.h"
|
#include "EntityAABB.h"
|
||||||
|
|
||||||
class CollidableOctreeSystem : public ImpureSystem, public PureSystem
|
class FillFrustumOctreeSystem : public ImpureSystem, public PureSystem
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
CollidableOctreeSystem(World* world, EventBroker* eventBroker, Octree<EntityAABB>* octree, const std::string& componentType)
|
FillFrustumOctreeSystem(SystemParams params, Octree<EntityAABB>* octree)
|
||||||
: System(world, eventBroker)
|
: System(params)
|
||||||
, PureSystem(componentType)
|
, PureSystem("Model")
|
||||||
, m_Octree(octree)
|
, m_Octree(octree)
|
||||||
{ }
|
{ }
|
||||||
|
|
||||||
@@ -0,0 +1,25 @@
|
|||||||
|
#ifndef FillOctreeSystem_h__
|
||||||
|
#define FillOctreeSystem_h__
|
||||||
|
|
||||||
|
#include "../Core/System.h"
|
||||||
|
#include "../Core/Octree.h"
|
||||||
|
#include "Collision.h"
|
||||||
|
#include "EntityAABB.h"
|
||||||
|
|
||||||
|
class FillOctreeSystem : public ImpureSystem, public PureSystem
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
FillOctreeSystem(SystemParams params, Octree<EntityAABB>* octree, const std::string& fillComponentType)
|
||||||
|
: System(params)
|
||||||
|
, PureSystem(fillComponentType)
|
||||||
|
, m_Octree(octree)
|
||||||
|
{ }
|
||||||
|
|
||||||
|
virtual void Update(double dt) override;
|
||||||
|
virtual void UpdateComponent(EntityWrapper& entity, ComponentWrapper& component, double dt) override;
|
||||||
|
|
||||||
|
private:
|
||||||
|
Octree<EntityAABB>* m_Octree;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
||||||
@@ -15,8 +15,8 @@ class AABB;
|
|||||||
class TriggerSystem : public PureSystem
|
class TriggerSystem : public PureSystem
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
TriggerSystem(World* world, EventBroker* eventBroker, Octree<EntityAABB>* octree)
|
TriggerSystem(SystemParams params, Octree<EntityAABB>* octree)
|
||||||
: System(world, eventBroker)
|
: System(params)
|
||||||
, PureSystem("Trigger")
|
, PureSystem("Trigger")
|
||||||
, m_Octree(octree)
|
, m_Octree(octree)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -13,6 +13,7 @@ struct ComponentInfo
|
|||||||
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, EnumType>> FieldEnumDefinitions;
|
std::map<std::string, std::map<std::string, EnumType>> FieldEnumDefinitions;
|
||||||
|
bool NetworkReplicated = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct Field_t
|
struct Field_t
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
#ifndef ComponentWrapper_h__
|
#ifndef ComponentWrapper_h__
|
||||||
#define ComponentWrapper_h__
|
#define ComponentWrapper_h__
|
||||||
|
|
||||||
|
#include <boost/shared_array.hpp>
|
||||||
#include "../Common.h"
|
#include "../Common.h"
|
||||||
#include "Entity.h"
|
#include "Entity.h"
|
||||||
#include "ComponentInfo.h"
|
#include "ComponentInfo.h"
|
||||||
@@ -81,6 +82,18 @@ struct ComponentWrapper
|
|||||||
SubscriptProxy operator[](std::string propertyName) { return SubscriptProxy(this, propertyName); }
|
SubscriptProxy operator[](std::string propertyName) { return SubscriptProxy(this, propertyName); }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// A component wrapper that "owns" its data through a shared pointer
|
||||||
|
struct SharedComponentWrapper : ComponentWrapper
|
||||||
|
{
|
||||||
|
SharedComponentWrapper(const ComponentInfo& componentInfo, boost::shared_array<char> data)
|
||||||
|
: ComponentWrapper(componentInfo, data.get())
|
||||||
|
, m_DataReference(data)
|
||||||
|
{ }
|
||||||
|
|
||||||
|
private:
|
||||||
|
boost::shared_array<char> m_DataReference;
|
||||||
|
};
|
||||||
|
|
||||||
// TODO: Move this to Tests once entity importing is finished
|
// TODO: Move this to Tests once entity importing is finished
|
||||||
class ComponentWrapperFactory
|
class ComponentWrapperFactory
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -3,6 +3,8 @@
|
|||||||
|
|
||||||
#include <xercesc/framework/psvi/XSElementDeclaration.hpp>
|
#include <xercesc/framework/psvi/XSElementDeclaration.hpp>
|
||||||
#include <xercesc/framework/psvi/XSComplexTypeDefinition.hpp>
|
#include <xercesc/framework/psvi/XSComplexTypeDefinition.hpp>
|
||||||
|
#include <xercesc/framework/psvi/XSAttributeUse.hpp>
|
||||||
|
#include <xercesc/framework/psvi/XSAttributeDeclaration.hpp>
|
||||||
#include <xercesc/framework/psvi/XSParticle.hpp>
|
#include <xercesc/framework/psvi/XSParticle.hpp>
|
||||||
#include <xercesc/framework/psvi/XSModelGroup.hpp>
|
#include <xercesc/framework/psvi/XSModelGroup.hpp>
|
||||||
#include <xercesc/framework/psvi/XSModelGroupDefinition.hpp>
|
#include <xercesc/framework/psvi/XSModelGroupDefinition.hpp>
|
||||||
|
|||||||
@@ -25,11 +25,12 @@ struct EntityWrapper
|
|||||||
|
|
||||||
const std::string Name();
|
const std::string Name();
|
||||||
bool HasComponent(const std::string& componentType);
|
bool HasComponent(const std::string& componentType);
|
||||||
|
void AttachComponent(const char* componentName);
|
||||||
EntityWrapper Parent();
|
EntityWrapper Parent();
|
||||||
EntityWrapper FirstChildByName(const std::string& name);
|
EntityWrapper FirstChildByName(const std::string& name);
|
||||||
EntityWrapper FirstParentWithComponent(const std::string& componentType);
|
EntityWrapper FirstParentWithComponent(const std::string& componentType);
|
||||||
bool IsChildOf(EntityWrapper potentialParent);
|
bool IsChildOf(EntityWrapper potentialParent);
|
||||||
bool Valid();
|
bool Valid() const;
|
||||||
|
|
||||||
ComponentWrapper operator[](const char* componentName);
|
ComponentWrapper operator[](const char* componentName);
|
||||||
bool operator==(const EntityWrapper& e) const;
|
bool operator==(const EntityWrapper& e) const;
|
||||||
|
|||||||
@@ -5,6 +5,7 @@
|
|||||||
#include <functional>
|
#include <functional>
|
||||||
#include <list>
|
#include <list>
|
||||||
#include <tuple>
|
#include <tuple>
|
||||||
|
#include <set>
|
||||||
|
|
||||||
#include "../Common.h"
|
#include "../Common.h"
|
||||||
#include "Event.h"
|
#include "Event.h"
|
||||||
@@ -107,7 +108,7 @@ private:
|
|||||||
typedef std::unordered_map<ContextTypeName_t, EventRelays_t> ContextRelays_t;
|
typedef std::unordered_map<ContextTypeName_t, EventRelays_t> ContextRelays_t;
|
||||||
ContextRelays_t m_ContextRelays;
|
ContextRelays_t m_ContextRelays;
|
||||||
std::vector<BaseEventRelay*> m_RelaysToSubscribe;
|
std::vector<BaseEventRelay*> m_RelaysToSubscribe;
|
||||||
std::vector<std::tuple<EventID, ContextTypeName_t, EventTypeName_t>> m_RelaysToUnsubscribe;
|
std::unordered_map<BaseEventRelay*, std::tuple<EventID, ContextTypeName_t, EventTypeName_t>> m_RelaysToUnsubscribe;
|
||||||
|
|
||||||
typedef std::list<std::pair<EventTypeName_t, std::shared_ptr<Event>>> EventQueue_t;
|
typedef std::list<std::pair<EventTypeName_t, std::shared_ptr<Event>>> EventQueue_t;
|
||||||
std::shared_ptr<EventQueue_t> m_EventQueueRead;
|
std::shared_ptr<EventQueue_t> m_EventQueueRead;
|
||||||
|
|||||||
@@ -0,0 +1,77 @@
|
|||||||
|
#ifndef Frustum_h__
|
||||||
|
#define Frustum_h__
|
||||||
|
|
||||||
|
#include "../GLM.h"
|
||||||
|
#include "AABB.h"
|
||||||
|
#include <bitset>
|
||||||
|
|
||||||
|
//A frustum defined by 6 planes.
|
||||||
|
struct Frustum
|
||||||
|
{
|
||||||
|
//Contains points P in: dot(normal, P) + d = 0
|
||||||
|
struct Plane
|
||||||
|
{
|
||||||
|
glm::vec3 Normal;
|
||||||
|
float Distance;
|
||||||
|
};
|
||||||
|
|
||||||
|
enum class Output
|
||||||
|
{
|
||||||
|
Inside,
|
||||||
|
Outside,
|
||||||
|
Intersects
|
||||||
|
};
|
||||||
|
Plane Planes[6];
|
||||||
|
|
||||||
|
Frustum() = default;
|
||||||
|
Frustum(glm::mat4x4 viewProjMatrix)
|
||||||
|
{
|
||||||
|
//Order: Right, left, top, bottom, far, near.
|
||||||
|
int sign = 1;
|
||||||
|
for (int i = 0; i < 6; ++i) {
|
||||||
|
sign = -sign;
|
||||||
|
int index = i / 2;
|
||||||
|
Plane& plane = Planes[i];
|
||||||
|
plane.Normal.x = viewProjMatrix[0].w + sign * viewProjMatrix[0][index];
|
||||||
|
plane.Normal.y = viewProjMatrix[1].w + sign * viewProjMatrix[1][index];
|
||||||
|
plane.Normal.z = viewProjMatrix[2].w + sign * viewProjMatrix[2][index];
|
||||||
|
plane.Distance = viewProjMatrix[3].w + sign * viewProjMatrix[3][index];
|
||||||
|
float divByNormalLength = 1.0f / glm::length(plane.Normal);
|
||||||
|
plane.Normal *= divByNormalLength;
|
||||||
|
plane.Distance *= divByNormalLength;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Output VsAABB(const AABB& box) const
|
||||||
|
{
|
||||||
|
const glm::vec3& maxCorner = box.MaxCorner();
|
||||||
|
const glm::vec3& minCorner = box.MinCorner();
|
||||||
|
bool completelyInside = true;
|
||||||
|
for (const Plane& p : Planes) {
|
||||||
|
bool anyWasInside = false;
|
||||||
|
bool anyWasOutside = false;
|
||||||
|
//If points are on both sides of the plane, we can stop.
|
||||||
|
for (int i = 0; i < 8 && (!anyWasInside || !anyWasOutside); ++i) {
|
||||||
|
std::bitset<3> bits(i);
|
||||||
|
glm::vec3 corner;
|
||||||
|
corner.x = bits.test(0) ? maxCorner.x : minCorner.x;
|
||||||
|
corner.y = bits.test(1) ? maxCorner.y : minCorner.y;
|
||||||
|
corner.z = bits.test(2) ? maxCorner.z : minCorner.z;
|
||||||
|
if (glm::dot(p.Normal, corner) > -p.Distance) {
|
||||||
|
anyWasInside = true;
|
||||||
|
} else {
|
||||||
|
anyWasOutside = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!anyWasInside) {
|
||||||
|
return Output::Outside;
|
||||||
|
}
|
||||||
|
if (anyWasOutside) {
|
||||||
|
completelyInside = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return completelyInside ? Output::Inside : Output::Intersects;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
||||||
@@ -5,9 +5,8 @@
|
|||||||
|
|
||||||
#include "../Common.h"
|
#include "../Common.h"
|
||||||
#include "AABB.h"
|
#include "AABB.h"
|
||||||
|
#include "Frustum.h"
|
||||||
//Fwd declarations.
|
#include "Ray.h"
|
||||||
class Ray;
|
|
||||||
|
|
||||||
namespace OctSpace
|
namespace OctSpace
|
||||||
{
|
{
|
||||||
@@ -40,6 +39,8 @@ public:
|
|||||||
//The type Box must be AABB, or inherit from AABB.
|
//The type Box must be AABB, or inherit from AABB.
|
||||||
template<typename Box>
|
template<typename Box>
|
||||||
void ObjectsInSameRegion(const Box& box, std::vector<T>& outObjects);
|
void ObjectsInSameRegion(const Box& box, std::vector<T>& outObjects);
|
||||||
|
//Get the objects that are inside the frustum, the objects are put in outObjects.
|
||||||
|
void ObjectsInFrustum(const Frustum& frustum, std::vector<T>& outObjects);
|
||||||
//Empty the tree of all objects, static and dynamic.
|
//Empty the tree of all objects, static and dynamic.
|
||||||
void ClearObjects();
|
void ClearObjects();
|
||||||
//Empty the tree of all dynamic objects. Static objects remain in the tree.
|
//Empty the tree of all dynamic objects. Static objects remain in the tree.
|
||||||
@@ -97,6 +98,8 @@ struct Child
|
|||||||
void AddStaticObject(const AABB& box);
|
void AddStaticObject(const AABB& box);
|
||||||
template<typename T, typename Box>
|
template<typename T, typename Box>
|
||||||
void ObjectsInSameRegion(const Box& box, std::vector<T>& outObjects) const;
|
void ObjectsInSameRegion(const Box& box, std::vector<T>& outObjects) const;
|
||||||
|
template<typename T>
|
||||||
|
void ObjectsInFrustum(const Frustum& frustum, std::vector<T>& outObjects, bool takeAllDontTest) const;
|
||||||
void ClearObjects();
|
void ClearObjects();
|
||||||
void ClearDynamicObjects();
|
void ClearDynamicObjects();
|
||||||
bool RayCollides(const Ray& ray, Output& data) const;
|
bool RayCollides(const Ray& ray, Output& data) const;
|
||||||
@@ -154,6 +157,13 @@ void Octree<T>::ObjectsInSameRegion(const Box& box, std::vector<T>& outObjects)
|
|||||||
m_Root->ObjectsInSameRegion(box, outObjects);
|
m_Root->ObjectsInSameRegion(box, outObjects);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template<typename T>
|
||||||
|
void Octree<T>::ObjectsInFrustum(const Frustum& frustum, std::vector<T>& outObjects)
|
||||||
|
{
|
||||||
|
falsifyObjectChecks();
|
||||||
|
m_Root->ObjectsInFrustum(frustum, outObjects, false);
|
||||||
|
}
|
||||||
|
|
||||||
template<typename T>
|
template<typename T>
|
||||||
void Octree<T>::ClearObjects()
|
void Octree<T>::ClearObjects()
|
||||||
{
|
{
|
||||||
@@ -230,4 +240,46 @@ void OctSpace::Child::ObjectsInSameRegion(const Box& box, std::vector<T>& outObj
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template<typename T>
|
||||||
|
void OctSpace::Child::ObjectsInFrustum(const Frustum& frustum, std::vector<T>& outObjects, bool takeAllDontTest) const
|
||||||
|
{
|
||||||
|
if (hasChildren()) {
|
||||||
|
for (const Child* c : m_Children) {
|
||||||
|
Frustum::Output out = Frustum::Output::Inside;
|
||||||
|
if (!takeAllDontTest) {
|
||||||
|
out = frustum.VsAABB(c->m_Box);
|
||||||
|
if (out == Frustum::Output::Outside) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
c->ObjectsInFrustum(frustum, outObjects, out == Frustum::Output::Inside);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
size_t startIndex = outObjects.size();
|
||||||
|
int numDuplicates = 0;
|
||||||
|
outObjects.resize(outObjects.size() + m_StaticObjIndices.size() + m_DynamicObjIndices.size());
|
||||||
|
for (size_t i = 0; i < m_StaticObjIndices.size(); ++i) {
|
||||||
|
ContainedObject& obj = m_StaticObjectsRef[m_StaticObjIndices[i]];
|
||||||
|
if (obj.Checked || frustum.VsAABB(*obj.Box) == Frustum::Output::Outside) {
|
||||||
|
++numDuplicates;
|
||||||
|
} else {
|
||||||
|
obj.Checked = true;
|
||||||
|
outObjects[startIndex + i - numDuplicates] = *static_cast<T*>(obj.Box.get());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for (size_t i = 0; i < m_DynamicObjIndices.size(); ++i) {
|
||||||
|
ContainedObject& obj = m_DynamicObjectsRef[m_DynamicObjIndices[i]];
|
||||||
|
if (obj.Checked || frustum.VsAABB(*obj.Box) == Frustum::Output::Outside) {
|
||||||
|
++numDuplicates;
|
||||||
|
} else {
|
||||||
|
obj.Checked = true;
|
||||||
|
outObjects[startIndex + i - numDuplicates] = *static_cast<T*>(obj.Box.get());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for (size_t i = 0; i < numDuplicates; ++i) {
|
||||||
|
outObjects.pop_back();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
@@ -5,21 +5,55 @@
|
|||||||
#include "World.h"
|
#include "World.h"
|
||||||
#include "EntityWrapper.h"
|
#include "EntityWrapper.h"
|
||||||
#include "ComponentWrapper.h"
|
#include "ComponentWrapper.h"
|
||||||
|
#include "EPlayerSpawned.h"
|
||||||
|
|
||||||
|
struct SystemParams
|
||||||
|
{
|
||||||
|
SystemParams(::World* World, ::EventBroker* EventBroker, bool IsClient, bool IsServer)
|
||||||
|
: World(World)
|
||||||
|
, EventBroker(EventBroker)
|
||||||
|
, IsClient(IsClient)
|
||||||
|
, IsServer(IsServer)
|
||||||
|
{ }
|
||||||
|
|
||||||
|
::World* World;
|
||||||
|
::EventBroker* EventBroker;
|
||||||
|
bool IsClient = false;
|
||||||
|
bool IsServer = false;
|
||||||
|
};
|
||||||
|
|
||||||
class System
|
class System
|
||||||
{
|
{
|
||||||
friend class SystemPipeline;
|
friend class SystemPipeline;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
System(World* world, EventBroker) { }
|
System(SystemParams params)
|
||||||
System(World* world, EventBroker* eventBroker)
|
: m_World(params.World)
|
||||||
: m_World(world)
|
, m_EventBroker(params.EventBroker)
|
||||||
, m_EventBroker(eventBroker)
|
, IsClient(params.IsClient)
|
||||||
{ }
|
, IsServer(params.IsServer)
|
||||||
|
{
|
||||||
|
if (IsClient) {
|
||||||
|
EVENT_SUBSCRIBE_MEMBER(m_EPlayerSpawned, &System::setLocalPlayer);
|
||||||
|
}
|
||||||
|
}
|
||||||
virtual ~System() = default;
|
virtual ~System() = default;
|
||||||
|
|
||||||
World* m_World;
|
World* m_World;
|
||||||
EventBroker* m_EventBroker;
|
EventBroker* m_EventBroker;
|
||||||
|
bool IsClient = false;
|
||||||
|
bool IsServer = false;
|
||||||
|
EntityWrapper LocalPlayer = EntityWrapper::Invalid;
|
||||||
|
|
||||||
|
private:
|
||||||
|
EventRelay<System, Events::PlayerSpawned> m_EPlayerSpawned;
|
||||||
|
virtual bool setLocalPlayer(Events::PlayerSpawned& e)
|
||||||
|
{
|
||||||
|
if (e.PlayerID == -1) {
|
||||||
|
LocalPlayer = e.Player;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
class PureSystem : public virtual System
|
class PureSystem : public virtual System
|
||||||
@@ -34,7 +68,7 @@ protected:
|
|||||||
|
|
||||||
const std::string m_ComponentType;
|
const std::string m_ComponentType;
|
||||||
|
|
||||||
virtual void UpdateComponent(EntityWrapper& entity, ComponentWrapper& cComponent, double dt) = 0;
|
virtual void UpdateComponent(EntityWrapper& entity, ComponentWrapper& cPlayer, double dt) = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
class ImpureSystem : public virtual System
|
class ImpureSystem : public virtual System
|
||||||
|
|||||||
@@ -10,9 +10,11 @@
|
|||||||
class SystemPipeline
|
class SystemPipeline
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
SystemPipeline(World* world, EventBroker* eventBroker)
|
SystemPipeline(World* world, EventBroker* eventBroker, bool isClient, bool isServer)
|
||||||
: m_World(world)
|
: m_World(world)
|
||||||
, m_EventBroker(eventBroker)
|
, m_EventBroker(eventBroker)
|
||||||
|
, m_IsClient(isClient)
|
||||||
|
, m_IsServer(isServer)
|
||||||
{
|
{
|
||||||
EVENT_SUBSCRIBE_MEMBER(m_EPause, &SystemPipeline::OnPause);
|
EVENT_SUBSCRIBE_MEMBER(m_EPause, &SystemPipeline::OnPause);
|
||||||
EVENT_SUBSCRIBE_MEMBER(m_EResume, &SystemPipeline::OnResume);
|
EVENT_SUBSCRIBE_MEMBER(m_EResume, &SystemPipeline::OnResume);
|
||||||
@@ -35,7 +37,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_World, m_EventBroker, args...);
|
System* system = new T(SystemParams(m_World, m_EventBroker, m_IsClient, m_IsServer), 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);
|
||||||
@@ -59,6 +61,9 @@ public:
|
|||||||
dt = 0.0;
|
dt = 0.0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Process utility events for the System base class
|
||||||
|
m_EventBroker->Process<System>();
|
||||||
|
|
||||||
for (UnorderedSystems& group : m_OrderedSystemGroups) {
|
for (UnorderedSystems& group : m_OrderedSystemGroups) {
|
||||||
// Process events
|
// Process events
|
||||||
for (auto& pair : group.Systems) {
|
for (auto& pair : group.Systems) {
|
||||||
@@ -88,6 +93,8 @@ public:
|
|||||||
private:
|
private:
|
||||||
World* m_World;
|
World* m_World;
|
||||||
EventBroker* m_EventBroker;
|
EventBroker* m_EventBroker;
|
||||||
|
bool m_IsClient = false;
|
||||||
|
bool m_IsServer = false;
|
||||||
bool m_Paused = false;
|
bool m_Paused = false;
|
||||||
|
|
||||||
struct UnorderedSystems
|
struct UnorderedSystems
|
||||||
|
|||||||
@@ -8,7 +8,7 @@
|
|||||||
class UniformScaleSystem : public PureSystem
|
class UniformScaleSystem : public PureSystem
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
UniformScaleSystem(World* world, EventBroker* eventBroker);
|
UniformScaleSystem(SystemParams params);
|
||||||
|
|
||||||
virtual void UpdateComponent(EntityWrapper& entity, ComponentWrapper& cUniformScale, double dt) override;
|
virtual void UpdateComponent(EntityWrapper& entity, ComponentWrapper& cUniformScale, double dt) override;
|
||||||
|
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
// }
|
// }
|
||||||
// NOTE: condition statement is not executed at all in release mode.
|
// NOTE: condition statement is not executed at all in release mode.
|
||||||
#ifndef DEBUG_IF
|
#ifndef DEBUG_IF
|
||||||
#ifndef DEBUG
|
#ifdef DEBUG
|
||||||
#define DEBUG_IF(c) if(c)
|
#define DEBUG_IF(c) if(c)
|
||||||
#else
|
#else
|
||||||
#define DEBUG_IF(c) if(false)
|
#define DEBUG_IF(c) if(false)
|
||||||
|
|||||||
@@ -10,7 +10,7 @@
|
|||||||
class EditorRenderSystem : public ImpureSystem
|
class EditorRenderSystem : public ImpureSystem
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
EditorRenderSystem(World* world, EventBroker* eventBroker, IRenderer* renderer, RenderFrame* renderFrame);
|
EditorRenderSystem(SystemParams params, IRenderer* renderer, RenderFrame* renderFrame);
|
||||||
|
|
||||||
virtual void Update(double dt) override;
|
virtual void Update(double dt) override;
|
||||||
|
|
||||||
|
|||||||
@@ -17,7 +17,7 @@
|
|||||||
class EditorSystem : public ImpureSystem
|
class EditorSystem : public ImpureSystem
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
EditorSystem(World* world, EventBroker* eventBroker, IRenderer* renderer, RenderFrame* renderFrame);
|
EditorSystem(SystemParams params, IRenderer* renderer, RenderFrame* renderFrame);
|
||||||
~EditorSystem();
|
~EditorSystem();
|
||||||
|
|
||||||
void Update(double dt);
|
void Update(double dt);
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ struct WidgetDelta : Event
|
|||||||
class EditorWidgetSystem : public ImpureSystem, PureSystem
|
class EditorWidgetSystem : public ImpureSystem, PureSystem
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
EditorWidgetSystem(World* world, EventBroker* eventBroker, IRenderer* renderer);
|
EditorWidgetSystem(SystemParams params, IRenderer* renderer);
|
||||||
|
|
||||||
virtual void Update(double dt) override;
|
virtual void Update(double dt) override;
|
||||||
virtual void UpdateComponent(EntityWrapper& entity, ComponentWrapper& cEditorWidget, double dt) override;
|
virtual void UpdateComponent(EntityWrapper& entity, ComponentWrapper& cEditorWidget, double dt) override;
|
||||||
|
|||||||
@@ -4,6 +4,7 @@
|
|||||||
#include "../GLM.h"
|
#include "../GLM.h"
|
||||||
#include "../Core/InputController.h"
|
#include "../Core/InputController.h"
|
||||||
#include "../Core/ELockMouse.h"
|
#include "../Core/ELockMouse.h"
|
||||||
|
#include "../Game/Events/EDashAbility.h"
|
||||||
#include "InputHandler.h"
|
#include "InputHandler.h"
|
||||||
|
|
||||||
template <typename EventContext>
|
template <typename EventContext>
|
||||||
@@ -54,6 +55,7 @@ protected:
|
|||||||
//specialabilitys
|
//specialabilitys
|
||||||
bool m_MovementKeyDown = false;
|
bool m_MovementKeyDown = false;
|
||||||
bool m_SpecialAbilityKeyDown = false;
|
bool m_SpecialAbilityKeyDown = false;
|
||||||
|
int m_NumberOfMovementKeysDown = 0;
|
||||||
|
|
||||||
EventRelay<EventContext, Events::LockMouse> m_ELockMouse;
|
EventRelay<EventContext, Events::LockMouse> m_ELockMouse;
|
||||||
bool OnLockMouse(const Events::LockMouse& e);
|
bool OnLockMouse(const Events::LockMouse& e);
|
||||||
@@ -131,6 +133,7 @@ bool FirstPersonInputController<EventContext>::OnCommand(const Events::InputComm
|
|||||||
}
|
}
|
||||||
//if value = 0 then you have just released this key
|
//if value = 0 then you have just released this key
|
||||||
if (e.Value != 0) {
|
if (e.Value != 0) {
|
||||||
|
m_NumberOfMovementKeysDown++;
|
||||||
m_MovementKeyDown = true;
|
m_MovementKeyDown = true;
|
||||||
//if you pressed the same key within m_AssaultDashDoubleTapSensitivityTimer then you have doubletapped it
|
//if you pressed the same key within m_AssaultDashDoubleTapSensitivityTimer then you have doubletapped it
|
||||||
if (m_AssaultDashDoubleTapDeltaTime < m_AssaultDashDoubleTapSensitivityTimer && m_AssaultDashTapDirection == m_CurrentDirectionVector) {
|
if (m_AssaultDashDoubleTapDeltaTime < m_AssaultDashDoubleTapSensitivityTimer && m_AssaultDashTapDirection == m_CurrentDirectionVector) {
|
||||||
@@ -138,10 +141,14 @@ bool FirstPersonInputController<EventContext>::OnCommand(const Events::InputComm
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
//== 0
|
//== 0
|
||||||
m_MovementKeyDown = false;
|
m_NumberOfMovementKeysDown--;
|
||||||
//you have just released the key, store what key it was and reset the doubletap-sensitivity-timer
|
if (m_NumberOfMovementKeysDown == 0) {
|
||||||
m_AssaultDashTapDirection = m_CurrentDirectionVector;
|
m_MovementKeyDown = false;
|
||||||
m_AssaultDashDoubleTapDeltaTime = 0.f;
|
}
|
||||||
|
//you have just released the key, store what key it was and reset the doubletap-sensitivity-timer
|
||||||
|
m_AssaultDashTapDirection = m_CurrentDirectionVector;
|
||||||
|
m_AssaultDashDoubleTapDeltaTime = 0.f;
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -201,12 +208,6 @@ void FirstPersonInputController<EventContext>::AssaultDashCheck(double dt, bool
|
|||||||
m_AssaultDashCoolDownTimer = assaultDashCoolDownMaxTimer;
|
m_AssaultDashCoolDownTimer = assaultDashCoolDownMaxTimer;
|
||||||
m_AssaultDashDoubleTapped = true;
|
m_AssaultDashDoubleTapped = true;
|
||||||
m_AssaultDashDoubleTapDeltaTime = 0.f;
|
m_AssaultDashDoubleTapDeltaTime = 0.f;
|
||||||
//moving to the side has priority
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
//dashing with doubletap - check if doubletap to dash enabled
|
|
||||||
if (ResourceManager::Load<ConfigFile>("Input.ini")->Get<bool>("Keyboard.DoubleTapToDash", false)) {
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -215,6 +216,11 @@ void FirstPersonInputController<EventContext>::AssaultDashCheck(double dt, bool
|
|||||||
m_AssaultDashDoubleTapped = false;
|
m_AssaultDashDoubleTapped = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//dashing with doubletap - check if doubletap to dash enabled
|
||||||
|
if (!ResourceManager::Load<ConfigFile>("Input.ini")->Get<bool>("Keyboard.DoubleTapToDash", false)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
//check if we have received a valid doubletap
|
//check if we have received a valid doubletap
|
||||||
if (!m_ValidDoubleTap) {
|
if (!m_ValidDoubleTap) {
|
||||||
return;
|
return;
|
||||||
@@ -230,6 +236,9 @@ void FirstPersonInputController<EventContext>::AssaultDashCheck(double dt, bool
|
|||||||
m_AssaultDashDoubleTapped = true;
|
m_AssaultDashDoubleTapped = true;
|
||||||
m_AssaultDashDoubleTapDeltaTime = 0.f;
|
m_AssaultDashDoubleTapDeltaTime = 0.f;
|
||||||
m_AssaultDashCoolDownTimer = assaultDashCoolDownMaxTimer;
|
m_AssaultDashCoolDownTimer = assaultDashCoolDownMaxTimer;
|
||||||
|
|
||||||
|
Events::DashAbility e;
|
||||||
|
m_EventBroker->Publish(e);
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
@@ -20,16 +20,22 @@
|
|||||||
#include "Input/EInputCommand.h"
|
#include "Input/EInputCommand.h"
|
||||||
#include "Core/EPlayerDamage.h"
|
#include "Core/EPlayerDamage.h"
|
||||||
#include "Network/EInterpolate.h"
|
#include "Network/EInterpolate.h"
|
||||||
|
#include "Network/SnapshotFilter.h"
|
||||||
#include "Core/EPlayerSpawned.h"
|
#include "Core/EPlayerSpawned.h"
|
||||||
|
|
||||||
class Client : public Network
|
class Client : public Network
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
Client(ConfigFile* config);
|
Client(World* world, EventBroker* eventBroker);
|
||||||
|
Client(World* world, EventBroker* eventBroker, std::unique_ptr<SnapshotFilter> snapshotFilter);
|
||||||
~Client();
|
~Client();
|
||||||
void Start(World* world, EventBroker* eventBroker) override;
|
|
||||||
|
void Connect(std::string address, int port);
|
||||||
void Update() override;
|
void Update() override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
std::unique_ptr<SnapshotFilter> m_SnapshotFilter = nullptr;
|
||||||
|
|
||||||
// Assio UDP logic
|
// Assio UDP logic
|
||||||
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;
|
||||||
@@ -45,10 +51,8 @@ private:
|
|||||||
PacketID m_SendPacketID = 0;
|
PacketID m_SendPacketID = 0;
|
||||||
|
|
||||||
// Game logic
|
// Game logic
|
||||||
World* m_World;
|
|
||||||
std::string m_PlayerName;
|
std::string m_PlayerName;
|
||||||
PlayerID m_PlayerID = -1;
|
PlayerID m_PlayerID = -1;
|
||||||
EntityID m_ServerEntityID = std::numeric_limits<EntityID>::max();
|
|
||||||
bool m_IsConnected = false;
|
bool m_IsConnected = false;
|
||||||
EntityWrapper m_LocalPlayer = EntityWrapper::Invalid;
|
EntityWrapper m_LocalPlayer = EntityWrapper::Invalid;
|
||||||
// Server Client Lookup map
|
// Server Client Lookup map
|
||||||
@@ -74,7 +78,9 @@ private:
|
|||||||
void connect();
|
void connect();
|
||||||
void disconnect();
|
void disconnect();
|
||||||
void parseMessageType(Packet& packet);
|
void parseMessageType(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);
|
||||||
|
SharedComponentWrapper createSharedComponent(Packet& packet, EntityID entityID, const ComponentInfo& componentInfo);
|
||||||
|
void ignoreFields(Packet& packet, const ComponentInfo& componentInfo);
|
||||||
void parseConnect(Packet& packet);
|
void parseConnect(Packet& packet);
|
||||||
void parsePlayerConnected(Packet& packet);
|
void parsePlayerConnected(Packet& packet);
|
||||||
void parsePing();
|
void parsePing();
|
||||||
@@ -99,7 +105,6 @@ private:
|
|||||||
void deleteFromServerClientMaps(EntityID serverEntityID, EntityID clientEntityID);
|
void deleteFromServerClientMaps(EntityID serverEntityID, EntityID clientEntityID);
|
||||||
|
|
||||||
// Events
|
// Events
|
||||||
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_EPlayerDamage;
|
EventRelay<Client, Events::PlayerDamage> m_EPlayerDamage;
|
||||||
|
|||||||
@@ -11,8 +11,13 @@ namespace Events
|
|||||||
|
|
||||||
struct Interpolate : Event
|
struct Interpolate : Event
|
||||||
{
|
{
|
||||||
EntityID Entity;
|
Interpolate(EntityWrapper Entity, SharedComponentWrapper Component)
|
||||||
boost::shared_array<char> DataArray;
|
: Entity(Entity)
|
||||||
|
, Component(Component)
|
||||||
|
{ }
|
||||||
|
|
||||||
|
EntityWrapper Entity;
|
||||||
|
SharedComponentWrapper Component;
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -19,10 +19,15 @@ typedef unsigned int PacketID;
|
|||||||
class Network
|
class Network
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
Network(World* world, EventBroker* eventBroker);
|
||||||
virtual ~Network() { };
|
virtual ~Network() { };
|
||||||
virtual void Start(World* m_world, EventBroker *eventBroker) = 0;
|
|
||||||
virtual void Update() = 0;
|
virtual void Update() = 0;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
World* m_World;
|
||||||
|
EventBroker* m_EventBroker;
|
||||||
|
|
||||||
// For Debug
|
// For Debug
|
||||||
bool isReadingData = false;
|
bool isReadingData = false;
|
||||||
NetworkData m_NetworkData;
|
NetworkData m_NetworkData;
|
||||||
@@ -32,7 +37,6 @@ protected:
|
|||||||
double m_TimeoutMs;
|
double m_TimeoutMs;
|
||||||
void saveToFile();
|
void saveToFile();
|
||||||
void updateNetworkData();
|
void updateNetworkData();
|
||||||
void initialize();
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
@@ -22,15 +22,17 @@
|
|||||||
class Server : public Network
|
class Server : public Network
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
Server();
|
Server(World* world, EventBroker* eventBroker, int port);
|
||||||
~Server();
|
~Server();
|
||||||
void Start(World* m_world, EventBroker *eventBroker) override;
|
|
||||||
void Update() override;
|
void Update() override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
int m_Port = 27666;
|
||||||
// UDP logic
|
// UDP logic
|
||||||
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;
|
std::unique_ptr<boost::asio::ip::udp::socket> m_Socket;
|
||||||
|
|
||||||
// Sending messages to client logic
|
// Sending messages to client logic
|
||||||
std::map<PlayerID, PlayerDefinition> m_ConnectedPlayers;
|
std::map<PlayerID, PlayerDefinition> m_ConnectedPlayers;
|
||||||
@@ -46,13 +48,10 @@ private:
|
|||||||
float snapshotInterval;
|
float snapshotInterval;
|
||||||
int checkTimeOutInterval = 100;
|
int checkTimeOutInterval = 100;
|
||||||
int m_NextPlayerID = 0;
|
int m_NextPlayerID = 0;
|
||||||
|
std::vector<Events::InputCommand> m_InputCommandsToBroadcast;
|
||||||
|
|
||||||
//Timers
|
//Timers
|
||||||
std::clock_t m_StartPingTime;
|
std::clock_t m_StartPingTime;
|
||||||
|
|
||||||
// Game logic
|
|
||||||
World* m_World;
|
|
||||||
EventBroker* m_EventBroker;
|
|
||||||
|
|
||||||
// Packet loss logic
|
// Packet loss logic
|
||||||
PacketID m_PacketID = 0;
|
PacketID m_PacketID = 0;
|
||||||
@@ -66,6 +65,7 @@ private:
|
|||||||
void broadcast(Packet& packet);
|
void broadcast(Packet& packet);
|
||||||
void sendSnapshot();
|
void sendSnapshot();
|
||||||
void addChildrenToPacket(Packet& packet, EntityID entityID);
|
void addChildrenToPacket(Packet& packet, EntityID entityID);
|
||||||
|
void addInputCommandsToPacket(Packet& packet);
|
||||||
void sendPing();
|
void sendPing();
|
||||||
void checkForTimeOuts();
|
void checkForTimeOuts();
|
||||||
void disconnect(PlayerID playerID);
|
void disconnect(PlayerID playerID);
|
||||||
|
|||||||
@@ -0,0 +1,19 @@
|
|||||||
|
#ifndef SnapshotFilter_h__
|
||||||
|
#define SnapshotFilter_h__
|
||||||
|
|
||||||
|
#include "../Core/EntityWrapper.h"
|
||||||
|
#include "../Core/ComponentWrapper.h"
|
||||||
|
|
||||||
|
class SnapshotFilter
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
// Filters an incoming snapshot.
|
||||||
|
// Modify the component and return true if the component snapshot should be applied.
|
||||||
|
// Otherwise return false and it will be ignored.
|
||||||
|
virtual bool FilterComponent(EntityWrapper entity, SharedComponentWrapper& component)
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
||||||
@@ -9,12 +9,13 @@
|
|||||||
#include "Rendering/Model.h"
|
#include "Rendering/Model.h"
|
||||||
#include "Rendering/EAnimationComplete.h"
|
#include "Rendering/EAnimationComplete.h"
|
||||||
#include "Rendering/Skeleton.h"
|
#include "Rendering/Skeleton.h"
|
||||||
|
#include <imgui/imgui.h>
|
||||||
|
|
||||||
class AnimationSystem : public PureSystem
|
class AnimationSystem : public PureSystem
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
AnimationSystem(World* world, EventBroker* eventBroker)
|
AnimationSystem(SystemParams params)
|
||||||
: System(world, eventBroker)
|
: System(params)
|
||||||
, PureSystem("Animation")
|
, PureSystem("Animation")
|
||||||
{
|
{
|
||||||
|
|
||||||
@@ -23,7 +24,6 @@ public:
|
|||||||
virtual void UpdateComponent(EntityWrapper& entity, ComponentWrapper& animationComponent, double dt) override;
|
virtual void UpdateComponent(EntityWrapper& entity, ComponentWrapper& animationComponent, double dt) override;
|
||||||
private:
|
private:
|
||||||
|
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
@@ -0,0 +1,29 @@
|
|||||||
|
#ifndef BoneAttachmentSystem_h__
|
||||||
|
#define BoneAttachmentSystem_h__
|
||||||
|
|
||||||
|
#include "GLM.h"
|
||||||
|
|
||||||
|
#include "Common.h"
|
||||||
|
#include "Core/System.h"
|
||||||
|
#include "Core/ResourceManager.h"
|
||||||
|
#include "Rendering/Model.h"
|
||||||
|
#include "Rendering/Skeleton.h"
|
||||||
|
|
||||||
|
//Needs to be a higher orderlevel than AnimationSystem
|
||||||
|
class BoneAttachmentSystem : public PureSystem
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
BoneAttachmentSystem(SystemParams params)
|
||||||
|
: System(params)
|
||||||
|
, PureSystem("BoneAttachment")
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
~BoneAttachmentSystem() { }
|
||||||
|
virtual void UpdateComponent(EntityWrapper& entity, ComponentWrapper& BoneAttachmentComponent, double dt) override;
|
||||||
|
private:
|
||||||
|
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
||||||
@@ -43,8 +43,8 @@ private:
|
|||||||
void BindExplosionUniforms(GLuint shaderHandle, std::shared_ptr<ExplosionEffectJob>& job, RenderScene& scene);
|
void BindExplosionUniforms(GLuint shaderHandle, std::shared_ptr<ExplosionEffectJob>& job, RenderScene& scene);
|
||||||
void BindModelUniforms(GLuint shaderHandle, std::shared_ptr<ModelJob>& job, RenderScene& scene);
|
void BindModelUniforms(GLuint shaderHandle, std::shared_ptr<ModelJob>& job, RenderScene& scene);
|
||||||
|
|
||||||
void BindExplosionTextures(std::shared_ptr<ExplosionEffectJob>& job);
|
void BindExplosionTextures(GLuint shaderHandle, std::shared_ptr<ExplosionEffectJob>& job);
|
||||||
void BindModelTextures(std::shared_ptr<ModelJob>& job);
|
void BindModelTextures(GLuint shaderHandle, std::shared_ptr<ModelJob>& job);
|
||||||
|
|
||||||
Texture* m_WhiteTexture;
|
Texture* m_WhiteTexture;
|
||||||
Texture* m_BlackTexture;
|
Texture* m_BlackTexture;
|
||||||
@@ -68,8 +68,18 @@ private:
|
|||||||
|
|
||||||
ShaderProgram* m_ForwardPlusProgram;
|
ShaderProgram* m_ForwardPlusProgram;
|
||||||
ShaderProgram* m_ExplosionEffectProgram;
|
ShaderProgram* m_ExplosionEffectProgram;
|
||||||
|
ShaderProgram* m_ExplosionEffectSplatMapProgram;
|
||||||
|
ShaderProgram* m_ForwardPlusSplatMapProgram;
|
||||||
ShaderProgram* m_ShieldToStencilProgram;
|
ShaderProgram* m_ShieldToStencilProgram;
|
||||||
ShaderProgram* m_FillDepthBufferProgram;
|
ShaderProgram* m_FillDepthBufferProgram;
|
||||||
|
|
||||||
|
|
||||||
|
ShaderProgram* m_ForwardPlusSkinnedProgram;
|
||||||
|
ShaderProgram* m_ExplosionEffectSkinnedProgram;
|
||||||
|
ShaderProgram* m_ExplosionEffectSplatMapSkinnedProgram;
|
||||||
|
ShaderProgram* m_ForwardPlusSplatMapSkinnedProgram;
|
||||||
|
ShaderProgram* m_ShieldToStencilSkinnedProgram;
|
||||||
|
ShaderProgram* m_FillDepthBufferSkinnedProgram;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
@@ -15,7 +15,7 @@
|
|||||||
|
|
||||||
struct ExplosionEffectJob : ModelJob
|
struct ExplosionEffectJob : ModelJob
|
||||||
{
|
{
|
||||||
ExplosionEffectJob(ComponentWrapper explosionEffectComponent, ::Model* model, Camera* camera, glm::mat4 matrix, ::RawModel::MaterialGroup matGroup, ComponentWrapper modelComponent, ::World* world, glm::vec4 fillColor, float fillPercentage)
|
ExplosionEffectJob(ComponentWrapper explosionEffectComponent, ::Model* model, Camera* camera, glm::mat4 matrix, ::RawModel::MaterialProperties matGroup, ComponentWrapper modelComponent, ::World* world, glm::vec4 fillColor, float fillPercentage)
|
||||||
: ModelJob(model, camera, matrix, matGroup, modelComponent, world, fillColor, fillPercentage)
|
: ModelJob(model, camera, matrix, matGroup, modelComponent, world, fillColor, fillPercentage)
|
||||||
{
|
{
|
||||||
ExplosionOrigin = (glm::vec3)explosionEffectComponent["ExplosionOrigin"];
|
ExplosionOrigin = (glm::vec3)explosionEffectComponent["ExplosionOrigin"];
|
||||||
|
|||||||
@@ -32,6 +32,8 @@ public:
|
|||||||
virtual void SetFullscreen(bool fullscreen) { m_Fullscreen = fullscreen; }
|
virtual void SetFullscreen(bool fullscreen) { m_Fullscreen = fullscreen; }
|
||||||
bool VSYNC() const { return m_VSYNC; }
|
bool VSYNC() const { return m_VSYNC; }
|
||||||
virtual void SetVSYNC(bool vsync) { m_VSYNC = vsync; }
|
virtual void SetVSYNC(bool vsync) { m_VSYNC = vsync; }
|
||||||
|
std::string WindowTitle() const { return m_WindowTitle; }
|
||||||
|
virtual void SetWindowTitle(const std::string& title) { glfwSetWindowTitle(m_Window, title.c_str()); m_WindowTitle = title; }
|
||||||
//Returns screen size excluding window border and header
|
//Returns screen size excluding window border and header
|
||||||
Rectangle GetViewportSize() const { return m_ViewportSize; }
|
Rectangle GetViewportSize() const { return m_ViewportSize; }
|
||||||
virtual void Initialize() = 0;
|
virtual void Initialize() = 0;
|
||||||
@@ -47,6 +49,7 @@ 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;
|
||||||
|
std::string m_WindowTitle;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // Renderer_h__
|
#endif // Renderer_h__
|
||||||
|
|||||||
@@ -4,6 +4,7 @@
|
|||||||
#include "Rendering/RawModelCustom.h"
|
#include "Rendering/RawModelCustom.h"
|
||||||
//#include "Rendering/RawModelAssimp.h"
|
//#include "Rendering/RawModelAssimp.h"
|
||||||
#include "../OpenGL.h"
|
#include "../OpenGL.h"
|
||||||
|
#include "Core/AABB.h"
|
||||||
|
|
||||||
class Model : public ThreadUnsafeResource
|
class Model : public ThreadUnsafeResource
|
||||||
{
|
{
|
||||||
@@ -14,16 +15,19 @@ private:
|
|||||||
|
|
||||||
public:
|
public:
|
||||||
~Model();
|
~Model();
|
||||||
const std::vector<RawModel::MaterialGroup>& MaterialGroups() const { return m_RawModel->MaterialGroups; }
|
const std::vector<RawModel::MaterialProperties>& MaterialGroups() const { return m_RawModel->m_Materials; }
|
||||||
const glm::mat4& Matrix() const { return m_RawModel->m_Matrix; }
|
const glm::mat4& Matrix() const { return m_RawModel->m_Matrix; }
|
||||||
const std::vector<RawModel::Vertex>& Vertices() const { return m_RawModel->m_Vertices; }
|
const RawModel::Vertex* Vertices() const { return m_RawModel->Vertices(); }
|
||||||
|
unsigned int NumberOfVertices() const { return m_RawModel->NumVertices(); }
|
||||||
|
const AABB& Box() const { return m_Box; }
|
||||||
|
bool IsSkinned() const { return m_RawModel->IsSkinned(); }
|
||||||
GLuint VAO;
|
GLuint VAO;
|
||||||
GLuint ElementBuffer;
|
GLuint ElementBuffer;
|
||||||
RawModel* m_RawModel;
|
RawModel* m_RawModel;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
AABB m_Box;
|
||||||
|
|
||||||
GLuint VertexBuffer;
|
GLuint VertexBuffer;
|
||||||
GLuint NormalBuffer;
|
GLuint NormalBuffer;
|
||||||
GLuint TangentNormalsBuffer;
|
GLuint TangentNormalsBuffer;
|
||||||
|
|||||||
@@ -14,39 +14,98 @@
|
|||||||
#include "../Core/World.h"
|
#include "../Core/World.h"
|
||||||
#include "../Core/Transform.h"
|
#include "../Core/Transform.h"
|
||||||
#include "Skeleton.h"
|
#include "Skeleton.h"
|
||||||
|
#include "ShaderProgram.h"
|
||||||
|
|
||||||
struct ModelJob : RenderJob
|
struct ModelJob : RenderJob
|
||||||
{
|
{
|
||||||
ModelJob(Model* model, Camera* camera, glm::mat4 matrix, ::RawModel::MaterialGroup matGroup, ComponentWrapper modelComponent, World* world, glm::vec4 fillColor, float fillPercentage)
|
ModelJob(Model* model, Camera* camera, glm::mat4 matrix, ::RawModel::MaterialProperties matProp, ComponentWrapper modelComponent, World* world, glm::vec4 fillColor, float fillPercentage)
|
||||||
: RenderJob()
|
: RenderJob()
|
||||||
{
|
{
|
||||||
Model = model;
|
Model = model;
|
||||||
TextureID = (matGroup.Texture) ? matGroup.Texture->ResourceID : 0;
|
ModelID = model->ResourceID;
|
||||||
if (modelComponent["DiffuseTexture"]) {
|
Type = matProp.type;
|
||||||
DiffuseTexture = matGroup.Texture.get();
|
::RawModel::MaterialBasic* matGroup = matProp.material;
|
||||||
} else {
|
switch(matProp.type){
|
||||||
DiffuseTexture = nullptr;
|
case ::RawModel::MaterialType::Basic:
|
||||||
}
|
if (Model->IsSkinned()) {
|
||||||
if (modelComponent["NormalMap"]) {
|
ShaderID = ResourceManager::Load<ShaderProgram>("#ForwardPlusSkinnedProgram")->ResourceID;
|
||||||
NormalTexture = matGroup.NormalMap.get();
|
}
|
||||||
} else {
|
else {
|
||||||
NormalTexture = nullptr;
|
ShaderID = ResourceManager::Load<ShaderProgram>("#ForwardPlusProgram")->ResourceID;
|
||||||
}
|
}
|
||||||
if (modelComponent["SpecularMap"]) {
|
TextureID = 0;
|
||||||
SpecularTexture = matGroup.SpecularMap.get();
|
break;
|
||||||
} else {
|
case ::RawModel::MaterialType::SingleTextures:
|
||||||
SpecularTexture = nullptr;
|
{
|
||||||
}
|
if (Model->IsSkinned()) {
|
||||||
if (modelComponent["GlowMap"]) {
|
ShaderID = ResourceManager::Load<ShaderProgram>("#ForwardPlusSkinnedProgram")->ResourceID;
|
||||||
IncandescenceTexture = matGroup.IncandescenceMap.get();
|
}
|
||||||
} else {
|
else {
|
||||||
IncandescenceTexture = nullptr;
|
ShaderID = ResourceManager::Load<ShaderProgram>("#ForwardPlusProgram")->ResourceID;
|
||||||
}
|
}
|
||||||
DiffuseColor = matGroup.DiffuseColor;
|
::RawModel::MaterialSingleTextures* singleTextures = static_cast<::RawModel::MaterialSingleTextures*>(matProp.material);
|
||||||
SpecularColor = matGroup.SpecularColor;
|
TextureID = (singleTextures->ColorMap.Texture) ? singleTextures->ColorMap.Texture->ResourceID : 0;
|
||||||
IncandescenceColor = matGroup.IncandescenceColor;
|
if (modelComponent["DiffuseTexture"]) {
|
||||||
StartIndex = matGroup.StartIndex;
|
DiffuseTexture.push_back(&singleTextures->ColorMap);
|
||||||
EndIndex = matGroup.EndIndex;
|
}
|
||||||
|
|
||||||
|
if (modelComponent["NormalMap"]) {
|
||||||
|
NormalTexture.push_back(&singleTextures->NormalMap);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (modelComponent["SpecularMap"]) {
|
||||||
|
SpecularTexture.push_back(&singleTextures->SpecularMap);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (modelComponent["GlowMap"]) {
|
||||||
|
IncandescenceTexture.push_back(&singleTextures->IncandescenceMap);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case ::RawModel::MaterialType::SplatMapping:
|
||||||
|
{
|
||||||
|
if (Model->IsSkinned()) {
|
||||||
|
ShaderID = ResourceManager::Load<ShaderProgram>("#ForwardPlusSplatMapSkinnedProgram")->ResourceID;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
ShaderID = ResourceManager::Load<ShaderProgram>("#ForwardPlusSplatMapProgram")->ResourceID;
|
||||||
|
}
|
||||||
|
::RawModel::MaterialSplatMapping* SplatTextures = static_cast<::RawModel::MaterialSplatMapping*>(matProp.material);
|
||||||
|
|
||||||
|
SplatMap = &SplatTextures->SplatMap;
|
||||||
|
|
||||||
|
TextureID = (SplatTextures->ColorMaps[0].Texture) ? SplatTextures->ColorMaps[0].Texture->ResourceID : 0;
|
||||||
|
if (modelComponent["DiffuseTexture"]) {
|
||||||
|
for (auto& texture : SplatTextures->ColorMaps) {
|
||||||
|
DiffuseTexture.push_back(&texture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (modelComponent["NormalMap"]) {
|
||||||
|
for (auto& texture : SplatTextures->NormalMaps) {
|
||||||
|
NormalTexture.push_back(&texture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (modelComponent["SpecularMap"]) {
|
||||||
|
for (auto& texture : SplatTextures->SpecularMaps) {
|
||||||
|
SpecularTexture.push_back(&texture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (modelComponent["GlowMap"]) {
|
||||||
|
for (auto& texture : SplatTextures->IncandescenceMaps) {
|
||||||
|
IncandescenceTexture.push_back(&texture);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
DiffuseColor = matGroup->DiffuseColor;
|
||||||
|
SpecularColor = matGroup->SpecularColor;
|
||||||
|
IncandescenceColor = matGroup->IncandescenceColor;
|
||||||
|
StartIndex = matGroup->StartIndex;
|
||||||
|
EndIndex = matGroup->EndIndex;
|
||||||
Matrix = matrix;
|
Matrix = matrix;
|
||||||
Color = modelComponent["Color"];
|
Color = modelComponent["Color"];
|
||||||
Entity = modelComponent.EntityID;
|
Entity = modelComponent.EntityID;
|
||||||
@@ -57,31 +116,34 @@ struct ModelJob : RenderJob
|
|||||||
|
|
||||||
FillColor = fillColor;
|
FillColor = fillColor;
|
||||||
FillPercentage = fillPercentage;
|
FillPercentage = fillPercentage;
|
||||||
Skeleton = Model->m_RawModel->m_Skeleton;
|
|
||||||
|
|
||||||
if (world->HasComponent(Entity, "Animation") && Skeleton != nullptr) {
|
|
||||||
auto animationComponent = world->GetComponent(Entity, "Animation");
|
if (model->IsSkinned()) {
|
||||||
Animation = model->m_RawModel->m_Skeleton->GetAnimation(animationComponent["Name"]);
|
Skeleton = Model->m_RawModel->m_Skeleton;
|
||||||
AnimationTime = (double)animationComponent["Time"];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
unsigned int TextureID;
|
unsigned int TextureID;
|
||||||
unsigned int ShaderID;
|
unsigned int ShaderID;
|
||||||
|
unsigned int ModelID;
|
||||||
|
|
||||||
|
::RawModel::MaterialType Type;
|
||||||
EntityID Entity;
|
EntityID Entity;
|
||||||
glm::mat4 Matrix;
|
glm::mat4 Matrix;
|
||||||
const Texture* DiffuseTexture;
|
const ::RawModel::TextureProperties* SplatMap;
|
||||||
const Texture* NormalTexture;
|
std::vector<const ::RawModel::TextureProperties*> DiffuseTexture;
|
||||||
const Texture* SpecularTexture;
|
std::vector<const ::RawModel::TextureProperties*> NormalTexture;
|
||||||
const Texture* IncandescenceTexture;
|
std::vector<const ::RawModel::TextureProperties*> SpecularTexture;
|
||||||
|
std::vector<const ::RawModel::TextureProperties*> IncandescenceTexture;
|
||||||
float Shininess = 0.f;
|
float Shininess = 0.f;
|
||||||
glm::vec4 Color;
|
glm::vec4 Color;
|
||||||
const ::Model* Model = nullptr;
|
const ::Model* Model = nullptr;
|
||||||
::Skeleton* Skeleton = nullptr;
|
::Skeleton* Skeleton = nullptr;
|
||||||
const ::Skeleton::Animation* Animation = nullptr;
|
// const ::Skeleton::Animation* Animation = nullptr;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
float AnimationTime = 0.f;
|
|
||||||
|
|
||||||
glm::vec4 DiffuseColor;
|
glm::vec4 DiffuseColor;
|
||||||
glm::vec4 SpecularColor;
|
glm::vec4 SpecularColor;
|
||||||
@@ -95,7 +157,7 @@ struct ModelJob : RenderJob
|
|||||||
|
|
||||||
void CalculateHash() override
|
void CalculateHash() override
|
||||||
{
|
{
|
||||||
Hash = TextureID;
|
Hash = TextureID + ModelID << 10 + ShaderID << 20;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -40,6 +40,7 @@ private:
|
|||||||
const IRenderer* m_Renderer;
|
const IRenderer* m_Renderer;
|
||||||
|
|
||||||
ShaderProgram* m_PickingProgram;
|
ShaderProgram* m_PickingProgram;
|
||||||
|
ShaderProgram* m_PickingSkinnedProgram;
|
||||||
Camera* m_Camera;
|
Camera* m_Camera;
|
||||||
|
|
||||||
struct PickingInfo
|
struct PickingInfo
|
||||||
|
|||||||
@@ -33,18 +33,27 @@ protected:
|
|||||||
public:
|
public:
|
||||||
~RawModelCustom();
|
~RawModelCustom();
|
||||||
|
|
||||||
struct Vertex
|
struct Vertex
|
||||||
{
|
{
|
||||||
glm::vec3 Position;
|
glm::vec3 Position;
|
||||||
glm::vec3 Normal;
|
glm::vec3 Normal;
|
||||||
glm::vec3 Tangent;
|
glm::vec3 Tangent;
|
||||||
glm::vec3 BiNormal;
|
glm::vec3 BiNormal;
|
||||||
glm::vec2 TextureCoords;
|
glm::vec2 TextureCoords;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct SkinedVertex : public Vertex {
|
||||||
glm::vec4 BoneIndices;
|
glm::vec4 BoneIndices;
|
||||||
glm::vec4 BoneWeights;
|
glm::vec4 BoneWeights;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct MaterialGroup
|
struct TextureProperties {
|
||||||
|
std::string TexturePath;
|
||||||
|
glm::vec2 UVRepeat;
|
||||||
|
std::shared_ptr<::Texture> Texture;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct MaterialBasic
|
||||||
{
|
{
|
||||||
float SpecularExponent;
|
float SpecularExponent;
|
||||||
float ReflectionFactor;
|
float ReflectionFactor;
|
||||||
@@ -54,25 +63,69 @@ public:
|
|||||||
unsigned int StartIndex;
|
unsigned int StartIndex;
|
||||||
unsigned int EndIndex;
|
unsigned int EndIndex;
|
||||||
//float Transparency;
|
//float Transparency;
|
||||||
std::string TexturePath;
|
|
||||||
std::shared_ptr<::Texture> Texture;
|
|
||||||
std::string NormalMapPath;
|
|
||||||
std::shared_ptr<::Texture> NormalMap;
|
|
||||||
std::string SpecularMapPath;
|
|
||||||
std::shared_ptr<::Texture> SpecularMap;
|
|
||||||
std::string IncandescenceMapPath;
|
|
||||||
std::shared_ptr<::Texture> IncandescenceMap;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
std::vector<MaterialGroup> MaterialGroups;
|
struct MaterialSplatMapping : public MaterialBasic
|
||||||
|
{
|
||||||
|
TextureProperties SplatMap;
|
||||||
|
std::vector<TextureProperties> ColorMaps;
|
||||||
|
std::vector<TextureProperties> NormalMaps;
|
||||||
|
std::vector<TextureProperties> SpecularMaps;
|
||||||
|
std::vector<TextureProperties> IncandescenceMaps;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct MaterialSingleTextures : public MaterialBasic
|
||||||
|
{
|
||||||
|
TextureProperties ColorMap;
|
||||||
|
TextureProperties NormalMap;
|
||||||
|
TextureProperties SpecularMap;
|
||||||
|
TextureProperties IncandescenceMap;
|
||||||
|
};
|
||||||
|
|
||||||
|
enum class MaterialType { Basic = 1, SplatMapping, SingleTextures };
|
||||||
|
|
||||||
|
struct MaterialProperties {
|
||||||
|
MaterialType type;
|
||||||
|
MaterialBasic* material;
|
||||||
|
};
|
||||||
|
|
||||||
|
const Vertex* Vertices() const {
|
||||||
|
if (hasSkin) {
|
||||||
|
return m_SkinedVertices.data();
|
||||||
|
} else {
|
||||||
|
return m_Vertices.data();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
unsigned int VertexSize() const {
|
||||||
|
if (hasSkin) {
|
||||||
|
return sizeof(SkinedVertex);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return sizeof(Vertex);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
unsigned int NumVertices() const {
|
||||||
|
if (hasSkin) {
|
||||||
|
return m_SkinedVertices.size();
|
||||||
|
} else {
|
||||||
|
return m_Vertices.size();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
bool IsSkinned() const { return hasSkin; };
|
||||||
|
|
||||||
|
std::vector<MaterialProperties> m_Materials;
|
||||||
|
|
||||||
std::vector<Vertex> m_Vertices;
|
|
||||||
std::vector<unsigned int> m_Indices;
|
std::vector<unsigned int> m_Indices;
|
||||||
Skeleton* m_Skeleton = nullptr;
|
Skeleton* m_Skeleton = nullptr;
|
||||||
glm::mat4 m_Matrix;
|
glm::mat4 m_Matrix;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
bool hasSkin;
|
||||||
|
std::vector<Vertex> m_Vertices;
|
||||||
|
std::vector<SkinedVertex> m_SkinedVertices;
|
||||||
|
|
||||||
void ReadMeshFile(std::string filePath);
|
void ReadMeshFile(std::string filePath);
|
||||||
void ReadMeshFileHeader(std::size_t& offset, char* fileData);
|
void ReadMeshFileHeader(std::size_t& offset, char* fileData);
|
||||||
@@ -83,13 +136,17 @@ private:
|
|||||||
void ReadMaterialFile(std::string filePath);
|
void ReadMaterialFile(std::string filePath);
|
||||||
void ReadMaterials(std::size_t& offset, char* fileData, const unsigned int& fileByteSize);
|
void ReadMaterials(std::size_t& offset, char* fileData, const unsigned int& fileByteSize);
|
||||||
void ReadMaterialSingle(std::size_t& offset, char* fileData, const unsigned int& fileByteSize);
|
void ReadMaterialSingle(std::size_t& offset, char* fileData, const unsigned int& fileByteSize);
|
||||||
|
void ReadMaterialBasic(MaterialBasic* Material, std::size_t& offset, char* fileData, const unsigned int& fileByteSize);
|
||||||
|
void ReadMaterialSingleTexture(MaterialSingleTextures* Material, std::size_t& offset, char* fileData, const unsigned int& fileByteSize);
|
||||||
|
void ReadMaterialSplatMapping(MaterialSplatMapping* Material, std::size_t& offset, char* fileData, const unsigned int& fileByteSize);
|
||||||
|
void ReadMaterialTextureProperties(TextureProperties& texture, std::size_t& offset, char* fileData, const unsigned int& fileByteSize);
|
||||||
|
|
||||||
void ReadAnimationFile(std::string filePath);
|
void ReadAnimationFile(std::string filePath);
|
||||||
void ReadAnimationBindPoses(std::size_t& offset, char* fileData, const unsigned int& fileByteSize);
|
void ReadAnimationBindPoses(std::size_t& offset, char* fileData, const unsigned int& fileByteSize);
|
||||||
void ReadAnimationJoint(std::size_t& offset, char* fileData, const unsigned int& fileByteSize);
|
void ReadAnimationJoint(std::size_t& offset, char* fileData, const unsigned int& fileByteSize);
|
||||||
void ReadAnimationClips(std::size_t& offset, char* fileData, const unsigned int& fileByteSize, unsigned int numberOfClips);
|
void ReadAnimationClips(std::size_t& offset, char* fileData, const unsigned int& fileByteSize, unsigned int numberOfClips);
|
||||||
void ReadAnimationClipSingle(std::size_t& offset, char* fileData, const unsigned int& fileByteSize, unsigned int clipIndex);
|
void ReadAnimationClipSingle(std::size_t& offset, char* fileData, const unsigned int& fileByteSize, unsigned int clipIndex);
|
||||||
void ReadAnimationKeyFrame(std::size_t& offset, char* fileData, const unsigned int& fileByteSize, unsigned int numberOfJoints, Skeleton::Animation& animation);
|
void ReadAnimationKeyFrame(std::size_t& offset, char* fileData, const unsigned int& fileByteSize, std::vector<Skeleton::Animation::Keyframe>& animation);
|
||||||
|
|
||||||
//void CreateSkeleton(std::vector<std::tuple<std::string, glm::mat4>> &boneInfo, std::map<std::string, int> &boneNameMapping, aiNode* node, int parentID);
|
//void CreateSkeleton(std::vector<std::tuple<std::string, glm::mat4>> &boneInfo, std::map<std::string, int> &boneNameMapping, aiNode* node, int parentID);
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -16,11 +16,13 @@
|
|||||||
#include "PointLightJob.h"
|
#include "PointLightJob.h"
|
||||||
#include "../Core/Transform.h"
|
#include "../Core/Transform.h"
|
||||||
#include "../Core/EPlayerSpawned.h"
|
#include "../Core/EPlayerSpawned.h"
|
||||||
|
#include "../Core/Octree.h"
|
||||||
|
#include "../Collision/EntityAABB.h"
|
||||||
|
|
||||||
class RenderSystem : public ImpureSystem
|
class RenderSystem : public ImpureSystem
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
RenderSystem(World* world, EventBroker* eventBrokerer, const IRenderer* renderer, RenderFrame* renderFrame);
|
RenderSystem(SystemParams params, const IRenderer* renderer, RenderFrame* renderFrame, Octree<EntityAABB>* frustumCullOctree);
|
||||||
~RenderSystem();
|
~RenderSystem();
|
||||||
|
|
||||||
virtual void Update(double dt) override;
|
virtual void Update(double dt) override;
|
||||||
@@ -29,9 +31,9 @@ private:
|
|||||||
const IRenderer* m_Renderer;
|
const IRenderer* m_Renderer;
|
||||||
RenderFrame* m_RenderFrame;
|
RenderFrame* m_RenderFrame;
|
||||||
Camera* m_Camera;
|
Camera* m_Camera;
|
||||||
World* m_World;
|
|
||||||
EntityWrapper m_CurrentCamera = EntityWrapper::Invalid;
|
EntityWrapper m_CurrentCamera = EntityWrapper::Invalid;
|
||||||
EntityWrapper m_LocalPlayer = EntityWrapper::Invalid;
|
EntityWrapper m_LocalPlayer = EntityWrapper::Invalid;
|
||||||
|
Octree<EntityAABB>* m_Octree;
|
||||||
|
|
||||||
EventRelay<RenderSystem, Events::SetCamera> m_ESetCamera;
|
EventRelay<RenderSystem, Events::SetCamera> m_ESetCamera;
|
||||||
bool OnSetCamera(Events::SetCamera &event);
|
bool OnSetCamera(Events::SetCamera &event);
|
||||||
@@ -47,7 +49,6 @@ private:
|
|||||||
void fillLight(std::list<std::shared_ptr<RenderJob>>& jobs);
|
void fillLight(std::list<std::shared_ptr<RenderJob>>& jobs);
|
||||||
bool isChildOfACamera(EntityWrapper entity);
|
bool isChildOfACamera(EntityWrapper entity);
|
||||||
bool isChildOfCurrentCamera(EntityWrapper entity);
|
bool isChildOfCurrentCamera(EntityWrapper entity);
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
@@ -5,6 +5,7 @@
|
|||||||
#include "Common.h"
|
#include "Common.h"
|
||||||
#include "../GLM.h"
|
#include "../GLM.h"
|
||||||
#include <glm/gtx/matrix_decompose.hpp>
|
#include <glm/gtx/matrix_decompose.hpp>
|
||||||
|
#include <imgui/imgui.h>
|
||||||
|
|
||||||
//struct Bone
|
//struct Bone
|
||||||
//{
|
//{
|
||||||
@@ -53,22 +54,39 @@ public:
|
|||||||
{
|
{
|
||||||
struct BoneProperty
|
struct BoneProperty
|
||||||
{
|
{
|
||||||
int ID;
|
glm::vec3 Position;
|
||||||
glm::vec3 Position;
|
glm::quat Rotation;
|
||||||
glm::quat Rotation;
|
|
||||||
glm::vec3 Scale = glm::vec3(1);
|
glm::vec3 Scale = glm::vec3(1);
|
||||||
};
|
};
|
||||||
|
|
||||||
int Index = 0;
|
int Index = 0;
|
||||||
double Time = 0.0;
|
double Time = 0.0;
|
||||||
std::map<int, Keyframe::BoneProperty> BoneProperties;
|
BoneProperty BoneProperties;
|
||||||
};
|
};
|
||||||
|
std::string Name;
|
||||||
std::string Name;
|
double Duration;
|
||||||
double Duration;
|
std::map<int, std::vector<Keyframe>> JointAnimations;
|
||||||
std::vector<Keyframe> Keyframes;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct AnimationData
|
||||||
|
{
|
||||||
|
const Animation* animation;
|
||||||
|
float time;
|
||||||
|
float weight;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct JointFrameTransform {
|
||||||
|
glm::vec3 PositionInterp = glm::vec3(0);
|
||||||
|
glm::quat RotationInterp = glm::quat();
|
||||||
|
glm::vec3 ScaleInterp = glm::vec3(0);
|
||||||
|
float Weight;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct AnimationOffset {
|
||||||
|
const Animation* animation;
|
||||||
|
float time;
|
||||||
|
};
|
||||||
|
|
||||||
Skeleton() { }
|
Skeleton() { }
|
||||||
~Skeleton();
|
~Skeleton();
|
||||||
|
|
||||||
@@ -82,17 +100,50 @@ public:
|
|||||||
|
|
||||||
int GetBoneID(std::string name);
|
int GetBoneID(std::string name);
|
||||||
|
|
||||||
const Animation* GetAnimation(std::string name);
|
void CalculateFrameBones(std::vector<AnimationData> animations, AnimationOffset animationOffset, bool noRootMotion = false);
|
||||||
std::vector<glm::mat4> GetFrameBones(const Animation& animation, double time, bool noRootMotion = false);
|
void CalculateFrameBones(std::vector<AnimationData> animations, bool noRootMotion = false);
|
||||||
void AccumulateBoneTransforms(bool noRootMotion, const Animation::Keyframe& currentFrame, const Animation::Keyframe& nextFrame, float progress, std::map<int, glm::mat4>& boneMatrices, const Bone* bone, glm::mat4 parentMatrix);
|
|
||||||
void PrintSkeleton();
|
const Animation* GetAnimation(std::string name);
|
||||||
|
|
||||||
|
void AccumulateBoneTransforms(bool noRootMotion, std::vector<AnimationData> animations, const Bone* bone, glm::mat4 parentMatrix);
|
||||||
|
void AccumulateBoneTransforms(bool noRootMotion, std::vector<AnimationData> animations, AnimationOffset animationOffset, const Bone* bone, glm::mat4 parentMatrix);
|
||||||
|
|
||||||
|
void PrintSkeleton();
|
||||||
void PrintSkeleton(const Bone* parent, int depthCount);
|
void PrintSkeleton(const Bone* parent, int depthCount);
|
||||||
std::map<std::string, Animation> Animations;
|
std::map<std::string, Animation> Animations;
|
||||||
|
|
||||||
private:
|
glm::mat4 GetBoneTransform(const Bone* bone, const Animation* animation, float time, glm::mat4 childMatrix);
|
||||||
std::map<std::string, Bone*> m_BonesByName;
|
int GetKeyframe(const Animation& animation, double time);
|
||||||
|
|
||||||
int GetKeyframe(const Animation& animation, double time);
|
|
||||||
|
std::vector<glm::mat4> GetBones()
|
||||||
|
{
|
||||||
|
std::vector<glm::mat4> finalMatrices;
|
||||||
|
for (auto &kv : m_BoneLocalTransforms) {
|
||||||
|
finalMatrices.push_back(kv.second);
|
||||||
|
}
|
||||||
|
return finalMatrices;;
|
||||||
|
}
|
||||||
|
|
||||||
|
glm::mat4 GetBoneTransformSuper(int boneID)
|
||||||
|
{
|
||||||
|
if(m_BoneTransforms.find(boneID) != m_BoneTransforms.end()) {
|
||||||
|
return m_BoneTransforms.at(boneID);
|
||||||
|
} else {
|
||||||
|
return glm::mat4(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
|
||||||
|
glm::mat4 GetOffsetTransform(const Bone* bone, AnimationOffset animationOffset);
|
||||||
|
|
||||||
|
std::map<std::string, Bone*> m_BonesByName;
|
||||||
|
float aim = 0.f;
|
||||||
|
|
||||||
|
|
||||||
|
std::map<int, glm::mat4> m_BoneLocalTransforms;
|
||||||
|
std::map<int, glm::mat4> m_BoneTransforms;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -0,0 +1,18 @@
|
|||||||
|
#ifndef Events_PlayQueueOnEntity_h__
|
||||||
|
#define Events_PlayQueueOnEntity_h__
|
||||||
|
|
||||||
|
#include "../Core/Event.h"
|
||||||
|
#include "../Core/EntityWrapper.h"
|
||||||
|
|
||||||
|
namespace Events
|
||||||
|
{
|
||||||
|
|
||||||
|
struct PlayQueueOnEntity : public Event
|
||||||
|
{
|
||||||
|
EntityWrapper Emitter;
|
||||||
|
std::vector<std::string> FilePaths;
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
@@ -1,6 +1,9 @@
|
|||||||
#ifndef Sound_h__
|
#ifndef Sound_h__
|
||||||
#define Sound_h__
|
#define Sound_h__
|
||||||
|
|
||||||
|
#include <OpenAL/al.h>
|
||||||
|
#include <OpenAL/alc.h>
|
||||||
|
|
||||||
#include "Core/ResourceManager.h"
|
#include "Core/ResourceManager.h"
|
||||||
|
|
||||||
class Sound : public Resource
|
class Sound : public Resource
|
||||||
|
|||||||
@@ -1,17 +1,23 @@
|
|||||||
#ifndef SoundSystem_h__
|
#ifndef SoundManager_h__
|
||||||
#define SoundSystem_h__
|
#define SoundManager_h__
|
||||||
|
|
||||||
#include <unordered_map>
|
#include <unordered_map>
|
||||||
|
#include <random>
|
||||||
|
|
||||||
#include "glm/common.hpp"
|
#include "glm/common.hpp"
|
||||||
#include "glm/gtx/rotate_vector.hpp" // Calculate Up vector
|
#include "glm/gtx/rotate_vector.hpp" // Calculate Up vector
|
||||||
#include "OpenAL/al.h"
|
#include "OpenAL/al.h"
|
||||||
#include "OpenAL/alc.h"
|
#include "OpenAL/alc.h"
|
||||||
|
|
||||||
|
#include "imgui/imgui.h"
|
||||||
|
|
||||||
#include "Core/World.h"
|
#include "Core/World.h"
|
||||||
#include "Core/EventBroker.h"
|
#include "Core/EventBroker.h"
|
||||||
|
#include "../Engine/Core/ResourceManager.h"
|
||||||
|
#include "../Engine/Core/ConfigFile.h"
|
||||||
#include "Core/Transform.h" // Absolute transform
|
#include "Core/Transform.h" // Absolute transform
|
||||||
#include "Sound/Sound.h"
|
#include "Sound/Sound.h"
|
||||||
|
#include "../Engine/Sound/EPlayQueueOnEntity.h"
|
||||||
#include "Sound/EPlaySoundOnEntity.h"
|
#include "Sound/EPlaySoundOnEntity.h"
|
||||||
#include "Sound/EPlaySoundOnPosition.h"
|
#include "Sound/EPlaySoundOnPosition.h"
|
||||||
#include "Sound/EPlayBackgroundMusic.h"
|
#include "Sound/EPlayBackgroundMusic.h"
|
||||||
@@ -20,6 +26,11 @@
|
|||||||
#include "Sound/EStopSound.h"
|
#include "Sound/EStopSound.h"
|
||||||
#include "Sound/ESetBGMGain.h"
|
#include "Sound/ESetBGMGain.h"
|
||||||
#include "Sound/ESetSFXGain.h"
|
#include "Sound/ESetSFXGain.h"
|
||||||
|
#include "Core/EPause.h"
|
||||||
|
#include "Core/EComponentAttached.h"
|
||||||
|
#include "../Core/EPlayerSpawned.h"
|
||||||
|
|
||||||
|
typedef std::pair<ALuint, std::vector<ALuint>> QueuedBuffers;
|
||||||
|
|
||||||
enum class SoundType {
|
enum class SoundType {
|
||||||
SFX,
|
SFX,
|
||||||
@@ -34,14 +45,15 @@ struct Source
|
|||||||
SoundType Type;
|
SoundType Type;
|
||||||
};
|
};
|
||||||
|
|
||||||
class SoundSystem
|
class SoundManager
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
SoundSystem() { }
|
SoundManager() { }
|
||||||
SoundSystem(World* world, EventBroker* eventBroker, bool editorMode);
|
SoundManager(World* world, EventBroker* eventBroker);
|
||||||
~SoundSystem();
|
~SoundManager();
|
||||||
// Update emitters / listener
|
// Update emitters / listener
|
||||||
void Update(double dt);
|
void Update(double dt);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
// Help functions for working with OpenaAL
|
// Help functions for working with OpenaAL
|
||||||
void setListenerPos(glm::vec3 pos) { alListener3f(AL_POSITION, pos.x, pos.y, pos.z); };
|
void setListenerPos(glm::vec3 pos) { alListener3f(AL_POSITION, pos.x, pos.y, pos.z); };
|
||||||
@@ -56,46 +68,62 @@ private:
|
|||||||
// Logic
|
// Logic
|
||||||
void initOpenAL();
|
void initOpenAL();
|
||||||
void updateEmitters(double dt);
|
void updateEmitters(double dt);
|
||||||
void updateListener(double dt);
|
|
||||||
void deleteInactiveEmitters();
|
void deleteInactiveEmitters();
|
||||||
void addNewEmitters(double dt);
|
|
||||||
Source* createSource(std::string filePath);
|
|
||||||
void playSound(Source* source);
|
|
||||||
void stopSound(Source* source);
|
|
||||||
void stopEmitters();
|
void stopEmitters();
|
||||||
|
void updateListener(double dt);
|
||||||
ALenum getSourceState(ALuint source);
|
ALenum getSourceState(ALuint source);
|
||||||
void setGain(Source* source, float gain);
|
void setGain(Source* source, float gain);
|
||||||
void setSoundProperties(ALuint source, ComponentWrapper* soundComponent);
|
void setSoundProperties(Source* source, ComponentWrapper* soundComponent);
|
||||||
|
|
||||||
|
// Specific logic
|
||||||
|
void playSound(Source* source);
|
||||||
|
// Need to be the same format (sample rate etc)
|
||||||
|
void playQueue(QueuedBuffers qb);
|
||||||
|
void stopSound(Source* source);
|
||||||
|
Source* createSource(std::string filePath);
|
||||||
|
std::unordered_map<EntityID, Source*> m_Sources;
|
||||||
|
|
||||||
|
// Logic
|
||||||
|
World* m_World = nullptr;
|
||||||
|
EventBroker* m_EventBroker = nullptr;
|
||||||
|
|
||||||
// OpenAL system variables
|
// OpenAL system variables
|
||||||
ALCdevice* m_ALCdevice = nullptr;
|
ALCdevice* m_ALCdevice = nullptr;
|
||||||
ALCcontext* m_ALCcontext = nullptr;
|
ALCcontext* m_ALCcontext = nullptr;
|
||||||
|
|
||||||
// Logic
|
|
||||||
World* m_World = nullptr;
|
|
||||||
EventBroker* m_EventBroker = nullptr;
|
|
||||||
std::unordered_map<EntityID, Source*> m_Sources;
|
|
||||||
float m_BGMVolumeChannel = 1.0f;
|
float m_BGMVolumeChannel = 1.0f;
|
||||||
float m_SFXVolumeChannel = 1.f;
|
float m_SFXVolumeChannel = 1.0f;
|
||||||
bool m_EditorEnabled = false;
|
EntityWrapper m_LocalPlayer = EntityWrapper();
|
||||||
|
|
||||||
// Events
|
// Events
|
||||||
EventRelay<SoundSystem, Events::PlaySoundOnEntity> m_EPlaySoundOnEntity;
|
EventRelay<SoundManager, Events::PlaySoundOnEntity> m_EPlaySoundOnEntity;
|
||||||
bool OnPlaySoundOnEntity(const Events::PlaySoundOnEntity &e);
|
bool OnPlaySoundOnEntity(const Events::PlaySoundOnEntity &e);
|
||||||
EventRelay<SoundSystem, Events::PlaySoundOnPosition> m_EPlaySoundOnPosition;
|
EventRelay<SoundManager, Events::PlaySoundOnPosition> m_EPlaySoundOnPosition;
|
||||||
bool OnPlaySoundOnPosition(const Events::PlaySoundOnPosition &e);
|
bool OnPlaySoundOnPosition(const Events::PlaySoundOnPosition &e);
|
||||||
EventRelay<SoundSystem, Events::PlayBackgroundMusic> m_EPlayBackgroundMusic;
|
EventRelay<SoundManager, Events::PlayBackgroundMusic> m_EPlayBackgroundMusic;
|
||||||
bool OnPlayBackgroundMusic(const Events::PlayBackgroundMusic &e);
|
bool OnPlayBackgroundMusic(const Events::PlayBackgroundMusic &e);
|
||||||
EventRelay<SoundSystem, Events::PauseSound> m_EPauseSound;
|
EventRelay<SoundManager, Events::PauseSound> m_EPauseSound;
|
||||||
bool OnPauseSound(const Events::PauseSound &e);
|
bool OnPauseSound(const Events::PauseSound &e);
|
||||||
EventRelay<SoundSystem, Events::StopSound> m_EStopSound;
|
EventRelay<SoundManager, Events::StopSound> m_EStopSound;
|
||||||
bool OnStopSound(const Events::StopSound &e);
|
bool OnStopSound(const Events::StopSound &e);
|
||||||
EventRelay<SoundSystem, Events::ContinueSound> m_EContinueSound;
|
EventRelay<SoundManager, Events::ContinueSound> m_EContinueSound;
|
||||||
bool OnContinueSound(const Events::ContinueSound &e);
|
bool OnContinueSound(const Events::ContinueSound &e);
|
||||||
EventRelay<SoundSystem, Events::SetBGMGain> m_ESetBGMGain;
|
EventRelay<SoundManager, Events::SetBGMGain> m_ESetBGMGain;
|
||||||
bool OnSetBGMGain(const Events::SetBGMGain &e); // Not tested
|
bool OnSetBGMGain(const Events::SetBGMGain &e);
|
||||||
EventRelay<SoundSystem, Events::SetSFXGain> m_ESetSFXGain;
|
EventRelay<SoundManager, Events::SetSFXGain> m_ESetSFXGain;
|
||||||
bool OnSetSFXGain(const Events::SetSFXGain &e); // Not tested
|
bool OnSetSFXGain(const Events::SetSFXGain &e);
|
||||||
|
EventRelay<SoundManager, Events::ComponentAttached> m_EComponentAttached;
|
||||||
|
bool OnComponentAttached(const Events::ComponentAttached &e);
|
||||||
|
EventRelay<SoundManager, Events::Pause> m_EPause;
|
||||||
|
bool OnPause(const Events::Pause &e);
|
||||||
|
EventRelay<SoundManager, Events::Resume> m_EResume;
|
||||||
|
bool OnResume(const Events::Resume &e);
|
||||||
|
EventRelay<SoundManager, Events::PlayerSpawned> m_EPlayerSpawned;
|
||||||
|
bool OnPlayerSpawned(const Events::PlayerSpawned &e);
|
||||||
|
EventRelay<SoundManager, Events::PlayQueueOnEntity> m_EPlayQueueOnEntity;
|
||||||
|
bool OnPlayQueueOnEntity(const Events::PlayQueueOnEntity &e);
|
||||||
|
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
#ifndef Events_DashAbility_h__
|
||||||
|
#define Events_DashAbility_h__
|
||||||
|
|
||||||
|
#include "Core/Event.h"
|
||||||
|
|
||||||
|
namespace Events
|
||||||
|
{
|
||||||
|
|
||||||
|
struct DashAbility : public Event { };
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
#ifndef Events_DoubleJump_h__
|
||||||
|
#define Events_DoubleJump_h__
|
||||||
|
|
||||||
|
#include "Core/Event.h"
|
||||||
|
|
||||||
|
namespace Events
|
||||||
|
{
|
||||||
|
|
||||||
|
struct DoubleJump : public Event
|
||||||
|
{
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
@@ -1,24 +0,0 @@
|
|||||||
#include "Common.h"
|
|
||||||
#include "Core/System.h"
|
|
||||||
|
|
||||||
class ExplosionEffectSystem : public PureSystem
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
ExplosionEffectSystem(World* world, EventBroker* eventBroker)
|
|
||||||
: System(world, eventBroker)
|
|
||||||
, PureSystem("ExplosionEffect")
|
|
||||||
{ }
|
|
||||||
|
|
||||||
virtual void UpdateComponent(EntityWrapper& entity, ComponentWrapper& component, double dt) override
|
|
||||||
{
|
|
||||||
|
|
||||||
if ((double)component["TimeSinceDeath"] > (double)component["ExplosionDuration"]) {
|
|
||||||
(double)component["TimeSinceDeath"] = 0.f;
|
|
||||||
}
|
|
||||||
(double&)component["TimeSinceDeath"] += dt;
|
|
||||||
|
|
||||||
//if ((bool)Component["Gravity"] == true) {
|
|
||||||
// (bool)Component["ExponentialAccelaration"] = false;
|
|
||||||
//}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
+15
-19
@@ -1,6 +1,8 @@
|
|||||||
#ifndef Game_h__
|
#ifndef Game_h__
|
||||||
#define Game_h__
|
#define Game_h__
|
||||||
|
|
||||||
|
#include <boost/program_options.hpp>
|
||||||
|
|
||||||
#include "Core/ResourceManager.h"
|
#include "Core/ResourceManager.h"
|
||||||
#include "Core/ConfigFile.h"
|
#include "Core/ConfigFile.h"
|
||||||
#include "Core/EventBroker.h"
|
#include "Core/EventBroker.h"
|
||||||
@@ -14,7 +16,7 @@
|
|||||||
#include "Core/EKeyDown.h"
|
#include "Core/EKeyDown.h"
|
||||||
#include "Core/EntityFilePreprocessor.h"
|
#include "Core/EntityFilePreprocessor.h"
|
||||||
#include "Core/SystemPipeline.h"
|
#include "Core/SystemPipeline.h"
|
||||||
#include "ExplosionEffectSystem.h"
|
#include "Systems/ExplosionEffectSystem.h"
|
||||||
#include "Editor/EditorSystem.h"
|
#include "Editor/EditorSystem.h"
|
||||||
#include "Core/EntityFile.h"
|
#include "Core/EntityFile.h"
|
||||||
#include "Rendering/RenderSystem.h"
|
#include "Rendering/RenderSystem.h"
|
||||||
@@ -30,7 +32,8 @@
|
|||||||
#include "Network/Client.h"
|
#include "Network/Client.h"
|
||||||
|
|
||||||
// Sound
|
// Sound
|
||||||
#include "Sound/SoundSystem.h"
|
#include "Sound/SoundManager.h"
|
||||||
|
#include "Systems/SoundSystem.h"
|
||||||
|
|
||||||
class Game
|
class Game
|
||||||
{
|
{
|
||||||
@@ -42,7 +45,9 @@ public:
|
|||||||
void Tick();
|
void Tick();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
double m_LastTime;
|
std::string m_NetworkAddress;
|
||||||
|
int m_NetworkPort = 0;
|
||||||
|
|
||||||
ConfigFile* m_Config = nullptr;
|
ConfigFile* m_Config = nullptr;
|
||||||
EventBroker* m_EventBroker;
|
EventBroker* m_EventBroker;
|
||||||
IRenderer* m_Renderer;
|
IRenderer* m_Renderer;
|
||||||
@@ -55,24 +60,15 @@ private:
|
|||||||
Octree<EntityAABB>* m_OctreeFrustrumCulling;
|
Octree<EntityAABB>* m_OctreeFrustrumCulling;
|
||||||
SystemPipeline* m_SystemPipeline;
|
SystemPipeline* m_SystemPipeline;
|
||||||
RenderFrame* m_RenderFrame;
|
RenderFrame* m_RenderFrame;
|
||||||
// Network variables
|
Client* m_NetworkClient = nullptr;
|
||||||
boost::thread m_NetworkThread;
|
Server* m_NetworkServer = nullptr;
|
||||||
|
SoundManager* m_SoundManager;
|
||||||
|
double m_LastTime;
|
||||||
|
|
||||||
// Network methods
|
bool m_IsClient = false;
|
||||||
void networkFunction();
|
bool m_IsServer = false;
|
||||||
Network* m_ClientOrServer;
|
|
||||||
bool m_IsClientOrServer = false;
|
|
||||||
|
|
||||||
// Sound
|
|
||||||
SoundSystem* m_SoundSystem;
|
|
||||||
|
|
||||||
//EventRelay<Game, Events::InputCommand> m_EInputCommand;
|
|
||||||
//bool debugOnInputCommand(const Events::InputCommand& e);
|
|
||||||
|
|
||||||
void debugInitialize();
|
|
||||||
void debugTick(double dt);
|
|
||||||
EventRelay<Client, Events::KeyDown> m_EKeyDown;
|
|
||||||
|
|
||||||
|
int parseArgs(int argc, char* argv[]);
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -0,0 +1,25 @@
|
|||||||
|
#ifndef MultiplayerSnapshotFilter_h__
|
||||||
|
#define MultiplayerSnapshotFilter_h__
|
||||||
|
|
||||||
|
#include "Core/EventBroker.h"
|
||||||
|
#include "Core/EPlayerSpawned.h"
|
||||||
|
#include "Network/SnapshotFilter.h"
|
||||||
|
#include "Network/EInterpolate.h"
|
||||||
|
|
||||||
|
class MultiplayerSnapshotFilter : public SnapshotFilter
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
MultiplayerSnapshotFilter(EventBroker* eventBroker);
|
||||||
|
|
||||||
|
virtual bool FilterComponent(EntityWrapper entity, SharedComponentWrapper& component) override;
|
||||||
|
|
||||||
|
private:
|
||||||
|
EventBroker* m_EventBroker;
|
||||||
|
|
||||||
|
EntityWrapper m_LocalPlayer = EntityWrapper::Invalid;
|
||||||
|
|
||||||
|
EventRelay<MultiplayerSnapshotFilter, Events::PlayerSpawned> m_EPlayerSpawned;
|
||||||
|
bool OnPlayerSpawned(Events::PlayerSpawned ePlayerSpawned);
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
||||||
@@ -17,7 +17,7 @@ class CapturePointSystem : public PureSystem
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
//WARNING: on new map, destroy all info in the vectors, as well as reset all variables (just make new?)
|
//WARNING: on new map, destroy all info in the vectors, as well as reset all variables (just make new?)
|
||||||
CapturePointSystem(World* world, EventBroker* eventBroker);
|
CapturePointSystem(SystemParams params);
|
||||||
|
|
||||||
//updatecomponent
|
//updatecomponent
|
||||||
virtual void UpdateComponent(EntityWrapper& entity, ComponentWrapper& capturePoint, double dt) override;
|
virtual void UpdateComponent(EntityWrapper& entity, ComponentWrapper& capturePoint, double dt) override;
|
||||||
|
|||||||
@@ -0,0 +1,18 @@
|
|||||||
|
#ifndef ExplosionEffectSystem_h__
|
||||||
|
#define ExplosionEffectSystem_h__
|
||||||
|
|
||||||
|
#include "Common.h"
|
||||||
|
#include "Core/System.h"
|
||||||
|
|
||||||
|
class ExplosionEffectSystem : public PureSystem
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
ExplosionEffectSystem(SystemParams params)
|
||||||
|
: System(params)
|
||||||
|
, PureSystem("ExplosionEffect")
|
||||||
|
{ }
|
||||||
|
|
||||||
|
virtual void UpdateComponent(EntityWrapper& entity, ComponentWrapper& component, double dt) override;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
||||||
@@ -17,7 +17,7 @@
|
|||||||
class HealthSystem : public PureSystem
|
class HealthSystem : public PureSystem
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
HealthSystem(World* world, EventBroker* eventBroker);
|
HealthSystem(SystemParams params);
|
||||||
|
|
||||||
//updatecomponent
|
//updatecomponent
|
||||||
virtual void UpdateComponent(EntityWrapper& entity, ComponentWrapper& component, double dt) override;
|
virtual void UpdateComponent(EntityWrapper& entity, ComponentWrapper& component, double dt) override;
|
||||||
|
|||||||
@@ -16,38 +16,47 @@
|
|||||||
|
|
||||||
#include "Network/EInterpolate.h"
|
#include "Network/EInterpolate.h"
|
||||||
|
|
||||||
class InterpolationSystem : public PureSystem
|
class InterpolationSystem : public ImpureSystem
|
||||||
{
|
{
|
||||||
struct Transform
|
|
||||||
{
|
|
||||||
glm::vec3 Position;
|
|
||||||
glm::vec3 Scale;
|
|
||||||
glm::quat Orientation;
|
|
||||||
float interpolationTime;
|
|
||||||
};
|
|
||||||
public:
|
public:
|
||||||
InterpolationSystem(World* world, EventBroker* eventBroker);
|
InterpolationSystem(SystemParams params);
|
||||||
~InterpolationSystem() { }
|
~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;
|
|
||||||
EntityWrapper m_LocalPlayer = EntityWrapper::Invalid;
|
|
||||||
|
|
||||||
//glm::vec3 vectorInterpolation(glm::vec3 prev, glm::vec3 next, double currentTime);
|
virtual void Update(double dt) override;
|
||||||
|
|
||||||
|
private:
|
||||||
|
template <typename T>
|
||||||
|
struct Interpolation
|
||||||
|
{
|
||||||
|
Interpolation(const ComponentWrapper& Component, const std::string& Field, const T& Start, const T& Goal)
|
||||||
|
: Component(Component)
|
||||||
|
, Field(Field)
|
||||||
|
, Start(Start)
|
||||||
|
, Goal(Goal)
|
||||||
|
{ }
|
||||||
|
|
||||||
|
ComponentWrapper Component;
|
||||||
|
std::string Field;
|
||||||
|
T Start;
|
||||||
|
T Goal;
|
||||||
|
double Alpha = 0.0;
|
||||||
|
};
|
||||||
|
|
||||||
|
float m_SnapshotInterval;
|
||||||
|
std::unordered_map<EntityWrapper, Interpolation<glm::vec3>> m_InterpolatePosition;
|
||||||
|
std::unordered_map<EntityWrapper, Interpolation<glm::quat>> m_InterpolateOrientation;
|
||||||
|
std::unordered_map<EntityWrapper, Interpolation<glm::vec3>> m_InterpolateVelocity;
|
||||||
|
|
||||||
|
EventRelay<InterpolationSystem, Events::Interpolate> m_EInterpolate;
|
||||||
|
bool InterpolationSystem::OnInterpolate(Events::Interpolate& e);
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
T vectorInterpolation(T prev, T next, double currentTime)
|
T vectorInterpolation(T prev, T next, double currentTime)
|
||||||
{
|
{
|
||||||
T difference = next - prev;
|
T difference = next - prev;
|
||||||
T vector = (difference / m_SnapshotInterval) * static_cast<float>(currentTime);
|
T vector = difference * (static_cast<float>(currentTime) / m_SnapshotInterval);
|
||||||
return vector;
|
return vector;
|
||||||
}
|
}
|
||||||
float m_SnapshotInterval;
|
|
||||||
|
|
||||||
EventRelay<InterpolationSystem, Events::Interpolate> m_EInterpolate;
|
|
||||||
bool InterpolationSystem::OnInterpolate(const Events::Interpolate& e);
|
|
||||||
EventRelay<InterpolationSystem, Events::PlayerSpawned> m_EPlayerSpawned;
|
|
||||||
bool OnPlayerSpawned(Events::PlayerSpawned& e);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -6,10 +6,12 @@
|
|||||||
class LifetimeSystem : public ImpureSystem, PureSystem
|
class LifetimeSystem : public ImpureSystem, PureSystem
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
LifetimeSystem(World* world, EventBroker* eventBroker)
|
LifetimeSystem(SystemParams params)
|
||||||
: System(world, eventBroker)
|
: System(params)
|
||||||
, PureSystem("Lifetime")
|
, PureSystem("Lifetime")
|
||||||
{ }
|
{
|
||||||
|
LOG_INFO("ASDASDASSA");
|
||||||
|
}
|
||||||
|
|
||||||
virtual void Update(double dt) override;
|
virtual void Update(double dt) override;
|
||||||
virtual void UpdateComponent(EntityWrapper& entity, ComponentWrapper& cLifetime, double dt) override;
|
virtual void UpdateComponent(EntityWrapper& entity, ComponentWrapper& cLifetime, double dt) override;
|
||||||
|
|||||||
@@ -14,7 +14,7 @@
|
|||||||
class PickupSpawnSystem : public ImpureSystem
|
class PickupSpawnSystem : public ImpureSystem
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
PickupSpawnSystem(World* world, EventBroker* eventBroker);
|
PickupSpawnSystem(SystemParams params);
|
||||||
|
|
||||||
virtual void Update(double dt) override;
|
virtual void Update(double dt) override;
|
||||||
|
|
||||||
|
|||||||
@@ -15,7 +15,7 @@
|
|||||||
class PlayerDeathSystem : public ImpureSystem
|
class PlayerDeathSystem : public ImpureSystem
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
PlayerDeathSystem(World* world, EventBroker* eventBroker);
|
PlayerDeathSystem(SystemParams params);
|
||||||
|
|
||||||
virtual void Update(double dt) override;
|
virtual void Update(double dt) override;
|
||||||
|
|
||||||
|
|||||||
@@ -6,18 +6,14 @@
|
|||||||
#include "../../Engine/Rendering/ESetCamera.h"
|
#include "../../Engine/Rendering/ESetCamera.h"
|
||||||
#include <imgui/imgui.h>
|
#include <imgui/imgui.h>
|
||||||
|
|
||||||
class PlayerHUD : public ImpureSystem
|
class PlayerHUDSystem : public ImpureSystem
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
PlayerHUD(World* world, EventBroker* eventBrokerer);
|
PlayerHUDSystem(SystemParams params)
|
||||||
~PlayerHUD();
|
: System(params)
|
||||||
|
{ }
|
||||||
|
|
||||||
virtual void Update(double dt) override;
|
virtual void Update(double dt) override;
|
||||||
|
|
||||||
private:
|
|
||||||
World* m_World;
|
|
||||||
EventBroker* m_EventBroker;
|
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
@@ -4,21 +4,40 @@
|
|||||||
#include "Core/EPlayerSpawned.h"
|
#include "Core/EPlayerSpawned.h"
|
||||||
#include "Input/FirstPersonInputController.h"
|
#include "Input/FirstPersonInputController.h"
|
||||||
#include <imgui/imgui.h>
|
#include <imgui/imgui.h>
|
||||||
|
#include "Events/EDoubleJump.h"
|
||||||
|
#include "../Engine/Sound/EPlaySoundOnEntity.h"
|
||||||
|
|
||||||
class PlayerMovementSystem : public ImpureSystem, PureSystem
|
#include "Core/EntityFile.h"
|
||||||
|
#include "Core/EntityFileParser.h"
|
||||||
|
|
||||||
|
class PlayerMovementSystem : public ImpureSystem
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
PlayerMovementSystem(World* world, EventBroker* eventBroker);
|
PlayerMovementSystem(SystemParams params);
|
||||||
~PlayerMovementSystem();
|
~PlayerMovementSystem();
|
||||||
|
|
||||||
virtual void Update(double dt) override;
|
virtual void Update(double dt) override;
|
||||||
virtual void UpdateComponent(EntityWrapper& entity, ComponentWrapper& component, double dt);
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
// State
|
// State
|
||||||
std::unordered_map<EntityWrapper, FirstPersonInputController<PlayerMovementSystem>*> m_PlayerInputControllers;
|
std::unordered_map<EntityWrapper, FirstPersonInputController<PlayerMovementSystem>*> m_PlayerInputControllers;
|
||||||
|
|
||||||
|
EntityWrapper m_LocalPlayer = EntityWrapper::Invalid;
|
||||||
|
// Walking logic
|
||||||
|
// Keeps track of how far the player has walked within this "key press session".
|
||||||
|
float m_DistanceMoved = 0.0f;
|
||||||
|
// How far a step is (How often the step sound will be played).
|
||||||
|
const float m_PlayerStepLength = 1.75f;
|
||||||
|
// Determine what sound file to play.
|
||||||
|
bool m_LeftFoot = false;
|
||||||
|
// To get a difference when calculating the walking state.
|
||||||
|
glm::vec3 m_LastPosition = glm::vec3();
|
||||||
|
// The logic for making the sound play when player is moving
|
||||||
|
void playerStep(double dt);
|
||||||
|
|
||||||
EventRelay<PlayerMovementSystem, Events::PlayerSpawned> m_EPlayerSpawned;
|
EventRelay<PlayerMovementSystem, Events::PlayerSpawned> m_EPlayerSpawned;
|
||||||
bool OnPlayerSpawned(Events::PlayerSpawned& e);
|
bool OnPlayerSpawned(Events::PlayerSpawned& e);
|
||||||
|
|
||||||
|
void updateMovementControllers(double dt);
|
||||||
|
void updateVelocity(double dt);
|
||||||
};
|
};
|
||||||
@@ -10,7 +10,7 @@
|
|||||||
class PlayerSpawnSystem : public ImpureSystem
|
class PlayerSpawnSystem : public ImpureSystem
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
PlayerSpawnSystem(World* world, EventBroker* eventBroker);
|
PlayerSpawnSystem(SystemParams params);
|
||||||
|
|
||||||
virtual void Update(double dt) override;
|
virtual void Update(double dt) override;
|
||||||
|
|
||||||
|
|||||||
@@ -4,8 +4,8 @@
|
|||||||
class RaptorCopterSystem : public PureSystem
|
class RaptorCopterSystem : public PureSystem
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
RaptorCopterSystem(World* world, EventBroker* eventBroker)
|
RaptorCopterSystem(SystemParams params)
|
||||||
: System(world, eventBroker)
|
: System(params)
|
||||||
, PureSystem("RaptorCopter")
|
, PureSystem("RaptorCopter")
|
||||||
{ }
|
{ }
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,65 @@
|
|||||||
|
#ifndef Systems_SoundSystem_h__
|
||||||
|
#define Systems_SoundSystem_h__
|
||||||
|
|
||||||
|
#include <random>
|
||||||
|
|
||||||
|
#include "../Engine/Core/System.h"
|
||||||
|
#include "../Engine/Core/ResourceManager.h"
|
||||||
|
#include "../Engine/Core/ConfigFile.h"
|
||||||
|
#include "../Engine/Sound/Sound.h"
|
||||||
|
#include "../Engine/Sound/EPlayQueueOnEntity.h"
|
||||||
|
#include "../Engine/Core/EPlayerSpawned.h"
|
||||||
|
#include "../Engine/Input/EInputCommand.h"
|
||||||
|
#include "../Engine/Core/EShoot.h"
|
||||||
|
#include "../Engine/Core/EPlayerSpawned.h"
|
||||||
|
#include "../Engine/Input/EInputCommand.h"
|
||||||
|
#include "../Engine/Core/ECaptured.h"
|
||||||
|
#include "../Engine/Core/EPlayerDamage.h"
|
||||||
|
#include "../Engine/Core/EPlayerDeath.h"
|
||||||
|
#include "../Engine/Core/EPlayerHealthPickup.h"
|
||||||
|
#include "../Engine/Collision/ETrigger.h"
|
||||||
|
#include "../Engine/Sound/EPlaySoundOnEntity.h"
|
||||||
|
#include "../Engine/Sound/EPlayBackgroundMusic.h"
|
||||||
|
#include "../Game/Events/EDoubleJump.h"
|
||||||
|
#include "../Game/Events/EDashAbility.h"
|
||||||
|
|
||||||
|
|
||||||
|
class SoundSystem : public PureSystem, ImpureSystem
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
SoundSystem(SystemParams params);
|
||||||
|
virtual void UpdateComponent(EntityWrapper& entity, ComponentWrapper& cComponent, double dt) override;
|
||||||
|
virtual void Update(double dt) override;
|
||||||
|
private:
|
||||||
|
std::string m_Announcer = "";
|
||||||
|
// Logic for playing a sound when a player jumps
|
||||||
|
void playerJumps();
|
||||||
|
|
||||||
|
// Temporary solution for play test.
|
||||||
|
bool m_DrumsIsPlaying = false;
|
||||||
|
double m_DrumTimer = 0.0;
|
||||||
|
bool drumTimer(double dt);
|
||||||
|
|
||||||
|
std::default_random_engine generator;
|
||||||
|
|
||||||
|
EventRelay<SoundSystem, Events::PlayerSpawned> m_EPlayerSpawned;
|
||||||
|
bool OnPlayerSpawned(const Events::PlayerSpawned &e);
|
||||||
|
EventRelay<SoundSystem, Events::InputCommand> m_InputCommand;
|
||||||
|
bool OnInputCommand(const Events::InputCommand &e);
|
||||||
|
EventRelay<SoundSystem, Events::DoubleJump> m_EDoubleJump;
|
||||||
|
bool OnDoubleJump(const Events::DoubleJump &e);
|
||||||
|
EventRelay<SoundSystem, Events::DashAbility> m_EDashAbility;
|
||||||
|
bool OnDashAbility(const Events::DashAbility &e);
|
||||||
|
EventRelay<SoundSystem, Events::TriggerTouch> m_ETriggerTouch;
|
||||||
|
bool OnTriggerTouch(const Events::TriggerTouch &e);
|
||||||
|
EventRelay<SoundSystem, Events::Captured> m_ECaptured;
|
||||||
|
bool OnCaptured(const Events::Captured &e);
|
||||||
|
EventRelay<SoundSystem, Events::PlayerDamage> m_EPlayerDamage;
|
||||||
|
bool OnPlayerDamage(const Events::PlayerDamage &e);
|
||||||
|
EventRelay<SoundSystem, Events::PlayerDeath> m_EPlayerDeath;
|
||||||
|
bool OnPlayerDeath(const Events::PlayerDeath &e);
|
||||||
|
EventRelay<SoundSystem, Events::PlayerHealthPickup> m_EPlayerHealthPickup;
|
||||||
|
bool OnPlayerHealthPickup(const Events::PlayerHealthPickup &e);
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
||||||
@@ -13,7 +13,7 @@
|
|||||||
class SpawnerSystem : public System
|
class SpawnerSystem : public System
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
SpawnerSystem(World* world, EventBroker* eventBroker);
|
SpawnerSystem(SystemParams params);
|
||||||
|
|
||||||
static EntityWrapper Spawn(EntityWrapper spawner, EntityWrapper parent = EntityWrapper::Invalid);
|
static EntityWrapper Spawn(EntityWrapper spawner, EntityWrapper parent = EntityWrapper::Invalid);
|
||||||
|
|
||||||
|
|||||||
@@ -13,31 +13,180 @@
|
|||||||
#include "Input/EInputCommand.h"
|
#include "Input/EInputCommand.h"
|
||||||
#include "Core/EntityFile.h"
|
#include "Core/EntityFile.h"
|
||||||
#include "Core/EntityFileParser.h"
|
#include "Core/EntityFileParser.h"
|
||||||
|
#include "Core/Octree.h"
|
||||||
|
#include "Collision/EntityAABB.h"
|
||||||
|
#include "Systems/SpawnerSystem.h"
|
||||||
|
#include "Sound/EPlaySoundOnEntity.h"
|
||||||
|
|
||||||
#include <tuple>
|
class WeaponBehaviour;
|
||||||
#include <vector>
|
|
||||||
|
|
||||||
|
class WeaponSystem : public PureSystem, ImpureSystem
|
||||||
class WeaponSystem : public ImpureSystem
|
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
WeaponSystem(World* world, EventBroker* eventBroker, IRenderer* renderer);
|
WeaponSystem(SystemParams params, IRenderer* renderer, Octree<EntityAABB>* collisionOctree);
|
||||||
|
|
||||||
virtual void Update(double dt) override;
|
virtual void Update(double dt) override;
|
||||||
|
virtual void UpdateComponent(EntityWrapper& entity, ComponentWrapper& cPlayer, double dt) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
SystemParams m_SystemParams;
|
||||||
IRenderer* m_Renderer;
|
IRenderer* m_Renderer;
|
||||||
|
Octree<EntityAABB>* m_CollisionOctree;
|
||||||
|
|
||||||
// State
|
std::unordered_map<EntityWrapper, std::shared_ptr<WeaponBehaviour>> m_ActiveWeapons;
|
||||||
EntityWrapper m_LocalPlayer = EntityWrapper::Invalid;
|
|
||||||
|
|
||||||
// Events
|
// Events
|
||||||
EventRelay<WeaponSystem, Events::PlayerSpawned> m_EPlayerSpawned;
|
EventRelay<WeaponSystem, Events::PlayerSpawned> m_EPlayerSpawned;
|
||||||
bool WeaponSystem::OnPlayerSpawned(const Events::PlayerSpawned& e);
|
bool OnPlayerSpawned(Events::PlayerSpawned& e);
|
||||||
EventRelay<WeaponSystem, Events::Shoot> m_EShoot;
|
EventRelay<WeaponSystem, Events::Shoot> m_EShoot;
|
||||||
bool WeaponSystem::OnShoot(Events::Shoot& e);
|
bool OnShoot(Events::Shoot& e);
|
||||||
EventRelay<WeaponSystem, Events::InputCommand> m_EInputCommand;
|
EventRelay<WeaponSystem, Events::InputCommand> m_EInputCommand;
|
||||||
bool WeaponSystem::OnInputCommand(const Events::InputCommand& e);
|
bool OnInputCommand(Events::InputCommand& e);
|
||||||
|
|
||||||
|
void selectWeapon(EntityWrapper player, ComponentInfo::EnumType slot);
|
||||||
|
};
|
||||||
|
|
||||||
|
class WeaponBehaviour : public System
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
WeaponBehaviour(SystemParams systemParams, Octree<EntityAABB>* collisionOctree, EntityWrapper weaponEntity)
|
||||||
|
: System(systemParams)
|
||||||
|
, m_CollisionOctree(collisionOctree)
|
||||||
|
, m_Entity(weaponEntity)
|
||||||
|
{ }
|
||||||
|
virtual ~WeaponBehaviour() = default;
|
||||||
|
|
||||||
|
WeaponBehaviour(const WeaponBehaviour&) = delete;
|
||||||
|
WeaponBehaviour& operator=(const WeaponBehaviour &) = delete;
|
||||||
|
|
||||||
|
virtual void Fire() = 0;
|
||||||
|
virtual void CeaseFire() { }
|
||||||
|
virtual void Reload() { }
|
||||||
|
virtual void Update(double dt) { }
|
||||||
|
|
||||||
|
protected:
|
||||||
|
Octree<EntityAABB>* m_CollisionOctree;
|
||||||
|
EntityWrapper m_Entity;
|
||||||
|
};
|
||||||
|
|
||||||
|
class AssaultWeaponBehaviour : public WeaponBehaviour
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
AssaultWeaponBehaviour(SystemParams systemParams, Octree<EntityAABB>* collisionOctree, EntityWrapper weaponEntity)
|
||||||
|
: WeaponBehaviour(systemParams, collisionOctree, weaponEntity)
|
||||||
|
{ }
|
||||||
|
|
||||||
|
virtual void Fire() override
|
||||||
|
{
|
||||||
|
m_TimeSinceLastFire = 0.0;
|
||||||
|
m_Firing = true;
|
||||||
|
fireRound();
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual void CeaseFire() override
|
||||||
|
{
|
||||||
|
m_Firing = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual void Reload() override
|
||||||
|
{
|
||||||
|
ComponentWrapper& cAssaultWeapon = m_Entity["AssaultWeapon"];
|
||||||
|
|
||||||
|
int& magAmmo = cAssaultWeapon["MagazineAmmo"];
|
||||||
|
int magSize = cAssaultWeapon["MagazineSize"];
|
||||||
|
int& ammo = cAssaultWeapon["Ammo"];
|
||||||
|
|
||||||
|
// Don't reload if we're already fully loaded
|
||||||
|
if (magAmmo == magSize) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Throw away rounds in magazine to incentivise ammo sharing
|
||||||
|
int toLoad = glm::min(magSize, ammo);
|
||||||
|
magAmmo = toLoad;
|
||||||
|
ammo -= toLoad;
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual void Update(double dt) override
|
||||||
|
{
|
||||||
|
if (!m_Firing) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
m_TimeSinceLastFire += dt;
|
||||||
|
|
||||||
|
ComponentWrapper& cAssaultWeapon = m_Entity["AssaultWeapon"];
|
||||||
|
if (m_TimeSinceLastFire >= 1.0 / ((double)cAssaultWeapon["RPM"] / 60.0)) {
|
||||||
|
fireRound();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
bool m_Firing = false;
|
||||||
|
double m_TimeSinceLastFire = 0.0;
|
||||||
|
EntityFile* m_RayRed = nullptr;
|
||||||
|
EntityFile* m_RayBlue = nullptr;
|
||||||
|
|
||||||
|
void fireRound()
|
||||||
|
{
|
||||||
|
ComponentWrapper& cAssaultWeapon = m_Entity["AssaultWeapon"];
|
||||||
|
|
||||||
|
int& magAmmo = cAssaultWeapon["MagazineAmmo"];
|
||||||
|
int ammo = cAssaultWeapon["Ammo"];
|
||||||
|
|
||||||
|
// Reload if our magazine is empty
|
||||||
|
if (magAmmo <= 0) {
|
||||||
|
Reload();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Fire
|
||||||
|
magAmmo -= 1;
|
||||||
|
spawnTracer();
|
||||||
|
playSound();
|
||||||
|
|
||||||
|
m_TimeSinceLastFire = 0.0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void spawnTracer()
|
||||||
|
{
|
||||||
|
if (!IsClient) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
EntityWrapper spawner;
|
||||||
|
if (m_Entity == LocalPlayer) {
|
||||||
|
spawner = m_Entity.FirstChildByName("WeaponMuzzle");
|
||||||
|
} else {
|
||||||
|
spawner = m_Entity.FirstChildByName("ThirdPersonWeaponMuzzle");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!spawner.Valid()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
Events::SpawnerSpawn e;
|
||||||
|
e.Spawner = spawner;
|
||||||
|
m_EventBroker->Publish(e);
|
||||||
|
}
|
||||||
|
|
||||||
|
float traceRayDistance(glm::vec3 origin, glm::vec3 direction)
|
||||||
|
{
|
||||||
|
// TODO: Cast a ray and size tracer appropriately
|
||||||
|
return 100.f;
|
||||||
|
}
|
||||||
|
|
||||||
|
void playSound()
|
||||||
|
{
|
||||||
|
if (!IsClient) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
Events::PlaySoundOnEntity e;
|
||||||
|
e.EmitterID = m_Entity.ID;
|
||||||
|
e.FilePath = "Audio/laser/laser1.wav";
|
||||||
|
m_EventBroker->Publish(e);
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
@@ -29,3 +29,8 @@ TimeoutMs=15000
|
|||||||
|
|
||||||
[Multithreading]
|
[Multithreading]
|
||||||
ResourceLoading=true
|
ResourceLoading=true
|
||||||
|
|
||||||
|
[Sound]
|
||||||
|
BGMVolume=1.0
|
||||||
|
SFXVolume=1.0
|
||||||
|
Announcer=female
|
||||||
@@ -2,6 +2,9 @@
|
|||||||
Sensitivity=0.5
|
Sensitivity=0.5
|
||||||
InvertPitch=false
|
InvertPitch=false
|
||||||
|
|
||||||
|
[Keyboard]
|
||||||
|
DoubleTapToDash=false
|
||||||
|
|
||||||
[Bindings]
|
[Bindings]
|
||||||
MouseLeft=PrimaryFire
|
MouseLeft=PrimaryFire
|
||||||
MouseX=Yaw
|
MouseX=Yaw
|
||||||
@@ -15,6 +18,8 @@ Space=Jump
|
|||||||
LeftControl=Crouch
|
LeftControl=Crouch
|
||||||
RightShift=Sprint
|
RightShift=Sprint
|
||||||
LeftShift=SpecialAbility
|
LeftShift=SpecialAbility
|
||||||
|
1=SelectWeapon,1
|
||||||
|
2=SelectWeapon,2
|
||||||
F1=ToggleEditor
|
F1=ToggleEditor
|
||||||
C=ConnectToServer
|
C=ConnectToServer
|
||||||
N=SwitchToServer
|
N=SwitchToServer
|
||||||
|
|||||||
@@ -28,10 +28,13 @@
|
|||||||
<xs:include schemaLocation="Components/HealthHUD.xsd"/>
|
<xs:include schemaLocation="Components/HealthHUD.xsd"/>
|
||||||
<xs:include schemaLocation="Components/Animation.xsd"/>
|
<xs:include schemaLocation="Components/Animation.xsd"/>
|
||||||
<xs:include schemaLocation="Components/Fill.xsd"/>
|
<xs:include schemaLocation="Components/Fill.xsd"/>
|
||||||
|
<xs:include schemaLocation="Components/BoneAttachment.xsd"/>
|
||||||
<xs:include schemaLocation="Components/Lifetime.xsd"/>
|
<xs:include schemaLocation="Components/Lifetime.xsd"/>
|
||||||
<xs:include schemaLocation="Components/HiddenForLocalPlayer.xsd"/>
|
<xs:include schemaLocation="Components/HiddenForLocalPlayer.xsd"/>
|
||||||
<xs:include schemaLocation="Components/HealthPickup.xsd"/>
|
<xs:include schemaLocation="Components/HealthPickup.xsd"/>
|
||||||
|
<xs:include schemaLocation="Components/AnimationOffset.xsd"/>
|
||||||
<xs:include schemaLocation="Components/DashAbility.xsd"/>
|
<xs:include schemaLocation="Components/DashAbility.xsd"/>
|
||||||
|
<xs:include schemaLocation="Components/AssaultWeapon.xsd"/>
|
||||||
<xs:include schemaLocation="Components/Shield.xsd"/>
|
<xs:include schemaLocation="Components/Shield.xsd"/>
|
||||||
<xs:include schemaLocation="Components/Shielded.xsd"/>
|
<xs:include schemaLocation="Components/Shielded.xsd"/>
|
||||||
</xs:schema>
|
</xs:schema>
|
||||||
@@ -1,7 +1,18 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
|
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
|
||||||
<Animation xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="Animation.xsd">
|
<Animation xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="Animation.xsd">
|
||||||
<Name></Name>
|
<AnimationName1></AnimationName1>
|
||||||
<Time>0</Time>
|
<Weight1>1.0</Weight1>
|
||||||
<Speed>0</Speed>
|
<Time1>0</Time1>
|
||||||
<Loop>true</Loop>
|
<Speed1>0</Speed1>
|
||||||
|
<Loop1>true</Loop1>
|
||||||
|
<AnimationName2></AnimationName2>
|
||||||
|
<Weight2>1.0</Weight2>
|
||||||
|
<Time2>0</Time2>
|
||||||
|
<Speed2>0</Speed2>
|
||||||
|
<Loop2>true</Loop2>
|
||||||
|
<AnimationName3></AnimationName3>
|
||||||
|
<Weight3>1.0</Weight3>
|
||||||
|
<Time3>0</Time3>
|
||||||
|
<Speed3>0</Speed3>
|
||||||
|
<Loop3>true</Loop3>
|
||||||
</Animation>
|
</Animation>
|
||||||
@@ -6,11 +6,23 @@
|
|||||||
<xs:element name="Animation">
|
<xs:element name="Animation">
|
||||||
<xs:complexType>
|
<xs:complexType>
|
||||||
<xs:all>
|
<xs:all>
|
||||||
<xs:element name="Name" type="t:string" minOccurs="0"/>
|
<xs:element name="AnimationName1" type="t:string" minOccurs="0"/>
|
||||||
<xs:element name="Time" type="t:double" minOccurs="0"/>
|
<xs:element name="Weight1" type="t:double" minOccurs="0"/>
|
||||||
<xs:element name="Speed" type="t:double" minOccurs="0"/>
|
<xs:element name="Time1" type="t:double" minOccurs="0"/>
|
||||||
<xs:element name="Loop" type="t:bool" minOccurs="0"/>
|
<xs:element name="Speed1" type="t:double" minOccurs="0"/>
|
||||||
|
<xs:element name="Loop1" type="t:bool" minOccurs="0"/>
|
||||||
|
<xs:element name="AnimationName2" type="t:string" minOccurs="0"/>
|
||||||
|
<xs:element name="Weight2" type="t:double" minOccurs="0"/>
|
||||||
|
<xs:element name="Time2" type="t:double" minOccurs="0"/>
|
||||||
|
<xs:element name="Speed2" type="t:double" minOccurs="0"/>
|
||||||
|
<xs:element name="Loop2" type="t:bool" minOccurs="0"/>
|
||||||
|
<xs:element name="AnimationName3" type="t:string" minOccurs="0"/>
|
||||||
|
<xs:element name="Weight3" type="t:double" minOccurs="0"/>
|
||||||
|
<xs:element name="Time3" type="t:double" minOccurs="0"/>
|
||||||
|
<xs:element name="Speed3" type="t:double" minOccurs="0"/>
|
||||||
|
<xs:element name="Loop3" type="t:bool" minOccurs="0"/>
|
||||||
</xs:all>
|
</xs:all>
|
||||||
|
<xs:attribute name="replicated" type="xs:boolean" fixed="true"/>
|
||||||
</xs:complexType>
|
</xs:complexType>
|
||||||
</xs:element>
|
</xs:element>
|
||||||
</xs:schema>
|
</xs:schema>
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
|
||||||
|
<AnimationOffset xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="AnimationOffset.xsd">
|
||||||
|
<AnimationName></AnimationName>
|
||||||
|
<Time>0</Time>
|
||||||
|
</AnimationOffset>
|
||||||
@@ -0,0 +1,17 @@
|
|||||||
|
<?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="AnimationOffset">
|
||||||
|
<xs:annotation>
|
||||||
|
<xs:documentation>Aim animation offset for the skeleton</xs:documentation>
|
||||||
|
</xs:annotation>
|
||||||
|
<xs:complexType>
|
||||||
|
<xs:all>
|
||||||
|
<xs:element name="AnimationName" type="t:string" minOccurs="0"/>
|
||||||
|
<xs:element name="Time" type="t:double" minOccurs="0"/>
|
||||||
|
</xs:all>
|
||||||
|
</xs:complexType>
|
||||||
|
</xs:element>
|
||||||
|
</xs:schema>
|
||||||
+9
@@ -0,0 +1,9 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
|
||||||
|
<AssaultWeapon xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="AssaultWeapon.xsd">
|
||||||
|
<MagazineAmmo>32</MagazineAmmo>
|
||||||
|
<MagazineSize>32</MagazineSize>
|
||||||
|
<Ammo>360</Ammo>
|
||||||
|
<MaxAmmo>360</MaxAmmo>
|
||||||
|
<BaseDamage>5</BaseDamage>
|
||||||
|
<RPM>120</RPM>
|
||||||
|
</AssaultWeapon>
|
||||||
+28
@@ -0,0 +1,28 @@
|
|||||||
|
<?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="AssaultWeapon">
|
||||||
|
<xs:complexType>
|
||||||
|
<xs:all>
|
||||||
|
<xs:element name="MagazineAmmo" type="t:int" minOccurs="0">
|
||||||
|
<xs:annotation><xs:documentation>Ammo currently loaded into the magazine</xs:documentation></xs:annotation>
|
||||||
|
</xs:element>
|
||||||
|
<xs:element name="MagazineSize" type="t:int" minOccurs="0">
|
||||||
|
<xs:annotation><xs:documentation>Max number of rounds in a magazine</xs:documentation></xs:annotation>
|
||||||
|
</xs:element>
|
||||||
|
<xs:element name="Ammo" type="t:int" minOccurs="0">
|
||||||
|
<xs:annotation><xs:documentation>Current ammo carried</xs:documentation></xs:annotation>
|
||||||
|
</xs:element>
|
||||||
|
<xs:element name="MaxAmmo" type="t:int" minOccurs="0">
|
||||||
|
<xs:annotation><xs:documentation>Maximum ammo able to be carried</xs:documentation></xs:annotation>
|
||||||
|
</xs:element>
|
||||||
|
<xs:element name="BaseDamage" type="t:double" minOccurs="0"/>
|
||||||
|
<xs:element name="RPM" type="t:double" minOccurs="0">
|
||||||
|
<xs:annotation><xs:documentation>Rate of fire in rounds per minute</xs:documentation></xs:annotation>
|
||||||
|
</xs:element>
|
||||||
|
</xs:all>
|
||||||
|
</xs:complexType>
|
||||||
|
</xs:element>
|
||||||
|
</xs:schema>
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
|
||||||
|
<BoneAttachment xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="BoneAttachment.xsd">
|
||||||
|
<BoneName></BoneName>
|
||||||
|
<PositionOffset X="0" Y="0" Z="0"/>
|
||||||
|
<OrientationOffset X="0" Y="0" Z="0"/>
|
||||||
|
<ScaleOffset X="1" Y="1" Z="1"/>
|
||||||
|
<InheritPosition>true</InheritPosition>
|
||||||
|
<InheritOrientation>true</InheritOrientation>
|
||||||
|
<InheritScale>false</InheritScale>
|
||||||
|
</BoneAttachment>
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
<?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="BoneAttachment">
|
||||||
|
<xs:complexType>
|
||||||
|
<xs:all>
|
||||||
|
<xs:element name="BoneName" type="t:string" minOccurs="0"/>
|
||||||
|
<xs:element name="PositionOffset" type="t:Vector" minOccurs="0"/>
|
||||||
|
<xs:element name="InheritPosition" type="t:bool" minOccurs="0"/>
|
||||||
|
<xs:element name="OrientationOffset" type="t:Vector" minOccurs="0"/>
|
||||||
|
<xs:element name="InheritOrientation" type="t:bool" minOccurs="0"/>
|
||||||
|
<xs:element name="ScaleOffset" type="t:Vector" minOccurs="0"/>
|
||||||
|
<xs:element name="InheritScale" type="t:bool" minOccurs="0"/>
|
||||||
|
</xs:all>
|
||||||
|
</xs:complexType>
|
||||||
|
</xs:element>
|
||||||
|
</xs:schema>
|
||||||
@@ -4,5 +4,8 @@
|
|||||||
<xs:import schemaLocation="../Types.xsd" namespace="types"/>
|
<xs:import schemaLocation="../Types.xsd" namespace="types"/>
|
||||||
|
|
||||||
<xs:element name="Collidable">
|
<xs:element name="Collidable">
|
||||||
|
<xs:annotation>
|
||||||
|
<xs:documentation>Needs a Model or AABB component to work, uses AABB if both are attached.</xs:documentation>
|
||||||
|
</xs:annotation>
|
||||||
</xs:element>
|
</xs:element>
|
||||||
</xs:schema>
|
</xs:schema>
|
||||||
@@ -4,9 +4,6 @@
|
|||||||
<xs:import schemaLocation="../Types.xsd" namespace="types"/>
|
<xs:import schemaLocation="../Types.xsd" namespace="types"/>
|
||||||
|
|
||||||
<xs:element name="Transform">
|
<xs:element name="Transform">
|
||||||
<xs:annotation>
|
|
||||||
<xs:documentation>It's a transform thingy!</xs:documentation>
|
|
||||||
</xs:annotation>
|
|
||||||
<xs:complexType>
|
<xs:complexType>
|
||||||
<xs:all>
|
<xs:all>
|
||||||
<xs:element name="Position" type="t:Vector" minOccurs="0">
|
<xs:element name="Position" type="t:Vector" minOccurs="0">
|
||||||
@@ -15,6 +12,7 @@
|
|||||||
<xs:element name="Orientation" type="t:Vector" minOccurs="0"/>
|
<xs:element name="Orientation" type="t:Vector" minOccurs="0"/>
|
||||||
<xs:element name="Scale" type="t:Vector" minOccurs="0"/>
|
<xs:element name="Scale" type="t:Vector" minOccurs="0"/>
|
||||||
</xs:all>
|
</xs:all>
|
||||||
|
<xs:attribute name="NetworkReplicated" type="xs:boolean" fixed="true"/>
|
||||||
</xs:complexType>
|
</xs:complexType>
|
||||||
</xs:element>
|
</xs:element>
|
||||||
</xs:schema>
|
</xs:schema>
|
||||||
|
|||||||
@@ -4,5 +4,8 @@
|
|||||||
<xs:import schemaLocation="../Types.xsd" namespace="types"/>
|
<xs:import schemaLocation="../Types.xsd" namespace="types"/>
|
||||||
|
|
||||||
<xs:element name="Trigger">
|
<xs:element name="Trigger">
|
||||||
|
<xs:annotation>
|
||||||
|
<xs:documentation>Needs a Model or AABB component to work, uses AABB if both are attached.</xs:documentation>
|
||||||
|
</xs:annotation>
|
||||||
</xs:element>
|
</xs:element>
|
||||||
</xs:schema>
|
</xs:schema>
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
|
||||||
|
<Trigger xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="Trigger.xsd">
|
||||||
|
</Trigger>
|
||||||
@@ -0,0 +1,17 @@
|
|||||||
|
<?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="Weapon">
|
||||||
|
<xs:complexType>
|
||||||
|
<xs:all>
|
||||||
|
<xs:element name="MagSize" type="t:int" minOccurs="0"/>
|
||||||
|
<xs:element name="MaxAmmo" type="t:int" minOccurs="0"/>
|
||||||
|
<xs:element name="CurrentAmmoInMag" type="t:int" minOccurs="0"/>
|
||||||
|
<xs:element name="CurrentAmmo" type="t:int" minOccurs="0"/>
|
||||||
|
<xs:element name="RPM" type="t:double" minOccurs="0"/>
|
||||||
|
</xs:all>
|
||||||
|
</xs:complexType>
|
||||||
|
</xs:element>
|
||||||
|
</xs:schema>
|
||||||
@@ -20,7 +20,7 @@
|
|||||||
<Entity>
|
<Entity>
|
||||||
<Components>
|
<Components>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>models/dummyscene.mesh</Resource>
|
<Resource>Models/Test/DummyScene.mesh</Resource>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Transform>
|
<c:Transform>
|
||||||
<Position X="0" Y="-0" Z="0"/>
|
<Position X="0" Y="-0" Z="0"/>
|
||||||
@@ -31,7 +31,7 @@
|
|||||||
<Entity>
|
<Entity>
|
||||||
<Components>
|
<Components>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>models/animtest.</Resource>
|
<Resource>Models/Test/AnimTest.mesh</Resource>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Transform>
|
<c:Transform>
|
||||||
<Position X="-0.0966923237" Y="1.2939688" Z="0.399702221"/>
|
<Position X="-0.0966923237" Y="1.2939688" Z="0.399702221"/>
|
||||||
@@ -42,7 +42,7 @@
|
|||||||
<Entity>
|
<Entity>
|
||||||
<Components>
|
<Components>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>models/animTest.mesh</Resource>
|
<Resource>Models/Test/AnimTest.mesh</Resource>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Transform>
|
<c:Transform>
|
||||||
<Position X="0" Y="1.31816244" Z="1.1888907"/>
|
<Position X="0" Y="1.31816244" Z="1.1888907"/>
|
||||||
@@ -53,7 +53,7 @@
|
|||||||
<Entity>
|
<Entity>
|
||||||
<Components>
|
<Components>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>models/animTest.mesh</Resource>
|
<Resource>Models/Test/AnimTest.mesh</Resource>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Transform>
|
<c:Transform>
|
||||||
<Position X="0.708824873" Y="1.30000007" Z="0"/>
|
<Position X="0.708824873" Y="1.30000007" Z="0"/>
|
||||||
@@ -64,7 +64,7 @@
|
|||||||
<Entity>
|
<Entity>
|
||||||
<Components>
|
<Components>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>models/animTest.mesh</Resource>
|
<Resource>Models/Test/AnimTest.mesh</Resource>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Transform>
|
<c:Transform>
|
||||||
<Position X="1.36948848" Y="1.20000005" Z="0"/>
|
<Position X="1.36948848" Y="1.20000005" Z="0"/>
|
||||||
@@ -91,7 +91,7 @@
|
|||||||
<Axis X="0" Y="5" Z="0"/>
|
<Axis X="0" Y="5" Z="0"/>
|
||||||
</c:RaptorCopter>
|
</c:RaptorCopter>
|
||||||
<c:Transform>
|
<c:Transform>
|
||||||
<Orientation X="117.03714" Y="3023.50244" Z="3.03297734"/>
|
<Orientation X="117.03714" Y="3077.6958" Z="3.03297734"/>
|
||||||
</c:Transform>
|
</c:Transform>
|
||||||
</Components>
|
</Components>
|
||||||
<Children>
|
<Children>
|
||||||
@@ -154,7 +154,7 @@
|
|||||||
</c:RaptorCopter>
|
</c:RaptorCopter>
|
||||||
<c:Transform>
|
<c:Transform>
|
||||||
<Position X="0" Y="-0.100000001" Z="0"/>
|
<Position X="0" Y="-0.100000001" Z="0"/>
|
||||||
<Orientation X="0" Y="191.457993" Z="0"/>
|
<Orientation X="0" Y="209.88414" Z="0"/>
|
||||||
</c:Transform>
|
</c:Transform>
|
||||||
</Components>
|
</Components>
|
||||||
<Children>
|
<Children>
|
||||||
|
|||||||
@@ -0,0 +1,377 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
|
||||||
|
<Entity name="AnimationTests" xmlns:c="components" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../Types/Entity.xsd">
|
||||||
|
|
||||||
|
<Components>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
|
||||||
|
<Children>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>Models/Core/UnitPlane.mesh</Resource>
|
||||||
|
</c:Model>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0" Y="-1.245" Z="0"/>
|
||||||
|
<Scale X="10" Y="10" Z="10"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:DirectionalLight/>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>Models/DirectionalLightWidget.mesh</Resource>
|
||||||
|
</c:Model>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0" Y="2.42800021" Z="-2.80000019"/>
|
||||||
|
<Orientation X="5.51900005" Y="3.65100026" Z="0"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:Animation>
|
||||||
|
<AnimationName>Crouch</AnimationName>
|
||||||
|
<Time>1.2451274133223826</Time>
|
||||||
|
<Speed>1</Speed>
|
||||||
|
</c:Animation>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>Models/Asstest.mesh</Resource>
|
||||||
|
</c:Model>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0" Y="-1.245" Z="0"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children>
|
||||||
|
<Entity name="R_Leg_Top">
|
||||||
|
<Components>
|
||||||
|
<c:BoneAttachment>
|
||||||
|
<BoneName>R_Leg_Top</BoneName>
|
||||||
|
<ScaleOffset X="0.200000003" Y="0.200000003" Z="0.200000003"/>
|
||||||
|
</c:BoneAttachment>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>Models/Core/UnitCube.mesh</Resource>
|
||||||
|
<Color A="1" B="1" G="19.6078434" R="1"/>
|
||||||
|
</c:Model>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0.0718467757" Y="0.479806602" Z="0.0548748523"/>
|
||||||
|
<Scale X="0.100000001" Y="0.100000001" Z="0.100000001"/>
|
||||||
|
<Orientation X="-0.431370437" Y="0.850169301" Z="-2.42601299"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="R_Leg_Bottom">
|
||||||
|
<Components>
|
||||||
|
<c:BoneAttachment>
|
||||||
|
<BoneName>R_Leg_Bottom</BoneName>
|
||||||
|
<ScaleOffset X="0.200000003" Y="0.200000003" Z="0.200000003"/>
|
||||||
|
</c:BoneAttachment>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>Models/Core/UnitCube.mesh</Resource>
|
||||||
|
<Color A="1" B="1" G="19.6078434" R="1"/>
|
||||||
|
</c:Model>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0.39332974" Y="0.324809998" Z="-0.0288445484"/>
|
||||||
|
<Scale X="0.100000001" Y="0.100000001" Z="0.100000001"/>
|
||||||
|
<Orientation X="1.18491673" Y="1.0242362" Z="-2.26206946"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="R_Foot">
|
||||||
|
<Components>
|
||||||
|
<c:BoneAttachment>
|
||||||
|
<BoneName>R_Foot</BoneName>
|
||||||
|
<ScaleOffset X="0.200000003" Y="0.200000003" Z="0.200000003"/>
|
||||||
|
</c:BoneAttachment>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>Models/Core/UnitCube.mesh</Resource>
|
||||||
|
<Color A="1" B="1" G="19.6078434" R="1"/>
|
||||||
|
</c:Model>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0.305837631" Y="0.0361253619" Z="0.179315761"/>
|
||||||
|
<Scale X="0.100000001" Y="0.100000001" Z="0.100000001"/>
|
||||||
|
<Orientation X="3.10044129e-07" Y="1.09664524" Z="-3.13675666"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="L_Foot">
|
||||||
|
<Components>
|
||||||
|
<c:BoneAttachment>
|
||||||
|
<BoneName>L_Foot</BoneName>
|
||||||
|
<ScaleOffset X="0.200000003" Y="0.200000003" Z="0.200000003"/>
|
||||||
|
</c:BoneAttachment>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>Models/Core/UnitCube.mesh</Resource>
|
||||||
|
<Color A="1" B="1" G="19.6078434" R="1"/>
|
||||||
|
</c:Model>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="-0.186916605" Y="0.0361250937" Z="-0.136036098"/>
|
||||||
|
<Scale X="0.100000001" Y="0.100000001" Z="0.100000001"/>
|
||||||
|
<Orientation X="3.14159131" Y="-7.15255737e-07" Z="3.14159274"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="L_Leg_Bottom">
|
||||||
|
<Components>
|
||||||
|
<c:BoneAttachment>
|
||||||
|
<BoneName>L_Leg_Bottom</BoneName>
|
||||||
|
<ScaleOffset X="0.200000003" Y="0.200000003" Z="0.200000003"/>
|
||||||
|
</c:BoneAttachment>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>Models/Core/UnitCube.mesh</Resource>
|
||||||
|
<Color A="1" B="1" G="19.6078434" R="1"/>
|
||||||
|
</c:Model>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="-0.124794818" Y="0.343560517" Z="-0.32563746"/>
|
||||||
|
<Scale X="0.100000001" Y="0.100000001" Z="0.100000001"/>
|
||||||
|
<Orientation X="-2.66533947" Y="-0.187336028" Z="2.93550467"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="L_Leg_Top">
|
||||||
|
<Components>
|
||||||
|
<c:BoneAttachment>
|
||||||
|
<BoneName>L_Leg_Top</BoneName>
|
||||||
|
<ScaleOffset X="0.200000003" Y="0.200000003" Z="0.200000003"/>
|
||||||
|
</c:BoneAttachment>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>Models/Core/UnitCube.mesh</Resource>
|
||||||
|
<Color A="1" B="1" G="19.6078434" R="1"/>
|
||||||
|
</c:Model>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="-0.0666294992" Y="0.471828938" Z="0.0128124626"/>
|
||||||
|
<Scale X="0.100000001" Y="0.100000001" Z="0.100000001"/>
|
||||||
|
<Orientation X="1.98675263" Y="0.0233680122" Z="2.87409353"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="Hip">
|
||||||
|
<Components>
|
||||||
|
<c:BoneAttachment>
|
||||||
|
<BoneName>Hip</BoneName>
|
||||||
|
<ScaleOffset X="0.200000003" Y="0.200000003" Z="0.200000003"/>
|
||||||
|
</c:BoneAttachment>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>Models/Core/UnitCube.mesh</Resource>
|
||||||
|
<Color A="1" B="1" G="19.6078434" R="1"/>
|
||||||
|
</c:Model>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0.00469498895" Y="0.512485623" Z="0.0200203825"/>
|
||||||
|
<Scale X="0.100000001" Y="0.100000001" Z="0.100000001"/>
|
||||||
|
<Orientation X="-3.03470659" Y="0.36588186" Z="-3.0760417"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="Spine_1">
|
||||||
|
<Components>
|
||||||
|
<c:BoneAttachment>
|
||||||
|
<BoneName>Spine_1</BoneName>
|
||||||
|
<ScaleOffset X="0.200000003" Y="0.200000003" Z="0.200000003"/>
|
||||||
|
</c:BoneAttachment>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>Models/Core/UnitCube.mesh</Resource>
|
||||||
|
<Color A="1" B="1" G="19.6078434" R="1"/>
|
||||||
|
</c:Model>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0.00108358753" Y="0.645309925" Z="0.00671719108"/>
|
||||||
|
<Scale X="0.100000001" Y="0.100000001" Z="0.100000001"/>
|
||||||
|
<Orientation X="-2.23578" Y="1.12130237" Z="-2.36199307"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="Spine_2">
|
||||||
|
<Components>
|
||||||
|
<c:BoneAttachment>
|
||||||
|
<BoneName>Spine_2</BoneName>
|
||||||
|
<ScaleOffset X="0.200000003" Y="0.200000003" Z="0.200000003"/>
|
||||||
|
</c:BoneAttachment>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>Models/Core/UnitCube.mesh</Resource>
|
||||||
|
<Color A="1" B="1" G="19.6078434" R="1"/>
|
||||||
|
</c:Model>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0.0091821691" Y="0.768297315" Z="-0.0377721936"/>
|
||||||
|
<Scale X="0.100000001" Y="0.100000001" Z="0.100000001"/>
|
||||||
|
<Orientation X="-1.92300212" Y="1.0594666" Z="-2.269871"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="Spine_3">
|
||||||
|
<Components>
|
||||||
|
<c:BoneAttachment>
|
||||||
|
<BoneName>Spine_3</BoneName>
|
||||||
|
<ScaleOffset X="0.200000003" Y="0.200000003" Z="0.200000003"/>
|
||||||
|
</c:BoneAttachment>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>Models/Core/UnitCube.mesh</Resource>
|
||||||
|
<Color A="1" B="1" G="19.6078434" R="1"/>
|
||||||
|
</c:Model>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0.0091821691" Y="0.768297315" Z="-0.0377721936"/>
|
||||||
|
<Scale X="0.100000001" Y="0.100000001" Z="0.100000001"/>
|
||||||
|
<Orientation X="-1.92300212" Y="1.0594666" Z="-2.269871"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="R_Leg_Top">
|
||||||
|
<Components>
|
||||||
|
<c:BoneAttachment>
|
||||||
|
<BoneName>Neck</BoneName>
|
||||||
|
<ScaleOffset X="0.200000003" Y="0.200000003" Z="0.200000003"/>
|
||||||
|
</c:BoneAttachment>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>Models/Core/UnitCube.mesh</Resource>
|
||||||
|
<Color A="1" B="1" G="19.6078434" R="1"/>
|
||||||
|
</c:Model>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0.0257265922" Y="0.835334301" Z="-0.0725377947"/>
|
||||||
|
<Scale X="0.100000001" Y="0.100000001" Z="0.100000001"/>
|
||||||
|
<Orientation X="-2.67842054" Y="0.0451255701" Z="2.97098374"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="R_Shoulder">
|
||||||
|
<Components>
|
||||||
|
<c:BoneAttachment>
|
||||||
|
<BoneName>R_Shoulder</BoneName>
|
||||||
|
<ScaleOffset X="0.200000003" Y="0.200000003" Z="0.200000003"/>
|
||||||
|
</c:BoneAttachment>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>Models/Core/UnitCube.mesh</Resource>
|
||||||
|
<Color A="1" B="1" G="19.6078434" R="1"/>
|
||||||
|
</c:Model>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0.0091821691" Y="0.768297315" Z="-0.0377721936"/>
|
||||||
|
<Scale X="0.100000001" Y="0.100000001" Z="0.100000001"/>
|
||||||
|
<Orientation X="-1.92300212" Y="1.0594666" Z="-2.269871"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="R_Arm">
|
||||||
|
<Components>
|
||||||
|
<c:BoneAttachment>
|
||||||
|
<BoneName>R_Arm</BoneName>
|
||||||
|
<ScaleOffset X="0.200000003" Y="0.200000003" Z="0.200000003"/>
|
||||||
|
</c:BoneAttachment>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>Models/Core/UnitCube.mesh</Resource>
|
||||||
|
<Color A="1" B="1" G="19.6078434" R="1"/>
|
||||||
|
</c:Model>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0.080665715" Y="0.757790864" Z="0.0217154976"/>
|
||||||
|
<Scale X="0.100000001" Y="0.100000001" Z="0.100000001"/>
|
||||||
|
<Orientation X="-0.990312934" Y="0.329345405" Z="-0.0508526377"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="R_Elbow">
|
||||||
|
<Components>
|
||||||
|
<c:BoneAttachment>
|
||||||
|
<BoneName>R_Elbow</BoneName>
|
||||||
|
<ScaleOffset X="0.200000003" Y="0.200000003" Z="0.200000003"/>
|
||||||
|
</c:BoneAttachment>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>Models/Core/UnitCube.mesh</Resource>
|
||||||
|
<Color A="1" B="1" G="19.6078434" R="1"/>
|
||||||
|
</c:Model>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="-0.160035357" Y="0.843445063" Z="0.00654693879"/>
|
||||||
|
<Scale X="0.100000001" Y="0.100000001" Z="0.100000001"/>
|
||||||
|
<Orientation X="-1.90130699" Y="-0.773362398" Z="1.06810308"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="R_Hand">
|
||||||
|
<Components>
|
||||||
|
<c:BoneAttachment>
|
||||||
|
<BoneName>R_Hand</BoneName>
|
||||||
|
<ScaleOffset X="0.200000003" Y="0.200000003" Z="0.200000003"/>
|
||||||
|
</c:BoneAttachment>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>Models/Core/UnitCube.mesh</Resource>
|
||||||
|
<Color A="1" B="1" G="19.6078434" R="1"/>
|
||||||
|
</c:Model>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="-0.238011926" Y="0.711740375" Z="-0.115170464"/>
|
||||||
|
<Scale X="0.100000001" Y="0.100000001" Z="0.100000001"/>
|
||||||
|
<Orientation X="-0.845395327" Y="0.765393734" Z="-0.237622365"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="Chin">
|
||||||
|
<Components>
|
||||||
|
<c:BoneAttachment>
|
||||||
|
<BoneName>Chin</BoneName>
|
||||||
|
<ScaleOffset X="0.200000003" Y="0.200000003" Z="0.200000003"/>
|
||||||
|
</c:BoneAttachment>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>Models/Core/UnitCube.mesh</Resource>
|
||||||
|
<Color A="1" B="1" G="19.6078434" R="1"/>
|
||||||
|
</c:Model>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0.0430049673" Y="0.916874766" Z="-0.143034652"/>
|
||||||
|
<Scale X="0.100000001" Y="0.100000001" Z="0.100000001"/>
|
||||||
|
<Orientation X="-2.96715546" Y="0.0551578514" Z="2.99139857"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="L_Hand">
|
||||||
|
<Components>
|
||||||
|
<c:BoneAttachment>
|
||||||
|
<BoneName>L_Hand</BoneName>
|
||||||
|
<ScaleOffset X="0.200000003" Y="0.200000003" Z="0.200000003"/>
|
||||||
|
</c:BoneAttachment>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>Models/Core/UnitCube.mesh</Resource>
|
||||||
|
<Color A="1" B="1" G="19.6078434" R="1"/>
|
||||||
|
</c:Model>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0.0662894994" Y="0.739402592" Z="-0.459511727"/>
|
||||||
|
<Scale X="0.100000001" Y="0.100000001" Z="0.100000001"/>
|
||||||
|
<Orientation X="-3.1153264" Y="-0.248137668" Z="-0.829112232"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="L_Elbow">
|
||||||
|
<Components>
|
||||||
|
<c:BoneAttachment>
|
||||||
|
<BoneName>L_Elbow</BoneName>
|
||||||
|
<ScaleOffset X="0.200000003" Y="0.200000003" Z="0.200000003"/>
|
||||||
|
</c:BoneAttachment>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>Models/Core/UnitCube.mesh</Resource>
|
||||||
|
<Color A="1" B="1" G="19.6078434" R="1"/>
|
||||||
|
</c:Model>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="-0.0279197786" Y="0.648010612" Z="-0.314551264"/>
|
||||||
|
<Scale X="0.100000001" Y="0.100000001" Z="0.100000001"/>
|
||||||
|
<Orientation X="0.325028092" Y="1.40154743" Z="1.88795435"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
|
||||||
|
</Entity>
|
||||||
@@ -0,0 +1,104 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
|
||||||
|
<Entity name="AnimationTests" 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:Transform>
|
||||||
|
<Position X="-0.100000001" Y="-1.11500001" Z="-3.10500026"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:DirectionalLight/>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>Models/Widgets/Lights/DirectionalLightWidget.mesh</Resource>
|
||||||
|
</c:Model>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0" Y="2.42800021" Z="-2.80000019"/>
|
||||||
|
<Orientation X="5.40800047" Y="3.65100026" Z="0"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="Wave">
|
||||||
|
<Components>
|
||||||
|
<c:Animation>
|
||||||
|
<AnimationName1>Run</AnimationName1>
|
||||||
|
<Weight1>0.5</Weight1>
|
||||||
|
<Time1>0.78014858943309839</Time1>
|
||||||
|
<Speed1>1</Speed1>
|
||||||
|
<Speed2>1</Speed2>
|
||||||
|
<AnimationName2>StrafeRight</AnimationName2>
|
||||||
|
<Weight2>0.5</Weight2>
|
||||||
|
<Time2>0.78620929522779459</Time2>
|
||||||
|
<AnimationName3>ShootFastRifle</AnimationName3>
|
||||||
|
<Time3>0.13809128482706701</Time3>
|
||||||
|
<Speed3>1</Speed3>
|
||||||
|
</c:Animation>
|
||||||
|
<c:AnimationOffset>
|
||||||
|
<AnimationName>AimRifle</AnimationName>
|
||||||
|
<Time>0.040000014007091522</Time>
|
||||||
|
</c:AnimationOffset>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>Models/Characters/Assault/AssaultAnimations.mesh</Resource>
|
||||||
|
<Color A="0.627451003" B="19.6078434" G="1" R="3.92156863"/>
|
||||||
|
<Transparent>true</Transparent>
|
||||||
|
</c:Model>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="-0.690088332" Y="0" Z="0"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children>
|
||||||
|
<Entity name="R_Arm_Weapon_Joint">
|
||||||
|
<Components>
|
||||||
|
<c:BoneAttachment>
|
||||||
|
<BoneName>R_Arm_Weapon_Joint</BoneName>
|
||||||
|
<ScaleOffset X="0.200000003" Y="0.200000003" Z="0.200000003"/>
|
||||||
|
</c:BoneAttachment>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>Models/Weapons/Blue/AssaultWeapon.mesh</Resource>
|
||||||
|
<Color A="1" B="1" G="1" R="19.6078434"/>
|
||||||
|
<Transparent>true</Transparent>
|
||||||
|
</c:Model>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0.144055843" Y="0.970111489" Z="-0.126199633"/>
|
||||||
|
<Orientation X="-0.535831392" Y="0.0691146553" Z="-0.0608282126"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
</Entity>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:PointLight>
|
||||||
|
<Radius>10</Radius>
|
||||||
|
</c:PointLight>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0" Y="1.0823108" Z="0.738871336"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>Models/Core/UnitPlane.mesh</Resource>
|
||||||
|
</c:Model>
|
||||||
|
<c:Transform>
|
||||||
|
<Scale X="10" Y="1" Z="10"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
|
||||||
|
</Entity>
|
||||||
@@ -0,0 +1,108 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
|
||||||
|
<Entity name="AnimationTests" 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:Transform>
|
||||||
|
<Position X="-0.100000001" Y="-1.11500001" Z="-3.10500026"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:DirectionalLight/>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>Models/Widgets/Lights/DirectionalLightWidget.mesh</Resource>
|
||||||
|
</c:Model>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0" Y="2.42800021" Z="-2.80000019"/>
|
||||||
|
<Orientation X="5.40800047" Y="3.65100026" Z="0"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="Wave">
|
||||||
|
<Components>
|
||||||
|
<c:Animation>
|
||||||
|
<AnimationName1>Run</AnimationName1>
|
||||||
|
<Weight1>0.5</Weight1>
|
||||||
|
<Time1>0.97312056690160276</Time1>
|
||||||
|
<Speed1>1</Speed1>
|
||||||
|
<Speed2>1</Speed2>
|
||||||
|
<AnimationName2>ReloadSwitch</AnimationName2>
|
||||||
|
<Time2>0.91310356788604263</Time2>
|
||||||
|
<AnimationName3>LeftRight</AnimationName3>
|
||||||
|
<Weight3>0</Weight3>
|
||||||
|
<Time3>0.040207288496060478</Time3>
|
||||||
|
<Speed3>1</Speed3>
|
||||||
|
</c:Animation>
|
||||||
|
<c:AnimationOffset>
|
||||||
|
<AnimationName>DownUp</AnimationName>
|
||||||
|
<Time>0.77999961376190186</Time>
|
||||||
|
</c:AnimationOffset>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>Models/Characters/Assault/FirstPerson.mesh</Resource>
|
||||||
|
<Color A="0.627451003" B="19.6078434" G="1" R="3.92156863"/>
|
||||||
|
<Transparent>true</Transparent>
|
||||||
|
</c:Model>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="-0.690088332" Y="1.00491476" Z="0"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:BoneAttachment>
|
||||||
|
<BoneName>R_Arm_Weapon_Joint</BoneName>
|
||||||
|
</c:BoneAttachment>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>Models/Weapons/Blue/AssaultWeapon.mesh</Resource>
|
||||||
|
</c:Model>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0.120548911" Y="-0.223148599" Z="-0.151705116"/>
|
||||||
|
<Orientation X="0.09407565" Y="0.0181003436" Z="0.0279055703"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:Camera/>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
</Entity>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:PointLight>
|
||||||
|
<Radius>10</Radius>
|
||||||
|
</c:PointLight>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0" Y="1.0823108" Z="0.738871336"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>Models/Core/UnitPlane.mesh</Resource>
|
||||||
|
</c:Model>
|
||||||
|
<c:Transform>
|
||||||
|
<Scale X="10" Y="1" Z="10"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
|
||||||
|
</Entity>
|
||||||
@@ -35,7 +35,7 @@
|
|||||||
<Entity name="Asset">
|
<Entity name="Asset">
|
||||||
<Components>
|
<Components>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>Models/AssaultWeaponBlue.mesh</Resource>
|
<Resource>Models/Weapons/Blue/AssaultWeaponBlue.mesh</Resource>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Transform>
|
<c:Transform>
|
||||||
<Position X="0" Y="1" Z="0"/>
|
<Position X="0" Y="1" Z="0"/>
|
||||||
|
|||||||
@@ -0,0 +1,22 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
|
||||||
|
<Entity name="R_Leg_Top" xmlns:c="components" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../Types/Entity.xsd">
|
||||||
|
|
||||||
|
<Components>
|
||||||
|
<c:BoneAttachment>
|
||||||
|
<BoneName>R_Leg_Top</BoneName>
|
||||||
|
<ScaleOffset X="0.200000003" Y="0.200000003" Z="0.200000003"/>
|
||||||
|
</c:BoneAttachment>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>Models/Core/UnitCube.mesh</Resource>
|
||||||
|
<Color A="1" B="1" G="19.6078434" R="1"/>
|
||||||
|
</c:Model>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0.0664939061" Y="0.714353919" Z="0.0475388765"/>
|
||||||
|
<Scale X="0.100000001" Y="0.100000001" Z="0.100000001"/>
|
||||||
|
<Orientation X="-0.783109188" Y="-0.0050998251" Z="3.14151597"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
|
||||||
|
<Children/>
|
||||||
|
|
||||||
|
</Entity>
|
||||||
@@ -9,7 +9,7 @@
|
|||||||
<Entity>
|
<Entity>
|
||||||
<Components>
|
<Components>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>../assets/Models/DummyScene.mesh</Resource>
|
<Resource>Models/Test/DummyScene.mesh</Resource>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Transform/>
|
<c:Transform/>
|
||||||
</Components>
|
</Components>
|
||||||
@@ -41,7 +41,7 @@
|
|||||||
<HomePointForTeam>3</HomePointForTeam>
|
<HomePointForTeam>3</HomePointForTeam>
|
||||||
</c:CapturePoint>
|
</c:CapturePoint>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>../assets/Models/Core/UnitSphere.mesh</Resource>
|
<Resource>Models/Core/UnitSphere.mesh</Resource>
|
||||||
<Color A="1" B="1" G="0.200000003" R="0"/>
|
<Color A="1" B="1" G="0.200000003" R="0"/>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Team>
|
<c:Team>
|
||||||
@@ -61,7 +61,7 @@
|
|||||||
<CapturePointNumber>1</CapturePointNumber>
|
<CapturePointNumber>1</CapturePointNumber>
|
||||||
</c:CapturePoint>
|
</c:CapturePoint>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>../assets/Models/Core/UnitSphere.mesh</Resource>
|
<Resource>Models/Core/UnitSphere.mesh</Resource>
|
||||||
<Color A="1" B="0" G="1" R="1"/>
|
<Color A="1" B="0" G="1" R="1"/>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Team>
|
<c:Team>
|
||||||
@@ -81,7 +81,7 @@
|
|||||||
<CapturePointNumber>2</CapturePointNumber>
|
<CapturePointNumber>2</CapturePointNumber>
|
||||||
</c:CapturePoint>
|
</c:CapturePoint>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>../assets/Models/Core/UnitSphere.mesh</Resource>
|
<Resource>Models/Core/UnitSphere.mesh</Resource>
|
||||||
<Color A="1" B="1" G="1" R="0"/>
|
<Color A="1" B="1" G="1" R="0"/>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Team>
|
<c:Team>
|
||||||
@@ -102,7 +102,7 @@
|
|||||||
<CapturePointNumber>3</CapturePointNumber>
|
<CapturePointNumber>3</CapturePointNumber>
|
||||||
</c:CapturePoint>
|
</c:CapturePoint>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>../assets/Models/Core/UnitSphere.mesh</Resource>
|
<Resource>Models/Core/UnitSphere.mesh</Resource>
|
||||||
<Color A="1" B="0" G="0.200000003" R="1"/>
|
<Color A="1" B="0" G="0.200000003" R="1"/>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Team>
|
<c:Team>
|
||||||
@@ -120,7 +120,7 @@
|
|||||||
<c:Health/>
|
<c:Health/>
|
||||||
<c:AABB/>
|
<c:AABB/>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>../assets/Models/Core/UnitCube.mesh</Resource>
|
<Resource>Models/Core/UnitCube.mesh</Resource>
|
||||||
<Color A="1" B="0.482352942" G="0.490196079" R="1"/>
|
<Color A="1" B="0.482352942" G="0.490196079" R="1"/>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Player/>
|
<c:Player/>
|
||||||
@@ -138,7 +138,7 @@
|
|||||||
<c:Health/>
|
<c:Health/>
|
||||||
<c:AABB/>
|
<c:AABB/>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>../assets/Models/Core/UnitCube.mesh</Resource>
|
<Resource>Models/Core/UnitCube.mesh</Resource>
|
||||||
<Color A="1" B="1" G="0.196078435" R="0.196078435"/>
|
<Color A="1" B="1" G="0.196078435" R="0.196078435"/>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Player/>
|
<c:Player/>
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
<Entity>
|
<Entity>
|
||||||
<Components>
|
<Components>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>../assets/Models/DummyScene.mesh</Resource>
|
<Resource>Models/Test/DummyScene.mesh</Resource>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Transform/>
|
<c:Transform/>
|
||||||
</Components>
|
</Components>
|
||||||
@@ -42,7 +42,7 @@
|
|||||||
<CaptureTimer>6.9158446328696002</CaptureTimer>
|
<CaptureTimer>6.9158446328696002</CaptureTimer>
|
||||||
</c:CapturePoint>
|
</c:CapturePoint>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>../assets/Models/Core/UnitSphere.mesh</Resource>
|
<Resource>Models/Core/UnitSphere.mesh</Resource>
|
||||||
<Color A="1" B="0" G="1" R="1"/>
|
<Color A="1" B="0" G="1" R="1"/>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Team>
|
<c:Team>
|
||||||
@@ -63,7 +63,7 @@
|
|||||||
<CapturePointNumber>1</CapturePointNumber>
|
<CapturePointNumber>1</CapturePointNumber>
|
||||||
</c:CapturePoint>
|
</c:CapturePoint>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>../assets/Models/Core/UnitSphere.mesh</Resource>
|
<Resource>Models/Core/UnitSphere.mesh</Resource>
|
||||||
<Color A="1" B="1" G="1" R="0"/>
|
<Color A="1" B="1" G="1" R="0"/>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Team>
|
<c:Team>
|
||||||
@@ -83,7 +83,7 @@
|
|||||||
<CapturePointNumber>2</CapturePointNumber>
|
<CapturePointNumber>2</CapturePointNumber>
|
||||||
</c:CapturePoint>
|
</c:CapturePoint>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>../assets/Models/Core/UnitSphere.mesh</Resource>
|
<Resource>Models/Core/UnitSphere.mesh</Resource>
|
||||||
<Color A="1" B="0" G="0.200000003" R="1"/>
|
<Color A="1" B="0" G="0.200000003" R="1"/>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Team>
|
<c:Team>
|
||||||
@@ -104,7 +104,7 @@
|
|||||||
<CapturePointNumber>3</CapturePointNumber>
|
<CapturePointNumber>3</CapturePointNumber>
|
||||||
</c:CapturePoint>
|
</c:CapturePoint>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>../assets/Models/Core/UnitSphere.mesh</Resource>
|
<Resource>Models/Core/UnitSphere.mesh</Resource>
|
||||||
<Color A="1" B="0" G="0.200000003" R="1"/>
|
<Color A="1" B="0" G="0.200000003" R="1"/>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Team>
|
<c:Team>
|
||||||
@@ -122,7 +122,7 @@
|
|||||||
<c:Health/>
|
<c:Health/>
|
||||||
<c:AABB/>
|
<c:AABB/>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>../assets/Models/Core/UnitCube.mesh</Resource>
|
<Resource>Models/Core/UnitCube.mesh</Resource>
|
||||||
<Color A="1" B="0.482352942" G="0.490196079" R="1"/>
|
<Color A="1" B="0.482352942" G="0.490196079" R="1"/>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Player/>
|
<c:Player/>
|
||||||
@@ -140,7 +140,7 @@
|
|||||||
<c:Health/>
|
<c:Health/>
|
||||||
<c:AABB/>
|
<c:AABB/>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>../assets/Models/Core/UnitCube.mesh</Resource>
|
<Resource>Models/Core/UnitCube.mesh</Resource>
|
||||||
<Color A="1" B="1" G="0.196078435" R="0.196078435"/>
|
<Color A="1" B="1" G="0.196078435" R="0.196078435"/>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Player/>
|
<c:Player/>
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
<Entity>
|
<Entity>
|
||||||
<Components>
|
<Components>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>../assets/Models/DummyScene.mesh</Resource>
|
<Resource>Models/Test/DummyScene.mesh</Resource>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Transform/>
|
<c:Transform/>
|
||||||
</Components>
|
</Components>
|
||||||
@@ -41,7 +41,7 @@
|
|||||||
<HomePointForTeam>3</HomePointForTeam>
|
<HomePointForTeam>3</HomePointForTeam>
|
||||||
</c:CapturePoint>
|
</c:CapturePoint>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>../assets/Models/Core/UnitSphere.mesh</Resource>
|
<Resource>Models/Core/UnitSphere.mesh</Resource>
|
||||||
<Color A="1" B="1" G="0.200000003" R="0"/>
|
<Color A="1" B="1" G="0.200000003" R="0"/>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Team>
|
<c:Team>
|
||||||
@@ -61,7 +61,7 @@
|
|||||||
<CapturePointNumber>1</CapturePointNumber>
|
<CapturePointNumber>1</CapturePointNumber>
|
||||||
</c:CapturePoint>
|
</c:CapturePoint>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>../assets/Models/Core/UnitSphere.mesh</Resource>
|
<Resource>Models/Core/UnitSphere.mesh</Resource>
|
||||||
<Color A="1" B="1" G="1" R="0"/>
|
<Color A="1" B="1" G="1" R="0"/>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Team/>
|
<c:Team/>
|
||||||
@@ -79,7 +79,7 @@
|
|||||||
<CapturePointNumber>2</CapturePointNumber>
|
<CapturePointNumber>2</CapturePointNumber>
|
||||||
</c:CapturePoint>
|
</c:CapturePoint>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>../assets/Models/Core/UnitSphere.mesh</Resource>
|
<Resource>Models/Core/UnitSphere.mesh</Resource>
|
||||||
<Color A="1" B="0" G="1" R="1"/>
|
<Color A="1" B="0" G="1" R="1"/>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Team/>
|
<c:Team/>
|
||||||
@@ -98,7 +98,7 @@
|
|||||||
<CapturePointNumber>3</CapturePointNumber>
|
<CapturePointNumber>3</CapturePointNumber>
|
||||||
</c:CapturePoint>
|
</c:CapturePoint>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>../assets/Models/Core/UnitSphere.mesh</Resource>
|
<Resource>Models/Core/UnitSphere.mesh</Resource>
|
||||||
<Color A="1" B="0" G="0.200000003" R="1"/>
|
<Color A="1" B="0" G="0.200000003" R="1"/>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Team>
|
<c:Team>
|
||||||
@@ -116,7 +116,7 @@
|
|||||||
<c:Health/>
|
<c:Health/>
|
||||||
<c:AABB/>
|
<c:AABB/>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>../assets/Models/Core/UnitCube.mesh</Resource>
|
<Resource>Models/Core/UnitCube.mesh</Resource>
|
||||||
<Color A="1" B="0.482352942" G="0.490196079" R="1"/>
|
<Color A="1" B="0.482352942" G="0.490196079" R="1"/>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Player/>
|
<c:Player/>
|
||||||
@@ -134,7 +134,7 @@
|
|||||||
<c:Health/>
|
<c:Health/>
|
||||||
<c:AABB/>
|
<c:AABB/>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>../assets/Models/Core/UnitCube.mesh</Resource>
|
<Resource>Models/Core/UnitCube.mesh</Resource>
|
||||||
<Color A="1" B="1" G="0.196078435" R="0.196078435"/>
|
<Color A="1" B="1" G="0.196078435" R="0.196078435"/>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Player/>
|
<c:Player/>
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
<Entity>
|
<Entity>
|
||||||
<Components>
|
<Components>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>../assets/Models/DummyScene.mesh</Resource>
|
<Resource>Models/Test/DummyScene.mesh</Resource>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Transform/>
|
<c:Transform/>
|
||||||
</Components>
|
</Components>
|
||||||
@@ -41,7 +41,7 @@
|
|||||||
<HomePointForTeam>3</HomePointForTeam>
|
<HomePointForTeam>3</HomePointForTeam>
|
||||||
</c:CapturePoint>
|
</c:CapturePoint>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>../assets/Models/Core/UnitSphere.mesh</Resource>
|
<Resource>Models/Core/UnitSphere.mesh</Resource>
|
||||||
<Color A="1" B="1" G="0.200000003" R="0"/>
|
<Color A="1" B="1" G="0.200000003" R="0"/>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Team>
|
<c:Team>
|
||||||
@@ -61,7 +61,7 @@
|
|||||||
<CapturePointNumber>1</CapturePointNumber>
|
<CapturePointNumber>1</CapturePointNumber>
|
||||||
</c:CapturePoint>
|
</c:CapturePoint>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>../assets/Models/Core/UnitSphere.mesh</Resource>
|
<Resource>Models/Core/UnitSphere.mesh</Resource>
|
||||||
<Color A="1" B="0" G="1" R="1"/>
|
<Color A="1" B="0" G="1" R="1"/>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Team>
|
<c:Team>
|
||||||
@@ -81,7 +81,7 @@
|
|||||||
<CapturePointNumber>2</CapturePointNumber>
|
<CapturePointNumber>2</CapturePointNumber>
|
||||||
</c:CapturePoint>
|
</c:CapturePoint>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>../assets/Models/Core/UnitSphere.mesh</Resource>
|
<Resource>Models/Core/UnitSphere.mesh</Resource>
|
||||||
<Color A="1" B="1" G="1" R="0"/>
|
<Color A="1" B="1" G="1" R="0"/>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Team>
|
<c:Team>
|
||||||
@@ -101,7 +101,7 @@
|
|||||||
<CapturePointNumber>3</CapturePointNumber>
|
<CapturePointNumber>3</CapturePointNumber>
|
||||||
</c:CapturePoint>
|
</c:CapturePoint>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>../assets/Models/Core/UnitSphere.mesh</Resource>
|
<Resource>Models/Core/UnitSphere.mesh</Resource>
|
||||||
<Color A="1" B="0" G="0.200000003" R="1"/>
|
<Color A="1" B="0" G="0.200000003" R="1"/>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Team>
|
<c:Team>
|
||||||
@@ -122,7 +122,7 @@
|
|||||||
<CapturePointNumber>4</CapturePointNumber>
|
<CapturePointNumber>4</CapturePointNumber>
|
||||||
</c:CapturePoint>
|
</c:CapturePoint>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>../assets/Models/Core/UnitSphere.mesh</Resource>
|
<Resource>Models/Core/UnitSphere.mesh</Resource>
|
||||||
<Color A="1" B="0" G="0.200000003" R="1"/>
|
<Color A="1" B="0" G="0.200000003" R="1"/>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Team>
|
<c:Team>
|
||||||
@@ -140,7 +140,7 @@
|
|||||||
<c:Health/>
|
<c:Health/>
|
||||||
<c:AABB/>
|
<c:AABB/>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>../assets/Models/Core/UnitCube.mesh</Resource>
|
<Resource>Models/Core/UnitCube.mesh</Resource>
|
||||||
<Color A="1" B="0.482352942" G="0.490196079" R="1"/>
|
<Color A="1" B="0.482352942" G="0.490196079" R="1"/>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Player/>
|
<c:Player/>
|
||||||
@@ -158,7 +158,7 @@
|
|||||||
<c:Health/>
|
<c:Health/>
|
||||||
<c:AABB/>
|
<c:AABB/>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>../assets/Models/Core/UnitCube.mesh</Resource>
|
<Resource>Models/Core/UnitCube.mesh</Resource>
|
||||||
<Color A="1" B="0.482352942" G="0.490196079" R="1"/>
|
<Color A="1" B="0.482352942" G="0.490196079" R="1"/>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Player/>
|
<c:Player/>
|
||||||
@@ -176,7 +176,7 @@
|
|||||||
<c:Health/>
|
<c:Health/>
|
||||||
<c:AABB/>
|
<c:AABB/>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>../assets/Models/Core/UnitCube.mesh</Resource>
|
<Resource>Models/Core/UnitCube.mesh</Resource>
|
||||||
<Color A="1" B="1" G="0.196078435" R="0.196078435"/>
|
<Color A="1" B="1" G="0.196078435" R="0.196078435"/>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Player/>
|
<c:Player/>
|
||||||
@@ -194,7 +194,7 @@
|
|||||||
<c:Health/>
|
<c:Health/>
|
||||||
<c:AABB/>
|
<c:AABB/>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>../assets/Models/Core/UnitCube.mesh</Resource>
|
<Resource>Models/Core/UnitCube.mesh</Resource>
|
||||||
<Color A="1" B="1" G="0.196078435" R="0.196078435"/>
|
<Color A="1" B="1" G="0.196078435" R="0.196078435"/>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Player/>
|
<c:Player/>
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
<Entity>
|
<Entity>
|
||||||
<Components>
|
<Components>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>../assets/Models/DummyScene.mesh</Resource>
|
<Resource>Models/Test/DummyScene.mesh</Resource>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Transform/>
|
<c:Transform/>
|
||||||
</Components>
|
</Components>
|
||||||
@@ -41,7 +41,7 @@
|
|||||||
<HomePointForTeam>3</HomePointForTeam>
|
<HomePointForTeam>3</HomePointForTeam>
|
||||||
</c:CapturePoint>
|
</c:CapturePoint>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>../assets/Models/Core/UnitSphere.mesh</Resource>
|
<Resource>Models/Core/UnitSphere.mesh</Resource>
|
||||||
<Color A="1" B="1" G="0.200000003" R="0"/>
|
<Color A="1" B="1" G="0.200000003" R="0"/>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Team>
|
<c:Team>
|
||||||
@@ -61,7 +61,7 @@
|
|||||||
<CapturePointNumber>1</CapturePointNumber>
|
<CapturePointNumber>1</CapturePointNumber>
|
||||||
</c:CapturePoint>
|
</c:CapturePoint>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>../assets/Models/Core/UnitSphere.mesh</Resource>
|
<Resource>Models/Core/UnitSphere.mesh</Resource>
|
||||||
<Color A="1" B="1" G="1" R="0"/>
|
<Color A="1" B="1" G="1" R="0"/>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Team/>
|
<c:Team/>
|
||||||
@@ -79,7 +79,7 @@
|
|||||||
<CapturePointNumber>2</CapturePointNumber>
|
<CapturePointNumber>2</CapturePointNumber>
|
||||||
</c:CapturePoint>
|
</c:CapturePoint>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>../assets/Models/Core/UnitSphere.mesh</Resource>
|
<Resource>Models/Core/UnitSphere.mesh</Resource>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Team/>
|
<c:Team/>
|
||||||
<c:Transform>
|
<c:Transform>
|
||||||
@@ -96,7 +96,7 @@
|
|||||||
<CapturePointNumber>3</CapturePointNumber>
|
<CapturePointNumber>3</CapturePointNumber>
|
||||||
</c:CapturePoint>
|
</c:CapturePoint>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>../assets/Models/Core/UnitSphere.mesh</Resource>
|
<Resource>Models/Core/UnitSphere.mesh</Resource>
|
||||||
<Color A="1" B="0" G="1" R="1"/>
|
<Color A="1" B="0" G="1" R="1"/>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Team/>
|
<c:Team/>
|
||||||
@@ -115,7 +115,7 @@
|
|||||||
<CapturePointNumber>4</CapturePointNumber>
|
<CapturePointNumber>4</CapturePointNumber>
|
||||||
</c:CapturePoint>
|
</c:CapturePoint>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>../assets/Models/Core/UnitSphere.mesh</Resource>
|
<Resource>Models/Core/UnitSphere.mesh</Resource>
|
||||||
<Color A="1" B="0" G="0.200000003" R="1"/>
|
<Color A="1" B="0" G="0.200000003" R="1"/>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Team>
|
<c:Team>
|
||||||
@@ -133,7 +133,7 @@
|
|||||||
<c:Health/>
|
<c:Health/>
|
||||||
<c:AABB/>
|
<c:AABB/>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>../assets/Models/Core/UnitCube.mesh</Resource>
|
<Resource>Models/Core/UnitCube.mesh</Resource>
|
||||||
<Color A="1" B="0.482352942" G="0.490196079" R="1"/>
|
<Color A="1" B="0.482352942" G="0.490196079" R="1"/>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Player/>
|
<c:Player/>
|
||||||
@@ -151,7 +151,7 @@
|
|||||||
<c:Health/>
|
<c:Health/>
|
||||||
<c:AABB/>
|
<c:AABB/>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>../assets/Models/Core/UnitCube.mesh</Resource>
|
<Resource>Models/Core/UnitCube.mesh</Resource>
|
||||||
<Color A="1" B="0.482352942" G="0.490196079" R="1"/>
|
<Color A="1" B="0.482352942" G="0.490196079" R="1"/>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Player/>
|
<c:Player/>
|
||||||
@@ -169,7 +169,7 @@
|
|||||||
<c:Health/>
|
<c:Health/>
|
||||||
<c:AABB/>
|
<c:AABB/>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>../assets/Models/Core/UnitCube.mesh</Resource>
|
<Resource>Models/Core/UnitCube.mesh</Resource>
|
||||||
<Color A="1" B="1" G="0.196078435" R="0.196078435"/>
|
<Color A="1" B="1" G="0.196078435" R="0.196078435"/>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Player/>
|
<c:Player/>
|
||||||
@@ -187,7 +187,7 @@
|
|||||||
<c:Health/>
|
<c:Health/>
|
||||||
<c:AABB/>
|
<c:AABB/>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>../assets/Models/Core/UnitCube.mesh</Resource>
|
<Resource>Models/Core/UnitCube.mesh</Resource>
|
||||||
<Color A="1" B="1" G="0.196078435" R="0.196078435"/>
|
<Color A="1" B="1" G="0.196078435" R="0.196078435"/>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Player/>
|
<c:Player/>
|
||||||
|
|||||||
@@ -17,7 +17,7 @@
|
|||||||
</HomePointForTeam>
|
</HomePointForTeam>
|
||||||
</c:CapturePoint>
|
</c:CapturePoint>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>C:\Users\123456\Workspace\TacticalZ\assets\Models\Core\UnitSphere.mesh</Resource>
|
<Resource>Models/Core/UnitSphere.mesh</Resource>
|
||||||
<Color A="1" B="0" G="0.200000003" R="1"/>
|
<Color A="1" B="0" G="0.200000003" R="1"/>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Team>
|
<c:Team>
|
||||||
@@ -39,7 +39,7 @@
|
|||||||
<CapturePointNumber>1</CapturePointNumber>
|
<CapturePointNumber>1</CapturePointNumber>
|
||||||
</c:CapturePoint>
|
</c:CapturePoint>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>C:\Users\123456\Workspace\TacticalZ\assets\Models\Core\UnitSphere.mesh</Resource>
|
<Resource>Models/Core/UnitSphere.mesh</Resource>
|
||||||
<Color A="1" B="1" G="1" R="0"/>
|
<Color A="1" B="1" G="1" R="0"/>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Team/>
|
<c:Team/>
|
||||||
@@ -57,7 +57,7 @@
|
|||||||
<CapturePointNumber>2</CapturePointNumber>
|
<CapturePointNumber>2</CapturePointNumber>
|
||||||
</c:CapturePoint>
|
</c:CapturePoint>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>C:\Users\123456\Workspace\TacticalZ\assets\Models\Core\UnitSphere.mesh</Resource>
|
<Resource>Models/Core/UnitSphere.mesh</Resource>
|
||||||
<Color A="1" B="1" G="0.200000003" R="0"/>
|
<Color A="1" B="1" G="0.200000003" R="0"/>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Team>
|
<c:Team>
|
||||||
@@ -79,7 +79,7 @@
|
|||||||
<CapturePointNumber>3</CapturePointNumber>
|
<CapturePointNumber>3</CapturePointNumber>
|
||||||
</c:CapturePoint>
|
</c:CapturePoint>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>C:\Users\123456\Workspace\TacticalZ\assets\Models\Core\UnitSphere.mesh</Resource>
|
<Resource>Models/Core/UnitSphere.mesh</Resource>
|
||||||
<Color A="1" B="1" G="0.200000003" R="0"/>
|
<Color A="1" B="1" G="0.200000003" R="0"/>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Team>
|
<c:Team>
|
||||||
@@ -104,7 +104,7 @@
|
|||||||
<CapturePointNumber>4</CapturePointNumber>
|
<CapturePointNumber>4</CapturePointNumber>
|
||||||
</c:CapturePoint>
|
</c:CapturePoint>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>C:\Users\123456\Workspace\TacticalZ\assets\Models\Core\UnitSphere.mesh</Resource>
|
<Resource>Models/Core/UnitSphere.mesh</Resource>
|
||||||
<Color A="1" B="1" G="0.200000003" R="0"/>
|
<Color A="1" B="1" G="0.200000003" R="0"/>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Team>
|
<c:Team>
|
||||||
@@ -124,7 +124,7 @@
|
|||||||
<c:AABB/>
|
<c:AABB/>
|
||||||
<c:Health/>
|
<c:Health/>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>C:\Users\123456\Workspace\TacticalZ\assets\Models\Core\UnitCube.mesh</Resource>
|
<Resource>Models/Core/UnitCube.mesh</Resource>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Player/>
|
<c:Player/>
|
||||||
<c:Team>
|
<c:Team>
|
||||||
@@ -143,7 +143,7 @@
|
|||||||
<c:AABB/>
|
<c:AABB/>
|
||||||
<c:Health/>
|
<c:Health/>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>C:\Users\123456\Workspace\TacticalZ\assets\Models\Core\UnitCube.mesh</Resource>
|
<Resource>Models/Core/UnitCube.mesh</Resource>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Player/>
|
<c:Player/>
|
||||||
<c:Team>
|
<c:Team>
|
||||||
@@ -160,7 +160,7 @@
|
|||||||
<Entity>
|
<Entity>
|
||||||
<Components>
|
<Components>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>C:\Users\123456\Workspace\TacticalZ\assets\Models\DummyScene.mesh</Resource>
|
<Resource>Models/Test/DummyScene.mesh</Resource>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Transform>
|
<c:Transform>
|
||||||
<Position X="-0.600000024" Y="0" Z="0"/>
|
<Position X="-0.600000024" Y="0" Z="0"/>
|
||||||
|
|||||||
@@ -0,0 +1,30 @@
|
|||||||
|
<?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:Model>
|
||||||
|
<Resource>Models/Effects/JumpEffectHexagon.mesh</Resource>
|
||||||
|
<Color A="0.576470613" B="500" G="255" R="0.854901969"/>
|
||||||
|
<Transparent>true</Transparent>
|
||||||
|
</c:Model>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0.600000024" Y="0.800000012" Z="0"/>
|
||||||
|
<Scale X="0.50000012" Y="0.50000019" Z="0.50000014"/>
|
||||||
|
</c:Transform>
|
||||||
|
<c:Lifetime>
|
||||||
|
<Lifetime>0.5</Lifetime>
|
||||||
|
</c:Lifetime>
|
||||||
|
<c:ExplosionEffect>
|
||||||
|
<ColorByDistance>true</ColorByDistance>
|
||||||
|
<Velocity X="0" Y="-7.76300049" Z="0"/>
|
||||||
|
<ExplosionOrigin X="0" Y="2.67900002" Z="0"/>
|
||||||
|
<ExponentialAccelaration>true</ExponentialAccelaration>
|
||||||
|
<ExplosionDuration>0.5</ExplosionDuration>
|
||||||
|
<EndColor A="0" B="0" G="0" R="1"/>
|
||||||
|
<Randomness>true</Randomness>
|
||||||
|
</c:ExplosionEffect>
|
||||||
|
</Components>
|
||||||
|
|
||||||
|
<Children/>
|
||||||
|
|
||||||
|
</Entity>
|
||||||
@@ -37,7 +37,7 @@
|
|||||||
<Intensity>0.80000001192092896</Intensity>
|
<Intensity>0.80000001192092896</Intensity>
|
||||||
</c:DirectionalLight>
|
</c:DirectionalLight>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>Models/DirectionalLightWidget.mesh</Resource>
|
<Resource>Models/Widgets/Lights/DirectionalLightWidget.mesh</Resource>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:RaptorCopter>
|
<c:RaptorCopter>
|
||||||
<Speed>1</Speed>
|
<Speed>1</Speed>
|
||||||
@@ -62,7 +62,7 @@
|
|||||||
<RandomnessScalar>3</RandomnessScalar>
|
<RandomnessScalar>3</RandomnessScalar>
|
||||||
</c:ExplosionEffect>
|
</c:ExplosionEffect>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>Models/Assault.mesh</Resource>
|
<Resource>Models/Characters/Assault/AssaultTPose.mesh</Resource>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Transform>
|
<c:Transform>
|
||||||
<Position X="-1.68900967" Y="0.527161121" Z="-1.59648728"/>
|
<Position X="-1.68900967" Y="0.527161121" Z="-1.59648728"/>
|
||||||
@@ -73,7 +73,7 @@
|
|||||||
<Entity name="SecondaryWeapon">
|
<Entity name="SecondaryWeapon">
|
||||||
<Components>
|
<Components>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>Models/AssaultWeaponRed.mesh</Resource>
|
<Resource>Models/Weapons/Red/AssaultWeaponRed.mesh</Resource>
|
||||||
<Transparent>true</Transparent>
|
<Transparent>true</Transparent>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Transform>
|
<c:Transform>
|
||||||
@@ -86,7 +86,7 @@
|
|||||||
<Entity name="SecondaryWeaponRed">
|
<Entity name="SecondaryWeaponRed">
|
||||||
<Components>
|
<Components>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>Models/DefenderGunRed.mesh</Resource>
|
<Resource>Models/Weapons/Red/DefenderGunRed.mesh</Resource>
|
||||||
<Transparent>true</Transparent>
|
<Transparent>true</Transparent>
|
||||||
<NormalMap>false</NormalMap>
|
<NormalMap>false</NormalMap>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
@@ -115,7 +115,7 @@
|
|||||||
<Speed>1</Speed>
|
<Speed>1</Speed>
|
||||||
</c:Animation>
|
</c:Animation>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>models/AssaultAnimated.mesh</Resource>
|
<Resource>Models/Characters/Assault/AssaultAnimated.mesh</Resource>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Transform>
|
<c:Transform>
|
||||||
<Position X="0.786919653" Y="0" Z="0"/>
|
<Position X="0.786919653" Y="0" Z="0"/>
|
||||||
@@ -131,7 +131,7 @@
|
|||||||
<Speed>1</Speed>
|
<Speed>1</Speed>
|
||||||
</c:Animation>
|
</c:Animation>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>models/AssaultAnimated.mesh</Resource>
|
<Resource>Models/Characters/Assault/AssaultAnimated.mesh</Resource>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Transform/>
|
<c:Transform/>
|
||||||
</Components>
|
</Components>
|
||||||
@@ -157,7 +157,7 @@
|
|||||||
<Entity name="Log">
|
<Entity name="Log">
|
||||||
<Components>
|
<Components>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>Models/Log.mesh</Resource>
|
<Resource>Models/Props/TreeLog.mesh</Resource>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Transform>
|
<c:Transform>
|
||||||
<Position X="-4" Y="0.698000014" Z="-1"/>
|
<Position X="-4" Y="0.698000014" Z="-1"/>
|
||||||
@@ -176,7 +176,7 @@
|
|||||||
<Entity name="CombinedSpheres">
|
<Entity name="CombinedSpheres">
|
||||||
<Components>
|
<Components>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>models/NormSpecIncdMapSphere.mesh</Resource>
|
<Resource>Models/Test/NormSpecIncdMapSphere.mesh</Resource>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Transform/>
|
<c:Transform/>
|
||||||
</Components>
|
</Components>
|
||||||
@@ -260,7 +260,7 @@
|
|||||||
<Entity name="NormalSphere">
|
<Entity name="NormalSphere">
|
||||||
<Components>
|
<Components>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>Models/NormalMapSphere.mesh</Resource>
|
<Resource>Models/Test/NormalMapSphere.mesh</Resource>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Transform>
|
<c:Transform>
|
||||||
<Position X="1.82700014" Y="0" Z="-0.166000009"/>
|
<Position X="1.82700014" Y="0" Z="-0.166000009"/>
|
||||||
@@ -271,7 +271,7 @@
|
|||||||
<Entity name="SpecularSphere">
|
<Entity name="SpecularSphere">
|
||||||
<Components>
|
<Components>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>Models/SpecularMapSphere.mesh</Resource>
|
<Resource>Models/Test/SpecularMapSphere.mesh</Resource>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Transform>
|
<c:Transform>
|
||||||
<Position X="-1.06487739" Y="0" Z="1.52336037"/>
|
<Position X="-1.06487739" Y="0" Z="1.52336037"/>
|
||||||
@@ -313,7 +313,7 @@
|
|||||||
<Entity name="GlowMap">
|
<Entity name="GlowMap">
|
||||||
<Components>
|
<Components>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>Models/IncandescenceMapSphere.mesh</Resource>
|
<Resource>Models/Test/IncandescenceMapSphere.mesh</Resource>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Transform>
|
<c:Transform>
|
||||||
<Position X="-1.10000002" Y="0" Z="-1.80000007"/>
|
<Position X="-1.10000002" Y="0" Z="-1.80000007"/>
|
||||||
|
|||||||
@@ -18,7 +18,7 @@
|
|||||||
<Axis X="1" Y="0" Z="0"/>
|
<Axis X="1" Y="0" Z="0"/>
|
||||||
</c:EditorWidget>
|
</c:EditorWidget>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>Models/RotationWidgetX.mesh</Resource>
|
<Resource>Models/Widgets/Rotate/RotationWidgetX.mesh</Resource>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Transform/>
|
<c:Transform/>
|
||||||
</Components>
|
</Components>
|
||||||
@@ -33,7 +33,7 @@
|
|||||||
<Axis X="0" Y="1" Z="0"/>
|
<Axis X="0" Y="1" Z="0"/>
|
||||||
</c:EditorWidget>
|
</c:EditorWidget>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>Models/RotationWidgetY.mesh</Resource>
|
<Resource>Models/Widgets/Rotate/RotationWidgetY.mesh</Resource>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Transform/>
|
<c:Transform/>
|
||||||
</Components>
|
</Components>
|
||||||
@@ -48,7 +48,7 @@
|
|||||||
<Axis X="0" Y="0" Z="1"/>
|
<Axis X="0" Y="0" Z="1"/>
|
||||||
</c:EditorWidget>
|
</c:EditorWidget>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>Models/RotationWidgetZ.mesh</Resource>
|
<Resource>Models/Widgets/Rotate/RotationWidgetZ.mesh</Resource>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Transform/>
|
<c:Transform/>
|
||||||
</Components>
|
</Components>
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
|
|
||||||
<Components>
|
<Components>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>Models/ScaleWidgetOrigin.mesh</Resource>
|
<Resource>Models/Widgets/Scale/ScalingWidgetOrigin.mesh</Resource>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Transform/>
|
<c:Transform/>
|
||||||
<c:UniformScale>
|
<c:UniformScale>
|
||||||
@@ -20,7 +20,7 @@
|
|||||||
</Type>
|
</Type>
|
||||||
</c:EditorWidget>
|
</c:EditorWidget>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>Models/ScaleWidgetX.mesh</Resource>
|
<Resource>Models/Widgets/Scale/ScalingWidgetX.mesh</Resource>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Transform/>
|
<c:Transform/>
|
||||||
</Components>
|
</Components>
|
||||||
@@ -34,7 +34,7 @@
|
|||||||
</Type>
|
</Type>
|
||||||
</c:EditorWidget>
|
</c:EditorWidget>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>Models/ScaleWidgetY.mesh</Resource>
|
<Resource>Models/Widgets/Scale/ScalingWidgetY.mesh</Resource>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Transform/>
|
<c:Transform/>
|
||||||
</Components>
|
</Components>
|
||||||
@@ -48,7 +48,7 @@
|
|||||||
</Type>
|
</Type>
|
||||||
</c:EditorWidget>
|
</c:EditorWidget>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>Models/ScaleWidgetZ.mesh</Resource>
|
<Resource>Models/Widgets/Scale/ScalingWidgetZ.mesh</Resource>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Transform/>
|
<c:Transform/>
|
||||||
</Components>
|
</Components>
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
|
|
||||||
<Components>
|
<Components>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>Models/TranslationWidgetOrigin.mesh</Resource>
|
<Resource>Models/Widgets/Translate/TranslationWidgetOrigin.mesh</Resource>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Transform/>
|
<c:Transform/>
|
||||||
<c:UniformScale>
|
<c:UniformScale>
|
||||||
@@ -18,7 +18,7 @@
|
|||||||
<Axis X="1" Y="0" Z="0"/>
|
<Axis X="1" Y="0" Z="0"/>
|
||||||
</c:EditorWidget>
|
</c:EditorWidget>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>Models/TranslationWidgetX.mesh</Resource>
|
<Resource>Models/Widgets/Translate/TranslationWidgetX.mesh</Resource>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Transform/>
|
<c:Transform/>
|
||||||
</Components>
|
</Components>
|
||||||
@@ -30,7 +30,7 @@
|
|||||||
<Axis X="0" Y="1" Z="0"/>
|
<Axis X="0" Y="1" Z="0"/>
|
||||||
</c:EditorWidget>
|
</c:EditorWidget>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>Models/TranslationWidgetY.mesh</Resource>
|
<Resource>Models/Widgets/Translate/TranslationWidgetY.mesh</Resource>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Transform/>
|
<c:Transform/>
|
||||||
</Components>
|
</Components>
|
||||||
@@ -42,7 +42,7 @@
|
|||||||
<Axis X="0" Y="0" Z="1"/>
|
<Axis X="0" Y="0" Z="1"/>
|
||||||
</c:EditorWidget>
|
</c:EditorWidget>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>Models/TranslationWidgetZ.mesh</Resource>
|
<Resource>Models/Widgets/Translate/TranslationWidgetZ.mesh</Resource>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Transform/>
|
<c:Transform/>
|
||||||
</Components>
|
</Components>
|
||||||
@@ -54,7 +54,7 @@
|
|||||||
<Axis X="0" Y="1" Z="1"/>
|
<Axis X="0" Y="1" Z="1"/>
|
||||||
</c:EditorWidget>
|
</c:EditorWidget>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>Models/WidgetPlaneX.mesh</Resource>
|
<Resource>Models/Widgets/Translate/TranslationWidgetPlaneX.mesh</Resource>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Transform/>
|
<c:Transform/>
|
||||||
</Components>
|
</Components>
|
||||||
@@ -66,7 +66,7 @@
|
|||||||
<Axis X="1" Y="0" Z="1"/>
|
<Axis X="1" Y="0" Z="1"/>
|
||||||
</c:EditorWidget>
|
</c:EditorWidget>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>Models/WidgetPlaneY.mesh</Resource>
|
<Resource>Models/Widgets/Translate/TranslationWidgetPlaneY.mesh</Resource>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Transform/>
|
<c:Transform/>
|
||||||
</Components>
|
</Components>
|
||||||
@@ -78,7 +78,7 @@
|
|||||||
<Axis X="1" Y="1" Z="0"/>
|
<Axis X="1" Y="1" Z="0"/>
|
||||||
</c:EditorWidget>
|
</c:EditorWidget>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>Models/WidgetPlaneZ.mesh</Resource>
|
<Resource>Models/Widgets/Translate/TranslationWidgetPlaneZ.mesh</Resource>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Transform/>
|
<c:Transform/>
|
||||||
</Components>
|
</Components>
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
|
|
||||||
<Components>
|
<Components>
|
||||||
<c:Transform>
|
<c:Transform>
|
||||||
<Position X="0" Y="-0.00432979874" Z="0"/>
|
<Position X="2.5629313" Y="-1.99438679" Z="0"/>
|
||||||
</c:Transform>
|
</c:Transform>
|
||||||
</Components>
|
</Components>
|
||||||
|
|
||||||
@@ -18,23 +18,17 @@
|
|||||||
<Axis X="1.50000012" Y="-2.20000005" Z="2.10000014"/>
|
<Axis X="1.50000012" Y="-2.20000005" Z="2.10000014"/>
|
||||||
</c:RaptorCopter>
|
</c:RaptorCopter>
|
||||||
<c:Transform>
|
<c:Transform>
|
||||||
<Position X="0" Y="2.87819886" Z="0"/>
|
<Position X="0.00367118185" Y="0" Z="0.200000003"/>
|
||||||
</c:Transform>
|
</c:Transform>
|
||||||
</Components>
|
</Components>
|
||||||
<Children>
|
<Children>
|
||||||
<Entity>
|
<Entity>
|
||||||
<Components>
|
<Components>
|
||||||
<c:Animation>
|
<c:Animation>
|
||||||
<Name>Run</Name>
|
<AnimationName>Crouch Walk</AnimationName>
|
||||||
<Time>0.56277947897317659</Time>
|
<Time>0.64462505387501778</Time>
|
||||||
<Speed>1</Speed>
|
<Speed>8</Speed>
|
||||||
</c:Animation>
|
</c:Animation>
|
||||||
<c:ExplosionEffect>
|
|
||||||
<Velocity X="0" Y="1.10000002" Z="3.30000019"/>
|
|
||||||
<ExplosionOrigin X="-0.600000024" Y="1" Z="0"/>
|
|
||||||
<TimeSinceDeath>0.95625903442123672</TimeSinceDeath>
|
|
||||||
<EndColor A="0" B="0.815686285" G="1" R="0"/>
|
|
||||||
</c:ExplosionEffect>
|
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>Models/AssaultAnimated.mesh</Resource>
|
<Resource>Models/AssaultAnimated.mesh</Resource>
|
||||||
<Color A="1" B="392156.875" G="1" R="1"/>
|
<Color A="1" B="392156.875" G="1" R="1"/>
|
||||||
|
|||||||
@@ -0,0 +1,57 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
|
||||||
|
<Entity name="Wave" xmlns:c="components" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../Types/Entity.xsd">
|
||||||
|
|
||||||
|
<Components>
|
||||||
|
<c:Animation>
|
||||||
|
<AnimationName1>Run</AnimationName1>
|
||||||
|
<Weight1>0.5</Weight1>
|
||||||
|
<Time1>0.97312056690160276</Time1>
|
||||||
|
<Speed1>1</Speed1>
|
||||||
|
<Speed2>1</Speed2>
|
||||||
|
<AnimationName2>ReloadSwitch</AnimationName2>
|
||||||
|
<Time2>0.91310356788604263</Time2>
|
||||||
|
<AnimationName3>LeftRight</AnimationName3>
|
||||||
|
<Weight3>0</Weight3>
|
||||||
|
<Time3>0.040207288496060478</Time3>
|
||||||
|
<Speed3>1</Speed3>
|
||||||
|
</c:Animation>
|
||||||
|
<c:AnimationOffset>
|
||||||
|
<AnimationName>DownUp</AnimationName>
|
||||||
|
<Time>0.77999961376190186</Time>
|
||||||
|
</c:AnimationOffset>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>Models/Characters/Assault/FirstPerson.mesh</Resource>
|
||||||
|
<Color A="0.627451003" B="19.6078434" G="1" R="3.92156863"/>
|
||||||
|
<Transparent>true</Transparent>
|
||||||
|
</c:Model>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="-0.690088332" Y="1.00491476" Z="0"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
|
||||||
|
<Children>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:BoneAttachment>
|
||||||
|
<BoneName>R_Arm_Weapon_Joint</BoneName>
|
||||||
|
</c:BoneAttachment>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>Models/Weapons/Blue/AssaultWeapon.mesh</Resource>
|
||||||
|
</c:Model>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0.120778561" Y="-0.223796993" Z="-0.15143311"/>
|
||||||
|
<Orientation X="0.0957378224" Y="0.0132024018" Z="0.0284451656"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity>
|
||||||
|
<Components>
|
||||||
|
<c:Camera/>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
|
||||||
|
</Entity>
|
||||||
@@ -9,11 +9,12 @@
|
|||||||
<Entity name="Scenemesh">
|
<Entity name="Scenemesh">
|
||||||
<Components>
|
<Components>
|
||||||
<c:AABB>
|
<c:AABB>
|
||||||
<Size X="150" Y="64" Z="180"/>
|
<Origin X="0.195705414" Y="26.0382366" Z="-0.010017395"/>
|
||||||
|
<Size X="135.414337" Y="68.3848572" Z="180.020035"/>
|
||||||
</c:AABB>
|
</c:AABB>
|
||||||
<c:Collidable/>
|
<c:Collidable/>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>Models\MapVersion1.mesh</Resource>
|
<Resource>Models/LevelBase/MapVersion1.mesh</Resource>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Transform/>
|
<c:Transform/>
|
||||||
</Components>
|
</Components>
|
||||||
@@ -25,7 +26,7 @@
|
|||||||
<Intensity>2</Intensity>
|
<Intensity>2</Intensity>
|
||||||
</c:DirectionalLight>
|
</c:DirectionalLight>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>Models/DirectionalLightWidget.mesh</Resource>
|
<Resource>Models/Widgets/Lights/DirectionalLightWidget.mesh</Resource>
|
||||||
<Visible>false</Visible>
|
<Visible>false</Visible>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Transform>
|
<c:Transform>
|
||||||
|
|||||||
@@ -19,7 +19,7 @@
|
|||||||
<Entity>
|
<Entity>
|
||||||
<Components>
|
<Components>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>models/animTest.mesh</Resource>
|
<Resource>Models/Test/AnimTest.mesh</Resource>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Transform/>
|
<c:Transform/>
|
||||||
</Components>
|
</Components>
|
||||||
|
|||||||
@@ -26,7 +26,7 @@
|
|||||||
<Components>
|
<Components>
|
||||||
<c:SpawnPoint/>
|
<c:SpawnPoint/>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>Models/Assault.mesh</Resource>
|
<Resource>Models/Characters/Assault/AssaultTPose.mesh</Resource>
|
||||||
<Color A="1" B="0" G="0" R="1"/>
|
<Color A="1" B="0" G="0" R="1"/>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Transform>
|
<c:Transform>
|
||||||
@@ -39,7 +39,7 @@
|
|||||||
<Components>
|
<Components>
|
||||||
<c:SpawnPoint/>
|
<c:SpawnPoint/>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>Models/Assault.mesh</Resource>
|
<Resource>Models/Characters/Assault/AssaultTPose.mesh</Resource>
|
||||||
<Color A="1" B="0.0117647061" G="0" R="1"/>
|
<Color A="1" B="0.0117647061" G="0" R="1"/>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Transform>
|
<c:Transform>
|
||||||
@@ -52,9 +52,10 @@
|
|||||||
</Entity>
|
</Entity>
|
||||||
<Entity name="DirectionalLight">
|
<Entity name="DirectionalLight">
|
||||||
<Components>
|
<Components>
|
||||||
|
<c:SceneLight/>
|
||||||
<c:DirectionalLight/>
|
<c:DirectionalLight/>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>Models/DirectionalLightWidget.mesh</Resource>
|
<Resource>sModels/Widgets/Lights/DirectionalLightWidget.mesh</Resource>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Transform>
|
<c:Transform>
|
||||||
<Position X="-6.00145912" Y="1.42697716" Z="3.04144025"/>
|
<Position X="-6.00145912" Y="1.42697716" Z="3.04144025"/>
|
||||||
@@ -65,9 +66,6 @@
|
|||||||
</Entity>
|
</Entity>
|
||||||
<Entity name="ObstacleCourse">
|
<Entity name="ObstacleCourse">
|
||||||
<Components>
|
<Components>
|
||||||
<c:AABB>
|
|
||||||
<Size X="50" Y="50" Z="50"/>
|
|
||||||
</c:AABB>
|
|
||||||
<c:Collidable/>
|
<c:Collidable/>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>Models/Test/ObstacleCourse.mesh</Resource>
|
<Resource>Models/Test/ObstacleCourse.mesh</Resource>
|
||||||
@@ -96,7 +94,7 @@
|
|||||||
<Components>
|
<Components>
|
||||||
<c:SpawnPoint/>
|
<c:SpawnPoint/>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>Models/Assault.mesh</Resource>
|
<Resource>Models/Characters/Assault/AssaultTPose.mesh</Resource>
|
||||||
<Color A="1" B="1" G="0.254901975" R="0"/>
|
<Color A="1" B="1" G="0.254901975" R="0"/>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Transform>
|
<c:Transform>
|
||||||
@@ -109,7 +107,7 @@
|
|||||||
<Components>
|
<Components>
|
||||||
<c:SpawnPoint/>
|
<c:SpawnPoint/>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>Models/Assault.mesh</Resource>
|
<Resource>Models/Characters/Assault/AssaultTPose.mesh</Resource>
|
||||||
<Color A="1" B="1" G="0.254901975" R="0"/>
|
<Color A="1" B="1" G="0.254901975" R="0"/>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Transform>
|
<c:Transform>
|
||||||
@@ -171,7 +169,7 @@
|
|||||||
<Entity name="CameraModel">
|
<Entity name="CameraModel">
|
||||||
<Components>
|
<Components>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>Models/Camera.mesh</Resource>
|
<Resource>Models/Widgets/Camera.mesh</Resource>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Transform>
|
<c:Transform>
|
||||||
<Position X="0" Y="0.0331346765" Z="-0.0792061687"/>
|
<Position X="0" Y="0.0331346765" Z="-0.0792061687"/>
|
||||||
@@ -186,7 +184,7 @@
|
|||||||
<Components>
|
<Components>
|
||||||
<c:Camera/>
|
<c:Camera/>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>Models/Camera.mesh</Resource>
|
<Resource>Models/Widgets/Camera.mesh</Resource>
|
||||||
<Visible>false</Visible>
|
<Visible>false</Visible>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Transform>
|
<c:Transform>
|
||||||
@@ -199,7 +197,7 @@
|
|||||||
<Entity name="PlayerModel">
|
<Entity name="PlayerModel">
|
||||||
<Components>
|
<Components>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>Models/AssaultHeadless.mesh</Resource>
|
<Resource>Models/Characters/Assault/AssaultHeadless.mesh</Resource>
|
||||||
<Color A="1" B="0" G="0" R="1"/>
|
<Color A="1" B="0" G="0" R="1"/>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Transform>
|
<c:Transform>
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user