Compare commits
163 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 73b8bff1f3 | |||
| 1deb506fb2 | |||
| 7ea26d10ee | |||
| 28e9ba1208 | |||
| f0c2fdead1 | |||
| e1ca104fc9 | |||
| 2cb4a307eb | |||
| 6507efc0db | |||
| 96a3e68bf4 | |||
| 2d438060dd | |||
| a339c61f5b | |||
| 8b81ba9019 | |||
| 9a668ed7d7 | |||
| 7624c6ee0a | |||
| 3ef15dcb81 | |||
| 5923d2d7a7 | |||
| 069583e09f | |||
| 44b4a597d4 | |||
| 618e96da90 | |||
| fb9914d08a | |||
| 0c0f2d7e50 | |||
| 26d6546d79 | |||
| 62c8196ad4 | |||
| 7af17049e9 | |||
| 76117cb3ce | |||
| e6b3bbeb54 | |||
| 01def459a1 | |||
| 3094dd301b | |||
| 76ab746a22 | |||
| e56f203f7c | |||
| 267c007291 | |||
| 8b66d29adc | |||
| 7d15313209 | |||
| a9a19193ad | |||
| 53c520123a | |||
| 92d5ec70ba | |||
| 233a1d0990 | |||
| 4ef76f6c45 | |||
| f8f4b4d939 | |||
| a5c086e389 | |||
| 91dbbb9c11 | |||
| 78835f95d8 | |||
| dc10661e6b | |||
| 8a66b1e5c8 | |||
| 3c8df35be9 | |||
| f761416e20 | |||
| 9161c11764 | |||
| cdbc348cfa | |||
| 95078b6a4b | |||
| 502a290d36 | |||
| 1217b25d02 | |||
| a2b938d8f6 | |||
| ab7fd89546 | |||
| 06d60f9884 | |||
| 629ebb871f | |||
| 6968e71e07 | |||
| 2fb3bb2a39 | |||
| 6540848392 | |||
| de9657700b | |||
| 4652cd7861 | |||
| 5a6374f013 | |||
| 03a35d0f5e | |||
| e4e9af5d9c | |||
| 96768e66de | |||
| ef66f3ebe5 | |||
| 799990f44d | |||
| 39369aa3e5 | |||
| 6eb0b83d6b | |||
| ab40fa715b | |||
| a38c18fd3a | |||
| 9747a201b7 | |||
| 6281e20000 | |||
| 1ae2f3f5f3 | |||
| f147929aa9 | |||
| aadfdfdd90 | |||
| 5a8261453e | |||
| bba002dea9 | |||
| 15195964da | |||
| a9762f44ca | |||
| 3d4427dd20 | |||
| b0a66f9e83 | |||
| 5c6a652316 | |||
| 7ba5e01560 | |||
| 6d68486c05 | |||
| c60e1ba7e4 | |||
| 63d205f56a | |||
| 36f6ade87a | |||
| 1961c16fe2 | |||
| d32a483bb4 | |||
| e23ea78aeb | |||
| 724d7b1586 | |||
| 8cda614de4 | |||
| 77eaa45702 | |||
| dfa224b4dd | |||
| 86df8f14f4 | |||
| eaea645068 | |||
| 21bf7f4df3 | |||
| e2b7e5400d | |||
| 4153a31e3a | |||
| 0908be1e02 | |||
| 2ed5fad699 | |||
| 70374fa10e | |||
| 658eace093 | |||
| 20468cba1b | |||
| c106768939 | |||
| c7dad79e72 | |||
| d37f8cc350 | |||
| 3c35c0a956 | |||
| d47a806c64 | |||
| 8e21c5a5e4 | |||
| bef79d116b | |||
| db5170c699 | |||
| bb76c9d248 | |||
| 7749fc5474 | |||
| 6dd7f1a657 | |||
| 144e548b7a | |||
| 14b0a64720 | |||
| 8647267cad | |||
| ecab5de056 | |||
| 38d8cdded2 | |||
| 22c391df54 | |||
| afddd276a4 | |||
| a48e1b567a | |||
| 0c60b637c3 | |||
| d411de894f | |||
| 18450ff4f3 | |||
| 22b473a0b6 | |||
| f220d8088c | |||
| df2e4abb52 | |||
| 8867e7ac3c | |||
| f161fce719 | |||
| 0343683678 | |||
| 9e6c67596d | |||
| 89d0d5753f | |||
| cd315bbaa0 | |||
| 73a4336206 | |||
| f2ab02d860 | |||
| bf376f54b6 | |||
| b2304a95f8 | |||
| 8c92b7ceb6 | |||
| 7f489b3569 | |||
| 178402e964 | |||
| c3ed429377 | |||
| 56bc1fee3d | |||
| 1c9a1a9904 | |||
| e8aff02c4e | |||
| f7303ad787 | |||
| 456cd35a12 | |||
| 36043010af | |||
| cb77c1ff97 | |||
| 69db32337d | |||
| 2f53ed140f | |||
| 6af167675d | |||
| ecd823cb9f | |||
| 847c539373 | |||
| cb7f06573f | |||
| 4bf91ba56a | |||
| 6542d1b444 | |||
| bbf6058c17 | |||
| 0e51ae7dc9 | |||
| c912cd7a42 | |||
| 7f1016476b | |||
| 047e71a4e1 |
+1
-1
Submodule assets updated: 10a611659d...72530423ad
@@ -24,6 +24,7 @@ public:
|
||||
private:
|
||||
Octree<EntityAABB>* m_Octree;
|
||||
std::vector<EntityAABB> m_OctreeResult;
|
||||
std::unordered_map<EntityWrapper, glm::vec3> m_PrevPositions;
|
||||
};
|
||||
|
||||
#endif
|
||||
@@ -12,7 +12,9 @@ namespace Events
|
||||
struct Captured : Event
|
||||
{
|
||||
int TeamNumberThatCapturedCapturePoint;
|
||||
EntityID CapturePointID;
|
||||
EntityID CapturePointTakenID;
|
||||
EntityWrapper BlueTeamNextCapturePoint;
|
||||
EntityWrapper RedTeamNextCapturePoint;
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
@@ -1,164 +1,21 @@
|
||||
#ifndef EntityFile_h__
|
||||
#define EntityFile_h__
|
||||
|
||||
#include <stack>
|
||||
#include <boost/lexical_cast.hpp>
|
||||
#include <xercesc/util/XercesDefs.hpp>
|
||||
#include <xercesc/util/PlatformUtils.hpp>
|
||||
#include <xercesc/sax2/SAX2XMLReader.hpp>
|
||||
#include <xercesc/sax2/XMLReaderFactory.hpp>
|
||||
#include <xercesc/sax2/DefaultHandler.hpp>
|
||||
#include <xercesc/sax2/Attributes.hpp>
|
||||
#include <xercesc/util/XMLString.hpp>
|
||||
#include <xercesc/util/XMLChar.hpp>
|
||||
#include <xercesc/sax2/DefaultHandler.hpp>
|
||||
#include <xercesc/framework/XMLDocumentHandler.hpp>
|
||||
#include <xercesc/framework/psvi/XSElementDeclaration.hpp>
|
||||
#include <xercesc/framework/psvi/XSComplexTypeDefinition.hpp>
|
||||
#include <xercesc/framework/psvi/XSParticle.hpp>
|
||||
#include <xercesc/framework/psvi/XSModelGroup.hpp>
|
||||
#include <xercesc/framework/psvi/XSAnnotation.hpp>
|
||||
#include <xercesc/framework/psvi/XSValue.hpp>
|
||||
#include <xercesc/framework/XMLGrammarPoolImpl.hpp>
|
||||
#include <xercesc/dom/DOM.hpp>
|
||||
#include <xercesc/dom/DOMLSInput.hpp>
|
||||
#include <xercesc/dom/DOMElement.hpp>
|
||||
#include "World.h"
|
||||
#include "EntityXMLFile.h"
|
||||
#include "EntityXMLFilePreprocessor.h"
|
||||
#include "EntityXMLFileParser.h"
|
||||
#include "EntityWrapper.h"
|
||||
|
||||
#include "../GLM.h"
|
||||
#include "Util/XercesString.h"
|
||||
#include "ResourceManager.h"
|
||||
#include "Entity.h"
|
||||
#include "ComponentInfo.h"
|
||||
|
||||
class EntityFileHandler
|
||||
{
|
||||
friend class EntityFileSAXHandler;
|
||||
public:
|
||||
// @param EntityID The entity found
|
||||
// @param EntityID The parent of the entity
|
||||
typedef std::function<void(EntityID, EntityID, const std::string&)> OnStartEntityCallback;
|
||||
void SetStartEntityCallback(OnStartEntityCallback c) { m_OnStartEntityCallback = c; }
|
||||
// @param EntityID The entity the component corresponds to
|
||||
// @param std::string Type name of the component
|
||||
typedef std::function<void(EntityID, const std::string&)> OnStartComponentCallback;
|
||||
void SetStartComponentCallback(OnStartComponentCallback c) { m_OnStartComponentCallback = c; }
|
||||
// @param EntityID Entity
|
||||
// @param std::string Component name
|
||||
// @param std::string Field name
|
||||
// @param std::map<std::string, std::string> Field attribute names and values
|
||||
typedef std::function<void(EntityID, const std::string&, const std::string&, const std::map<std::string, std::string>&)> OnStartFieldCallback;
|
||||
void SetStartFieldCallback(OnStartFieldCallback c) { m_OnStartFieldCallback = c; }
|
||||
// @param EntityID Entity
|
||||
// @param std::string Component name
|
||||
// @param std::string Field name
|
||||
// @param char* Field data
|
||||
typedef std::function<void(EntityID, const std::string&, const std::string&, const char*)> OnStartFieldDataCallback;
|
||||
void SetStartFieldDataCallback(OnStartFieldDataCallback c) { m_OnStartFieldDataCallback = c; }
|
||||
|
||||
private:
|
||||
OnStartEntityCallback m_OnStartEntityCallback = nullptr;
|
||||
OnStartComponentCallback m_OnStartComponentCallback = nullptr;
|
||||
OnStartFieldCallback m_OnStartFieldCallback = nullptr;
|
||||
OnStartFieldDataCallback m_OnStartFieldDataCallback = nullptr;
|
||||
};
|
||||
|
||||
class EntityFileSAXHandler : public xercesc::DefaultHandler
|
||||
class EntityFile : private World, public Resource
|
||||
{
|
||||
public:
|
||||
enum class State
|
||||
{
|
||||
Unknown,
|
||||
Entity,
|
||||
Component,
|
||||
ComponentField
|
||||
};
|
||||
EntityFile(std::string path);
|
||||
|
||||
EntityFileSAXHandler(const EntityFileHandler* handler, xercesc::SAX2XMLReader* reader);
|
||||
|
||||
void startElement(const XMLCh* const _uri, const XMLCh* const _localName, const XMLCh* const _qname, const xercesc::Attributes& attrs) override;
|
||||
void characters(const XMLCh* const chars, const XMLSize_t length) override;
|
||||
void endElement(const XMLCh* const _uri, const XMLCh* const _localName, const XMLCh* const _qname) override;
|
||||
|
||||
void warning(const xercesc::SAXParseException& e);
|
||||
void error(const xercesc::SAXParseException& e);
|
||||
void fatalError(const xercesc::SAXParseException& e);
|
||||
EntityWrapper MergeInto(World* other);
|
||||
|
||||
private:
|
||||
const EntityFileHandler* m_Handler;
|
||||
xercesc::XMLGrammarPool* m_GrammarPool;
|
||||
xercesc::SAX2XMLReader* m_Reader;
|
||||
//State m_CurrentScope = State::Unknown;
|
||||
std::stack<State> m_StateStack;
|
||||
unsigned int m_NextEntityID = 0;
|
||||
std::stack<EntityID> m_EntityStack;
|
||||
std::string m_CurrentComponent;
|
||||
std::string m_CurrentField;
|
||||
std::map<std::string, std::string> m_CurrentAttributes;
|
||||
|
||||
void onStartEntity(const xercesc::Attributes& attrs);
|
||||
void onEndEntity();
|
||||
void onStartEntityRef(const xercesc::Attributes& attrs);
|
||||
void onStartComponent(const std::string& name);
|
||||
void onEndComponent(const std::string& name);
|
||||
void onStartComponentField(const std::string& field, const xercesc::Attributes& attrs);
|
||||
void onEndComponentField(const std::string& field);
|
||||
void onFieldData(char* data);
|
||||
};
|
||||
|
||||
class EntityFileXMLErrorHandler : public xercesc::ErrorHandler
|
||||
{
|
||||
public:
|
||||
void warning(const xercesc::SAXParseException& e) override
|
||||
{
|
||||
reportParseException("Warning", e);
|
||||
}
|
||||
void error(const xercesc::SAXParseException& e) override
|
||||
{
|
||||
reportParseException("Error", e);
|
||||
}
|
||||
void fatalError(const xercesc::SAXParseException& e) override
|
||||
{
|
||||
reportParseException("FATAL ERROR", e);
|
||||
}
|
||||
void resetErrors() override { }
|
||||
|
||||
private:
|
||||
void reportParseException(std::string type, const xercesc::SAXParseException& e)
|
||||
{
|
||||
char* message = xercesc::XMLString::transcode(e.getMessage());
|
||||
char* systemID = xercesc::XMLString::transcode(e.getSystemId());
|
||||
std::cerr << systemID << ":" << e.getLineNumber() << ":" << e.getColumnNumber() << std::endl;
|
||||
std::cerr << type << ": " << message << std::endl;
|
||||
xercesc::XMLString::release(&systemID);
|
||||
xercesc::XMLString::release(&message);
|
||||
}
|
||||
};
|
||||
|
||||
class EntityFile : public Resource
|
||||
{
|
||||
friend class ResourceManager;
|
||||
friend class EntityFileSAXHandler;
|
||||
private:
|
||||
EntityFile(boost::filesystem::path path);
|
||||
~EntityFile();
|
||||
|
||||
public:
|
||||
static unsigned int GetTypeStride(std::string typeName);
|
||||
static void WriteAttributeData(char* outData, const ComponentInfo::Field_t& field, const std::map<std::string, std::string>& attributes);
|
||||
static void WriteValueData(char* outData, const ComponentInfo::Field_t& field, const char* valueData);
|
||||
|
||||
xercesc::XMLGrammarPool* GrammarPool() const { return m_GrammarPool; }
|
||||
|
||||
void Parse(const EntityFileHandler* handler) const;
|
||||
|
||||
private:
|
||||
boost::filesystem::path m_FilePath;
|
||||
xercesc::XMLGrammarPool* m_GrammarPool;
|
||||
xercesc::SAX2XMLReader* m_SAX2XMLReader;
|
||||
//std::map<std::string, ::ComponentInfo> m_ComponentInfo;
|
||||
//std::vector<std::string> m_EntityReferences;
|
||||
|
||||
static void setReaderFeatures(xercesc::SAX2XMLReader* reader);
|
||||
EntityID m_RootEntity = EntityID_Invalid;
|
||||
};
|
||||
|
||||
#endif
|
||||
@@ -29,16 +29,22 @@ struct EntityWrapper
|
||||
EntityWrapper Parent();
|
||||
EntityWrapper FirstChildByName(const std::string& name);
|
||||
EntityWrapper FirstParentWithComponent(const std::string& componentType);
|
||||
EntityWrapper Clone(EntityWrapper parent = EntityWrapper::Invalid);
|
||||
std::vector<EntityWrapper> ChildrenWithComponent(const std::string& componentType);
|
||||
void DeleteChildren();
|
||||
bool IsChildOf(EntityWrapper potentialParent);
|
||||
bool Valid() const;
|
||||
|
||||
ComponentWrapper operator[](const char* componentName);
|
||||
ComponentWrapper operator[](const std::string& componentName);
|
||||
bool operator==(const EntityWrapper& e) const;
|
||||
bool operator!=(const EntityWrapper& e) const;
|
||||
explicit operator EntityID() const;
|
||||
|
||||
private:
|
||||
EntityWrapper firstChildByNameRecursive(const std::string& name, EntityID parent);
|
||||
EntityWrapper cloneRecursive(EntityWrapper entity, EntityWrapper parent);
|
||||
void childrenWithComponentRecursive(const std::string& componentType, EntityWrapper& entity, std::vector<EntityWrapper>& childrenWithComponent);
|
||||
};
|
||||
|
||||
namespace std
|
||||
|
||||
@@ -0,0 +1,164 @@
|
||||
#ifndef EntityXMLFile_h__
|
||||
#define EntityXMLFile_h__
|
||||
|
||||
#include <stack>
|
||||
#include <boost/lexical_cast.hpp>
|
||||
#include <xercesc/util/XercesDefs.hpp>
|
||||
#include <xercesc/util/PlatformUtils.hpp>
|
||||
#include <xercesc/sax2/SAX2XMLReader.hpp>
|
||||
#include <xercesc/sax2/XMLReaderFactory.hpp>
|
||||
#include <xercesc/sax2/DefaultHandler.hpp>
|
||||
#include <xercesc/sax2/Attributes.hpp>
|
||||
#include <xercesc/util/XMLString.hpp>
|
||||
#include <xercesc/util/XMLChar.hpp>
|
||||
#include <xercesc/sax2/DefaultHandler.hpp>
|
||||
#include <xercesc/framework/XMLDocumentHandler.hpp>
|
||||
#include <xercesc/framework/psvi/XSElementDeclaration.hpp>
|
||||
#include <xercesc/framework/psvi/XSComplexTypeDefinition.hpp>
|
||||
#include <xercesc/framework/psvi/XSParticle.hpp>
|
||||
#include <xercesc/framework/psvi/XSModelGroup.hpp>
|
||||
#include <xercesc/framework/psvi/XSAnnotation.hpp>
|
||||
#include <xercesc/framework/psvi/XSValue.hpp>
|
||||
#include <xercesc/framework/XMLGrammarPoolImpl.hpp>
|
||||
#include <xercesc/dom/DOM.hpp>
|
||||
#include <xercesc/dom/DOMLSInput.hpp>
|
||||
#include <xercesc/dom/DOMElement.hpp>
|
||||
|
||||
#include "../GLM.h"
|
||||
#include "Util/XercesString.h"
|
||||
#include "ResourceManager.h"
|
||||
#include "Entity.h"
|
||||
#include "ComponentInfo.h"
|
||||
|
||||
class EntityFileHandler
|
||||
{
|
||||
friend class EntityFileSAXHandler;
|
||||
public:
|
||||
// @param EntityID The entity found
|
||||
// @param EntityID The parent of the entity
|
||||
typedef std::function<void(EntityID, EntityID, const std::string&)> OnStartEntityCallback;
|
||||
void SetStartEntityCallback(OnStartEntityCallback c) { m_OnStartEntityCallback = c; }
|
||||
// @param EntityID The entity the component corresponds to
|
||||
// @param std::string Type name of the component
|
||||
typedef std::function<void(EntityID, const std::string&)> OnStartComponentCallback;
|
||||
void SetStartComponentCallback(OnStartComponentCallback c) { m_OnStartComponentCallback = c; }
|
||||
// @param EntityID Entity
|
||||
// @param std::string Component name
|
||||
// @param std::string Field name
|
||||
// @param std::map<std::string, std::string> Field attribute names and values
|
||||
typedef std::function<void(EntityID, const std::string&, const std::string&, const std::map<std::string, std::string>&)> OnStartFieldCallback;
|
||||
void SetStartFieldCallback(OnStartFieldCallback c) { m_OnStartFieldCallback = c; }
|
||||
// @param EntityID Entity
|
||||
// @param std::string Component name
|
||||
// @param std::string Field name
|
||||
// @param char* Field data
|
||||
typedef std::function<void(EntityID, const std::string&, const std::string&, const char*)> OnStartFieldDataCallback;
|
||||
void SetStartFieldDataCallback(OnStartFieldDataCallback c) { m_OnStartFieldDataCallback = c; }
|
||||
|
||||
private:
|
||||
OnStartEntityCallback m_OnStartEntityCallback = nullptr;
|
||||
OnStartComponentCallback m_OnStartComponentCallback = nullptr;
|
||||
OnStartFieldCallback m_OnStartFieldCallback = nullptr;
|
||||
OnStartFieldDataCallback m_OnStartFieldDataCallback = nullptr;
|
||||
};
|
||||
|
||||
class EntityFileSAXHandler : public xercesc::DefaultHandler
|
||||
{
|
||||
public:
|
||||
enum class State
|
||||
{
|
||||
Unknown,
|
||||
Entity,
|
||||
Component,
|
||||
ComponentField
|
||||
};
|
||||
|
||||
EntityFileSAXHandler(const EntityFileHandler* handler, xercesc::SAX2XMLReader* reader);
|
||||
|
||||
void startElement(const XMLCh* const _uri, const XMLCh* const _localName, const XMLCh* const _qname, const xercesc::Attributes& attrs) override;
|
||||
void characters(const XMLCh* const chars, const XMLSize_t length) override;
|
||||
void endElement(const XMLCh* const _uri, const XMLCh* const _localName, const XMLCh* const _qname) override;
|
||||
|
||||
void warning(const xercesc::SAXParseException& e);
|
||||
void error(const xercesc::SAXParseException& e);
|
||||
void fatalError(const xercesc::SAXParseException& e);
|
||||
|
||||
private:
|
||||
const EntityFileHandler* m_Handler;
|
||||
xercesc::XMLGrammarPool* m_GrammarPool;
|
||||
xercesc::SAX2XMLReader* m_Reader;
|
||||
//State m_CurrentScope = State::Unknown;
|
||||
std::stack<State> m_StateStack;
|
||||
unsigned int m_NextEntityID = 0;
|
||||
std::stack<EntityID> m_EntityStack;
|
||||
std::string m_CurrentComponent;
|
||||
std::string m_CurrentField;
|
||||
std::map<std::string, std::string> m_CurrentAttributes;
|
||||
|
||||
void onStartEntity(const xercesc::Attributes& attrs);
|
||||
void onEndEntity();
|
||||
void onStartEntityRef(const xercesc::Attributes& attrs);
|
||||
void onStartComponent(const std::string& name);
|
||||
void onEndComponent(const std::string& name);
|
||||
void onStartComponentField(const std::string& field, const xercesc::Attributes& attrs);
|
||||
void onEndComponentField(const std::string& field);
|
||||
void onFieldData(char* data);
|
||||
};
|
||||
|
||||
class EntityFileXMLErrorHandler : public xercesc::ErrorHandler
|
||||
{
|
||||
public:
|
||||
void warning(const xercesc::SAXParseException& e) override
|
||||
{
|
||||
reportParseException("Warning", e);
|
||||
}
|
||||
void error(const xercesc::SAXParseException& e) override
|
||||
{
|
||||
reportParseException("Error", e);
|
||||
}
|
||||
void fatalError(const xercesc::SAXParseException& e) override
|
||||
{
|
||||
reportParseException("FATAL ERROR", e);
|
||||
}
|
||||
void resetErrors() override { }
|
||||
|
||||
private:
|
||||
void reportParseException(std::string type, const xercesc::SAXParseException& e)
|
||||
{
|
||||
char* message = xercesc::XMLString::transcode(e.getMessage());
|
||||
char* systemID = xercesc::XMLString::transcode(e.getSystemId());
|
||||
std::cerr << systemID << ":" << e.getLineNumber() << ":" << e.getColumnNumber() << std::endl;
|
||||
std::cerr << type << ": " << message << std::endl;
|
||||
xercesc::XMLString::release(&systemID);
|
||||
xercesc::XMLString::release(&message);
|
||||
}
|
||||
};
|
||||
|
||||
class EntityXMLFile : public Resource
|
||||
{
|
||||
friend class ResourceManager;
|
||||
friend class EntityFileSAXHandler;
|
||||
private:
|
||||
EntityXMLFile(boost::filesystem::path path);
|
||||
~EntityXMLFile();
|
||||
|
||||
public:
|
||||
static unsigned int GetTypeStride(std::string typeName);
|
||||
static void WriteAttributeData(char* outData, const ComponentInfo::Field_t& field, const std::map<std::string, std::string>& attributes);
|
||||
static void WriteValueData(char* outData, const ComponentInfo::Field_t& field, const char* valueData);
|
||||
|
||||
xercesc::XMLGrammarPool* GrammarPool() const { return m_GrammarPool; }
|
||||
|
||||
void Parse(const EntityFileHandler* handler) const;
|
||||
|
||||
private:
|
||||
boost::filesystem::path m_FilePath;
|
||||
xercesc::XMLGrammarPool* m_GrammarPool;
|
||||
xercesc::SAX2XMLReader* m_SAX2XMLReader;
|
||||
//std::map<std::string, ::ComponentInfo> m_ComponentInfo;
|
||||
//std::vector<std::string> m_EntityReferences;
|
||||
|
||||
static void setReaderFeatures(xercesc::SAX2XMLReader* reader);
|
||||
};
|
||||
|
||||
#endif
|
||||
@@ -1,18 +1,19 @@
|
||||
#ifndef EntityFileParser_h__
|
||||
#define EntityFileParser_h__
|
||||
#ifndef EntityXMLFileParser_h__
|
||||
#define EntityXMLFileParser_h__
|
||||
|
||||
#include "EntityFile.h"
|
||||
#include "EntityXMLFile.h"
|
||||
#include "World.h"
|
||||
|
||||
class EntityFileParser
|
||||
class EntityXMLFileParser
|
||||
{
|
||||
friend class EntityFile;
|
||||
public:
|
||||
EntityFileParser(const EntityFile* entityFile);
|
||||
|
||||
EntityID MergeEntities(World* world, EntityID baseParent = EntityID_Invalid);
|
||||
EntityXMLFileParser(const EntityXMLFile* entityFile);
|
||||
|
||||
private:
|
||||
const EntityFile* m_EntityFile;
|
||||
EntityID MergeEntities(World* world, EntityID baseParent = EntityID_Invalid);
|
||||
|
||||
const EntityXMLFile* m_EntityFile;
|
||||
EntityFileHandler m_Handler;
|
||||
World* m_World = nullptr;
|
||||
EntityID m_FirstEntity = EntityID_Invalid;
|
||||
+9
-8
@@ -1,5 +1,5 @@
|
||||
#ifndef EntityFilePreprocessor_h__
|
||||
#define EntityFilePreprocessor_h__
|
||||
#ifndef EntityXMLFilePreprocessor_h__
|
||||
#define EntityXMLFilePreprocessor_h__
|
||||
|
||||
#include <xercesc/framework/psvi/XSElementDeclaration.hpp>
|
||||
#include <xercesc/framework/psvi/XSComplexTypeDefinition.hpp>
|
||||
@@ -17,17 +17,18 @@
|
||||
#include "Util/XercesString.h"
|
||||
#include "ResourceManager.h"
|
||||
#include "World.h"
|
||||
#include "EntityFile.h"
|
||||
#include "EntityXMLFile.h"
|
||||
|
||||
class EntityFilePreprocessor
|
||||
class EntityXMLFilePreprocessor
|
||||
{
|
||||
friend class EntityFile;
|
||||
public:
|
||||
EntityFilePreprocessor(const EntityFile* entityFile);
|
||||
|
||||
void RegisterComponents(World* world);
|
||||
EntityXMLFilePreprocessor(const EntityXMLFile* entityFile);
|
||||
|
||||
private:
|
||||
const EntityFile* m_EntityFile;
|
||||
void RegisterComponents(World* world);
|
||||
|
||||
const EntityXMLFile* m_EntityFile;
|
||||
std::map<std::string, unsigned int> m_ComponentCounts;
|
||||
std::map<std::string, ComponentInfo> m_ComponentInfo;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#ifndef EntityFileWriter_h__
|
||||
#define EntityFileWriter_h__
|
||||
#ifndef EntityXMLFileWriter_h__
|
||||
#define EntityXMLFileWriter_h__
|
||||
|
||||
#include <boost/filesystem.hpp>
|
||||
#include <xercesc/dom/DOM.hpp>
|
||||
@@ -8,13 +8,13 @@
|
||||
#include <xercesc/framework/LocalFileFormatTarget.hpp>
|
||||
|
||||
#include "Util/XercesString.h"
|
||||
#include "EntityFile.h"
|
||||
#include "EntityXMLFile.h"
|
||||
#include "World.h"
|
||||
|
||||
class EntityFileWriter
|
||||
class EntityXMLFileWriter
|
||||
{
|
||||
public:
|
||||
EntityFileWriter(boost::filesystem::path file)
|
||||
EntityXMLFileWriter(boost::filesystem::path file)
|
||||
: m_FilePath(file)
|
||||
{
|
||||
using namespace xercesc;
|
||||
@@ -118,9 +118,6 @@ public:
|
||||
else {
|
||||
m_ExtraMemory.push_back((char*)malloc(m_Stride));
|
||||
//We should preferably not enter here to avoid performance issues. Set more numMaxElements in constructor instead.
|
||||
if (!DisableMemoryPool::Value) {
|
||||
LOG_DEBUG("Allocated slots exceed Pool size, extra memory allocated dynamically. Pool size: %u, dynamic size: %u.", m_NumSlots, m_ExtraMemory.size());
|
||||
}
|
||||
return m_ExtraMemory.back();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -68,7 +68,7 @@ protected:
|
||||
|
||||
const std::string m_ComponentType;
|
||||
|
||||
virtual void UpdateComponent(EntityWrapper& entity, ComponentWrapper& cPlayer, double dt) = 0;
|
||||
virtual void UpdateComponent(EntityWrapper& entity, ComponentWrapper& component, double dt) = 0;
|
||||
};
|
||||
|
||||
class ImpureSystem : public virtual System
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
#include "ObjectPool.h"
|
||||
#include "ComponentPool.h"
|
||||
#include "EventBroker.h"
|
||||
struct EntityWrapper;
|
||||
|
||||
class World
|
||||
{
|
||||
@@ -18,13 +19,13 @@ public:
|
||||
World(const World& other);
|
||||
|
||||
// Create empty entity
|
||||
EntityID CreateEntity(EntityID parent = 0);
|
||||
EntityID CreateEntity(EntityID parent = EntityID_Invalid);
|
||||
// Delete entity and all components within
|
||||
void DeleteEntity(EntityID entity);
|
||||
// Check if an entity exists
|
||||
bool ValidEntity(EntityID entity) const;
|
||||
// Register a component type and allocate space for it
|
||||
void RegisterComponent(ComponentInfo& ci);
|
||||
void RegisterComponent(const ComponentInfo& ci);
|
||||
// Attach a component to an entity and fill it with default values
|
||||
ComponentWrapper AttachComponent(EntityID entity, const std::string& componentType);
|
||||
// Check if an entity has a component
|
||||
@@ -40,7 +41,7 @@ public:
|
||||
// Change the parent of an entity
|
||||
void SetParent(EntityID entity, EntityID parent);
|
||||
// Get children of an entity
|
||||
const std::pair<std::unordered_multimap<EntityID, EntityID>::const_iterator, std::unordered_multimap<EntityID, EntityID>::const_iterator> GetChildren(EntityID entity);
|
||||
const std::pair<std::unordered_multimap<EntityID, EntityID>::const_iterator, std::unordered_multimap<EntityID, EntityID>::const_iterator> GetDirectChildren(EntityID entity);
|
||||
// Get all component pools
|
||||
const std::unordered_map<std::string, ComponentPool*>& GetComponentPools() const { return m_ComponentPools; }
|
||||
// Get the entity children map
|
||||
@@ -49,6 +50,12 @@ public:
|
||||
void SetName(EntityID entity, const std::string& name);
|
||||
// Get the textual name of an entity
|
||||
std::string GetName(EntityID entity) const;
|
||||
// Get the first entity in the world with the name.
|
||||
EntityWrapper GetFirstEntityByName(const std::string& name);
|
||||
|
||||
// Merge another world into this one
|
||||
// Returns a map that maps entities from the other world to their copies in this one
|
||||
std::unordered_map<EntityID, EntityID> Merge(const World* other);
|
||||
|
||||
private:
|
||||
EventBroker* m_EventBroker = nullptr;
|
||||
|
||||
@@ -104,6 +104,11 @@ protected:
|
||||
if (!m_Enabled) {
|
||||
return false;
|
||||
}
|
||||
|
||||
ImGuiIO& io = ImGui::GetIO();
|
||||
if (io.WantCaptureMouse || io.WantCaptureKeyboard) {
|
||||
return false;
|
||||
}
|
||||
|
||||
m_SpeedMultiplier += e.DeltaY * (0.1 * m_SpeedMultiplier);
|
||||
m_Config->Set("Editor.CameraSpeed", m_SpeedMultiplier);
|
||||
|
||||
@@ -73,6 +73,12 @@ public:
|
||||
// Called when the user means to rename an entity.
|
||||
typedef std::function<void(EntityWrapper, const std::string&)> OnEntityChangeName_t;
|
||||
void SetEntityChangeNameCallback(OnEntityChangeName_t f) { m_OnEntityChangeName = f; }
|
||||
// Called when the user pastes an entity previously "copied"
|
||||
// @param EntityWrapper The entity to copy
|
||||
// @param EntityWrapper The entity to parent the new copy to
|
||||
// @return The new copy of the entity
|
||||
typedef std::function<EntityWrapper(EntityWrapper, EntityWrapper)> OnEntityPaste_t;
|
||||
void SetEntityPasteCallback(OnEntityPaste_t f) { m_OnEntityPaste = f; }
|
||||
// Called when the user means to attach a new component to an entity.
|
||||
typedef std::function<void(EntityWrapper, const std::string&)> OnComponentAttach_t;
|
||||
void SetComponentAttachCallback(OnComponentAttach_t f) { m_OnComponentAttach = f; }
|
||||
@@ -111,6 +117,7 @@ private:
|
||||
std::string m_DroppedFile = "";
|
||||
bool m_Paused = false;
|
||||
bool m_MouseLocked = false;
|
||||
EntityWrapper m_CopyTarget = EntityWrapper::Invalid;
|
||||
|
||||
// Callbacks
|
||||
OnEntitySelectedCallback_t m_OnEntitySelected = nullptr;
|
||||
@@ -124,6 +131,7 @@ private:
|
||||
OnComponentDelete_t m_OnComponentDelete = nullptr;
|
||||
OnWidgetMode_t m_OnWidgetMode = nullptr;
|
||||
OnWidgetSpace_t m_OnWidgetSpace = nullptr;
|
||||
OnEntityPaste_t m_OnEntityPaste = nullptr;
|
||||
|
||||
// Events
|
||||
EventRelay<EditorGUI, Events::KeyDown> m_EKeyDown;
|
||||
|
||||
@@ -5,9 +5,8 @@
|
||||
#include "../Core/World.h"
|
||||
#include "../Core/SystemPipeline.h"
|
||||
#include "../Core/ResourceManager.h"
|
||||
#include "../Core/EntityFilePreprocessor.h"
|
||||
#include "../Core/EntityFileParser.h"
|
||||
#include "../Core/EntityFileWriter.h"
|
||||
#include "../Core/EntityFile.h"
|
||||
#include "../Core/EntityXMLFileWriter.h"
|
||||
#include "../Core/EMousePress.h"
|
||||
#include "../Input/EInputCommand.h"
|
||||
#include "EditorGUI.h"
|
||||
@@ -56,6 +55,7 @@ private:
|
||||
void OnEntityDelete(EntityWrapper entity);
|
||||
void OnEntityChangeParent(EntityWrapper entity, EntityWrapper parent);
|
||||
void OnEntityChangeName(EntityWrapper entity, const std::string& name);
|
||||
EntityWrapper OnEntityPaste(EntityWrapper entityToCopy, EntityWrapper parent);
|
||||
void OnComponentAttach(EntityWrapper entity, const std::string& componentType);
|
||||
void OnComponentDelete(EntityWrapper entity, const std::string& componentType);
|
||||
void OnWidgetSpace(EditorGUI::WidgetSpace widgetSpace);
|
||||
|
||||
@@ -27,7 +27,7 @@ public:
|
||||
virtual bool OnCommand(const Events::InputCommand& e) override;
|
||||
virtual void Reset();
|
||||
|
||||
void AssaultDashCheck(double dt, bool isJumping, double assaultDashCoolDownMaxTimer);
|
||||
void AssaultDashCheck(double dt, bool isJumping, double assaultDashCoolDownMaxTimer, double& assaultDashCoolDownTimer, EntityID playerID);
|
||||
virtual bool AssaultDashDoubleTapped() const { return m_AssaultDashDoubleTapped; }
|
||||
virtual bool PlayerIsDashing() const { return m_PlayerIsDashing; }
|
||||
|
||||
@@ -41,7 +41,7 @@ protected:
|
||||
bool m_Crouching = false;
|
||||
//assault dash membervariables - needed to calculate the doubletap- and dashlogic
|
||||
double m_AssaultDashDoubleTapDeltaTime = 0.0;
|
||||
double m_AssaultDashCoolDownTimer = 0.0;
|
||||
double m_DashEffectResetTimer = 0.0;
|
||||
//i will let m_AssaultDashDoubleTapSensitivityTimer stay hardcoded, its not really a gamevariable (more an inputvariable),
|
||||
//and its very unlikely that someone wants to change that value
|
||||
const float m_AssaultDashDoubleTapSensitivityTimer = 0.25f;
|
||||
@@ -52,7 +52,7 @@ protected:
|
||||
bool m_ShiftDashing = false;
|
||||
bool m_ValidDoubleTap = false;
|
||||
|
||||
//specialabilitys
|
||||
//specialabilities
|
||||
bool m_MovementKeyDown = false;
|
||||
bool m_SpecialAbilityKeyDown = false;
|
||||
int m_NumberOfMovementKeysDown = 0;
|
||||
@@ -191,23 +191,33 @@ bool FirstPersonInputController<EventContext>::OnLockMouse(const Events::LockMou
|
||||
}
|
||||
|
||||
template <typename EventContext>
|
||||
void FirstPersonInputController<EventContext>::AssaultDashCheck(double dt, bool isJumping, double assaultDashCoolDownMaxTimer) {
|
||||
void FirstPersonInputController<EventContext>::AssaultDashCheck(double dt, bool isJumping, double assaultDashCoolDownMaxTimer, double& assaultDashCoolDownTimer, EntityID playerID) {
|
||||
m_AssaultDashDoubleTapDeltaTime += dt;
|
||||
m_AssaultDashCoolDownTimer -= dt;
|
||||
m_DashEffectResetTimer += dt;
|
||||
assaultDashCoolDownTimer -= dt;
|
||||
//cooldown = assaultDashCoolDownMaxTimer sec, pretend the dash lasts 0.25 sec (for friction to do its work)
|
||||
if (m_AssaultDashCoolDownTimer > (assaultDashCoolDownMaxTimer - 0.25f)) {
|
||||
if (assaultDashCoolDownTimer > (assaultDashCoolDownMaxTimer - 0.25f)) {
|
||||
m_PlayerIsDashing = true;
|
||||
if (m_DashEffectResetTimer > 0.05) {
|
||||
Events::DashAbility e;
|
||||
e.Player = playerID;
|
||||
m_EventBroker->Publish(e);
|
||||
m_DashEffectResetTimer = 0.0;
|
||||
}
|
||||
} else {
|
||||
m_PlayerIsDashing = false;
|
||||
}
|
||||
|
||||
//dashing with shift
|
||||
if (m_ShiftDashing && m_AssaultDashCoolDownTimer <= 0.0f) {
|
||||
if (m_ShiftDashing && assaultDashCoolDownTimer <= 0.0f) {
|
||||
//player is dashing with shift
|
||||
//the wanted-direction is set in playermovement already so we dont need to check what direction we want to dash in!
|
||||
m_AssaultDashCoolDownTimer = assaultDashCoolDownMaxTimer;
|
||||
assaultDashCoolDownTimer = assaultDashCoolDownMaxTimer;
|
||||
m_AssaultDashDoubleTapped = true;
|
||||
m_AssaultDashDoubleTapDeltaTime = 0.f;
|
||||
Events::DashAbility e;
|
||||
e.Player = playerID;
|
||||
m_EventBroker->Publish(e);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -227,7 +237,7 @@ void FirstPersonInputController<EventContext>::AssaultDashCheck(double dt, bool
|
||||
}
|
||||
m_ValidDoubleTap = false;
|
||||
|
||||
if (!(m_AssaultDashCoolDownTimer <= 0.0f)) {
|
||||
if (!(assaultDashCoolDownTimer <= 0.0f)) {
|
||||
//if we cant dash at the moment, then just reset the tap-sensitivity-timer
|
||||
m_AssaultDashDoubleTapDeltaTime = 0.f;
|
||||
return;
|
||||
@@ -235,9 +245,10 @@ void FirstPersonInputController<EventContext>::AssaultDashCheck(double dt, bool
|
||||
//ok, we have a valid tap, lets do it
|
||||
m_AssaultDashDoubleTapped = true;
|
||||
m_AssaultDashDoubleTapDeltaTime = 0.f;
|
||||
m_AssaultDashCoolDownTimer = assaultDashCoolDownMaxTimer;
|
||||
assaultDashCoolDownTimer = assaultDashCoolDownMaxTimer;
|
||||
|
||||
Events::DashAbility e;
|
||||
e.Player = playerID;
|
||||
m_EventBroker->Publish(e);
|
||||
}
|
||||
|
||||
|
||||
@@ -19,13 +19,16 @@
|
||||
#include "Core/World.h"
|
||||
#include "Core/EventBroker.h"
|
||||
#include "Core/ConfigFile.h"
|
||||
#include "Core/EPlayerDeath.h"
|
||||
#include "Input/EInputCommand.h"
|
||||
#include "Core/EPlayerDamage.h"
|
||||
#include "../Game/Events/EDoubleJump.h"
|
||||
#include "Network/EInterpolate.h"
|
||||
#include "Network/SnapshotFilter.h"
|
||||
#include "Core/EPlayerSpawned.h"
|
||||
#include "Core/EAmmoPickup.h"
|
||||
#include "Network/ESearchForServers.h"
|
||||
#include "../Game/Events/EDashAbility.h"
|
||||
|
||||
struct ServerInfo
|
||||
{
|
||||
@@ -105,7 +108,9 @@ private:
|
||||
void parsePlayerDamage(Packet& packet);
|
||||
void parseComponentDeletion(Packet& packet);
|
||||
void parseDoubleJump(Packet& packet);
|
||||
void InterpolateFields(Packet & packet, const ComponentInfo & componentInfo, const EntityID & entityID, const std::string & componentType);
|
||||
void parseDashEffect(Packet& packet);
|
||||
void parseAmmoPickup(Packet& packet);
|
||||
void InterpolateFields(Packet& packet, const ComponentInfo & componentInfo, const EntityID & entityID, const std::string & componentType);
|
||||
void parseSnapshot(Packet& packet);
|
||||
void identifyPacketLoss();
|
||||
void hasServerTimedOut();
|
||||
@@ -132,6 +137,9 @@ private:
|
||||
EventRelay< Client, Events::SearchForServers> m_ESearchForServers;
|
||||
EventRelay<Client, Events::DoubleJump> m_EDoubleJump;
|
||||
bool OnDoubleJump(Events::DoubleJump & e);
|
||||
EventRelay<Client, Events::DashAbility> m_EDashAbility;
|
||||
bool OnDashAbility(const Events::DashAbility& e);
|
||||
|
||||
bool OnSearchForServers(const Events::SearchForServers& e);
|
||||
UDPClient m_ServerlistRequest;
|
||||
std::vector<ServerInfo> m_Serverlist;
|
||||
|
||||
@@ -20,7 +20,9 @@ enum class MessageType
|
||||
ComponentDeleted,
|
||||
PlayerTransform,
|
||||
OnDoubleJump,
|
||||
OnDashEffect,
|
||||
ServerlistRequest,
|
||||
AmmoPickup,
|
||||
Invalid
|
||||
};
|
||||
|
||||
|
||||
@@ -20,6 +20,7 @@
|
||||
#include "../Game/Events/EDoubleJump.h"
|
||||
#include "Core/EEntityDeleted.h"
|
||||
#include "Core/EComponentDeleted.h"
|
||||
#include "Core/EAmmoPickup.h"
|
||||
|
||||
class Server : public Network
|
||||
{
|
||||
@@ -82,13 +83,14 @@ private:
|
||||
void parseClientPing();
|
||||
void parsePing();
|
||||
bool parseDoubleJump(Packet& packet);
|
||||
void parseDashEffect(Packet& packet);
|
||||
void parseUDPConnect(Packet& packet);
|
||||
void parseTCPConnect(Packet& packet);
|
||||
void parseDisconnect();
|
||||
void parseServerlistRequest(boost::asio::ip::udp::endpoint endpoint);
|
||||
bool shouldSendToClient(EntityWrapper childEntity);
|
||||
|
||||
// Debug event
|
||||
// Events
|
||||
EventRelay<Server, Events::InputCommand> m_EInputCommand;
|
||||
bool OnInputCommand(const Events::InputCommand& e);
|
||||
EventRelay<Server, Events::PlayerSpawned> m_EPlayerSpawned;
|
||||
@@ -99,6 +101,8 @@ private:
|
||||
bool OnComponentDeleted(const Events::ComponentDeleted& e);
|
||||
EventRelay<Server, Events::PlayerDamage> m_EPlayerDamage;
|
||||
bool OnPlayerDamage(const Events::PlayerDamage& e);
|
||||
EventRelay<Server, Events::AmmoPickup> m_EAmmoPickup;
|
||||
bool OnAmmoPickup(const Events::AmmoPickup& e);
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
@@ -17,7 +17,7 @@ public:
|
||||
void InitializeFrameBuffers();
|
||||
void InitializeShaderPrograms();
|
||||
|
||||
void Draw(GLuint sceneTexture, GLuint bloomTexture, GLuint sceneTextureLowRes, GLuint bloomTextureLowRes, GLfloat gamma, GLfloat exposure);
|
||||
void Draw(GLuint sceneTexture, GLuint bloomTexture, GLfloat gamma, GLfloat exposure);
|
||||
private:
|
||||
const IRenderer* m_Renderer;
|
||||
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
class DrawFinalPass
|
||||
{
|
||||
public:
|
||||
DrawFinalPass(IRenderer* renderer, LightCullingPass* lightCullingPass, CubeMapPass* cubeMapPass, SSAOPass* ssaoPass, GLuint* depthBuffer);
|
||||
DrawFinalPass(IRenderer* renderer, LightCullingPass* lightCullingPass, CubeMapPass* cubeMapPass, SSAOPass* ssaoPass);
|
||||
~DrawFinalPass() { }
|
||||
void InitializeTextures();
|
||||
void InitializeFrameBuffers();
|
||||
@@ -26,20 +26,17 @@ public:
|
||||
|
||||
//Return the texture that is used in later stages to apply the bloom effect
|
||||
GLuint BloomTexture() const { return m_BloomTexture; }
|
||||
GLuint BloomTextureLowRes() const { return m_BloomTextureLowRes; }
|
||||
//Return the texture with diffuse and lighting of the scene.
|
||||
GLuint SceneTexture() const { return m_SceneTexture; }
|
||||
GLuint SceneTextureLowRes() const { return m_SceneTextureLowRes; }
|
||||
//Return the framebuffer used in the scene rendering stage.
|
||||
FrameBuffer* FinalPassFrameBuffer() { return &m_FinalPassFrameBuffer; }
|
||||
FrameBuffer* FinalPassFrameBufferLowRes() { return &m_FinalPassFrameBufferLowRes; }
|
||||
|
||||
private:
|
||||
void DrawSprites(std::list<std::shared_ptr<RenderJob>>&jobs, RenderScene& scene);
|
||||
void DrawModelRenderQueues(std::list<std::shared_ptr<RenderJob>>& jobs, RenderScene& scene);
|
||||
void DrawShieldToStencilBuffer(std::list<std::shared_ptr<RenderJob>>& jobs, RenderScene& scene);
|
||||
void DrawModelRenderQueuesWithShieldCheck(std::list<std::shared_ptr<RenderJob>>& jobs, RenderScene& scene);
|
||||
void DrawShieldedModelRenderQueue(std::list<std::shared_ptr<RenderJob>>& jobs, RenderScene& scene);
|
||||
void DrawToDepthBuffer(std::list<std::shared_ptr<RenderJob>>& jobs, RenderScene& scene);
|
||||
void DrawToDepthStencilBuffer(std::list<std::shared_ptr<RenderJob>>& jobs, RenderScene& scene);
|
||||
|
||||
void BindExplosionUniforms(GLuint shaderHandle, std::shared_ptr<ExplosionEffectJob>& job, RenderScene& scene);
|
||||
void BindModelUniforms(GLuint shaderHandle, std::shared_ptr<ModelJob>& job, RenderScene& scene);
|
||||
@@ -54,13 +51,11 @@ private:
|
||||
Texture* m_ErrorTexture;
|
||||
|
||||
FrameBuffer m_FinalPassFrameBuffer;
|
||||
FrameBuffer m_FinalPassFrameBufferLowRes;
|
||||
FrameBuffer m_ShieldDepthFrameBuffer;
|
||||
GLuint m_BloomTexture;
|
||||
GLuint m_SceneTexture;
|
||||
GLuint m_BloomTextureLowRes;
|
||||
GLuint m_SceneTextureLowRes;
|
||||
GLuint* m_DepthBuffer;
|
||||
GLuint m_DepthBufferLowRes;
|
||||
GLuint m_DepthBuffer;
|
||||
GLuint m_ShieldBuffer;
|
||||
GLuint m_CubeMapTexture;
|
||||
|
||||
//maqke this component based i guess?
|
||||
@@ -76,16 +71,27 @@ private:
|
||||
ShaderProgram* m_ExplosionEffectSplatMapProgram;
|
||||
ShaderProgram* m_SpriteProgram;
|
||||
ShaderProgram* m_ForwardPlusSplatMapProgram;
|
||||
ShaderProgram* m_ShieldToStencilProgram;
|
||||
ShaderProgram* m_FillDepthBufferProgram;
|
||||
ShaderProgram* m_FillDepthStencilBufferProgram;
|
||||
|
||||
ShaderProgram* m_ForwardPlusShieldCheckProgram;
|
||||
ShaderProgram* m_ExplosionEffectShieldCheckProgram;
|
||||
ShaderProgram* m_ExplosionEffectSplatMapShieldCheckProgram;
|
||||
ShaderProgram* m_SpriteShieldCheckProgram;
|
||||
ShaderProgram* m_ForwardPlusSplatMapShieldCheckProgram;
|
||||
|
||||
|
||||
|
||||
ShaderProgram* m_ForwardPlusSkinnedProgram;
|
||||
ShaderProgram* m_ExplosionEffectSkinnedProgram;
|
||||
ShaderProgram* m_ExplosionEffectSplatMapSkinnedProgram;
|
||||
ShaderProgram* m_ForwardPlusSplatMapSkinnedProgram;
|
||||
ShaderProgram* m_ShieldToStencilSkinnedProgram;
|
||||
ShaderProgram* m_FillDepthBufferSkinnedProgram;
|
||||
ShaderProgram* m_FillDepthStencilBufferSkinnedProgram;
|
||||
|
||||
ShaderProgram* m_ForwardPlusSkinnedShieldCheckProgram;
|
||||
ShaderProgram* m_ExplosionEffectSkinnedShieldCheckProgram;
|
||||
ShaderProgram* m_ExplosionEffectSplatMapSkinnedShieldCheckProgram;
|
||||
ShaderProgram* m_ForwardPlusSplatMapSkinnedShieldCheckProgram;
|
||||
ShaderProgram* m_FillDepthBufferSkinnedShieldCheckProgram;
|
||||
};
|
||||
|
||||
#endif
|
||||
@@ -15,8 +15,8 @@
|
||||
|
||||
struct ExplosionEffectJob : ModelJob
|
||||
{
|
||||
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)
|
||||
ExplosionEffectJob(ComponentWrapper explosionEffectComponent, ::Model* model, Camera* camera, glm::mat4 matrix, ::RawModel::MaterialProperties matGroup, ComponentWrapper modelComponent, ::World* world, glm::vec4 fillColor, float fillPercentage, bool isShielded)
|
||||
: ModelJob(model, camera, matrix, matGroup, modelComponent, world, fillColor, fillPercentage, isShielded)
|
||||
{
|
||||
ExplosionOrigin = (glm::vec3)explosionEffectComponent["ExplosionOrigin"];
|
||||
TimeSinceDeath = (double)explosionEffectComponent["TimeSinceDeath"];
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
|
||||
struct ModelJob : RenderJob
|
||||
{
|
||||
ModelJob(Model* model, Camera* camera, glm::mat4 matrix, ::RawModel::MaterialProperties matProp, 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, bool isShielded)
|
||||
: RenderJob()
|
||||
{
|
||||
Model = model;
|
||||
@@ -117,7 +117,7 @@ struct ModelJob : RenderJob
|
||||
|
||||
FillColor = fillColor;
|
||||
FillPercentage = fillPercentage;
|
||||
|
||||
IsShielded = isShielded;
|
||||
|
||||
if (model->IsSkinned()) {
|
||||
Skeleton = Model->m_RawModel->m_Skeleton;
|
||||
@@ -181,7 +181,7 @@ struct ModelJob : RenderJob
|
||||
|
||||
glm::vec4 FillColor = glm::vec4(0);
|
||||
float FillPercentage = 0.0;
|
||||
|
||||
bool IsShielded;
|
||||
void CalculateHash() override
|
||||
{
|
||||
Hash = ShaderID << 20 + ModelID << 10 + TextureID;
|
||||
|
||||
@@ -24,7 +24,6 @@ struct RenderScene
|
||||
std::list<std::shared_ptr<RenderJob>> OpaqueObjects;
|
||||
std::list<std::shared_ptr<RenderJob>> TransparentObjects;
|
||||
std::list<std::shared_ptr<RenderJob>> OpaqueShieldedObjects;
|
||||
std::list<std::shared_ptr<RenderJob>> TransparentShieldedObjects;
|
||||
std::list<std::shared_ptr<RenderJob>> ShieldObjects;
|
||||
std::list<std::shared_ptr<RenderJob>> SpriteJob;
|
||||
std::list<std::shared_ptr<RenderJob>> PointLight;
|
||||
@@ -41,7 +40,6 @@ struct RenderScene
|
||||
Jobs.OpaqueObjects.clear();
|
||||
Jobs.TransparentObjects.clear();
|
||||
Jobs.OpaqueShieldedObjects.clear();
|
||||
Jobs.TransparentShieldedObjects.clear();
|
||||
Jobs.ShieldObjects.clear();
|
||||
Jobs.SpriteJob.clear();
|
||||
Jobs.DirectionalLight.clear();
|
||||
|
||||
@@ -2,11 +2,15 @@
|
||||
#define Events_DashAbility_h__
|
||||
|
||||
#include "Core/Event.h"
|
||||
#include "Core/EntityWrapper.h"
|
||||
|
||||
namespace Events
|
||||
{
|
||||
|
||||
struct DashAbility : public Event { };
|
||||
struct DashAbility : public Event
|
||||
{
|
||||
EntityID Player;
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
|
||||
+3
-3
@@ -13,13 +13,13 @@
|
||||
#include "Input/KeyboardInputHandler.h"
|
||||
#include "Input/MouseInputHandler.h"
|
||||
#include "Core/EKeyDown.h"
|
||||
#include "Core/EntityFilePreprocessor.h"
|
||||
#include "Core/EntityXMLFilePreprocessor.h"
|
||||
#include "Core/SystemPipeline.h"
|
||||
#include "Systems/ExplosionEffectSystem.h"
|
||||
#include "Editor/EditorSystem.h"
|
||||
#include "Core/EntityFile.h"
|
||||
#include "Core/EntityXMLFile.h"
|
||||
#include "Rendering/RenderSystem.h"
|
||||
#include "Core/EntityFileParser.h"
|
||||
#include "Core/EntityXMLFileParser.h"
|
||||
#include "Core/Octree.h"
|
||||
#include "Rendering/Font.h"
|
||||
#include "Systems/InterpolationSystem.h"
|
||||
|
||||
@@ -0,0 +1,17 @@
|
||||
#ifndef AbilityCooldownHUDSystem_h__
|
||||
#define AbilityCooldownHUDSystem_h__
|
||||
|
||||
#include "../../Engine/Core/System.h"
|
||||
#include "../../Engine/GLM.h"
|
||||
|
||||
class AbilityCooldownHUDSystem : public ImpureSystem
|
||||
{
|
||||
public:
|
||||
AbilityCooldownHUDSystem(SystemParams params)
|
||||
: System(params)
|
||||
{ }
|
||||
|
||||
virtual void Update(double dt) override;
|
||||
};
|
||||
|
||||
#endif
|
||||
@@ -4,7 +4,7 @@
|
||||
#include "Core/System.h"
|
||||
#include "Core/Transform.h"
|
||||
#include "Core/ResourceManager.h"
|
||||
#include "Core/EntityFileParser.h"
|
||||
#include "Core/EntityFile.h"
|
||||
#include "Core/EPickupSpawned.h"
|
||||
#include "Core/EAmmoPickup.h"
|
||||
#include "Engine/Collision/ETrigger.h"
|
||||
@@ -20,6 +20,11 @@ public:
|
||||
private:
|
||||
EventRelay<AmmoPickupSystem, Events::TriggerTouch> m_ETriggerTouch;
|
||||
bool OnTriggerTouch(Events::TriggerTouch& e);
|
||||
EventRelay<AmmoPickupSystem, Events::TriggerLeave> m_ETriggerLeave;
|
||||
bool OnTriggerLeave(Events::TriggerLeave& e);
|
||||
|
||||
EventRelay<AmmoPickupSystem, Events::AmmoPickup> m_EAmmoPickup;
|
||||
bool OnAmmoPickup(Events::AmmoPickup& e);
|
||||
|
||||
struct NewAmmoPickup {
|
||||
glm::vec3 Pos;
|
||||
@@ -29,5 +34,11 @@ private:
|
||||
EntityID parentID;
|
||||
};
|
||||
std::vector<NewAmmoPickup> m_ETriggerTouchVector;
|
||||
struct EntityAtMaxValuePickupStruct {
|
||||
EntityWrapper player;
|
||||
EntityWrapper trigger;
|
||||
};
|
||||
std::vector<EntityAtMaxValuePickupStruct> m_PickupAtMaximum;
|
||||
void DoPickup(EntityWrapper &player, EntityWrapper &trigger);
|
||||
};
|
||||
#endif
|
||||
|
||||
@@ -0,0 +1,19 @@
|
||||
#ifndef BoostIconsHUDSystem_h__
|
||||
#define BoostIconsHUDSystem_h__
|
||||
|
||||
#include "../../Engine/Core/System.h"
|
||||
#include "../../Engine/GLM.h"
|
||||
|
||||
class BoostIconsHUDSystem : public PureSystem
|
||||
{
|
||||
public:
|
||||
BoostIconsHUDSystem(SystemParams params)
|
||||
: System(params)
|
||||
, PureSystem("BoostIconsHUD")
|
||||
{ }
|
||||
|
||||
virtual void UpdateComponent(EntityWrapper& entity, ComponentWrapper& capturePoint, double dt) override;
|
||||
|
||||
};
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,21 @@
|
||||
#ifndef BoostSystem_h__
|
||||
#define BoostSystem_h__
|
||||
|
||||
#include "Core/System.h"
|
||||
#include "Core/ResourceManager.h"
|
||||
#include "Core/EntityFile.h"
|
||||
#include "Core/EPlayerDamage.h"
|
||||
#include "Common.h"
|
||||
|
||||
class BoostSystem : public System
|
||||
{
|
||||
public:
|
||||
BoostSystem(SystemParams params);
|
||||
|
||||
private:
|
||||
EventRelay<BoostSystem, Events::PlayerDamage> m_EPlayerDamage;
|
||||
bool OnPlayerDamage(Events::PlayerDamage& e);
|
||||
|
||||
std::string DetermineClass(EntityWrapper player);
|
||||
};
|
||||
#endif
|
||||
@@ -0,0 +1,30 @@
|
||||
#ifndef CapturePointArrowHUDSystem_h__
|
||||
#define CapturePointArrowHUDSystem_h__
|
||||
|
||||
#include <GLFW/glfw3.h>
|
||||
#include <glm/common.hpp>
|
||||
#include <glm/gtx/vector_angle.hpp>
|
||||
|
||||
#include "Common.h"
|
||||
#include "Core/System.h"
|
||||
#include "Core/Transform.h"
|
||||
#include "Core/ECaptured.h"
|
||||
|
||||
|
||||
class CapturePointArrowHUDSystem : public ImpureSystem
|
||||
{
|
||||
public:
|
||||
CapturePointArrowHUDSystem(SystemParams params);
|
||||
|
||||
virtual void Update(double dt) override;
|
||||
|
||||
private:
|
||||
EventRelay<CapturePointArrowHUDSystem, Events::Captured> m_ECapturedEvent;
|
||||
bool OnCapturePointCaptured(Events::Captured& e);
|
||||
|
||||
bool m_InitialtargetsSet = false;
|
||||
glm::vec3 m_RedTeamCurrentTarget;
|
||||
glm::vec3 m_BlueTeamCurrentTarget;
|
||||
};
|
||||
|
||||
#endif
|
||||
@@ -7,7 +7,7 @@
|
||||
|
||||
#include "Common.h"
|
||||
#include "Core/System.h"
|
||||
#include "Engine/Collision/ETrigger.h"
|
||||
#include "Collision/ETrigger.h"
|
||||
|
||||
class CapturePointHUDSystem : public ImpureSystem
|
||||
{
|
||||
|
||||
@@ -42,9 +42,9 @@ private:
|
||||
int m_NumberOfCapturePoints = 0;
|
||||
std::map<int, EntityWrapper> m_CapturePointNumberToEntityMap;
|
||||
|
||||
//std::vector<ComponentWrapper>
|
||||
|
||||
bool m_ResetTimers = false;
|
||||
bool m_RecentlyCapturedNeedNextCapturePointNow = false;
|
||||
Events::Captured m_CapturedEvent;
|
||||
|
||||
//vectors which will keep track of enter/leave changes
|
||||
std::vector<std::tuple<EntityWrapper, EntityWrapper>> m_ETriggerTouchVector;
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
#include "Core/System.h"
|
||||
#include "Core/Transform.h"
|
||||
#include "Core/ResourceManager.h"
|
||||
#include "Core/EntityFileParser.h"
|
||||
#include "Core/EntityFile.h"
|
||||
#include "Core/EPlayerDamage.h"
|
||||
#include "Common.h"
|
||||
#include <tuple>
|
||||
|
||||
@@ -0,0 +1,19 @@
|
||||
#include "Common.h"
|
||||
#include "Core/System.h"
|
||||
|
||||
class FloatingEffectSystem : public PureSystem
|
||||
{
|
||||
public:
|
||||
FloatingEffectSystem(SystemParams params)
|
||||
: System(params)
|
||||
, PureSystem("FloatingEffect")
|
||||
{ }
|
||||
|
||||
virtual void UpdateComponent(EntityWrapper& entity, ComponentWrapper& component, double dt) override
|
||||
{
|
||||
ComponentWrapper& transform = m_World->GetComponent(component.EntityID, "Transform");
|
||||
(double&)component["Time"] += dt;
|
||||
(glm::vec3&)transform["Position"] = (float)(double)component["Amplitude"] * glm::sin((glm::two_pi<float>() / (float)(double)component["Period"]) * (float)(double)component["Time"]) * (glm::vec3)component["Axis"];
|
||||
|
||||
}
|
||||
};
|
||||
@@ -4,12 +4,11 @@
|
||||
#include "Core/System.h"
|
||||
#include "Core/Transform.h"
|
||||
#include "Core/ResourceManager.h"
|
||||
#include "Core/EntityFileParser.h"
|
||||
#include "Core/EntityFile.h"
|
||||
#include "Core/EPickupSpawned.h"
|
||||
#include "Core/EPlayerHealthPickup.h"
|
||||
#include "Engine/Collision/ETrigger.h"
|
||||
#include "Common.h"
|
||||
#include <tuple>
|
||||
|
||||
class PickupSpawnSystem : public ImpureSystem
|
||||
{
|
||||
@@ -21,6 +20,8 @@ public:
|
||||
private:
|
||||
EventRelay<PickupSpawnSystem, Events::TriggerTouch> m_ETriggerTouch;
|
||||
bool OnTriggerTouch(Events::TriggerTouch& e);
|
||||
EventRelay<PickupSpawnSystem, Events::TriggerLeave> m_ETriggerLeave;
|
||||
bool OnTriggerLeave(Events::TriggerLeave& e);
|
||||
|
||||
struct NewHealthPickup {
|
||||
glm::vec3 Pos;
|
||||
@@ -30,5 +31,11 @@ private:
|
||||
EntityID parentID;
|
||||
};
|
||||
std::vector<NewHealthPickup> m_ETriggerTouchVector;
|
||||
struct EntityAtMaxValuePickupStruct {
|
||||
EntityWrapper player;
|
||||
EntityWrapper trigger;
|
||||
};
|
||||
std::vector<EntityAtMaxValuePickupStruct> m_PickupAtMaximum;
|
||||
void DoPickup(EntityWrapper &player, EntityWrapper &trigger);
|
||||
};
|
||||
#endif
|
||||
|
||||
@@ -6,11 +6,9 @@
|
||||
#include "GLM.h"
|
||||
#include "Rendering/ESetCamera.h"
|
||||
#include "Core/ConfigFile.h"
|
||||
|
||||
#include "Core/EntityFile.h"
|
||||
#include "Core/EntityFileParser.h"
|
||||
|
||||
#include "Core/EPlayerDeath.h"
|
||||
#include "Core/EEntityDeleted.h"
|
||||
|
||||
class PlayerDeathSystem : public ImpureSystem
|
||||
{
|
||||
@@ -20,8 +18,12 @@ public:
|
||||
virtual void Update(double dt) override;
|
||||
|
||||
private:
|
||||
EntityWrapper m_LocalPlayerDeathEffect;
|
||||
|
||||
EventRelay<PlayerDeathSystem, Events::PlayerDeath> m_OnPlayerDeath;
|
||||
bool OnPlayerDeath(Events::PlayerDeath& e);
|
||||
EventRelay<PlayerDeathSystem, Events::EntityDeleted> m_EEntityDeleted;
|
||||
bool OnEntityDeleted(Events::EntityDeleted& e);
|
||||
|
||||
void createDeathEffect(EntityWrapper player);
|
||||
|
||||
|
||||
@@ -6,9 +6,7 @@
|
||||
#include <imgui/imgui.h>
|
||||
#include "Events/EDoubleJump.h"
|
||||
#include "../Engine/Sound/EPlaySoundOnEntity.h"
|
||||
|
||||
#include "Core/EntityFile.h"
|
||||
#include "Core/EntityFileParser.h"
|
||||
|
||||
class PlayerMovementSystem : public ImpureSystem
|
||||
{
|
||||
@@ -41,6 +39,8 @@ private:
|
||||
bool OnPlayerSpawned(Events::PlayerSpawned& e);
|
||||
EventRelay<PlayerMovementSystem, Events::DoubleJump> m_EDoubleJump;
|
||||
bool PlayerMovementSystem::OnDoubleJump(Events::DoubleJump & e);
|
||||
EventRelay<PlayerMovementSystem, Events::DashAbility> m_EDashAbility;
|
||||
bool PlayerMovementSystem::OnDashAbility(Events::DashAbility & e);
|
||||
|
||||
void updateMovementControllers(double dt);
|
||||
void updateVelocity(EntityWrapper player, double dt);
|
||||
|
||||
@@ -13,8 +13,6 @@ public:
|
||||
PlayerSpawnSystem(SystemParams params);
|
||||
|
||||
virtual void Update(double dt) override;
|
||||
|
||||
static void SetRespawnTime(float respawnTime) { m_RespawnTime = respawnTime; };
|
||||
|
||||
private:
|
||||
struct SpawnRequest
|
||||
@@ -31,8 +29,8 @@ private:
|
||||
//EntityWrapper ID -> Player ID.
|
||||
std::map<EntityID, int> m_PlayerIDs;
|
||||
|
||||
static float m_RespawnTime;
|
||||
float m_Timer;
|
||||
float m_ForcedRespawnTime;
|
||||
bool m_DbgConfigForceRespawn;
|
||||
|
||||
EventRelay<PlayerSpawnSystem, Events::InputCommand> m_OnInputCommand;
|
||||
bool OnInputCommand(Events::InputCommand& e);
|
||||
|
||||
@@ -7,8 +7,7 @@
|
||||
#include "Core/System.h"
|
||||
#include "Events/ESpawnerSpawn.h"
|
||||
#include "Core/Transform.h"
|
||||
#include "Core/ResourceManager.h"
|
||||
#include "Core/EntityFileParser.h"
|
||||
#include "Core/EntityFile.h"
|
||||
|
||||
class SpawnerSystem : public System
|
||||
{
|
||||
|
||||
@@ -1,37 +1,33 @@
|
||||
#ifndef AssaultWeaponBehaviour_h__
|
||||
#define AssaultWeaponBehaviour_h__
|
||||
|
||||
#include "Sound/EPlaySoundOnEntity.h"
|
||||
#include "Collision/Collision.h"
|
||||
#include "Rendering/AnimationSystem.h"
|
||||
#include "Core/ConfigFile.h"
|
||||
#include "WeaponBehaviour.h"
|
||||
#include "../SpawnerSystem.h"
|
||||
#include "Core/EPlayerDamage.h"
|
||||
#include "Core/EShoot.h"
|
||||
|
||||
|
||||
class AssaultWeaponBehaviour : public WeaponBehaviour
|
||||
class AssaultWeaponBehaviour : public WeaponBehaviour<AssaultWeaponBehaviour>
|
||||
{
|
||||
public:
|
||||
AssaultWeaponBehaviour(SystemParams systemParams, IRenderer* renderer, Octree<EntityAABB>* collisionOctree, EntityWrapper weaponEntity);
|
||||
|
||||
virtual void Fire() override;
|
||||
virtual void CeaseFire() override;
|
||||
virtual void Reload() override;
|
||||
AssaultWeaponBehaviour(SystemParams systemParams, IRenderer* renderer, Octree<EntityAABB>* collisionOctree)
|
||||
: WeaponBehaviour(systemParams, "AssaultWeapon", renderer, collisionOctree)
|
||||
{ }
|
||||
|
||||
virtual void Update(double dt) override;
|
||||
protected:
|
||||
virtual void OnPrimaryFire(WeaponInfo& wi) override;
|
||||
virtual void OnCeasePrimaryFire(WeaponInfo& wi) override;
|
||||
virtual void OnReload(WeaponInfo& wi) override;
|
||||
|
||||
private:
|
||||
EntityWrapper m_FirstPersonModel;
|
||||
EntityWrapper m_ThirdPersonModel;
|
||||
// State
|
||||
bool m_Firing = false;
|
||||
bool m_Reloading = false;
|
||||
double m_ReloadTimer = 0.0;
|
||||
EntityWrapper m_FirstPersonReloadImpersonator;
|
||||
EntityWrapper m_ThirdPersonReloadImpersonator;
|
||||
double m_TimeSinceLastFire = 0.0;
|
||||
|
||||
EventRelay<WeaponBehaviour, Events::AnimationComplete> m_EAnimationComplete;
|
||||
bool OnAnimationComplete(Events::AnimationComplete& e);
|
||||
EntityWrapper m_FirstPersonReloadImpostor;
|
||||
|
||||
bool hasAmmo();
|
||||
void fireRound();
|
||||
@@ -47,3 +43,5 @@ private:
|
||||
bool shoot(double damage);
|
||||
void showHitMarker();
|
||||
};
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,38 @@
|
||||
#include "WeaponBehaviour.h"
|
||||
#include "Collision/Collision.h"
|
||||
#include "Core/EPlayerDamage.h"
|
||||
#include "Rendering/ESetCamera.h"
|
||||
|
||||
class DefenderWeaponBehaviour : public WeaponBehaviour<DefenderWeaponBehaviour>
|
||||
{
|
||||
public:
|
||||
DefenderWeaponBehaviour(SystemParams systemParams, IRenderer* renderer, Octree<EntityAABB>* collisionOctree)
|
||||
: System(systemParams)
|
||||
, WeaponBehaviour(systemParams, "DefenderWeapon", renderer, collisionOctree)
|
||||
, m_RandomEngine(m_RandomDevice())
|
||||
{
|
||||
EVENT_SUBSCRIBE_MEMBER(m_ESetCamera, &DefenderWeaponBehaviour::OnSetCamera);
|
||||
}
|
||||
|
||||
void UpdateComponent(EntityWrapper& entity, ComponentWrapper& cWeapon, double dt) override;
|
||||
void UpdateWeapon(WeaponInfo& wi, double dt) override;
|
||||
void OnPrimaryFire(WeaponInfo& wi) override;
|
||||
void OnCeasePrimaryFire(WeaponInfo& wi) override;
|
||||
bool OnInputCommand(WeaponInfo& wi, const Events::InputCommand& e) override;
|
||||
|
||||
private:
|
||||
std::random_device m_RandomDevice;
|
||||
std::mt19937 m_RandomEngine;
|
||||
EntityWrapper m_CurrentCamera;
|
||||
|
||||
EventRelay<DefenderWeaponBehaviour, Events::SetCamera> m_ESetCamera;
|
||||
bool OnSetCamera(const Events::SetCamera& e);
|
||||
|
||||
// Weapon functions
|
||||
void fireShell(WeaponInfo& wi);
|
||||
void dealDamage(WeaponInfo& wi, glm::vec3 direction, double damage);
|
||||
|
||||
// Utility
|
||||
float traceRayDistance(glm::vec3 origin, glm::vec3 direction);
|
||||
Camera cameraFromEntity(EntityWrapper camera);
|
||||
};
|
||||
@@ -5,30 +5,177 @@
|
||||
#include "Rendering/IRenderer.h"
|
||||
#include "Core/Octree.h"
|
||||
#include "Collision/EntityAABB.h"
|
||||
#include "Input/EInputCommand.h"
|
||||
#include "Systems/SpawnerSystem.h"
|
||||
|
||||
class WeaponBehaviour : public System
|
||||
template <typename ETYPE>
|
||||
class WeaponBehaviour : public PureSystem
|
||||
{
|
||||
friend class WeaponSystem;
|
||||
|
||||
public:
|
||||
WeaponBehaviour(SystemParams systemParams, IRenderer* renderer, Octree<EntityAABB>* collisionOctree, EntityWrapper player)
|
||||
: System(systemParams)
|
||||
WeaponBehaviour(SystemParams params, std::string componentType, IRenderer* renderer, Octree<EntityAABB>* collisionOctree)
|
||||
: System(params)
|
||||
, PureSystem(componentType)
|
||||
, m_Renderer(renderer)
|
||||
, m_CollisionOctree(collisionOctree)
|
||||
, m_Player(player)
|
||||
{ }
|
||||
{
|
||||
EVENT_SUBSCRIBE_MEMBER(m_EInputCommand, &WeaponBehaviour::_OnInputCommand)
|
||||
}
|
||||
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) { }
|
||||
virtual void UpdateComponent(EntityWrapper& entity, ComponentWrapper& component, double dt) override
|
||||
{
|
||||
auto weapon = getActiveWeapon(entity);
|
||||
if (!weapon) {
|
||||
return;
|
||||
} else {
|
||||
UpdateWeapon(*weapon, dt);
|
||||
}
|
||||
}
|
||||
|
||||
protected:
|
||||
struct WeaponInfo
|
||||
{
|
||||
std::string WeaponComponent;
|
||||
EntityWrapper Player;
|
||||
EntityWrapper WeaponEntity;
|
||||
EntityWrapper FirstPersonEntity;
|
||||
EntityWrapper ThirdPersonEntity;
|
||||
ComponentWrapper GetComponent() { return WeaponEntity[WeaponComponent]; }
|
||||
};
|
||||
|
||||
IRenderer* m_Renderer;
|
||||
Octree<EntityAABB>* m_CollisionOctree;
|
||||
EntityWrapper m_Player;
|
||||
std::unordered_map<EntityWrapper, WeaponInfo> m_ActiveWeapons;
|
||||
|
||||
virtual void UpdateWeapon(WeaponInfo& wi, double dt) { }
|
||||
virtual void OnPrimaryFire(WeaponInfo& wi) { }
|
||||
virtual void OnCeasePrimaryFire(WeaponInfo& wi) { }
|
||||
virtual void OnReload(WeaponInfo& wi) { }
|
||||
virtual bool OnInputCommand(WeaponInfo& wi, const Events::InputCommand& e) { return false; }
|
||||
|
||||
private:
|
||||
EventRelay<ETYPE, Events::InputCommand> m_EInputCommand;
|
||||
bool _OnInputCommand(const Events::InputCommand& e)
|
||||
{
|
||||
EntityWrapper player = e.Player;
|
||||
if (e.PlayerID == -1) {
|
||||
player = LocalPlayer;
|
||||
}
|
||||
|
||||
// Make sure the player is alive
|
||||
if (!player.Valid()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// Make sure the player has this weapon
|
||||
auto weapon = getWeaponComponent(player);
|
||||
if (!weapon) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// Weapon selection
|
||||
if (e.Command == "SelectWeapon") {
|
||||
if (static_cast<ComponentInfo::EnumType>(e.Value) == static_cast<ComponentInfo::EnumType>((*weapon)["Slot"])) {
|
||||
selectWeapon(player);
|
||||
}
|
||||
}
|
||||
|
||||
// Only handle weapon actions if the weapon is active
|
||||
auto activeWeapon = getActiveWeapon(player);
|
||||
if (!activeWeapon) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// Fire
|
||||
if (e.Command == "PrimaryFire") {
|
||||
if (e.Value > 0) {
|
||||
OnPrimaryFire(*activeWeapon);
|
||||
} else {
|
||||
OnCeasePrimaryFire(*activeWeapon);
|
||||
}
|
||||
}
|
||||
|
||||
// Reload
|
||||
if (e.Command == "Reload" && e.Value != 0) {
|
||||
OnReload(*activeWeapon);
|
||||
}
|
||||
|
||||
return OnInputCommand(*activeWeapon, e);
|
||||
}
|
||||
|
||||
boost::optional<ComponentWrapper> getWeaponComponent(EntityWrapper player)
|
||||
{
|
||||
if (!player.HasComponent(m_ComponentType)) {
|
||||
return boost::none;
|
||||
}
|
||||
|
||||
return player[m_ComponentType];
|
||||
}
|
||||
|
||||
boost::optional<WeaponInfo&> getActiveWeapon(EntityWrapper player)
|
||||
{
|
||||
auto it = m_ActiveWeapons.find(player);
|
||||
if (it == m_ActiveWeapons.end()) {
|
||||
return boost::none;
|
||||
}
|
||||
WeaponInfo& activeWeapon = it->second;
|
||||
|
||||
if (!activeWeapon.FirstPersonEntity.Valid() && !activeWeapon.ThirdPersonEntity.Valid()) {
|
||||
return boost::none;
|
||||
}
|
||||
|
||||
return activeWeapon;
|
||||
}
|
||||
|
||||
void selectWeapon(EntityWrapper player)
|
||||
{
|
||||
// Find the weapon attachments matching the weapon type
|
||||
std::vector<EntityWrapper> weaponAttachments = player.ChildrenWithComponent("WeaponAttachment");
|
||||
EntityWrapper firstPersonAttachment;
|
||||
EntityWrapper thirdPersonAttachment;
|
||||
for (auto& attachment : weaponAttachments) {
|
||||
ComponentWrapper cWeaponAttachment = attachment["WeaponAttachment"];
|
||||
if ((std::string&)cWeaponAttachment["Weapon"] == m_ComponentType) {
|
||||
ComponentWrapper::SubscriptProxy person = cWeaponAttachment["Person"];
|
||||
if ((ComponentInfo::EnumType)person == person.Enum("FirstPerson")) {
|
||||
firstPersonAttachment = attachment;
|
||||
} else if ((ComponentInfo::EnumType)person == person.Enum("ThirdPerson")) {
|
||||
thirdPersonAttachment = attachment;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!firstPersonAttachment.Valid() && !thirdPersonAttachment.Valid()) {
|
||||
LOG_WARNING("No weapon attachment found for %s of player #%i", m_ComponentType.c_str(), player.ID);
|
||||
return;
|
||||
}
|
||||
|
||||
// Purge other weapon entities
|
||||
for (auto& attachment : weaponAttachments) {
|
||||
//if (attachment == firstPersonAttachment || attachment == thirdPersonAttachment) {
|
||||
// continue;
|
||||
//}
|
||||
attachment.DeleteChildren();
|
||||
}
|
||||
|
||||
// Spawn the weapon(s)
|
||||
EntityWrapper firstPersonWeapon;
|
||||
EntityWrapper thirdPersonWeapon;
|
||||
if (firstPersonAttachment.Valid()) {
|
||||
firstPersonWeapon = SpawnerSystem::Spawn(firstPersonAttachment, firstPersonAttachment);
|
||||
}
|
||||
if (thirdPersonAttachment.Valid()) {
|
||||
thirdPersonWeapon = SpawnerSystem::Spawn(thirdPersonAttachment, thirdPersonAttachment);
|
||||
}
|
||||
|
||||
m_ActiveWeapons[player].WeaponComponent = m_ComponentType;
|
||||
m_ActiveWeapons[player].Player = player;
|
||||
m_ActiveWeapons[player].WeaponEntity = player;
|
||||
m_ActiveWeapons[player].FirstPersonEntity = firstPersonWeapon;
|
||||
m_ActiveWeapons[player].ThirdPersonEntity = thirdPersonWeapon;
|
||||
}
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
@@ -9,8 +9,8 @@
|
||||
#include "Core/EShoot.h"
|
||||
#include "Core/EPlayerSpawned.h"
|
||||
#include "Input/EInputCommand.h"
|
||||
#include "Core/EntityFile.h"
|
||||
#include "Core/EntityFileParser.h"
|
||||
#include "Core/EntityXMLFile.h"
|
||||
#include "Core/EntityXMLFileParser.h"
|
||||
#include "Core/Octree.h"
|
||||
#include "Collision/EntityAABB.h"
|
||||
#include "Systems/SpawnerSystem.h"
|
||||
|
||||
@@ -4,7 +4,7 @@ LoadMap=
|
||||
; if true -> Pool allocation is not used when calling Allocate/Free, just use regular dynamic allocation.
|
||||
; if false -> Use pool allocation.
|
||||
DisableMemoryPool=false
|
||||
RespawnTime = 8.0
|
||||
RespawnTime = -1.0
|
||||
EditorEnabled=false
|
||||
OutOfBodyExperience=false
|
||||
|
||||
@@ -68,5 +68,17 @@ Contrast=1.5
|
||||
Intensity=1.0
|
||||
NumSamples=24
|
||||
NumTurns=17
|
||||
NumIterations=13
|
||||
TextureQuality=0
|
||||
NumIterations=9
|
||||
TextureQuality=0
|
||||
|
||||
[GLOW]
|
||||
Quality=3;
|
||||
|
||||
[GLOW1]
|
||||
NumIterations=5
|
||||
|
||||
[GLOW2]
|
||||
NumIterations=9
|
||||
|
||||
[GLOW3]
|
||||
NumIterations=13
|
||||
@@ -35,7 +35,12 @@
|
||||
<xs:include schemaLocation="Components/AmmoPickup.xsd"/>
|
||||
<xs:include schemaLocation="Components/AnimationOffset.xsd"/>
|
||||
<xs:include schemaLocation="Components/DashAbility.xsd"/>
|
||||
<xs:include schemaLocation="Components/ShieldAbility.xsd"/>
|
||||
<xs:include schemaLocation="Components/SprintAbility.xsd"/>
|
||||
<xs:include schemaLocation="Components/AssaultWeapon.xsd"/>
|
||||
<xs:include schemaLocation="Components/BoostAssault.xsd"/>
|
||||
<xs:include schemaLocation="Components/BoostDefender.xsd"/>
|
||||
<xs:include schemaLocation="Components/BoostSniper.xsd"/>
|
||||
<xs:include schemaLocation="Components/Shield.xsd"/>
|
||||
<xs:include schemaLocation="Components/Sprite.xsd"/>
|
||||
<xs:include schemaLocation="Components/Shielded.xsd"/>
|
||||
@@ -46,4 +51,12 @@
|
||||
<xs:include schemaLocation="Components/Page.xsd"/>
|
||||
<xs:include schemaLocation="Components/SpriteIndicator.xsd"/>
|
||||
<xs:include schemaLocation="Components/Button.xsd"/>
|
||||
<xs:include schemaLocation="Components/AbilityCooldownHUD.xsd"/>
|
||||
<xs:include schemaLocation="Components/DoubleJump.xsd"/>
|
||||
<xs:include schemaLocation="Components/WeaponAttachment.xsd"/>
|
||||
<xs:include schemaLocation="Components/DefenderWeapon.xsd"/>
|
||||
<xs:include schemaLocation="Components/CapturePointGameMode.xsd"/>
|
||||
<xs:include schemaLocation="Components/CapturePointArrowHUD.xsd"/>
|
||||
<xs:include schemaLocation="Components/FloatingEffect.xsd"/>
|
||||
<xs:include schemaLocation="Components/BoostIconsHUD.xsd"/>
|
||||
</xs:schema>
|
||||
@@ -0,0 +1,3 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
|
||||
<AbilityCooldownHUD xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="AbilityCooldownHUD.xsd">
|
||||
</AbilityCooldownHUD>
|
||||
@@ -0,0 +1,9 @@
|
||||
<?xml version="1.0"?>
|
||||
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:t="types">
|
||||
<xs:import schemaLocation="../Types.xsd" namespace="types"/>
|
||||
<xs:element name="AbilityCooldownHUD">
|
||||
<xs:annotation>
|
||||
<xs:documentation>HUD element for tracking ability cooldown. If it has a sprite and fill component it will fill the sprite with chosen color depending on the cooldown.\n A child with text component named "Cooldown"</xs:documentation>
|
||||
</xs:annotation>
|
||||
</xs:element>
|
||||
</xs:schema>
|
||||
@@ -8,4 +8,5 @@
|
||||
<RPM>120</RPM>
|
||||
<ViewPunch>0.01</ViewPunch>
|
||||
<ReloadTime>2</ReloadTime>
|
||||
<Slot><Primary/></Slot>
|
||||
</AssaultWeapon>
|
||||
@@ -2,6 +2,7 @@
|
||||
|
||||
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:t="types">
|
||||
<xs:import schemaLocation="../Types.xsd" namespace="types"/>
|
||||
<xs:include schemaLocation="../Types/WeaponSlotEnum.xsd"/>
|
||||
|
||||
<xs:element name="AssaultWeapon">
|
||||
<xs:complexType>
|
||||
@@ -28,6 +29,7 @@
|
||||
<xs:element name="ReloadTime" type="t:double" minOccurs="0">
|
||||
<xs:annotation><xs:documentation>Time it takes to reload the weapon in seconds</xs:documentation></xs:annotation>
|
||||
</xs:element>
|
||||
<xs:element name="Slot" type="WeaponSlotEnum" minOccurs="0"/>
|
||||
</xs:all>
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
|
||||
@@ -0,0 +1,4 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
|
||||
<BoostAssault xmlns:c="components" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="BoostAssault.xsd">
|
||||
<StrengthOfEffect>2</StrengthOfEffect>
|
||||
</BoostAssault>
|
||||
@@ -0,0 +1,18 @@
|
||||
<?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="BoostAssault">
|
||||
<xs:annotation>
|
||||
<xs:documentation>This is the assault's class boost component</xs:documentation>
|
||||
</xs:annotation>
|
||||
<xs:complexType>
|
||||
<xs:all>
|
||||
<xs:element name="StrengthOfEffect" type="t:double" minOccurs="0">
|
||||
<xs:annotation><xs:documentation>This is the strength of the boost effect</xs:documentation></xs:annotation>
|
||||
</xs:element>
|
||||
</xs:all>
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
</xs:schema>
|
||||
@@ -0,0 +1,4 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
|
||||
<BoostDefender xmlns:c="components" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="BoostDefender.xsd">
|
||||
<StrengthOfEffect>10</StrengthOfEffect>
|
||||
</BoostDefender>
|
||||
@@ -0,0 +1,18 @@
|
||||
<?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="BoostDefender">
|
||||
<xs:annotation>
|
||||
<xs:documentation>This is the defender's class boost component</xs:documentation>
|
||||
</xs:annotation>
|
||||
<xs:complexType>
|
||||
<xs:all>
|
||||
<xs:element name="StrengthOfEffect" type="t:double" minOccurs="0">
|
||||
<xs:annotation><xs:documentation>This is the strength of the boost effect</xs:documentation></xs:annotation>
|
||||
</xs:element>
|
||||
</xs:all>
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
</xs:schema>
|
||||
@@ -0,0 +1,2 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
|
||||
<BoostIconsHUD xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="BoostIconsHUD.xsd"/>
|
||||
@@ -0,0 +1,10 @@
|
||||
<?xml version="1.0"?>
|
||||
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:t="types">
|
||||
<xs:import schemaLocation="../Types.xsd" namespace="types"/>
|
||||
|
||||
<xs:element name="BoostIconsHUD">
|
||||
<xs:annotation>
|
||||
<xs:documentation>Origin for the 3 boost states. Create 3 children with Sprite and Fill components, name them "Sprint", "Defender", "Assault"</xs:documentation>
|
||||
</xs:annotation>
|
||||
</xs:element>
|
||||
</xs:schema>
|
||||
@@ -0,0 +1,4 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
|
||||
<BoostSniper xmlns:c="components" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="BoostSniper.xsd">
|
||||
<StrengthOfEffect>10</StrengthOfEffect>
|
||||
</BoostSniper>
|
||||
@@ -0,0 +1,18 @@
|
||||
<?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="BoostSniper">
|
||||
<xs:annotation>
|
||||
<xs:documentation>This is the sniper's class boost component</xs:documentation>
|
||||
</xs:annotation>
|
||||
<xs:complexType>
|
||||
<xs:all>
|
||||
<xs:element name="StrengthOfEffect" type="t:double" minOccurs="0">
|
||||
<xs:annotation><xs:documentation>This is the strength of the boost effect</xs:documentation></xs:annotation>
|
||||
</xs:element>
|
||||
</xs:all>
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
</xs:schema>
|
||||
@@ -0,0 +1,4 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
|
||||
<CapturePointArrowHUD xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="CapturePointArrowHUD.xsd">
|
||||
<CurrentTarget>0</CurrentTarget>
|
||||
</CapturePointArrowHUD>
|
||||
@@ -0,0 +1,18 @@
|
||||
<?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="CapturePointArrowHUD">
|
||||
<xs:annotation>
|
||||
<xs:documentation>HUD element for tracking next capturable Capture Point.</xs:documentation>
|
||||
</xs:annotation>
|
||||
<xs:complexType>
|
||||
<xs:all>
|
||||
<xs:element name="CurrentTarget" type="t:int" minOccurs="0">
|
||||
<xs:annotation>
|
||||
<xs:documentation>Corresponds to the current capturepoint the arrow points Towards</xs:documentation>
|
||||
</xs:annotation>
|
||||
</xs:element>
|
||||
</xs:all>
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
</xs:schema>
|
||||
@@ -0,0 +1,5 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
|
||||
<CapturePointGameMode xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="CapturePointGameMode.xsd">
|
||||
<RespawnTime>0.0</RespawnTime>
|
||||
<MaxRespawnTime>8.0</MaxRespawnTime>
|
||||
</CapturePointGameMode>
|
||||
@@ -0,0 +1,18 @@
|
||||
<?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="CapturePointGameMode">
|
||||
<xs:complexType>
|
||||
<xs:all>
|
||||
<xs:element name="RespawnTime" type="t:double" minOccurs="0">
|
||||
<xs:annotation><xs:documentation>The time since the last respawn wave. Players will be spawned when this reaches MaxRespawnTime.</xs:documentation></xs:annotation>
|
||||
</xs:element>
|
||||
<xs:element name="MaxRespawnTime" type="t:double" minOccurs="0">
|
||||
<xs:annotation><xs:documentation>Players will be spawned when RespawnTime reaches this.</xs:documentation></xs:annotation>
|
||||
</xs:element>
|
||||
</xs:all>
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
</xs:schema>
|
||||
@@ -1,4 +1,5 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
|
||||
<DashAbility xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="DashAbility.xsd">
|
||||
<CoolDownMaxTimer>2.0</CoolDownMaxTimer>
|
||||
<CoolDownTimer>0.0</CoolDownTimer>
|
||||
</DashAbility>
|
||||
@@ -10,7 +10,10 @@
|
||||
<xs:complexType>
|
||||
<xs:all>
|
||||
<xs:element name="CoolDownMaxTimer" type="t:double" minOccurs="0">
|
||||
<xs:annotation><xs:documentation>This is the cooldown on dash</xs:documentation></xs:annotation>
|
||||
<xs:annotation><xs:documentation>This is the max cooldown on dash</xs:documentation></xs:annotation>
|
||||
</xs:element>
|
||||
<xs:element name="CoolDownTimer" type="t:double" minOccurs="0">
|
||||
<xs:annotation><xs:documentation>This is the current cooldown on dash</xs:documentation></xs:annotation>
|
||||
</xs:element>
|
||||
</xs:all>
|
||||
</xs:complexType>
|
||||
|
||||
+16
@@ -0,0 +1,16 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
|
||||
<DefenderWeapon xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="DefenderWeapon.xsd">
|
||||
<MagazineAmmo>8</MagazineAmmo>
|
||||
<MagazineSize>8</MagazineSize>
|
||||
<Ammo>64</Ammo>
|
||||
<MaxAmmo>64</MaxAmmo>
|
||||
<BaseDamage>90</BaseDamage>
|
||||
<SpreadAngle>0.174533</SpreadAngle> <!-- 0.174533 = 10 degrees -->
|
||||
<NumPellets>10</NumPellets>
|
||||
<RPM>120</RPM>
|
||||
<ViewPunch>0.01</ViewPunch>
|
||||
<ReloadTime>0.5</ReloadTime>
|
||||
<Slot><Primary/></Slot>
|
||||
<IsFiring>false</IsFiring>
|
||||
<TimeSinceLastFire>0</TimeSinceLastFire>
|
||||
</DefenderWeapon>
|
||||
+44
@@ -0,0 +1,44 @@
|
||||
<?xml version="1.0"?>
|
||||
|
||||
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:t="types">
|
||||
<xs:import schemaLocation="../Types.xsd" namespace="types"/>
|
||||
<xs:include schemaLocation="../Types/WeaponSlotEnum.xsd"/>
|
||||
|
||||
<xs:element name="DefenderWeapon">
|
||||
<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:annotation><xs:documentation>Damage dealt if all shotgun pellets hit</xs:documentation></xs:annotation>
|
||||
</xs:element>
|
||||
<xs:element name="SpreadAngle" type="t:float" minOccurs="0">
|
||||
<xs:annotation><xs:documentation>Spread angle in radians</xs:documentation></xs:annotation>
|
||||
</xs:element>
|
||||
<xs:element name="NumPellets" type="t:int" 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:element name="ViewPunch" type="t:float" minOccurs="0">
|
||||
<xs:annotation><xs:documentation>View punch in radians for each shell fired</xs:documentation></xs:annotation>
|
||||
</xs:element>
|
||||
<xs:element name="ReloadTime" type="t:double" minOccurs="0">
|
||||
<xs:annotation><xs:documentation>Time it takes to load ONE SHELL into the weapon in seconds</xs:documentation></xs:annotation>
|
||||
</xs:element>
|
||||
<xs:element name="Slot" type="WeaponSlotEnum" minOccurs="0"/>
|
||||
<xs:element name="IsFiring" type="t:bool" minOccurs="0"/>
|
||||
<xs:element name="TimeSinceLastFire" type="t:double" minOccurs="0"/>
|
||||
</xs:all>
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
</xs:schema>
|
||||
@@ -0,0 +1,4 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
|
||||
<DoubleJump xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="DoubleJump.xsd">
|
||||
<DoubleJumpSpeed>4.0</DoubleJumpSpeed>
|
||||
</DoubleJump>
|
||||
@@ -0,0 +1,16 @@
|
||||
<?xml version="1.0"?>
|
||||
|
||||
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:t="types">
|
||||
<xs:import schemaLocation="../Types.xsd" namespace="types"/>
|
||||
|
||||
<xs:element name="DoubleJump">
|
||||
<xs:annotation><xs:documentation>Enables a Player to double jump.</xs:documentation></xs:annotation>
|
||||
<xs:complexType>
|
||||
<xs:all>
|
||||
<xs:element name="DoubleJumpSpeed" type="t:float" minOccurs="0">
|
||||
<xs:annotation><xs:documentation>Vertical velocity set on double jump.</xs:documentation></xs:annotation>
|
||||
</xs:element>
|
||||
</xs:all>
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
</xs:schema>
|
||||
@@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
|
||||
<FloatingEffect xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="FloatingEffect.xsd">
|
||||
<Period>1</Period>
|
||||
<Amplitude>1</Amplitude>
|
||||
<Time>0</Time>
|
||||
<Axis X="0" Y="0" Z="0"/>
|
||||
<Position X="0" Y="0" Z="0"/>
|
||||
</FloatingEffect>
|
||||
@@ -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="FloatingEffect">
|
||||
<xs:complexType>
|
||||
<xs:all>
|
||||
<xs:element name="Period" type="t:double" minOccurs="0"/>
|
||||
<xs:element name="Amplitude" type="t:double" minOccurs="0"/>
|
||||
<xs:element name="Time" type="t:double" minOccurs="0"/>
|
||||
<xs:element name="Axis" type="t:Vector" minOccurs="0"/>
|
||||
<xs:element name="Position" type="t:Vector" minOccurs="0"/>
|
||||
</xs:all>
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
</xs:schema>
|
||||
@@ -2,7 +2,6 @@
|
||||
<Physics xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="Physics.xsd">
|
||||
<Velocity X="0" Y="0" Z="0"/>
|
||||
<Gravity>true</Gravity>
|
||||
<PrevOrigin X="-9876.5" Y="-9876.5" Z="-9876.5"/>
|
||||
<IsOnGround>false</IsOnGround>
|
||||
<VerticalStepHeight>0.33</VerticalStepHeight>
|
||||
</Physics>
|
||||
|
||||
@@ -13,7 +13,6 @@
|
||||
<xs:annotation><xs:documentation>m/s^2</xs:documentation></xs:annotation>
|
||||
</xs:element>
|
||||
<xs:element name="Gravity" type="t:bool" minOccurs="0"/>
|
||||
<xs:element name="PrevOrigin" type="t:Vector" minOccurs="0"/>
|
||||
<xs:element name="IsOnGround" type="t:bool" minOccurs="0"/>
|
||||
<xs:element name="VerticalStepHeight" type="t:double" minOccurs="0">
|
||||
<xs:annotation><xs:documentation>The largest height of a "stair-step" that can be walked over</xs:documentation></xs:annotation>
|
||||
|
||||
@@ -2,5 +2,7 @@
|
||||
<Player xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="Player.xsd">
|
||||
<MovementSpeed>3</MovementSpeed>
|
||||
<CrouchSpeed>1.5</CrouchSpeed>
|
||||
<JumpSpeed>4.0</JumpSpeed>
|
||||
<CurrentWishDirection X="0" Y="0" Z="0"/>
|
||||
<CurrentWeapon></CurrentWeapon>
|
||||
</Player>
|
||||
@@ -11,7 +11,11 @@
|
||||
<xs:all>
|
||||
<xs:element name="MovementSpeed" type="t:float" minOccurs="0"/>
|
||||
<xs:element name="CrouchSpeed" type="t:float" minOccurs="0"/>
|
||||
<xs:element name="JumpSpeed" type="t:float" minOccurs="0">
|
||||
<xs:annotation><xs:documentation>Vertical velocity set when jumping.</xs:documentation></xs:annotation>
|
||||
</xs:element>
|
||||
<xs:element name="CurrentWishDirection" type="t:Vector" minOccurs="0"/>
|
||||
<xs:element name="CurrentWeapon" type="t:string" minOccurs="0"/>
|
||||
</xs:all>
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
|
||||
@@ -0,0 +1,4 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
|
||||
<ShieldAbility xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="ShieldAbility.xsd">
|
||||
<CoolDownMaxTimer>2.0</CoolDownMaxTimer>
|
||||
</ShieldAbility>
|
||||
@@ -0,0 +1,18 @@
|
||||
<?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="ShieldAbility">
|
||||
<xs:annotation>
|
||||
<xs:documentation>A shield component for one of the classes</xs:documentation>
|
||||
</xs:annotation>
|
||||
<xs:complexType>
|
||||
<xs:all>
|
||||
<xs:element name="CoolDownMaxTimer" type="t:double" minOccurs="0">
|
||||
<xs:annotation><xs:documentation>This is the cooldown on shield</xs:documentation></xs:annotation>
|
||||
</xs:element>
|
||||
</xs:all>
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
</xs:schema>
|
||||
@@ -0,0 +1,4 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
|
||||
<SprintAbility xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="SprintAbility.xsd">
|
||||
<CoolDownMaxTimer>2.0</CoolDownMaxTimer>
|
||||
</SprintAbility>
|
||||
@@ -0,0 +1,18 @@
|
||||
<?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="SprintAbility">
|
||||
<xs:annotation>
|
||||
<xs:documentation>A sprint component for one of the classes</xs:documentation>
|
||||
</xs:annotation>
|
||||
<xs:complexType>
|
||||
<xs:all>
|
||||
<xs:element name="CoolDownMaxTimer" type="t:double" minOccurs="0">
|
||||
<xs:annotation><xs:documentation>This is the cooldown on sprint</xs:documentation></xs:annotation>
|
||||
</xs:element>
|
||||
</xs:all>
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
</xs:schema>
|
||||
@@ -1,7 +1,7 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
|
||||
<Text xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="Text.xsd">
|
||||
<Content></Content>
|
||||
<Resource></Resource>
|
||||
<Resource>Fonts/DroidSans.ttf,64</Resource>
|
||||
<Color R="1" G="1" B="1" A="1"/>
|
||||
<Visible>true</Visible>
|
||||
<Alignment><Center/></Alignment>
|
||||
|
||||
@@ -1,3 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
|
||||
<Trigger xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="Trigger.xsd">
|
||||
</Trigger>
|
||||
@@ -1,17 +0,0 @@
|
||||
<?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>
|
||||
@@ -0,0 +1,5 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
|
||||
<WeaponAttachment xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="WeaponAttachment.xsd">
|
||||
<Weapon></Weapon>
|
||||
<Person><FirstPerson/></Person>
|
||||
</WeaponAttachment>
|
||||
@@ -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:complexType name="PersonEnum" mixed="true">
|
||||
<xs:complexContent>
|
||||
<xs:extension base="t:enum">
|
||||
<xs:choice>
|
||||
<xs:element name="FirstPerson" type="t:int" fixed="0" minOccurs="0"/>
|
||||
<xs:element name="ThirdPerson" type="t:int" fixed="1" minOccurs="0"/>
|
||||
</xs:choice>
|
||||
</xs:extension>
|
||||
</xs:complexContent>
|
||||
</xs:complexType>
|
||||
|
||||
<xs:element name="WeaponAttachment">
|
||||
<xs:annotation><xs:documentation>Combine with a spawner to define a weapon attachment point</xs:documentation></xs:annotation>
|
||||
<xs:complexType>
|
||||
<xs:all>
|
||||
<xs:element name="Weapon" type="t:string" minOccurs="0">
|
||||
<xs:annotation><xs:documentation>The weapon component type this attachment refers to</xs:documentation></xs:annotation>
|
||||
</xs:element>
|
||||
<xs:element name="Person" type="PersonEnum" minOccurs="0"/>
|
||||
</xs:all>
|
||||
</xs:complexType>
|
||||
</xs:element>
|
||||
</xs:schema>
|
||||
+99
@@ -0,0 +1,99 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
|
||||
<Entity name="WeaponModel" xmlns:c="components" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../Types/Entity.xsd">
|
||||
|
||||
<Components>
|
||||
<c:BoneAttachment>
|
||||
<BoneName>R_Arm_Weapon_Joint</BoneName>
|
||||
</c:BoneAttachment>
|
||||
<c:Model>
|
||||
<Resource>Models/Weapons/Blue/AssaultWeaponBlue.mesh</Resource>
|
||||
</c:Model>
|
||||
<c:Transform>
|
||||
<Position X="0.12043038" Y="-0.244988307" Z="-0.181454808"/>
|
||||
<Orientation X="0.010404544" Y="-0.00268173823" Z="0.0428441577"/>
|
||||
</c:Transform>
|
||||
</Components>
|
||||
|
||||
<Children>
|
||||
<Entity name="WeaponMuzzle">
|
||||
<Components>
|
||||
<c:Spawner>
|
||||
<EntityFile>Schema/Entities/RayBlue.xml</EntityFile>
|
||||
</c:Spawner>
|
||||
<c:Transform>
|
||||
<Position X="0.00325386273" Y="0.0970000029" Z="-0.843000054"/>
|
||||
</c:Transform>
|
||||
</Components>
|
||||
<Children/>
|
||||
</Entity>
|
||||
<Entity name="FirstPersonReloadSpawner">
|
||||
<Components>
|
||||
<c:Spawner>
|
||||
<EntityFile>Schema/Entities/ReloadEffectView.xml</EntityFile>
|
||||
</c:Spawner>
|
||||
<c:Transform/>
|
||||
</Components>
|
||||
<Children/>
|
||||
</Entity>
|
||||
<Entity name="AmmunitionHUD">
|
||||
<Components>
|
||||
<c:AmmunitionHUD/>
|
||||
<c:Transform>
|
||||
<Position X="-0.0430000015" Y="0.131501317" Z="-0.0670000017"/>
|
||||
<Scale X="0.400000006" Y="0.400000006" Z="0.400000006"/>
|
||||
</c:Transform>
|
||||
</Components>
|
||||
<Children>
|
||||
<Entity name="AmmunitionHUDBackground">
|
||||
<Components>
|
||||
<c:Sprite>
|
||||
<DiffuseTexture>Textures/Core/UnitHexagon.png</DiffuseTexture>
|
||||
<GlowMap></GlowMap>
|
||||
<Color A="0.588235319" B="0" G="0" R="0"/>
|
||||
</c:Sprite>
|
||||
<c:Transform>
|
||||
<Position X="0" Y="0" Z="-0.00200000009"/>
|
||||
<Scale X="0.119999997" Y="0.119999997" Z="0.119999997"/>
|
||||
</c:Transform>
|
||||
</Components>
|
||||
<Children/>
|
||||
</Entity>
|
||||
<Entity name="AmmunitionText">
|
||||
<Components>
|
||||
<c:Transform/>
|
||||
</Components>
|
||||
<Children>
|
||||
<Entity name="MagazineAmmo">
|
||||
<Components>
|
||||
<c:Text>
|
||||
<Content>32</Content>
|
||||
<Resource>Fonts/DroidSans.ttf,64</Resource>
|
||||
<Color A="1" B="3.92156863" G="1.17647064" R="0"/>
|
||||
</c:Text>
|
||||
<c:Transform>
|
||||
<Scale X="0.0599999987" Y="0.0599999987" Z="0.0599999987"/>
|
||||
</c:Transform>
|
||||
</Components>
|
||||
<Children/>
|
||||
</Entity>
|
||||
<Entity name="Ammo">
|
||||
<Components>
|
||||
<c:Text>
|
||||
<Content>360</Content>
|
||||
<Resource>Fonts/DroidSans.ttf,64</Resource>
|
||||
<Color A="1" B="3.92156863" G="1.17647064" R="0"/>
|
||||
</c:Text>
|
||||
<c:Transform>
|
||||
<Position X="5.2833886e-05" Y="-0.0407950208" Z="0"/>
|
||||
<Scale X="0.0399999991" Y="0.0399999991" Z="0.0399999991"/>
|
||||
</c:Transform>
|
||||
</Components>
|
||||
<Children/>
|
||||
</Entity>
|
||||
</Children>
|
||||
</Entity>
|
||||
</Children>
|
||||
</Entity>
|
||||
</Children>
|
||||
|
||||
</Entity>
|
||||
+40
@@ -0,0 +1,40 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
|
||||
<Entity name="ThirdPersonWeaponModel" xmlns:c="components" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../Types/Entity.xsd">
|
||||
|
||||
<Components>
|
||||
<c:BoneAttachment>
|
||||
<BoneName>R_Arm_Weapon_Joint</BoneName>
|
||||
</c:BoneAttachment>
|
||||
<c:Model>
|
||||
<Resource>Models/Weapons/Blue/AssaultWeaponBlue.mesh</Resource>
|
||||
</c:Model>
|
||||
<c:Transform>
|
||||
<Position X="0.163429111" Y="1.0235405" Z="-0.215489209"/>
|
||||
<Orientation X="-0.0631071255" Y="-0.0576644838" Z="0.118255548"/>
|
||||
</c:Transform>
|
||||
</Components>
|
||||
|
||||
<Children>
|
||||
<Entity name="WeaponMuzzle">
|
||||
<Components>
|
||||
<c:Spawner>
|
||||
<EntityFile>Schema/Entities/RayBlue.xml</EntityFile>
|
||||
</c:Spawner>
|
||||
<c:Transform>
|
||||
<Position X="0.00644115033" Y="0.096679531" Z="-0.436609417"/>
|
||||
</c:Transform>
|
||||
</Components>
|
||||
<Children/>
|
||||
</Entity>
|
||||
<Entity name="ThirdPersonReloadSpawner">
|
||||
<Components>
|
||||
<c:Spawner>
|
||||
<EntityFile>Schema/Entities/ReloadEffectWorld.xml</EntityFile>
|
||||
</c:Spawner>
|
||||
<c:Transform/>
|
||||
</Components>
|
||||
<Children/>
|
||||
</Entity>
|
||||
</Children>
|
||||
|
||||
</Entity>
|
||||
@@ -0,0 +1,14 @@
|
||||
<?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:BoostAssault/>
|
||||
<c:Lifetime>
|
||||
<Lifetime>10</Lifetime>
|
||||
</c:Lifetime>
|
||||
<c:Transform/>
|
||||
</Components>
|
||||
|
||||
<Children/>
|
||||
|
||||
</Entity>
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,14 @@
|
||||
<?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:BoostDefender/>
|
||||
<c:Lifetime>
|
||||
<Lifetime>10</Lifetime>
|
||||
</c:Lifetime>
|
||||
<c:Transform/>
|
||||
</Components>
|
||||
|
||||
<Children/>
|
||||
|
||||
</Entity>
|
||||
@@ -0,0 +1,14 @@
|
||||
<?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:BoostSniper/>
|
||||
<c:Lifetime>
|
||||
<Lifetime>10</Lifetime>
|
||||
</c:Lifetime>
|
||||
<c:Transform/>
|
||||
</Components>
|
||||
|
||||
<Children/>
|
||||
|
||||
</Entity>
|
||||
@@ -0,0 +1,18 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
|
||||
<Entity name="DashEffect" xmlns:c="components" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../Types/Entity.xsd">
|
||||
|
||||
<Components>
|
||||
<c:Animation/>
|
||||
<c:Lifetime>
|
||||
<Lifetime>0.5</Lifetime>
|
||||
</c:Lifetime>
|
||||
<c:ExplosionEffect>
|
||||
<Velocity X="0" Y="0" Z="0"/>
|
||||
<TimeSinceDeath>0</TimeSinceDeath>
|
||||
<ExplosionDuration>0.5</ExplosionDuration>
|
||||
<EndColor A="0" B="0" G="0" R="0"/>
|
||||
</c:ExplosionEffect>
|
||||
<c:Model/>
|
||||
<c:Transform/>
|
||||
</Components>
|
||||
</Entity>
|
||||
Executable
+40
@@ -0,0 +1,40 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
|
||||
<Entity name="Shield" xmlns:c="components" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../Types/Entity.xsd">
|
||||
|
||||
<Components>
|
||||
<c:Transform/>
|
||||
</Components>
|
||||
|
||||
<Children>
|
||||
<Entity name="Shield">
|
||||
<Components>
|
||||
<c:Model>
|
||||
<Resource>Models/Core/UnitPlane.mesh</Resource>
|
||||
</c:Model>
|
||||
<c:Shield/>
|
||||
<c:Transform>
|
||||
<Scale X="1.11800003" Y="0.0320000015" Z="1.9180001"/>
|
||||
<Orientation X="-1.57079995" Y="0" Z="0"/>
|
||||
</c:Transform>
|
||||
</Components>
|
||||
<Children/>
|
||||
</Entity>
|
||||
<Entity name="VisibleSide">
|
||||
<Components>
|
||||
<c:Shielded/>
|
||||
<c:Model>
|
||||
<Resource>Models/Core/UnitHexagon.mesh</Resource>
|
||||
<Color A="0" B="1" G="0" R="0"/>
|
||||
<Transparent>true</Transparent>
|
||||
</c:Model>
|
||||
<c:Transform>
|
||||
<Position X="0" Y="0" Z="0.0179871861"/>
|
||||
<Scale X="1.01900005" Y="0.0120000001" Z="1.91000009"/>
|
||||
<Orientation X="-1.57079995" Y="0" Z="0"/>
|
||||
</c:Transform>
|
||||
</Components>
|
||||
<Children/>
|
||||
</Entity>
|
||||
</Children>
|
||||
|
||||
</Entity>
|
||||
+99
@@ -0,0 +1,99 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
|
||||
<Entity name="WeaponModel" xmlns:c="components" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../Types/Entity.xsd">
|
||||
|
||||
<Components>
|
||||
<c:BoneAttachment>
|
||||
<BoneName>R_Arm_Weapon_Joint</BoneName>
|
||||
<PositionOffset X="0" Y="0.0480000004" Z="-0.183000013"/>
|
||||
</c:BoneAttachment>
|
||||
<c:Model>
|
||||
<Resource>Models/Weapons/Blue/DefenderGunBlue.mesh</Resource>
|
||||
</c:Model>
|
||||
<c:Transform>
|
||||
<Position X="0.120430306" Y="0.775375426" Z="1.36542225"/>
|
||||
</c:Transform>
|
||||
</Components>
|
||||
|
||||
<Children>
|
||||
<Entity name="WeaponMuzzle">
|
||||
<Components>
|
||||
<c:Spawner>
|
||||
<EntityFile>Schema/Entities/RayBlue.xml</EntityFile>
|
||||
</c:Spawner>
|
||||
<c:Transform>
|
||||
<Position X="0.00191565475" Y="0.0324025005" Z="-0.2021029"/>
|
||||
</c:Transform>
|
||||
</Components>
|
||||
<Children/>
|
||||
</Entity>
|
||||
<Entity name="FirstPersonReloadSpawner">
|
||||
<Components>
|
||||
<c:Spawner>
|
||||
<EntityFile>Schema/Entities/ReloadEffectView.xml</EntityFile>
|
||||
</c:Spawner>
|
||||
<c:Transform/>
|
||||
</Components>
|
||||
<Children/>
|
||||
</Entity>
|
||||
<Entity name="AmmunitionHUD">
|
||||
<Components>
|
||||
<c:AmmunitionHUD/>
|
||||
<c:Transform>
|
||||
<Position X="-0.0490000024" Y="0.0520000011" Z="-0.063000001"/>
|
||||
<Scale X="0.400000006" Y="0.400000006" Z="0.400000006"/>
|
||||
</c:Transform>
|
||||
</Components>
|
||||
<Children>
|
||||
<Entity name="AmmunitionHUDBackground">
|
||||
<Components>
|
||||
<c:Sprite>
|
||||
<DiffuseTexture>Textures/Core/UnitHexagon.png</DiffuseTexture>
|
||||
<GlowMap></GlowMap>
|
||||
<Color A="0.588235319" B="0" G="0" R="0"/>
|
||||
</c:Sprite>
|
||||
<c:Transform>
|
||||
<Position X="0" Y="0" Z="-0.00200000009"/>
|
||||
<Scale X="0.119999997" Y="0.119999997" Z="0.119999997"/>
|
||||
</c:Transform>
|
||||
</Components>
|
||||
<Children/>
|
||||
</Entity>
|
||||
<Entity name="AmmunitionText">
|
||||
<Components>
|
||||
<c:Transform/>
|
||||
</Components>
|
||||
<Children>
|
||||
<Entity name="MagazineAmmo">
|
||||
<Components>
|
||||
<c:Text>
|
||||
<Content>32</Content>
|
||||
<Resource>Fonts/DroidSans.ttf,64</Resource>
|
||||
<Color A="1" B="3.92156863" G="1.17647064" R="0"/>
|
||||
</c:Text>
|
||||
<c:Transform>
|
||||
<Scale X="0.0599999987" Y="0.0599999987" Z="0.0599999987"/>
|
||||
</c:Transform>
|
||||
</Components>
|
||||
<Children/>
|
||||
</Entity>
|
||||
<Entity name="Ammo">
|
||||
<Components>
|
||||
<c:Text>
|
||||
<Content>360</Content>
|
||||
<Resource>Fonts/DroidSans.ttf,64</Resource>
|
||||
<Color A="1" B="3.92156863" G="1.17647064" R="0"/>
|
||||
</c:Text>
|
||||
<c:Transform>
|
||||
<Position X="5.2833886e-05" Y="-0.0407950208" Z="0"/>
|
||||
<Scale X="0.0399999991" Y="0.0399999991" Z="0.0399999991"/>
|
||||
</c:Transform>
|
||||
</Components>
|
||||
<Children/>
|
||||
</Entity>
|
||||
</Children>
|
||||
</Entity>
|
||||
</Children>
|
||||
</Entity>
|
||||
</Children>
|
||||
|
||||
</Entity>
|
||||
+99
@@ -0,0 +1,99 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
|
||||
<Entity name="WeaponModel" xmlns:c="components" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../Types/Entity.xsd">
|
||||
|
||||
<Components>
|
||||
<c:BoneAttachment>
|
||||
<BoneName>R_Arm_Weapon_Joint</BoneName>
|
||||
<PositionOffset X="0" Y="0.0480000004" Z="-0.183000013"/>
|
||||
</c:BoneAttachment>
|
||||
<c:Model>
|
||||
<Resource>Models/Weapons/Red/DefenderGunRed.mesh</Resource>
|
||||
</c:Model>
|
||||
<c:Transform>
|
||||
<Position X="0.120430306" Y="0.775375426" Z="1.36542225"/>
|
||||
</c:Transform>
|
||||
</Components>
|
||||
|
||||
<Children>
|
||||
<Entity name="WeaponMuzzle">
|
||||
<Components>
|
||||
<c:Spawner>
|
||||
<EntityFile>Schema/Entities/RayRed.xml</EntityFile>
|
||||
</c:Spawner>
|
||||
<c:Transform>
|
||||
<Position X="0.00191565475" Y="0.0324025005" Z="-0.2021029"/>
|
||||
</c:Transform>
|
||||
</Components>
|
||||
<Children/>
|
||||
</Entity>
|
||||
<Entity name="FirstPersonReloadSpawner">
|
||||
<Components>
|
||||
<c:Spawner>
|
||||
<EntityFile>Schema/Entities/ReloadEffectView.xml</EntityFile>
|
||||
</c:Spawner>
|
||||
<c:Transform/>
|
||||
</Components>
|
||||
<Children/>
|
||||
</Entity>
|
||||
<Entity name="AmmunitionHUD">
|
||||
<Components>
|
||||
<c:AmmunitionHUD/>
|
||||
<c:Transform>
|
||||
<Position X="-0.0490000024" Y="0.0520000011" Z="-0.063000001"/>
|
||||
<Scale X="0.400000006" Y="0.400000006" Z="0.400000006"/>
|
||||
</c:Transform>
|
||||
</Components>
|
||||
<Children>
|
||||
<Entity name="AmmunitionHUDBackground">
|
||||
<Components>
|
||||
<c:Sprite>
|
||||
<DiffuseTexture>Textures/Core/UnitHexagon.png</DiffuseTexture>
|
||||
<GlowMap></GlowMap>
|
||||
<Color A="0.588235319" B="0" G="0" R="0"/>
|
||||
</c:Sprite>
|
||||
<c:Transform>
|
||||
<Position X="0" Y="0" Z="-0.00200000009"/>
|
||||
<Scale X="0.119999997" Y="0.119999997" Z="0.119999997"/>
|
||||
</c:Transform>
|
||||
</Components>
|
||||
<Children/>
|
||||
</Entity>
|
||||
<Entity name="AmmunitionText">
|
||||
<Components>
|
||||
<c:Transform/>
|
||||
</Components>
|
||||
<Children>
|
||||
<Entity name="MagazineAmmo">
|
||||
<Components>
|
||||
<c:Text>
|
||||
<Content>32</Content>
|
||||
<Resource>Fonts/DroidSans.ttf,64</Resource>
|
||||
<Color A="1" B="3.92156863" G="1.17647064" R="0"/>
|
||||
</c:Text>
|
||||
<c:Transform>
|
||||
<Scale X="0.0599999987" Y="0.0599999987" Z="0.0599999987"/>
|
||||
</c:Transform>
|
||||
</Components>
|
||||
<Children/>
|
||||
</Entity>
|
||||
<Entity name="Ammo">
|
||||
<Components>
|
||||
<c:Text>
|
||||
<Content>360</Content>
|
||||
<Resource>Fonts/DroidSans.ttf,64</Resource>
|
||||
<Color A="1" B="3.92156863" G="1.17647064" R="0"/>
|
||||
</c:Text>
|
||||
<c:Transform>
|
||||
<Position X="5.2833886e-05" Y="-0.0407950208" Z="0"/>
|
||||
<Scale X="0.0399999991" Y="0.0399999991" Z="0.0399999991"/>
|
||||
</c:Transform>
|
||||
</Components>
|
||||
<Children/>
|
||||
</Entity>
|
||||
</Children>
|
||||
</Entity>
|
||||
</Children>
|
||||
</Entity>
|
||||
</Children>
|
||||
|
||||
</Entity>
|
||||
+41
@@ -0,0 +1,41 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
|
||||
<Entity name="ThirdPersonWeaponModel" xmlns:c="components" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../Types/Entity.xsd">
|
||||
|
||||
<Components>
|
||||
<c:BoneAttachment>
|
||||
<BoneName>R_Arm_Weapon_Joint</BoneName>
|
||||
<PositionOffset X="0" Y="0.0320000015" Z="-0.165000007"/>
|
||||
</c:BoneAttachment>
|
||||
<c:Model>
|
||||
<Resource>Models/Weapons/Blue/DefenderGunBlue.mesh</Resource>
|
||||
</c:Model>
|
||||
<c:Transform>
|
||||
<Position X="0.162026152" Y="1.05794585" Z="-0.380744517"/>
|
||||
<Orientation X="-0.0628969446" Y="-0.0509683639" Z="0.118739031"/>
|
||||
</c:Transform>
|
||||
</Components>
|
||||
|
||||
<Children>
|
||||
<Entity name="WeaponMuzzle">
|
||||
<Components>
|
||||
<c:Spawner>
|
||||
<EntityFile>Schema/Entities/RayBlue.xml</EntityFile>
|
||||
</c:Spawner>
|
||||
<c:Transform>
|
||||
<Position X="0.000284185546" Y="0.0318552479" Z="-0.193328083"/>
|
||||
</c:Transform>
|
||||
</Components>
|
||||
<Children/>
|
||||
</Entity>
|
||||
<Entity name="ThirdPersonReloadSpawner">
|
||||
<Components>
|
||||
<c:Spawner>
|
||||
<EntityFile>Schema/Entities/ReloadEffectWorld.xml</EntityFile>
|
||||
</c:Spawner>
|
||||
<c:Transform/>
|
||||
</Components>
|
||||
<Children/>
|
||||
</Entity>
|
||||
</Children>
|
||||
|
||||
</Entity>
|
||||
+41
@@ -0,0 +1,41 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
|
||||
<Entity name="ThirdPersonWeaponModel" xmlns:c="components" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../Types/Entity.xsd">
|
||||
|
||||
<Components>
|
||||
<c:BoneAttachment>
|
||||
<BoneName>R_Arm_Weapon_Joint</BoneName>
|
||||
<PositionOffset X="0" Y="0.0320000015" Z="-0.165000007"/>
|
||||
</c:BoneAttachment>
|
||||
<c:Model>
|
||||
<Resource>Models/Weapons/Red/DefenderGunRed.mesh</Resource>
|
||||
</c:Model>
|
||||
<c:Transform>
|
||||
<Position X="0.162026152" Y="1.05794585" Z="-0.380744517"/>
|
||||
<Orientation X="-0.0628969446" Y="-0.0509683639" Z="0.118739031"/>
|
||||
</c:Transform>
|
||||
</Components>
|
||||
|
||||
<Children>
|
||||
<Entity name="WeaponMuzzle">
|
||||
<Components>
|
||||
<c:Spawner>
|
||||
<EntityFile>Schema/Entities/RayRed.xml</EntityFile>
|
||||
</c:Spawner>
|
||||
<c:Transform>
|
||||
<Position X="0.000284185546" Y="0.0318552479" Z="-0.193328083"/>
|
||||
</c:Transform>
|
||||
</Components>
|
||||
<Children/>
|
||||
</Entity>
|
||||
<Entity name="ThirdPersonReloadSpawner">
|
||||
<Components>
|
||||
<c:Spawner>
|
||||
<EntityFile>Schema/Entities/ReloadEffectWorld.xml</EntityFile>
|
||||
</c:Spawner>
|
||||
<c:Transform/>
|
||||
</Components>
|
||||
<Children/>
|
||||
</Entity>
|
||||
</Children>
|
||||
|
||||
</Entity>
|
||||
@@ -10,7 +10,7 @@
|
||||
<Components>
|
||||
<c:PlayerSpawn/>
|
||||
<c:Spawner>
|
||||
<EntityFile>Schema/Entities/Player.xml</EntityFile>
|
||||
<EntityFile>Schema/Entities/PlayerRed.xml</EntityFile>
|
||||
</c:Spawner>
|
||||
<c:Team>
|
||||
<Team>
|
||||
@@ -118,257 +118,6 @@
|
||||
</Entity>
|
||||
</Children>
|
||||
</Entity>
|
||||
<Entity name="Player">
|
||||
<Components>
|
||||
<c:AABB>
|
||||
<Origin X="0" Y="0.772000015" Z="0"/>
|
||||
<Size X="1" Y="1.60000002" Z="1"/>
|
||||
</c:AABB>
|
||||
<c:AssaultWeapon>
|
||||
<RPM>600</RPM>
|
||||
</c:AssaultWeapon>
|
||||
<c:Collidable/>
|
||||
<c:DashAbility/>
|
||||
<c:Health/>
|
||||
<c:Physics>
|
||||
<Velocity X="2.30999646e-23" Y="0" Z="1.05272533e-23"/>
|
||||
</c:Physics>
|
||||
<c:Player>
|
||||
<MovementSpeed>5</MovementSpeed>
|
||||
</c:Player>
|
||||
<c:Team>
|
||||
<Team>
|
||||
<Red/>
|
||||
</Team>
|
||||
</c:Team>
|
||||
<c:Transform>
|
||||
<Position X="0" Y="0.0288832653" Z="2.64837074"/>
|
||||
</c:Transform>
|
||||
</Components>
|
||||
<Children>
|
||||
<Entity name="Camera">
|
||||
<Components>
|
||||
<c:Camera/>
|
||||
<c:Transform>
|
||||
<Position X="0" Y="1.27700007" Z="0"/>
|
||||
</c:Transform>
|
||||
</Components>
|
||||
<Children>
|
||||
<Entity name="PlayerName">
|
||||
<Components>
|
||||
<c:Text>
|
||||
<Resource>Fonts/DroidSans.ttf,100</Resource>
|
||||
<Color A="1" B="0" G="1" R="0"/>
|
||||
</c:Text>
|
||||
<c:Transform>
|
||||
<Position X="0.100000001" Y="0.248000011" Z="-0.248000011"/>
|
||||
<Scale X="0.100000001" Y="0.113000005" Z="0.5"/>
|
||||
<Orientation X="0" Y="3.14199996" Z="0"/>
|
||||
</c:Transform>
|
||||
</Components>
|
||||
<Children/>
|
||||
</Entity>
|
||||
<Entity name="CameraModel">
|
||||
<Components>
|
||||
<c:Model>
|
||||
<Resource>Models/Widgets/Camera.mesh</Resource>
|
||||
<Visible>false</Visible>
|
||||
</c:Model>
|
||||
<c:Transform>
|
||||
<Position X="0" Y="0.0331346765" Z="-0.0792061687"/>
|
||||
<Scale X="1.30000007" Y="1.50000012" Z="1"/>
|
||||
</c:Transform>
|
||||
</Components>
|
||||
<Children/>
|
||||
</Entity>
|
||||
<Entity name="HUD">
|
||||
<Components>
|
||||
<c:Transform>
|
||||
<Position X="0" Y="0" Z="-0.5"/>
|
||||
</c:Transform>
|
||||
</Components>
|
||||
<Children>
|
||||
<Entity name="HealthBar">
|
||||
<Components>
|
||||
<c:Fill>
|
||||
<Percentage>1</Percentage>
|
||||
<Color A="0" B="1" G="0" R="0"/>
|
||||
</c:Fill>
|
||||
<c:HealthHUD/>
|
||||
<c:Model>
|
||||
<Resource>Models/Core/UnitHexagon.mesh</Resource>
|
||||
<Color A="1" B="0.70588237" G="0.70588237" R="0.70588237"/>
|
||||
</c:Model>
|
||||
<c:Transform>
|
||||
<Position X="-0.383000016" Y="-0.185000002" Z="0"/>
|
||||
<Scale X="0.150000006" Y="0.150000006" Z="0.150000006"/>
|
||||
<Orientation X="0" Y="0.594000041" Z="0"/>
|
||||
</c:Transform>
|
||||
</Components>
|
||||
<Children/>
|
||||
</Entity>
|
||||
<Entity name="Crosshair">
|
||||
<Components>
|
||||
<c:Sprite>
|
||||
<DiffuseTexture>Textures/Weapons/Crosshair/SmallThickHoleDot.png</DiffuseTexture>
|
||||
<DepthSort>false</DepthSort>
|
||||
</c:Sprite>
|
||||
<c:Transform>
|
||||
<Position X="0" Y="0" Z="0.200000003"/>
|
||||
<Scale X="0.0250000004" Y="0.0250000004" Z="0"/>
|
||||
</c:Transform>
|
||||
</Components>
|
||||
<Children/>
|
||||
</Entity>
|
||||
</Children>
|
||||
</Entity>
|
||||
<Entity name="Hands">
|
||||
<Components>
|
||||
<c:Animation>
|
||||
<AnimationName1>Idle</AnimationName1>
|
||||
<Time1>1.9569972344146196</Time1>
|
||||
<Speed1>1</Speed1>
|
||||
</c:Animation>
|
||||
<c:Model>
|
||||
<Resource>Models/Characters/Assault/FirstPerson.mesh</Resource>
|
||||
<Transparent>true</Transparent>
|
||||
</c:Model>
|
||||
<c:Transform/>
|
||||
</Components>
|
||||
<Children>
|
||||
<Entity name="WeaponModel">
|
||||
<Components>
|
||||
<c:BoneAttachment>
|
||||
<BoneName>R_Arm_Weapon_Joint</BoneName>
|
||||
</c:BoneAttachment>
|
||||
<c:Model>
|
||||
<Resource>Models/Weapons/Blue/AssaultWeaponBlue.mesh</Resource>
|
||||
<Transparent>true</Transparent>
|
||||
</c:Model>
|
||||
<c:Transform>
|
||||
<Position X="0.120748013" Y="-0.228470564" Z="-0.151475638"/>
|
||||
<Orientation X="0.010404693" Y="-0.00268176314" Z="0.0428441502"/>
|
||||
</c:Transform>
|
||||
</Components>
|
||||
<Children>
|
||||
<Entity name="WeaponMuzzle">
|
||||
<Components>
|
||||
<c:Spawner>
|
||||
<EntityFile>Schema/Entities/RayBlue.xml</EntityFile>
|
||||
</c:Spawner>
|
||||
<c:Transform>
|
||||
<Position X="0.00325386273" Y="0.0970000029" Z="-0.843000054"/>
|
||||
</c:Transform>
|
||||
</Components>
|
||||
<Children/>
|
||||
</Entity>
|
||||
</Children>
|
||||
</Entity>
|
||||
<Entity name="FirstPersonReloadSpawner">
|
||||
<Components>
|
||||
<c:Spawner>
|
||||
<EntityFile>Schema/Entities/WeaponReloadEffect.xml</EntityFile>
|
||||
</c:Spawner>
|
||||
<c:Transform/>
|
||||
</Components>
|
||||
<Children/>
|
||||
</Entity>
|
||||
</Children>
|
||||
</Entity>
|
||||
</Children>
|
||||
</Entity>
|
||||
<Entity name="ThirdPersonCamera">
|
||||
<Components>
|
||||
<c:Camera/>
|
||||
<c:Model>
|
||||
<Resource>Models/Widgets/Camera.mesh</Resource>
|
||||
<Visible>false</Visible>
|
||||
</c:Model>
|
||||
<c:Transform>
|
||||
<Position X="-0.284000009" Y="1.83800006" Z="1.18900001"/>
|
||||
<Orientation X="5.95600033" Y="0" Z="0"/>
|
||||
</c:Transform>
|
||||
</Components>
|
||||
<Children/>
|
||||
</Entity>
|
||||
<Entity name="PlayerModel">
|
||||
<Components>
|
||||
<c:Animation>
|
||||
<AnimationName1>Idle</AnimationName1>
|
||||
<Time1>1.8055945618467364</Time1>
|
||||
<Speed1>1</Speed1>
|
||||
</c:Animation>
|
||||
<c:AnimationOffset>
|
||||
<AnimationName>AimRifle</AnimationName>
|
||||
<Time>0.5</Time>
|
||||
</c:AnimationOffset>
|
||||
<c:HiddenForLocalPlayer/>
|
||||
<c:Model>
|
||||
<Resource>Models/Characters/Assault/AssaultAnimations.mesh</Resource>
|
||||
<Color A="1" B="0" G="0" R="1"/>
|
||||
</c:Model>
|
||||
<c:Transform/>
|
||||
</Components>
|
||||
<Children>
|
||||
<Entity name="ThirdPersonWeaponModel">
|
||||
<Components>
|
||||
<c:BoneAttachment>
|
||||
<BoneName>R_Arm_Weapon_Joint</BoneName>
|
||||
</c:BoneAttachment>
|
||||
<c:Model>
|
||||
<Resource>Models/Weapons/Blue/AssaultWeaponBlue.mesh</Resource>
|
||||
<Visible>false</Visible>
|
||||
</c:Model>
|
||||
<c:Transform>
|
||||
<Position X="0.158578917" Y="1.02878916" Z="-0.215411991"/>
|
||||
<Orientation X="-0.0626687407" Y="-0.0361274257" Z="0.120101407"/>
|
||||
</c:Transform>
|
||||
</Components>
|
||||
<Children>
|
||||
<Entity name="ThirdPersonWeaponMuzzle">
|
||||
<Components>
|
||||
<c:Spawner>
|
||||
<EntityFile>Schema/Entities/RayBlue.xml</EntityFile>
|
||||
</c:Spawner>
|
||||
<c:Transform>
|
||||
<Position X="0.00644115033" Y="0.096679531" Z="-0.436609417"/>
|
||||
</c:Transform>
|
||||
</Components>
|
||||
<Children/>
|
||||
</Entity>
|
||||
</Children>
|
||||
</Entity>
|
||||
</Children>
|
||||
</Entity>
|
||||
<Entity name="AABBStanding">
|
||||
<Components>
|
||||
<c:Model>
|
||||
<Resource>Models/Core/UnitCube.mesh</Resource>
|
||||
<Color A="0.427450985" B="1" G="1" R="1"/>
|
||||
<Visible>false</Visible>
|
||||
</c:Model>
|
||||
<c:Transform>
|
||||
<Position X="0" Y="0.772000015" Z="0"/>
|
||||
<Scale X="1" Y="1.60000002" Z="1"/>
|
||||
</c:Transform>
|
||||
</Components>
|
||||
<Children/>
|
||||
</Entity>
|
||||
<Entity name="AABBCrouching">
|
||||
<Components>
|
||||
<c:Model>
|
||||
<Resource>Models/Core/UnitCube.mesh</Resource>
|
||||
<Color A="0.745098054" B="1" G="0" R="1"/>
|
||||
<Visible>false</Visible>
|
||||
</c:Model>
|
||||
<c:Transform>
|
||||
<Position X="0" Y="0.772000015" Z="0"/>
|
||||
</c:Transform>
|
||||
</Components>
|
||||
<Children/>
|
||||
</Entity>
|
||||
</Children>
|
||||
</Entity>
|
||||
</Children>
|
||||
|
||||
</Entity>
|
||||
|
||||
@@ -5019,7 +5019,7 @@
|
||||
</Team>
|
||||
</c:Team>
|
||||
<c:Transform>
|
||||
<Position X="-60.3695679" Y="5.64500046" Z="-79.3789597"/>
|
||||
<Position X="-60.3695679" Y="5.14500046" Z="-79.3789597"/>
|
||||
</c:Transform>
|
||||
</Components>
|
||||
<Children>
|
||||
@@ -5089,7 +5089,7 @@
|
||||
</Team>
|
||||
</c:Team>
|
||||
<c:Transform>
|
||||
<Position X="60.0169258" Y="5.78000021" Z="76.2893906"/>
|
||||
<Position X="60.0169258" Y="6.0800004" Z="76.2893906"/>
|
||||
</c:Transform>
|
||||
</Components>
|
||||
<Children>
|
||||
@@ -5165,7 +5165,7 @@
|
||||
<c:Transform>
|
||||
<Position X="48.9189453" Y="7.06223536" Z="-78.9347992"/>
|
||||
<Scale X="0.300000012" Y="0.300000012" Z="0.300000012"/>
|
||||
<Orientation X="0" Y="75.6124268" Z="0"/>
|
||||
<Orientation X="0" Y="74.6042328" Z="0"/>
|
||||
</c:Transform>
|
||||
<c:Trigger/>
|
||||
</Components>
|
||||
@@ -5184,7 +5184,7 @@
|
||||
<c:Transform>
|
||||
<Position X="-59.3499641" Y="7.46932745" Z="-20.6276321"/>
|
||||
<Scale X="0.300000012" Y="0.300000012" Z="0.300000012"/>
|
||||
<Orientation X="0" Y="72.2667694" Z="0"/>
|
||||
<Orientation X="0" Y="71.2585754" Z="0"/>
|
||||
</c:Transform>
|
||||
<c:Trigger/>
|
||||
</Components>
|
||||
@@ -5203,7 +5203,7 @@
|
||||
<c:Transform>
|
||||
<Position X="-1.13644195" Y="1.38919806" Z="38.9768829"/>
|
||||
<Scale X="0.300000012" Y="0.300000012" Z="0.300000012"/>
|
||||
<Orientation X="0" Y="69.8748016" Z="0"/>
|
||||
<Orientation X="0" Y="68.8666077" Z="0"/>
|
||||
</c:Transform>
|
||||
<c:Trigger/>
|
||||
</Components>
|
||||
@@ -5222,7 +5222,7 @@
|
||||
<c:Transform>
|
||||
<Position X="54.7225227" Y="6.51863909" Z="29.0052128"/>
|
||||
<Scale X="0.300000012" Y="0.300000012" Z="0.300000012"/>
|
||||
<Orientation X="0" Y="70.1887283" Z="0"/>
|
||||
<Orientation X="0" Y="69.180542" Z="0"/>
|
||||
</c:Transform>
|
||||
<c:Trigger/>
|
||||
</Components>
|
||||
@@ -5241,7 +5241,7 @@
|
||||
<c:Transform>
|
||||
<Position X="-51.6792374" Y="8.44526482" Z="32.5153465"/>
|
||||
<Scale X="0.300000012" Y="0.300000012" Z="0.300000012"/>
|
||||
<Orientation X="0" Y="69.6374512" Z="0"/>
|
||||
<Orientation X="0" Y="68.6292572" Z="0"/>
|
||||
</c:Transform>
|
||||
<c:Trigger/>
|
||||
</Components>
|
||||
@@ -5260,7 +5260,7 @@
|
||||
<c:Transform>
|
||||
<Position X="-42.3974304" Y="7.28327894" Z="81.9305344"/>
|
||||
<Scale X="0.300000012" Y="0.300000012" Z="0.300000012"/>
|
||||
<Orientation X="0" Y="67.7666702" Z="0"/>
|
||||
<Orientation X="0" Y="66.7584839" Z="0"/>
|
||||
</c:Transform>
|
||||
<c:Trigger/>
|
||||
</Components>
|
||||
@@ -5279,7 +5279,7 @@
|
||||
<c:Transform>
|
||||
<Position X="-9.85184956" Y="8.25567532" Z="39.6119232"/>
|
||||
<Scale X="0.300000012" Y="0.300000012" Z="0.300000012"/>
|
||||
<Orientation X="0" Y="66.8154602" Z="0"/>
|
||||
<Orientation X="0" Y="65.8073425" Z="0"/>
|
||||
</c:Transform>
|
||||
<c:Trigger/>
|
||||
</Components>
|
||||
@@ -5298,7 +5298,7 @@
|
||||
<c:Transform>
|
||||
<Position X="49.2257118" Y="7.39368248" Z="-31.1810112"/>
|
||||
<Scale X="0.300000012" Y="0.300000012" Z="0.300000012"/>
|
||||
<Orientation X="0" Y="64.0265808" Z="0"/>
|
||||
<Orientation X="0" Y="63.0184822" Z="0"/>
|
||||
</c:Transform>
|
||||
<c:Trigger/>
|
||||
</Components>
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
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