Compare commits

...

81 Commits

Author SHA1 Message Date
Jocke 1b1963e6d2 Reload for assault is only done once now. 2016-03-14 01:01:35 +01:00
Tleety b89f68ae2f Merge branch 'master' of github.com:teamfisk/TacticalZ 2016-03-13 23:30:26 +01:00
Tleety 36185b43ef Killfeed in overwatch camera 2016-03-13 23:30:17 +01:00
Jace 9d2ce5af8a Player is now spawned as the correct class that they picked. 2016-03-13 23:05:52 +01:00
Jace fc7f57fd5d Merge remote-tracking branch 'origin/master'
Conflicts:
	resources/Schema/Entities/ScoreBoard_Main.xml
2016-03-13 22:27:17 +01:00
Ayumiwii c20830572c Merge branch 'master' of https://github.com/teamfisk/TacticalZ 2016-03-13 22:24:59 +01:00
Ayumiwii 00d77607b4 new scoreboard 2016-03-13 22:24:27 +01:00
Jace a715f7fe86 Merge branch 'master' into Movement
# Conflicts:
#	include/Engine/Network/Client.h
#	resources/DefaultConfig.ini
#	resources/Schema/Entities/OverwatchCamera.xml
#	resources/Schema/Types/Entity.xsd
2016-03-13 22:22:36 +01:00
viktorljung d587c9a692 Fixed first person strafe animation 2016-03-13 22:17:55 +01:00
viktorljung 7d32909122 Merge branch 'Movement' of github.com:teamfisk/TacticalZ into Movement 2016-03-13 22:14:11 +01:00
Tleety ce2fcd9109 Now it works 2016-03-13 22:13:37 +01:00
Jace 77bb7a0f5c Merge pull request #200 from teamfisk/UnpickableComponent
Added Unpickable component, which skips the entity in the PickingPass
2016-03-13 22:09:23 +01:00
Jace 78c7d777e3 Made player models in class select unpickable 2016-03-13 22:09:12 +01:00
viktorljung 98bd447084 Merge branch 'Movement' of github.com:teamfisk/TacticalZ into Movement 2016-03-13 22:02:45 +01:00
viktorljung fd50ea3a12 Defender friendly boost hud 2016-03-13 22:02:37 +01:00
Tleety 83ae87594f Fixed maxhealth probably 2016-03-13 22:00:48 +01:00
Jace 53dd96d44d Merge branch 'master' into UnpickableComponent
# Conflicts:
#	resources/Schema/Components.xsd
#	resources/Schema/Types/Entity.xsd
2016-03-13 22:00:10 +01:00
Jace d9b47ddb62 Merge branch 'master' of github.com:teamfisk/TacticalZ 2016-03-13 21:55:03 +01:00
Jace bc3e699ddb Bumping master to latest assets 2016-03-13 21:54:50 +01:00
antc13 412c92aa7f Merge branch 'master' of https://github.com/teamfisk/TacticalZ 2016-03-13 21:51:37 +01:00
antc13 b76bc74c4b Changed glow intensity on some grid walls. 2016-03-13 21:51:24 +01:00
Tobias Dahl 8c48e96ad1 Merge pull request #211 from teamfisk/MSAA
MSAA
2016-03-13 21:47:43 +01:00
Tobias Dahl fe9c5bd686 Merge pull request #217 from teamfisk/revert-216-ShadowOptimization
Revert "Shadow will actually shut itself off and delete itself now"
2016-03-13 21:36:12 +01:00
Tobias Dahl 7fa634ef7c Revert "Shadow will actually shut itself off and delete itself now" 2016-03-13 21:35:57 +01:00
Tobias Dahl 080f5ac856 Merge pull request #216 from teamfisk/ShadowOptimization
Shadow will actually shut itself off and delete itself now
2016-03-13 21:32:42 +01:00
Jace 4ecbef59bf Merge branch 'master' of github.com:teamfisk/TacticalZ 2016-03-13 21:29:59 +01:00
Jace 8a1217e8b5 Hoodwinked GLFW into creating a fullscreen windowed window by initializing it one pixel higher than the resolution height 2016-03-13 21:29:39 +01:00
FakeShemp 8e150da7ff Use CommonFunctions::DeleteTexture() instead 2016-03-13 21:25:04 +01:00
viktorljung 148d60f8f8 hp really fixed? 2016-03-13 21:24:27 +01:00
viktorljung 066ca6075d hp fixed? 2016-03-13 21:19:21 +01:00
viktorljung 93f4384da6 Merge branch 'Movement' of github.com:teamfisk/TacticalZ into Movement 2016-03-13 21:10:39 +01:00
viktorljung 3a0cff7a83 boost check for defender 2016-03-13 21:10:22 +01:00
Tleety 27443d4e08 Merge branch 'Movement' of github.com:teamfisk/TacticalZ into Movement 2016-03-13 21:01:15 +01:00
Tleety 20e48eeb08 Killfeed should work now. 2016-03-13 21:01:04 +01:00
viktorljung e929ecab50 fix??? 2016-03-13 20:58:53 +01:00
viktorljung ee8d7574b2 dash fix? 2016-03-13 20:46:59 +01:00
viktorljung 1da3ec3c74 ammo share fix? 2016-03-13 20:32:08 +01:00
viktorljung 6bfed76e06 Merge branch 'Movement' of github.com:teamfisk/TacticalZ into Movement 2016-03-13 18:56:04 +01:00
viktorljung 389d27973f Assault boost check 2016-03-13 18:55:45 +01:00
Tleety fc5ad2d380 Small fix 2016-03-13 17:33:12 +01:00
viktorljung 0d287ad5d1 Merge branch 'Movement' of github.com:teamfisk/TacticalZ into Movement
# Conflicts:
#	resources/Schema/Entities/RayAssaultBlue.xml
2016-03-13 16:45:57 +01:00
viktorljung 3cee4e4248 defender ray fixes 2016-03-13 16:42:07 +01:00
viktorljung 17007a2a41 fix fix 2016-03-13 16:28:39 +01:00
FakeShemp 9b5e4c10fd Shadow will actually shut itself off and delete itself now 2016-03-13 16:19:17 +01:00
Tleety 041050ab2f Merge branch 'Movement' of github.com:teamfisk/TacticalZ into Movement 2016-03-13 16:15:26 +01:00
Tleety 9f752ad3e9 Fadesystem, entities, weapon muzzles should now look good. reload for secondary 2016-03-13 16:15:06 +01:00
viktorljung 04288e5243 Merge fixes 2016-03-13 16:14:13 +01:00
viktorljung 44f46cda8d Merge remote-tracking branch 'origin/master' into Movement
# Conflicts:
#	include/Game/Systems/Weapon/DefenderWeaponBehaviour.h
#	resources/Schema/Components.xsd
#	resources/Schema/Entities/CP_Rocky2.xml
#	resources/Schema/Entities/MuzzleFlashBlue.xml
#	resources/Schema/Entities/MuzzleFlashFire.xml
#	resources/Schema/Entities/MuzzleFlashRed.xml
#	resources/Schema/Types/Entity.xsd
#	resources/Shaders/Sprite.frag.glsl
#	src/Game/Systems/AbilityCooldownHUDSystem.cpp
#	src/Game/Systems/BoostIconsHUDSystem.cpp
#	src/Game/Systems/PlayerMovementSystem.cpp
#	src/Game/Systems/Weapon/AssaultWeaponBehaviour.cpp
#	src/Game/Systems/Weapon/DefenderWeaponBehaviour.cpp
#	src/Game/Systems/Weapon/SidearmWeaponBehaviour.cpp
2016-03-13 15:17:15 +01:00
viktorljung 7d899a989c Started working on boost HUD thingy 2016-03-13 15:09:50 +01:00
viktorljung 0f4f32188c assault weapon now reloading correctly 2016-03-13 14:55:29 +01:00
viktorljung 0963f61976 Merge branch 'Movement' of github.com:teamfisk/TacticalZ into Movement 2016-03-13 13:41:39 +01:00
viktorljung bfb7a4139d Tweaking 2016-03-13 13:41:28 +01:00
viktorljung 60c6aa2486 Defender first person tracers done 2016-03-13 02:35:02 +01:00
Tleety 8d809f30f7 Muzzleflash now very nice 2016-03-13 02:25:11 +01:00
Tleety bbe61f300c Fade in/out should now work with models and sprites 2016-03-13 02:03:49 +01:00
Tleety 13f44c2086 Merge branch 'Movement' of github.com:teamfisk/TacticalZ into Movement 2016-03-13 01:24:01 +01:00
Tleety f6a8534c15 New assets, FadeOutComponent, Some MuzzleFlash entities, Changes to ray. Muzzleflash rotation 2016-03-13 01:23:51 +01:00
viktorljung c0fc36845f Defender ability HUD fixed 2016-03-12 18:43:04 +01:00
viktorljung 51b8846b3a Ammo sharing done 2016-03-12 18:29:49 +01:00
viktorljung dfc30f4693 Boost fixes? 2016-03-12 17:39:50 +01:00
viktorljung 944d10f4bb Some network fixes with sidearm 2016-03-12 17:34:32 +01:00
Tleety f7363eeea4 Boost icon fix 2016-03-12 17:30:28 +01:00
Tleety d51ea3cabd Merge branch 'Movement' of github.com:teamfisk/TacticalZ into Movement 2016-03-12 17:04:00 +01:00
Tleety 548efeb11e EndScreen should now show when a team win 2016-03-12 17:03:50 +01:00
viktorljung 4ba011a098 Ammosharing over network test WIP 2016-03-12 17:01:46 +01:00
viktorljung 01cb3afb4b Merge branch 'Movement' of github.com:teamfisk/TacticalZ into Movement
# Conflicts:
#	resources/Schema/Entities/PlayerAssaultBlue.xml
#	resources/Schema/Entities/PlayerDefenderBlue.xml
2016-03-12 15:48:41 +01:00
viktorljung 0b26f23188 3rd person animations idle bug fixed 2016-03-12 15:47:19 +01:00
Tleety 8c2a665ccb Some Entities for endscreen and some basic logic in the EndScreenSystem 2016-03-12 15:45:07 +01:00
Tleety 4334ea067e System skeleton 2016-03-12 14:44:03 +01:00
Tleety 8e266984f4 Player HUD should now be ok, color of health still shit tho 2016-03-12 14:37:26 +01:00
viktorljung 060585a388 Aim fixed for all weapons 2016-03-12 02:39:06 +01:00
viktorljung 2a209c5d8e AmmoSharing beta 2016-03-11 23:58:26 +01:00
viktorljung e0a6b09d36 Defender early alpha 2016-03-11 19:16:34 +01:00
viktorljung 266aca467e Merge remote-tracking branch 'origin/Weapons' into Movement
# Conflicts:
#	resources/Schema/Entities/MovementTest.xml
2016-03-11 11:25:43 +01:00
viktorljung cc127ad772 Updated defender blendtree 2016-03-10 21:31:19 +01:00
Jace 1992b6cde1 WIP Defender tracers 2016-03-10 21:15:27 +01:00
Jace c82be79bb8 Functionally working defender weapon 2016-03-10 19:26:14 +01:00
Jace 35a8d45fa4 Fixed skinned models not being able to be shielded 2016-03-10 19:20:21 +01:00
viktorljung 0d2e8c1cbe Merge branch 'master' into Movement 2016-03-10 16:31:45 +01:00
viktorljung b3ea26779a Added Unpickable component, which skips the entity in the PickingPass 2016-03-10 16:29:13 +01:00
viktorljung 59e487f9bb PlayerDefenderBlue Updated blendtree 2016-03-10 16:05:46 +01:00
100 changed files with 16338 additions and 8492 deletions
+1 -1
Submodule assets updated: 6ffc1ab82a...2c75d24ddf
+1 -1
View File
@@ -68,7 +68,7 @@ protected:
const std::string m_ComponentType; const std::string m_ComponentType;
virtual void UpdateComponent(EntityWrapper& entity, ComponentWrapper& scoreScreen, double dt) = 0; virtual void UpdateComponent(EntityWrapper& entity, ComponentWrapper& cFade, double dt) = 0;
}; };
class ImpureSystem : public virtual System class ImpureSystem : public virtual System
@@ -166,6 +166,7 @@ bool FirstPersonInputController<EventContext>::OnCommand(const Events::InputComm
aeb.Duration = 0.1; aeb.Duration = 0.1;
aeb.NodeName = "Run"; aeb.NodeName = "Run";
aeb.RootNode = firstPersonModel; aeb.RootNode = firstPersonModel;
aeb.SingleLevelBlend = true;
aeb.Start = true; aeb.Start = true;
m_EventBroker->Publish(aeb); m_EventBroker->Publish(aeb);
} }
@@ -175,6 +176,7 @@ bool FirstPersonInputController<EventContext>::OnCommand(const Events::InputComm
aeb.Duration = 0.1; aeb.Duration = 0.1;
aeb.NodeName = "Run"; aeb.NodeName = "Run";
aeb.RootNode = firstPersonModel; aeb.RootNode = firstPersonModel;
aeb.SingleLevelBlend = true;
aeb.Start = true; aeb.Start = true;
aeb.Reverse = true; aeb.Reverse = true;
m_EventBroker->Publish(aeb); m_EventBroker->Publish(aeb);
@@ -210,14 +212,41 @@ bool FirstPersonInputController<EventContext>::OnCommand(const Events::InputComm
m_EventBroker->Publish(aeb); m_EventBroker->Publish(aeb);
} }
} }
EntityWrapper firstPersonModel = m_PlayerEntity.FirstChildByName("Hands");
if (firstPersonModel.Valid()) {
if (val > 0) { // Walk/Run
if (!m_Crouching) {
Events::AutoAnimationBlend aeb;
aeb.Duration = 0.1;
aeb.NodeName = "Run";
aeb.RootNode = firstPersonModel;
aeb.SingleLevelBlend = true;
aeb.Start = true;
m_EventBroker->Publish(aeb);
}
} else if (val < 0) { // Walk/run Backwards
if (!m_Crouching) {
Events::AutoAnimationBlend aeb;
aeb.Duration = 0.1;
aeb.NodeName = "Run";
aeb.RootNode = firstPersonModel;
aeb.SingleLevelBlend = true;
aeb.Start = true;
aeb.Reverse = true;
m_EventBroker->Publish(aeb);
}
}
}
} }
} }
} }
//Animation if (m_PlayerEntity.Valid()) {
if (glm::length2(m_Movement) < 0.25f) { glm::vec2 movementXZ = glm::vec2(m_Movement.x, m_Movement.z);
//Blend to Idle if (glm::length(movementXZ) < 0.1f) {
if (m_PlayerEntity.Valid()) { //Blend to Idle
EntityWrapper playerModel = m_PlayerEntity.FirstChildByName("PlayerModel"); EntityWrapper playerModel = m_PlayerEntity.FirstChildByName("PlayerModel");
if (playerModel.Valid()) { if (playerModel.Valid()) {
Events::AutoAnimationBlend aeb; Events::AutoAnimationBlend aeb;
@@ -236,10 +265,8 @@ bool FirstPersonInputController<EventContext>::OnCommand(const Events::InputComm
aeb.Start = true; aeb.Start = true;
m_EventBroker->Publish(aeb); m_EventBroker->Publish(aeb);
} }
} } else {
} else { //Blend to movement
//Blend to movement
if (m_PlayerEntity.Valid()) {
EntityWrapper playerModel = m_PlayerEntity.FirstChildByName("PlayerModel"); EntityWrapper playerModel = m_PlayerEntity.FirstChildByName("PlayerModel");
if (playerModel.Valid()) { if (playerModel.Valid()) {
Events::AutoAnimationBlend aeb; Events::AutoAnimationBlend aeb;
@@ -251,8 +278,7 @@ bool FirstPersonInputController<EventContext>::OnCommand(const Events::InputComm
} }
} }
if (glm::length(m_Movement) > 0) {
if (glm::length2(m_Movement) > 0) {
m_Movement = glm::normalize(m_Movement); m_Movement = glm::normalize(m_Movement);
//Animation //Animation
+2
View File
@@ -10,6 +10,7 @@
#include <boost/asio.hpp> #include <boost/asio.hpp>
#include <boost/shared_array.hpp> #include <boost/shared_array.hpp>
#include "Network/EKillDeath.h"
#include "Core/World.h" #include "Core/World.h"
#include "Core/EntityFile.h" #include "Core/EntityFile.h"
#include "Core/EventBroker.h" #include "Core/EventBroker.h"
@@ -105,6 +106,7 @@ private:
void parseDashEffect(Packet& packet); void parseDashEffect(Packet& packet);
void parseAmmoPickup(Packet& packet); void parseAmmoPickup(Packet& packet);
void parseRemoveWorld(Packet& packet); void parseRemoveWorld(Packet& packet);
void parseKDEvent(Packet& packet);
void InterpolateFields(Packet& packet, const ComponentInfo & componentInfo, const EntityID & entityID, const std::string & componentType); void InterpolateFields(Packet& packet, const ComponentInfo & componentInfo, const EntityID & entityID, const std::string & componentType);
void parseSnapshot(Packet& packet); void parseSnapshot(Packet& packet);
void identifyPacketLoss(); void identifyPacketLoss();
+11
View File
@@ -10,8 +10,19 @@ namespace Events
struct KillDeath : public Event struct KillDeath : public Event
{ {
int CasualtyTeam;
PlayerID Casualty = -1; PlayerID Casualty = -1;
std::string CasualtyName;
//1 = assault, 2 = defender, 3 = sniper
int CasualtyClass;
int KillerTeam;
PlayerID Killer = -1; PlayerID Killer = -1;
std::string KillerName;
//1 = assault, 2 = defender, 3 = sniper
int KillerClass;
}; };
} }
+1
View File
@@ -24,6 +24,7 @@ enum class MessageType
ServerlistRequest, ServerlistRequest,
AmmoPickup, AmmoPickup,
RemoveWorld, RemoveWorld,
KD,
Invalid Invalid
}; };
+1 -2
View File
@@ -49,9 +49,7 @@ public:
next = next->Child[0]; next = next->Child[0];
} }
} }
return next; return next;
} }
}; };
@@ -82,6 +80,7 @@ public:
BlendTree::Node* FirstCommonParent(Node* node1, Node* node2); BlendTree::Node* FirstCommonParent(Node* node1, Node* node2);
EntityWrapper GetSubTreeRoot(std::string nodeName); EntityWrapper GetSubTreeRoot(std::string nodeName);
std::vector<EntityWrapper> GetSubTreeRoots(std::string nodeName);
std::vector<EntityWrapper> GetSingleLevelRoots(std::string name); std::vector<EntityWrapper> GetSingleLevelRoots(std::string name);
std::vector<EntityWrapper> GetEntitesByName(std::string name); std::vector<EntityWrapper> GetEntitesByName(std::string name);
+7 -1
View File
@@ -104,13 +104,18 @@ struct ModelJob : RenderJob
FillPercentage = fillPercentage; FillPercentage = fillPercentage;
IsShielded = isShielded; IsShielded = isShielded;
if (world->HasComponent(Entity, "Unpickable")) {
NotPickable = true;
}
if (model->IsSkinned()) { if (model->IsSkinned()) {
Skeleton = Model->m_RawModel->m_Skeleton; Skeleton = Model->m_RawModel->m_Skeleton;
if (Skeleton != nullptr) { if (Skeleton != nullptr) {
EntityWrapper entityWrapper = EntityWrapper(world, modelComponent.EntityID); EntityWrapper entityWrapper = EntityWrapper(world, modelComponent.EntityID);
if(Skeleton->BlendTrees.find(entityWrapper) != Skeleton->BlendTrees.end()) { if(Skeleton->BlendTrees.find(entityWrapper) != Skeleton->BlendTrees.end()) {
BlendTree = Skeleton->BlendTrees.at(entityWrapper); BlendTree = Skeleton->BlendTrees.at(entityWrapper);
} }
@@ -147,6 +152,7 @@ struct ModelJob : RenderJob
float FillPercentage = 0.0; float FillPercentage = 0.0;
bool IsShielded; bool IsShielded;
bool Shadow; bool Shadow;
bool NotPickable = false;
void CalculateHash() override void CalculateHash() override
{ {
+4 -4
View File
@@ -21,7 +21,7 @@ struct SpriteJob : RenderJob
SpriteJob(ComponentWrapper cSprite, Camera* camera, glm::mat4 matrix, World* world, glm::vec4 fillColor, float fillPercentage, bool depthSorted, bool isIndicator) SpriteJob(ComponentWrapper cSprite, Camera* camera, glm::mat4 matrix, World* world, glm::vec4 fillColor, float fillPercentage, bool depthSorted, bool isIndicator)
: RenderJob() : RenderJob()
{ {
Model = ResourceManager::Load<::Model>((std::string)cSprite["Model"]); Model = ResourceManager::Load<::Model>(cSprite["Model"]);
::RawModel::MaterialProperties matProp = Model->MaterialGroups().front(); ::RawModel::MaterialProperties matProp = Model->MaterialGroups().front();
TextureID = 0; TextureID = 0;
@@ -55,7 +55,7 @@ struct SpriteJob : RenderJob
if((bool)cSprite["KeepRatio"] == true) { if((bool)cSprite["KeepRatio"] == true) {
if(scale.y >= scale.x) { if(scale.y >= scale.x) {
ScaleY = (scale.x)/(scale.y); ScaleY = (scale.y)/(scale.x);
ScaleX = 1.f; ScaleX = 1.f;
} else { } else {
ScaleY = 1.f; ScaleY = 1.f;
@@ -91,8 +91,8 @@ struct SpriteJob : RenderJob
bool Pickable; bool Pickable;
bool IsIndicator = false; bool IsIndicator = false;
bool BlurBackground = false; bool BlurBackground = false;
float ScaleX = 1; float ScaleX = 1.f;
float ScaleY = 1; float ScaleY = 1.f;
bool Linear = false; bool Linear = false;
bool ClampToBorder = false; bool ClampToBorder = false;
+3
View File
@@ -6,6 +6,7 @@
#include "Core/EntityFile.h" #include "Core/EntityFile.h"
#include "Core/EPlayerDamage.h" #include "Core/EPlayerDamage.h"
#include "Common.h" #include "Common.h"
#include "SpawnerSystem.h"
class BoostSystem : public System class BoostSystem : public System
{ {
@@ -17,5 +18,7 @@ private:
bool OnPlayerDamage(Events::PlayerDamage& e); bool OnPlayerDamage(Events::PlayerDamage& e);
std::string DetermineClass(EntityWrapper player); std::string DetermineClass(EntityWrapper player);
void giveAmmo(EntityWrapper giver, EntityWrapper receiver);
}; };
#endif #endif
+21
View File
@@ -0,0 +1,21 @@
#ifndef EndScreenSystem_h__
#define EndScreenSystem_h__
#include "Core/System.h"
#include "Input/EInputCommand.h"
#include "Rendering/ESetCamera.h"
#include "Core/EWin.h"
class EndScreenSystem : public ImpureSystem
{
public:
EndScreenSystem(SystemParams params);
virtual void Update(double dt) override;
private:
EventRelay<EndScreenSystem, Events::Win> m_EWin;
bool OnWin(const Events::Win& e);
};
#endif
+22
View File
@@ -0,0 +1,22 @@
#ifndef FadeSystem_h__
#define FadeSystem_h__
#include "Core/System.h"
#include "GLM.h"
class FadeSystem : public PureSystem
{
public:
FadeSystem(SystemParams params)
: System(params)
, PureSystem("Fade")
{
}
virtual void UpdateComponent(EntityWrapper& entity, ComponentWrapper& cFadeOut, double dt) override;
private:
};
#endif
+20 -7
View File
@@ -3,7 +3,7 @@
#include "../../Engine/Core/System.h" #include "../../Engine/Core/System.h"
#include "../../Engine/GLM.h" #include "../../Engine/GLM.h"
#include "Core/EPlayerDeath.h" #include "Network/EKillDeath.h"
class KillFeedSystem : public ImpureSystem class KillFeedSystem : public ImpureSystem
{ {
@@ -11,8 +11,7 @@ public:
KillFeedSystem(SystemParams params) KillFeedSystem(SystemParams params)
: System(params) : System(params)
{ {
EVENT_SUBSCRIBE_MEMBER(m_EPlayerDeath, &KillFeedSystem::OnPlayerDeath); EVENT_SUBSCRIBE_MEMBER(m_EKillDeath, &KillFeedSystem::OnPlayerKillDeath)
} }
virtual void Update(double dt) override; virtual void Update(double dt) override;
@@ -22,16 +21,30 @@ private:
EventRelay<KillFeedSystem, Events::PlayerDeath> m_EPlayerDeath; EventRelay<KillFeedSystem, Events::KillDeath> m_EKillDeath;
bool KillFeedSystem::OnPlayerDeath(Events::PlayerDeath& e); bool KillFeedSystem::OnPlayerKillDeath(Events::KillDeath& e);
struct KillFeedInfo struct KillFeedInfo
{ {
std::string Content; std::string KillerName = "";
glm::vec4 Color; int KillerClass = 0;
int KillerID = -1;
int KillerTeam = 0;
std::string KillerColor = "";
std::string VictimName = "";
int VictimClass = 0;
int VictimID = -1;
int VictimTeam = 0;
std::string VictimColor = "";
bool redused;
float TimeToLive = 5.f; float TimeToLive = 5.f;
}; };
std::string m_RedColor = "\\C08366D";
std::string m_BlueColor = "\\C6A1208";
std::list<KillFeedInfo> m_DeathQueue; std::list<KillFeedInfo> m_DeathQueue;
}; };
@@ -46,4 +46,6 @@ private:
void updateMovementControllers(double dt); void updateMovementControllers(double dt);
void updateVelocity(EntityWrapper player, double dt); void updateVelocity(EntityWrapper player, double dt);
void setAim(EntityWrapper root, std::string weaponNodeName, double time);
}; };
+3 -3
View File
@@ -19,9 +19,9 @@ private:
enum class PlayerClass enum class PlayerClass
{ {
None = 0, None = 0,
Assault, Assault = 1,
Defender, Defender = 2,
Sniper Sniper = 2
}; };
struct SpawnRequest struct SpawnRequest
{ {
+1
View File
@@ -18,6 +18,7 @@ public:
// will try to pick a spawn location so that the spawned entity doesn't // will try to pick a spawn location so that the spawned entity doesn't
// collide with anything that has that component and is collidable. // collide with anything that has that component and is collidable.
static EntityWrapper Spawn(EntityWrapper spawner, EntityWrapper parent = EntityWrapper::Invalid, const std::string& dontCollideComponent = ""); static EntityWrapper Spawn(EntityWrapper spawner, EntityWrapper parent = EntityWrapper::Invalid, const std::string& dontCollideComponent = "");
static EntityWrapper SpawnEntityFile(const std::string& entityFilePath, EntityWrapper spawner, EntityWrapper parent = EntityWrapper::Invalid, const std::string& dontCollideComponent = "");
private: private:
EventRelay<SpawnerSystem, Events::SpawnerSpawn> m_OnSpawnerSpawn; EventRelay<SpawnerSystem, Events::SpawnerSpawn> m_OnSpawnerSpawn;
@@ -31,12 +31,14 @@ private:
// Weapon functions // Weapon functions
void fireBullet(ComponentWrapper cWeapon, WeaponInfo& wi); void fireBullet(ComponentWrapper cWeapon, WeaponInfo& wi);
//void dealDamage(ComponentWrapper cWeapon, WeaponInfo& wi, glm::vec3 direction, double damage);
bool canFire(ComponentWrapper cWeapon, WeaponInfo& wi); bool canFire(ComponentWrapper cWeapon, WeaponInfo& wi);
bool dealDamage(ComponentWrapper cWeapon, WeaponInfo& wi); bool dealDamage(ComponentWrapper cWeapon, WeaponInfo& wi);
// Utility // Utility
//Camera cameraFromEntity(EntityWrapper camera); //Camera cameraFromEntity(EntityWrapper camera);
void CheckBoost(ComponentWrapper cWeapon, WeaponInfo& wi);
}; };
#endif #endif
@@ -6,6 +6,7 @@
#include "Core/EPlayerDamage.h" #include "Core/EPlayerDamage.h"
#include "Sound/EPlaySoundOnEntity.h" #include "Sound/EPlaySoundOnEntity.h"
#include "Sound/EPlaySoundOnEntity.h" #include "Sound/EPlaySoundOnEntity.h"
#include <glm/gtx/vector_angle.hpp>
class DefenderWeaponBehaviour : public WeaponBehaviour<DefenderWeaponBehaviour> class DefenderWeaponBehaviour : public WeaponBehaviour<DefenderWeaponBehaviour>
{ {
@@ -23,18 +24,24 @@ public:
void OnReload(ComponentWrapper cWeapon, WeaponInfo& wi) override; void OnReload(ComponentWrapper cWeapon, WeaponInfo& wi) override;
void OnHolster(ComponentWrapper cWeapon, WeaponInfo& wi) override; void OnHolster(ComponentWrapper cWeapon, WeaponInfo& wi) override;
bool OnInputCommand(ComponentWrapper cWeapon, WeaponInfo& wi, const Events::InputCommand& e) override; bool OnInputCommand(ComponentWrapper cWeapon, WeaponInfo& wi, const Events::InputCommand& e) override;
void OnEquip(ComponentWrapper cWeapon, WeaponInfo& wi) override;
private: private:
std::random_device m_RandomDevice; std::random_device m_RandomDevice;
std::mt19937 m_RandomEngine; std::mt19937 m_RandomEngine;
// Weapon functions // Weapon functions
void fireShell(ComponentWrapper cWeapon, WeaponInfo& wi); void fireShell(ComponentWrapper cWeapon, WeaponInfo& wi);
void dealDamage(ComponentWrapper cWeapon, WeaponInfo& wi, glm::vec3 direction, double damage); void dealDamage(ComponentWrapper cWeapon, WeaponInfo& wi, const std::vector<glm::vec2>& pattern);
void spawnTracers(ComponentWrapper cWeapon, WeaponInfo& wi, std::vector<glm::vec2> pattern);
bool canFire(ComponentWrapper cWeapon, WeaponInfo& wi); bool canFire(ComponentWrapper cWeapon, WeaponInfo& wi);
// Utility // Utility
Camera cameraFromEntity(EntityWrapper camera); Camera cameraFromEntity(EntityWrapper camera);
void CheckBoost(ComponentWrapper cWeapon, WeaponInfo& wi);
}; };
#endif #endif
@@ -4,6 +4,8 @@
#include "WeaponBehaviour.h" #include "WeaponBehaviour.h"
#include "Collision/Collision.h" #include "Collision/Collision.h"
#include "Core/EPlayerDamage.h" #include "Core/EPlayerDamage.h"
#include "Sound/EPlaySoundOnEntity.h"
#include "Rendering/EAutoAnimationBlend.h"
class SidearmWeaponBehaviour : public WeaponBehaviour<SidearmWeaponBehaviour> class SidearmWeaponBehaviour : public WeaponBehaviour<SidearmWeaponBehaviour>
{ {
@@ -18,6 +20,7 @@ public:
void UpdateWeapon(ComponentWrapper cWeapon, WeaponInfo& wi, double dt) override; void UpdateWeapon(ComponentWrapper cWeapon, WeaponInfo& wi, double dt) override;
void OnPrimaryFire(ComponentWrapper cWeapon, WeaponInfo& wi) override; void OnPrimaryFire(ComponentWrapper cWeapon, WeaponInfo& wi) override;
void OnCeasePrimaryFire(ComponentWrapper cWeapon, WeaponInfo& wi) override; void OnCeasePrimaryFire(ComponentWrapper cWeapon, WeaponInfo& wi) override;
void OnReload(ComponentWrapper cWeapon, WeaponInfo& wi) override;
void OnEquip(ComponentWrapper cWeapon, WeaponInfo& wi) override; void OnEquip(ComponentWrapper cWeapon, WeaponInfo& wi) override;
void OnHolster(ComponentWrapper cWeapon, WeaponInfo& wi) override; void OnHolster(ComponentWrapper cWeapon, WeaponInfo& wi) override;
@@ -32,6 +35,16 @@ private:
// Utility // Utility
bool canFire(ComponentWrapper cWeapon); bool canFire(ComponentWrapper cWeapon);
bool playerInFirstPerson(EntityWrapper player); bool playerInFirstPerson(EntityWrapper player);
bool dealDamage(ComponentWrapper cWeapon, WeaponInfo& wi);
// void giveAmmo(ComponentWrapper cWeapon, WeaponInfo& wi, EntityWrapper receiver);
void spawnTracer(ComponentWrapper cWeapon, WeaponInfo& wi);
void CheckAmmo(ComponentWrapper cWeapon, WeaponInfo& wi);
void RemoveFrindlyAmmoHUD(WeaponInfo& wi);
//float traceRayDistance(glm::vec3 origin, glm::vec3 direction); //float traceRayDistance(glm::vec3 origin, glm::vec3 direction);
}; };
@@ -306,6 +306,8 @@ private:
wi.ThirdPersonEntity = thirdPersonWeapon; wi.ThirdPersonEntity = thirdPersonWeapon;
wi.ThirdPersonPlayerModel = thirdPersonWeapon.FirstParentWithComponent("Model"); wi.ThirdPersonPlayerModel = thirdPersonWeapon.FirstParentWithComponent("Model");
player["Player"]["CurrentWeapon"] = cWeapon.Info.Name;
OnEquip(cWeapon, wi); OnEquip(cWeapon, wi);
} }
+4 -4
View File
@@ -76,16 +76,16 @@ NumIterations=9
TextureQuality=0 TextureQuality=0
[GLOW] [GLOW]
Quality=3 Quality=1
[GLOW1] [GLOW1]
NumIterations=5 NumIterations=2
[GLOW2] [GLOW2]
NumIterations=9 NumIterations=4
[GLOW3] [GLOW3]
NumIterations=13 NumIterations=6
[MSAA] [MSAA]
Level = 0; Level = 0;
+3
View File
@@ -68,6 +68,9 @@
<xs:include schemaLocation="Components/NetworkComponent.xsd"/> <xs:include schemaLocation="Components/NetworkComponent.xsd"/>
<xs:include schemaLocation="Components/ServerIdentity.xsd"/> <xs:include schemaLocation="Components/ServerIdentity.xsd"/>
<xs:include schemaLocation="Components/ServerList.xsd"/> <xs:include schemaLocation="Components/ServerList.xsd"/>
<xs:include schemaLocation="Components/Unpickable.xsd"/>
<xs:include schemaLocation="Components/ConfigBtnResolution.xsd"/> <xs:include schemaLocation="Components/ConfigBtnResolution.xsd"/>
<xs:include schemaLocation="Components/ConfigBtnFloat.xsd"/> <xs:include schemaLocation="Components/ConfigBtnFloat.xsd"/>
<xs:include schemaLocation="Components/EndScreen.xsd"/>
<xs:include schemaLocation="Components/Fade.xsd"/>
</xs:schema> </xs:schema>
@@ -1,14 +1,14 @@
<?xml version="1.0" encoding="UTF-8" standalone="no" ?> <?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<DefenderWeapon xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="DefenderWeapon.xsd"> <DefenderWeapon xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="DefenderWeapon.xsd">
<Slot><Primary/></Slot> <Slot><Primary/></Slot>
<MagazineAmmo>8</MagazineAmmo> <MagazineAmmo>9999</MagazineAmmo>
<MagazineSize>8</MagazineSize> <MagazineSize>8</MagazineSize>
<Ammo>64</Ammo> <Ammo>64</Ammo>
<MaxAmmo>64</MaxAmmo> <MaxAmmo>64</MaxAmmo>
<BaseDamage>90</BaseDamage> <BaseDamage>90</BaseDamage>
<SpreadAngle>0.174533</SpreadAngle> <!-- 0.174533 = 10 degrees --> <SpreadAngle>10</SpreadAngle>
<MaxTravelAngle>0.174533</MaxTravelAngle> <!-- 0.174533 = 10 degrees --> <MaxTravelAngle>0.174533</MaxTravelAngle> <!-- 0.174533 = 10 degrees -->
<NumPellets>10</NumPellets> <NumPellets>9</NumPellets>
<RPM>120</RPM> <RPM>120</RPM>
<ViewPunch>0.03</ViewPunch> <ViewPunch>0.03</ViewPunch>
<ViewReturnSpeed>0.2</ViewReturnSpeed> <ViewReturnSpeed>0.2</ViewReturnSpeed>
@@ -36,7 +36,7 @@
<xs:annotation><xs:documentation>Damage dealt if all shotgun pellets hit</xs:documentation></xs:annotation> <xs:annotation><xs:documentation>Damage dealt if all shotgun pellets hit</xs:documentation></xs:annotation>
</xs:element> </xs:element>
<xs:element name="SpreadAngle" type="t:float" minOccurs="0"> <xs:element name="SpreadAngle" type="t:float" minOccurs="0">
<xs:annotation><xs:documentation>Spread angle in radians</xs:documentation></xs:annotation> <xs:annotation><xs:documentation>The spread angle radius.</xs:documentation></xs:annotation>
</xs:element> </xs:element>
<xs:element name="MaxTravelAngle" type="t:float" minOccurs="0"> <xs:element name="MaxTravelAngle" type="t:float" minOccurs="0">
<xs:annotation><xs:documentation>Maximum vertical aim travel angle in radians</xs:documentation></xs:annotation> <xs:annotation><xs:documentation>Maximum vertical aim travel angle in radians</xs:documentation></xs:annotation>
@@ -0,0 +1,3 @@
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<EndScreen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="EndScreen.xsd">
</EndScreen>
+10
View File
@@ -0,0 +1,10 @@
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:t="types">
<xs:import schemaLocation="../Types.xsd" namespace="types"/>
<xs:element name="EndScreen">
<xs:annotation>
<xs:documentation>Put this on the camera that will show the final screen.</xs:documentation>
</xs:annotation>
</xs:element>
</xs:schema>
+7
View File
@@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<Fade xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="Fade.xsd">
<FadeTime>1</FadeTime>
<Time>0</Time>
<Out>true</Out>
<Reverse>false</Reverse>
</Fade>
+20
View File
@@ -0,0 +1,20 @@
<?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="Fade">
<xs:complexType>
<xs:all>
<xs:element name="FadeTime" type="t:double" minOccurs="0"/>
<xs:element name="Time" type="t:double" minOccurs="0"/>
<xs:element name="Out" type="t:bool" minOccurs="0">
<xs:annotation><xs:documentation>If the entity should fade out or in.</xs:documentation></xs:annotation>
</xs:element>
<xs:element name="Reverse" type="t:bool" minOccurs="0">
<xs:annotation><xs:documentation>If the entity should reverse the fade after finishing, this will double the speed.</xs:documentation></xs:annotation>
</xs:element>
</xs:all>
</xs:complexType>
</xs:element>
</xs:schema>
+5 -1
View File
@@ -1,2 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="no" ?> <?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<PlayerSpawn xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="PlayerSpawn.xsd"/> <PlayerSpawn xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="PlayerSpawn.xsd">
<AssaultFile>Schema/Entities/PlayerAssaultBlue.xml</AssaultFile>
<DefenderFile>Schema/Entities/PlayerDefenderBlue.xml</DefenderFile>
<SniperFile></SniperFile>
</PlayerSpawn>
@@ -7,5 +7,12 @@
<xs:annotation> <xs:annotation>
<xs:documentation>Combined with a Spawner and a Team component, defines a spawn point for a player team.</xs:documentation> <xs:documentation>Combined with a Spawner and a Team component, defines a spawn point for a player team.</xs:documentation>
</xs:annotation> </xs:annotation>
<xs:complexType>
<xs:all>
<xs:element name="AssaultFile" type="t:string" minOccurs="0"/>
<xs:element name="DefenderFile" type="t:string" minOccurs="0"/>
<xs:element name="SniperFile" type="t:string" minOccurs="0"/>
</xs:all>
</xs:complexType>
</xs:element> </xs:element>
</xs:schema> </xs:schema>
@@ -7,10 +7,11 @@
<RPM>500</RPM> <RPM>500</RPM>
<Automatic>false</Automatic> <Automatic>false</Automatic>
<ViewPunch>0.01</ViewPunch> <ViewPunch>0.01</ViewPunch>
<ReloadTime>0.5</ReloadTime> <ReloadTime>1.0</ReloadTime>
<EquipTime>0.5</EquipTime> <EquipTime>0.5</EquipTime>
<TriggerHeld>false</TriggerHeld> <TriggerHeld>false</TriggerHeld>
<FireCooldown>0</FireCooldown> <FireCooldown>0</FireCooldown>
<ReloadQueued>false</ReloadQueued>
<IsReloading>false</IsReloading> <IsReloading>false</IsReloading>
<ReloadTimer>0</ReloadTimer> <ReloadTimer>0</ReloadTimer>
</SidearmWeapon> </SidearmWeapon>
@@ -44,6 +44,7 @@
</xs:element> </xs:element>
<xs:element name="TriggerHeld" type="t:bool" minOccurs="0"/> <xs:element name="TriggerHeld" type="t:bool" minOccurs="0"/>
<xs:element name="FireCooldown" type="t:double" minOccurs="0"/> <xs:element name="FireCooldown" type="t:double" minOccurs="0"/>
<xs:element name="ReloadQueued" type="t:bool" minOccurs="0"/>
<xs:element name="IsReloading" type="t:bool" minOccurs="0"/> <xs:element name="IsReloading" type="t:bool" minOccurs="0"/>
<xs:element name="ReloadTimer" type="t:double" minOccurs="0"/> <xs:element name="ReloadTimer" type="t:double" minOccurs="0"/>
</xs:all> </xs:all>
@@ -0,0 +1,3 @@
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<Unpickable xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="Unpickable.xsd">
</Unpickable>
@@ -0,0 +1,11 @@
<?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="Unpickable">
<xs:annotation>
<xs:documentation>Makes the entity unpickable</xs:documentation>
</xs:annotation>
</xs:element>
</xs:schema>
+94
View File
@@ -0,0 +1,94 @@
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<Entity xmlns:c="components" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../Types/Entity.xsd">
<Components>
<c:Transform/>
</Components>
<Children>
<Entity name="RayBlue">
<Components>
<c:Transform>
<Orientation X="0" Y="0.174532995" Z="0"/>
<Scale X="0" Y="1" Z="100"/>
</c:Transform>
</Components>
<Children>
<Entity>
<Components>
<c:Sprite>
<Model>Models/Core/UnitQuad.mesh</Model>
<GlowMap></GlowMap>
<DiffuseTexture>Textures/Effects/Ray.png</DiffuseTexture>
<Color A="0.419607848" B="3.92156863" G="0.270588249" R="0"/>
</c:Sprite>
<c:Transform>
<Position X="0" Y="0" Z="-0.5"/>
<Orientation X="0" Y="-1.57099998" Z="0"/>
<Scale X="1" Y="0.0260000005" Z="0"/>
</c:Transform>
</Components>
<Children/>
</Entity>
<Entity>
<Components>
<c:Sprite>
<Model>Models/Core/UnitQuad.mesh</Model>
<GlowMap></GlowMap>
<DiffuseTexture>Textures/Effects/Ray.png</DiffuseTexture>
<Color A="0.419607848" B="3.92156863" G="0.270588249" R="0"/>
</c:Sprite>
<c:Transform>
<Position X="0" Y="0" Z="-0.5"/>
<Orientation X="0" Y="4.71218538" Z="3.14199996"/>
<Scale X="1" Y="0.0260000005" Z="0"/>
</c:Transform>
</Components>
<Children/>
</Entity>
</Children>
</Entity>
<Entity name="RayBlue">
<Components>
<c:Transform>
<Scale X="0" Y="1" Z="100"/>
</c:Transform>
</Components>
<Children>
<Entity>
<Components>
<c:Sprite>
<Model>Models/Core/UnitQuad.mesh</Model>
<GlowMap></GlowMap>
<DiffuseTexture>Textures/Effects/Ray.png</DiffuseTexture>
<Color A="0.419607848" B="3.92156863" G="0.270588249" R="0"/>
</c:Sprite>
<c:Transform>
<Position X="0" Y="0" Z="-0.5"/>
<Orientation X="0" Y="-1.57099998" Z="0"/>
<Scale X="1" Y="0.0260000005" Z="0"/>
</c:Transform>
</Components>
<Children/>
</Entity>
<Entity>
<Components>
<c:Sprite>
<Model>Models/Core/UnitQuad.mesh</Model>
<GlowMap></GlowMap>
<DiffuseTexture>Textures/Effects/Ray.png</DiffuseTexture>
<Color A="0.419607848" B="3.92156863" G="0.270588249" R="0"/>
</c:Sprite>
<c:Transform>
<Position X="0" Y="0" Z="-0.5"/>
<Orientation X="0" Y="4.71218538" Z="3.14199996"/>
<Scale X="1" Y="0.0260000005" Z="0"/>
</c:Transform>
</Components>
<Children/>
</Entity>
</Children>
</Entity>
</Children>
</Entity>
@@ -0,0 +1,34 @@
<?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:Lifetime>
<Lifetime>1.2000000476837158</Lifetime>
</c:Lifetime>
<c:ExplosionEffect>
<Velocity X="2.08100009" Y="3.37400007" Z="0"/>
<ExplosionOrigin X="0" Y="0" Z="2.91200018"/>
<TimeSinceDeath>1.2000000476837158</TimeSinceDeath>
<Speed>-1</Speed>
<ExplosionDuration>1.2000000476837158</ExplosionDuration>
<EndColor A="0.262745112" B="19.6078434" G="3.92156863" R="0"/>
<Randomness>true</Randomness>
<ColorByDistance>true</ColorByDistance>
</c:ExplosionEffect>
<c:Model>
<GlowIntensity>16.040000915527344</GlowIntensity>
<Resource>Models/Effects/JumpEffectHexagon.mesh</Resource>
<Color A="0" B="1.96078432" G="0" R="3.92156863"/>
<Transparent>true</Transparent>
</c:Model>
<c:NetworkComponent/>
<c:Transform>
<Position X="0" Y="-0.0900000036" Z="-0.00600000005"/>
<Orientation X="1.57000005" Y="0" Z="0"/>
<Scale X="0.0299999993" Y="0.0299999993" Z="0.0299999993"/>
</c:Transform>
</Components>
<Children/>
</Entity>
File diff suppressed because it is too large Load Diff
+79 -22
View File
@@ -1,39 +1,96 @@
<?xml version="1.0" encoding="UTF-8" standalone="no" ?> <?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"> <Entity xmlns:c="components" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../Types/Entity.xsd">
<Components> <Components>
<c:Blend>
<Pose1>Deploy</Pose1>
<Pose2>Idle</Pose2>
<Weight>0</Weight>
</c:Blend>
<c:Model>
<Resource>Models/Characters/Defender/DefenderShield.mesh</Resource>
</c:Model>
<c:Transform/> <c:Transform/>
</Components> </Components>
<Children> <Children>
<Entity name="Deploy"> <Entity name="Back">
<Components> <Components>
<c:Animation> <c:Blend>
<AnimationName>ActivateDeactiveShieldF</AnimationName> <Pose1>Deploy</Pose1>
<Time>1</Time> <Pose2>Idle</Pose2>
<Speed>1</Speed> <Weight>0</Weight>
</c:Animation> </c:Blend>
<c:Shielded/>
<c:Model>
<Resource>Models/Characters/Defender/DefenderShieldBack.mesh</Resource>
<Color A="0.219607845" B="3.92156863" G="1" R="1"/>
<Shadow>false</Shadow>
<Transparent>true</Transparent>
<NormalMap>false</NormalMap>
<DiffuseTexture>false</DiffuseTexture>
<SpecularMap>false</SpecularMap>
<GlowMap>false</GlowMap>
</c:Model>
<c:Transform/> <c:Transform/>
</Components> </Components>
<Children/> <Children>
<Entity name="Deploy">
<Components>
<c:Animation>
<AnimationName>ActivateShieldU</AnimationName>
<Loop>false</Loop>
</c:Animation>
<c:Transform/>
</Components>
<Children/>
</Entity>
<Entity name="Idle">
<Components>
<c:Animation>
<AnimationName>ShieldFrontU</AnimationName>
<Play>true</Play>
</c:Animation>
<c:Transform/>
</Components>
<Children/>
</Entity>
</Children>
</Entity> </Entity>
<Entity name="Idle"> <Entity name="Front">
<Components> <Components>
<c:Animation> <c:Blend>
<AnimationName>ShieldFrontF</AnimationName> <Pose1>Deploy</Pose1>
<Speed>1</Speed> <Pose2>Idle</Pose2>
</c:Animation> <Weight>0</Weight>
</c:Blend>
<c:Model>
<Resource>Models/Characters/Defender/DefenderShieldFront.mesh</Resource>
<Color A="0.219607845" B="3.92156863" G="1" R="1"/>
<Shadow>false</Shadow>
<Transparent>true</Transparent>
<NormalMap>false</NormalMap>
<DiffuseTexture>false</DiffuseTexture>
<SpecularMap>false</SpecularMap>
<GlowMap>false</GlowMap>
</c:Model>
<c:Shield/>
<c:Transform/> <c:Transform/>
</Components> </Components>
<Children/> <Children>
<Entity name="Deploy">
<Components>
<c:Animation>
<AnimationName>ActivateShieldU</AnimationName>
<Loop>false</Loop>
</c:Animation>
<c:Transform/>
</Components>
<Children/>
</Entity>
<Entity name="Idle">
<Components>
<c:Animation>
<AnimationName>ShieldFrontU</AnimationName>
<Loop>false</Loop>
</c:Animation>
<c:Transform/>
</Components>
<Children/>
</Entity>
</Children>
</Entity> </Entity>
</Children> </Children>
+89
View File
@@ -0,0 +1,89 @@
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<Entity name="EndScreen_Origin" xmlns:c="components" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../Types/Entity.xsd">
<Components>
<c:Transform>
<Position X="0" Y="3.10000014" Z="42.9360008"/>
</c:Transform>
</Components>
<Children>
<Entity name="Camera">
<Components>
<c:Camera/>
<c:EndScreen/>
<c:Transform/>
</Components>
<Children>
<Entity name="Sprite_Origin">
<Components>
<c:Transform>
<Position X="0" Y="0.65200001" Z="-1.72800004"/>
</c:Transform>
</Components>
<Children>
<Entity name="SpriteRed">
<Components>
<c:Sprite>
<Model>Models/Core/UnitQuad.mesh</Model>
<GlowMap></GlowMap>
<DiffuseTexture>Textures/Core/White.png</DiffuseTexture>
<BlurBackground>true</BlurBackground>
<Color A="0.588235319" B="0" G="0" R="0.588235319"/>
<Visible>false</Visible>
</c:Sprite>
<c:Transform>
<Scale X="1.30000007" Y="0.300000012" Z="1"/>
</c:Transform>
</Components>
<Children/>
</Entity>
<Entity name="SpriteBlue">
<Components>
<c:Sprite>
<Model>Models/Core/UnitQuad.mesh</Model>
<GlowMap></GlowMap>
<DiffuseTexture>Textures/Core/White.png</DiffuseTexture>
<BlurBackground>true</BlurBackground>
<Color A="0.588235319" B="0.588235319" G="0" R="0"/>
</c:Sprite>
<c:Transform>
<Scale X="1.30000007" Y="0.300000012" Z="1"/>
</c:Transform>
</Components>
<Children/>
</Entity>
<Entity name="TextBlue">
<Components>
<c:Text>
<Content>Blue team win!</Content>
<Resource>Fonts/DroidSans.ttf,64</Resource>
<Visible>false</Visible>
</c:Text>
<c:Transform>
<Position X="0" Y="-0.0670000017" Z="0.0299999993"/>
<Scale X="0.150000006" Y="0.150000006" Z="1"/>
</c:Transform>
</Components>
<Children/>
</Entity>
<Entity name="TextRed">
<Components>
<c:Text>
<Content>Red team win!</Content>
<Resource>Fonts/DroidSans.ttf,64</Resource>
</c:Text>
<c:Transform>
<Position X="0" Y="-0.0670000017" Z="0.0299999993"/>
<Scale X="0.150000006" Y="0.150000006" Z="1"/>
</c:Transform>
</Components>
<Children/>
</Entity>
</Children>
</Entity>
</Children>
</Entity>
</Children>
</Entity>
@@ -0,0 +1,63 @@
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<Entity name="FriendlyAmmoHUD" xmlns:c="components" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../Types/Entity.xsd">
<Components>
<c:Transform/>
</Components>
<Children>
<Entity name="AmmunitionHUDBackground">
<Components>
<c:Sprite>
<Model>Models/Core/UnitQuad.mesh</Model>
<GlowMap></GlowMap>
<DiffuseTexture>Textures/Core/UnitHexagon.png</DiffuseTexture>
<Color A="0.588235319" B="0" G="0" R="0"/>
</c:Sprite>
<c:Transform>
<Position X="0" Y="0" Z="-0.00300000003"/>
<Scale X="0.0599999987" Y="0.0599999987" Z="0.0599999987"/>
</c:Transform>
</Components>
<Children/>
</Entity>
<Entity name="AmmunitionText">
<Components>
<c:Transform>
<Position X="-6.26170804e-05" Y="-0.0136084575" Z="0"/>
</c:Transform>
</Components>
<Children>
<Entity name="MagazineAmmo">
<Components>
<c:Text>
<Content>88</Content>
<Resource>Fonts/DroidSans.ttf,64</Resource>
<Color A="1" B="1.25490201" G="0" R="1.25490201"/>
</c:Text>
<c:Transform>
<Position X="1.53152232e-05" Y="0.0123614743" Z="-8.43336147e-06"/>
<Scale X="0.0299999993" Y="0.0299999993" Z="0.0299999993"/>
</c:Transform>
</Components>
<Children/>
</Entity>
<Entity name="Ammo">
<Components>
<c:Text>
<Content>88</Content>
<Resource>Fonts/DroidSans.ttf,64</Resource>
<Color A="1" B="1.25490201" G="0" R="1.25490201"/>
</c:Text>
<c:Transform>
<Position X="-5.92374272e-06" Y="-0.00478126714" Z="3.26191866e-06"/>
<Scale X="0.0199999996" Y="0.0199999996" Z="0.0199999996"/>
</c:Transform>
</Components>
<Children/>
</Entity>
</Children>
</Entity>
</Children>
</Entity>
@@ -0,0 +1,15 @@
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<Entity name="FriendlyBoostAttachment" xmlns:c="components" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../Types/Entity.xsd">
<Components>
<c:Spawner>
<EntityFile>Schema/Entities/FriendlyBoostBlueHUD.xml</EntityFile>
</c:Spawner>
<c:Transform>
<Position X="-0.000110394583" Y="-0.0891034827" Z="6.07890324e-05"/>
</c:Transform>
</Components>
<Children/>
</Entity>
@@ -0,0 +1,151 @@
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<Entity name="FriendlyBoostHUD" xmlns:c="components" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../Types/Entity.xsd">
<Components>
<c:Lifetime>
<Lifetime>0.5</Lifetime>
</c:Lifetime>
<c:Transform>
<Scale X="1.20000005" Y="1.20000005" Z="1"/>
</c:Transform>
</Components>
<Children>
<Entity name="BoostHUDBackground">
<Components>
<c:Sprite>
<Model>Models/Core/UnitQuad.mesh</Model>
<GlowMap></GlowMap>
<DiffuseTexture>Textures/Core/UnitHexagon.png</DiffuseTexture>
<Color A="0.588235319" B="0" G="0" R="0"/>
</c:Sprite>
<c:Transform>
<Position X="0" Y="0" Z="-0.00300000003"/>
<Scale X="0.0599999987" Y="0.0599999987" Z="0.0599999987"/>
</c:Transform>
</Components>
<Children/>
</Entity>
<Entity name="BoostIcons">
<Components>
<c:Transform>
<Position X="-1.47358617e-06" Y="-0.0191892758" Z="4.05375999e-07"/>
</c:Transform>
</Components>
<Children>
<Entity name="AssaultBoost">
<Components>
<c:Transform>
<Position X="0.0120000001" Y="0.00899999961" Z="-8.43336147e-06"/>
<Scale X="0.0199999996" Y="0.0199999996" Z="0.0199999996"/>
</c:Transform>
</Components>
<Children>
<Entity name="Active">
<Components>
<c:Text>
<Content>\1</Content>
<Resource>Fonts/Hind-Edited.otf,64</Resource>
<Color A="1" B="1.37254906" G="0.392156869" R="0"/>
<Visible>false</Visible>
</c:Text>
<c:Transform>
<Position X="0" Y="0" Z="0.0149999997"/>
</c:Transform>
</Components>
<Children/>
</Entity>
<Entity name="Inactive">
<Components>
<c:Text>
<Content>\1</Content>
<Resource>Fonts/Hind-Edited.otf,64</Resource>
<Color A="1" B="0.784313738" G="0.784313738" R="0.784313738"/>
</c:Text>
<c:Transform>
<Position X="0" Y="0" Z="-8.43336147e-06"/>
</c:Transform>
</Components>
<Children/>
</Entity>
</Children>
</Entity>
<Entity name="DefenderBoost">
<Components>
<c:Transform>
<Position X="-0.0120000001" Y="0.00900000054" Z="-8.43336147e-06"/>
<Scale X="0.0199999996" Y="0.0199999996" Z="0.0199999996"/>
</c:Transform>
</Components>
<Children>
<Entity name="Inactive">
<Components>
<c:Text>
<Content>\2</Content>
<Resource>Fonts/Hind-Edited.otf,64</Resource>
<Color A="1" B="0.784313738" G="0.784313738" R="0.784313738"/>
</c:Text>
<c:Transform>
<Position X="0" Y="0" Z="-8.43336147e-06"/>
</c:Transform>
</Components>
<Children/>
</Entity>
<Entity name="Active">
<Components>
<c:Text>
<Content>\2</Content>
<Resource>Fonts/Hind-Edited.otf,64</Resource>
<Color A="1" B="1.37254906" G="0.392156869" R="0"/>
<Visible>false</Visible>
</c:Text>
<c:Transform>
<Position X="0" Y="0" Z="0.00999999978"/>
</c:Transform>
</Components>
<Children/>
</Entity>
</Children>
</Entity>
<Entity name="SniperBoost">
<Components>
<c:Transform>
<Position X="0" Y="0.0310000014" Z="-1.21438188e-05"/>
<Scale X="0.0199999996" Y="0.0199999996" Z="0.0199999996"/>
</c:Transform>
</Components>
<Children>
<Entity name="Active">
<Components>
<c:Text>
<Content>\3</Content>
<Resource>Fonts/Hind-Edited.otf,64</Resource>
<Color A="1" B="1.37254906" G="0.392156869" R="0"/>
<Visible>false</Visible>
</c:Text>
<c:Transform>
<Position X="0" Y="0" Z="0.00999999978"/>
</c:Transform>
</Components>
<Children/>
</Entity>
<Entity name="Inactive">
<Components>
<c:Text>
<Content>\3</Content>
<Resource>Fonts/Hind-Edited.otf,64</Resource>
<Color A="1" B="0.784313738" G="0.784313738" R="0.784313738"/>
</c:Text>
<c:Transform>
<Position X="0" Y="0" Z="-8.43336147e-06"/>
</c:Transform>
</Components>
<Children/>
</Entity>
</Children>
</Entity>
</Children>
</Entity>
</Children>
</Entity>
+27
View File
@@ -0,0 +1,27 @@
<?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:Lifetime>
<Lifetime>10</Lifetime>
</c:Lifetime>
<c:ExplosionEffect>
<Velocity X="2" Y="2.30000019" Z="0"/>
<ExplosionDuration>1</ExplosionDuration>
<Randomness>true</Randomness>
<ExponentialAccelaration>true</ExponentialAccelaration>
</c:ExplosionEffect>
<c:Model>
<Resource>Models/Core/UnitSphere.mesh</Resource>
<Color A="1" B="1" G="1" R="3.92156863"/>
<Shadow>false</Shadow>
<Transparent>true</Transparent>
</c:Model>
<c:Transform>
<Scale X="0.0500000007" Y="0.0500000007" Z="0.0500000007"/>
</c:Transform>
</Components>
<Children/>
</Entity>
File diff suppressed because it is too large Load Diff
+201 -76
View File
@@ -1,101 +1,226 @@
<?xml version="1.0" encoding="UTF-8" standalone="no" ?> <?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<Entity name="MuzzleFlashBlue" xmlns:c="components" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../Types/Entity.xsd"> <Entity name="MuzzleFlashFire" xmlns:c="components" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../Types/Entity.xsd">
<Components> <Components>
<c:Lifetime> <c:Lifetime>
<Lifetime>0.039999999105930328</Lifetime> <Lifetime>0.08</Lifetime>
</c:Lifetime> </c:Lifetime>
<c:Transform/> <c:Transform/>
</Components> </Components>
<Children> <Children>
<Entity name="PlaneRight"> <Entity name="Level1">
<Components> <Components>
<c:Model>
<Resource>Models/Effects/MuzzleFlash/Blue/PlaneRight.mesh</Resource>
<Shadow>false</Shadow>
<Transparent>true</Transparent>
</c:Model>
<c:Transform/> <c:Transform/>
</Components> </Components>
<Children/> <Children>
<Entity name="Cone1Outside">
<Components>
<c:Fade>
<FadeTime>0.08</FadeTime>
<Reverse>true</Reverse>
</c:Fade>
<c:Model>
<GlowIntensity>2</GlowIntensity>
<Resource>Models/Effects/MuzzleFlash/Blue/Cone1Outside.mesh</Resource>
<Shadow>false</Shadow>
<Transparent>true</Transparent>
</c:Model>
<c:Transform/>
</Components>
<Children/>
</Entity>
<Entity name="Cone1Inside">
<Components>
<c:Fade>
<FadeTime>0.08</FadeTime>
<Reverse>true</Reverse>
</c:Fade>
<c:Model>
<GlowIntensity>2</GlowIntensity>
<Resource>Models/Effects/MuzzleFlash/Blue/Cone1Inside.mesh</Resource>
<Shadow>false</Shadow>
<Transparent>true</Transparent>
</c:Model>
<c:Transform/>
</Components>
<Children/>
</Entity>
</Children>
</Entity> </Entity>
<Entity name="Cone1Outside"> <Entity name="Level2">
<Components> <Components>
<c:Model> <c:Transform>
<Resource>Models/Effects/MuzzleFlash/Blue/Cone1Outside.mesh</Resource> <Position X="0.000134464673" Y="8.11116188e-05" Z="-0.0197895896"/>
<Shadow>false</Shadow> </c:Transform>
<Transparent>true</Transparent>
</c:Model>
<c:Transform/>
</Components> </Components>
<Children/> <Children>
<Entity name="Cone2Inside">
<Components>
<c:Fade>
<FadeTime>0.08</FadeTime>
<Reverse>true</Reverse>
</c:Fade>
<c:Model>
<GlowIntensity>2</GlowIntensity>
<Resource>Models/Effects/MuzzleFlash/Blue/Cone2Inside.mesh</Resource>
<Shadow>false</Shadow>
<Transparent>true</Transparent>
</c:Model>
<c:Transform/>
</Components>
<Children/>
</Entity>
<Entity name="Cone2Outside">
<Components>
<c:Fade>
<FadeTime>0.08</FadeTime>
<Reverse>true</Reverse>
</c:Fade>
<c:Model>
<GlowIntensity>2</GlowIntensity>
<Resource>Models/Effects/MuzzleFlash/Blue/Cone2Outside.mesh</Resource>
<Shadow>false</Shadow>
<Transparent>true</Transparent>
</c:Model>
<c:Transform/>
</Components>
<Children/>
</Entity>
</Children>
</Entity> </Entity>
<Entity name="Cone1Inside"> <Entity name="Level3">
<Components> <Components>
<c:Model> <c:Transform>
<Resource>Models/Effects/MuzzleFlash/Blue/Cone1Inside.mesh</Resource> <Position X="0.000216802931" Y="0.000130779619" Z="-0.0319075659"/>
<Shadow>false</Shadow> </c:Transform>
<Transparent>true</Transparent>
</c:Model>
<c:Transform/>
</Components> </Components>
<Children/> <Children>
<Entity name="PlaneLeft">
<Components>
<c:Fade>
<FadeTime>0.08</FadeTime>
<Reverse>true</Reverse>
</c:Fade>
<c:Model>
<GlowIntensity>2</GlowIntensity>
<Resource>Models/Effects/MuzzleFlash/Blue/PlaneLeft.mesh</Resource>
<Shadow>false</Shadow>
<Transparent>true</Transparent>
</c:Model>
<c:Transform/>
</Components>
<Children/>
</Entity>
<Entity name="PlaneRight">
<Components>
<c:Fade>
<FadeTime>0.08</FadeTime>
<Reverse>true</Reverse>
</c:Fade>
<c:Model>
<GlowIntensity>2</GlowIntensity>
<Resource>Models/Effects/MuzzleFlash/Blue/PlaneRight.mesh</Resource>
<Shadow>false</Shadow>
<Transparent>true</Transparent>
</c:Model>
<c:Transform/>
</Components>
<Children/>
</Entity>
<Entity name="PlaneUp">
<Components>
<c:Fade>
<FadeTime>0.08</FadeTime>
<Reverse>true</Reverse>
</c:Fade>
<c:Model>
<GlowIntensity>2</GlowIntensity>
<Resource>Models/Effects/MuzzleFlash/Blue/PlaneUp.mesh</Resource>
<Shadow>false</Shadow>
<Transparent>true</Transparent>
</c:Model>
<c:Transform/>
</Components>
<Children/>
</Entity>
<Entity name="PlaneDown">
<Components>
<c:Fade>
<FadeTime>0.08</FadeTime>
<Reverse>true</Reverse>
</c:Fade>
<c:Model>
<GlowIntensity>2</GlowIntensity>
<Resource>Models/Effects/MuzzleFlash/Blue/PlaneDown.mesh</Resource>
<Shadow>false</Shadow>
<Transparent>true</Transparent>
</c:Model>
<c:Transform/>
</Components>
<Children/>
</Entity>
</Children>
</Entity> </Entity>
<Entity name="Cone2Outside"> <Entity name="Lights">
<Components> <Components>
<c:Model>
<Resource>Models/Effects/MuzzleFlash/Blue/Cone2Outside.mesh</Resource>
<Shadow>false</Shadow>
<Transparent>true</Transparent>
</c:Model>
<c:Transform/> <c:Transform/>
</Components> </Components>
<Children/> <Children>
</Entity> <Entity name="Light_front">
<Entity name="Cone2Inside"> <Components>
<Components> <c:Model>
<c:Model> <Resource>Models/Core/UnitSphere.mesh</Resource>
<Resource>Models/Effects/MuzzleFlash/Blue/Cone2Inside.mesh</Resource> <Visible>false</Visible>
<Shadow>false</Shadow> <Shadow>false</Shadow>
<Transparent>true</Transparent> </c:Model>
</c:Model> <c:PointLight>
<c:Transform/> <Color A="1" B="1" G="1" R="0"/>
</Components> </c:PointLight>
<Children/> <c:Transform>
</Entity> <Position X="-0.000288648967" Y="0.000489665952" Z="0.0824639797"/>
<Entity name="PlaneUp"> <Scale X="0.0299999993" Y="0.0299999993" Z="0.0299999993"/>
<Components> </c:Transform>
<c:Model> </Components>
<Resource>Models/Effects/MuzzleFlash/Blue/PlaneUp.mesh</Resource> <Children/>
<Shadow>false</Shadow> </Entity>
<Transparent>true</Transparent> <Entity name="Light_Side">
</c:Model> <Components>
<c:Transform/> <c:Model>
</Components> <Resource>Models/Core/UnitSphere.mesh</Resource>
<Children/> <Color A="1" B="1" G="1" R="0"/>
</Entity> <Visible>false</Visible>
<Entity name="PlaneDown"> <Shadow>false</Shadow>
<Components> </c:Model>
<c:Model> <c:PointLight>
<Resource>Models/Effects/MuzzleFlash/Blue/PlaneDown.mesh</Resource> <Color A="1" B="1" G="1" R="0"/>
<Shadow>false</Shadow> <Radius>0.40000000596046448</Radius>
<Transparent>true</Transparent> </c:PointLight>
</c:Model> <c:Transform>
<c:Transform/> <Position X="-0.0870000049" Y="0.0210000016" Z="0.186000004"/>
</Components> <Scale X="0.0299999993" Y="0.0299999993" Z="0.0299999993"/>
<Children/> </c:Transform>
</Entity> </Components>
<Entity name="PlaneLeft"> <Children/>
<Components> </Entity>
<c:Model> <Entity name="Light_front2">
<Resource>Models/Effects/MuzzleFlash/Blue/PlaneLeft.mesh</Resource> <Components>
<Shadow>false</Shadow> <c:Model>
<Transparent>true</Transparent> <Resource>Models/Core/UnitSphere.mesh</Resource>
</c:Model> <Visible>false</Visible>
<c:Transform/> <Shadow>false</Shadow>
</Components> </c:Model>
<Children/> <c:PointLight>
<Color A="1" B="1" G="1" R="0"/>
</c:PointLight>
<c:Transform>
<Position X="0.000448234321" Y="-0.000760387513" Z="-0.323961914"/>
<Scale X="0.0299999993" Y="0.0299999993" Z="0.0299999993"/>
</c:Transform>
</Components>
<Children/>
</Entity>
</Children>
</Entity> </Entity>
</Children> </Children>
+111 -78
View File
@@ -9,93 +9,126 @@
</Components> </Components>
<Children> <Children>
<Entity name="PlaneRight"> <Entity name="Level1">
<Components> <Components>
<c:Model>
<Resource>Models/Effects/MuzzleFlash/Fire/PlaneRight.mesh</Resource>
<Shadow>false</Shadow>
<Transparent>true</Transparent>
</c:Model>
<c:Transform/> <c:Transform/>
</Components> </Components>
<Children/> <Children>
<Entity name="Cone1Outside">
<Components>
<c:Model>
<GlowIntensity>2</GlowIntensity>
<Resource>Models/Effects/MuzzleFlash/Fire/Cone1Outside.mesh</Resource>
<Shadow>false</Shadow>
<Transparent>true</Transparent>
</c:Model>
<c:Transform/>
</Components>
<Children/>
</Entity>
<Entity name="Cone1Inside">
<Components>
<c:Model>
<GlowIntensity>2</GlowIntensity>
<Resource>Models/Effects/MuzzleFlash/Fire/Cone1Inside.mesh</Resource>
<Shadow>false</Shadow>
<Transparent>true</Transparent>
</c:Model>
<c:Transform/>
</Components>
<Children/>
</Entity>
</Children>
</Entity> </Entity>
<Entity name="Cone1Outside"> <Entity name="Level2">
<Components> <Components>
<c:Model> <c:Transform>
<Resource>Models/Effects/MuzzleFlash/Fire/Cone1Outside.mesh</Resource> <Position X="0.000134464673" Y="8.11116188e-05" Z="-0.0197895896"/>
<Shadow>false</Shadow> </c:Transform>
<Transparent>true</Transparent>
</c:Model>
<c:Transform/>
</Components> </Components>
<Children/> <Children>
<Entity name="Cone2Inside">
<Components>
<c:Model>
<GlowIntensity>2</GlowIntensity>
<Resource>Models/Effects/MuzzleFlash/Fire/Cone2Inside.mesh</Resource>
<Shadow>false</Shadow>
<Transparent>true</Transparent>
</c:Model>
<c:Transform/>
</Components>
<Children/>
</Entity>
<Entity name="Cone2Outside">
<Components>
<c:Model>
<GlowIntensity>2</GlowIntensity>
<Resource>Models/Effects/MuzzleFlash/Fire/Cone2Outside.mesh</Resource>
<Shadow>false</Shadow>
<Transparent>true</Transparent>
</c:Model>
<c:Transform/>
</Components>
<Children/>
</Entity>
</Children>
</Entity> </Entity>
<Entity name="Cone1Inside"> <Entity name="Level3">
<Components> <Components>
<c:Model> <c:Transform>
<Resource>Models/Effects/MuzzleFlash/Fire/Cone1Inside.mesh</Resource> <Position X="0.000216802931" Y="0.000130779619" Z="-0.0319075659"/>
<Shadow>false</Shadow> </c:Transform>
<Transparent>true</Transparent>
</c:Model>
<c:Transform/>
</Components> </Components>
<Children/> <Children>
</Entity> <Entity name="PlaneLeft">
<Entity name="Cone2Outside"> <Components>
<Components> <c:Model>
<c:Model> <GlowIntensity>2</GlowIntensity>
<Resource>Models/Effects/MuzzleFlash/Fire/Cone2Outside.mesh</Resource> <Resource>Models/Effects/MuzzleFlash/Fire/PlaneLeft.mesh</Resource>
<Shadow>false</Shadow> <Shadow>false</Shadow>
<Transparent>true</Transparent> <Transparent>true</Transparent>
</c:Model> </c:Model>
<c:Transform/> <c:Transform/>
</Components> </Components>
<Children/> <Children/>
</Entity> </Entity>
<Entity name="Cone2Inside"> <Entity name="PlaneRight">
<Components> <Components>
<c:Model> <c:Model>
<Resource>Models/Effects/MuzzleFlash/Fire/Cone2Inside.mesh</Resource> <GlowIntensity>2</GlowIntensity>
<Shadow>false</Shadow> <Resource>Models/Effects/MuzzleFlash/Fire/PlaneRight.mesh</Resource>
<Transparent>true</Transparent> <Shadow>false</Shadow>
</c:Model> <Transparent>true</Transparent>
<c:Transform/> </c:Model>
</Components> <c:Transform/>
<Children/> </Components>
</Entity> <Children/>
<Entity name="PlaneUp"> </Entity>
<Components> <Entity name="PlaneUp">
<c:Model> <Components>
<Resource>Models/Effects/MuzzleFlash/Fire/PlaneUp.mesh</Resource> <c:Model>
<Shadow>false</Shadow> <GlowIntensity>2</GlowIntensity>
<Transparent>true</Transparent> <Resource>Models/Effects/MuzzleFlash/Fire/PlaneUp.mesh</Resource>
</c:Model> <Shadow>false</Shadow>
<c:Transform/> <Transparent>true</Transparent>
</Components> </c:Model>
<Children/> <c:Transform/>
</Entity> </Components>
<Entity name="PlaneDown"> <Children/>
<Components> </Entity>
<c:Model> <Entity name="PlaneDown">
<Resource>Models/Effects/MuzzleFlash/Fire/PlaneDown.mesh</Resource> <Components>
<Shadow>false</Shadow> <c:Model>
<Transparent>true</Transparent> <GlowIntensity>2</GlowIntensity>
</c:Model> <Resource>Models/Effects/MuzzleFlash/Fire/PlaneDown.mesh</Resource>
<c:Transform/> <Shadow>false</Shadow>
</Components> <Transparent>true</Transparent>
<Children/> </c:Model>
</Entity> <c:Transform/>
<Entity name="PlaneLeft"> </Components>
<Components> <Children/>
<c:Model> </Entity>
<Resource>Models/Effects/MuzzleFlash/Fire/PlaneLeft.mesh</Resource> </Children>
<Shadow>false</Shadow>
<Transparent>true</Transparent>
</c:Model>
<c:Transform/>
</Components>
<Children/>
</Entity> </Entity>
</Children> </Children>
@@ -0,0 +1,135 @@
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<Entity name="MuzzleFlashFire" xmlns:c="components" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../Types/Entity.xsd">
<Components>
<c:Lifetime>
<Lifetime>0.039999999105930328</Lifetime>
</c:Lifetime>
<c:Transform/>
</Components>
<Children>
<Entity name="Level1">
<Components>
<c:Transform/>
</Components>
<Children>
<Entity name="Cone1Outside">
<Components>
<c:Model>
<GlowIntensity>2</GlowIntensity>
<Resource>Models/Effects/MuzzleFlash/Green/Cone1Outside.mesh</Resource>
<Shadow>false</Shadow>
<Transparent>true</Transparent>
</c:Model>
<c:Transform/>
</Components>
<Children/>
</Entity>
<Entity name="Cone1Inside">
<Components>
<c:Model>
<GlowIntensity>2</GlowIntensity>
<Resource>Models/Effects/MuzzleFlash/Green/Cone1Inside.mesh</Resource>
<Shadow>false</Shadow>
<Transparent>true</Transparent>
</c:Model>
<c:Transform/>
</Components>
<Children/>
</Entity>
</Children>
</Entity>
<Entity name="Level2">
<Components>
<c:Transform>
<Position X="0.000134464673" Y="8.11116188e-05" Z="-0.0197895896"/>
</c:Transform>
</Components>
<Children>
<Entity name="Cone2Inside">
<Components>
<c:Model>
<GlowIntensity>2</GlowIntensity>
<Resource>Models/Effects/MuzzleFlash/Green/Cone2Inside.mesh</Resource>
<Shadow>false</Shadow>
<Transparent>true</Transparent>
</c:Model>
<c:Transform/>
</Components>
<Children/>
</Entity>
<Entity name="Cone2Outside">
<Components>
<c:Model>
<GlowIntensity>2</GlowIntensity>
<Resource>Models/Effects/MuzzleFlash/Green/Cone2Outside.mesh</Resource>
<Shadow>false</Shadow>
<Transparent>true</Transparent>
</c:Model>
<c:Transform/>
</Components>
<Children/>
</Entity>
</Children>
</Entity>
<Entity name="Level3">
<Components>
<c:Transform>
<Position X="0.000216802931" Y="0.000130779619" Z="-0.0319075659"/>
</c:Transform>
</Components>
<Children>
<Entity name="PlaneLeft">
<Components>
<c:Model>
<GlowIntensity>2</GlowIntensity>
<Resource>Models/Effects/MuzzleFlash/Green/PlaneLeft.mesh</Resource>
<Shadow>false</Shadow>
<Transparent>true</Transparent>
</c:Model>
<c:Transform/>
</Components>
<Children/>
</Entity>
<Entity name="PlaneRight">
<Components>
<c:Model>
<GlowIntensity>2</GlowIntensity>
<Resource>Models/Effects/MuzzleFlash/Green/PlaneRight.mesh</Resource>
<Shadow>false</Shadow>
<Transparent>true</Transparent>
</c:Model>
<c:Transform/>
</Components>
<Children/>
</Entity>
<Entity name="PlaneUp">
<Components>
<c:Model>
<GlowIntensity>2</GlowIntensity>
<Resource>Models/Effects/MuzzleFlash/Green/PlaneUp.mesh</Resource>
<Shadow>false</Shadow>
<Transparent>true</Transparent>
</c:Model>
<c:Transform/>
</Components>
<Children/>
</Entity>
<Entity name="PlaneDown">
<Components>
<c:Model>
<GlowIntensity>2</GlowIntensity>
<Resource>Models/Effects/MuzzleFlash/Green/PlaneDown.mesh</Resource>
<Shadow>false</Shadow>
<Transparent>true</Transparent>
</c:Model>
<c:Transform/>
</Components>
<Children/>
</Entity>
</Children>
</Entity>
</Children>
</Entity>
@@ -0,0 +1,135 @@
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<Entity name="MuzzleFlashFire" xmlns:c="components" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../Types/Entity.xsd">
<Components>
<c:Lifetime>
<Lifetime>0.039999999105930328</Lifetime>
</c:Lifetime>
<c:Transform/>
</Components>
<Children>
<Entity name="Level1">
<Components>
<c:Transform/>
</Components>
<Children>
<Entity name="Cone1Outside">
<Components>
<c:Model>
<GlowIntensity>2</GlowIntensity>
<Resource>Models/Effects/MuzzleFlash/LightBlue/Cone1Outside.mesh</Resource>
<Shadow>false</Shadow>
<Transparent>true</Transparent>
</c:Model>
<c:Transform/>
</Components>
<Children/>
</Entity>
<Entity name="Cone1Inside">
<Components>
<c:Model>
<GlowIntensity>2</GlowIntensity>
<Resource>Models/Effects/MuzzleFlash/LightBlue/Cone1Inside.mesh</Resource>
<Shadow>false</Shadow>
<Transparent>true</Transparent>
</c:Model>
<c:Transform/>
</Components>
<Children/>
</Entity>
</Children>
</Entity>
<Entity name="Level2">
<Components>
<c:Transform>
<Position X="0.000134464673" Y="8.11116188e-05" Z="-0.0197895896"/>
</c:Transform>
</Components>
<Children>
<Entity name="Cone2Inside">
<Components>
<c:Model>
<GlowIntensity>2</GlowIntensity>
<Resource>Models/Effects/MuzzleFlash/LightBlue/Cone2Inside.mesh</Resource>
<Shadow>false</Shadow>
<Transparent>true</Transparent>
</c:Model>
<c:Transform/>
</Components>
<Children/>
</Entity>
<Entity name="Cone2Outside">
<Components>
<c:Model>
<GlowIntensity>2</GlowIntensity>
<Resource>Models/Effects/MuzzleFlash/LightBlue/Cone2Outside.mesh</Resource>
<Shadow>false</Shadow>
<Transparent>true</Transparent>
</c:Model>
<c:Transform/>
</Components>
<Children/>
</Entity>
</Children>
</Entity>
<Entity name="Level3">
<Components>
<c:Transform>
<Position X="0.000216802931" Y="0.000130779619" Z="-0.0319075659"/>
</c:Transform>
</Components>
<Children>
<Entity name="PlaneLeft">
<Components>
<c:Model>
<GlowIntensity>2</GlowIntensity>
<Resource>Models/Effects/MuzzleFlash/LightBlue/PlaneLeft.mesh</Resource>
<Shadow>false</Shadow>
<Transparent>true</Transparent>
</c:Model>
<c:Transform/>
</Components>
<Children/>
</Entity>
<Entity name="PlaneRight">
<Components>
<c:Model>
<GlowIntensity>2</GlowIntensity>
<Resource>Models/Effects/MuzzleFlash/LightBlue/PlaneRight.mesh</Resource>
<Shadow>false</Shadow>
<Transparent>true</Transparent>
</c:Model>
<c:Transform/>
</Components>
<Children/>
</Entity>
<Entity name="PlaneUp">
<Components>
<c:Model>
<GlowIntensity>2</GlowIntensity>
<Resource>Models/Effects/MuzzleFlash/LightBlue/PlaneUp.mesh</Resource>
<Shadow>false</Shadow>
<Transparent>true</Transparent>
</c:Model>
<c:Transform/>
</Components>
<Children/>
</Entity>
<Entity name="PlaneDown">
<Components>
<c:Model>
<GlowIntensity>2</GlowIntensity>
<Resource>Models/Effects/MuzzleFlash/LightBlue/PlaneDown.mesh</Resource>
<Shadow>false</Shadow>
<Transparent>true</Transparent>
</c:Model>
<c:Transform/>
</Components>
<Children/>
</Entity>
</Children>
</Entity>
</Children>
</Entity>
@@ -0,0 +1,135 @@
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<Entity name="MuzzleFlashFire" xmlns:c="components" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../Types/Entity.xsd">
<Components>
<c:Lifetime>
<Lifetime>0.039999999105930328</Lifetime>
</c:Lifetime>
<c:Transform/>
</Components>
<Children>
<Entity name="Level1">
<Components>
<c:Transform/>
</Components>
<Children>
<Entity name="Cone1Outside">
<Components>
<c:Model>
<GlowIntensity>2</GlowIntensity>
<Resource>Models/Effects/MuzzleFlash/Pink/Cone1Outside.mesh</Resource>
<Shadow>false</Shadow>
<Transparent>true</Transparent>
</c:Model>
<c:Transform/>
</Components>
<Children/>
</Entity>
<Entity name="Cone1Inside">
<Components>
<c:Model>
<GlowIntensity>2</GlowIntensity>
<Resource>Models/Effects/MuzzleFlash/Pink/Cone1Inside.mesh</Resource>
<Shadow>false</Shadow>
<Transparent>true</Transparent>
</c:Model>
<c:Transform/>
</Components>
<Children/>
</Entity>
</Children>
</Entity>
<Entity name="Level2">
<Components>
<c:Transform>
<Position X="0.000134464673" Y="8.11116188e-05" Z="-0.0197895896"/>
</c:Transform>
</Components>
<Children>
<Entity name="Cone2Inside">
<Components>
<c:Model>
<GlowIntensity>2</GlowIntensity>
<Resource>Models/Effects/MuzzleFlash/Pink/Cone2Inside.mesh</Resource>
<Shadow>false</Shadow>
<Transparent>true</Transparent>
</c:Model>
<c:Transform/>
</Components>
<Children/>
</Entity>
<Entity name="Cone2Outside">
<Components>
<c:Model>
<GlowIntensity>2</GlowIntensity>
<Resource>Models/Effects/MuzzleFlash/Pink/Cone2Outside.mesh</Resource>
<Shadow>false</Shadow>
<Transparent>true</Transparent>
</c:Model>
<c:Transform/>
</Components>
<Children/>
</Entity>
</Children>
</Entity>
<Entity name="Level3">
<Components>
<c:Transform>
<Position X="0.000216802931" Y="0.000130779619" Z="-0.0319075659"/>
</c:Transform>
</Components>
<Children>
<Entity name="PlaneLeft">
<Components>
<c:Model>
<GlowIntensity>2</GlowIntensity>
<Resource>Models/Effects/MuzzleFlash/Pink/PlaneLeft.mesh</Resource>
<Shadow>false</Shadow>
<Transparent>true</Transparent>
</c:Model>
<c:Transform/>
</Components>
<Children/>
</Entity>
<Entity name="PlaneRight">
<Components>
<c:Model>
<GlowIntensity>2</GlowIntensity>
<Resource>Models/Effects/MuzzleFlash/Pink/PlaneRight.mesh</Resource>
<Shadow>false</Shadow>
<Transparent>true</Transparent>
</c:Model>
<c:Transform/>
</Components>
<Children/>
</Entity>
<Entity name="PlaneUp">
<Components>
<c:Model>
<GlowIntensity>2</GlowIntensity>
<Resource>Models/Effects/MuzzleFlash/Pink/PlaneUp.mesh</Resource>
<Shadow>false</Shadow>
<Transparent>true</Transparent>
</c:Model>
<c:Transform/>
</Components>
<Children/>
</Entity>
<Entity name="PlaneDown">
<Components>
<c:Model>
<GlowIntensity>2</GlowIntensity>
<Resource>Models/Effects/MuzzleFlash/Pink/PlaneDown.mesh</Resource>
<Shadow>false</Shadow>
<Transparent>true</Transparent>
</c:Model>
<c:Transform/>
</Components>
<Children/>
</Entity>
</Children>
</Entity>
</Children>
</Entity>
@@ -0,0 +1,135 @@
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<Entity name="MuzzleFlashFire" xmlns:c="components" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../Types/Entity.xsd">
<Components>
<c:Lifetime>
<Lifetime>0.039999999105930328</Lifetime>
</c:Lifetime>
<c:Transform/>
</Components>
<Children>
<Entity name="Level1">
<Components>
<c:Transform/>
</Components>
<Children>
<Entity name="Cone1Outside">
<Components>
<c:Model>
<GlowIntensity>2</GlowIntensity>
<Resource>Models/Effects/MuzzleFlash/Purple/Cone1Outside.mesh</Resource>
<Shadow>false</Shadow>
<Transparent>true</Transparent>
</c:Model>
<c:Transform/>
</Components>
<Children/>
</Entity>
<Entity name="Cone1Inside">
<Components>
<c:Model>
<GlowIntensity>2</GlowIntensity>
<Resource>Models/Effects/MuzzleFlash/Purple/Cone1Inside.mesh</Resource>
<Shadow>false</Shadow>
<Transparent>true</Transparent>
</c:Model>
<c:Transform/>
</Components>
<Children/>
</Entity>
</Children>
</Entity>
<Entity name="Level2">
<Components>
<c:Transform>
<Position X="0.000134464673" Y="8.11116188e-05" Z="-0.0197895896"/>
</c:Transform>
</Components>
<Children>
<Entity name="Cone2Inside">
<Components>
<c:Model>
<GlowIntensity>2</GlowIntensity>
<Resource>Models/Effects/MuzzleFlash/Purple/Cone2Inside.mesh</Resource>
<Shadow>false</Shadow>
<Transparent>true</Transparent>
</c:Model>
<c:Transform/>
</Components>
<Children/>
</Entity>
<Entity name="Cone2Outside">
<Components>
<c:Model>
<GlowIntensity>2</GlowIntensity>
<Resource>Models/Effects/MuzzleFlash/Purple/Cone2Outside.mesh</Resource>
<Shadow>false</Shadow>
<Transparent>true</Transparent>
</c:Model>
<c:Transform/>
</Components>
<Children/>
</Entity>
</Children>
</Entity>
<Entity name="Level3">
<Components>
<c:Transform>
<Position X="0.000216802931" Y="0.000130779619" Z="-0.0319075659"/>
</c:Transform>
</Components>
<Children>
<Entity name="PlaneLeft">
<Components>
<c:Model>
<GlowIntensity>2</GlowIntensity>
<Resource>Models/Effects/MuzzleFlash/Purple/PlaneLeft.mesh</Resource>
<Shadow>false</Shadow>
<Transparent>true</Transparent>
</c:Model>
<c:Transform/>
</Components>
<Children/>
</Entity>
<Entity name="PlaneRight">
<Components>
<c:Model>
<GlowIntensity>2</GlowIntensity>
<Resource>Models/Effects/MuzzleFlash/Purple/PlaneRight.mesh</Resource>
<Shadow>false</Shadow>
<Transparent>true</Transparent>
</c:Model>
<c:Transform/>
</Components>
<Children/>
</Entity>
<Entity name="PlaneUp">
<Components>
<c:Model>
<GlowIntensity>2</GlowIntensity>
<Resource>Models/Effects/MuzzleFlash/Purple/PlaneUp.mesh</Resource>
<Shadow>false</Shadow>
<Transparent>true</Transparent>
</c:Model>
<c:Transform/>
</Components>
<Children/>
</Entity>
<Entity name="PlaneDown">
<Components>
<c:Model>
<GlowIntensity>2</GlowIntensity>
<Resource>Models/Effects/MuzzleFlash/Purple/PlaneDown.mesh</Resource>
<Shadow>false</Shadow>
<Transparent>true</Transparent>
</c:Model>
<c:Transform/>
</Components>
<Children/>
</Entity>
</Children>
</Entity>
</Children>
</Entity>
@@ -0,0 +1,135 @@
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<Entity name="MuzzleFlashFire" xmlns:c="components" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../Types/Entity.xsd">
<Components>
<c:Lifetime>
<Lifetime>0.039999999105930328</Lifetime>
</c:Lifetime>
<c:Transform/>
</Components>
<Children>
<Entity name="Level1">
<Components>
<c:Transform/>
</Components>
<Children>
<Entity name="Cone1Outside">
<Components>
<c:Model>
<GlowIntensity>2</GlowIntensity>
<Resource>Models/Effects/MuzzleFlash/Rainbow/Cone1Outside.mesh</Resource>
<Shadow>false</Shadow>
<Transparent>true</Transparent>
</c:Model>
<c:Transform/>
</Components>
<Children/>
</Entity>
<Entity name="Cone1Inside">
<Components>
<c:Model>
<GlowIntensity>2</GlowIntensity>
<Resource>Models/Effects/MuzzleFlash/Rainbow/Cone1Inside.mesh</Resource>
<Shadow>false</Shadow>
<Transparent>true</Transparent>
</c:Model>
<c:Transform/>
</Components>
<Children/>
</Entity>
</Children>
</Entity>
<Entity name="Level2">
<Components>
<c:Transform>
<Position X="0.000134464673" Y="8.11116188e-05" Z="-0.0197895896"/>
</c:Transform>
</Components>
<Children>
<Entity name="Cone2Inside">
<Components>
<c:Model>
<GlowIntensity>2</GlowIntensity>
<Resource>Models/Effects/MuzzleFlash/Rainbow/Cone2Inside.mesh</Resource>
<Shadow>false</Shadow>
<Transparent>true</Transparent>
</c:Model>
<c:Transform/>
</Components>
<Children/>
</Entity>
<Entity name="Cone2Outside">
<Components>
<c:Model>
<GlowIntensity>2</GlowIntensity>
<Resource>Models/Effects/MuzzleFlash/Rainbow/Cone2Outside.mesh</Resource>
<Shadow>false</Shadow>
<Transparent>true</Transparent>
</c:Model>
<c:Transform/>
</Components>
<Children/>
</Entity>
</Children>
</Entity>
<Entity name="Level3">
<Components>
<c:Transform>
<Position X="0.000216802931" Y="0.000130779619" Z="-0.0319075659"/>
</c:Transform>
</Components>
<Children>
<Entity name="PlaneLeft">
<Components>
<c:Model>
<GlowIntensity>2</GlowIntensity>
<Resource>Models/Effects/MuzzleFlash/Rainbow/PlaneLeft.mesh</Resource>
<Shadow>false</Shadow>
<Transparent>true</Transparent>
</c:Model>
<c:Transform/>
</Components>
<Children/>
</Entity>
<Entity name="PlaneRight">
<Components>
<c:Model>
<GlowIntensity>2</GlowIntensity>
<Resource>Models/Effects/MuzzleFlash/Rainbow/PlaneRight.mesh</Resource>
<Shadow>false</Shadow>
<Transparent>true</Transparent>
</c:Model>
<c:Transform/>
</Components>
<Children/>
</Entity>
<Entity name="PlaneUp">
<Components>
<c:Model>
<GlowIntensity>2</GlowIntensity>
<Resource>Models/Effects/MuzzleFlash/Rainbow/PlaneUp.mesh</Resource>
<Shadow>false</Shadow>
<Transparent>true</Transparent>
</c:Model>
<c:Transform/>
</Components>
<Children/>
</Entity>
<Entity name="PlaneDown">
<Components>
<c:Model>
<GlowIntensity>2</GlowIntensity>
<Resource>Models/Effects/MuzzleFlash/Rainbow/PlaneDown.mesh</Resource>
<Shadow>false</Shadow>
<Transparent>true</Transparent>
</c:Model>
<c:Transform/>
</Components>
<Children/>
</Entity>
</Children>
</Entity>
</Children>
</Entity>
+112 -79
View File
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" standalone="no" ?> <?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<Entity name="MuzzleFlashRed" xmlns:c="components" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../Types/Entity.xsd"> <Entity name="MuzzleFlashFire" xmlns:c="components" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../Types/Entity.xsd">
<Components> <Components>
<c:Lifetime> <c:Lifetime>
@@ -9,93 +9,126 @@
</Components> </Components>
<Children> <Children>
<Entity name="PlaneRight"> <Entity name="Level1">
<Components> <Components>
<c:Model>
<Resource>Models/Effects/MuzzleFlash/Red/PlaneRight.mesh</Resource>
<Shadow>false</Shadow>
<Transparent>true</Transparent>
</c:Model>
<c:Transform/> <c:Transform/>
</Components> </Components>
<Children/> <Children>
<Entity name="Cone1Outside">
<Components>
<c:Model>
<GlowIntensity>2</GlowIntensity>
<Resource>Models/Effects/MuzzleFlash/Red/Cone1Outside.mesh</Resource>
<Shadow>false</Shadow>
<Transparent>true</Transparent>
</c:Model>
<c:Transform/>
</Components>
<Children/>
</Entity>
<Entity name="Cone1Inside">
<Components>
<c:Model>
<GlowIntensity>2</GlowIntensity>
<Resource>Models/Effects/MuzzleFlash/Red/Cone1Inside.mesh</Resource>
<Shadow>false</Shadow>
<Transparent>true</Transparent>
</c:Model>
<c:Transform/>
</Components>
<Children/>
</Entity>
</Children>
</Entity> </Entity>
<Entity name="Cone1Outside"> <Entity name="Level2">
<Components> <Components>
<c:Model> <c:Transform>
<Resource>Models/Effects/MuzzleFlash/Red/Cone1Outside.mesh</Resource> <Position X="0.000134464673" Y="8.11116188e-05" Z="-0.0197895896"/>
<Shadow>false</Shadow> </c:Transform>
<Transparent>true</Transparent>
</c:Model>
<c:Transform/>
</Components> </Components>
<Children/> <Children>
<Entity name="Cone2Inside">
<Components>
<c:Model>
<GlowIntensity>2</GlowIntensity>
<Resource>Models/Effects/MuzzleFlash/Red/Cone2Inside.mesh</Resource>
<Shadow>false</Shadow>
<Transparent>true</Transparent>
</c:Model>
<c:Transform/>
</Components>
<Children/>
</Entity>
<Entity name="Cone2Outside">
<Components>
<c:Model>
<GlowIntensity>2</GlowIntensity>
<Resource>Models/Effects/MuzzleFlash/Red/Cone2Outside.mesh</Resource>
<Shadow>false</Shadow>
<Transparent>true</Transparent>
</c:Model>
<c:Transform/>
</Components>
<Children/>
</Entity>
</Children>
</Entity> </Entity>
<Entity name="Cone1Inside"> <Entity name="Level3">
<Components> <Components>
<c:Model> <c:Transform>
<Resource>Models/Effects/MuzzleFlash/Red/Cone1Inside.mesh</Resource> <Position X="0.000216802931" Y="0.000130779619" Z="-0.0319075659"/>
<Shadow>false</Shadow> </c:Transform>
<Transparent>true</Transparent>
</c:Model>
<c:Transform/>
</Components> </Components>
<Children/> <Children>
</Entity> <Entity name="PlaneLeft">
<Entity name="Cone2Outside"> <Components>
<Components> <c:Model>
<c:Model> <GlowIntensity>2</GlowIntensity>
<Resource>Models/Effects/MuzzleFlash/Red/Cone2Outside.mesh</Resource> <Resource>Models/Effects/MuzzleFlash/Red/PlaneLeft.mesh</Resource>
<Shadow>false</Shadow> <Shadow>false</Shadow>
<Transparent>true</Transparent> <Transparent>true</Transparent>
</c:Model> </c:Model>
<c:Transform/> <c:Transform/>
</Components> </Components>
<Children/> <Children/>
</Entity> </Entity>
<Entity name="Cone2Inside"> <Entity name="PlaneRight">
<Components> <Components>
<c:Model> <c:Model>
<Resource>Models/Effects/MuzzleFlash/Red/Cone2Inside.mesh</Resource> <GlowIntensity>2</GlowIntensity>
<Shadow>false</Shadow> <Resource>Models/Effects/MuzzleFlash/Red/PlaneRight.mesh</Resource>
<Transparent>true</Transparent> <Shadow>false</Shadow>
</c:Model> <Transparent>true</Transparent>
<c:Transform/> </c:Model>
</Components> <c:Transform/>
<Children/> </Components>
</Entity> <Children/>
<Entity name="PlaneUp"> </Entity>
<Components> <Entity name="PlaneUp">
<c:Model> <Components>
<Resource>Models/Effects/MuzzleFlash/Red/PlaneUp.mesh</Resource> <c:Model>
<Shadow>false</Shadow> <GlowIntensity>2</GlowIntensity>
<Transparent>true</Transparent> <Resource>Models/Effects/MuzzleFlash/Red/PlaneUp.mesh</Resource>
</c:Model> <Shadow>false</Shadow>
<c:Transform/> <Transparent>true</Transparent>
</Components> </c:Model>
<Children/> <c:Transform/>
</Entity> </Components>
<Entity name="PlaneDown"> <Children/>
<Components> </Entity>
<c:Model> <Entity name="PlaneDown">
<Resource>Models/Effects/MuzzleFlash/Red/PlaneDown.mesh</Resource> <Components>
<Shadow>false</Shadow> <c:Model>
<Transparent>true</Transparent> <GlowIntensity>2</GlowIntensity>
</c:Model> <Resource>Models/Effects/MuzzleFlash/Red/PlaneDown.mesh</Resource>
<c:Transform/> <Shadow>false</Shadow>
</Components> <Transparent>true</Transparent>
<Children/> </c:Model>
</Entity> <c:Transform/>
<Entity name="PlaneLeft"> </Components>
<Components> <Children/>
<c:Model> </Entity>
<Resource>Models/Effects/MuzzleFlash/Red/PlaneLeft.mesh</Resource> </Children>
<Shadow>false</Shadow>
<Transparent>true</Transparent>
</c:Model>
<c:Transform/>
</Components>
<Children/>
</Entity> </Entity>
</Children> </Children>
@@ -0,0 +1,219 @@
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<Entity name="MuzzleFlashBlueSidearm" xmlns:c="components" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../Types/Entity.xsd">
<Components>
<c:Lifetime>
<Lifetime>0.08</Lifetime>
</c:Lifetime>
<c:Transform/>
</Components>
<Children>
<Entity name="Level1">
<Components>
<c:Transform/>
</Components>
<Children>
<Entity name="Cone1Outside">
<Components>
<c:Fade>
<FadeTime>0.08</FadeTime>
</c:Fade>
<c:Model>
<GlowIntensity>2</GlowIntensity>
<Resource>Models/Effects/MuzzleFlash/Blue/Cone1Outside.mesh</Resource>
<Shadow>false</Shadow>
<Transparent>true</Transparent>
</c:Model>
<c:Transform/>
</Components>
<Children/>
</Entity>
<Entity name="Cone1Inside">
<Components>
<c:Fade>
<FadeTime>0.08</FadeTime>
</c:Fade>
<c:Model>
<GlowIntensity>2</GlowIntensity>
<Resource>Models/Effects/MuzzleFlash/Blue/Cone1Inside.mesh</Resource>
<Shadow>false</Shadow>
<Transparent>true</Transparent>
</c:Model>
<c:Transform/>
</Components>
<Children/>
</Entity>
</Children>
</Entity>
<Entity name="Level2">
<Components>
<c:Transform>
<Position X="0.000134464673" Y="8.11116188e-05" Z="-0.0197895896"/>
</c:Transform>
</Components>
<Children>
<Entity name="Cone2Inside">
<Components>
<c:Fade>
<FadeTime>0.08</FadeTime>
</c:Fade>
<c:Model>
<GlowIntensity>2</GlowIntensity>
<Resource>Models/Effects/MuzzleFlash/Blue/Cone2Inside.mesh</Resource>
<Shadow>false</Shadow>
<Transparent>true</Transparent>
</c:Model>
<c:Transform/>
</Components>
<Children/>
</Entity>
<Entity name="Cone2Outside">
<Components>
<c:Fade>
<FadeTime>0.08</FadeTime>
</c:Fade>
<c:Model>
<GlowIntensity>2</GlowIntensity>
<Resource>Models/Effects/MuzzleFlash/Blue/Cone2Outside.mesh</Resource>
<Shadow>false</Shadow>
<Transparent>true</Transparent>
</c:Model>
<c:Transform/>
</Components>
<Children/>
</Entity>
</Children>
</Entity>
<Entity name="Level3">
<Components>
<c:Transform>
<Position X="0.000216802931" Y="0.000130779619" Z="-0.0319075659"/>
</c:Transform>
</Components>
<Children>
<Entity name="PlaneLeft">
<Components>
<c:Fade>
<FadeTime>0.08</FadeTime>
</c:Fade>
<c:Model>
<GlowIntensity>2</GlowIntensity>
<Resource>Models/Effects/MuzzleFlash/Blue/PlaneLeft.mesh</Resource>
<Shadow>false</Shadow>
<Transparent>true</Transparent>
</c:Model>
<c:Transform/>
</Components>
<Children/>
</Entity>
<Entity name="PlaneRight">
<Components>
<c:Fade>
<FadeTime>0.08</FadeTime>
</c:Fade>
<c:Model>
<GlowIntensity>2</GlowIntensity>
<Resource>Models/Effects/MuzzleFlash/Blue/PlaneRight.mesh</Resource>
<Shadow>false</Shadow>
<Transparent>true</Transparent>
</c:Model>
<c:Transform/>
</Components>
<Children/>
</Entity>
<Entity name="PlaneUp">
<Components>
<c:Fade>
<FadeTime>0.08</FadeTime>
</c:Fade>
<c:Model>
<GlowIntensity>2</GlowIntensity>
<Resource>Models/Effects/MuzzleFlash/Blue/PlaneUp.mesh</Resource>
<Shadow>false</Shadow>
<Transparent>true</Transparent>
</c:Model>
<c:Transform/>
</Components>
<Children/>
</Entity>
<Entity name="PlaneDown">
<Components>
<c:Fade>
<FadeTime>0.08</FadeTime>
</c:Fade>
<c:Model>
<GlowIntensity>2</GlowIntensity>
<Resource>Models/Effects/MuzzleFlash/Blue/PlaneDown.mesh</Resource>
<Shadow>false</Shadow>
<Transparent>true</Transparent>
</c:Model>
<c:Transform/>
</Components>
<Children/>
</Entity>
</Children>
</Entity>
<Entity name="Lights">
<Components>
<c:Transform/>
</Components>
<Children>
<Entity name="Light_front">
<Components>
<c:Model>
<Resource>Models/Core/UnitSphere.mesh</Resource>
<Visible>false</Visible>
<Shadow>false</Shadow>
</c:Model>
<c:PointLight>
<Color A="1" B="1" G="1" R="0"/>
</c:PointLight>
<c:Transform>
<Position X="-0.000288648967" Y="0.000489665952" Z="0.0824639797"/>
<Scale X="0.0299999993" Y="0.0299999993" Z="0.0299999993"/>
</c:Transform>
</Components>
<Children/>
</Entity>
<Entity name="Light_Side">
<Components>
<c:Model>
<Resource>Models/Core/UnitSphere.mesh</Resource>
<Color A="1" B="1" G="1" R="0"/>
<Visible>false</Visible>
<Shadow>false</Shadow>
</c:Model>
<c:PointLight>
<Color A="1" B="1" G="1" R="0"/>
<Radius>0.40000000596046448</Radius>
</c:PointLight>
<c:Transform>
<Position X="-0.0870000049" Y="0.0210000016" Z="0.186000004"/>
<Scale X="0.0299999993" Y="0.0299999993" Z="0.0299999993"/>
</c:Transform>
</Components>
<Children/>
</Entity>
<Entity name="Light_front2">
<Components>
<c:Model>
<Resource>Models/Core/UnitSphere.mesh</Resource>
<Visible>false</Visible>
<Shadow>false</Shadow>
</c:Model>
<c:PointLight>
<Color A="1" B="1" G="1" R="0"/>
</c:PointLight>
<c:Transform>
<Position X="0.000448234321" Y="-0.000760387513" Z="-0.323961914"/>
<Scale X="0.0299999993" Y="0.0299999993" Z="0.0299999993"/>
</c:Transform>
</Components>
<Children/>
</Entity>
</Children>
</Entity>
</Children>
</Entity>
@@ -0,0 +1,135 @@
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<Entity name="MuzzleFlashFire" xmlns:c="components" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../Types/Entity.xsd">
<Components>
<c:Lifetime>
<Lifetime>0.039999999105930328</Lifetime>
</c:Lifetime>
<c:Transform/>
</Components>
<Children>
<Entity name="Level1">
<Components>
<c:Transform/>
</Components>
<Children>
<Entity name="Cone1Outside">
<Components>
<c:Model>
<GlowIntensity>2</GlowIntensity>
<Resource>Models/Effects/MuzzleFlash/White/Cone1Outside.mesh</Resource>
<Shadow>false</Shadow>
<Transparent>true</Transparent>
</c:Model>
<c:Transform/>
</Components>
<Children/>
</Entity>
<Entity name="Cone1Inside">
<Components>
<c:Model>
<GlowIntensity>2</GlowIntensity>
<Resource>Models/Effects/MuzzleFlash/White/Cone1Inside.mesh</Resource>
<Shadow>false</Shadow>
<Transparent>true</Transparent>
</c:Model>
<c:Transform/>
</Components>
<Children/>
</Entity>
</Children>
</Entity>
<Entity name="Level2">
<Components>
<c:Transform>
<Position X="0.000134464673" Y="8.11116188e-05" Z="-0.0197895896"/>
</c:Transform>
</Components>
<Children>
<Entity name="Cone2Inside">
<Components>
<c:Model>
<GlowIntensity>2</GlowIntensity>
<Resource>Models/Effects/MuzzleFlash/White/Cone2Inside.mesh</Resource>
<Shadow>false</Shadow>
<Transparent>true</Transparent>
</c:Model>
<c:Transform/>
</Components>
<Children/>
</Entity>
<Entity name="Cone2Outside">
<Components>
<c:Model>
<GlowIntensity>2</GlowIntensity>
<Resource>Models/Effects/MuzzleFlash/White/Cone2Outside.mesh</Resource>
<Shadow>false</Shadow>
<Transparent>true</Transparent>
</c:Model>
<c:Transform/>
</Components>
<Children/>
</Entity>
</Children>
</Entity>
<Entity name="Level3">
<Components>
<c:Transform>
<Position X="0.000216802931" Y="0.000130779619" Z="-0.0319075659"/>
</c:Transform>
</Components>
<Children>
<Entity name="PlaneLeft">
<Components>
<c:Model>
<GlowIntensity>2</GlowIntensity>
<Resource>Models/Effects/MuzzleFlash/White/PlaneLeft.mesh</Resource>
<Shadow>false</Shadow>
<Transparent>true</Transparent>
</c:Model>
<c:Transform/>
</Components>
<Children/>
</Entity>
<Entity name="PlaneRight">
<Components>
<c:Model>
<GlowIntensity>2</GlowIntensity>
<Resource>Models/Effects/MuzzleFlash/White/PlaneRight.mesh</Resource>
<Shadow>false</Shadow>
<Transparent>true</Transparent>
</c:Model>
<c:Transform/>
</Components>
<Children/>
</Entity>
<Entity name="PlaneUp">
<Components>
<c:Model>
<GlowIntensity>2</GlowIntensity>
<Resource>Models/Effects/MuzzleFlash/White/PlaneUp.mesh</Resource>
<Shadow>false</Shadow>
<Transparent>true</Transparent>
</c:Model>
<c:Transform/>
</Components>
<Children/>
</Entity>
<Entity name="PlaneDown">
<Components>
<c:Model>
<GlowIntensity>2</GlowIntensity>
<Resource>Models/Effects/MuzzleFlash/White/PlaneDown.mesh</Resource>
<Shadow>false</Shadow>
<Transparent>true</Transparent>
</c:Model>
<c:Transform/>
</Components>
<Children/>
</Entity>
</Children>
</Entity>
</Children>
</Entity>
@@ -0,0 +1,135 @@
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<Entity name="MuzzleFlashFire" xmlns:c="components" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../Types/Entity.xsd">
<Components>
<c:Lifetime>
<Lifetime>0.039999999105930328</Lifetime>
</c:Lifetime>
<c:Transform/>
</Components>
<Children>
<Entity name="Level1">
<Components>
<c:Transform/>
</Components>
<Children>
<Entity name="Cone1Outside">
<Components>
<c:Model>
<GlowIntensity>2</GlowIntensity>
<Resource>Models/Effects/MuzzleFlash/Yellow/Cone1Outside.mesh</Resource>
<Shadow>false</Shadow>
<Transparent>true</Transparent>
</c:Model>
<c:Transform/>
</Components>
<Children/>
</Entity>
<Entity name="Cone1Inside">
<Components>
<c:Model>
<GlowIntensity>2</GlowIntensity>
<Resource>Models/Effects/MuzzleFlash/Yellow/Cone1Inside.mesh</Resource>
<Shadow>false</Shadow>
<Transparent>true</Transparent>
</c:Model>
<c:Transform/>
</Components>
<Children/>
</Entity>
</Children>
</Entity>
<Entity name="Level2">
<Components>
<c:Transform>
<Position X="0.000134464673" Y="8.11116188e-05" Z="-0.0197895896"/>
</c:Transform>
</Components>
<Children>
<Entity name="Cone2Inside">
<Components>
<c:Model>
<GlowIntensity>2</GlowIntensity>
<Resource>Models/Effects/MuzzleFlash/Yellow/Cone2Inside.mesh</Resource>
<Shadow>false</Shadow>
<Transparent>true</Transparent>
</c:Model>
<c:Transform/>
</Components>
<Children/>
</Entity>
<Entity name="Cone2Outside">
<Components>
<c:Model>
<GlowIntensity>2</GlowIntensity>
<Resource>Models/Effects/MuzzleFlash/Yellow/Cone2Outside.mesh</Resource>
<Shadow>false</Shadow>
<Transparent>true</Transparent>
</c:Model>
<c:Transform/>
</Components>
<Children/>
</Entity>
</Children>
</Entity>
<Entity name="Level3">
<Components>
<c:Transform>
<Position X="0.000216802931" Y="0.000130779619" Z="-0.0319075659"/>
</c:Transform>
</Components>
<Children>
<Entity name="PlaneLeft">
<Components>
<c:Model>
<GlowIntensity>2</GlowIntensity>
<Resource>Models/Effects/MuzzleFlash/Yellow/PlaneLeft.mesh</Resource>
<Shadow>false</Shadow>
<Transparent>true</Transparent>
</c:Model>
<c:Transform/>
</Components>
<Children/>
</Entity>
<Entity name="PlaneRight">
<Components>
<c:Model>
<GlowIntensity>2</GlowIntensity>
<Resource>Models/Effects/MuzzleFlash/Yellow/PlaneRight.mesh</Resource>
<Shadow>false</Shadow>
<Transparent>true</Transparent>
</c:Model>
<c:Transform/>
</Components>
<Children/>
</Entity>
<Entity name="PlaneUp">
<Components>
<c:Model>
<GlowIntensity>2</GlowIntensity>
<Resource>Models/Effects/MuzzleFlash/Yellow/PlaneUp.mesh</Resource>
<Shadow>false</Shadow>
<Transparent>true</Transparent>
</c:Model>
<c:Transform/>
</Components>
<Children/>
</Entity>
<Entity name="PlaneDown">
<Components>
<c:Model>
<GlowIntensity>2</GlowIntensity>
<Resource>Models/Effects/MuzzleFlash/Yellow/PlaneDown.mesh</Resource>
<Shadow>false</Shadow>
<Transparent>true</Transparent>
</c:Model>
<c:Transform/>
</Components>
<Children/>
</Entity>
</Children>
</Entity>
</Children>
</Entity>
+94 -34
View File
@@ -8,7 +8,7 @@
</c:RaptorCopter> </c:RaptorCopter>
<c:Transform> <c:Transform>
<Position X="0" Y="-30.6910019" Z="0"/> <Position X="0" Y="-30.6910019" Z="0"/>
<Orientation X="0" Y="37.056633" Z="0"/> <Orientation X="0" Y="43.1977272" Z="0"/>
</c:Transform> </c:Transform>
</Components> </Components>
@@ -140,6 +140,7 @@
<Pose1>Blend</Pose1> <Pose1>Blend</Pose1>
<Pose2></Pose2> <Pose2></Pose2>
</c:Blend> </c:Blend>
<c:Unpickable/>
<c:Model> <c:Model>
<GlowIntensity>1.6000000238418579</GlowIntensity> <GlowIntensity>1.6000000238418579</GlowIntensity>
<Resource>Models/Characters/Assault/AssaultBluePose.mesh</Resource> <Resource>Models/Characters/Assault/AssaultBluePose.mesh</Resource>
@@ -156,7 +157,7 @@
<Components> <Components>
<c:Animation> <c:Animation>
<AnimationName>AssaultPoseF</AnimationName> <AnimationName>AssaultPoseF</AnimationName>
<Time>2.3915339445022532</Time> <Time>1.725669683907423</Time>
<Play>true</Play> <Play>true</Play>
</c:Animation> </c:Animation>
<c:Transform/> <c:Transform/>
@@ -172,7 +173,7 @@
<Resource>Models/Weapons/Blue/AssaultWeaponBlue.mesh</Resource> <Resource>Models/Weapons/Blue/AssaultWeaponBlue.mesh</Resource>
</c:Model> </c:Model>
<c:Transform> <c:Transform>
<Position X="0.160869107" Y="1.21765196" Z="-0.151224568"/> <Position X="0.160869107" Y="1.21322453" Z="-0.151224568"/>
<Orientation X="1.90465617" Y="-0.166544378" Z="0.0701896623"/> <Orientation X="1.90465617" Y="-0.166544378" Z="0.0701896623"/>
</c:Transform> </c:Transform>
</Components> </Components>
@@ -538,6 +539,7 @@
<Pose1>Blend</Pose1> <Pose1>Blend</Pose1>
<Pose2></Pose2> <Pose2></Pose2>
</c:Blend> </c:Blend>
<c:Unpickable/>
<c:Model> <c:Model>
<GlowIntensity>1.6000000238418579</GlowIntensity> <GlowIntensity>1.6000000238418579</GlowIntensity>
<Resource>Models/Characters/Defender/DefenderBluePose.mesh</Resource> <Resource>Models/Characters/Defender/DefenderBluePose.mesh</Resource>
@@ -554,7 +556,7 @@
<Components> <Components>
<c:Animation> <c:Animation>
<AnimationName>DefenderPoseF</AnimationName> <AnimationName>DefenderPoseF</AnimationName>
<Time>1.5583721233469809</Time> <Time>0.89250786275215077</Time>
<Play>true</Play> <Play>true</Play>
</c:Animation> </c:Animation>
<c:Transform/> <c:Transform/>
@@ -570,8 +572,8 @@
<Resource>Models/Weapons/Blue/DefenderWeaponBlue.mesh</Resource> <Resource>Models/Weapons/Blue/DefenderWeaponBlue.mesh</Resource>
</c:Model> </c:Model>
<c:Transform> <c:Transform>
<Position X="0.19607465" Y="0.705387294" Z="0.027300721"/> <Position X="0.195243329" Y="0.708130419" Z="0.0326478258"/>
<Orientation X="-1.39242768" Y="-0.0973876044" Z="0.332219124"/> <Orientation X="-1.39242756" Y="-0.0973875225" Z="0.332219273"/>
</c:Transform> </c:Transform>
</Components> </Components>
<Children/> <Children/>
@@ -827,22 +829,6 @@
<c:Transform/> <c:Transform/>
</Components> </Components>
<Children> <Children>
<Entity name="BottomLeft">
<Components>
<c:Sprite>
<Model>Models/Core/UnitQuad.mesh</Model>
<GlowMap></GlowMap>
<DiffuseTexture>Textures/HUD/ButtonCorner_16.png</DiffuseTexture>
<Linear>false</Linear>
</c:Sprite>
<c:Transform>
<Position X="-0.142000005" Y="-0.217999995" Z="0.00499999989"/>
<Orientation X="0" Y="0" Z="3.14900017"/>
<Scale X="0.00499999989" Y="0.00499999989" Z="1"/>
</c:Transform>
</Components>
<Children/>
</Entity>
<Entity name="BottomRight"> <Entity name="BottomRight">
<Components> <Components>
<c:Sprite> <c:Sprite>
@@ -874,6 +860,22 @@
</Components> </Components>
<Children/> <Children/>
</Entity> </Entity>
<Entity name="BottomLeft">
<Components>
<c:Sprite>
<Model>Models/Core/UnitQuad.mesh</Model>
<GlowMap></GlowMap>
<DiffuseTexture>Textures/HUD/ButtonCorner_16.png</DiffuseTexture>
<Linear>false</Linear>
</c:Sprite>
<c:Transform>
<Position X="-0.142000005" Y="-0.217999995" Z="0.00499999989"/>
<Orientation X="0" Y="0" Z="3.14900017"/>
<Scale X="0.00499999989" Y="0.00499999989" Z="1"/>
</c:Transform>
</Components>
<Children/>
</Entity>
<Entity name="TopLeft"> <Entity name="TopLeft">
<Components> <Components>
<c:Sprite> <c:Sprite>
@@ -898,6 +900,7 @@
<Pose1>Blend</Pose1> <Pose1>Blend</Pose1>
<Pose2></Pose2> <Pose2></Pose2>
</c:Blend> </c:Blend>
<c:Unpickable/>
<c:Model> <c:Model>
<GlowIntensity>1.6000000238418579</GlowIntensity> <GlowIntensity>1.6000000238418579</GlowIntensity>
<Resource>Models/Characters/Sniper/SniperBluePose.mesh</Resource> <Resource>Models/Characters/Sniper/SniperBluePose.mesh</Resource>
@@ -914,7 +917,7 @@
<Components> <Components>
<c:Animation> <c:Animation>
<AnimationName>SniperPoseF</AnimationName> <AnimationName>SniperPoseF</AnimationName>
<Time>1.7914650667707797</Time> <Time>1.1256008061759495</Time>
<Play>true</Play> <Play>true</Play>
</c:Animation> </c:Animation>
<c:Transform/> <c:Transform/>
@@ -930,8 +933,8 @@
<Resource>Models/Weapons/Blue/SecondaryWeaponBlue.mesh</Resource> <Resource>Models/Weapons/Blue/SecondaryWeaponBlue.mesh</Resource>
</c:Model> </c:Model>
<c:Transform> <c:Transform>
<Position X="-0.045448564" Y="1.0650903" Z="-0.125484675"/> <Position X="-0.0454485789" Y="1.06511343" Z="-0.125484645"/>
<Orientation X="-1.50533819" Y="1.34000111" Z="-1.34724498"/> <Orientation X="-1.50533736" Y="1.34000039" Z="-1.34724438"/>
</c:Transform> </c:Transform>
</Components> </Components>
<Children/> <Children/>
@@ -1531,7 +1534,7 @@
<Entity name="RespawnTimer"> <Entity name="RespawnTimer">
<Components> <Components>
<c:Text> <c:Text>
<Content>7</Content> <Content>2</Content>
<Resource>Fonts/DroidSans.ttf,64</Resource> <Resource>Fonts/DroidSans.ttf,64</Resource>
<Color A="1" B="0" G="1" R="0.784313738"/> <Color A="1" B="0" G="1" R="0.784313738"/>
</c:Text> </c:Text>
@@ -1919,6 +1922,60 @@
</Entity> </Entity>
</Children> </Children>
</Entity> </Entity>
<Entity name="KillFeed">
<Components>
<c:KillFeed/>
<c:Transform>
<Position X="0.494000018" Y="0.252000004" Z="0"/>
<Scale X="0.0149999997" Y="0.0149999997" Z="0.0149999997"/>
</c:Transform>
</Components>
<Children>
<Entity name="KillFeed1">
<Components>
<c:Text>
<Content></Content>
<Resource>Fonts/Hind-Edited.otf,64</Resource>
<Alignment>
<Right/>
</Alignment>
</c:Text>
<c:Transform/>
</Components>
<Children/>
</Entity>
<Entity name="KillFeed2">
<Components>
<c:Text>
<Content></Content>
<Resource>Fonts/Hind-Edited.otf,64</Resource>
<Alignment>
<Right/>
</Alignment>
</c:Text>
<c:Transform>
<Position X="0" Y="-1" Z="0"/>
</c:Transform>
</Components>
<Children/>
</Entity>
<Entity name="KillFeed3">
<Components>
<c:Text>
<Content></Content>
<Resource>Fonts/Hind-Edited.otf,64</Resource>
<Alignment>
<Right/>
</Alignment>
</c:Text>
<c:Transform>
<Position X="0" Y="-2" Z="0"/>
</c:Transform>
</Components>
<Children/>
</Entity>
</Children>
</Entity>
</Children> </Children>
</Entity> </Entity>
</Children> </Children>
@@ -2042,6 +2099,7 @@
<Pose1>Blend</Pose1> <Pose1>Blend</Pose1>
<Pose2></Pose2> <Pose2></Pose2>
</c:Blend> </c:Blend>
<c:Unpickable/>
<c:Model> <c:Model>
<GlowIntensity>1.6000000238418579</GlowIntensity> <GlowIntensity>1.6000000238418579</GlowIntensity>
<Resource>Models/Characters/Assault/AssaultRedPose.mesh</Resource> <Resource>Models/Characters/Assault/AssaultRedPose.mesh</Resource>
@@ -2058,7 +2116,7 @@
<Components> <Components>
<c:Animation> <c:Animation>
<AnimationName>AssaultPoseF</AnimationName> <AnimationName>AssaultPoseF</AnimationName>
<Time>1.1136462105269906</Time> <Time>0.44778194993216047</Time>
<Play>true</Play> <Play>true</Play>
</c:Animation> </c:Animation>
<c:Transform/> <c:Transform/>
@@ -2074,7 +2132,7 @@
<Resource>Models/Weapons/Red/AssaultWeaponRed.mesh</Resource> <Resource>Models/Weapons/Red/AssaultWeaponRed.mesh</Resource>
</c:Model> </c:Model>
<c:Transform> <c:Transform>
<Position X="0.160869107" Y="1.21306264" Z="-0.151224568"/> <Position X="0.160869107" Y="1.21565855" Z="-0.151224568"/>
<Orientation X="1.90465617" Y="-0.166544378" Z="0.0701896623"/> <Orientation X="1.90465617" Y="-0.166544378" Z="0.0701896623"/>
</c:Transform> </c:Transform>
</Components> </Components>
@@ -2440,6 +2498,7 @@
<Pose1>Blend</Pose1> <Pose1>Blend</Pose1>
<Pose2></Pose2> <Pose2></Pose2>
</c:Blend> </c:Blend>
<c:Unpickable/>
<c:Model> <c:Model>
<GlowIntensity>1.6000000238418579</GlowIntensity> <GlowIntensity>1.6000000238418579</GlowIntensity>
<Resource>Models/Characters/Defender/DefenderRedPose.mesh</Resource> <Resource>Models/Characters/Defender/DefenderRedPose.mesh</Resource>
@@ -2456,7 +2515,7 @@
<Components> <Components>
<c:Animation> <c:Animation>
<AnimationName>DefenderPoseF</AnimationName> <AnimationName>DefenderPoseF</AnimationName>
<Time>1.213854831703582</Time> <Time>0.54799057110875182</Time>
<Play>true</Play> <Play>true</Play>
</c:Animation> </c:Animation>
<c:Transform/> <c:Transform/>
@@ -2472,8 +2531,8 @@
<Resource>Models/Weapons/Red/DefenderWeaponRed.mesh</Resource> <Resource>Models/Weapons/Red/DefenderWeaponRed.mesh</Resource>
</c:Model> </c:Model>
<c:Transform> <c:Transform>
<Position X="0.195825815" Y="0.70610863" Z="0.0287085027"/> <Position X="0.194819659" Y="0.710372686" Z="0.0368246883"/>
<Orientation X="-1.39242768" Y="-0.097387448" Z="0.332219332"/> <Orientation X="-1.39242768" Y="-0.0973874852" Z="0.332219452"/>
</c:Transform> </c:Transform>
</Components> </Components>
<Children/> <Children/>
@@ -2800,6 +2859,7 @@
<Pose1>Blend</Pose1> <Pose1>Blend</Pose1>
<Pose2></Pose2> <Pose2></Pose2>
</c:Blend> </c:Blend>
<c:Unpickable/>
<c:Model> <c:Model>
<GlowIntensity>1.6000000238418579</GlowIntensity> <GlowIntensity>1.6000000238418579</GlowIntensity>
<Resource>Models/Characters/Sniper/SniperRedPose.mesh</Resource> <Resource>Models/Characters/Sniper/SniperRedPose.mesh</Resource>
@@ -2816,7 +2876,7 @@
<Components> <Components>
<c:Animation> <c:Animation>
<AnimationName>SniperPoseF</AnimationName> <AnimationName>SniperPoseF</AnimationName>
<Time>1.1306788315585941</Time> <Time>0.46481457096376388</Time>
<Play>true</Play> <Play>true</Play>
</c:Animation> </c:Animation>
<c:Transform/> <c:Transform/>
@@ -2832,8 +2892,8 @@
<Resource>Models/Weapons/Red/SecondaryWeaponRed.mesh</Resource> <Resource>Models/Weapons/Red/SecondaryWeaponRed.mesh</Resource>
</c:Model> </c:Model>
<c:Transform> <c:Transform>
<Position X="-0.0454485118" Y="1.06508994" Z="-0.12548466"/> <Position X="-0.0454485677" Y="1.06916106" Z="-0.125484571"/>
<Orientation X="-1.5053376" Y="1.34000039" Z="-1.34724426"/> <Orientation X="-1.50533819" Y="1.34000111" Z="-1.3472451"/>
</c:Transform> </c:Transform>
</Components> </Components>
<Children/> <Children/>
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+66 -49
View File
@@ -11,9 +11,10 @@
<Entity name="Crosshair"> <Entity name="Crosshair">
<Components> <Components>
<c:Sprite> <c:Sprite>
<DiffuseTexture>Textures/Weapons/Crosshair/SmallThickHoleDot.png</DiffuseTexture>
<GlowMap></GlowMap>
<DepthSort>false</DepthSort> <DepthSort>false</DepthSort>
<Model>Models/Core/UnitQuad.mesh</Model>
<GlowMap></GlowMap>
<DiffuseTexture>Textures/Weapons/Crosshair/SmallThickHoleDot.png</DiffuseTexture>
</c:Sprite> </c:Sprite>
<c:Transform> <c:Transform>
<Position X="0" Y="0" Z="0.200000003"/> <Position X="0" Y="0" Z="0.200000003"/>
@@ -42,9 +43,10 @@
<Entity name="BackgroundHexagon"> <Entity name="BackgroundHexagon">
<Components> <Components>
<c:Sprite> <c:Sprite>
<DiffuseTexture>Textures/Core/UnitHexagon.png</DiffuseTexture>
<GlowMap></GlowMap>
<DepthSort>false</DepthSort> <DepthSort>false</DepthSort>
<Model>Models/Core/UnitQuad.mesh</Model>
<GlowMap></GlowMap>
<DiffuseTexture>Textures/Core/UnitHexagon.png</DiffuseTexture>
<Color A="0.300000012" B="1" G="1" R="1"/> <Color A="0.300000012" B="1" G="1" R="1"/>
</c:Sprite> </c:Sprite>
<c:Transform> <c:Transform>
@@ -61,9 +63,10 @@
<CapturePointNumber>3</CapturePointNumber> <CapturePointNumber>3</CapturePointNumber>
</c:CapturePointHUD> </c:CapturePointHUD>
<c:Sprite> <c:Sprite>
<DiffuseTexture>Textures/Core/UnitHexagon_Rotated.png</DiffuseTexture>
<GlowMap></GlowMap>
<DepthSort>false</DepthSort> <DepthSort>false</DepthSort>
<Model>Models/Core/UnitQuad.mesh</Model>
<GlowMap></GlowMap>
<DiffuseTexture>Textures/Core/UnitHexagon_Rotated.png</DiffuseTexture>
</c:Sprite> </c:Sprite>
<c:Transform> <c:Transform>
<Position X="0" Y="0" Z="0.00999999978"/> <Position X="0" Y="0" Z="0.00999999978"/>
@@ -78,9 +81,10 @@
<Entity name="BackgroundHexagon"> <Entity name="BackgroundHexagon">
<Components> <Components>
<c:Sprite> <c:Sprite>
<DiffuseTexture>Textures/Core/UnitHexagon.png</DiffuseTexture>
<GlowMap></GlowMap>
<DepthSort>false</DepthSort> <DepthSort>false</DepthSort>
<Model>Models/Core/UnitQuad.mesh</Model>
<GlowMap></GlowMap>
<DiffuseTexture>Textures/Core/UnitHexagon.png</DiffuseTexture>
<Color A="0.699999988" B="1" G="0.200000003" R="0"/> <Color A="0.699999988" B="1" G="0.200000003" R="0"/>
</c:Sprite> </c:Sprite>
<c:Transform> <c:Transform>
@@ -98,9 +102,10 @@
<CapturePointNumber>4</CapturePointNumber> <CapturePointNumber>4</CapturePointNumber>
</c:CapturePointHUD> </c:CapturePointHUD>
<c:Sprite> <c:Sprite>
<DiffuseTexture>Textures/Core/UnitHexagon_Rotated.png</DiffuseTexture>
<GlowMap></GlowMap>
<DepthSort>false</DepthSort> <DepthSort>false</DepthSort>
<Model>Models/Core/UnitQuad.mesh</Model>
<GlowMap></GlowMap>
<DiffuseTexture>Textures/Core/UnitHexagon_Rotated.png</DiffuseTexture>
</c:Sprite> </c:Sprite>
<c:Transform> <c:Transform>
<Position X="0" Y="0" Z="0.00999999978"/> <Position X="0" Y="0" Z="0.00999999978"/>
@@ -115,9 +120,10 @@
<Entity name="BackgroundHexagon"> <Entity name="BackgroundHexagon">
<Components> <Components>
<c:Sprite> <c:Sprite>
<DiffuseTexture>Textures/Core/UnitHexagon.png</DiffuseTexture>
<GlowMap></GlowMap>
<DepthSort>false</DepthSort> <DepthSort>false</DepthSort>
<Model>Models/Core/UnitQuad.mesh</Model>
<GlowMap></GlowMap>
<DiffuseTexture>Textures/Core/UnitHexagon.png</DiffuseTexture>
<Color A="0.300000012" B="1" G="1" R="1"/> <Color A="0.300000012" B="1" G="1" R="1"/>
</c:Sprite> </c:Sprite>
<c:Transform> <c:Transform>
@@ -134,9 +140,10 @@
<CapturePointNumber>2</CapturePointNumber> <CapturePointNumber>2</CapturePointNumber>
</c:CapturePointHUD> </c:CapturePointHUD>
<c:Sprite> <c:Sprite>
<DiffuseTexture>Textures/Core/UnitHexagon_Rotated.png</DiffuseTexture>
<GlowMap></GlowMap>
<DepthSort>false</DepthSort> <DepthSort>false</DepthSort>
<Model>Models/Core/UnitQuad.mesh</Model>
<GlowMap></GlowMap>
<DiffuseTexture>Textures/Core/UnitHexagon_Rotated.png</DiffuseTexture>
</c:Sprite> </c:Sprite>
<c:Transform> <c:Transform>
<Position X="0" Y="0" Z="0.00999999978"/> <Position X="0" Y="0" Z="0.00999999978"/>
@@ -151,9 +158,10 @@
<Entity name="BackgroundHexagon"> <Entity name="BackgroundHexagon">
<Components> <Components>
<c:Sprite> <c:Sprite>
<DiffuseTexture>Textures/Core/UnitHexagon.png</DiffuseTexture>
<GlowMap></GlowMap>
<DepthSort>false</DepthSort> <DepthSort>false</DepthSort>
<Model>Models/Core/UnitQuad.mesh</Model>
<GlowMap></GlowMap>
<DiffuseTexture>Textures/Core/UnitHexagon.png</DiffuseTexture>
<Color A="0.300000012" B="1" G="1" R="1"/> <Color A="0.300000012" B="1" G="1" R="1"/>
</c:Sprite> </c:Sprite>
<c:Transform> <c:Transform>
@@ -170,9 +178,10 @@
<CapturePointNumber>1</CapturePointNumber> <CapturePointNumber>1</CapturePointNumber>
</c:CapturePointHUD> </c:CapturePointHUD>
<c:Sprite> <c:Sprite>
<DiffuseTexture>Textures/Core/UnitHexagon_Rotated.png</DiffuseTexture>
<GlowMap></GlowMap>
<DepthSort>false</DepthSort> <DepthSort>false</DepthSort>
<Model>Models/Core/UnitQuad.mesh</Model>
<GlowMap></GlowMap>
<DiffuseTexture>Textures/Core/UnitHexagon_Rotated.png</DiffuseTexture>
</c:Sprite> </c:Sprite>
<c:Transform> <c:Transform>
<Position X="0" Y="0" Z="0.00999999978"/> <Position X="0" Y="0" Z="0.00999999978"/>
@@ -187,9 +196,10 @@
<Entity name="BackgroundHexagon"> <Entity name="BackgroundHexagon">
<Components> <Components>
<c:Sprite> <c:Sprite>
<DiffuseTexture>Textures/Core/UnitHexagon.png</DiffuseTexture>
<GlowMap></GlowMap>
<DepthSort>false</DepthSort> <DepthSort>false</DepthSort>
<Model>Models/Core/UnitQuad.mesh</Model>
<GlowMap></GlowMap>
<DiffuseTexture>Textures/Core/UnitHexagon.png</DiffuseTexture>
<Color A="0.699999988" B="0" G="0" R="1"/> <Color A="0.699999988" B="0" G="0" R="1"/>
</c:Sprite> </c:Sprite>
<c:Transform> <c:Transform>
@@ -205,9 +215,10 @@
</c:Fill> </c:Fill>
<c:CapturePointHUD/> <c:CapturePointHUD/>
<c:Sprite> <c:Sprite>
<DiffuseTexture>Textures/Core/UnitHexagon_Rotated.png</DiffuseTexture>
<GlowMap></GlowMap>
<DepthSort>false</DepthSort> <DepthSort>false</DepthSort>
<Model>Models/Core/UnitQuad.mesh</Model>
<GlowMap></GlowMap>
<DiffuseTexture>Textures/Core/UnitHexagon_Rotated.png</DiffuseTexture>
</c:Sprite> </c:Sprite>
<c:Transform> <c:Transform>
<Position X="0" Y="0" Z="0.00999999978"/> <Position X="0" Y="0" Z="0.00999999978"/>
@@ -234,7 +245,7 @@
<Components> <Components>
<c:Text> <c:Text>
<Content></Content> <Content></Content>
<Resource>Fonts/DroidSans.ttf,64</Resource> <Resource>Fonts/Hind-Edited.otf,64</Resource>
<Alignment> <Alignment>
<Right/> <Right/>
</Alignment> </Alignment>
@@ -247,7 +258,7 @@
<Components> <Components>
<c:Text> <c:Text>
<Content></Content> <Content></Content>
<Resource>Fonts/DroidSans.ttf,64</Resource> <Resource>Fonts/Hind-Edited.otf,64</Resource>
<Alignment> <Alignment>
<Right/> <Right/>
</Alignment> </Alignment>
@@ -262,7 +273,7 @@
<Components> <Components>
<c:Text> <c:Text>
<Content></Content> <Content></Content>
<Resource>Fonts/DroidSans.ttf,64</Resource> <Resource>Fonts/Hind-Edited.otf,64</Resource>
<Alignment> <Alignment>
<Right/> <Right/>
</Alignment> </Alignment>
@@ -284,10 +295,11 @@
</c:Team> </c:Team>
<c:CapturePointArrowHUD/> <c:CapturePointArrowHUD/>
<c:Model> <c:Model>
<Resource>Models/Widgets/Arrows/Arrow5.mesh</Resource> <Resource>Models/Widgets/Arrows/ArrowBlue.mesh</Resource>
</c:Model> </c:Model>
<c:Transform> <c:Transform>
<Position X="0" Y="0.198665127" Z="0"/> <Position X="0" Y="0.198665127" Z="0"/>
<Orientation X="0.0531693883" Y="-2.13055706" Z="0"/>
<Scale X="0.0500000007" Y="0.0500000007" Z="0.0500000007"/> <Scale X="0.0500000007" Y="0.0500000007" Z="0.0500000007"/>
</c:Transform> </c:Transform>
</Components> </Components>
@@ -307,12 +319,12 @@
<Percentage>1</Percentage> <Percentage>1</Percentage>
<Color A="1" B="1" G="0" R="0"/> <Color A="1" B="1" G="0" R="0"/>
</c:Fill> </c:Fill>
<c:HealthHUD/>
<c:Text> <c:Text>
<Content>100/100</Content> <Content>100/100</Content>
<Resource>Fonts/DroidSans.ttf,64</Resource> <Resource>Fonts/DroidSans.ttf,64</Resource>
<Color A="0.505882382" B="3.92156863" G="1.17647064" R="0"/> <Color A="0.505882382" B="1.56862748" G="1.17647064" R="0"/>
</c:Text> </c:Text>
<c:HealthHUD/>
<c:Transform> <c:Transform>
<Position X="0.0200000014" Y="-0.101000004" Z="0.00300000003"/> <Position X="0.0200000014" Y="-0.101000004" Z="0.00300000003"/>
<Orientation X="0" Y="0" Z="1.57070696"/> <Orientation X="0" Y="0" Z="1.57070696"/>
@@ -329,8 +341,9 @@
</c:Fill> </c:Fill>
<c:HealthHUD/> <c:HealthHUD/>
<c:Sprite> <c:Sprite>
<DiffuseTexture>Textures/HealthHUD3.png</DiffuseTexture> <Model>Models/Core/UnitQuad.mesh</Model>
<GlowMap></GlowMap> <GlowMap></GlowMap>
<DiffuseTexture>Textures/HealthHUD3.png</DiffuseTexture>
<Color A="0.588235319" B="0" G="0" R="0"/> <Color A="0.588235319" B="0" G="0" R="0"/>
</c:Sprite> </c:Sprite>
<c:Transform> <c:Transform>
@@ -350,16 +363,17 @@
<Entity name="Assault"> <Entity name="Assault">
<Components> <Components>
<c:Fill> <c:Fill>
<Color A="1" B="0.533333361" G="1" R="0.329411775"/> <Color A="1" B="1.96078432" G="0.784313738" R="0"/>
</c:Fill> </c:Fill>
<c:Sprite> <c:Sprite>
<DiffuseTexture>Textures/Icons/Boosts/Assault-01.png</DiffuseTexture>
<GlowMap></GlowMap>
<DepthSort>false</DepthSort> <DepthSort>false</DepthSort>
<Color A="0" B="0.0392156877" G="0.184313729" R="0"/> <Model>Models/Core/UnitQuad.mesh</Model>
<GlowMap></GlowMap>
<DiffuseTexture>Textures/Icons/Boosts/Assault-01.png</DiffuseTexture>
<Color A="0.392156869" B="0.352941185" G="0.196078435" R="0"/>
</c:Sprite> </c:Sprite>
<c:Transform> <c:Transform>
<Position X="0.0250000004" Y="0.0700000003" Z="0"/> <Position X="0.0250000004" Y="0.0650000051" Z="0"/>
<Orientation X="0" Y="0" Z="3.14199996"/> <Orientation X="0" Y="0" Z="3.14199996"/>
<Scale X="0.0399999991" Y="0.0399999991" Z="0.5"/> <Scale X="0.0399999991" Y="0.0399999991" Z="0.5"/>
</c:Transform> </c:Transform>
@@ -369,16 +383,17 @@
<Entity name="Defender"> <Entity name="Defender">
<Components> <Components>
<c:Fill> <c:Fill>
<Color A="1" B="1" G="0.58431375" R="0.105882354"/> <Color A="1" B="1.96078432" G="0.784313738" R="0"/>
</c:Fill> </c:Fill>
<c:Sprite> <c:Sprite>
<DiffuseTexture>Textures/Icons/Boosts/Defender-01.png</DiffuseTexture>
<GlowMap></GlowMap>
<DepthSort>false</DepthSort> <DepthSort>false</DepthSort>
<Color A="0" B="0.34117648" G="0.192156866" R="0"/> <Model>Models/Core/UnitQuad.mesh</Model>
<GlowMap></GlowMap>
<DiffuseTexture>Textures/Icons/Boosts/Defender-01.png</DiffuseTexture>
<Color A="0.392156869" B="0.352941185" G="0.196078435" R="0"/>
</c:Sprite> </c:Sprite>
<c:Transform> <c:Transform>
<Position X="0.0270000007" Y="0.110000007" Z="0"/> <Position X="0.0240000002" Y="0.104000002" Z="0"/>
<Orientation X="0" Y="0" Z="3.14199996"/> <Orientation X="0" Y="0" Z="3.14199996"/>
<Scale X="0.0399999991" Y="0.0400000028" Z="0.165000007"/> <Scale X="0.0399999991" Y="0.0400000028" Z="0.165000007"/>
</c:Transform> </c:Transform>
@@ -388,16 +403,17 @@
<Entity name="Sniper"> <Entity name="Sniper">
<Components> <Components>
<c:Fill> <c:Fill>
<Color A="1" B="0.345098048" G="0" R="1"/> <Color A="1" B="1.96078432" G="0.784313738" R="0"/>
</c:Fill> </c:Fill>
<c:Sprite> <c:Sprite>
<DiffuseTexture>Textures/Icons/Boosts/Sniper-01.png</DiffuseTexture>
<GlowMap></GlowMap>
<DepthSort>false</DepthSort> <DepthSort>false</DepthSort>
<Color A="0" B="0.121568628" G="0" R="0.443137258"/> <Model>Models/Core/UnitQuad.mesh</Model>
<GlowMap></GlowMap>
<DiffuseTexture>Textures/Icons/Boosts/Sniper-01.png</DiffuseTexture>
<Color A="0.392156869" B="0.352941185" G="0.196078435" R="0"/>
</c:Sprite> </c:Sprite>
<c:Transform> <c:Transform>
<Position X="0.0250000004" Y="0.145000011" Z="0"/> <Position X="0.0240000002" Y="0.145000011" Z="0"/>
<Orientation X="0" Y="0" Z="3.14199996"/> <Orientation X="0" Y="0" Z="3.14199996"/>
<Scale X="0.0400000028" Y="0.0400000028" Z="0.165000007"/> <Scale X="0.0400000028" Y="0.0400000028" Z="0.165000007"/>
</c:Transform> </c:Transform>
@@ -413,15 +429,16 @@
<Color A="1" B="0.392156869" G="0.392156869" R="0.392156869"/> <Color A="1" B="0.392156869" G="0.392156869" R="0.392156869"/>
</c:Fill> </c:Fill>
<c:Sprite> <c:Sprite>
<DiffuseTexture>Textures/Icons/Abilities/Superman-01.png</DiffuseTexture>
<GlowMap></GlowMap>
<DepthSort>false</DepthSort> <DepthSort>false</DepthSort>
<Color A="1" B="0.206628323" G="0.78039217" R="0.192802757"/> <Model>Models/Core/UnitQuad.mesh</Model>
<GlowMap></GlowMap>
<DiffuseTexture>Textures/Test/aM4ME4GR.png</DiffuseTexture>
<Color A="1" B="0.20784314" G="1.17647064" R="0.192156866"/>
</c:Sprite> </c:Sprite>
<c:Transform> <c:Transform>
<Position X="0.0250000004" Y="0.0100000007" Z="0"/> <Position X="0.0250000004" Y="0.0100000007" Z="0"/>
<Orientation X="0" Y="0" Z="3.14159203"/> <Orientation X="0" Y="0" Z="1.57000005"/>
<Scale X="0.0800000057" Y="0.0700000003" Z="1"/> <Scale X="0.0800000057" Y="0.029000001" Z="1"/>
</c:Transform> </c:Transform>
</Components> </Components>
<Children/> <Children/>
+146 -114
View File
@@ -3,7 +3,7 @@
<Components> <Components>
<c:CapturePointGameMode> <c:CapturePointGameMode>
<RespawnTime>3.6154132075906489</RespawnTime> <RespawnTime>6.5024371606521605</RespawnTime>
</c:CapturePointGameMode> </c:CapturePointGameMode>
<c:Transform> <c:Transform>
<Position X="0" Y="-1" Z="0"/> <Position X="0" Y="-1" Z="0"/>
@@ -11,6 +11,15 @@
</Components> </Components>
<Children> <Children>
<Entity name="CamOrigin">
<Components>
<c:Camera/>
<c:Transform>
<Position X="0" Y="1" Z="0"/>
</c:Transform>
</Components>
<Children/>
</Entity>
<Entity name="AnimationTestOrigin"> <Entity name="AnimationTestOrigin">
<Components> <Components>
<c:Transform> <c:Transform>
@@ -69,15 +78,6 @@
</c:Transform> </c:Transform>
</Components> </Components>
<Children> <Children>
<Entity name="Light">
<Components>
<c:PointLight/>
<c:Transform>
<Position X="0" Y="0.663784981" Z="0"/>
</c:Transform>
</Components>
<Children/>
</Entity>
<Entity name="RotationOrigin"> <Entity name="RotationOrigin">
<Components> <Components>
<c:RaptorCopter> <c:RaptorCopter>
@@ -85,7 +85,7 @@
<Axis X="0" Y="1" Z="0"/> <Axis X="0" Y="1" Z="0"/>
</c:RaptorCopter> </c:RaptorCopter>
<c:Transform> <c:Transform>
<Orientation X="0" Y="2907.64526" Z="0"/> <Orientation X="0" Y="2974.37671" Z="0"/>
</c:Transform> </c:Transform>
</Components> </Components>
<Children> <Children>
@@ -105,6 +105,15 @@
</Entity> </Entity>
</Children> </Children>
</Entity> </Entity>
<Entity name="Light">
<Components>
<c:PointLight/>
<c:Transform>
<Position X="0" Y="0.663784981" Z="0"/>
</c:Transform>
</Components>
<Children/>
</Entity>
</Children> </Children>
</Entity> </Entity>
</Children> </Children>
@@ -141,7 +150,7 @@
<Axis X="0" Y="1" Z="0"/> <Axis X="0" Y="1" Z="0"/>
</c:RaptorCopter> </c:RaptorCopter>
<c:Transform> <c:Transform>
<Orientation X="0" Y="9141.29785" Z="0"/> <Orientation X="0" Y="9274.77051" Z="0"/>
</c:Transform> </c:Transform>
</Components> </Components>
<Children> <Children>
@@ -194,7 +203,7 @@
</c:Model> </c:Model>
<c:Transform> <c:Transform>
<Position X="2.1529963" Y="6.59221172" Z="0.169116676"/> <Position X="2.1529963" Y="6.59221172" Z="0.169116676"/>
<Orientation X="4.16300011" Y="18980.4727" Z="0"/> <Orientation X="4.16300011" Y="19113.9609" Z="0"/>
</c:Transform> </c:Transform>
</Components> </Components>
<Children/> <Children/>
@@ -222,7 +231,7 @@
<Axis X="1" Y="1" Z="1"/> <Axis X="1" Y="1" Z="1"/>
</c:RaptorCopter> </c:RaptorCopter>
<c:Transform> <c:Transform>
<Orientation X="17570.9531" Y="17570.9531" Z="17570.9531"/> <Orientation X="17704.4414" Y="17704.4414" Z="17704.4414"/>
</c:Transform> </c:Transform>
</Components> </Components>
<Children> <Children>
@@ -286,7 +295,7 @@
<Axis X="0" Y="1" Z="0"/> <Axis X="0" Y="1" Z="0"/>
</c:RaptorCopter> </c:RaptorCopter>
<c:Transform> <c:Transform>
<Orientation X="0" Y="17366.9492" Z="0"/> <Orientation X="0" Y="17500.4375" Z="0"/>
</c:Transform> </c:Transform>
</Components> </Components>
<Children> <Children>
@@ -318,7 +327,7 @@
<Axis X="0.699999988" Y="1" Z="0.300000012"/> <Axis X="0.699999988" Y="1" Z="0.300000012"/>
</c:RaptorCopter> </c:RaptorCopter>
<c:Transform> <c:Transform>
<Orientation X="12702.4932" Y="18094.3594" Z="5414.53027"/> <Orientation X="12795.8896" Y="18227.8477" Z="5454.55518"/>
</c:Transform> </c:Transform>
</Components> </Components>
<Children> <Children>
@@ -641,6 +650,52 @@
</c:Transform> </c:Transform>
</Components> </Components>
<Children> <Children>
<Entity name="AssetBase">
<Components>
<c:Model>
<Resource>Models/Core/UnitCylinder.mesh</Resource>
<Color A="1" B="1.56862748" G="1.56862748" R="1.56862748"/>
</c:Model>
<c:Transform>
<Position X="-2.27346039" Y="-0.231354833" Z="-0.0611162409"/>
</c:Transform>
</Components>
<Children>
<Entity name="Light">
<Components>
<c:PointLight/>
<c:Transform>
<Position X="0" Y="0.663784981" Z="0"/>
</c:Transform>
</Components>
<Children/>
</Entity>
<Entity name="RotationOrigin">
<Components>
<c:RaptorCopter>
<Speed>0.5</Speed>
<Axis X="0" Y="1" Z="0"/>
</c:RaptorCopter>
<c:Transform>
<Orientation X="0" Y="1272.14539" Z="0"/>
</c:Transform>
</Components>
<Children>
<Entity name="Asset">
<Components>
<c:Model>
<Resource>Models/Test/AssaultTPoseSoftEdge.mesh</Resource>
</c:Model>
<c:Transform>
<Position X="0" Y="0.5" Z="0"/>
</c:Transform>
</Components>
<Children/>
</Entity>
</Children>
</Entity>
</Children>
</Entity>
<Entity name="AssetBase"> <Entity name="AssetBase">
<Components> <Components>
<c:Model> <c:Model>
@@ -668,7 +723,7 @@
<Axis X="0" Y="1" Z="0"/> <Axis X="0" Y="1" Z="0"/>
</c:RaptorCopter> </c:RaptorCopter>
<c:Transform> <c:Transform>
<Orientation X="0" Y="1205.41614" Z="0"/> <Orientation X="0" Y="1272.14539" Z="0"/>
</c:Transform> </c:Transform>
</Components> </Components>
<Children> <Children>
@@ -715,7 +770,7 @@
<Axis X="0" Y="1" Z="0"/> <Axis X="0" Y="1" Z="0"/>
</c:RaptorCopter> </c:RaptorCopter>
<c:Transform> <c:Transform>
<Orientation X="0" Y="1205.41614" Z="0"/> <Orientation X="0" Y="1272.14539" Z="0"/>
</c:Transform> </c:Transform>
</Components> </Components>
<Children> <Children>
@@ -775,7 +830,7 @@
<Axis X="0" Y="1" Z="0"/> <Axis X="0" Y="1" Z="0"/>
</c:RaptorCopter> </c:RaptorCopter>
<c:Transform> <c:Transform>
<Orientation X="0" Y="1205.41614" Z="0"/> <Orientation X="0" Y="1272.14539" Z="0"/>
</c:Transform> </c:Transform>
</Components> </Components>
<Children> <Children>
@@ -795,52 +850,6 @@
</Entity> </Entity>
</Children> </Children>
</Entity> </Entity>
<Entity name="AssetBase">
<Components>
<c:Model>
<Resource>Models/Core/UnitCylinder.mesh</Resource>
<Color A="1" B="1.56862748" G="1.56862748" R="1.56862748"/>
</c:Model>
<c:Transform>
<Position X="-2.27346039" Y="-0.231354833" Z="-0.0611162409"/>
</c:Transform>
</Components>
<Children>
<Entity name="Light">
<Components>
<c:PointLight/>
<c:Transform>
<Position X="0" Y="0.663784981" Z="0"/>
</c:Transform>
</Components>
<Children/>
</Entity>
<Entity name="RotationOrigin">
<Components>
<c:RaptorCopter>
<Speed>0.5</Speed>
<Axis X="0" Y="1" Z="0"/>
</c:RaptorCopter>
<c:Transform>
<Orientation X="0" Y="1205.41614" Z="0"/>
</c:Transform>
</Components>
<Children>
<Entity name="Asset">
<Components>
<c:Model>
<Resource>Models/Test/AssaultTPoseSoftEdge.mesh</Resource>
</c:Model>
<c:Transform>
<Position X="0" Y="0.5" Z="0"/>
</c:Transform>
</Components>
<Children/>
</Entity>
</Children>
</Entity>
</Children>
</Entity>
<Entity name="AssetBase"> <Entity name="AssetBase">
<Components> <Components>
<c:Model> <c:Model>
@@ -868,7 +877,7 @@
<Axis X="0" Y="1" Z="0"/> <Axis X="0" Y="1" Z="0"/>
</c:RaptorCopter> </c:RaptorCopter>
<c:Transform> <c:Transform>
<Orientation X="0" Y="1205.41614" Z="0"/> <Orientation X="0" Y="1272.14539" Z="0"/>
</c:Transform> </c:Transform>
</Components> </Components>
<Children> <Children>
@@ -915,7 +924,7 @@
<Axis X="0" Y="1" Z="0"/> <Axis X="0" Y="1" Z="0"/>
</c:RaptorCopter> </c:RaptorCopter>
<c:Transform> <c:Transform>
<Orientation X="0" Y="1205.41614" Z="0"/> <Orientation X="0" Y="1272.14539" Z="0"/>
</c:Transform> </c:Transform>
</Components> </Components>
<Children> <Children>
@@ -962,7 +971,7 @@
<Axis X="0" Y="1" Z="0"/> <Axis X="0" Y="1" Z="0"/>
</c:RaptorCopter> </c:RaptorCopter>
<c:Transform> <c:Transform>
<Orientation X="0" Y="1205.41614" Z="0"/> <Orientation X="0" Y="1272.14539" Z="0"/>
</c:Transform> </c:Transform>
</Components> </Components>
<Children> <Children>
@@ -1027,7 +1036,6 @@
<Red/> <Red/>
</Team> </Team>
</c:Team> </c:Team>
<c:Trigger/>
<c:Model> <c:Model>
<Resource>Models/Core/UnitCube.mesh</Resource> <Resource>Models/Core/UnitCube.mesh</Resource>
<Color A="0.300000012" B="0" G="0" R="1"/> <Color A="0.300000012" B="0" G="0" R="1"/>
@@ -1037,6 +1045,7 @@
<Position X="0" Y="2" Z="0"/> <Position X="0" Y="2" Z="0"/>
<Scale X="8" Y="4" Z="8"/> <Scale X="8" Y="4" Z="8"/>
</c:Transform> </c:Transform>
<c:Trigger/>
</Components> </Components>
<Children/> <Children/>
</Entity> </Entity>
@@ -1073,7 +1082,6 @@
<CapturePointNumber>1</CapturePointNumber> <CapturePointNumber>1</CapturePointNumber>
</c:CapturePoint> </c:CapturePoint>
<c:Team/> <c:Team/>
<c:Trigger/>
<c:Model> <c:Model>
<Resource>Models/Core/UnitCube.mesh</Resource> <Resource>Models/Core/UnitCube.mesh</Resource>
<Color A="0.300000012" B="1" G="1" R="1"/> <Color A="0.300000012" B="1" G="1" R="1"/>
@@ -1083,6 +1091,7 @@
<Position X="0" Y="2" Z="0"/> <Position X="0" Y="2" Z="0"/>
<Scale X="8" Y="4" Z="8"/> <Scale X="8" Y="4" Z="8"/>
</c:Transform> </c:Transform>
<c:Trigger/>
</Components> </Components>
<Children/> <Children/>
</Entity> </Entity>
@@ -1117,7 +1126,6 @@
<CapturePointNumber>2</CapturePointNumber> <CapturePointNumber>2</CapturePointNumber>
</c:CapturePoint> </c:CapturePoint>
<c:Team/> <c:Team/>
<c:Trigger/>
<c:Model> <c:Model>
<Resource>Models/Core/UnitCube.mesh</Resource> <Resource>Models/Core/UnitCube.mesh</Resource>
<Color A="0.300000012" B="1" G="1" R="1"/> <Color A="0.300000012" B="1" G="1" R="1"/>
@@ -1127,6 +1135,7 @@
<Position X="0" Y="2" Z="0"/> <Position X="0" Y="2" Z="0"/>
<Scale X="8" Y="4" Z="8"/> <Scale X="8" Y="4" Z="8"/>
</c:Transform> </c:Transform>
<c:Trigger/>
</Components> </Components>
<Children/> <Children/>
</Entity> </Entity>
@@ -1163,7 +1172,6 @@
<CapturePointNumber>3</CapturePointNumber> <CapturePointNumber>3</CapturePointNumber>
</c:CapturePoint> </c:CapturePoint>
<c:Team/> <c:Team/>
<c:Trigger/>
<c:Model> <c:Model>
<Resource>Models/Core/UnitCube.mesh</Resource> <Resource>Models/Core/UnitCube.mesh</Resource>
<Color A="0.300000012" B="1" G="1" R="1"/> <Color A="0.300000012" B="1" G="1" R="1"/>
@@ -1173,6 +1181,7 @@
<Position X="0" Y="2" Z="0"/> <Position X="0" Y="2" Z="0"/>
<Scale X="8" Y="4" Z="8"/> <Scale X="8" Y="4" Z="8"/>
</c:Transform> </c:Transform>
<c:Trigger/>
</Components> </Components>
<Children/> <Children/>
</Entity> </Entity>
@@ -1217,7 +1226,6 @@
<Blue/> <Blue/>
</Team> </Team>
</c:Team> </c:Team>
<c:Trigger/>
<c:Model> <c:Model>
<Resource>Models/Core/UnitCube.mesh</Resource> <Resource>Models/Core/UnitCube.mesh</Resource>
<Color A="0.300000012" B="1" G="0" R="0"/> <Color A="0.300000012" B="1" G="0" R="0"/>
@@ -1227,6 +1235,7 @@
<Position X="0" Y="2" Z="0"/> <Position X="0" Y="2" Z="0"/>
<Scale X="8" Y="4" Z="8"/> <Scale X="8" Y="4" Z="8"/>
</c:Transform> </c:Transform>
<c:Trigger/>
</Components> </Components>
<Children/> <Children/>
</Entity> </Entity>
@@ -1376,19 +1385,19 @@
<Axis X="0" Y="1" Z="0"/> <Axis X="0" Y="1" Z="0"/>
</c:RaptorCopter> </c:RaptorCopter>
<c:Transform> <c:Transform>
<Orientation X="0" Y="1739.14307" Z="0"/> <Orientation X="0" Y="1805.87231" Z="0"/>
</c:Transform> </c:Transform>
</Components> </Components>
<Children> <Children>
<Entity name="Asset"> <Entity name="Asset">
<Components> <Components>
<c:ExplosionEffect> <c:ExplosionEffect>
<ColorByDistance>true</ColorByDistance>
<Velocity X="0.800000012" Y="0.0379999988" Z="0"/> <Velocity X="0.800000012" Y="0.0379999988" Z="0"/>
<TimeSinceDeath>1.5712751414989441</TimeSinceDeath> <TimeSinceDeath>1.3579803859829696</TimeSinceDeath>
<ExplosionDuration>3.7999999523162842</ExplosionDuration> <ExplosionDuration>3.7999999523162842</ExplosionDuration>
<EndColor A="0" B="23.5294113" G="11.7647057" R="0"/> <EndColor A="0" B="23.5294113" G="11.7647057" R="0"/>
<Randomness>true</Randomness> <Randomness>true</Randomness>
<ColorByDistance>true</ColorByDistance>
</c:ExplosionEffect> </c:ExplosionEffect>
<c:Model> <c:Model>
<Resource>Models/Weapons/Blue/AssaultWeaponBlue.mesh</Resource> <Resource>Models/Weapons/Blue/AssaultWeaponBlue.mesh</Resource>
@@ -1432,7 +1441,7 @@
<Axis X="0" Y="1" Z="0"/> <Axis X="0" Y="1" Z="0"/>
</c:RaptorCopter> </c:RaptorCopter>
<c:Transform> <c:Transform>
<Orientation X="0" Y="1739.14307" Z="0"/> <Orientation X="0" Y="1805.87231" Z="0"/>
</c:Transform> </c:Transform>
</Components> </Components>
<Children> <Children>
@@ -1441,7 +1450,7 @@
<c:ExplosionEffect> <c:ExplosionEffect>
<Velocity X="0.5" Y="1" Z="0"/> <Velocity X="0.5" Y="1" Z="0"/>
<ExplosionOrigin X="0" Y="0.900000036" Z="0"/> <ExplosionOrigin X="0" Y="0.900000036" Z="0"/>
<TimeSinceDeath>0.85439856235552725</TimeSinceDeath> <TimeSinceDeath>0.79164215554514783</TimeSinceDeath>
</c:ExplosionEffect> </c:ExplosionEffect>
<c:Model> <c:Model>
<Resource>Models/Characters/Assault/AssaultTPose.mesh</Resource> <Resource>Models/Characters/Assault/AssaultTPose.mesh</Resource>
@@ -1484,7 +1493,7 @@
<Axis X="0" Y="1" Z="0"/> <Axis X="0" Y="1" Z="0"/>
</c:RaptorCopter> </c:RaptorCopter>
<c:Transform> <c:Transform>
<Orientation X="0" Y="1739.14307" Z="0"/> <Orientation X="0" Y="1805.87231" Z="0"/>
</c:Transform> </c:Transform>
</Components> </Components>
<Children> <Children>
@@ -1494,12 +1503,12 @@
<AnimationName></AnimationName> <AnimationName></AnimationName>
</c:Animation> </c:Animation>
<c:ExplosionEffect> <c:ExplosionEffect>
<ColorByDistance>true</ColorByDistance>
<Velocity X="0.300000012" Y="2" Z="0"/> <Velocity X="0.300000012" Y="2" Z="0"/>
<ExplosionOrigin X="0" Y="1.30000007" Z="-0.200000003"/> <ExplosionOrigin X="0" Y="1.30000007" Z="-0.200000003"/>
<TimeSinceDeath>0.85439856235552725</TimeSinceDeath> <TimeSinceDeath>0.79164215554514783</TimeSinceDeath>
<EndColor A="0" B="0.333333343" G="0.933333337" R="3.92156863"/> <EndColor A="0" B="0.333333343" G="0.933333337" R="3.92156863"/>
<Randomness>true</Randomness> <Randomness>true</Randomness>
<ColorByDistance>true</ColorByDistance>
</c:ExplosionEffect> </c:ExplosionEffect>
<c:Model> <c:Model>
<Resource>Models/Characters/Assault/AssaultAnimated.mesh</Resource> <Resource>Models/Characters/Assault/AssaultAnimated.mesh</Resource>
@@ -1542,21 +1551,21 @@
<Axis X="0" Y="1" Z="0"/> <Axis X="0" Y="1" Z="0"/>
</c:RaptorCopter> </c:RaptorCopter>
<c:Transform> <c:Transform>
<Orientation X="0" Y="1746.92322" Z="0"/> <Orientation X="0" Y="1813.65247" Z="0"/>
</c:Transform> </c:Transform>
</Components> </Components>
<Children> <Children>
<Entity name="Asset"> <Entity name="Asset">
<Components> <Components>
<c:ExplosionEffect> <c:ExplosionEffect>
<ColorByDistance>true</ColorByDistance>
<Velocity X="0" Y="0.699999988" Z="0"/> <Velocity X="0" Y="0.699999988" Z="0"/>
<ExplosionOrigin X="0" Y="-1.10000002" Z="0"/> <ExplosionOrigin X="0" Y="-1.10000002" Z="0"/>
<TimeSinceDeath>7.5223549108000043</TimeSinceDeath> <TimeSinceDeath>7.7876951610054306</TimeSinceDeath>
<ExplosionDuration>10</ExplosionDuration> <ExplosionDuration>10</ExplosionDuration>
<EndColor A="1" B="0" G="0" R="1"/> <EndColor A="1" B="0" G="0" R="1"/>
<RandomnessScalar>3</RandomnessScalar> <RandomnessScalar>3</RandomnessScalar>
<Randomness>true</Randomness> <Randomness>true</Randomness>
<ColorByDistance>true</ColorByDistance>
</c:ExplosionEffect> </c:ExplosionEffect>
<c:Model> <c:Model>
<Resource>Models/Core/UnitSphere.mesh</Resource> <Resource>Models/Core/UnitSphere.mesh</Resource>
@@ -1600,20 +1609,20 @@
<Axis X="0" Y="1" Z="0"/> <Axis X="0" Y="1" Z="0"/>
</c:RaptorCopter> </c:RaptorCopter>
<c:Transform> <c:Transform>
<Orientation X="0" Y="1345.03772" Z="0"/> <Orientation X="0" Y="1411.76697" Z="0"/>
</c:Transform> </c:Transform>
</Components> </Components>
<Children> <Children>
<Entity name="Asset"> <Entity name="Asset">
<Components> <Components>
<c:ExplosionEffect> <c:ExplosionEffect>
<ColorByDistance>true</ColorByDistance>
<Velocity X="6" Y="0.100000001" Z="0"/> <Velocity X="6" Y="0.100000001" Z="0"/>
<ExplosionOrigin X="0" Y="-10" Z="0"/> <ExplosionOrigin X="0" Y="-10" Z="0"/>
<TimeSinceDeath>0.39702717854592606</TimeSinceDeath> <TimeSinceDeath>2.6357521906414902</TimeSinceDeath>
<ExponentialAccelaration>true</ExponentialAccelaration>
<ExplosionDuration>5</ExplosionDuration> <ExplosionDuration>5</ExplosionDuration>
<Randomness>true</Randomness> <Randomness>true</Randomness>
<ColorByDistance>true</ColorByDistance>
<ExponentialAccelaration>true</ExponentialAccelaration>
</c:ExplosionEffect> </c:ExplosionEffect>
<c:Model> <c:Model>
<Resource>Models/Assault.mesh</Resource> <Resource>Models/Assault.mesh</Resource>
@@ -1791,12 +1800,12 @@
<Entity name="Weapon"> <Entity name="Weapon">
<Components> <Components>
<c:ExplosionEffect> <c:ExplosionEffect>
<ColorByDistance>true</ColorByDistance>
<Velocity X="0.800000012" Y="0.0379999988" Z="0"/> <Velocity X="0.800000012" Y="0.0379999988" Z="0"/>
<TimeSinceDeath>1.5712751414989441</TimeSinceDeath> <TimeSinceDeath>1.3579803859829696</TimeSinceDeath>
<ExplosionDuration>3.7999999523162842</ExplosionDuration> <ExplosionDuration>3.7999999523162842</ExplosionDuration>
<EndColor A="0" B="23.5294113" G="11.7647057" R="0"/> <EndColor A="0" B="23.5294113" G="11.7647057" R="0"/>
<Randomness>true</Randomness> <Randomness>true</Randomness>
<ColorByDistance>true</ColorByDistance>
</c:ExplosionEffect> </c:ExplosionEffect>
<c:Model> <c:Model>
<Resource>Models/AssaultWeaponRed.mesh</Resource> <Resource>Models/AssaultWeaponRed.mesh</Resource>
@@ -1939,8 +1948,9 @@
<Entity name="Sprite1"> <Entity name="Sprite1">
<Components> <Components>
<c:Sprite> <c:Sprite>
<DiffuseTexture>Textures/Props/FoliageDiff.png</DiffuseTexture> <Model>Models/Core/UnitQuad.mesh</Model>
<GlowMap></GlowMap> <GlowMap></GlowMap>
<DiffuseTexture>Textures/Props/FoliageDiff.png</DiffuseTexture>
</c:Sprite> </c:Sprite>
<c:Transform/> <c:Transform/>
</Components> </Components>
@@ -1949,8 +1959,9 @@
<Entity name="Sprite2"> <Entity name="Sprite2">
<Components> <Components>
<c:Sprite> <c:Sprite>
<DiffuseTexture>Textures/Props/FoliageDiff.png</DiffuseTexture> <Model>Models/Core/UnitQuad.mesh</Model>
<GlowMap></GlowMap> <GlowMap></GlowMap>
<DiffuseTexture>Textures/Props/FoliageDiff.png</DiffuseTexture>
</c:Sprite> </c:Sprite>
<c:Transform> <c:Transform>
<Position X="-0.177861199" Y="0" Z="-1.04673338"/> <Position X="-0.177861199" Y="0" Z="-1.04673338"/>
@@ -1970,8 +1981,9 @@
<Entity name="BackgroundHexagon"> <Entity name="BackgroundHexagon">
<Components> <Components>
<c:Sprite> <c:Sprite>
<DiffuseTexture>Textures/Core/UnitHexagon.png</DiffuseTexture> <Model>Models/Core/UnitQuad.mesh</Model>
<GlowMap></GlowMap> <GlowMap></GlowMap>
<DiffuseTexture>Textures/Core/UnitHexagon.png</DiffuseTexture>
<Color A="0.300000012" B="1" G="1" R="1"/> <Color A="0.300000012" B="1" G="1" R="1"/>
</c:Sprite> </c:Sprite>
<c:Transform> <c:Transform>
@@ -1988,8 +2000,9 @@
<CapturePointNumber>2</CapturePointNumber> <CapturePointNumber>2</CapturePointNumber>
</c:CapturePointHUD> </c:CapturePointHUD>
<c:Sprite> <c:Sprite>
<DiffuseTexture>Textures/Core/UnitHexagon_Rotated.png</DiffuseTexture> <Model>Models/Core/UnitQuad.mesh</Model>
<GlowMap></GlowMap> <GlowMap></GlowMap>
<DiffuseTexture>Textures/Core/UnitHexagon_Rotated.png</DiffuseTexture>
</c:Sprite> </c:Sprite>
<c:Transform> <c:Transform>
<Position X="0" Y="0" Z="0.00999999978"/> <Position X="0" Y="0" Z="0.00999999978"/>
@@ -2004,8 +2017,9 @@
<Entity name="BackgroundHexagon"> <Entity name="BackgroundHexagon">
<Components> <Components>
<c:Sprite> <c:Sprite>
<DiffuseTexture>Textures/Core/UnitHexagon.png</DiffuseTexture> <Model>Models/Core/UnitQuad.mesh</Model>
<GlowMap></GlowMap> <GlowMap></GlowMap>
<DiffuseTexture>Textures/Core/UnitHexagon.png</DiffuseTexture>
<Color A="0.300000012" B="1" G="1" R="1"/> <Color A="0.300000012" B="1" G="1" R="1"/>
</c:Sprite> </c:Sprite>
<c:Transform> <c:Transform>
@@ -2022,8 +2036,9 @@
<CapturePointNumber>3</CapturePointNumber> <CapturePointNumber>3</CapturePointNumber>
</c:CapturePointHUD> </c:CapturePointHUD>
<c:Sprite> <c:Sprite>
<DiffuseTexture>Textures/Core/UnitHexagon_Rotated.png</DiffuseTexture> <Model>Models/Core/UnitQuad.mesh</Model>
<GlowMap></GlowMap> <GlowMap></GlowMap>
<DiffuseTexture>Textures/Core/UnitHexagon_Rotated.png</DiffuseTexture>
</c:Sprite> </c:Sprite>
<c:Transform> <c:Transform>
<Position X="0" Y="0" Z="0.00999999978"/> <Position X="0" Y="0" Z="0.00999999978"/>
@@ -2038,8 +2053,9 @@
<Entity name="BackgroundHexagon"> <Entity name="BackgroundHexagon">
<Components> <Components>
<c:Sprite> <c:Sprite>
<DiffuseTexture>Textures/Core/UnitHexagon.png</DiffuseTexture> <Model>Models/Core/UnitQuad.mesh</Model>
<GlowMap></GlowMap> <GlowMap></GlowMap>
<DiffuseTexture>Textures/Core/UnitHexagon.png</DiffuseTexture>
<Color A="0.699999988" B="1" G="0.200000003" R="0"/> <Color A="0.699999988" B="1" G="0.200000003" R="0"/>
</c:Sprite> </c:Sprite>
<c:Transform> <c:Transform>
@@ -2057,8 +2073,9 @@
<CapturePointNumber>4</CapturePointNumber> <CapturePointNumber>4</CapturePointNumber>
</c:CapturePointHUD> </c:CapturePointHUD>
<c:Sprite> <c:Sprite>
<DiffuseTexture>Textures/Core/UnitHexagon_Rotated.png</DiffuseTexture> <Model>Models/Core/UnitQuad.mesh</Model>
<GlowMap></GlowMap> <GlowMap></GlowMap>
<DiffuseTexture>Textures/Core/UnitHexagon_Rotated.png</DiffuseTexture>
</c:Sprite> </c:Sprite>
<c:Transform> <c:Transform>
<Position X="0" Y="0" Z="0.00999999978"/> <Position X="0" Y="0" Z="0.00999999978"/>
@@ -2073,8 +2090,9 @@
<Entity name="BackgroundHexagon"> <Entity name="BackgroundHexagon">
<Components> <Components>
<c:Sprite> <c:Sprite>
<DiffuseTexture>Textures/Core/UnitHexagon.png</DiffuseTexture> <Model>Models/Core/UnitQuad.mesh</Model>
<GlowMap></GlowMap> <GlowMap></GlowMap>
<DiffuseTexture>Textures/Core/UnitHexagon.png</DiffuseTexture>
<Color A="0.300000012" B="1" G="1" R="1"/> <Color A="0.300000012" B="1" G="1" R="1"/>
</c:Sprite> </c:Sprite>
<c:Transform> <c:Transform>
@@ -2091,8 +2109,9 @@
<CapturePointNumber>1</CapturePointNumber> <CapturePointNumber>1</CapturePointNumber>
</c:CapturePointHUD> </c:CapturePointHUD>
<c:Sprite> <c:Sprite>
<DiffuseTexture>Textures/Core/UnitHexagon_Rotated.png</DiffuseTexture> <Model>Models/Core/UnitQuad.mesh</Model>
<GlowMap></GlowMap> <GlowMap></GlowMap>
<DiffuseTexture>Textures/Core/UnitHexagon_Rotated.png</DiffuseTexture>
</c:Sprite> </c:Sprite>
<c:Transform> <c:Transform>
<Position X="0" Y="0" Z="0.00999999978"/> <Position X="0" Y="0" Z="0.00999999978"/>
@@ -2107,8 +2126,9 @@
<Entity name="BackgroundHexagon"> <Entity name="BackgroundHexagon">
<Components> <Components>
<c:Sprite> <c:Sprite>
<DiffuseTexture>Textures/Core/UnitHexagon.png</DiffuseTexture> <Model>Models/Core/UnitQuad.mesh</Model>
<GlowMap></GlowMap> <GlowMap></GlowMap>
<DiffuseTexture>Textures/Core/UnitHexagon.png</DiffuseTexture>
<Color A="0.699999988" B="0" G="0" R="1"/> <Color A="0.699999988" B="0" G="0" R="1"/>
</c:Sprite> </c:Sprite>
<c:Transform> <c:Transform>
@@ -2124,8 +2144,9 @@
</c:Fill> </c:Fill>
<c:CapturePointHUD/> <c:CapturePointHUD/>
<c:Sprite> <c:Sprite>
<DiffuseTexture>Textures/Core/UnitHexagon_Rotated.png</DiffuseTexture> <Model>Models/Core/UnitQuad.mesh</Model>
<GlowMap></GlowMap> <GlowMap></GlowMap>
<DiffuseTexture>Textures/Core/UnitHexagon_Rotated.png</DiffuseTexture>
</c:Sprite> </c:Sprite>
<c:Transform> <c:Transform>
<Position X="0" Y="0" Z="0.00999999978"/> <Position X="0" Y="0" Z="0.00999999978"/>
@@ -2173,7 +2194,7 @@
<Entity name="MenuOirign"> <Entity name="MenuOirign">
<Components> <Components>
<c:Transform> <c:Transform>
<Position X="0" Y="0.600000024" Z="-1.86100006"/> <Position X="-6.60000038" Y="0.600000024" Z="-1.86100006"/>
</c:Transform> </c:Transform>
</Components> </Components>
<Children> <Children>
@@ -2203,8 +2224,9 @@
<Entity name="MenuBackground"> <Entity name="MenuBackground">
<Components> <Components>
<c:Sprite> <c:Sprite>
<DiffuseTexture>Textures/Core/ErrorTexture.png</DiffuseTexture> <Model>Models/Core/UnitQuad.mesh</Model>
<GlowMap></GlowMap> <GlowMap></GlowMap>
<DiffuseTexture>Textures/Core/ErrorTexture.png</DiffuseTexture>
</c:Sprite> </c:Sprite>
<c:Transform> <c:Transform>
<Position X="0" Y="0" Z="-1"/> <Position X="0" Y="0" Z="-1"/>
@@ -2215,8 +2237,9 @@
<Components> <Components>
<c:Button/> <c:Button/>
<c:Sprite> <c:Sprite>
<DiffuseTexture>Textures/Core/White.png</DiffuseTexture> <Model>Models/Core/UnitQuad.mesh</Model>
<GlowMap></GlowMap> <GlowMap></GlowMap>
<DiffuseTexture>Textures/Core/White.png</DiffuseTexture>
</c:Sprite> </c:Sprite>
<c:Transform> <c:Transform>
<Position X="0" Y="0.388422519" Z="0.0627754927"/> <Position X="0" Y="0.388422519" Z="0.0627754927"/>
@@ -2244,8 +2267,9 @@
<Components> <Components>
<c:Button/> <c:Button/>
<c:Sprite> <c:Sprite>
<DiffuseTexture>Textures/Core/White.png</DiffuseTexture> <Model>Models/Core/UnitQuad.mesh</Model>
<GlowMap></GlowMap> <GlowMap></GlowMap>
<DiffuseTexture>Textures/Core/White.png</DiffuseTexture>
</c:Sprite> </c:Sprite>
<c:Transform> <c:Transform>
<Position X="0" Y="0.214031488" Z="0.0627754927"/> <Position X="0" Y="0.214031488" Z="0.0627754927"/>
@@ -2273,8 +2297,9 @@
<Components> <Components>
<c:Button/> <c:Button/>
<c:Sprite> <c:Sprite>
<DiffuseTexture>Textures/Core/White.png</DiffuseTexture> <Model>Models/Core/UnitQuad.mesh</Model>
<GlowMap></GlowMap> <GlowMap></GlowMap>
<DiffuseTexture>Textures/Core/White.png</DiffuseTexture>
</c:Sprite> </c:Sprite>
<c:Transform> <c:Transform>
<Position X="0" Y="0.0367300175" Z="0.0627754927"/> <Position X="0" Y="0.0367300175" Z="0.0627754927"/>
@@ -2302,8 +2327,9 @@
<Components> <Components>
<c:Button/> <c:Button/>
<c:Sprite> <c:Sprite>
<DiffuseTexture>Textures/Core/White.png</DiffuseTexture> <Model>Models/Core/UnitQuad.mesh</Model>
<GlowMap></GlowMap> <GlowMap></GlowMap>
<DiffuseTexture>Textures/Core/White.png</DiffuseTexture>
</c:Sprite> </c:Sprite>
<c:Transform> <c:Transform>
<Position X="0" Y="-0.148274168" Z="0.0627754927"/> <Position X="0" Y="-0.148274168" Z="0.0627754927"/>
@@ -2331,8 +2357,9 @@
<Components> <Components>
<c:Button/> <c:Button/>
<c:Sprite> <c:Sprite>
<DiffuseTexture>Textures/Core/White.png</DiffuseTexture> <Model>Models/Core/UnitQuad.mesh</Model>
<GlowMap></GlowMap> <GlowMap></GlowMap>
<DiffuseTexture>Textures/Core/White.png</DiffuseTexture>
</c:Sprite> </c:Sprite>
<c:Transform> <c:Transform>
<Position X="0" Y="-0.335298717" Z="0.0627754927"/> <Position X="0" Y="-0.335298717" Z="0.0627754927"/>
@@ -2373,9 +2400,10 @@
<Entity name="MenuBackground"> <Entity name="MenuBackground">
<Components> <Components>
<c:Sprite> <c:Sprite>
<Model>Models/Core/UnitQuad.mesh</Model>
<GlowMap></GlowMap>
<DiffuseTexture>Textures/Core/ErrorTexture.png</DiffuseTexture> <DiffuseTexture>Textures/Core/ErrorTexture.png</DiffuseTexture>
<BlurBackground>true</BlurBackground> <BlurBackground>true</BlurBackground>
<GlowMap></GlowMap>
<Color A="0" B="1" G="1" R="1"/> <Color A="0" B="1" G="1" R="1"/>
</c:Sprite> </c:Sprite>
<c:Transform> <c:Transform>
@@ -2387,8 +2415,9 @@
<Components> <Components>
<c:Button/> <c:Button/>
<c:Sprite> <c:Sprite>
<DiffuseTexture>Textures/Core/White.png</DiffuseTexture> <Model>Models/Core/UnitQuad.mesh</Model>
<GlowMap></GlowMap> <GlowMap></GlowMap>
<DiffuseTexture>Textures/Core/White.png</DiffuseTexture>
<Visible>false</Visible> <Visible>false</Visible>
</c:Sprite> </c:Sprite>
<c:Transform> <c:Transform>
@@ -2418,8 +2447,9 @@
<Components> <Components>
<c:Button/> <c:Button/>
<c:Sprite> <c:Sprite>
<DiffuseTexture>Textures/Core/White.png</DiffuseTexture> <Model>Models/Core/UnitQuad.mesh</Model>
<GlowMap></GlowMap> <GlowMap></GlowMap>
<DiffuseTexture>Textures/Core/White.png</DiffuseTexture>
<Visible>false</Visible> <Visible>false</Visible>
</c:Sprite> </c:Sprite>
<c:Transform> <c:Transform>
@@ -2449,8 +2479,9 @@
<Components> <Components>
<c:Button/> <c:Button/>
<c:Sprite> <c:Sprite>
<DiffuseTexture>Textures/Core/White.png</DiffuseTexture> <Model>Models/Core/UnitQuad.mesh</Model>
<GlowMap></GlowMap> <GlowMap></GlowMap>
<DiffuseTexture>Textures/Core/White.png</DiffuseTexture>
</c:Sprite> </c:Sprite>
<c:Transform> <c:Transform>
<Position X="0" Y="0.0159880854" Z="0.0627754927"/> <Position X="0" Y="0.0159880854" Z="0.0627754927"/>
@@ -2478,8 +2509,9 @@
<Components> <Components>
<c:Button/> <c:Button/>
<c:Sprite> <c:Sprite>
<DiffuseTexture>Textures/Core/White.png</DiffuseTexture> <Model>Models/Core/UnitQuad.mesh</Model>
<GlowMap></GlowMap> <GlowMap></GlowMap>
<DiffuseTexture>Textures/Core/White.png</DiffuseTexture>
</c:Sprite> </c:Sprite>
<c:Transform> <c:Transform>
<Position X="0" Y="-0.164955258" Z="0.0627754927"/> <Position X="0" Y="-0.164955258" Z="0.0627754927"/>
@@ -0,0 +1,50 @@
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<Entity name="RayBlue" xmlns:c="components" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../Types/Entity.xsd">
<Components>
<c:Lifetime>
<Lifetime>0.079999998211860657</Lifetime>
</c:Lifetime>
<c:Transform/>
</Components>
<Children>
<Entity>
<Components>
<c:Sprite>
<Model>Models/Core/UnitQuad.mesh</Model>
<GlowMap></GlowMap>
<DiffuseTexture>Textures/Effects/NewRay5.png</DiffuseTexture>
<Color A="1" B="2.35294127" G="1.17647064" R="0"/>
<KeepRatio>true</KeepRatio>
<Linear>true</Linear>
</c:Sprite>
<c:Transform>
<Position X="0" Y="0" Z="-0.5"/>
<Orientation X="0" Y="-1.57099998" Z="0"/>
<Scale X="1" Y="0.0700000003" Z="0"/>
</c:Transform>
</Components>
<Children/>
</Entity>
<Entity>
<Components>
<c:Sprite>
<Model>Models/Core/UnitQuad.mesh</Model>
<GlowMap></GlowMap>
<DiffuseTexture>Textures/Effects/NewRay5.png</DiffuseTexture>
<Color A="1" B="2.35294127" G="1.17647064" R="0"/>
<KeepRatio>true</KeepRatio>
<Linear>true</Linear>
</c:Sprite>
<c:Transform>
<Position X="0" Y="0" Z="-0.5"/>
<Orientation X="0" Y="4.71218538" Z="3.14199996"/>
<Scale X="1" Y="0.0700000003" Z="0"/>
</c:Transform>
</Components>
<Children/>
</Entity>
</Children>
</Entity>
+14 -10
View File
@@ -3,25 +3,26 @@
<Components> <Components>
<c:Lifetime> <c:Lifetime>
<Lifetime>0.10000000149011612</Lifetime> <Lifetime>0.079999998211860657</Lifetime>
</c:Lifetime> </c:Lifetime>
<c:Transform> <c:Transform/>
<Scale X="0" Y="1" Z="1"/>
</c:Transform>
</Components> </Components>
<Children> <Children>
<Entity> <Entity>
<Components> <Components>
<c:Sprite> <c:Sprite>
<DiffuseTexture>Textures/Effects/Ray.png</DiffuseTexture> <Model>Models/Core/UnitQuad.mesh</Model>
<GlowMap></GlowMap> <GlowMap></GlowMap>
<Color A="0.419607848" B="3.92156863" G="0.270588249" R="0"/> <DiffuseTexture>Textures/Effects/NewRay5.png</DiffuseTexture>
<Color A="1" B="2.35294127" G="1.17647064" R="0"/>
<KeepRatio>true</KeepRatio>
<Linear>true</Linear>
</c:Sprite> </c:Sprite>
<c:Transform> <c:Transform>
<Position X="0" Y="0" Z="-0.5"/> <Position X="0" Y="0" Z="-0.5"/>
<Orientation X="0" Y="-1.57099998" Z="0"/> <Orientation X="0" Y="-1.57099998" Z="0"/>
<Scale X="1" Y="0.0260000005" Z="0"/> <Scale X="1" Y="0.0700000003" Z="0"/>
</c:Transform> </c:Transform>
</Components> </Components>
<Children/> <Children/>
@@ -29,14 +30,17 @@
<Entity> <Entity>
<Components> <Components>
<c:Sprite> <c:Sprite>
<DiffuseTexture>Textures/Effects/Ray.png</DiffuseTexture> <Model>Models/Core/UnitQuad.mesh</Model>
<GlowMap></GlowMap> <GlowMap></GlowMap>
<Color A="0.419607848" B="3.92156863" G="0.270588249" R="0"/> <DiffuseTexture>Textures/Effects/NewRay5.png</DiffuseTexture>
<Color A="1" B="2.35294127" G="1.17647064" R="0"/>
<KeepRatio>true</KeepRatio>
<Linear>true</Linear>
</c:Sprite> </c:Sprite>
<c:Transform> <c:Transform>
<Position X="0" Y="0" Z="-0.5"/> <Position X="0" Y="0" Z="-0.5"/>
<Orientation X="0" Y="4.71218538" Z="3.14199996"/> <Orientation X="0" Y="4.71218538" Z="3.14199996"/>
<Scale X="1" Y="0.0260000005" Z="0"/> <Scale X="1" Y="0.0700000003" Z="0"/>
</c:Transform> </c:Transform>
</Components> </Components>
<Children/> <Children/>
@@ -0,0 +1,50 @@
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<Entity name="RayBlue" xmlns:c="components" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../Types/Entity.xsd">
<Components>
<c:Lifetime>
<Lifetime>0.079999998211860657</Lifetime>
</c:Lifetime>
<c:Transform/>
</Components>
<Children>
<Entity>
<Components>
<c:Sprite>
<Model>Models/Core/UnitQuad.mesh</Model>
<GlowMap></GlowMap>
<DiffuseTexture>Textures/Effects/NewRay7.png</DiffuseTexture>
<Color A="1" B="2.35294127" G="1.17647064" R="0"/>
<KeepRatio>true</KeepRatio>
<Linear>true</Linear>
</c:Sprite>
<c:Transform>
<Position X="0" Y="0" Z="-0.5"/>
<Orientation X="0" Y="-1.57099998" Z="0"/>
<Scale X="1" Y="0.0700000003" Z="0"/>
</c:Transform>
</Components>
<Children/>
</Entity>
<Entity>
<Components>
<c:Sprite>
<Model>Models/Core/UnitQuad.mesh</Model>
<GlowMap></GlowMap>
<DiffuseTexture>Textures/Effects/NewRay7.png</DiffuseTexture>
<Color A="1" B="2.35294127" G="1.17647064" R="0"/>
<KeepRatio>true</KeepRatio>
<Linear>true</Linear>
</c:Sprite>
<c:Transform>
<Position X="0" Y="0" Z="-0.5"/>
<Orientation X="0" Y="4.71218538" Z="3.14199996"/>
<Scale X="1" Y="0.0700000003" Z="0"/>
</c:Transform>
</Components>
<Children/>
</Entity>
</Children>
</Entity>
@@ -0,0 +1,53 @@
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<Entity name="RayBlue" xmlns:c="components" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../Types/Entity.xsd">
<Components>
<c:Lifetime>
<Lifetime>0.08</Lifetime>
</c:Lifetime>
<c:Fade>
<FadeTime>0.08</FadeTime>
</c:Fade>
<c:Transform/>
</Components>
<Children>
<Entity>
<Components>
<c:Sprite>
<Model>Models/Core/UnitQuad.mesh</Model>
<GlowMap></GlowMap>
<DiffuseTexture>Textures/Effects/NewRay5.png</DiffuseTexture>
<Color A="1" B="2.35294127" G="1.17647064" R="0"/>
<KeepRatio>true</KeepRatio>
<Linear>true</Linear>
</c:Sprite>
<c:Transform>
<Position X="0" Y="0" Z="-0.5"/>
<Orientation X="0" Y="-1.57099998" Z="0"/>
<Scale X="1" Y="0.0250000004" Z="0"/>
</c:Transform>
</Components>
<Children/>
</Entity>
<Entity>
<Components>
<c:Sprite>
<Model>Models/Core/UnitQuad.mesh</Model>
<GlowMap></GlowMap>
<DiffuseTexture>Textures/Effects/NewRay5.png</DiffuseTexture>
<Color A="1" B="2.35294127" G="1.17647064" R="0"/>
<KeepRatio>true</KeepRatio>
<Linear>true</Linear>
</c:Sprite>
<c:Transform>
<Position X="0" Y="0" Z="-0.5"/>
<Orientation X="0" Y="4.71218538" Z="3.14199996"/>
<Scale X="1" Y="0.0250000004" Z="0"/>
</c:Transform>
</Components>
<Children/>
</Entity>
</Children>
</Entity>
+55 -48
View File
@@ -2,60 +2,17 @@
<Entity name="ScoreBoard_Main_Origin" xmlns:c="components" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../Types/Entity.xsd"> <Entity name="ScoreBoard_Main_Origin" xmlns:c="components" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../Types/Entity.xsd">
<Components> <Components>
<c:Transform/> <c:NetworkComponent/>
<c:Transform>
<Orientation X="0" Y="4.71199989" Z="0"/>
</c:Transform>
</Components> </Components>
<Children> <Children>
<Entity name="Background_Spectator">
<Components>
<c:Model>
<Resource>Models/Core/UnitCube.mesh</Resource>
</c:Model>
<c:Transform>
<Position X="0" Y="-19" Z="0"/>
<Scale X="30" Y="12" Z="1"/>
</c:Transform>
</Components>
<Children/>
</Entity>
<Entity name="ScoreBoard_Spectators">
<Components>
<c:ScoreScreen>
<Offset X="0" Y="-2" Z="0"/>
</c:ScoreScreen>
<c:Team/>
<c:Transform>
<Position X="0" Y="-15.7886772" Z="1.5"/>
</c:Transform>
</Components>
<Children/>
</Entity>
<Entity name="Background_Main">
<Components>
<c:Model>
<Resource>Models/Core/UnitCube.mesh</Resource>
</c:Model>
<c:Transform>
<Scale X="69" Y="25" Z="1"/>
</c:Transform>
</Components>
<Children/>
</Entity>
<Entity name="Spawner_1">
<Components>
<c:Spawner>
<EntityFile></EntityFile>
</c:Spawner>
<c:Transform>
<Position X="16.5" Y="0" Z="0"/>
</c:Transform>
</Components>
<Children/>
</Entity>
<Entity name="Spawner_2"> <Entity name="Spawner_2">
<Components> <Components>
<c:Spawner> <c:Spawner>
<EntityFile></EntityFile> <EntityFile>Schema/Entities/ScoreBoard_Red.xml</EntityFile>
</c:Spawner> </c:Spawner>
<c:Transform> <c:Transform>
<Position X="-16.5" Y="0" Z="0"/> <Position X="-16.5" Y="0" Z="0"/>
@@ -63,6 +20,56 @@
</Components> </Components>
<Children/> <Children/>
</Entity> </Entity>
<Entity name="Background_Main">
<Components>
<c:Model>
<GlowIntensity>0.80000019073486328</GlowIntensity>
<Resource>Models/Props/ScoreBoard/Scoreboard.mesh</Resource>
<Shadow>false</Shadow>
</c:Model>
<c:Transform>
<Orientation X="0" Y="3.13400006" Z="0"/>
</c:Transform>
</Components>
<Children/>
</Entity>
<Entity name="Background_Spectator">
<Components>
<c:Model>
<GlowIntensity>0.70000028610229492</GlowIntensity>
<Resource>Models/Props/ScoreBoard/Spectatorboard.mesh</Resource>
<Shadow>false</Shadow>
</c:Model>
<c:Transform>
<Position X="0" Y="-19" Z="0"/>
<Orientation X="0" Y="3.13300014" Z="0"/>
</c:Transform>
</Components>
<Children/>
</Entity>
<Entity name="Spawner_1">
<Components>
<c:Spawner>
<EntityFile>Schema/Entities/ScoreBoard_Blue.xml</EntityFile>
</c:Spawner>
<c:Transform>
<Position X="16.5" Y="0" Z="0"/>
</c:Transform>
</Components>
<Children/>
</Entity>
<Entity name="ScoreBoard_Spectators">
<Components>
<c:Team/>
<c:ScoreScreen>
<Offset X="0" Y="-2" Z="0"/>
</c:ScoreScreen>
<c:Transform>
<Position X="0" Y="-15.7886772" Z="1.5"/>
</c:Transform>
</Components>
<Children/>
</Entity>
</Children> </Children>
</Entity> </Entity>
@@ -0,0 +1,101 @@
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<Entity name="SidearmWeapon" xmlns:c="components" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../Types/Entity.xsd">
<Components>
<c:BlendAdditive>
<Adder>Aim</Adder>
<Receiver>WeaponBlend</Receiver>
</c:BlendAdditive>
<c:Transform/>
</Components>
<Children>
<Entity name="WeaponBlend">
<Components>
<c:BlendAdditive>
<Adder>MovementBlend2</Adder>
<Receiver>ActionBlend</Receiver>
</c:BlendAdditive>
<c:Transform/>
</Components>
<Children>
<Entity name="ActionBlend">
<Components>
<c:Blend>
<Pose1>Reload</Pose1>
<Pose2>Fire</Pose2>
</c:Blend>
<c:Transform/>
</Components>
<Children>
<Entity name="Reload">
<Components>
<c:Animation>
<AnimationName>ReloadSwitchU</AnimationName>
<Loop>false</Loop>
</c:Animation>
<c:Transform/>
</Components>
<Children/>
</Entity>
<Entity name="Fire">
<Components>
<c:Animation>
<AnimationName>ShootSecWepU</AnimationName>
<Loop>false</Loop>
</c:Animation>
<c:Transform/>
</Components>
<Children/>
</Entity>
</Children>
</Entity>
<Entity name="MovementBlend2">
<Components>
<c:Blend>
<Pose1>Idle</Pose1>
<Pose2>Run</Pose2>
</c:Blend>
<c:Transform/>
</Components>
<Children>
<Entity name="Idle">
<Components>
<c:Animation>
<AnimationName>IdleSecWepU</AnimationName>
<Additive>true</Additive>
</c:Animation>
<c:Transform/>
</Components>
<Children/>
</Entity>
<Entity name="Run">
<Components>
<c:Animation>
<AnimationName>IdleSecWepU</AnimationName>
<Additive>true</Additive>
</c:Animation>
<c:Transform/>
</Components>
<Children/>
</Entity>
</Children>
</Entity>
</Children>
</Entity>
<Entity name="Aim">
<Components>
<c:Animation>
<AnimationName>AimSecWepA</AnimationName>
<Time>0.5</Time>
<Speed>0.10000000149011612</Speed>
<Loop>false</Loop>
<Additive>true</Additive>
</c:Animation>
<c:Transform/>
</Components>
<Children/>
</Entity>
</Children>
</Entity>
@@ -0,0 +1,25 @@
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<Entity name="SidearmWeapon" xmlns:c="components" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../Types/Entity.xsd">
<Components>
<c:Model>
<Resource>Models/Weapons/Blue/SecondaryWeaponBlue.mesh</Resource>
</c:Model>
<c:Transform/>
</Components>
<Children>
<Entity name="WeaponMuzzle">
<Components>
<c:Spawner>
<EntityFile>Schema/Entities/RayBlue.xml</EntityFile>
</c:Spawner>
<c:Transform>
<Position X="0.0123999491" Y="0.102453232" Z="-0.273824364"/>
</c:Transform>
</Components>
<Children/>
</Entity>
</Children>
</Entity>
@@ -0,0 +1,440 @@
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<Entity name="StartMenu_Origin" xmlns:c="components" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../Types/Entity.xsd">
<Components>
<c:Transform/>
</Components>
<Children>
<Entity name="Background_Map_Origin">
<Components>
<c:Transform/>
</Components>
<Children>
<Entity name="Background_Spawner">
<Components>
<c:Spawner>
<EntityFile>Schema/Entities/NewMap2version5NEW.xml</EntityFile>
</c:Spawner>
<c:Transform/>
</Components>
<Children/>
</Entity>
</Children>
</Entity>
<Entity name="Spectator_Camera_Origin">
<Components>
<c:Transform/>
</Components>
<Children>
<Entity name="Rotation_Anchor">
<Components>
<c:RaptorCopter>
<Speed>0.10000000149011612</Speed>
<Axis X="0" Y="1" Z="0"/>
</c:RaptorCopter>
<c:Transform>
<Orientation X="0" Y="98.9142075" Z="0"/>
</c:Transform>
</Components>
<Children>
<Entity name="RotationAnchor_Small">
<Components>
<c:RaptorCopter>
<Speed>0.20000000298023224</Speed>
<Axis X="0" Y="-1" Z="0"/>
</c:RaptorCopter>
<c:Transform>
<Position X="0" Y="26" Z="40"/>
<Orientation X="0" Y="-114.726761" Z="0"/>
</c:Transform>
</Components>
<Children>
<Entity name="Overview_Camera_Start_Menu">
<Components>
<c:Camera/>
<c:Transform>
<Orientation X="5.78618526" Y="0" Z="0"/>
</c:Transform>
</Components>
<Children>
<Entity name="Menu_Origin">
<Components>
<c:Transform/>
</Components>
<Children>
<Entity name="Menu_Spawner">
<Components>
<c:Spawner>
<EntityFile>Schema/Entities/MainMenu.xml</EntityFile>
</c:Spawner>
<c:Transform/>
</Components>
<Children>
<Entity name="MainMenuOrigin">
<Components>
<c:Menu/>
<c:Transform>
<Position X="0" Y="0" Z="-0.5"/>
</c:Transform>
</Components>
<Children>
<Entity name="Side_Origin">
<Components>
<c:Transform>
<Position X="-0.443000019" Y="0.0400000028" Z="0"/>
<Orientation X="0" Y="0.867000043" Z="0"/>
</c:Transform>
</Components>
<Children>
<Entity name="ButtonPos_1">
<Components>
<c:Transform/>
</Components>
<Children>
<Entity name="ButtonCorner_Origin">
<Components>
<c:Transform/>
</Components>
<Children>
<Entity name="TopRight">
<Components>
<c:Sprite>
<Model>Models/Core/UnitQuad.mesh</Model>
<GlowMap></GlowMap>
<DiffuseTexture>Textures/HUD/ButtonCorner_16.png</DiffuseTexture>
</c:Sprite>
<c:Transform>
<Position X="0.0970000029" Y="0.0220000017" Z="0.00499999989"/>
<Scale X="0.00499999989" Y="0.00499999989" Z="1"/>
</c:Transform>
</Components>
<Children/>
</Entity>
<Entity name="BottomRight">
<Components>
<c:Sprite>
<Model>Models/Core/UnitQuad.mesh</Model>
<GlowMap></GlowMap>
<DiffuseTexture>Textures/HUD/ButtonCorner_16.png</DiffuseTexture>
</c:Sprite>
<c:Transform>
<Position X="0.0970000029" Y="-0.0219999999" Z="0.00499999989"/>
<Orientation X="0" Y="0" Z="4.71199989"/>
<Scale X="0.00499999989" Y="0.00499999989" Z="1"/>
</c:Transform>
</Components>
<Children/>
</Entity>
</Children>
</Entity>
<Entity name="Button_1">
<Components>
<c:Button/>
<c:Sprite>
<DepthSort>false</DepthSort>
<Model>Models/Core/UnitQuad.mesh</Model>
<GlowMap></GlowMap>
<DiffuseTexture>Textures/Core/White.png</DiffuseTexture>
<BlurBackground>true</BlurBackground>
<Color A="0.392156869" B="0" G="0" R="0"/>
</c:Sprite>
<c:InputCmdButton>
<Command>Play</Command>
<PressValue>1</PressValue>
</c:InputCmdButton>
<c:Transform>
<Scale X="0.200000003" Y="0.0500000007" Z="1"/>
</c:Transform>
</Components>
<Children/>
</Entity>
<Entity name="Text">
<Components>
<c:Text>
<Content>Play</Content>
<Resource>Fonts/DroidSans.ttf,64</Resource>
<Alignment>
<Right/>
</Alignment>
</c:Text>
<c:Transform>
<Position X="0.0920000002" Y="-0.0150000006" Z="0.00499999989"/>
<Scale X="0.0199999996" Y="0.0199999996" Z="1"/>
</c:Transform>
</Components>
<Children/>
</Entity>
</Children>
</Entity>
<Entity name="ButtonPos_3">
<Components>
<c:Transform>
<Position X="0" Y="-0.140000001" Z="0"/>
</c:Transform>
</Components>
<Children>
<Entity name="Button_3">
<Components>
<c:Button/>
<c:Sprite>
<DepthSort>false</DepthSort>
<Model>Models/Core/UnitQuad.mesh</Model>
<GlowMap></GlowMap>
<DiffuseTexture>Textures/Core/White.png</DiffuseTexture>
<BlurBackground>true</BlurBackground>
<Color A="0.392156869" B="0" G="0" R="0"/>
</c:Sprite>
<c:Transform>
<Scale X="0.200000003" Y="0.0500000007" Z="1"/>
</c:Transform>
</Components>
<Children/>
</Entity>
<Entity name="Text">
<Components>
<c:Text>
<Content>Credits</Content>
<Resource>Fonts/DroidSans.ttf,64</Resource>
<Alignment>
<Right/>
</Alignment>
</c:Text>
<c:Transform>
<Position X="0.0920000002" Y="-0.0150000006" Z="0.00499999989"/>
<Scale X="0.0199999996" Y="0.0199999996" Z="1"/>
</c:Transform>
</Components>
<Children/>
</Entity>
<Entity name="ButtonCorner_Origin">
<Components>
<c:Transform/>
</Components>
<Children>
<Entity name="BottomRight">
<Components>
<c:Sprite>
<Model>Models/Core/UnitQuad.mesh</Model>
<GlowMap></GlowMap>
<DiffuseTexture>Textures/HUD/ButtonCorner_16.png</DiffuseTexture>
</c:Sprite>
<c:Transform>
<Position X="0.0970000029" Y="-0.0219999999" Z="0.00499999989"/>
<Orientation X="0" Y="0" Z="4.71199989"/>
<Scale X="0.00499999989" Y="0.00499999989" Z="1"/>
</c:Transform>
</Components>
<Children/>
</Entity>
<Entity name="TopRight">
<Components>
<c:Sprite>
<Model>Models/Core/UnitQuad.mesh</Model>
<GlowMap></GlowMap>
<DiffuseTexture>Textures/HUD/ButtonCorner_16.png</DiffuseTexture>
</c:Sprite>
<c:Transform>
<Position X="0.0970000029" Y="0.0220000017" Z="0.00499999989"/>
<Scale X="0.00499999989" Y="0.00499999989" Z="1"/>
</c:Transform>
</Components>
<Children/>
</Entity>
</Children>
</Entity>
</Children>
</Entity>
<Entity name="ButtonPos_2">
<Components>
<c:Transform>
<Position X="0" Y="-0.0700000003" Z="0"/>
</c:Transform>
</Components>
<Children>
<Entity name="ButtonCorner_Origin">
<Components>
<c:Transform/>
</Components>
<Children>
<Entity name="TopRight">
<Components>
<c:Sprite>
<Model>Models/Core/UnitQuad.mesh</Model>
<GlowMap></GlowMap>
<DiffuseTexture>Textures/HUD/ButtonCorner_16.png</DiffuseTexture>
</c:Sprite>
<c:Transform>
<Position X="0.0970000029" Y="0.0220000017" Z="0.00499999989"/>
<Scale X="0.00499999989" Y="0.00499999989" Z="1"/>
</c:Transform>
</Components>
<Children/>
</Entity>
<Entity name="BottomRight">
<Components>
<c:Sprite>
<Model>Models/Core/UnitQuad.mesh</Model>
<GlowMap></GlowMap>
<DiffuseTexture>Textures/HUD/ButtonCorner_16.png</DiffuseTexture>
</c:Sprite>
<c:Transform>
<Position X="0.0970000029" Y="-0.0219999999" Z="0.00499999989"/>
<Orientation X="0" Y="0" Z="4.71199989"/>
<Scale X="0.00499999989" Y="0.00499999989" Z="1"/>
</c:Transform>
</Components>
<Children/>
</Entity>
</Children>
</Entity>
<Entity name="Button_2">
<Components>
<c:Button/>
<c:Sprite>
<DepthSort>false</DepthSort>
<Model>Models/Core/UnitQuad.mesh</Model>
<GlowMap></GlowMap>
<DiffuseTexture>Textures/Core/White.png</DiffuseTexture>
<BlurBackground>true</BlurBackground>
<Color A="0.392156869" B="0" G="0" R="0"/>
</c:Sprite>
<c:Transform>
<Scale X="0.200000003" Y="0.0500000007" Z="1"/>
</c:Transform>
</Components>
<Children/>
</Entity>
<Entity name="Text">
<Components>
<c:Text>
<Content>Option</Content>
<Resource>Fonts/DroidSans.ttf,64</Resource>
<Alignment>
<Right/>
</Alignment>
</c:Text>
<c:Transform>
<Position X="0.0920000076" Y="-0.0150000006" Z="0.00499999989"/>
<Scale X="0.0199999996" Y="0.0199999996" Z="1"/>
</c:Transform>
</Components>
<Children/>
</Entity>
</Children>
</Entity>
<Entity name="ButtonPos_4">
<Components>
<c:Transform>
<Position X="0" Y="-0.209999993" Z="0"/>
</c:Transform>
</Components>
<Children>
<Entity name="Button_4">
<Components>
<c:Button/>
<c:Sprite>
<DepthSort>false</DepthSort>
<Model>Models/Core/UnitQuad.mesh</Model>
<GlowMap></GlowMap>
<DiffuseTexture>Textures/Core/White.png</DiffuseTexture>
<BlurBackground>true</BlurBackground>
<Color A="0.392156869" B="0" G="0" R="0"/>
</c:Sprite>
<c:Transform>
<Scale X="0.200000003" Y="0.0500000007" Z="1"/>
</c:Transform>
</Components>
<Children/>
</Entity>
<Entity name="Text">
<Components>
<c:Text>
<Content>Quit</Content>
<Resource>Fonts/DroidSans.ttf,64</Resource>
<Alignment>
<Right/>
</Alignment>
</c:Text>
<c:Transform>
<Position X="0.0920000002" Y="-0.0150000006" Z="0.00499999989"/>
<Scale X="0.0199999996" Y="0.0199999996" Z="1"/>
</c:Transform>
</Components>
<Children/>
</Entity>
<Entity name="ButtonCorner_Origin">
<Components>
<c:Transform/>
</Components>
<Children>
<Entity name="BottomRight">
<Components>
<c:Sprite>
<Model>Models/Core/UnitQuad.mesh</Model>
<GlowMap></GlowMap>
<DiffuseTexture>Textures/HUD/ButtonCorner_16.png</DiffuseTexture>
</c:Sprite>
<c:Transform>
<Position X="0.0970000029" Y="-0.0219999999" Z="0.00499999989"/>
<Orientation X="0" Y="0" Z="4.71199989"/>
<Scale X="0.00499999989" Y="0.00499999989" Z="1"/>
</c:Transform>
</Components>
<Children/>
</Entity>
<Entity name="TopRight">
<Components>
<c:Sprite>
<Model>Models/Core/UnitQuad.mesh</Model>
<GlowMap></GlowMap>
<DiffuseTexture>Textures/HUD/ButtonCorner_16.png</DiffuseTexture>
</c:Sprite>
<c:Transform>
<Position X="0.0970000029" Y="0.0220000017" Z="0.00499999989"/>
<Scale X="0.00499999989" Y="0.00499999989" Z="1"/>
</c:Transform>
</Components>
<Children/>
</Entity>
</Children>
</Entity>
</Children>
</Entity>
</Children>
</Entity>
<Entity name="Popup_Origin">
<Components>
<c:Transform>
<Position X="-0.103822395" Y="0" Z="0"/>
</c:Transform>
</Components>
<Children>
<Entity name="PlaySpawner">
<Components>
<c:Spawner>
<EntityFile>Schema/Entities/ServerList.xml</EntityFile>
</c:Spawner>
<c:Transform/>
</Components>
<Children/>
</Entity>
</Children>
</Entity>
</Children>
</Entity>
</Children>
</Entity>
</Children>
</Entity>
</Children>
</Entity>
</Children>
</Entity>
</Children>
</Entity>
</Children>
</Entity>
</Children>
</Entity>
@@ -88,26 +88,15 @@
<BoneName>R_Arm_Weapon_Joint</BoneName> <BoneName>R_Arm_Weapon_Joint</BoneName>
</c:BoneAttachment> </c:BoneAttachment>
<c:Model> <c:Model>
<GlowIntensity>1.5</GlowIntensity>
<Resource>Models/Weapons/Blue/AssaultWeaponBlue.mesh</Resource> <Resource>Models/Weapons/Blue/AssaultWeaponBlue.mesh</Resource>
</c:Model> </c:Model>
<c:Transform> <c:Transform>
<Position X="0.120748274" Y="-0.228437141" Z="-0.181454718"/> <Position X="0.120748267" Y="-0.22843127" Z="-0.181454584"/>
<Orientation X="0.0102804415" Y="-0.00312523148" Z="0.0428143665"/> <Orientation X="0.0102799674" Y="-0.00312504289" Z="0.0428140014"/>
</c:Transform> </c:Transform>
</Components> </Components>
<Children> <Children>
<Entity name="WeaponMuzzle">
<Components>
<c:Spawner>
<EntityFile>Schema/Entities/RayBlue.xml</EntityFile>
</c:Spawner>
<c:Transform>
<Position X="0.00800000038" Y="0.0920000076" Z="-0.416000009"/>
<Orientation X="6.2760005" Y="0.00500000035" Z="0.00600000005"/>
</c:Transform>
</Components>
<Children/>
</Entity>
<Entity name="ReloadSpawner"> <Entity name="ReloadSpawner">
<Components> <Components>
<c:Spawner> <c:Spawner>
@@ -117,6 +106,38 @@
</Components> </Components>
<Children/> <Children/>
</Entity> </Entity>
<Entity name="Muzzle">
<Components>
<c:Transform>
<Position X="0.00728808995" Y="0.0896582007" Z="-0.643795013"/>
<Orientation X="6.27600002" Y="0.00499999989" Z="0.00600000005"/>
</c:Transform>
</Components>
<Children>
<Entity name="WeaponMuzzleFlash">
<Components>
<c:Spawner>
<EntityFile>Schema/Entities/MuzzleFlashBlue.xml</EntityFile>
</c:Spawner>
<c:Transform>
<Position X="0.000221854658" Y="-0.000376355601" Z="0"/>
</c:Transform>
</Components>
<Children/>
</Entity>
<Entity name="WeaponMuzzleRay">
<Components>
<c:Spawner>
<EntityFile>Schema/Entities/RayAssaultBlue.xml</EntityFile>
</c:Spawner>
<c:Transform>
<Position X="0.00123506912" Y="-0.00209517847" Z="-0.681198895"/>
</c:Transform>
</Components>
<Children/>
</Entity>
</Children>
</Entity>
</Children> </Children>
</Entity> </Entity>
<Entity name="AmmoHUD"> <Entity name="AmmoHUD">
@@ -127,17 +148,18 @@
<InheritScale>true</InheritScale> <InheritScale>true</InheritScale>
</c:BoneAttachment> </c:BoneAttachment>
<c:Transform> <c:Transform>
<Position X="0.0540266186" Y="-0.0954354703" Z="-0.255526125"/> <Position X="0.0540265888" Y="-0.0954296291" Z="-0.255526036"/>
<Orientation X="0.000778362213" Y="0.0774229616" Z="0.00124316185"/> <Orientation X="0.000777846028" Y="0.0774231106" Z="0.00124278688"/>
<Scale X="0.25000003" Y="0.250000238" Z="0.500000417"/> <Scale X="0.25000006" Y="0.250000149" Z="0.500000238"/>
</c:Transform> </c:Transform>
</Components> </Components>
<Children> <Children>
<Entity name="Background"> <Entity name="Background">
<Components> <Components>
<c:Sprite> <c:Sprite>
<DiffuseTexture>Textures/Core/UnitHexagon.png</DiffuseTexture> <Model>Models/Core/UnitQuad.mesh</Model>
<GlowMap></GlowMap> <GlowMap></GlowMap>
<DiffuseTexture>Textures/Core/UnitHexagon.png</DiffuseTexture>
<Color A="0.588235319" B="0" G="0" R="0"/> <Color A="0.588235319" B="0" G="0" R="0"/>
</c:Sprite> </c:Sprite>
<c:Transform> <c:Transform>
@@ -191,6 +213,17 @@
</Entity> </Entity>
</Children> </Children>
</Entity> </Entity>
<Entity name="FriendlyBoostAttachment">
<Components>
<c:Spawner>
<EntityFile>Schema/Entities/FriendlyBoostBlueHUD.xml</EntityFile>
</c:Spawner>
<c:Transform>
<Position X="-0.000110394583" Y="-0.0891034827" Z="6.07890324e-05"/>
</c:Transform>
</Components>
<Children/>
</Entity>
</Children> </Children>
</Entity> </Entity>
</Children> </Children>
@@ -27,7 +27,7 @@
<Entity name="Shield"> <Entity name="Shield">
<Components> <Components>
<c:Animation> <c:Animation>
<AnimationName>ActivateDeactivateShieldF</AnimationName> <AnimationName>ActivateShieldF</AnimationName>
<Loop>false</Loop> <Loop>false</Loop>
</c:Animation> </c:Animation>
<c:Transform/> <c:Transform/>
@@ -146,60 +146,26 @@
</Entity> </Entity>
</Children> </Children>
</Entity> </Entity>
<Entity name="ViewModel">
<Components>
<c:BoneAttachment>
<BoneName>R_Arm_Weapon_Joint</BoneName>
</c:BoneAttachment>
<c:Model>
<Resource>Models/Weapons/Blue/DefenderWeaponBlue.mesh</Resource>
</c:Model>
<c:Transform>
<Position X="0.120748043" Y="-0.228436321" Z="-0.151475549"/>
<Orientation X="0.0104044285" Y="-0.00268185162" Z="0.0428444184"/>
</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="ReloadSpawner">
<Components>
<c:Spawner>
<EntityFile>Schema/Entities/ReloadEffectView.xml</EntityFile>
</c:Spawner>
<c:Transform/>
</Components>
<Children/>
</Entity>
</Children>
</Entity>
<Entity name="AmmoHUD"> <Entity name="AmmoHUD">
<Components> <Components>
<c:BoneAttachment> <c:BoneAttachment>
<BoneName>R_Ammo_Joint</BoneName> <BoneName>R_Ammo_Joint</BoneName>
<ScaleOffset X="0.600000024" Y="0.600000024" Z="0.600000024"/>
<InheritScale>true</InheritScale> <InheritScale>true</InheritScale>
</c:BoneAttachment> </c:BoneAttachment>
<c:Transform> <c:Transform>
<Position X="0.0540262833" Y="-0.0954347998" Z="-0.225546911"/> <Position X="0.0540262833" Y="-0.0954347998" Z="-0.225546911"/>
<Orientation X="0.000683821447" Y="0.0774240941" Z="-1.56960988"/> <Orientation X="0.00124507793" Y="0.077417776" Z="0.00737103401"/>
<Scale X="0.500000179" Y="0.500000179" Z="0.499999911"/> <Scale X="0.300000012" Y="0.300000042" Z="0.299999952"/>
</c:Transform> </c:Transform>
</Components> </Components>
<Children> <Children>
<Entity name="Background"> <Entity name="Background">
<Components> <Components>
<c:Sprite> <c:Sprite>
<DiffuseTexture>Textures/Core/UnitHexagon.png</DiffuseTexture> <Model>Models/Core/UnitQuad.mesh</Model>
<GlowMap></GlowMap> <GlowMap></GlowMap>
<DiffuseTexture>Textures/Core/UnitHexagon.png</DiffuseTexture>
<Color A="0.588235319" B="0" G="0" R="0"/> <Color A="0.588235319" B="0" G="0" R="0"/>
</c:Sprite> </c:Sprite>
<c:Transform> <c:Transform>
@@ -253,6 +219,81 @@
</Entity> </Entity>
</Children> </Children>
</Entity> </Entity>
<Entity name="FriendlyBoostAttachment">
<Components>
<c:Spawner>
<EntityFile>Schema/Entities/FriendlyBoostBlueHUD.xml</EntityFile>
</c:Spawner>
<c:Transform>
<Position X="-0.0762779638" Y="-0.04478902" Z="6.07890324e-05"/>
</c:Transform>
</Components>
<Children/>
</Entity>
</Children>
</Entity>
<Entity name="WeaponOrigin">
<Components>
<c:Transform/>
</Components>
<Children>
<Entity name="ViewModel">
<Components>
<c:BoneAttachment>
<BoneName>R_Arm_Weapon_Joint</BoneName>
</c:BoneAttachment>
<c:Model>
<Resource>Models/Weapons/Blue/DefenderWeaponBlue.mesh</Resource>
</c:Model>
<c:Transform>
<Position X="0.120748043" Y="-0.228436321" Z="-0.151475549"/>
<Orientation X="0.0102800643" Y="-0.00312487315" Z="0.0428144038"/>
</c:Transform>
</Components>
<Children>
<Entity name="ReloadSpawner">
<Components>
<c:Spawner>
<EntityFile>Schema/Entities/ReloadEffectView.xml</EntityFile>
</c:Spawner>
<c:Transform/>
</Components>
<Children/>
</Entity>
</Children>
</Entity>
<Entity name="Muzzle">
<Components>
<c:Transform>
<Position X="0.137428522" Y="-0.145251781" Z="-0.590083241"/>
</c:Transform>
</Components>
<Children>
<Entity name="WeaponMuzzleRay">
<Components>
<c:Spawner>
<EntityFile>Schema/Entities/RayDefenderBlue.xml</EntityFile>
</c:Spawner>
<c:Transform>
<Position X="0.0180841181" Y="0.0252480619" Z="-0.663679719"/>
</c:Transform>
</Components>
<Children/>
</Entity>
<Entity name="WeaponMuzzleFlash">
<Components>
<c:Spawner>
<EntityFile>Schema/Entities/MuzzleFlashBlue.xml</EntityFile>
</c:Spawner>
<c:Transform>
<Position X="0.0201820824" Y="0.0212024488" Z="-0.0305794869"/>
<Scale X="1.5" Y="1.5" Z="1"/>
</c:Transform>
</Components>
<Children/>
</Entity>
</Children>
</Entity>
</Children> </Children>
</Entity> </Entity>
</Children> </Children>
@@ -12,7 +12,7 @@
<Entity name="WeaponMuzzle"> <Entity name="WeaponMuzzle">
<Components> <Components>
<c:Spawner> <c:Spawner>
<EntityFile>Schema/Entities/RayBlue.xml</EntityFile> <EntityFile>Schema/Entities/DefenderRayBlue.xml</EntityFile>
</c:Spawner> </c:Spawner>
<c:Transform> <c:Transform>
<Position X="0.000284185546" Y="0.0318552479" Z="-0.193328083"/> <Position X="0.000284185546" Y="0.0318552479" Z="-0.193328083"/>
@@ -0,0 +1,239 @@
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<Entity name="Hands" xmlns:c="components" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../Types/Entity.xsd">
<Components>
<c:BlendAdditive>
<Adder>MovementBlend</Adder>
<Receiver>ActionBlend</Receiver>
</c:BlendAdditive>
<c:Model>
<Resource>Models/Characters/Assault/FirstPersonAssaultBlue.mesh</Resource>
</c:Model>
<c:Transform/>
</Components>
<Children>
<Entity name="MovementBlend">
<Components>
<c:Blend>
<Pose1>Idle</Pose1>
<Pose2>Run</Pose2>
<Weight>1</Weight>
<SubTreeRoot>true</SubTreeRoot>
</c:Blend>
<c:Transform/>
</Components>
<Children>
<Entity name="Idle">
<Components>
<c:Animation>
<AnimationName>IdleSecF</AnimationName>
<Play>true</Play>
<Additive>true</Additive>
</c:Animation>
<c:Transform/>
</Components>
<Children/>
</Entity>
<Entity name="Run">
<Components>
<c:Animation>
<AnimationName>RunSecF</AnimationName>
<Play>true</Play>
<Additive>true</Additive>
</c:Animation>
<c:Transform/>
</Components>
<Children/>
</Entity>
</Children>
</Entity>
<Entity name="ActionBlend">
<Components>
<c:Blend>
<Pose1>Fire</Pose1>
<Pose2>Reload</Pose2>
<Weight>0</Weight>
</c:Blend>
<c:Transform/>
</Components>
<Children>
<Entity name="Fire">
<Components>
<c:Animation>
<AnimationName>ShootSecF</AnimationName>
<Loop>false</Loop>
</c:Animation>
<c:Transform/>
</Components>
<Children/>
</Entity>
<Entity name="Reload">
<Components>
<c:Animation>
<AnimationName>ReloadSwitchSecF</AnimationName>
<Loop>false</Loop>
</c:Animation>
<c:Transform/>
</Components>
<Children/>
</Entity>
</Children>
</Entity>
<Entity name="AmmunitionHUD">
<Components>
<c:BoneAttachment>
<BoneName>R_Ammo_Joint</BoneName>
</c:BoneAttachment>
<c:Transform>
<Position X="0.109812237" Y="-0.0832184851" Z="-0.403451651"/>
<Orientation X="0.000778344634" Y="0.077423349" Z="0.0012426693"/>
<Scale X="0.400000006" Y="0.400000006" Z="0.400000006"/>
</c:Transform>
</Components>
<Children>
<Entity name="AmmunitionHUDBackground">
<Components>
<c:Sprite>
<Model>Models/Core/UnitQuad.mesh</Model>
<GlowMap></GlowMap>
<DiffuseTexture>Textures/Core/UnitHexagon.png</DiffuseTexture>
<Color A="0.588235319" B="0" G="0" R="0"/>
</c:Sprite>
<c:Transform>
<Position X="0" Y="0" Z="-0.00300000003"/>
<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>16</Content>
<Resource>Fonts/DroidSans.ttf,64</Resource>
<Color A="1" B="3.92156863" G="1.17647064" R="0"/>
</c:Text>
<c:TextFieldReader>
<ParentEntityName></ParentEntityName>
<ComponentType>SidearmWeapon</ComponentType>
<Field>MagazineAmmo</Field>
</c:TextFieldReader>
<c:Transform>
<Position X="0" Y="-0.00600000005" Z="0"/>
<Scale X="0.0599999987" Y="0.0599999987" Z="0.0599999987"/>
</c:Transform>
</Components>
<Children/>
</Entity>
<Entity name="Infinity!">
<Components>
<c:Text>
<Content>8</Content>
<Resource>Fonts/DroidSans.ttf,64</Resource>
<Color A="1" B="3.92156863" G="1.17647064" R="0"/>
</c:Text>
<c:Transform>
<Position X="0.0150000006" Y="-0.029000001" Z="0"/>
<Orientation X="0" Y="0" Z="1.5710001"/>
<Scale X="0.0399999991" Y="0.0399999991" Z="0.0399999991"/>
</c:Transform>
</Components>
<Children/>
</Entity>
</Children>
</Entity>
<Entity name="FriendlyAmmoAttachment">
<Components>
<c:Spawner>
<EntityFile>Schema/Entities/FriendlyAmmoHUD.xml</EntityFile>
</c:Spawner>
<c:Transform>
<Position X="-0.000110394583" Y="-0.0891034827" Z="6.07890324e-05"/>
</c:Transform>
</Components>
<Children/>
</Entity>
<Entity name="AmmoShareEffectSpawner">
<Components>
<c:Spawner>
<EntityFile>Schema/Entities/AmmoShareEffectView.xml</EntityFile>
</c:Spawner>
<c:Transform/>
</Components>
<Children/>
</Entity>
</Children>
</Entity>
<Entity name="WeaponOrigin">
<Components>
<c:Transform/>
</Components>
<Children>
<Entity name="ViewModel">
<Components>
<c:BoneAttachment>
<BoneName>R_Arm_Weapon_Joint</BoneName>
</c:BoneAttachment>
<c:Model>
<GlowIntensity>1.2999999523162842</GlowIntensity>
<Resource>Models/Weapons/Blue/SecondaryWeaponBlue.mesh</Resource>
</c:Model>
<c:Transform>
<Position X="0.185786247" Y="-0.21622014" Z="-0.412707269"/>
<Orientation X="0.0102805095" Y="-0.00312478957" Z="0.0428138711"/>
</c:Transform>
</Components>
<Children>
<Entity name="ReloadSpawner">
<Components>
<c:Spawner>
<EntityFile>Schema/Entities/WeaponSidearmReloadEffectView.xml</EntityFile>
</c:Spawner>
<c:Transform/>
</Components>
<Children/>
</Entity>
</Children>
</Entity>
<Entity name="Muzzle">
<Components>
<c:Transform>
<Position X="0.197295129" Y="-0.116625182" Z="-0.709192753"/>
</c:Transform>
</Components>
<Children>
<Entity name="WeaponMuzzleRay">
<Components>
<c:Spawner>
<EntityFile>Schema/Entities/RaySideArmBlue.xml</EntityFile>
</c:Spawner>
<c:Transform>
<Position X="0" Y="0" Z="-0.155046776"/>
</c:Transform>
</Components>
<Children/>
</Entity>
<Entity name="WeaponMuzzleFlash">
<Components>
<c:Spawner>
<EntityFile>Schema/Entities/MuzzleFlashSideArmBlue.xml</EntityFile>
</c:Spawner>
<c:Transform>
<Scale X="0.5" Y="0.5" Z="0.5"/>
</c:Transform>
</Components>
<Children/>
</Entity>
</Children>
</Entity>
</Children>
</Entity>
</Children>
</Entity>
@@ -0,0 +1,239 @@
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<Entity name="Hands" xmlns:c="components" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../Types/Entity.xsd">
<Components>
<c:BlendAdditive>
<Adder>MovementBlend</Adder>
<Receiver>ActionBlend</Receiver>
</c:BlendAdditive>
<c:Model>
<Resource>Models/Characters/Defender/FirstPersonDefenderBlue.mesh</Resource>
</c:Model>
<c:Transform/>
</Components>
<Children>
<Entity name="MovementBlend">
<Components>
<c:Blend>
<Pose1>Idle</Pose1>
<Pose2>Run</Pose2>
<Weight>1</Weight>
<SubTreeRoot>true</SubTreeRoot>
</c:Blend>
<c:Transform/>
</Components>
<Children>
<Entity name="Idle">
<Components>
<c:Animation>
<AnimationName>IdleSecF</AnimationName>
<Play>true</Play>
<Additive>true</Additive>
</c:Animation>
<c:Transform/>
</Components>
<Children/>
</Entity>
<Entity name="Run">
<Components>
<c:Animation>
<AnimationName>RunSecF</AnimationName>
<Play>true</Play>
<Additive>true</Additive>
</c:Animation>
<c:Transform/>
</Components>
<Children/>
</Entity>
</Children>
</Entity>
<Entity name="ActionBlend">
<Components>
<c:Blend>
<Pose1>Fire</Pose1>
<Pose2>Reload</Pose2>
<Weight>0</Weight>
</c:Blend>
<c:Transform/>
</Components>
<Children>
<Entity name="Fire">
<Components>
<c:Animation>
<AnimationName>ShootSecF</AnimationName>
<Loop>false</Loop>
</c:Animation>
<c:Transform/>
</Components>
<Children/>
</Entity>
<Entity name="Reload">
<Components>
<c:Animation>
<AnimationName>ReloadSwitchSecF</AnimationName>
<Loop>false</Loop>
</c:Animation>
<c:Transform/>
</Components>
<Children/>
</Entity>
</Children>
</Entity>
<Entity name="AmmunitionHUD">
<Components>
<c:BoneAttachment>
<BoneName>R_Ammo_Joint</BoneName>
</c:BoneAttachment>
<c:Transform>
<Position X="0.109812573" Y="-0.0832190216" Z="-0.373473197"/>
<Orientation X="0.00118373742" Y="0.077411525" Z="0.00458352407"/>
<Scale X="0.400000006" Y="0.400000006" Z="0.400000006"/>
</c:Transform>
</Components>
<Children>
<Entity name="AmmunitionHUDBackground">
<Components>
<c:Sprite>
<Model>Models/Core/UnitQuad.mesh</Model>
<GlowMap></GlowMap>
<DiffuseTexture>Textures/Core/UnitHexagon.png</DiffuseTexture>
<Color A="0.588235319" B="0" G="0" R="0"/>
</c:Sprite>
<c:Transform>
<Position X="0" Y="0" Z="-0.00300000003"/>
<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>16</Content>
<Resource>Fonts/DroidSans.ttf,64</Resource>
<Color A="1" B="3.92156863" G="1.17647064" R="0"/>
</c:Text>
<c:TextFieldReader>
<ParentEntityName></ParentEntityName>
<ComponentType>SidearmWeapon</ComponentType>
<Field>MagazineAmmo</Field>
</c:TextFieldReader>
<c:Transform>
<Position X="0" Y="-0.00600000005" Z="0"/>
<Scale X="0.0599999987" Y="0.0599999987" Z="0.0599999987"/>
</c:Transform>
</Components>
<Children/>
</Entity>
<Entity name="Infinity!">
<Components>
<c:Text>
<Content>8</Content>
<Resource>Fonts/DroidSans.ttf,64</Resource>
<Color A="1" B="3.92156863" G="1.17647064" R="0"/>
</c:Text>
<c:Transform>
<Position X="0.0150000006" Y="-0.029000001" Z="0"/>
<Orientation X="0" Y="0" Z="1.5710001"/>
<Scale X="0.0399999991" Y="0.0399999991" Z="0.0399999991"/>
</c:Transform>
</Components>
<Children/>
</Entity>
</Children>
</Entity>
<Entity name="FriendlyAmmoAttachment">
<Components>
<c:Spawner>
<EntityFile>Schema/Entities/FriendlyAmmoHUD.xml</EntityFile>
</c:Spawner>
<c:Transform>
<Position X="-0.000110394583" Y="-0.0891034827" Z="6.07890324e-05"/>
</c:Transform>
</Components>
<Children/>
</Entity>
<Entity name="AmmoShareEffectSpawner">
<Components>
<c:Spawner>
<EntityFile>Schema/Entities/AmmoShareEffectView.xml</EntityFile>
</c:Spawner>
<c:Transform/>
</Components>
<Children/>
</Entity>
</Children>
</Entity>
<Entity name="WeaponOrigin">
<Components>
<c:Transform/>
</Components>
<Children>
<Entity name="ViewModel">
<Components>
<c:BoneAttachment>
<BoneName>R_Arm_Weapon_Joint</BoneName>
</c:BoneAttachment>
<c:Model>
<GlowIntensity>1.5</GlowIntensity>
<Resource>Models/Weapons/Blue/SecondaryWeaponBlue.mesh</Resource>
</c:Model>
<c:Transform>
<Position X="0.18578662" Y="-0.216220587" Z="-0.382728696"/>
<Orientation X="0.010279973" Y="-0.00312555139" Z="0.0428142436"/>
</c:Transform>
</Components>
<Children>
<Entity name="ReloadSpawner">
<Components>
<c:Spawner>
<EntityFile>Schema/Entities/WeaponSidearmReloadEffectView.xml</EntityFile>
</c:Spawner>
<c:Transform/>
</Components>
<Children/>
</Entity>
</Children>
</Entity>
<Entity name="Muzzle">
<Components>
<c:Transform>
<Position X="0.196999997" Y="-0.116999999" Z="-0.668634355"/>
</c:Transform>
</Components>
<Children>
<Entity name="WeaponMuzzleFlash">
<Components>
<c:Spawner>
<EntityFile>Schema/Entities/MuzzleFlashSideArmBlue.xml</EntityFile>
</c:Spawner>
<c:Transform>
<Scale X="0.5" Y="0.5" Z="0.5"/>
</c:Transform>
</Components>
<Children/>
</Entity>
<Entity name="WeaponMuzzleRay">
<Components>
<c:Spawner>
<EntityFile>Schema/Entities/RaySideArmBlue.xml</EntityFile>
</c:Spawner>
<c:Transform>
<Position X="0" Y="0" Z="-0.155000001"/>
</c:Transform>
</Components>
<Children/>
</Entity>
</Children>
</Entity>
</Children>
</Entity>
</Children>
</Entity>
@@ -0,0 +1,53 @@
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<Entity name="ReloadEffect" xmlns:c="components" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../Types/Entity.xsd">
<Components>
<c:Transform/>
</Components>
<Children>
<Entity name="In">
<Components>
<c:ExplosionEffect>
<ExplosionOrigin X="0" Y="0.112999998" Z="-0.430000007"/>
<TimeSinceDeath>0.5</TimeSinceDeath>
<Delay>0.5</Delay>
<Speed>-1</Speed>
<ExplosionDuration>0.5</ExplosionDuration>
<EndColor A="0" B="3.92156863" G="0.545098066" R="1"/>
<Randomness>true</Randomness>
</c:ExplosionEffect>
<c:Model>
<GlowIntensity>1.5</GlowIntensity>
<Resource>Models/Weapons/Blue/SecondaryWeaponBlue.mesh</Resource>
<Shadow>false</Shadow>
<Transparent>true</Transparent>
</c:Model>
<c:Transform/>
</Components>
<Children/>
</Entity>
<Entity name="Out">
<Components>
<c:Lifetime>
<Lifetime>0.5</Lifetime>
</c:Lifetime>
<c:ExplosionEffect>
<ExplosionOrigin X="0" Y="0.113000005" Z="-0.430000007"/>
<ExplosionDuration>0.5</ExplosionDuration>
<EndColor A="0" B="3.92156863" G="0.545098066" R="1"/>
<Randomness>true</Randomness>
</c:ExplosionEffect>
<c:Model>
<GlowIntensity>1.5</GlowIntensity>
<Resource>Models/Weapons/Blue/SecondaryWeaponBlue.mesh</Resource>
<Shadow>false</Shadow>
<Transparent>true</Transparent>
</c:Model>
<c:Transform/>
</Components>
<Children/>
</Entity>
</Children>
</Entity>
+3
View File
@@ -71,6 +71,9 @@
<xs:element ref="c:NetworkComponent" minOccurs="0"/> <xs:element ref="c:NetworkComponent" minOccurs="0"/>
<xs:element ref="c:ServerIdentity" minOccurs="0"/> <xs:element ref="c:ServerIdentity" minOccurs="0"/>
<xs:element ref="c:ServerList" minOccurs="0"/> <xs:element ref="c:ServerList" minOccurs="0"/>
<xs:element ref="c:EndScreen" minOccurs="0"/>
<xs:element ref="c:Unpickable" minOccurs="0"/>
<xs:element ref="c:Fade" minOccurs="0"/>
<xs:element ref="c:ConfigBtnResolution" minOccurs="0"/> <xs:element ref="c:ConfigBtnResolution" minOccurs="0"/>
<xs:element ref="c:ConfigBtnFloat" minOccurs="0"/> <xs:element ref="c:ConfigBtnFloat" minOccurs="0"/>
</xs:all> </xs:all>
+2 -3
View File
@@ -29,10 +29,9 @@ void main()
vec4 color_result = Color * diffuseTexel; vec4 color_result = Color * diffuseTexel;
float pos = ((P * vec4(Input.Position, 1)).y + 1.0)/2.0; float pos = ((P * vec4(Input.Position, 1)).y + 1.0)/2.0;
float fillResult = clamp(floor(pos/FillPercentage), 0, 1);
if(pos <= FillPercentage) { color_result = FillColor*diffuseTexel.a*(1 - fillResult) + color_result*fillResult;
color_result = FillColor*diffuseTexel.a;
}
sceneColor = vec4(color_result.xyz, clamp(color_result.a, 0, 1)); sceneColor = vec4(color_result.xyz, clamp(color_result.a, 0, 1));
+13 -1
View File
@@ -27,7 +27,7 @@ void EntityWrapper::AttachComponent(const char* componentName)
EntityWrapper EntityWrapper::Parent() EntityWrapper EntityWrapper::Parent()
{ {
if (this->World == nullptr || this->ID == EntityID_Invalid) { if (!Valid()) {
return EntityWrapper::Invalid; return EntityWrapper::Invalid;
} else { } else {
return EntityWrapper(this->World, this->World->GetParent(this->ID)); return EntityWrapper(this->World, this->World->GetParent(this->ID));
@@ -36,6 +36,10 @@ EntityWrapper EntityWrapper::Parent()
EntityWrapper EntityWrapper::FirstParentByName(const std::string& parentEntityName) EntityWrapper EntityWrapper::FirstParentByName(const std::string& parentEntityName)
{ {
if (!Valid()) {
return EntityWrapper::Invalid;
}
EntityWrapper entity = *this; EntityWrapper entity = *this;
while (entity.Parent().Valid()) { while (entity.Parent().Valid()) {
entity = entity.Parent(); entity = entity.Parent();
@@ -48,6 +52,10 @@ EntityWrapper EntityWrapper::FirstParentByName(const std::string& parentEntityNa
EntityWrapper EntityWrapper::FirstChildByName(const std::string& name) EntityWrapper EntityWrapper::FirstChildByName(const std::string& name)
{ {
if (!Valid()) {
return EntityWrapper::Invalid;
}
return firstChildByNameRecursive(name, this->ID); return firstChildByNameRecursive(name, this->ID);
} }
@@ -78,6 +86,10 @@ EntityWrapper EntityWrapper::FirstLevelChildByName(const std::string& name)
EntityWrapper EntityWrapper::FirstParentWithComponent(const std::string& componentType) EntityWrapper EntityWrapper::FirstParentWithComponent(const std::string& componentType)
{ {
if (!Valid()) {
return EntityWrapper::Invalid;
}
EntityWrapper entity = *this; EntityWrapper entity = *this;
while (entity.Parent().Valid()) { while (entity.Parent().Valid()) {
entity = entity.Parent(); entity = entity.Parent();
+19
View File
@@ -173,6 +173,9 @@ void Client::parseMessageType(Packet& packet)
case MessageType::RemoveWorld: case MessageType::RemoveWorld:
parseRemoveWorld(packet); parseRemoveWorld(packet);
break; break;
case MessageType::KD:
parseKDEvent(packet);
break;
default: default:
break; break;
} }
@@ -357,6 +360,22 @@ void Client::parseRemoveWorld(Packet & packet)
m_EventBroker->Publish(e); m_EventBroker->Publish(e);
} }
void Client::parseKDEvent(Packet & packet)
{
Events::KillDeath e;
e.Casualty = packet.ReadPrimitive<int>();
e.CasualtyClass = packet.ReadPrimitive<int>();
e.CasualtyName = packet.ReadString();
e.CasualtyTeam = packet.ReadPrimitive<int>();
e.Killer = packet.ReadPrimitive<int>();
e.KillerClass = packet.ReadPrimitive<int>();
e.KillerName = packet.ReadString();
e.KillerTeam = packet.ReadPrimitive<int>();
m_EventBroker->Publish(e);
}
void Client::updateFields(Packet& packet, const ComponentInfo& componentInfo, const EntityID& entityID) void Client::updateFields(Packet& packet, const ComponentInfo& componentInfo, const EntityID& entityID)
{ {
for (auto field : componentInfo.FieldsInOrder) { for (auto field : componentInfo.FieldsInOrder) {
+39
View File
@@ -560,9 +560,48 @@ bool Server::OnAmmoPickup(const Events::AmmoPickup & e)
bool Server::OnPlayerDeath(const Events::PlayerDeath& e) bool Server::OnPlayerDeath(const Events::PlayerDeath& e)
{ {
Events::KillDeath eKD; Events::KillDeath eKD;
auto entity = e;
eKD.Casualty = getPlayerIDFromEntityID(e.Player.ID); eKD.Casualty = getPlayerIDFromEntityID(e.Player.ID);
eKD.Killer = getPlayerIDFromEntityID(e.Killer.ID); eKD.Killer = getPlayerIDFromEntityID(e.Killer.ID);
eKD.CasualtyName = m_ConnectedPlayers.at(getPlayerIDFromEntityID(e.Player.ID)).Name;
eKD.KillerName = m_ConnectedPlayers.at(getPlayerIDFromEntityID(e.Killer.ID)).Name;
if(entity.Player.HasComponent("Team")) {
eKD.CasualtyTeam = (const int&)entity.Player["Team"]["Team"];
}
if (entity.Killer.HasComponent("Team")) {
eKD.KillerTeam = (const int&)entity.Killer["Team"]["Team"];
}
if(entity.Player.HasComponent("DashAbility")) {
eKD.CasualtyClass = 1;
} else if (entity.Player.HasComponent("ShieldAbility")) {
eKD.CasualtyClass = 2;
} else if (entity.Player.HasComponent("SprintAbility")) {
eKD.CasualtyClass = 3;
}
if (entity.Killer.HasComponent("DashAbility")) {
eKD.KillerClass = 1;
} else if (entity.Killer.HasComponent("ShieldAbility")) {
eKD.KillerClass = 2;
} else if (entity.Killer.HasComponent("SprintAbility")) {
eKD.KillerClass = 3;
}
m_EventBroker->Publish(eKD); m_EventBroker->Publish(eKD);
Packet kdPacket(MessageType::KD);
kdPacket.WritePrimitive(eKD.Casualty);
kdPacket.WritePrimitive(eKD.CasualtyClass);
kdPacket.WriteString(eKD.CasualtyName);
kdPacket.WritePrimitive(eKD.CasualtyTeam);
kdPacket.WritePrimitive(eKD.Killer);
kdPacket.WritePrimitive(eKD.KillerClass);
kdPacket.WriteString(eKD.KillerName);
kdPacket.WritePrimitive(eKD.KillerTeam);
reliableBroadcast(kdPacket);
return false; return false;
} }
+12 -6
View File
@@ -76,18 +76,18 @@ void AnimationSystem::UpdateAnimations(double dt)
Field<std::string> res = modelEntity["Model"]["Resource"]; Field<std::string> res = modelEntity["Model"]["Resource"];
model = ResourceManager::Load<::Model, true>(res); model = ResourceManager::Load<::Model, true>(res);
} catch (const std::exception&) { } catch (const std::exception&) {
return; continue;
} }
Skeleton* skeleton = model->m_RawModel->m_Skeleton; Skeleton* skeleton = model->m_RawModel->m_Skeleton;
if (skeleton == nullptr) { if (skeleton == nullptr) {
return; continue;
} }
const Skeleton::Animation* animation = skeleton->GetAnimation(animationC["AnimationName"]); const Skeleton::Animation* animation = skeleton->GetAnimation(animationC["AnimationName"]);
if (animation == nullptr) { if (animation == nullptr) {
continue;; continue;
} }
double animationSpeed = (const double&)animationC["Speed"]; double animationSpeed = (const double&)animationC["Speed"];
@@ -128,8 +128,8 @@ void AnimationSystem::UpdateAnimations(double dt)
void AnimationSystem::UpdateWeights(double dt) void AnimationSystem::UpdateWeights(double dt)
{ {
for (auto it = m_AutoBlendQueues.begin(); it != m_AutoBlendQueues.end(); ) { for (auto it = m_AutoBlendQueues.begin(); it != m_AutoBlendQueues.end(); ) {
/* LOG_INFO("%s", it->first.Name().c_str()); //LOG_INFO("%s", it->first.Name().c_str());
it->second.PrintQueue();*/ //it->second.PrintQueue();
if(it->second.HasActiveBlendJob()) { if(it->second.HasActiveBlendJob()) {
AutoBlendQueue::AutoBlendJob& blendJob = it->second.GetActiveBlendJob(); AutoBlendQueue::AutoBlendJob& blendJob = it->second.GetActiveBlendJob();
@@ -159,12 +159,13 @@ void AnimationSystem::UpdateWeights(double dt)
bool AnimationSystem::OnAutoAnimationBlend(Events::AutoAnimationBlend& e) bool AnimationSystem::OnAutoAnimationBlend(Events::AutoAnimationBlend& e)
{ {
if (!e.RootNode.Valid()) { if (!e.RootNode.Valid()) {
LOG_ERROR("%s, RootNode invalid %s", e.NodeName, e.RootNode.Name().c_str());
return false; return false;
} }
if (!e.RootNode.HasComponent("Model")) { if (!e.RootNode.HasComponent("Model")) {
LOG_ERROR("%s, RootNode has no model %s", e.NodeName, e.RootNode.Name().c_str());
return false; return false;
} }
@@ -172,11 +173,13 @@ bool AnimationSystem::OnAutoAnimationBlend(Events::AutoAnimationBlend& e)
try { try {
model = ResourceManager::Load<::Model, true>((std::string)e.RootNode["Model"]["Resource"]); model = ResourceManager::Load<::Model, true>((std::string)e.RootNode["Model"]["Resource"]);
} catch (const std::exception&) { } catch (const std::exception&) {
LOG_ERROR("%s, RootNode model not finished loading %s", e.NodeName, e.RootNode.Name().c_str());
return false; return false;
} }
Skeleton* skeleton = model->m_RawModel->m_Skeleton; Skeleton* skeleton = model->m_RawModel->m_Skeleton;
if (skeleton == nullptr) { if (skeleton == nullptr) {
LOG_ERROR("%s, RootNode skeleton invalid %s", e.NodeName, e.RootNode.Name().c_str());
return false; return false;
} }
@@ -184,6 +187,7 @@ bool AnimationSystem::OnAutoAnimationBlend(Events::AutoAnimationBlend& e)
if (skeleton->BlendTrees.find(e.RootNode) != skeleton->BlendTrees.end()) { if (skeleton->BlendTrees.find(e.RootNode) != skeleton->BlendTrees.end()) {
blendTree = skeleton->BlendTrees.at(e.RootNode); blendTree = skeleton->BlendTrees.at(e.RootNode);
} else { } else {
LOG_ERROR("%s, No blendtree was found invalid %s", e.NodeName, e.RootNode.Name().c_str());
return false; return false;
} }
@@ -194,6 +198,7 @@ bool AnimationSystem::OnAutoAnimationBlend(Events::AutoAnimationBlend& e)
subTreeRoot = blendTree->GetSubTreeRoot(e.NodeName); subTreeRoot = blendTree->GetSubTreeRoot(e.NodeName);
if (!subTreeRoot.Valid()) { if (!subTreeRoot.Valid()) {
LOG_ERROR("%s, subTreeRoot invalid", e.NodeName);
return false; return false;
} }
@@ -238,6 +243,7 @@ bool AnimationSystem::OnAutoAnimationBlend(Events::AutoAnimationBlend& e)
subTreeRoot = entity; subTreeRoot = entity;
if (!subTreeRoot.Valid()) { if (!subTreeRoot.Valid()) {
LOG_ERROR("%s, subTreeRoot invalid", e.NodeName);
return false; return false;
} }
+1 -2
View File
@@ -414,7 +414,6 @@ void DrawFinalPass::ClearBuffer()
GLERROR("END"); GLERROR("END");
} }
void DrawFinalPass::OnWindowResize() void DrawFinalPass::OnWindowResize()
{ {
if (m_FinalPassFrameBuffer->MultiSampling() != (bool)m_MSAA) { if (m_FinalPassFrameBuffer->MultiSampling() != (bool)m_MSAA) {
@@ -1336,7 +1335,7 @@ void DrawFinalPass::DrawToDepthStencilBuffer(std::list<std::shared_ptr<RenderJob
} else { } else {
frameBones = modelJob->Skeleton->GetTPose(); frameBones = modelJob->Skeleton->GetTPose();
} }
glUniformMatrix4fv(glGetUniformLocation(shaderHandle, "Bones"), frameBones.size(), GL_FALSE, glm::value_ptr(frameBones[0])); glUniformMatrix4fv(glGetUniformLocation(shaderSkinnedHandle, "Bones"), frameBones.size(), GL_FALSE, glm::value_ptr(frameBones[0]));
} else { } else {
if (lastShader != m_FillDepthStencilBufferProgram->GetHandle()) { if (lastShader != m_FillDepthStencilBufferProgram->GetHandle()) {
+5
View File
@@ -76,6 +76,11 @@ void PickingPass::Draw(RenderScene& scene)
auto modelJob = std::dynamic_pointer_cast<ModelJob>(job); auto modelJob = std::dynamic_pointer_cast<ModelJob>(job);
if (modelJob) { if (modelJob) {
if(modelJob->NotPickable) {
continue;
}
int pickColor[2] = { m_ColorCounter[0], m_ColorCounter[1] }; int pickColor[2] = { m_ColorCounter[0], m_ColorCounter[1] };
PickingInfo pickInfo; PickingInfo pickInfo;
+12 -3
View File
@@ -67,10 +67,19 @@ void Renderer::InitializeWindow()
// Create a window // Create a window
GLFWmonitor* monitor = nullptr; GLFWmonitor* monitor = nullptr;
if (m_Fullscreen) { if (m_Fullscreen) {
monitor = glfwGetPrimaryMonitor(); //monitor = glfwGetPrimaryMonitor();
//const GLFWvidmode* mode = glfwGetVideoMode(monitor);
//glfwWindowHint(GLFW_RED_BITS, mode->redBits);
//glfwWindowHint(GLFW_GREEN_BITS, mode->greenBits);
//glfwWindowHint(GLFW_BLUE_BITS, mode->blueBits);
//glfwWindowHint(GLFW_REFRESH_RATE, mode->refreshRate);
glfwWindowHint(GLFW_DECORATED, false);
glfwWindowHint(GLFW_AUTO_ICONIFY, false);
} }
//glfwWindowHint(GLFW_SAMPLES, 8);
m_Window = glfwCreateWindow(m_Resolution.Width, m_Resolution.Height, "daydream", monitor, nullptr); //glfwWindowHint(GLFW_SAMPLES, 8);
m_Window = glfwCreateWindow(m_Resolution.Width, m_Resolution.Height + 1, "daydream", monitor, nullptr);
if (!m_Window) { if (!m_Window) {
LOG_ERROR("GLFW: Failed to create window"); LOG_ERROR("GLFW: Failed to create window");
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
+4
View File
@@ -40,6 +40,8 @@
#include "Game/Systems/MainMenuSystem.h" #include "Game/Systems/MainMenuSystem.h"
#include "Game/Systems/ServerListSystem.h" #include "Game/Systems/ServerListSystem.h"
#include "Game/Systems/StartSystem.h" #include "Game/Systems/StartSystem.h"
#include "Game/Systems/EndScreenSystem.h"
#include "Game/Systems/FadeSystem.h"
#include "Rendering/TextureSprite.h" #include "Rendering/TextureSprite.h"
@@ -158,6 +160,8 @@ Game::Game(int argc, char* argv[])
m_SystemPipeline->AddSystem<SpectatorCameraSystem>(updateOrderLevel); m_SystemPipeline->AddSystem<SpectatorCameraSystem>(updateOrderLevel);
m_SystemPipeline->AddSystem<ServerListSystem>(updateOrderLevel, m_Renderer); m_SystemPipeline->AddSystem<ServerListSystem>(updateOrderLevel, m_Renderer);
m_SystemPipeline->AddSystem<StartSystem>(updateOrderLevel); m_SystemPipeline->AddSystem<StartSystem>(updateOrderLevel);
m_SystemPipeline->AddSystem<EndScreenSystem>(updateOrderLevel);
m_SystemPipeline->AddSystem<FadeSystem>(updateOrderLevel);
// Populate Octree with collidables // Populate Octree with collidables
++updateOrderLevel; ++updateOrderLevel;
m_SystemPipeline->AddSystem<FillOctreeSystem>(updateOrderLevel, m_OctreeCollision, "Collidable"); m_SystemPipeline->AddSystem<FillOctreeSystem>(updateOrderLevel, m_OctreeCollision, "Collidable");
@@ -14,6 +14,7 @@ bool MultiplayerSnapshotFilter::FilterComponent(EntityWrapper entity, SharedComp
|| component.Info.Name == "Physics" || component.Info.Name == "Physics"
|| component.Info.Name == "AssaultWeapon" || component.Info.Name == "AssaultWeapon"
|| component.Info.Name == "DefenderWeapon" || component.Info.Name == "DefenderWeapon"
|| component.Info.Name == "SidearmWeapon"
|| component.Info.Name == "Animation" || component.Info.Name == "Animation"
|| component.Info.Name == "Blend" || component.Info.Name == "Blend"
|| component.Info.Name == "BlendAdditive" || component.Info.Name == "BlendAdditive"
+10 -7
View File
@@ -23,26 +23,29 @@ void AbilityCooldownHUDSystem::Update(double dt)
if (!abilityEntity.Valid()) { if (!abilityEntity.Valid()) {
//If we dont have a shield ability, we return, since we cannot do anything. //If we dont have a shield ability, we return, since we cannot do anything.
if (entity.HasComponent("Sprite")) {
(Field<std::string>)entity["Sprite"]["DiffuseTexture"] = "Textures/Test/aM4ME4GR.png";
}
return; return;
} else { } else {
//If we have a shield ability, we set the right icon //If we have a shield ability, we set the right icon
abilityName = "ShieldAbility"; abilityName = "ShieldAbility";
if (entity.HasComponent("Sprite")) { if (entity.HasComponent("Sprite")) {
entity["Sprite"]["DiffuseTexture"] = "Textures\\Icons\\Abilities\\SheildDots-01.png"; (Field<std::string>)entity["Sprite"]["DiffuseTexture"] = "Textures/Icons/Abilities/Long/SheildDots-01.png";
} }
} }
} else { } else {
//If we do have a sprint ability, we change the icon //If we do have a sprint ability, we change the icon
abilityName = "SprintAbility"; abilityName = "SprintAbility";
if (entity.HasComponent("Sprite")) { if (entity.HasComponent("Sprite")) {
entity["Sprite"]["DiffuseTexture"] = "Textures\\Icons\\Abilities\\Dash-01.png"; (Field<std::string>)entity["Sprite"]["DiffuseTexture"] = "Textures/Icons/Abilities/Long/Dash-01.png";
} }
} }
} else { } else {
//If we have a dash ability, we set the icon to the correct one. //If we have a dash ability, we set the icon to the correct one.
abilityName = "DashAbility"; abilityName = "DashAbility";
if (entity.HasComponent("Sprite")) { if (entity.HasComponent("Sprite")) {
entity["Sprite"]["DiffuseTexture"] = "Textures\\Icons\\Abilities\\Superman-01.png"; (Field<std::string>)entity["Sprite"]["DiffuseTexture"] = "Textures/Icons/Abilities/Long/Superman-01.png";
} }
} }
@@ -57,23 +60,23 @@ void AbilityCooldownHUDSystem::Update(double dt)
if (cooldownTextEntity.Valid()) { if (cooldownTextEntity.Valid()) {
if (cooldownTextEntity.HasComponent("Text")) { if (cooldownTextEntity.HasComponent("Text")) {
cooldownTextEntity["Text"]["Content"] = std::to_string(currentAbilityCD).substr(0, 3); (Field<std::string>)cooldownTextEntity["Text"]["Content"] = std::to_string(currentAbilityCD).substr(0, 3);
} }
} }
} }
if (abilityName == "ShieldAbility") { if (abilityName == "ShieldAbility") {
maxAbilityCD = 0.0; maxAbilityCD = 1.0;
currentAbilityCD = 1 - (bool)abilityEntity[abilityName]["Active"]; currentAbilityCD = 1 - (bool)abilityEntity[abilityName]["Active"];
} }
if (abilityName == "SprintAbility") { if (abilityName == "SprintAbility") {
maxAbilityCD = 0.0; maxAbilityCD = 1.0;
currentAbilityCD = 1 - (bool)abilityEntity[abilityName]["Active"]; currentAbilityCD = 1 - (bool)abilityEntity[abilityName]["Active"];
} }
if (entity.HasComponent("Fill")) { if (entity.HasComponent("Fill")) {
entity["Fill"]["Percentage"] = currentAbilityCD/maxAbilityCD; (Field<double>)entity["Fill"]["Percentage"] = currentAbilityCD/maxAbilityCD;
} }
+14 -12
View File
@@ -5,36 +5,38 @@ void BoostIconsHUDSystem::UpdateComponent(EntityWrapper& entity, ComponentWrappe
EntityWrapper assaultEntity = entity.FirstChildByName("Assault"); EntityWrapper assaultEntity = entity.FirstChildByName("Assault");
EntityWrapper defenderEntity = entity.FirstChildByName("Defender"); EntityWrapper defenderEntity = entity.FirstChildByName("Defender");
EntityWrapper sniperEntity = entity.FirstChildByName("Sniper"); EntityWrapper sniperEntity = entity.FirstChildByName("Sniper");
EntityWrapper player = entity.FirstParentWithComponent("Player");
if(assaultEntity.Valid()) { if(assaultEntity.Valid()) {
if (assaultEntity.HasComponent("Fill")) { if (assaultEntity.HasComponent("Fill")) {
EntityWrapper parentWithAssaultBoost = assaultEntity.FirstParentWithComponent("BoostAssault"); EntityWrapper assaultBoost = player.FirstChildByName("BoostAssault");
if (parentWithAssaultBoost.Valid()) { if (assaultBoost.Valid()) {
assaultEntity["Fill"]["Percentage"] = 1.0; (Field<double>)assaultEntity["Fill"]["Percentage"] = 1.0;
} else { } else {
assaultEntity["Fill"]["Percentage"] = 0.0; (Field<double>)assaultEntity["Fill"]["Percentage"] = 0.0;
} }
} }
} }
if (defenderEntity.Valid()) { if (defenderEntity.Valid()) {
if (defenderEntity.HasComponent("Fill")) { if (defenderEntity.HasComponent("Fill")) {
EntityWrapper parentWithAssaultBoost = defenderEntity.FirstParentWithComponent("BoostDefender"); EntityWrapper defenderBoost = player.FirstChildByName("BoostDefender");
if (parentWithAssaultBoost.Valid()) { if (defenderBoost.Valid()) {
defenderEntity["Fill"]["Percentage"] = 1.0; (Field<double>)defenderEntity["Fill"]["Percentage"] = 1.0;
} else { } else {
defenderEntity["Fill"]["Percentage"] = 0.0; (Field<double>)defenderEntity["Fill"]["Percentage"] = 0.0;
} }
} }
} }
if (sniperEntity.Valid()) { if (sniperEntity.Valid()) {
if (sniperEntity.HasComponent("Fill")) { if (sniperEntity.HasComponent("Fill")) {
EntityWrapper parentWithAssaultBoost = sniperEntity.FirstParentWithComponent("BoostSniper"); EntityWrapper sniperBoost = player.FirstChildByName("BoostSniper");
if (parentWithAssaultBoost.Valid()) { if (sniperBoost.Valid()) {
sniperEntity["Fill"]["Percentage"] = 1.0; (Field<double>)sniperEntity["Fill"]["Percentage"] = 1.0;
} else { } else {
sniperEntity["Fill"]["Percentage"] = 0.0; (Field<double>)sniperEntity["Fill"]["Percentage"] = 0.0;
} }
} }
} }
+73 -28
View File
@@ -8,21 +8,16 @@ BoostSystem::BoostSystem(SystemParams params)
bool BoostSystem::OnPlayerDamage(Events::PlayerDamage& e) bool BoostSystem::OnPlayerDamage(Events::PlayerDamage& e)
{ {
if (e.Victim.ID == e.Inflictor.ID) {
if (e.Victim == e.Inflictor) {
return false; return false;
} }
if (!e.Victim.Valid() || !LocalPlayer.Valid()) { if (!e.Victim.Valid() || !e.Inflictor.Valid()) {
return false; return false;
} }
if (e.Victim != LocalPlayer && !e.Victim.IsChildOf(LocalPlayer)) {
return false;
}
if (!e.Inflictor.Valid()) {
return false;
}
//if its not friendly fire, return //if its not friendly fire, return
if ((int)m_World->GetComponent(e.Inflictor.ID, "Team")["Team"] != (int)m_World->GetComponent(e.Victim.ID, "Team")["Team"]) { if ((int)m_World->GetComponent(e.Inflictor.ID, "Team")["Team"] != (int)m_World->GetComponent(e.Victim.ID, "Team")["Team"]) {
@@ -35,19 +30,27 @@ bool BoostSystem::OnPlayerDamage(Events::PlayerDamage& e)
return false; return false;
} }
//get the XML file, example: "Schema/Entities/BoostclassName.xml" if (className == "SidearmWeapon") { // give ammo
std::string classXML = "Schema/Entities/" + className + ".xml"; giveAmmo(e.Inflictor, e.Victim);
} else { //give boost
if (!IsServer) {
return false;
}
//get the XML file, example: "Schema/Entities/BoostclassName.xml"
std::string classXML = "Schema/Entities/" + className + ".xml";
//check if player already has a child with the component, if so delete that child //check if player already has a child with the component, if so delete that child
auto playerBoostAssaultEntity = e.Victim.FirstChildByName(className); auto playerBoostAssaultEntity = e.Victim.FirstChildByName(className);
if (playerBoostAssaultEntity.Valid()) { if (playerBoostAssaultEntity.Valid()) {
m_World->DeleteEntity(playerBoostAssaultEntity.ID); m_World->DeleteEntity(playerBoostAssaultEntity.ID);
}
//load boost XML file, set it entity parented with the victim player
auto entityFile = ResourceManager::Load<EntityFile>(classXML);
EntityWrapper boostAssaultEntity = entityFile->MergeInto(m_World);
m_World->SetName(boostAssaultEntity.ID, className);
m_World->SetParent(boostAssaultEntity.ID, e.Victim.ID);
} }
//load boost XML file, set it entity parented with the victim player
auto entityFile = ResourceManager::Load<EntityFile>(classXML);
EntityWrapper boostAssaultEntity = entityFile->MergeInto(m_World);
m_World->SetName(boostAssaultEntity.ID, className);
m_World->SetParent(boostAssaultEntity.ID, e.Victim.ID);
return true; return true;
} }
@@ -55,14 +58,56 @@ bool BoostSystem::OnPlayerDamage(Events::PlayerDamage& e)
std::string BoostSystem::DetermineClass(EntityWrapper inflictorPlayer) std::string BoostSystem::DetermineClass(EntityWrapper inflictorPlayer)
{ {
//determine the class based on what component the inflictor-player has //determine the class based on what component the inflictor-player has
if (m_World->HasComponent(inflictorPlayer.ID, "DashAbility")) { if (inflictorPlayer.HasComponent("Player")) {
return "BoostAssault"; if ((std::string)inflictorPlayer["Player"]["CurrentWeapon"] == "AssaultWeapon") {
} return "BoostAssault";
if (m_World->HasComponent(inflictorPlayer.ID, "ShieldAbility")) { }
return "BoostDefender"; if ((std::string)inflictorPlayer["Player"]["CurrentWeapon"] == "DefenderWeapon") {
} return "BoostDefender";
if (m_World->HasComponent(inflictorPlayer.ID, "SprintAbility")) { }
return "BoostSniper"; if ((std::string)inflictorPlayer["Player"]["CurrentWeapon"] == "SniperWeapon") {
return "BoostSniper";
}
if ((std::string)inflictorPlayer["Player"]["CurrentWeapon"] == "SidearmWeapon") {
return "SidearmWeapon";
}
} }
return ""; return "";
} }
void BoostSystem::giveAmmo(EntityWrapper giver, EntityWrapper receiver)
{
if (receiver.HasComponent("AssaultWeapon")) {
int magazineSize = receiver["AssaultWeapon"]["MagazineSize"];
Field<int> magazineAmmo = receiver["AssaultWeapon"]["MagazineAmmo"];
int prevMagazineAmmo = receiver["AssaultWeapon"]["MagazineAmmo"];
int maxAmmo = receiver["AssaultWeapon"]["MaxAmmo"];
Field<int> ammo = receiver["AssaultWeapon"]["Ammo"];
int givenAmmo = 20;
magazineAmmo = glm::clamp(magazineAmmo + givenAmmo, 0, magazineSize);
if (magazineAmmo > prevMagazineAmmo) {
givenAmmo = prevMagazineAmmo + givenAmmo - magazineSize;
}
if (givenAmmo > 0) {
ammo = glm::clamp(ammo + givenAmmo, 0, maxAmmo);
}
} else if (receiver.HasComponent("DefenderWeapon")) {
int magazineSize = receiver["DefenderWeapon"]["MagazineSize"];
Field<int> magazineAmmo = receiver["DefenderWeapon"]["MagazineAmmo"];
int prevMagazineAmmo = receiver["DefenderWeapon"]["MagazineAmmo"];
int maxAmmo = receiver["DefenderWeapon"]["MaxAmmo"];
Field<int> ammo = receiver["DefenderWeapon"]["Ammo"];
int givenAmmo = 3;
magazineAmmo = glm::clamp(magazineAmmo + givenAmmo, 0, magazineSize);
if (magazineAmmo > prevMagazineAmmo) {
givenAmmo = prevMagazineAmmo + givenAmmo - magazineSize;
}
if (givenAmmo > 0) {
ammo = glm::clamp(ammo + givenAmmo, 0, maxAmmo);
}
}
}
+74
View File
@@ -0,0 +1,74 @@
#include "Systems/EndScreenSystem.h"
EndScreenSystem::EndScreenSystem(SystemParams params)
: System(params)
, ImpureSystem()
{
EVENT_SUBSCRIBE_MEMBER(m_EWin, &EndScreenSystem::OnWin);
}
void EndScreenSystem::Update(double dt)
{
}
bool EndScreenSystem::OnWin(const Events::Win& e)
{
auto endScreenCameras = m_World->GetComponents("EndScreen");
if(endScreenCameras == nullptr) {
LOG_ERROR("Win event recieved but no Endscreen camera is present.");
return 1;
}
for(auto& camera : *endScreenCameras) {
EntityWrapper entity = EntityWrapper(m_World, camera.EntityID);
Events::SetCamera event;
event.CameraEntity = entity;
m_EventBroker->Publish(event);
EntityWrapper redSprite = entity.FirstChildByName("SpriteRed");
EntityWrapper blueSprite = entity.FirstChildByName("SpriteBlue");
EntityWrapper redText = entity.FirstChildByName("TextRed");
EntityWrapper blueText = entity.FirstChildByName("TextBlue");
if (e.TeamThatWon == 2) {
//Red team won
if(redSprite.HasComponent("Sprite"))
(Field<bool>)redSprite["Sprite"]["Visible"] = true;
if (redText.HasComponent("Text"))
(Field<bool>)redText["Text"]["Visible"] = true;
if (blueSprite.HasComponent("Sprite"))
(Field<bool>)blueSprite["Sprite"]["Visible"] = false;
if (blueText.HasComponent("Text"))
(Field<bool>)blueText["Text"]["Visible"] = false;
}else if (e.TeamThatWon == 3) {
//Blue team won
if (redSprite.HasComponent("Sprite"))
(Field<bool>)redSprite["Sprite"]["Visible"] = false;
if (redText.HasComponent("Text"))
(Field<bool>)redText["Text"]["Visible"] = false;
if (blueSprite.HasComponent("Sprite"))
(Field<bool>)blueSprite["Sprite"]["Visible"] = true;
if (blueText.HasComponent("Text"))
(Field<bool>)blueText["Text"]["Visible"] = true;
} else {
//No team won?
if (redSprite.HasComponent("Sprite"))
(Field<bool>)redSprite["Sprite"]["Visible"] = false;
if (blueSprite.HasComponent("Sprite"))
(Field<bool>)blueSprite["Sprite"]["Visible"] = false;
if (redText.HasComponent("Text"))
(Field<bool>)redText["Text"]["Visible"] = false;
if (blueText.HasComponent("Text"))
(Field<bool>)blueText["Text"]["Visible"] = false;
}
}
return 1;
}
+49
View File
@@ -0,0 +1,49 @@
#include "Systems/FadeSystem.h"
void FadeSystem::UpdateComponent(EntityWrapper& entity, ComponentWrapper& cFade, double dt)
{
double dTime = dt;
if (dTime == 0.0) {
return;
}
if (!entity.Valid()) {
return;
}
if ((bool)cFade["Out"]) {
dTime *= -1;
}
if((bool)cFade["Reverse"]) {
dTime *= 2;
}
double fadeTime = cFade["FadeTime"];
Field<double> currentTime = cFade["Time"];
currentTime += dTime;
if(currentTime > fadeTime) {
currentTime = 0.0;
if ((bool)cFade["Reverse"]) {
(Field<bool>)cFade["Out"] = !(bool)cFade["Out"];
currentTime = fadeTime;
}
}
if(currentTime < 0.0) {
currentTime = fadeTime;
if ((bool)cFade["Reverse"]) {
(Field<bool>)cFade["Out"] = !(bool)cFade["Out"];
currentTime = 0.0;
}
}
double ratio = currentTime/fadeTime;
if(entity.HasComponent("Model")){
((Field<glm::vec4>)entity["Model"]["Color"]).w(ratio);
}
if (entity.HasComponent("Sprite")) {
((Field<glm::vec4>)entity["Sprite"]["Color"]).w(ratio);
}
}
+4 -4
View File
@@ -22,8 +22,8 @@ void HealthHUDSystem::Update(double dt)
if (entityIDParent.HasComponent("Health")) { if (entityIDParent.HasComponent("Health")) {
if (entity.HasComponent("Text")) { if (entity.HasComponent("Text")) {
Field<double> health = entityIDParent["Health"]["Health"]; double health = (const double&)entityIDParent["Health"]["Health"];
Field<double> maxHealth = entityIDParent["Health"]["Health"]; double maxHealth = (const double&)entityIDParent["Health"]["MaxHealth"];
std::string s = ""; std::string s = "";
s = s + std::to_string((int)health); s = s + std::to_string((int)health);
s = s + "/"; s = s + "/";
@@ -34,8 +34,8 @@ void HealthHUDSystem::Update(double dt)
} }
if(entity.HasComponent("Fill")) { if(entity.HasComponent("Fill")) {
Field<double> health = entityIDParent["Health"]["Health"]; double health = (const double&)entityIDParent["Health"]["Health"];
Field<double> maxHealth = entityIDParent["Health"]["Health"]; double maxHealth = (const double&)entityIDParent["Health"]["MaxHealth"];
float healthPercentage = health/maxHealth; float healthPercentage = health/maxHealth;
entity["Fill"]["Color"] = glm::vec4(1.0 - healthPercentage, 0.f, healthPercentage, glm::vec4(entity["Fill"]["Color"]).a); entity["Fill"]["Color"] = glm::vec4(1.0 - healthPercentage, 0.f, healthPercentage, glm::vec4(entity["Fill"]["Color"]).a);
entity["Fill"]["Percentage"] = (double)healthPercentage; entity["Fill"]["Percentage"] = (double)healthPercentage;
+1 -1
View File
@@ -58,7 +58,7 @@ bool HealthSystem::OnPlayerHealthPickup(Events::PlayerHealthPickup& e)
ComponentWrapper cHealth = e.Player["Health"]; ComponentWrapper cHealth = e.Player["Health"];
Field<double> health = cHealth["Health"]; Field<double> health = cHealth["Health"];
health += e.HealthAmount; health += e.HealthAmount;
health = std::min((double)health, (double)cHealth["MaxHealth"]); health = std::min(*health, (const double&)cHealth["MaxHealth"]);
return true; return true;
} }
+33 -26
View File
@@ -7,6 +7,10 @@ void KillFeedSystem::Update(double dt)
return; return;
} }
for (auto it = m_DeathQueue.begin(); it != m_DeathQueue.end(); it++) {
(*it).TimeToLive -= dt;
}
for (auto& killFeedComponent : *killFeeds) { for (auto& killFeedComponent : *killFeeds) {
EntityWrapper entity = EntityWrapper(m_World, killFeedComponent.EntityID); EntityWrapper entity = EntityWrapper(m_World, killFeedComponent.EntityID);
@@ -17,9 +21,6 @@ void KillFeedSystem::Update(double dt)
} }
} }
int feedIndex = 1; int feedIndex = 1;
for (auto it = m_DeathQueue.begin(); it != m_DeathQueue.end(); ) { for (auto it = m_DeathQueue.begin(); it != m_DeathQueue.end(); ) {
bool remove = false; bool remove = false;
@@ -27,14 +28,19 @@ void KillFeedSystem::Update(double dt)
EntityWrapper child = entity.FirstChildByName("KillFeed" + std::to_string(feedIndex)); EntityWrapper child = entity.FirstChildByName("KillFeed" + std::to_string(feedIndex));
if (child.HasComponent("Text")) { if (child.HasComponent("Text")) {
(Field<std::string>)child["Text"]["Content"] = (*it).Content;
(Field<glm::vec4>)child["Text"]["Color"] = (*it).Color;
(*it).TimeToLive -= dt; std::string str = "";
//Add killer to the start of string.
str = (*it).KillerColor + "\\" + std::to_string((*it).KillerClass) + "\\CFFFFFF" + " " + (*it).KillerName + " ";
//Add Weapon to middle of string.
str += "\\" + std::to_string((*it).KillerClass+3) + " ";
//Add victim to the end of string
str += (*it).VictimColor + "\\" + std::to_string((*it).VictimClass) + "\\CFFFFFF" + " " + (*it).VictimName;
(Field<std::string>)child["Text"]["Content"] = str;
if ((*it).TimeToLive <= 0.f) { if ((*it).TimeToLive <= 0.f) {
(Field<std::string>)child["Text"]["Content"] = ""; (Field<std::string>)child["Text"]["Content"] = "";
(Field<glm::vec4>)child["Text"]["Color"] = (*it).Color;
remove = true; remove = true;
} }
} }
@@ -52,29 +58,30 @@ void KillFeedSystem::Update(double dt)
} }
} }
bool KillFeedSystem::OnPlayerDeath(Events::PlayerDeath& e) bool KillFeedSystem::OnPlayerKillDeath(Events::KillDeath& e)
{ {
KillFeedInfo kfInfo; KillFeedInfo info;
if (e.Player.HasComponent("Team")) { info.KillerName = e.KillerName;
int red = e.Player["Team"].Enum("Team", "Red"); info.KillerID = e.Killer;
int blue = e.Player["Team"].Enum("Team", "Blue"); info.KillerClass = e.KillerClass;
info.KillerTeam = e.KillerTeam;
if ((int)e.Player["Team"]["Team"] == red) { if(info.KillerTeam == 2){
kfInfo.Content = "Blue Player killed Red Player"; info.KillerColor = m_BlueColor;
kfInfo.Color = glm::vec4(0.f, 0.2f, 1.f, 0.8f); } else if (info.KillerTeam == 3) {
m_DeathQueue.push_back(kfInfo); info.KillerColor = m_RedColor;
} else if ((int)e.Player["Team"]["Team"] == blue) {
kfInfo.Content = "Red Player killed blue Player";
kfInfo.Color = glm::vec4(1.f, 0.f, 0.f, 0.8f);
m_DeathQueue.push_back(kfInfo);
}
} }
info.VictimName = e.CasualtyName;
if(m_DeathQueue.size() > 3) { info.VictimID = e.Casualty;
m_DeathQueue.pop_front(); info.VictimClass = e.CasualtyClass;
info.VictimTeam = e.CasualtyTeam;
if (info.VictimTeam == 2) {
info.VictimColor = m_BlueColor;
} else if (info.VictimTeam == 3) {
info.VictimColor = m_RedColor;
} }
return true; m_DeathQueue.push_back(info);
return 1;
} }
+3 -3
View File
@@ -45,7 +45,7 @@ void PickupSpawnSystem::Update(double dt)
m_PickupAtMaximum.erase(it); m_PickupAtMaximum.erase(it);
break; break;
} }
if ((double)it->player["Health"]["Health"] < (double)it->player["Health"]["MaxHealth"]) { if ((const double&)it->player["Health"]["Health"] < (const double&)it->player["Health"]["MaxHealth"]) {
DoPickup(it->player, it->trigger); DoPickup(it->player, it->trigger);
m_PickupAtMaximum.erase(it); m_PickupAtMaximum.erase(it);
break; break;
@@ -59,7 +59,7 @@ bool PickupSpawnSystem::OnTriggerTouch(Events::TriggerTouch& e)
return false; return false;
} }
//if at maxhealth, save the trigger-touch to a vector since standing inside it will not re-trigger the trigger //if at maxhealth, save the trigger-touch to a vector since standing inside it will not re-trigger the trigger
if ((double)e.Entity["Health"]["Health"] >= (double)e.Entity["Health"]["MaxHealth"]) { if ((const double&)e.Entity["Health"]["Health"] >= (const double&)e.Entity["Health"]["MaxHealth"]) {
m_PickupAtMaximum.push_back({ e.Entity, e.Trigger }); m_PickupAtMaximum.push_back({ e.Entity, e.Trigger });
return false; return false;
} }
@@ -87,7 +87,7 @@ void PickupSpawnSystem::DoPickup(EntityWrapper &player, EntityWrapper &trigger)
if (!trigger.Valid()) { if (!trigger.Valid()) {
return; return;
} }
double healthGiven = 0.01*(double)trigger["HealthPickup"]["HealthGain"] * (double)player["Health"]["MaxHealth"]; double healthGiven = 0.01*(const double&)trigger["HealthPickup"]["HealthGain"] * (const double&)player["Health"]["MaxHealth"];
//only the server will increase the players hp and set it in the next delta //only the server will increase the players hp and set it in the next delta
Events::PlayerHealthPickup ePlayerHealthPickup; Events::PlayerHealthPickup ePlayerHealthPickup;
+35 -11
View File
@@ -24,6 +24,8 @@ void PlayerMovementSystem::Update(double dt)
if (LocalPlayer.Valid()){ if (LocalPlayer.Valid()){
updateVelocity(LocalPlayer, dt); updateVelocity(LocalPlayer, dt);
} }
m_SprintEffectTimer += dt; m_SprintEffectTimer += dt;
if (m_SprintEffectTimer < 0.016f) { if (m_SprintEffectTimer < 0.016f) {
return; return;
@@ -82,17 +84,15 @@ void PlayerMovementSystem::updateMovementControllers(double dt)
// Limit camera pitch so we don't break our necks // Limit camera pitch so we don't break our necks
cameraOrientation.x(glm::clamp(cameraOrientation.x(), -glm::half_pi<float>(), glm::half_pi<float>())); cameraOrientation.x(glm::clamp(cameraOrientation.x(), -glm::half_pi<float>(), glm::half_pi<float>()));
float pitch = cameraOrientation.x();
double time = ((pitch + glm::half_pi<float>()) / glm::pi<float>());
// Set third person model aim pitch // Set third person model aim pitch
EntityWrapper playerModel = player.FirstChildByName("PlayerModel"); EntityWrapper playerModel = player.FirstChildByName("PlayerModel");
if (playerModel.Valid()) { if (playerModel.Valid()) {
EntityWrapper aimPrimaryEntity = playerModel.FirstChildByName("Aim"); setAim(playerModel, "SidearmWeapon", time);
if(aimPrimaryEntity.Valid()){ setAim(playerModel, "AssaultWeapon", time);
if(aimPrimaryEntity.HasComponent("Animation")) { setAim(playerModel, "DefenderWeapon", time);
float pitch = cameraOrientation.x();
double time = ((pitch + glm::half_pi<float>()) / glm::pi<float>());
(Field<double>)aimPrimaryEntity["Animation"]["Time"] = time;
}
}
} }
} }
@@ -314,6 +314,25 @@ void PlayerMovementSystem::updateVelocity(EntityWrapper player, double dt)
position += velocity * (float)dt; position += velocity * (float)dt;
} }
void PlayerMovementSystem::setAim(EntityWrapper root, std::string weaponNodeName, double time)
{
if (root.Valid()) {
EntityWrapper blendTreeUpper = root.FirstChildByName("BlendTreeUpper");
if (blendTreeUpper.Valid()) {
EntityWrapper weapon = blendTreeUpper.FirstChildByName(weaponNodeName);
if(weapon.Valid()) {
EntityWrapper aim = weapon.FirstChildByName("Aim");
if (aim.Valid()) {
if (aim.HasComponent("Animation")) {
(Field<double>)aim["Animation"]["Time"] = time;
}
}
}
}
}
}
void PlayerMovementSystem::playerStep(double dt, EntityWrapper player) void PlayerMovementSystem::playerStep(double dt, EntityWrapper player)
{ {
// Position of the local player, used see how far a player has moved. // Position of the local player, used see how far a player has moved.
@@ -373,17 +392,22 @@ void PlayerMovementSystem::spawnHexagon(EntityWrapper target)
bool PlayerMovementSystem::OnDashAbility(Events::DashAbility & e) bool PlayerMovementSystem::OnDashAbility(Events::DashAbility & e)
{ {
EntityWrapper player(m_World, e.Player); EntityWrapper eventPlayer(m_World, e.Player);
if (!player.Valid()){// || !IsClient || player.ID == LocalPlayer.ID) { if (!eventPlayer.Valid()){// || IsServer || eventPlayer.ID == LocalPlayer.ID) {
return false; return false;
} }
// auto entityFile = ResourceManager::Load<EntityFile>("Schema/Entities/DashEffect.xml"); // auto entityFile = ResourceManager::Load<EntityFile>("Schema/Entities/DashEffect.xml");
// EntityWrapper dashEffect = entityFile->MergeInto(m_World); // EntityWrapper dashEffect = entityFile->MergeInto(m_World);
EntityWrapper playerModel = player.FirstChildByName("PlayerModel"); EntityWrapper playerModel = eventPlayer.FirstChildByName("PlayerModel");
for (auto& kv : m_PlayerInputControllers) { for (auto& kv : m_PlayerInputControllers) {
EntityWrapper player = kv.first; EntityWrapper player = kv.first;
if(player != eventPlayer) {
continue;
}
auto& controller = kv.second; auto& controller = kv.second;
if (!player.Valid()) { if (!player.Valid()) {
+11 -2
View File
@@ -83,15 +83,24 @@ void PlayerSpawnSystem::Update(double dt)
if (it->Team == cSpawnerTeam["Team"].Enum("Spectator")) { if (it->Team == cSpawnerTeam["Team"].Enum("Spectator")) {
++playersSpectating; ++playersSpectating;
break; break;
} else {
continue;
} }
continue;
} }
} }
// TODO: Choose a different spawner depending on class picked? // TODO: Choose a different spawner depending on class picked?
std::string playerEntityFile;
if (it->Class == PlayerClass::Assault) {
playerEntityFile = (const std::string&)cPlayerSpawn["AssaultFile"];
} else if (it->Class == PlayerClass::Defender) {
playerEntityFile = (const std::string&)cPlayerSpawn["DefenderFile"];
} else if (it->Class == PlayerClass::Sniper) {
playerEntityFile = (const std::string&)cPlayerSpawn["SniperFile"];
}
// Spawn the player! // Spawn the player!
EntityWrapper player = SpawnerSystem::Spawn(spawner, EntityWrapper::Invalid, "Player"); EntityWrapper player = SpawnerSystem::SpawnEntityFile(playerEntityFile, spawner, EntityWrapper::Invalid, "Player");
// Set the player team affiliation // Set the player team affiliation
player["Team"]["Team"] = it->Team; player["Team"]["Team"] = it->Team;
+12 -3
View File
@@ -8,6 +8,17 @@ SpawnerSystem::SpawnerSystem(SystemParams params)
} }
EntityWrapper SpawnerSystem::Spawn(EntityWrapper spawner, EntityWrapper parent /*= EntityWrapper::Invalid*/, const std::string& dontCollideComponent) EntityWrapper SpawnerSystem::Spawn(EntityWrapper spawner, EntityWrapper parent /*= EntityWrapper::Invalid*/, const std::string& dontCollideComponent)
{
// Load the entity file and parse it
const std::string& entityFilePath = spawner["Spawner"]["EntityFile"];
if (!entityFilePath.empty()) {
return SpawnEntityFile(entityFilePath, spawner, parent, dontCollideComponent);
} else {
return EntityWrapper::Invalid;
}
}
EntityWrapper SpawnerSystem::SpawnEntityFile(const std::string& entityFilePath, EntityWrapper spawner, EntityWrapper parent /*= EntityWrapper::Invalid*/, const std::string& dontCollideComponent /*= ""*/)
{ {
// Spawn the entity in the parent's world if it exists, otherwise in the spawner's world // Spawn the entity in the parent's world if it exists, otherwise in the spawner's world
World* world = parent.World; World* world = parent.World;
@@ -15,8 +26,6 @@ EntityWrapper SpawnerSystem::Spawn(EntityWrapper spawner, EntityWrapper parent /
world = spawner.World; world = spawner.World;
} }
// Load the entity file and parse it
const std::string& entityFilePath = spawner["Spawner"]["EntityFile"];
EntityWrapper spawnedEntity; EntityWrapper spawnedEntity;
try { try {
auto entityFile = ResourceManager::Load<EntityFile>(entityFilePath); auto entityFile = ResourceManager::Load<EntityFile>(entityFilePath);
@@ -39,7 +48,7 @@ EntityWrapper SpawnerSystem::Spawn(EntityWrapper spawner, EntityWrapper parent /
// Find any SpawnPoints existing as children of spawner // Find any SpawnPoints existing as children of spawner
auto children = spawner.World->GetDirectChildren(spawner.ID); auto children = spawner.World->GetDirectChildren(spawner.ID);
std::vector<EntityWrapper> spawnPoints; std::list<EntityWrapper> spawnPoints;
for (auto kv = children.first; kv != children.second; ++kv) { for (auto kv = children.first; kv != children.second; ++kv) {
const EntityID& child = kv->second; const EntityID& child = kv->second;
if (spawner.World->HasComponent(child, "SpawnPoint")) { if (spawner.World->HasComponent(child, "SpawnPoint")) {
@@ -10,10 +10,23 @@ void AssaultWeaponBehaviour::UpdateComponent(EntityWrapper& entity, ComponentWra
void AssaultWeaponBehaviour::UpdateWeapon(ComponentWrapper cWeapon, WeaponInfo& wi, double dt) void AssaultWeaponBehaviour::UpdateWeapon(ComponentWrapper cWeapon, WeaponInfo& wi, double dt)
{ {
CheckBoost(cWeapon, wi);
// Start reloading automatically if at 0 mag ammo // Start reloading automatically if at 0 mag ammo
Field<int> magAmmo = cWeapon["MagazineAmmo"]; Field<int> magAmmo = cWeapon["MagazineAmmo"];
if (m_ConfigAutoReload && magAmmo <= 0) { if (m_ConfigAutoReload && magAmmo <= 0) {
OnReload(cWeapon, wi); //OnReload(cWeapon, wi);
// Send an input command instead of reloading immediately so the server
// has a chance to catch up.
if (IsClient) {
Events::InputCommand e;
e.Player = wi.Player;
e.PlayerID = -1;
e.Command = "Reload";
e.Value = 1;
m_EventBroker->Publish(e);
e.Value = 0;
m_EventBroker->Publish(e);
}
} }
// Only start reloading once we're done firing // Only start reloading once we're done firing
@@ -36,8 +49,11 @@ void AssaultWeaponBehaviour::UpdateWeapon(ComponentWrapper cWeapon, WeaponInfo&
Field<int> magSize = cWeapon["MagazineSize"]; Field<int> magSize = cWeapon["MagazineSize"];
Field<int> ammo = cWeapon["Ammo"]; Field<int> ammo = cWeapon["Ammo"];
ammo = glm::max(0, ammo - (magSize - magAmmo)); int usedAmmo = glm::max(0, *magSize - *magAmmo);
magAmmo = glm::min(*magSize, *ammo); magAmmo = glm::clamp(*ammo + *magAmmo, 0, *magSize);
ammo = glm::max(0, *ammo - usedAmmo);
isReloading = false; isReloading = false;
if (wi.FirstPersonEntity.Valid()) { if (wi.FirstPersonEntity.Valid()) {
wi.FirstPersonEntity.FirstChildByName("ViewModel")["Model"]["Visible"] = true; wi.FirstPersonEntity.FirstChildByName("ViewModel")["Model"]["Visible"] = true;
@@ -74,7 +90,7 @@ void AssaultWeaponBehaviour::UpdateWeapon(ComponentWrapper cWeapon, WeaponInfo&
float animationWeight = glm::min(speed, movementSpeed) / movementSpeed; float animationWeight = glm::min(speed, movementSpeed) / movementSpeed;
EntityWrapper rootNode = wi.FirstPersonEntity; EntityWrapper rootNode = wi.FirstPersonEntity;
if (rootNode.Valid()) { if (rootNode.Valid()) {
EntityWrapper blend = rootNode.FirstChildByName("MovementBlend"); EntityWrapper blend = rootNode.FirstChildByName("MovementBlendAssault");
if (blend.Valid()) { if (blend.Valid()) {
(Field<double>)blend["Blend"]["Weight"] = animationWeight; (Field<double>)blend["Blend"]["Weight"] = animationWeight;
} }
@@ -166,6 +182,14 @@ void AssaultWeaponBehaviour::OnReload(ComponentWrapper cWeapon, WeaponInfo& wi)
void AssaultWeaponBehaviour::OnEquip(ComponentWrapper cWeapon, WeaponInfo& wi) void AssaultWeaponBehaviour::OnEquip(ComponentWrapper cWeapon, WeaponInfo& wi)
{ {
cWeapon["FireCooldown"] = (double)cWeapon["EquipTime"]; cWeapon["FireCooldown"] = (double)cWeapon["EquipTime"];
if (wi.ThirdPersonPlayerModel.Valid()) {
Events::AutoAnimationBlend b1;
b1.RootNode = wi.ThirdPersonPlayerModel;
b1.NodeName = "AssaultWeapon";
b1.SingleLevelBlend = true;
m_EventBroker->Publish(b1);
}
} }
void AssaultWeaponBehaviour::OnHolster(ComponentWrapper cWeapon, WeaponInfo& wi) void AssaultWeaponBehaviour::OnHolster(ComponentWrapper cWeapon, WeaponInfo& wi)
@@ -216,16 +240,25 @@ void AssaultWeaponBehaviour::fireBullet(ComponentWrapper cWeapon, WeaponInfo& wi
} }
// Tracer // Tracer
EntityWrapper tracerSpawner = weaponModelEntity.FirstChildByName("WeaponMuzzle"); EntityWrapper tracerSpawner = weaponModelEntity.FirstChildByName("WeaponMuzzleRay");
if (tracerSpawner.Valid()) { if (tracerSpawner.Valid()) {
glm::vec3 origin = TransformSystem::AbsolutePosition(tracerSpawner); glm::vec3 origin = TransformSystem::AbsolutePosition(tracerSpawner);
glm::vec3 direction = glm::quat(TransformSystem::AbsoluteOrientationEuler(tracerSpawner)) * glm::vec3(0, 0, -1); glm::vec3 direction = glm::quat(TransformSystem::AbsoluteOrientationEuler(tracerSpawner)) * glm::vec3(0, 0, -1);
float distance = traceRayDistance(origin, direction); float distance = traceRayDistance(origin, direction);
EntityWrapper ray = SpawnerSystem::Spawn(tracerSpawner); EntityWrapper ray = SpawnerSystem::Spawn(tracerSpawner, tracerSpawner);
if (ray.Valid()) { if (ray.Valid()) {
((Field<glm::vec3>)ray["Transform"]["Scale"]).z(distance); ((Field<glm::vec3>)ray["Transform"]["Scale"]).z(distance);
} }
} }
//MuzzleFlash
EntityWrapper muzzleFlashSpawner = weaponModelEntity.FirstChildByName("WeaponMuzzleFlash");
if (muzzleFlashSpawner.Valid()) {
std::uniform_real_distribution<float> randomSpreadAngle(0.f, 3.1415f*2);
EntityWrapper flash = SpawnerSystem::Spawn(muzzleFlashSpawner, muzzleFlashSpawner);
if (flash.Valid()) {
((Field<glm::vec3>)flash["Transform"]["Orientation"]).z(randomSpreadAngle(m_RandomEngine));
}
}
// Deal damage // Deal damage
if (dealDamage(cWeapon, wi)) { if (dealDamage(cWeapon, wi)) {
@@ -240,6 +273,25 @@ void AssaultWeaponBehaviour::fireBullet(ComponentWrapper cWeapon, WeaponInfo& wi
} }
} }
// View punch
if (IsClient) {
EntityWrapper camera = wi.Player.FirstChildByName("Camera");
if (camera.Valid()) {
Field<glm::vec3> cameraOrientation = camera["Transform"]["Orientation"];
float viewPunch = cWeapon["ViewPunch"];
float maxTravelAngle = cWeapon["MaxTravelAngle"];
Field<float> currentTravel = cWeapon["CurrentTravel"];
if (currentTravel < maxTravelAngle) {
float change = viewPunch;
if (currentTravel + change > maxTravelAngle) {
change = maxTravelAngle - currentTravel;
}
cameraOrientation.x(cameraOrientation.x() + change);
currentTravel += change;
}
}
}
// Play animation // Play animation
playAnimationAndReturn(wi.FirstPersonEntity, "ActionBlend", "Fire"); playAnimationAndReturn(wi.FirstPersonEntity, "ActionBlend", "Fire");
@@ -321,3 +373,149 @@ bool AssaultWeaponBehaviour::dealDamage(ComponentWrapper cWeapon, WeaponInfo& wi
return damage > 0; return damage > 0;
} }
void AssaultWeaponBehaviour::CheckBoost(ComponentWrapper cWeapon, WeaponInfo& wi)
{
// Only check ammo client side
if (!IsClient) {
return;
}
// Only handle ammo check for the local player
if (wi.Player != LocalPlayer) {
return;
}
// Make sure the player isn't checking from the grave
if (!wi.Player.Valid()) {
return;
}
// 3D-pick middle of screen
Rectangle viewport = m_Renderer->GetViewportSize();
glm::vec2 centerScreen(viewport.Width / 2, viewport.Height / 2);
// TODO: Some horizontal spread
PickData pickData = m_Renderer->Pick(centerScreen);
EntityWrapper victim(m_World, pickData.Entity);
if (!victim.Valid()) {
return;
}
// Don't let us somehow shoot ourselves in the foot
if (victim == LocalPlayer) {
return;
}
// Only care about players being hit
if (!victim.HasComponent("Player")) {
victim = victim.FirstParentWithComponent("Player");
}
if (!victim.Valid()) {
return;
}
// If friendly fire, reduce damage to 0 (needed to make Boosts, Ammosharing work)
if ((ComponentInfo::EnumType)victim["Team"]["Team"] == (ComponentInfo::EnumType)wi.Player["Team"]["Team"]) {
EntityWrapper friendlyBoostHudSpawner = wi.FirstPersonPlayerModel.FirstChildByName("FriendlyBoostAttachment");
if (friendlyBoostHudSpawner.Valid()) {
EntityWrapper assaultBoost = victim.FirstChildByName("BoostAssault");
EntityWrapper defenderBoost = victim.FirstChildByName("BoostDefender");
EntityWrapper sniperBoost = victim.FirstChildByName("BoostSniper");
auto children = m_World->GetDirectChildren(friendlyBoostHudSpawner.ID);
if (children.first == children.second) {
if (friendlyBoostHudSpawner.HasComponent("Spawner")) {
EntityWrapper friendlyBoostHud = SpawnerSystem::Spawn(friendlyBoostHudSpawner, friendlyBoostHudSpawner);
if (friendlyBoostHud.Valid()) {
EntityWrapper assaultBoostEntity = friendlyBoostHud.FirstChildByName("AssaultBoost");
if (assaultBoostEntity.Valid()) {
EntityWrapper active = assaultBoostEntity.FirstChildByName("Active");
if (active.HasComponent("Text")) {
if (assaultBoost.Valid()) {
(Field<bool>)active["Text"]["Visible"] = true;
} else {
(Field<bool>)active["Text"]["Visible"] = false;
}
}
}
EntityWrapper defenderBoostEntity = friendlyBoostHud.FirstChildByName("DefenderBoost");
if (defenderBoostEntity.Valid()) {
EntityWrapper active = defenderBoostEntity.FirstChildByName("Active");
if (active.HasComponent("Text")) {
if (defenderBoost.Valid()) {
(Field<bool>)active["Text"]["Visible"] = true;
} else {
(Field<bool>)active["Text"]["Visible"] = false;
}
}
}
EntityWrapper sniperBoostEntity = friendlyBoostHud.FirstChildByName("SniperBoost");
if (sniperBoostEntity.Valid()) {
EntityWrapper active = sniperBoostEntity.FirstChildByName("Active");
if (active.HasComponent("Text")) {
if (sniperBoost.Valid()) {
(Field<bool>)active["Text"]["Visible"] = true;
} else {
(Field<bool>)active["Text"]["Visible"] = false;
}
}
}
}
}
} else {
EntityWrapper friendlyBoostHud = friendlyBoostHudSpawner.FirstChildByName("FriendlyBoostHUD");
if (friendlyBoostHud.Valid()) {
if(friendlyBoostHud.HasComponent("Lifetime")) {
(Field<double>)friendlyBoostHud["Lifetime"]["Lifetime"] = 0.5;
}
EntityWrapper assaultBoostEntity = friendlyBoostHud.FirstChildByName("AssaultBoost");
if (assaultBoostEntity.Valid()) {
EntityWrapper active = assaultBoostEntity.FirstChildByName("Active");
if (active.HasComponent("Text")) {
if (assaultBoost.Valid()) {
(Field<bool>)active["Text"]["Visible"] = true;
} else {
(Field<bool>)active["Text"]["Visible"] = false;
}
}
}
EntityWrapper defenderBoostEntity = friendlyBoostHud.FirstChildByName("DefenderBoost");
if (defenderBoostEntity.Valid()) {
EntityWrapper active = defenderBoostEntity.FirstChildByName("Active");
if (active.HasComponent("Text")) {
if (defenderBoost.Valid()) {
(Field<bool>)active["Text"]["Visible"] = true;
} else {
(Field<bool>)active["Text"]["Visible"] = false;
}
}
}
EntityWrapper sniperBoostEntity = friendlyBoostHud.FirstChildByName("SniperBoost");
if (sniperBoostEntity.Valid()) {
EntityWrapper active = sniperBoostEntity.FirstChildByName("Active");
if (active.HasComponent("Text")) {
if (sniperBoost.Valid()) {
(Field<bool>)active["Text"]["Visible"] = true;
} else {
(Field<bool>)active["Text"]["Visible"] = false;
}
}
}
}
}
}
}
}
@@ -10,6 +10,7 @@ void DefenderWeaponBehaviour::UpdateComponent(EntityWrapper& entity, ComponentWr
void DefenderWeaponBehaviour::UpdateWeapon(ComponentWrapper cWeapon, WeaponInfo& wi, double dt) void DefenderWeaponBehaviour::UpdateWeapon(ComponentWrapper cWeapon, WeaponInfo& wi, double dt)
{ {
CheckBoost(cWeapon, wi);
// Decrement reload timer // Decrement reload timer
Field<double> reloadTimer = cWeapon["ReloadTimer"]; Field<double> reloadTimer = cWeapon["ReloadTimer"];
reloadTimer = glm::max(0.0, reloadTimer - dt); reloadTimer = glm::max(0.0, reloadTimer - dt);
@@ -37,6 +38,16 @@ void DefenderWeaponBehaviour::UpdateWeapon(ComponentWrapper cWeapon, WeaponInfo&
} else { } else {
isReloading = false; isReloading = false;
playAnimationAndReturn(wi.FirstPersonEntity, "FinalBlend", "ReloadEnd"); playAnimationAndReturn(wi.FirstPersonEntity, "FinalBlend", "ReloadEnd");
if (wi.ThirdPersonPlayerModel.Valid()) {
Events::AutoAnimationBlend eFireIdle;
eFireIdle.Duration = 0.2;
eFireIdle.RootNode = wi.ThirdPersonPlayerModel;
eFireIdle.NodeName = "Fire";
eFireIdle.Start = false;
m_EventBroker->Publish(eFireIdle);
}
} }
} }
@@ -92,7 +103,7 @@ void DefenderWeaponBehaviour::OnReload(ComponentWrapper cWeapon, WeaponInfo& wi)
} }
double reloadTime = cWeapon["ReloadTime"]; double reloadTime = cWeapon["ReloadTime"];
Field<double> reloadTimer = cWeapon["ReloadTimer"]; Field<double> reloadTimer = cWeapon["ReloadTimer"];
// Start reload // Start reload
isReloading = true; isReloading = true;
@@ -114,6 +125,16 @@ void DefenderWeaponBehaviour::OnReload(ComponentWrapper cWeapon, WeaponInfo& wi)
eBlendLoop.AnimationEntity = wi.FirstPersonEntity.FirstChildByName("ReloadStart"); eBlendLoop.AnimationEntity = wi.FirstPersonEntity.FirstChildByName("ReloadStart");
m_EventBroker->Publish(eBlendLoop); m_EventBroker->Publish(eBlendLoop);
} }
if(wi.ThirdPersonPlayerModel.Valid()) {
Events::AutoAnimationBlend eReload;
eReload.Duration = 0.2;
eReload.RootNode = wi.ThirdPersonPlayerModel;
eReload.NodeName = "Reload";
eReload.Restart = true;
eReload.Start = true;
m_EventBroker->Publish(eReload);
}
} }
void DefenderWeaponBehaviour::OnHolster(ComponentWrapper cWeapon, WeaponInfo& wi) void DefenderWeaponBehaviour::OnHolster(ComponentWrapper cWeapon, WeaponInfo& wi)
@@ -132,27 +153,81 @@ bool DefenderWeaponBehaviour::OnInputCommand(ComponentWrapper cWeapon, WeaponInf
EntityWrapper attachment = wi.Player.FirstChildByName("ShieldAttachment"); EntityWrapper attachment = wi.Player.FirstChildByName("ShieldAttachment");
if (attachment.Valid()) { if (attachment.Valid()) {
if (e.Value > 0) { if (e.Value > 0) {
if(wi.Player.Valid()) {
if(wi.Player.HasComponent("ShieldAbility")) {
(Field<bool>)wi.Player["ShieldAbility"]["Active"] = true;
}
}
if (IsServer) { if (IsServer) {
SpawnerSystem::Spawn(attachment, attachment); SpawnerSystem::Spawn(attachment, attachment);
} }
EntityWrapper backAttachment = attachment.FirstChildByName("Back");
if (backAttachment.Valid()) {
Events::AutoAnimationBlend eDeployShieldAttachement;
eDeployShieldAttachement.RootNode = backAttachment;
eDeployShieldAttachement.NodeName = "Deploy";
eDeployShieldAttachement.Restart = true;
eDeployShieldAttachement.Start = true;
m_EventBroker->Publish(eDeployShieldAttachement);
}
EntityWrapper frontAttachment = attachment.FirstChildByName("Front");
if (frontAttachment.Valid()) {
Events::AutoAnimationBlend eDeployShieldAttachement;
eDeployShieldAttachement.RootNode = frontAttachment;
eDeployShieldAttachement.NodeName = "Deploy";
eDeployShieldAttachement.Restart = true;
eDeployShieldAttachement.Start = true;
m_EventBroker->Publish(eDeployShieldAttachement);
}
if (IsClient) { if (IsClient) {
EntityWrapper root = wi.FirstPersonEntity; EntityWrapper root = wi.FirstPersonEntity;
if (root.Valid()) { if (root.Valid()) {
EntityWrapper animationNode = root.FirstChildByName("Shield"); EntityWrapper animationNode = root.FirstChildByName("Shield");
if (animationNode.Valid()) { if (animationNode.Valid()) {
Events::AutoAnimationBlend eFireBlend; Events::AutoAnimationBlend eShieldBlend;
eFireBlend.RootNode = root; eShieldBlend.RootNode = root;
eFireBlend.NodeName = "Shield"; eShieldBlend.NodeName = "Shield";
eFireBlend.Restart = true; eShieldBlend.Restart = true;
eFireBlend.Start = true; eShieldBlend.Start = true;
m_EventBroker->Publish(eFireBlend); m_EventBroker->Publish(eShieldBlend);
}
}
} else { // server only
EntityWrapper root = wi.ThirdPersonPlayerModel;
if (root.Valid()) {
Events::AutoAnimationBlend eShieldActivateBlend;
eShieldActivateBlend.RootNode = root;
eShieldActivateBlend.NodeName = "ActivateShield";
eShieldActivateBlend.Restart = true;
eShieldActivateBlend.Start = true;
m_EventBroker->Publish(eShieldActivateBlend);
EntityWrapper animationNode = root.FirstChildByName("ActivateShield");
if (animationNode.Valid()) {
Events::AutoAnimationBlend eShieldIdleBlend;
eShieldIdleBlend.RootNode = root;
eShieldIdleBlend.NodeName = "ShieldFront";
eShieldIdleBlend.Restart = true;
eShieldIdleBlend.Start = true;
eShieldIdleBlend.AnimationEntity = animationNode;
m_EventBroker->Publish(eShieldIdleBlend);
} }
} }
} }
} else { } else {
attachment.DeleteChildren(); attachment.DeleteChildren();
if (wi.Player.Valid()) {
if (wi.Player.HasComponent("ShieldAbility")) {
(Field<bool>)wi.Player["ShieldAbility"]["Active"] = false;
}
}
if (IsClient) { if (IsClient) {
EntityWrapper root = wi.FirstPersonEntity; EntityWrapper root = wi.FirstPersonEntity;
if (root.Valid()) { if (root.Valid()) {
@@ -166,6 +241,26 @@ bool DefenderWeaponBehaviour::OnInputCommand(ComponentWrapper cWeapon, WeaponInf
m_EventBroker->Publish(eFireBlend); m_EventBroker->Publish(eFireBlend);
} }
} }
} else { // server only
EntityWrapper root = wi.ThirdPersonPlayerModel;
if (root.Valid()) {
Events::AutoAnimationBlend eShieldDeactivateBlend;
eShieldDeactivateBlend.RootNode = root;
eShieldDeactivateBlend.NodeName = "ActivateShield";
eShieldDeactivateBlend.Restart = true;
eShieldDeactivateBlend.Start = true;
eShieldDeactivateBlend.Reverse = true;
m_EventBroker->Publish(eShieldDeactivateBlend);
EntityWrapper animationNode = root.FirstChildByName("ActivateShield");
if (animationNode.Valid()) {
Events::AutoAnimationBlend eActionBlend;
eActionBlend.RootNode = root;
eActionBlend.NodeName = "ActionBlend";
eActionBlend.AnimationEntity = animationNode;
m_EventBroker->Publish(eActionBlend);
}
}
} }
} }
} }
@@ -174,6 +269,18 @@ bool DefenderWeaponBehaviour::OnInputCommand(ComponentWrapper cWeapon, WeaponInf
return false; return false;
} }
void DefenderWeaponBehaviour::OnEquip(ComponentWrapper cWeapon, WeaponInfo& wi)
{
if (wi.ThirdPersonPlayerModel.Valid()) {
Events::AutoAnimationBlend b1;
b1.RootNode = wi.ThirdPersonPlayerModel;
b1.NodeName = "DefenderWeapon";
b1.SingleLevelBlend = true;
m_EventBroker->Publish(b1);
}
}
void DefenderWeaponBehaviour::fireShell(ComponentWrapper cWeapon, WeaponInfo& wi) void DefenderWeaponBehaviour::fireShell(ComponentWrapper cWeapon, WeaponInfo& wi)
{ {
cWeapon["FireCooldown"] = 60.0 / (double)cWeapon["RPM"]; cWeapon["FireCooldown"] = 60.0 / (double)cWeapon["RPM"];
@@ -190,70 +297,54 @@ void DefenderWeaponBehaviour::fireShell(ComponentWrapper cWeapon, WeaponInfo& wi
magAmmo -= 1; magAmmo -= 1;
} }
int numPellets = cWeapon["NumPellets"]; // We can't really do any valuable calculations without a valid camera
float spreadAngle = cWeapon["SpreadAngle"]; if (!m_CurrentCamera.Valid()) {
std::uniform_real_distribution<float> randomSpreadAngle(-spreadAngle, spreadAngle); return;
// Calculate pellet angles
// HACK: Random for now?
// TODO: Make distribution even for each quadrant
std::vector<glm::vec2> pelletAngles;
for (int i = 0; i < numPellets; i++) {
pelletAngles.push_back(glm::vec2(randomSpreadAngle(m_RandomEngine), randomSpreadAngle(m_RandomEngine)));
} }
double pelletDamage = (double)cWeapon["BaseDamage"] / numPellets; int numPellets = cWeapon["NumPellets"];
// Create a spread pattern
std::vector<glm::vec2> pattern;
// The first pellet is always centered
pattern.push_back(glm::vec2(0, 0));
// Any additional pellets form circles around the middle
int numOuterPellets = numPellets - 1;
float angleIncrement = glm::two_pi<float>() / numOuterPellets;
for (int i = 0; i < numOuterPellets; ++i) {
float angle = angleIncrement * i;
glm::vec2 pellet = glm::vec2(glm::cos(angle), glm::sin(angle));
pattern.push_back(pellet);
}
// Deal damage (clientside)
dealDamage(cWeapon, wi, pattern);
// Spawn tracers
spawnTracers(cWeapon, wi, pattern);
// View punch // View punch
if (IsClient) { //if (IsClient) {
EntityWrapper camera = wi.Player.FirstChildByName("Camera"); // EntityWrapper camera = wi.Player.FirstChildByName("Camera");
if (camera.Valid()) { // if (camera.Valid()) {
Field<glm::vec3> cameraOrientation = camera["Transform"]["Orientation"]; // glm::vec3& cameraOrientation = camera["Transform"]["Orientation"];
float viewPunch = cWeapon["ViewPunch"]; // float viewPunch = cWeapon["ViewPunch"];
float maxTravelAngle = cWeapon["MaxTravelAngle"]; // float maxTravelAngle = cWeapon["MaxTravelAngle"];
Field<float> currentTravel = cWeapon["CurrentTravel"]; // float& currentTravel = cWeapon["CurrentTravel"];
if (currentTravel < maxTravelAngle) { // if (currentTravel < maxTravelAngle) {
float change = viewPunch; // float change = viewPunch;
if (currentTravel + change > maxTravelAngle) { // if (currentTravel + change > maxTravelAngle) {
change = maxTravelAngle - currentTravel; // change = maxTravelAngle - currentTravel;
} // }
cameraOrientation.x(cameraOrientation.x() + change); // cameraOrientation.x += change;
currentTravel += change; // currentTravel += change;
} // }
} // }
} //}
// Tracers
EntityWrapper weaponModelEntity;
if (wi.Player == LocalPlayer) {
weaponModelEntity = wi.FirstPersonEntity;
} else {
weaponModelEntity = wi.ThirdPersonEntity;
}
if (weaponModelEntity.Valid()) {
EntityWrapper spawner = weaponModelEntity.FirstChildByName("WeaponMuzzle");
Events::PlaySoundOnEntity e;
e.Emitter = weaponModelEntity;
e.FilePath = "Audio/weapon/Shotgun/ShotgunFire.wav";
e.Gain = 1.f;
if (IsClient) {
m_EventBroker->Publish(e);
}
for (auto& angles : pelletAngles) {
glm::vec3 direction = TransformSystem::AbsoluteOrientation(spawner) * glm::quat(glm::vec3(angles, 0.f)) * glm::vec3(0, 0, -1);
float distance = traceRayDistance(TransformSystem::AbsolutePosition(spawner), direction);
EntityWrapper ray = SpawnerSystem::Spawn(spawner);
((Field<glm::vec3>)ray["Transform"]["Scale"]).z(distance / 100.f);
Field<glm::vec3> orientation = ray["Transform"]["Orientation"];
orientation.x(orientation.x() + angles.x);
orientation.y(orientation.y() + angles.y);
glm::vec3 trajectory = direction * distance;
dealDamage(cWeapon, wi, direction, pelletDamage);
}
}
// Play animation // Play animation
playAnimationAndReturn(wi.FirstPersonEntity, "FinalBlend", "Fire"); playAnimationAndReturn(wi.FirstPersonEntity, "FinalBlend", "Fire");
playAnimationAndReturn(wi.ThirdPersonPlayerModel, "FinalBlend", "Fire");
// Sound // Sound
Events::PlaySoundOnEntity e; Events::PlaySoundOnEntity e;
@@ -262,7 +353,63 @@ void DefenderWeaponBehaviour::fireShell(ComponentWrapper cWeapon, WeaponInfo& wi
m_EventBroker->Publish(e); m_EventBroker->Publish(e);
} }
void DefenderWeaponBehaviour::dealDamage(ComponentWrapper cWeapon, WeaponInfo& wi, glm::vec3 direction, double damage) void DefenderWeaponBehaviour::spawnTracers(ComponentWrapper cWeapon, WeaponInfo& wi, std::vector<glm::vec2> pattern)
{
EntityWrapper flashSpawner = getRelevantWeaponEntity(wi).FirstChildByName("WeaponMuzzleFlash");
if (flashSpawner.Valid()) {
std::uniform_real_distribution<float> randomSpreadAngle(0.f, 3.1415f*2);
EntityWrapper flash = SpawnerSystem::Spawn(flashSpawner, flashSpawner);
if (flash.Valid()) {
((Field<glm::vec3>)flash["Transform"]["Orientation"]).z(randomSpreadAngle(m_RandomEngine));
}
}
EntityWrapper muzzle = getRelevantWeaponEntity(wi).FirstChildByName("WeaponMuzzleRay");
if (!muzzle.Valid()) {
return;
}
EntityWrapper camera = wi.Player.FirstChildByName("Camera");
if (!camera.Valid()) {
return;
}
float spreadAngle = glm::radians((float)cWeapon["SpreadAngle"]);
for (auto& pellet : pattern) {
glm::quat pelletRotation = glm::quat(TransformSystem::AbsoluteOrientationEuler(camera)) * glm::quat(glm::vec3(pellet.y, pellet.x, 0) * spreadAngle);
glm::vec3 cameraPosition = TransformSystem::AbsolutePosition(camera);
glm::vec3 direction = pelletRotation * glm::vec3(0, 0, -1);
float distance;
glm::vec3 hitPosition;
if (Collision::EntityFirstHitByRay(Ray(cameraPosition, direction), m_CollisionOctree, distance, hitPosition) != boost::none) { // don't spawn ray if you "miss the world"
EntityWrapper ray = SpawnerSystem::Spawn(muzzle);
if (ray.Valid()) {
ComponentWrapper cTransform = ray["Transform"];
Field<glm::vec3> rayOrigin = cTransform["Position"];
Field<glm::vec3> rayOrientation = cTransform["Orientation"];
Field<glm::vec3> rayScale = cTransform["Scale"];
glm::vec3 muzzlePosition = TransformSystem::AbsolutePosition(muzzle);
glm::quat muzzleOrientation = TransformSystem::AbsoluteOrientation(muzzle);
rayOrigin = muzzlePosition;
glm::vec3 muzzleToHit = hitPosition - muzzlePosition;
glm::vec3 lookVector = glm::normalize(-muzzleToHit);
float pitch = std::asin(-lookVector.y);
float yaw = std::atan2(lookVector.x, lookVector.z);
glm::quat orientation = glm::quat(glm::vec3(pitch, yaw, 0));
rayOrientation = glm::eulerAngles(orientation);
rayScale.x(glm::length(muzzleToHit));
}
}
}
}
void DefenderWeaponBehaviour::dealDamage(ComponentWrapper cWeapon, WeaponInfo& wi, const std::vector<glm::vec2>& pattern)
{ {
// Only deal damage client side // Only deal damage client side
if (!IsClient) { if (!IsClient) {
@@ -279,46 +426,75 @@ void DefenderWeaponBehaviour::dealDamage(ComponentWrapper cWeapon, WeaponInfo& w
return; return;
} }
glm::vec3 maxRange = direction * 2.f; // Convert the spread angle to screen coordinates, taking FOV into account
EntityWrapper camera = wi.Player.FirstChildByName("Camera"); Rectangle res = m_Renderer->GetViewportSize();
glm::vec3 cameraPosition = TransformSystem::AbsolutePosition(camera); float spreadAngle = glm::radians((float)cWeapon["SpreadAngle"]);
if (!camera.Valid()) { float nearClip = (double)m_CurrentCamera["Camera"]["NearClip"];
return; float farClip = (double)m_CurrentCamera["Camera"]["FarClip"];
} float yFOV = glm::radians((double)m_CurrentCamera["Camera"]["FOV"]);
Rectangle screenResolution = m_Renderer->GetViewportSize(); //float yRefFOV = glm::radians(59.f);
glm::vec2 centerScreen = glm::vec2(screenResolution.Width / 2, screenResolution.Height / 2); //float yRef = glm::tan(yRefFOV) * nearClip;
glm::vec2 screenCoords = cameraFromEntity(m_CurrentCamera).WorldToScreen(cameraPosition + maxRange, m_Renderer->GetViewportSize()); //float yRatio = yRef / (glm::tan(yFOV) * nearClip);
PickData pickData = m_Renderer->Pick(centerScreen + screenCoords); //float yMax = (yRatio / 2.f) * spreadAngle * (res.Height / 2.f);
EntityWrapper victim(m_World, pickData.Entity); float yRefFOV = glm::radians(59.f);
if (!victim.Valid()) { float yRef = glm::tan(yRefFOV) * nearClip;
return; float yRatio = yRef / (glm::tan(yFOV) * nearClip);
} float yMax = yRatio * (glm::tan(spreadAngle) * (farClip - nearClip)) * glm::pi<float>(); // ????? Good enough????
// Don't let us shoot ourselves in the foot somehow LOG_DEBUG("Ratio: %f", yRatio);
if (victim == LocalPlayer) { LOG_DEBUG("fatClip: %f", farClip);
return; LOG_DEBUG("yMax: %f", yMax);
} double pelletDamage = (double)cWeapon["BaseDamage"] / pattern.size();
// Only care about players being hit // Pick!
if (!victim.HasComponent("Player")) { std::unordered_map<EntityWrapper, double> damageSum;
victim = victim.FirstParentWithComponent("Player"); glm::vec2 screenCenter(res.Width / 2.f, res.Height / 2.f);
} for (auto& pellet : pattern) {
if (!victim.Valid()) { glm::vec2 pickCoord = screenCenter + (pellet * glm::vec2(yMax, yMax));
return; PickData pick = m_Renderer->Pick(pickCoord);
}
// Check for friendly fire EntityWrapper victim(m_World, pick.Entity);
if ((ComponentInfo::EnumType)victim["Team"]["Team"] == (ComponentInfo::EnumType)wi.Player["Team"]["Team"]) { if (!victim.Valid()) {
return; continue;
}
// Temp hit decal
EntityWrapper hit = ResourceManager::Load<EntityFile>("Schema/Entities/HitTest.xml")->MergeInto(m_World);
(Field<glm::vec3>)hit["Transform"]["Position"] = pick.Position;
// Don't let us shoot ourselves in the foot somehow
if (victim == LocalPlayer) {
continue;
}
// Only care about players being hit
if (!victim.HasComponent("Player")) {
victim = victim.FirstParentWithComponent("Player");
if (!victim.Valid()) {
continue;
}
}
// Check for friendly fire
if ((ComponentInfo::EnumType)victim["Team"]["Team"] == (ComponentInfo::EnumType)wi.Player["Team"]["Team"]) {
// TODO: Ammo sharing
continue;
}
damageSum[victim] += pelletDamage;
((Field<glm::vec4>)hit["Model"]["Color"]).z(1.f);
} }
// Deal damage! // Deal damage!
Events::PlayerDamage ePlayerDamage; for (auto& kv : damageSum) {
ePlayerDamage.Inflictor = wi.Player; // Deal damage!
ePlayerDamage.Victim = victim; Events::PlayerDamage ePlayerDamage;
ePlayerDamage.Damage = damage; ePlayerDamage.Inflictor = wi.Player;
m_EventBroker->Publish(ePlayerDamage); ePlayerDamage.Victim = kv.first;
LOG_DEBUG("Damage: %f", damage); ePlayerDamage.Damage = kv.second;
m_EventBroker->Publish(ePlayerDamage);
LOG_DEBUG("Dealt %f damage to #%i", kv.second, kv.first.ID);
}
} }
bool DefenderWeaponBehaviour::canFire(ComponentWrapper cWeapon, WeaponInfo& wi) bool DefenderWeaponBehaviour::canFire(ComponentWrapper cWeapon, WeaponInfo& wi)
@@ -343,3 +519,148 @@ Camera DefenderWeaponBehaviour::cameraFromEntity(EntityWrapper camera)
cam.SetOrientation(glm::quat((const glm::vec3&)cTransform["Orientation"])); cam.SetOrientation(glm::quat((const glm::vec3&)cTransform["Orientation"]));
return cam; return cam;
} }
void DefenderWeaponBehaviour::CheckBoost(ComponentWrapper cWeapon, WeaponInfo& wi)
{
// Only check ammo client side
if (!IsClient) {
return;
}
// Only handle ammo check for the local player
if (wi.Player != LocalPlayer) {
return;
}
// Make sure the player isn't checking from the grave
if (!wi.Player.Valid()) {
return;
}
// 3D-pick middle of screen
Rectangle viewport = m_Renderer->GetViewportSize();
glm::vec2 centerScreen(viewport.Width / 2, viewport.Height / 2);
// TODO: Some horizontal spread
PickData pickData = m_Renderer->Pick(centerScreen);
EntityWrapper victim(m_World, pickData.Entity);
if (!victim.Valid()) {
return;
}
// Don't let us somehow shoot ourselves in the foot
if (victim == LocalPlayer) {
return;
}
// Only care about players being hit
if (!victim.HasComponent("Player")) {
victim = victim.FirstParentWithComponent("Player");
}
if (!victim.Valid()) {
return;
}
// If friendly fire, reduce damage to 0 (needed to make Boosts, Ammosharing work)
if ((ComponentInfo::EnumType)victim["Team"]["Team"] == (ComponentInfo::EnumType)wi.Player["Team"]["Team"]) {
EntityWrapper friendlyBoostHudSpawner = wi.FirstPersonPlayerModel.FirstChildByName("FriendlyBoostAttachment");
if (friendlyBoostHudSpawner.Valid()) {
EntityWrapper assaultBoost = victim.FirstChildByName("BoostAssault");
EntityWrapper defenderBoost = victim.FirstChildByName("BoostDefender");
EntityWrapper sniperBoost = victim.FirstChildByName("BoostSniper");
auto children = m_World->GetDirectChildren(friendlyBoostHudSpawner.ID);
if (children.first == children.second) {
if (friendlyBoostHudSpawner.HasComponent("Spawner")) {
EntityWrapper friendlyBoostHud = SpawnerSystem::Spawn(friendlyBoostHudSpawner, friendlyBoostHudSpawner);
if (friendlyBoostHud.Valid()) {
EntityWrapper assaultBoostEntity = friendlyBoostHud.FirstChildByName("AssaultBoost");
if (assaultBoostEntity.Valid()) {
EntityWrapper active = assaultBoostEntity.FirstChildByName("Active");
if (active.HasComponent("Text")) {
if (assaultBoost.Valid()) {
(Field<bool>)active["Text"]["Visible"] = true;
} else {
(Field<bool>)active["Text"]["Visible"] = false;
}
}
}
EntityWrapper defenderBoostEntity = friendlyBoostHud.FirstChildByName("DefenderBoost");
if (defenderBoostEntity.Valid()) {
EntityWrapper active = defenderBoostEntity.FirstChildByName("Active");
if (active.HasComponent("Text")) {
if (defenderBoost.Valid()) {
(Field<bool>)active["Text"]["Visible"] = true;
} else {
(Field<bool>)active["Text"]["Visible"] = false;
}
}
}
EntityWrapper sniperBoostEntity = friendlyBoostHud.FirstChildByName("SniperBoost");
if (sniperBoostEntity.Valid()) {
EntityWrapper active = sniperBoostEntity.FirstChildByName("Active");
if (active.HasComponent("Text")) {
if (sniperBoost.Valid()) {
(Field<bool>)active["Text"]["Visible"] = true;
} else {
(Field<bool>)active["Text"]["Visible"] = false;
}
}
}
}
}
} else {
EntityWrapper friendlyBoostHud = friendlyBoostHudSpawner.FirstChildByName("FriendlyBoostHUD");
if (friendlyBoostHud.Valid()) {
if (friendlyBoostHud.HasComponent("Lifetime")) {
(Field<double>)friendlyBoostHud["Lifetime"]["Lifetime"] = 0.5;
}
EntityWrapper assaultBoostEntity = friendlyBoostHud.FirstChildByName("AssaultBoost");
if (assaultBoostEntity.Valid()) {
EntityWrapper active = assaultBoostEntity.FirstChildByName("Active");
if (active.HasComponent("Text")) {
if (assaultBoost.Valid()) {
(Field<bool>)active["Text"]["Visible"] = true;
} else {
(Field<bool>)active["Text"]["Visible"] = false;
}
}
}
EntityWrapper defenderBoostEntity = friendlyBoostHud.FirstChildByName("DefenderBoost");
if (defenderBoostEntity.Valid()) {
EntityWrapper active = defenderBoostEntity.FirstChildByName("Active");
if (active.HasComponent("Text")) {
if (defenderBoost.Valid()) {
(Field<bool>)active["Text"]["Visible"] = true;
} else {
(Field<bool>)active["Text"]["Visible"] = false;
}
}
}
EntityWrapper sniperBoostEntity = friendlyBoostHud.FirstChildByName("SniperBoost");
if (sniperBoostEntity.Valid()) {
EntityWrapper active = sniperBoostEntity.FirstChildByName("Active");
if (active.HasComponent("Text")) {
if (sniperBoost.Valid()) {
(Field<bool>)active["Text"]["Visible"] = true;
} else {
(Field<bool>)active["Text"]["Visible"] = false;
}
}
}
}
}
}
}
}
@@ -14,6 +14,61 @@ void SidearmWeaponBehaviour::UpdateComponent(EntityWrapper& entity, ComponentWra
void SidearmWeaponBehaviour::UpdateWeapon(ComponentWrapper cWeapon, WeaponInfo& wi, double dt) void SidearmWeaponBehaviour::UpdateWeapon(ComponentWrapper cWeapon, WeaponInfo& wi, double dt)
{ {
CheckAmmo(cWeapon, wi);
// Start reloading automatically if at 0 mag ammo
Field<int> magAmmo = cWeapon["MagazineAmmo"];
if (m_ConfigAutoReload && magAmmo <= 0) {
OnReload(cWeapon, wi);
}
// Only start reloading once we're done firing
Field<bool> reloadQueued = cWeapon["ReloadQueued"];
Field<double> fireCooldown = cWeapon["FireCooldown"];
Field<bool> isReloading = cWeapon["IsReloading"];
if (reloadQueued && fireCooldown <= 0) {
reloadQueued = fireCooldown;
isReloading = true;
}
// Decrement reload timer
Field<double> reloadTimer = cWeapon["ReloadTimer"];
if (isReloading) {
reloadTimer = glm::max(0.0, reloadTimer - dt);
}
// Handle reloading
if (isReloading && reloadTimer <= 0.0) {
Field<int> magSize = cWeapon["MagazineSize"];
magAmmo = magSize;
isReloading = false;
if (wi.FirstPersonEntity.Valid()) {
wi.FirstPersonEntity.FirstChildByName("ViewModel")["Model"]["Visible"] = true;
}
if (wi.ThirdPersonEntity.Valid()) {
wi.ThirdPersonEntity["Model"]["Visible"] = true;
}
}
double reloadTime = cWeapon["ReloadTime"];
if (isReloading && reloadTimer <= reloadTime / 2) {
}
// Update first person run animation
ComponentWrapper cPlayer = wi.Player["Player"];
ComponentWrapper cPhysics = wi.Player["Physics"];
const float& movementSpeed = cPlayer["MovementSpeed"];
float speed = glm::length((const glm::vec3&)cPhysics["Velocity"]);
float animationWeight = glm::min(speed, movementSpeed) / movementSpeed;
EntityWrapper rootNode = wi.FirstPersonEntity;
if (rootNode.Valid()) {
EntityWrapper blend = rootNode.FirstChildByName("MovementBlendSidearm");
if (blend.Valid()) {
(Field<double>)blend["Blend"]["Weight"] = animationWeight;
}
}
if ((bool)cWeapon["Automatic"] && canFire(cWeapon)) { if ((bool)cWeapon["Automatic"] && canFire(cWeapon)) {
fireBullet(cWeapon, wi); fireBullet(cWeapon, wi);
} }
@@ -32,9 +87,78 @@ void SidearmWeaponBehaviour::OnCeasePrimaryFire(ComponentWrapper cWeapon, Weapon
cWeapon["TriggerHeld"] = false; cWeapon["TriggerHeld"] = false;
} }
void SidearmWeaponBehaviour::OnReload(ComponentWrapper cWeapon, WeaponInfo& wi)
{
Field<bool> reloadQueued = cWeapon["ReloadQueued"];
Field<bool> isReloading = cWeapon["IsReloading"];
if (reloadQueued || isReloading) {
return;
}
Field<int> magAmmo = cWeapon["MagazineAmmo"];
Field<int> magSize = cWeapon["MagazineSize"];
if (magAmmo >= magSize) {
return;
}
double reloadTime = cWeapon["ReloadTime"];
Field<double> reloadTimer = cWeapon["ReloadTimer"];
// Start reload
reloadQueued = true;
reloadTimer = reloadTime;
// Play animation
playAnimationAndReturn(wi.FirstPersonEntity, "ActionBlend", "Reload");
// Third person anim
Events::AutoAnimationBlend eReloadBlend;
eReloadBlend.RootNode = wi.ThirdPersonPlayerModel;
eReloadBlend.NodeName = "Reload";
eReloadBlend.Restart = true;
eReloadBlend.Start = true;
m_EventBroker->Publish(eReloadBlend);
// Spawn explosion effect
if (wi.FirstPersonEntity.Valid()) {
if (IsClient) {
EntityWrapper reloadEffectSpawner = wi.FirstPersonEntity.FirstChildByName("ReloadSpawner");
if (reloadEffectSpawner.Valid()) {
reloadEffectSpawner.DeleteChildren();
SpawnerSystem::Spawn(reloadEffectSpawner, reloadEffectSpawner);
}
}
wi.FirstPersonEntity.FirstChildByName("ViewModel")["Model"]["Visible"] = false;
}
if (wi.ThirdPersonEntity.Valid()) {
if (IsServer) {
EntityWrapper reloadEffectSpawner = wi.ThirdPersonEntity.FirstChildByName("ReloadSpawner");
if (reloadEffectSpawner.Valid()) {
reloadEffectSpawner.DeleteChildren();
SpawnerSystem::Spawn(reloadEffectSpawner, reloadEffectSpawner);
}
}
wi.ThirdPersonEntity["Model"]["Visible"] = false;
}
// Sound
Events::PlaySoundOnEntity e;
e.Emitter = wi.Player;
e.FilePath = "Audio/weapon/Assault/AssaultWeaponReload.wav";
m_EventBroker->Publish(e);
}
void SidearmWeaponBehaviour::OnEquip(ComponentWrapper cWeapon, WeaponInfo& wi) void SidearmWeaponBehaviour::OnEquip(ComponentWrapper cWeapon, WeaponInfo& wi)
{ {
cWeapon["FireCooldown"] = (double)cWeapon["EquipTime"]; cWeapon["FireCooldown"] = (double)cWeapon["EquipTime"];
if(wi.ThirdPersonPlayerModel.Valid()) {
Events::AutoAnimationBlend b1;
b1.RootNode = wi.ThirdPersonPlayerModel;
b1.NodeName = "SidearmWeapon";
b1.SingleLevelBlend = true;
m_EventBroker->Publish(b1);
}
} }
void SidearmWeaponBehaviour::OnHolster(ComponentWrapper cWeapon, WeaponInfo& wi) void SidearmWeaponBehaviour::OnHolster(ComponentWrapper cWeapon, WeaponInfo& wi)
@@ -51,27 +175,369 @@ void SidearmWeaponBehaviour::fireBullet(ComponentWrapper cWeapon, WeaponInfo& wi
{ {
cWeapon["FireCooldown"] = 60.0 / (double)cWeapon["RPM"]; cWeapon["FireCooldown"] = 60.0 / (double)cWeapon["RPM"];
// Ammo
Field<int> magAmmo = cWeapon["MagazineAmmo"];
if (magAmmo <= 0) {
return;
} else {
magAmmo -= 1;
}
// Get weapon model based on current person // Get weapon model based on current person
EntityWrapper weaponModelEntity = getRelevantWeaponEntity(wi); EntityWrapper weaponModelEntity = getRelevantWeaponEntity(wi);
if (!weaponModelEntity.Valid()) { if (!weaponModelEntity.Valid()) {
return; return;
} }
// Tracer //Tracer
EntityWrapper tracerSpawner = weaponModelEntity.FirstChildByName("WeaponMuzzle"); EntityWrapper tracerSpawner = weaponModelEntity.FirstChildByName("WeaponMuzzleRay");
if (tracerSpawner.Valid()) { if (tracerSpawner.Valid()) {
glm::vec3 origin = TransformSystem::AbsolutePosition(tracerSpawner); glm::vec3 origin = TransformSystem::AbsolutePosition(tracerSpawner);
glm::vec3 direction = TransformSystem::AbsoluteOrientation(tracerSpawner) * glm::vec3(0, 0, -1); glm::vec3 direction = TransformSystem::AbsoluteOrientation(tracerSpawner) * glm::vec3(0, 0, -1);
float distance = traceRayDistance(origin, direction); float distance = traceRayDistance(origin, direction);
EntityWrapper ray = SpawnerSystem::Spawn(tracerSpawner); EntityWrapper ray = SpawnerSystem::Spawn(tracerSpawner, tracerSpawner);
((Field<glm::vec3>)ray["Transform"]["Scale"]).z(distance / 100.f); if (ray.Valid()) {
((Field<glm::vec3>)ray["Transform"]["Scale"]).z(distance);
}
}
//Flash
EntityWrapper flashSpawner = weaponModelEntity.FirstChildByName("WeaponMuzzleFlash");
if (flashSpawner.Valid()) {
std::uniform_real_distribution<float> randomSpreadAngle(0.f, 3.1415f*2);
EntityWrapper flash = SpawnerSystem::Spawn(flashSpawner, flashSpawner);
if(flash.Valid()){
((Field<glm::vec3>)flash["Transform"]["Orientation"]).z(randomSpreadAngle(m_RandomEngine));
}
}
// Deal damage
if (dealDamage(cWeapon, wi)) {
// Show hit marker
EntityWrapper hitMarkerSpawner = wi.Player.FirstChildByName("HitMarkerSpawner");
if (hitMarkerSpawner.Valid()) {
SpawnerSystem::Spawn(hitMarkerSpawner, hitMarkerSpawner);
Events::PlaySoundOnEntity e;
e.Emitter = wi.Player;
e.FilePath = "Audio/weapon/hitclick.wav";
m_EventBroker->Publish(e);
}
}
// Play animation
playAnimationAndReturn(wi.FirstPersonEntity, "ActionBlend", "Fire");
// Third person anim
if (wi.ThirdPersonPlayerModel.Valid()) {
Events::AutoAnimationBlend b1;
b1.RootNode = wi.ThirdPersonPlayerModel;
b1.NodeName = "Fire";
b1.Restart = true;
b1.Start = true;
m_EventBroker->Publish(b1);
} }
} }
bool SidearmWeaponBehaviour::canFire(ComponentWrapper cWeapon) bool SidearmWeaponBehaviour::canFire(ComponentWrapper cWeapon)
{ {
bool triggerHeld = cWeapon["TriggerHeld"]; bool triggerHeld = cWeapon["TriggerHeld"];
Field<double> cooldown = cWeapon["FireCooldown"]; bool cooldownPassed = (double)cWeapon["FireCooldown"] <= 0.0;
// TODO: Ammo checks bool isNotReloading = !(bool)cWeapon["IsReloading"];
return triggerHeld && cooldown <= 0.0; return triggerHeld && cooldownPassed && isNotReloading;
}
bool SidearmWeaponBehaviour::dealDamage(ComponentWrapper cWeapon, WeaponInfo& wi)
{
// Only deal damage client side
if (!IsClient) {
return false;
}
// Only handle damage for the local player
if (wi.Player != LocalPlayer) {
return false;
}
// Make sure the player isn't shooting from the grave
if (!wi.Player.Valid()) {
return false;
}
// 3D-pick middle of screen
Rectangle viewport = m_Renderer->GetViewportSize();
glm::vec2 centerScreen(viewport.Width / 2, viewport.Height / 2);
// TODO: Some horizontal spread
PickData pickData = m_Renderer->Pick(centerScreen);
EntityWrapper victim(m_World, pickData.Entity);
if (!victim.Valid()) {
return false;
}
// Don't let us somehow shoot ourselves in the foot
if (victim == LocalPlayer) {
return false;
}
// Only care about players being hit
if (!victim.HasComponent("Player")) {
victim = victim.FirstParentWithComponent("Player");
}
if (!victim.Valid()) {
return false;
}
double damage = cWeapon["BaseDamage"];
// If friendly fire, reduce damage to 0 (needed to make Boosts, Ammosharing work)
if ((ComponentInfo::EnumType)victim["Team"]["Team"] == (ComponentInfo::EnumType)wi.Player["Team"]["Team"]) {
damage = 0;
bool gaveAmmo = false;
if (victim.HasComponent("AssaultWeapon")) {
int magazineSize = victim["AssaultWeapon"]["MagazineSize"];
int magazineAmmo = victim["AssaultWeapon"]["MagazineAmmo"];
int maxAmmo = victim["AssaultWeapon"]["MaxAmmo"];
int ammo = victim["AssaultWeapon"]["Ammo"];
if (magazineAmmo < magazineSize) {
gaveAmmo = true;
} else if (ammo < maxAmmo) {
gaveAmmo = true;
}
} else if (victim.HasComponent("DefenderWeapon")) {
int magazineSize = victim["DefenderWeapon"]["MagazineSize"];
int magazineAmmo = victim["DefenderWeapon"]["MagazineAmmo"];
int maxAmmo = victim["DefenderWeapon"]["MaxAmmo"];
int ammo = victim["DefenderWeapon"]["Ammo"];
if (magazineAmmo < magazineSize) {
gaveAmmo = true;
} else if (ammo < maxAmmo) {
gaveAmmo = true;
}
}
if (gaveAmmo) {
EntityWrapper effectSpawner = wi.FirstPersonEntity.FirstChildByName("AmmoShareEffectSpawner");
if (effectSpawner.Valid()) {
if (effectSpawner.HasComponent("Spawner")) {
SpawnerSystem::Spawn(effectSpawner, effectSpawner);
}
}
}
}
spawnTracer(cWeapon, wi);
// Deal damage!
Events::PlayerDamage ePlayerDamage;
ePlayerDamage.Inflictor = wi.Player;
ePlayerDamage.Victim = victim;
ePlayerDamage.Damage = damage;
m_EventBroker->Publish(ePlayerDamage);
return damage > 0;
}
void SidearmWeaponBehaviour::spawnTracer(ComponentWrapper cWeapon, WeaponInfo& wi)
{
EntityWrapper muzzle = getRelevantWeaponEntity(wi).FirstChildByName("WeaponMuzzle");
if (!muzzle.Valid()) {
return;
}
EntityWrapper camera = wi.Player.FirstChildByName("Camera");
if (!camera.Valid()) {
return;
}
glm::vec3 cameraPosition = TransformSystem::AbsolutePosition(camera);
glm::vec3 direction = glm::vec3(0, 0, -1);
float distance;
glm::vec3 hitPosition;
Collision::EntityFirstHitByRay(Ray(cameraPosition, direction), m_CollisionOctree, distance, hitPosition);
EntityWrapper ray = SpawnerSystem::Spawn(muzzle);
if (ray.Valid()) {
ComponentWrapper cTransform = ray["Transform"];
Field<glm::vec3> rayOrigin = cTransform["Position"];
Field<glm::vec3> rayOrientation = cTransform["Orientation"];
Field<glm::vec3> rayScale = cTransform["Scale"];
glm::vec3 muzzlePosition = TransformSystem::AbsolutePosition(muzzle);
glm::quat muzzleOrientation = TransformSystem::AbsoluteOrientation(muzzle);
rayOrigin = muzzlePosition;
glm::vec3 muzzleToHit = hitPosition - muzzlePosition;
glm::vec3 lookVector = glm::normalize(-muzzleToHit);
float pitch = std::asin(-lookVector.y);
float yaw = std::atan2(lookVector.x, lookVector.z);
glm::quat orientation = glm::quat(glm::vec3(pitch, yaw, 0));
rayOrientation = glm::eulerAngles(orientation);
rayScale.z(glm::length(muzzleToHit));
}
}
/*
void SidearmWeaponBehaviour::giveAmmo(ComponentWrapper cWeapon, WeaponInfo& wi, EntityWrapper receiver)
{
bool gaveAmmo = false;
if (receiver.HasComponent("AssaultWeapon")) {
int magazineSize = receiver["AssaultWeapon"]["MagazineSize"];
int& magazineAmmo = receiver["AssaultWeapon"]["MagazineAmmo"];
int maxAmmo = receiver["AssaultWeapon"]["MaxAmmo"];
int& ammo = receiver["AssaultWeapon"]["Ammo"];
if(magazineAmmo < magazineSize) {
magazineAmmo += 1;
gaveAmmo = true;
} else if (ammo < maxAmmo) {
ammo += 1;
gaveAmmo = true;
}
} else if (receiver.HasComponent("DefenderWeapon")) {
int magazineSize = receiver["DefenderWeapon"]["MagazineSize"];
int& magazineAmmo = receiver["DefenderWeapon"]["MagazineAmmo"];
int maxAmmo = receiver["DefenderWeapon"]["MaxAmmo"];
int& ammo = receiver["DefenderWeapon"]["Ammo"];
if (magazineAmmo < magazineSize) {
magazineAmmo += 1;
gaveAmmo = true;
} else if (ammo < maxAmmo) {
ammo += 1;
gaveAmmo = true;
}
}
if(gaveAmmo) {
EntityWrapper effectSpawner = wi.FirstPersonEntity.FirstChildByName("AmmoShareEffectSpawner");
if(effectSpawner.Valid()) {
if (effectSpawner.HasComponent("Spawner")) {
SpawnerSystem::Spawn(effectSpawner, effectSpawner);
}
}
}
}*/
void SidearmWeaponBehaviour::CheckAmmo(ComponentWrapper cWeapon, WeaponInfo& wi)
{
// Only check ammo client side
if (!IsClient) {
return;
}
// Only handle ammo check for the local player
if (wi.Player != LocalPlayer) {
return;
}
// Make sure the player isn't checking from the grave
if (!wi.Player.Valid()) {
return;
}
// 3D-pick middle of screen
Rectangle viewport = m_Renderer->GetViewportSize();
glm::vec2 centerScreen(viewport.Width / 2, viewport.Height / 2);
// TODO: Some horizontal spread
PickData pickData = m_Renderer->Pick(centerScreen);
EntityWrapper victim(m_World, pickData.Entity);
if (!victim.Valid()) {
RemoveFrindlyAmmoHUD(wi);
return;
}
// Don't let us somehow shoot ourselves in the foot
if (victim == LocalPlayer) {
RemoveFrindlyAmmoHUD(wi);
return;
}
// Only care about players being hit
if (!victim.HasComponent("Player")) {
victim = victim.FirstParentWithComponent("Player");
}
if (!victim.Valid()) {
RemoveFrindlyAmmoHUD(wi);
return;
}
// If friendly fire, reduce damage to 0 (needed to make Boosts, Ammosharing work)
if ((ComponentInfo::EnumType)victim["Team"]["Team"] == (ComponentInfo::EnumType)wi.Player["Team"]["Team"]) {
int magazineAmmo = 0;
int ammo = 0;
if (victim.HasComponent("AssaultWeapon")) {
magazineAmmo = (int)victim["AssaultWeapon"]["MagazineAmmo"];
ammo = (int)victim["AssaultWeapon"]["Ammo"];
} else if (victim.HasComponent("DefenderWeapon")) {
magazineAmmo = (int)victim["DefenderWeapon"]["MagazineAmmo"];
ammo = (int)victim["DefenderWeapon"]["Ammo"];
}
EntityWrapper friendlyAmmoHudSpawner = wi.FirstPersonPlayerModel.FirstChildByName("FriendlyAmmoAttachment");
if (friendlyAmmoHudSpawner.Valid()) {
auto children = m_World->GetDirectChildren(friendlyAmmoHudSpawner.ID);
if (children.first == children.second) {
if (friendlyAmmoHudSpawner.HasComponent("Spawner")) {
EntityWrapper friendlyAmmoHud = SpawnerSystem::Spawn(friendlyAmmoHudSpawner, friendlyAmmoHudSpawner);
if (friendlyAmmoHud.Valid()) {
EntityWrapper textEntity = friendlyAmmoHud.FirstChildByName("MagazineAmmo");
if (textEntity.Valid()) {
if (textEntity.HasComponent("Text")) {
(Field<std::string>)textEntity["Text"]["Content"] = std::to_string(magazineAmmo);
}
}
EntityWrapper ammoTextEntity = friendlyAmmoHud.FirstChildByName("Ammo");
if (ammoTextEntity.Valid()) {
if (ammoTextEntity.HasComponent("Text")) {
(Field<std::string>)ammoTextEntity["Text"]["Content"] = std::to_string(ammo);
}
}
}
}
} else {
EntityWrapper textEntity = friendlyAmmoHudSpawner.FirstChildByName("MagazineAmmo");
if (textEntity.Valid()) {
if (textEntity.HasComponent("Text")) {
(Field<std::string>)textEntity["Text"]["Content"] = std::to_string(magazineAmmo);
}
}
EntityWrapper ammoTextEntity = friendlyAmmoHudSpawner.FirstChildByName("Ammo");
if (ammoTextEntity.Valid()) {
if (ammoTextEntity.HasComponent("Text")) {
(Field<std::string>)ammoTextEntity["Text"]["Content"] = std::to_string(ammo);
}
}
}
}
}
}
void SidearmWeaponBehaviour::RemoveFrindlyAmmoHUD(WeaponInfo& wi)
{
EntityWrapper friendlyAmmoHudSpawner = wi.FirstPersonPlayerModel.FirstChildByName("FriendlyAmmoAttachment");
if (friendlyAmmoHudSpawner.Valid()) {
friendlyAmmoHudSpawner.DeleteChildren();
}
} }