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;
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
@@ -166,6 +166,7 @@ bool FirstPersonInputController<EventContext>::OnCommand(const Events::InputComm
aeb.Duration = 0.1;
aeb.NodeName = "Run";
aeb.RootNode = firstPersonModel;
aeb.SingleLevelBlend = true;
aeb.Start = true;
m_EventBroker->Publish(aeb);
}
@@ -175,6 +176,7 @@ bool FirstPersonInputController<EventContext>::OnCommand(const Events::InputComm
aeb.Duration = 0.1;
aeb.NodeName = "Run";
aeb.RootNode = firstPersonModel;
aeb.SingleLevelBlend = true;
aeb.Start = true;
aeb.Reverse = true;
m_EventBroker->Publish(aeb);
@@ -210,14 +212,41 @@ bool FirstPersonInputController<EventContext>::OnCommand(const Events::InputComm
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 (glm::length2(m_Movement) < 0.25f) {
//Blend to Idle
if (m_PlayerEntity.Valid()) {
if (m_PlayerEntity.Valid()) {
glm::vec2 movementXZ = glm::vec2(m_Movement.x, m_Movement.z);
if (glm::length(movementXZ) < 0.1f) {
//Blend to Idle
EntityWrapper playerModel = m_PlayerEntity.FirstChildByName("PlayerModel");
if (playerModel.Valid()) {
Events::AutoAnimationBlend aeb;
@@ -236,10 +265,8 @@ bool FirstPersonInputController<EventContext>::OnCommand(const Events::InputComm
aeb.Start = true;
m_EventBroker->Publish(aeb);
}
}
} else {
//Blend to movement
if (m_PlayerEntity.Valid()) {
} else {
//Blend to movement
EntityWrapper playerModel = m_PlayerEntity.FirstChildByName("PlayerModel");
if (playerModel.Valid()) {
Events::AutoAnimationBlend aeb;
@@ -251,8 +278,7 @@ bool FirstPersonInputController<EventContext>::OnCommand(const Events::InputComm
}
}
if (glm::length2(m_Movement) > 0) {
if (glm::length(m_Movement) > 0) {
m_Movement = glm::normalize(m_Movement);
//Animation
+2
View File
@@ -10,6 +10,7 @@
#include <boost/asio.hpp>
#include <boost/shared_array.hpp>
#include "Network/EKillDeath.h"
#include "Core/World.h"
#include "Core/EntityFile.h"
#include "Core/EventBroker.h"
@@ -105,6 +106,7 @@ private:
void parseDashEffect(Packet& packet);
void parseAmmoPickup(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 parseSnapshot(Packet& packet);
void identifyPacketLoss();
+11
View File
@@ -10,8 +10,19 @@ namespace Events
struct KillDeath : public Event
{
int CasualtyTeam;
PlayerID Casualty = -1;
std::string CasualtyName;
//1 = assault, 2 = defender, 3 = sniper
int CasualtyClass;
int KillerTeam;
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,
AmmoPickup,
RemoveWorld,
KD,
Invalid
};
+1 -2
View File
@@ -49,9 +49,7 @@ public:
next = next->Child[0];
}
}
return next;
}
};
@@ -82,6 +80,7 @@ public:
BlendTree::Node* FirstCommonParent(Node* node1, Node* node2);
EntityWrapper GetSubTreeRoot(std::string nodeName);
std::vector<EntityWrapper> GetSubTreeRoots(std::string nodeName);
std::vector<EntityWrapper> GetSingleLevelRoots(std::string name);
std::vector<EntityWrapper> GetEntitesByName(std::string name);
+7 -1
View File
@@ -104,12 +104,17 @@ struct ModelJob : RenderJob
FillPercentage = fillPercentage;
IsShielded = isShielded;
if (world->HasComponent(Entity, "Unpickable")) {
NotPickable = true;
}
if (model->IsSkinned()) {
Skeleton = Model->m_RawModel->m_Skeleton;
if (Skeleton != nullptr) {
EntityWrapper entityWrapper = EntityWrapper(world, modelComponent.EntityID);
if(Skeleton->BlendTrees.find(entityWrapper) != Skeleton->BlendTrees.end()) {
BlendTree = Skeleton->BlendTrees.at(entityWrapper);
@@ -147,6 +152,7 @@ struct ModelJob : RenderJob
float FillPercentage = 0.0;
bool IsShielded;
bool Shadow;
bool NotPickable = false;
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)
: RenderJob()
{
Model = ResourceManager::Load<::Model>((std::string)cSprite["Model"]);
Model = ResourceManager::Load<::Model>(cSprite["Model"]);
::RawModel::MaterialProperties matProp = Model->MaterialGroups().front();
TextureID = 0;
@@ -55,7 +55,7 @@ struct SpriteJob : RenderJob
if((bool)cSprite["KeepRatio"] == true) {
if(scale.y >= scale.x) {
ScaleY = (scale.x)/(scale.y);
ScaleY = (scale.y)/(scale.x);
ScaleX = 1.f;
} else {
ScaleY = 1.f;
@@ -91,8 +91,8 @@ struct SpriteJob : RenderJob
bool Pickable;
bool IsIndicator = false;
bool BlurBackground = false;
float ScaleX = 1;
float ScaleY = 1;
float ScaleX = 1.f;
float ScaleY = 1.f;
bool Linear = false;
bool ClampToBorder = false;
+3
View File
@@ -6,6 +6,7 @@
#include "Core/EntityFile.h"
#include "Core/EPlayerDamage.h"
#include "Common.h"
#include "SpawnerSystem.h"
class BoostSystem : public System
{
@@ -17,5 +18,7 @@ private:
bool OnPlayerDamage(Events::PlayerDamage& e);
std::string DetermineClass(EntityWrapper player);
void giveAmmo(EntityWrapper giver, EntityWrapper receiver);
};
#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/GLM.h"
#include "Core/EPlayerDeath.h"
#include "Network/EKillDeath.h"
class KillFeedSystem : public ImpureSystem
{
@@ -11,8 +11,7 @@ public:
KillFeedSystem(SystemParams params)
: System(params)
{
EVENT_SUBSCRIBE_MEMBER(m_EPlayerDeath, &KillFeedSystem::OnPlayerDeath);
EVENT_SUBSCRIBE_MEMBER(m_EKillDeath, &KillFeedSystem::OnPlayerKillDeath)
}
virtual void Update(double dt) override;
@@ -22,16 +21,30 @@ private:
EventRelay<KillFeedSystem, Events::PlayerDeath> m_EPlayerDeath;
bool KillFeedSystem::OnPlayerDeath(Events::PlayerDeath& e);
EventRelay<KillFeedSystem, Events::KillDeath> m_EKillDeath;
bool KillFeedSystem::OnPlayerKillDeath(Events::KillDeath& e);
struct KillFeedInfo
{
std::string Content;
glm::vec4 Color;
std::string KillerName = "";
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;
};
std::string m_RedColor = "\\C08366D";
std::string m_BlueColor = "\\C6A1208";
std::list<KillFeedInfo> m_DeathQueue;
};
@@ -46,4 +46,6 @@ private:
void updateMovementControllers(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
{
None = 0,
Assault,
Defender,
Sniper
Assault = 1,
Defender = 2,
Sniper = 2
};
struct SpawnRequest
{
+1
View File
@@ -18,6 +18,7 @@ public:
// will try to pick a spawn location so that the spawned entity doesn't
// collide with anything that has that component and is collidable.
static EntityWrapper Spawn(EntityWrapper spawner, EntityWrapper parent = EntityWrapper::Invalid, const std::string& dontCollideComponent = "");
static EntityWrapper SpawnEntityFile(const std::string& entityFilePath, EntityWrapper spawner, EntityWrapper parent = EntityWrapper::Invalid, const std::string& dontCollideComponent = "");
private:
EventRelay<SpawnerSystem, Events::SpawnerSpawn> m_OnSpawnerSpawn;
@@ -31,12 +31,14 @@ private:
// Weapon functions
void fireBullet(ComponentWrapper cWeapon, WeaponInfo& wi);
//void dealDamage(ComponentWrapper cWeapon, WeaponInfo& wi, glm::vec3 direction, double damage);
bool canFire(ComponentWrapper cWeapon, WeaponInfo& wi);
bool dealDamage(ComponentWrapper cWeapon, WeaponInfo& wi);
// Utility
//Camera cameraFromEntity(EntityWrapper camera);
void CheckBoost(ComponentWrapper cWeapon, WeaponInfo& wi);
};
#endif
@@ -6,6 +6,7 @@
#include "Core/EPlayerDamage.h"
#include "Sound/EPlaySoundOnEntity.h"
#include "Sound/EPlaySoundOnEntity.h"
#include <glm/gtx/vector_angle.hpp>
class DefenderWeaponBehaviour : public WeaponBehaviour<DefenderWeaponBehaviour>
{
@@ -23,18 +24,24 @@ public:
void OnReload(ComponentWrapper cWeapon, WeaponInfo& wi) override;
void OnHolster(ComponentWrapper cWeapon, WeaponInfo& wi) override;
bool OnInputCommand(ComponentWrapper cWeapon, WeaponInfo& wi, const Events::InputCommand& e) override;
void OnEquip(ComponentWrapper cWeapon, WeaponInfo& wi) override;
private:
std::random_device m_RandomDevice;
std::mt19937 m_RandomEngine;
// Weapon functions
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);
// Utility
Camera cameraFromEntity(EntityWrapper camera);
void CheckBoost(ComponentWrapper cWeapon, WeaponInfo& wi);
};
#endif
@@ -4,6 +4,8 @@
#include "WeaponBehaviour.h"
#include "Collision/Collision.h"
#include "Core/EPlayerDamage.h"
#include "Sound/EPlaySoundOnEntity.h"
#include "Rendering/EAutoAnimationBlend.h"
class SidearmWeaponBehaviour : public WeaponBehaviour<SidearmWeaponBehaviour>
{
@@ -18,6 +20,7 @@ public:
void UpdateWeapon(ComponentWrapper cWeapon, WeaponInfo& wi, double dt) override;
void OnPrimaryFire(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 OnHolster(ComponentWrapper cWeapon, WeaponInfo& wi) override;
@@ -32,6 +35,16 @@ private:
// Utility
bool canFire(ComponentWrapper cWeapon);
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);
};
@@ -306,6 +306,8 @@ private:
wi.ThirdPersonEntity = thirdPersonWeapon;
wi.ThirdPersonPlayerModel = thirdPersonWeapon.FirstParentWithComponent("Model");
player["Player"]["CurrentWeapon"] = cWeapon.Info.Name;
OnEquip(cWeapon, wi);
}
+4 -4
View File
@@ -76,16 +76,16 @@ NumIterations=9
TextureQuality=0
[GLOW]
Quality=3
Quality=1
[GLOW1]
NumIterations=5
NumIterations=2
[GLOW2]
NumIterations=9
NumIterations=4
[GLOW3]
NumIterations=13
NumIterations=6
[MSAA]
Level = 0;
+3
View File
@@ -68,6 +68,9 @@
<xs:include schemaLocation="Components/NetworkComponent.xsd"/>
<xs:include schemaLocation="Components/ServerIdentity.xsd"/>
<xs:include schemaLocation="Components/ServerList.xsd"/>
<xs:include schemaLocation="Components/Unpickable.xsd"/>
<xs:include schemaLocation="Components/ConfigBtnResolution.xsd"/>
<xs:include schemaLocation="Components/ConfigBtnFloat.xsd"/>
<xs:include schemaLocation="Components/EndScreen.xsd"/>
<xs:include schemaLocation="Components/Fade.xsd"/>
</xs:schema>
@@ -1,14 +1,14 @@
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
<DefenderWeapon xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="DefenderWeapon.xsd">
<Slot><Primary/></Slot>
<MagazineAmmo>8</MagazineAmmo>
<MagazineAmmo>9999</MagazineAmmo>
<MagazineSize>8</MagazineSize>
<Ammo>64</Ammo>
<MaxAmmo>64</MaxAmmo>
<BaseDamage>90</BaseDamage>
<SpreadAngle>0.174533</SpreadAngle> <!-- 0.174533 = 10 degrees -->
<SpreadAngle>10</SpreadAngle>
<MaxTravelAngle>0.174533</MaxTravelAngle> <!-- 0.174533 = 10 degrees -->
<NumPellets>10</NumPellets>
<NumPellets>9</NumPellets>
<RPM>120</RPM>
<ViewPunch>0.03</ViewPunch>
<ViewReturnSpeed>0.2</ViewReturnSpeed>
@@ -36,7 +36,7 @@
<xs:annotation><xs:documentation>Damage dealt if all shotgun pellets hit</xs:documentation></xs:annotation>
</xs:element>
<xs:element name="SpreadAngle" type="t:float" minOccurs="0">
<xs:annotation><xs:documentation>Spread angle in radians</xs:documentation></xs:annotation>
<xs:annotation><xs:documentation>The spread angle radius.</xs:documentation></xs:annotation>
</xs:element>
<xs:element name="MaxTravelAngle" type="t:float" minOccurs="0">
<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" ?>
<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:documentation>Combined with a Spawner and a Team component, defines a spawn point for a player team.</xs:documentation>
</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:schema>
@@ -7,10 +7,11 @@
<RPM>500</RPM>
<Automatic>false</Automatic>
<ViewPunch>0.01</ViewPunch>
<ReloadTime>0.5</ReloadTime>
<ReloadTime>1.0</ReloadTime>
<EquipTime>0.5</EquipTime>
<TriggerHeld>false</TriggerHeld>
<FireCooldown>0</FireCooldown>
<ReloadQueued>false</ReloadQueued>
<IsReloading>false</IsReloading>
<ReloadTimer>0</ReloadTimer>
</SidearmWeapon>
@@ -44,6 +44,7 @@
</xs:element>
<xs:element name="TriggerHeld" type="t:bool" 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="ReloadTimer" type="t:double" minOccurs="0"/>
</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" ?>
<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>
<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/>
</Components>
<Children>
<Entity name="Deploy">
<Entity name="Back">
<Components>
<c:Animation>
<AnimationName>ActivateDeactiveShieldF</AnimationName>
<Time>1</Time>
<Speed>1</Speed>
</c:Animation>
<c:Blend>
<Pose1>Deploy</Pose1>
<Pose2>Idle</Pose2>
<Weight>0</Weight>
</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/>
</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 name="Idle">
<Entity name="Front">
<Components>
<c:Animation>
<AnimationName>ShieldFrontF</AnimationName>
<Speed>1</Speed>
</c:Animation>
<c:Blend>
<Pose1>Deploy</Pose1>
<Pose2>Idle</Pose2>
<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/>
</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>
</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" ?>
<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>
<c:Lifetime>
<Lifetime>0.039999999105930328</Lifetime>
<Lifetime>0.08</Lifetime>
</c:Lifetime>
<c:Transform/>
</Components>
<Children>
<Entity name="PlaneRight">
<Entity name="Level1">
<Components>
<c:Model>
<Resource>Models/Effects/MuzzleFlash/Blue/PlaneRight.mesh</Resource>
<Shadow>false</Shadow>
<Transparent>true</Transparent>
</c:Model>
<c:Transform/>
</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 name="Cone1Outside">
<Entity name="Level2">
<Components>
<c:Model>
<Resource>Models/Effects/MuzzleFlash/Blue/Cone1Outside.mesh</Resource>
<Shadow>false</Shadow>
<Transparent>true</Transparent>
</c:Model>
<c:Transform/>
<c:Transform>
<Position X="0.000134464673" Y="8.11116188e-05" Z="-0.0197895896"/>
</c:Transform>
</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 name="Cone1Inside">
<Entity name="Level3">
<Components>
<c:Model>
<Resource>Models/Effects/MuzzleFlash/Blue/Cone1Inside.mesh</Resource>
<Shadow>false</Shadow>
<Transparent>true</Transparent>
</c:Model>
<c:Transform/>
<c:Transform>
<Position X="0.000216802931" Y="0.000130779619" Z="-0.0319075659"/>
</c:Transform>
</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 name="Cone2Outside">
<Entity name="Lights">
<Components>
<c:Model>
<Resource>Models/Effects/MuzzleFlash/Blue/Cone2Outside.mesh</Resource>
<Shadow>false</Shadow>
<Transparent>true</Transparent>
</c:Model>
<c:Transform/>
</Components>
<Children/>
</Entity>
<Entity name="Cone2Inside">
<Components>
<c:Model>
<Resource>Models/Effects/MuzzleFlash/Blue/Cone2Inside.mesh</Resource>
<Shadow>false</Shadow>
<Transparent>true</Transparent>
</c:Model>
<c:Transform/>
</Components>
<Children/>
</Entity>
<Entity name="PlaneUp">
<Components>
<c:Model>
<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:Model>
<Resource>Models/Effects/MuzzleFlash/Blue/PlaneDown.mesh</Resource>
<Shadow>false</Shadow>
<Transparent>true</Transparent>
</c:Model>
<c:Transform/>
</Components>
<Children/>
</Entity>
<Entity name="PlaneLeft">
<Components>
<c:Model>
<Resource>Models/Effects/MuzzleFlash/Blue/PlaneLeft.mesh</Resource>
<Shadow>false</Shadow>
<Transparent>true</Transparent>
</c:Model>
<c:Transform/>
</Components>
<Children/>
<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>
+111 -78
View File
@@ -9,93 +9,126 @@
</Components>
<Children>
<Entity name="PlaneRight">
<Entity name="Level1">
<Components>
<c:Model>
<Resource>Models/Effects/MuzzleFlash/Fire/PlaneRight.mesh</Resource>
<Shadow>false</Shadow>
<Transparent>true</Transparent>
</c:Model>
<c:Transform/>
</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 name="Cone1Outside">
<Entity name="Level2">
<Components>
<c:Model>
<Resource>Models/Effects/MuzzleFlash/Fire/Cone1Outside.mesh</Resource>
<Shadow>false</Shadow>
<Transparent>true</Transparent>
</c:Model>
<c:Transform/>
<c:Transform>
<Position X="0.000134464673" Y="8.11116188e-05" Z="-0.0197895896"/>
</c:Transform>
</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 name="Cone1Inside">
<Entity name="Level3">
<Components>
<c:Model>
<Resource>Models/Effects/MuzzleFlash/Fire/Cone1Inside.mesh</Resource>
<Shadow>false</Shadow>
<Transparent>true</Transparent>
</c:Model>
<c:Transform/>
<c:Transform>
<Position X="0.000216802931" Y="0.000130779619" Z="-0.0319075659"/>
</c:Transform>
</Components>
<Children/>
</Entity>
<Entity name="Cone2Outside">
<Components>
<c:Model>
<Resource>Models/Effects/MuzzleFlash/Fire/Cone2Outside.mesh</Resource>
<Shadow>false</Shadow>
<Transparent>true</Transparent>
</c:Model>
<c:Transform/>
</Components>
<Children/>
</Entity>
<Entity name="Cone2Inside">
<Components>
<c:Model>
<Resource>Models/Effects/MuzzleFlash/Fire/Cone2Inside.mesh</Resource>
<Shadow>false</Shadow>
<Transparent>true</Transparent>
</c:Model>
<c:Transform/>
</Components>
<Children/>
</Entity>
<Entity name="PlaneUp">
<Components>
<c:Model>
<Resource>Models/Effects/MuzzleFlash/Fire/PlaneUp.mesh</Resource>
<Shadow>false</Shadow>
<Transparent>true</Transparent>
</c:Model>
<c:Transform/>
</Components>
<Children/>
</Entity>
<Entity name="PlaneDown">
<Components>
<c:Model>
<Resource>Models/Effects/MuzzleFlash/Fire/PlaneDown.mesh</Resource>
<Shadow>false</Shadow>
<Transparent>true</Transparent>
</c:Model>
<c:Transform/>
</Components>
<Children/>
</Entity>
<Entity name="PlaneLeft">
<Components>
<c:Model>
<Resource>Models/Effects/MuzzleFlash/Fire/PlaneLeft.mesh</Resource>
<Shadow>false</Shadow>
<Transparent>true</Transparent>
</c:Model>
<c:Transform/>
</Components>
<Children/>
<Children>
<Entity name="PlaneLeft">
<Components>
<c:Model>
<GlowIntensity>2</GlowIntensity>
<Resource>Models/Effects/MuzzleFlash/Fire/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/Fire/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/Fire/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/Fire/PlaneDown.mesh</Resource>
<Shadow>false</Shadow>
<Transparent>true</Transparent>
</c:Model>
<c:Transform/>
</Components>
<Children/>
</Entity>
</Children>
</Entity>
</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" ?>
<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>
<c:Lifetime>
@@ -9,93 +9,126 @@
</Components>
<Children>
<Entity name="PlaneRight">
<Entity name="Level1">
<Components>
<c:Model>
<Resource>Models/Effects/MuzzleFlash/Red/PlaneRight.mesh</Resource>
<Shadow>false</Shadow>
<Transparent>true</Transparent>
</c:Model>
<c:Transform/>
</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 name="Cone1Outside">
<Entity name="Level2">
<Components>
<c:Model>
<Resource>Models/Effects/MuzzleFlash/Red/Cone1Outside.mesh</Resource>
<Shadow>false</Shadow>
<Transparent>true</Transparent>
</c:Model>
<c:Transform/>
<c:Transform>
<Position X="0.000134464673" Y="8.11116188e-05" Z="-0.0197895896"/>
</c:Transform>
</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 name="Cone1Inside">
<Entity name="Level3">
<Components>
<c:Model>
<Resource>Models/Effects/MuzzleFlash/Red/Cone1Inside.mesh</Resource>
<Shadow>false</Shadow>
<Transparent>true</Transparent>
</c:Model>
<c:Transform/>
<c:Transform>
<Position X="0.000216802931" Y="0.000130779619" Z="-0.0319075659"/>
</c:Transform>
</Components>
<Children/>
</Entity>
<Entity name="Cone2Outside">
<Components>
<c:Model>
<Resource>Models/Effects/MuzzleFlash/Red/Cone2Outside.mesh</Resource>
<Shadow>false</Shadow>
<Transparent>true</Transparent>
</c:Model>
<c:Transform/>
</Components>
<Children/>
</Entity>
<Entity name="Cone2Inside">
<Components>
<c:Model>
<Resource>Models/Effects/MuzzleFlash/Red/Cone2Inside.mesh</Resource>
<Shadow>false</Shadow>
<Transparent>true</Transparent>
</c:Model>
<c:Transform/>
</Components>
<Children/>
</Entity>
<Entity name="PlaneUp">
<Components>
<c:Model>
<Resource>Models/Effects/MuzzleFlash/Red/PlaneUp.mesh</Resource>
<Shadow>false</Shadow>
<Transparent>true</Transparent>
</c:Model>
<c:Transform/>
</Components>
<Children/>
</Entity>
<Entity name="PlaneDown">
<Components>
<c:Model>
<Resource>Models/Effects/MuzzleFlash/Red/PlaneDown.mesh</Resource>
<Shadow>false</Shadow>
<Transparent>true</Transparent>
</c:Model>
<c:Transform/>
</Components>
<Children/>
</Entity>
<Entity name="PlaneLeft">
<Components>
<c:Model>
<Resource>Models/Effects/MuzzleFlash/Red/PlaneLeft.mesh</Resource>
<Shadow>false</Shadow>
<Transparent>true</Transparent>
</c:Model>
<c:Transform/>
</Components>
<Children/>
<Children>
<Entity name="PlaneLeft">
<Components>
<c:Model>
<GlowIntensity>2</GlowIntensity>
<Resource>Models/Effects/MuzzleFlash/Red/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/Red/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/Red/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/Red/PlaneDown.mesh</Resource>
<Shadow>false</Shadow>
<Transparent>true</Transparent>
</c:Model>
<c:Transform/>
</Components>
<Children/>
</Entity>
</Children>
</Entity>
</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:Transform>
<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>
</Components>
@@ -140,6 +140,7 @@
<Pose1>Blend</Pose1>
<Pose2></Pose2>
</c:Blend>
<c:Unpickable/>
<c:Model>
<GlowIntensity>1.6000000238418579</GlowIntensity>
<Resource>Models/Characters/Assault/AssaultBluePose.mesh</Resource>
@@ -156,7 +157,7 @@
<Components>
<c:Animation>
<AnimationName>AssaultPoseF</AnimationName>
<Time>2.3915339445022532</Time>
<Time>1.725669683907423</Time>
<Play>true</Play>
</c:Animation>
<c:Transform/>
@@ -172,7 +173,7 @@
<Resource>Models/Weapons/Blue/AssaultWeaponBlue.mesh</Resource>
</c:Model>
<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"/>
</c:Transform>
</Components>
@@ -538,6 +539,7 @@
<Pose1>Blend</Pose1>
<Pose2></Pose2>
</c:Blend>
<c:Unpickable/>
<c:Model>
<GlowIntensity>1.6000000238418579</GlowIntensity>
<Resource>Models/Characters/Defender/DefenderBluePose.mesh</Resource>
@@ -554,7 +556,7 @@
<Components>
<c:Animation>
<AnimationName>DefenderPoseF</AnimationName>
<Time>1.5583721233469809</Time>
<Time>0.89250786275215077</Time>
<Play>true</Play>
</c:Animation>
<c:Transform/>
@@ -570,8 +572,8 @@
<Resource>Models/Weapons/Blue/DefenderWeaponBlue.mesh</Resource>
</c:Model>
<c:Transform>
<Position X="0.19607465" Y="0.705387294" Z="0.027300721"/>
<Orientation X="-1.39242768" Y="-0.0973876044" Z="0.332219124"/>
<Position X="0.195243329" Y="0.708130419" Z="0.0326478258"/>
<Orientation X="-1.39242756" Y="-0.0973875225" Z="0.332219273"/>
</c:Transform>
</Components>
<Children/>
@@ -827,22 +829,6 @@
<c:Transform/>
</Components>
<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">
<Components>
<c:Sprite>
@@ -874,6 +860,22 @@
</Components>
<Children/>
</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">
<Components>
<c:Sprite>
@@ -898,6 +900,7 @@
<Pose1>Blend</Pose1>
<Pose2></Pose2>
</c:Blend>
<c:Unpickable/>
<c:Model>
<GlowIntensity>1.6000000238418579</GlowIntensity>
<Resource>Models/Characters/Sniper/SniperBluePose.mesh</Resource>
@@ -914,7 +917,7 @@
<Components>
<c:Animation>
<AnimationName>SniperPoseF</AnimationName>
<Time>1.7914650667707797</Time>
<Time>1.1256008061759495</Time>
<Play>true</Play>
</c:Animation>
<c:Transform/>
@@ -930,8 +933,8 @@
<Resource>Models/Weapons/Blue/SecondaryWeaponBlue.mesh</Resource>
</c:Model>
<c:Transform>
<Position X="-0.045448564" Y="1.0650903" Z="-0.125484675"/>
<Orientation X="-1.50533819" Y="1.34000111" Z="-1.34724498"/>
<Position X="-0.0454485789" Y="1.06511343" Z="-0.125484645"/>
<Orientation X="-1.50533736" Y="1.34000039" Z="-1.34724438"/>
</c:Transform>
</Components>
<Children/>
@@ -1531,7 +1534,7 @@
<Entity name="RespawnTimer">
<Components>
<c:Text>
<Content>7</Content>
<Content>2</Content>
<Resource>Fonts/DroidSans.ttf,64</Resource>
<Color A="1" B="0" G="1" R="0.784313738"/>
</c:Text>
@@ -1919,6 +1922,60 @@
</Entity>
</Children>
</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>
</Entity>
</Children>
@@ -2042,6 +2099,7 @@
<Pose1>Blend</Pose1>
<Pose2></Pose2>
</c:Blend>
<c:Unpickable/>
<c:Model>
<GlowIntensity>1.6000000238418579</GlowIntensity>
<Resource>Models/Characters/Assault/AssaultRedPose.mesh</Resource>
@@ -2058,7 +2116,7 @@
<Components>
<c:Animation>
<AnimationName>AssaultPoseF</AnimationName>
<Time>1.1136462105269906</Time>
<Time>0.44778194993216047</Time>
<Play>true</Play>
</c:Animation>
<c:Transform/>
@@ -2074,7 +2132,7 @@
<Resource>Models/Weapons/Red/AssaultWeaponRed.mesh</Resource>
</c:Model>
<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"/>
</c:Transform>
</Components>
@@ -2440,6 +2498,7 @@
<Pose1>Blend</Pose1>
<Pose2></Pose2>
</c:Blend>
<c:Unpickable/>
<c:Model>
<GlowIntensity>1.6000000238418579</GlowIntensity>
<Resource>Models/Characters/Defender/DefenderRedPose.mesh</Resource>
@@ -2456,7 +2515,7 @@
<Components>
<c:Animation>
<AnimationName>DefenderPoseF</AnimationName>
<Time>1.213854831703582</Time>
<Time>0.54799057110875182</Time>
<Play>true</Play>
</c:Animation>
<c:Transform/>
@@ -2472,8 +2531,8 @@
<Resource>Models/Weapons/Red/DefenderWeaponRed.mesh</Resource>
</c:Model>
<c:Transform>
<Position X="0.195825815" Y="0.70610863" Z="0.0287085027"/>
<Orientation X="-1.39242768" Y="-0.097387448" Z="0.332219332"/>
<Position X="0.194819659" Y="0.710372686" Z="0.0368246883"/>
<Orientation X="-1.39242768" Y="-0.0973874852" Z="0.332219452"/>
</c:Transform>
</Components>
<Children/>
@@ -2800,6 +2859,7 @@
<Pose1>Blend</Pose1>
<Pose2></Pose2>
</c:Blend>
<c:Unpickable/>
<c:Model>
<GlowIntensity>1.6000000238418579</GlowIntensity>
<Resource>Models/Characters/Sniper/SniperRedPose.mesh</Resource>
@@ -2816,7 +2876,7 @@
<Components>
<c:Animation>
<AnimationName>SniperPoseF</AnimationName>
<Time>1.1306788315585941</Time>
<Time>0.46481457096376388</Time>
<Play>true</Play>
</c:Animation>
<c:Transform/>
@@ -2832,8 +2892,8 @@
<Resource>Models/Weapons/Red/SecondaryWeaponRed.mesh</Resource>
</c:Model>
<c:Transform>
<Position X="-0.0454485118" Y="1.06508994" Z="-0.12548466"/>
<Orientation X="-1.5053376" Y="1.34000039" Z="-1.34724426"/>
<Position X="-0.0454485677" Y="1.06916106" Z="-0.125484571"/>
<Orientation X="-1.50533819" Y="1.34000111" Z="-1.3472451"/>
</c:Transform>
</Components>
<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">
<Components>
<c:Sprite>
<DiffuseTexture>Textures/Weapons/Crosshair/SmallThickHoleDot.png</DiffuseTexture>
<GlowMap></GlowMap>
<DepthSort>false</DepthSort>
<Model>Models/Core/UnitQuad.mesh</Model>
<GlowMap></GlowMap>
<DiffuseTexture>Textures/Weapons/Crosshair/SmallThickHoleDot.png</DiffuseTexture>
</c:Sprite>
<c:Transform>
<Position X="0" Y="0" Z="0.200000003"/>
@@ -42,9 +43,10 @@
<Entity name="BackgroundHexagon">
<Components>
<c:Sprite>
<DiffuseTexture>Textures/Core/UnitHexagon.png</DiffuseTexture>
<GlowMap></GlowMap>
<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"/>
</c:Sprite>
<c:Transform>
@@ -61,9 +63,10 @@
<CapturePointNumber>3</CapturePointNumber>
</c:CapturePointHUD>
<c:Sprite>
<DiffuseTexture>Textures/Core/UnitHexagon_Rotated.png</DiffuseTexture>
<GlowMap></GlowMap>
<DepthSort>false</DepthSort>
<Model>Models/Core/UnitQuad.mesh</Model>
<GlowMap></GlowMap>
<DiffuseTexture>Textures/Core/UnitHexagon_Rotated.png</DiffuseTexture>
</c:Sprite>
<c:Transform>
<Position X="0" Y="0" Z="0.00999999978"/>
@@ -78,9 +81,10 @@
<Entity name="BackgroundHexagon">
<Components>
<c:Sprite>
<DiffuseTexture>Textures/Core/UnitHexagon.png</DiffuseTexture>
<GlowMap></GlowMap>
<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"/>
</c:Sprite>
<c:Transform>
@@ -98,9 +102,10 @@
<CapturePointNumber>4</CapturePointNumber>
</c:CapturePointHUD>
<c:Sprite>
<DiffuseTexture>Textures/Core/UnitHexagon_Rotated.png</DiffuseTexture>
<GlowMap></GlowMap>
<DepthSort>false</DepthSort>
<Model>Models/Core/UnitQuad.mesh</Model>
<GlowMap></GlowMap>
<DiffuseTexture>Textures/Core/UnitHexagon_Rotated.png</DiffuseTexture>
</c:Sprite>
<c:Transform>
<Position X="0" Y="0" Z="0.00999999978"/>
@@ -115,9 +120,10 @@
<Entity name="BackgroundHexagon">
<Components>
<c:Sprite>
<DiffuseTexture>Textures/Core/UnitHexagon.png</DiffuseTexture>
<GlowMap></GlowMap>
<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"/>
</c:Sprite>
<c:Transform>
@@ -134,9 +140,10 @@
<CapturePointNumber>2</CapturePointNumber>
</c:CapturePointHUD>
<c:Sprite>
<DiffuseTexture>Textures/Core/UnitHexagon_Rotated.png</DiffuseTexture>
<GlowMap></GlowMap>
<DepthSort>false</DepthSort>
<Model>Models/Core/UnitQuad.mesh</Model>
<GlowMap></GlowMap>
<DiffuseTexture>Textures/Core/UnitHexagon_Rotated.png</DiffuseTexture>
</c:Sprite>
<c:Transform>
<Position X="0" Y="0" Z="0.00999999978"/>
@@ -151,9 +158,10 @@
<Entity name="BackgroundHexagon">
<Components>
<c:Sprite>
<DiffuseTexture>Textures/Core/UnitHexagon.png</DiffuseTexture>
<GlowMap></GlowMap>
<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"/>
</c:Sprite>
<c:Transform>
@@ -170,9 +178,10 @@
<CapturePointNumber>1</CapturePointNumber>
</c:CapturePointHUD>
<c:Sprite>
<DiffuseTexture>Textures/Core/UnitHexagon_Rotated.png</DiffuseTexture>
<GlowMap></GlowMap>
<DepthSort>false</DepthSort>
<Model>Models/Core/UnitQuad.mesh</Model>
<GlowMap></GlowMap>
<DiffuseTexture>Textures/Core/UnitHexagon_Rotated.png</DiffuseTexture>
</c:Sprite>
<c:Transform>
<Position X="0" Y="0" Z="0.00999999978"/>
@@ -187,9 +196,10 @@
<Entity name="BackgroundHexagon">
<Components>
<c:Sprite>
<DiffuseTexture>Textures/Core/UnitHexagon.png</DiffuseTexture>
<GlowMap></GlowMap>
<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"/>
</c:Sprite>
<c:Transform>
@@ -205,9 +215,10 @@
</c:Fill>
<c:CapturePointHUD/>
<c:Sprite>
<DiffuseTexture>Textures/Core/UnitHexagon_Rotated.png</DiffuseTexture>
<GlowMap></GlowMap>
<DepthSort>false</DepthSort>
<Model>Models/Core/UnitQuad.mesh</Model>
<GlowMap></GlowMap>
<DiffuseTexture>Textures/Core/UnitHexagon_Rotated.png</DiffuseTexture>
</c:Sprite>
<c:Transform>
<Position X="0" Y="0" Z="0.00999999978"/>
@@ -234,7 +245,7 @@
<Components>
<c:Text>
<Content></Content>
<Resource>Fonts/DroidSans.ttf,64</Resource>
<Resource>Fonts/Hind-Edited.otf,64</Resource>
<Alignment>
<Right/>
</Alignment>
@@ -247,7 +258,7 @@
<Components>
<c:Text>
<Content></Content>
<Resource>Fonts/DroidSans.ttf,64</Resource>
<Resource>Fonts/Hind-Edited.otf,64</Resource>
<Alignment>
<Right/>
</Alignment>
@@ -262,7 +273,7 @@
<Components>
<c:Text>
<Content></Content>
<Resource>Fonts/DroidSans.ttf,64</Resource>
<Resource>Fonts/Hind-Edited.otf,64</Resource>
<Alignment>
<Right/>
</Alignment>
@@ -284,10 +295,11 @@
</c:Team>
<c:CapturePointArrowHUD/>
<c:Model>
<Resource>Models/Widgets/Arrows/Arrow5.mesh</Resource>
<Resource>Models/Widgets/Arrows/ArrowBlue.mesh</Resource>
</c:Model>
<c:Transform>
<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"/>
</c:Transform>
</Components>
@@ -307,12 +319,12 @@
<Percentage>1</Percentage>
<Color A="1" B="1" G="0" R="0"/>
</c:Fill>
<c:HealthHUD/>
<c:Text>
<Content>100/100</Content>
<Resource>Fonts/DroidSans.ttf,64</Resource>
<Color A="0.505882382" B="3.92156863" G="1.17647064" R="0"/>
<Color A="0.505882382" B="1.56862748" G="1.17647064" R="0"/>
</c:Text>
<c:HealthHUD/>
<c:Transform>
<Position X="0.0200000014" Y="-0.101000004" Z="0.00300000003"/>
<Orientation X="0" Y="0" Z="1.57070696"/>
@@ -329,8 +341,9 @@
</c:Fill>
<c:HealthHUD/>
<c:Sprite>
<DiffuseTexture>Textures/HealthHUD3.png</DiffuseTexture>
<Model>Models/Core/UnitQuad.mesh</Model>
<GlowMap></GlowMap>
<DiffuseTexture>Textures/HealthHUD3.png</DiffuseTexture>
<Color A="0.588235319" B="0" G="0" R="0"/>
</c:Sprite>
<c:Transform>
@@ -350,16 +363,17 @@
<Entity name="Assault">
<Components>
<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:Sprite>
<DiffuseTexture>Textures/Icons/Boosts/Assault-01.png</DiffuseTexture>
<GlowMap></GlowMap>
<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: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"/>
<Scale X="0.0399999991" Y="0.0399999991" Z="0.5"/>
</c:Transform>
@@ -369,16 +383,17 @@
<Entity name="Defender">
<Components>
<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:Sprite>
<DiffuseTexture>Textures/Icons/Boosts/Defender-01.png</DiffuseTexture>
<GlowMap></GlowMap>
<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: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"/>
<Scale X="0.0399999991" Y="0.0400000028" Z="0.165000007"/>
</c:Transform>
@@ -388,16 +403,17 @@
<Entity name="Sniper">
<Components>
<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:Sprite>
<DiffuseTexture>Textures/Icons/Boosts/Sniper-01.png</DiffuseTexture>
<GlowMap></GlowMap>
<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: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"/>
<Scale X="0.0400000028" Y="0.0400000028" Z="0.165000007"/>
</c:Transform>
@@ -413,15 +429,16 @@
<Color A="1" B="0.392156869" G="0.392156869" R="0.392156869"/>
</c:Fill>
<c:Sprite>
<DiffuseTexture>Textures/Icons/Abilities/Superman-01.png</DiffuseTexture>
<GlowMap></GlowMap>
<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:Transform>
<Position X="0.0250000004" Y="0.0100000007" Z="0"/>
<Orientation X="0" Y="0" Z="3.14159203"/>
<Scale X="0.0800000057" Y="0.0700000003" Z="1"/>
<Orientation X="0" Y="0" Z="1.57000005"/>
<Scale X="0.0800000057" Y="0.029000001" Z="1"/>
</c:Transform>
</Components>
<Children/>
+146 -114
View File
@@ -3,7 +3,7 @@
<Components>
<c:CapturePointGameMode>
<RespawnTime>3.6154132075906489</RespawnTime>
<RespawnTime>6.5024371606521605</RespawnTime>
</c:CapturePointGameMode>
<c:Transform>
<Position X="0" Y="-1" Z="0"/>
@@ -11,6 +11,15 @@
</Components>
<Children>
<Entity name="CamOrigin">
<Components>
<c:Camera/>
<c:Transform>
<Position X="0" Y="1" Z="0"/>
</c:Transform>
</Components>
<Children/>
</Entity>
<Entity name="AnimationTestOrigin">
<Components>
<c:Transform>
@@ -69,15 +78,6 @@
</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>
@@ -85,7 +85,7 @@
<Axis X="0" Y="1" Z="0"/>
</c:RaptorCopter>
<c:Transform>
<Orientation X="0" Y="2907.64526" Z="0"/>
<Orientation X="0" Y="2974.37671" Z="0"/>
</c:Transform>
</Components>
<Children>
@@ -105,6 +105,15 @@
</Entity>
</Children>
</Entity>
<Entity name="Light">
<Components>
<c:PointLight/>
<c:Transform>
<Position X="0" Y="0.663784981" Z="0"/>
</c:Transform>
</Components>
<Children/>
</Entity>
</Children>
</Entity>
</Children>
@@ -141,7 +150,7 @@
<Axis X="0" Y="1" Z="0"/>
</c:RaptorCopter>
<c:Transform>
<Orientation X="0" Y="9141.29785" Z="0"/>
<Orientation X="0" Y="9274.77051" Z="0"/>
</c:Transform>
</Components>
<Children>
@@ -194,7 +203,7 @@
</c:Model>
<c:Transform>
<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>
</Components>
<Children/>
@@ -222,7 +231,7 @@
<Axis X="1" Y="1" Z="1"/>
</c:RaptorCopter>
<c:Transform>
<Orientation X="17570.9531" Y="17570.9531" Z="17570.9531"/>
<Orientation X="17704.4414" Y="17704.4414" Z="17704.4414"/>
</c:Transform>
</Components>
<Children>
@@ -286,7 +295,7 @@
<Axis X="0" Y="1" Z="0"/>
</c:RaptorCopter>
<c:Transform>
<Orientation X="0" Y="17366.9492" Z="0"/>
<Orientation X="0" Y="17500.4375" Z="0"/>
</c:Transform>
</Components>
<Children>
@@ -318,7 +327,7 @@
<Axis X="0.699999988" Y="1" Z="0.300000012"/>
</c:RaptorCopter>
<c:Transform>
<Orientation X="12702.4932" Y="18094.3594" Z="5414.53027"/>
<Orientation X="12795.8896" Y="18227.8477" Z="5454.55518"/>
</c:Transform>
</Components>
<Children>
@@ -641,6 +650,52 @@
</c:Transform>
</Components>
<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">
<Components>
<c:Model>
@@ -668,7 +723,7 @@
<Axis X="0" Y="1" Z="0"/>
</c:RaptorCopter>
<c:Transform>
<Orientation X="0" Y="1205.41614" Z="0"/>
<Orientation X="0" Y="1272.14539" Z="0"/>
</c:Transform>
</Components>
<Children>
@@ -715,7 +770,7 @@
<Axis X="0" Y="1" Z="0"/>
</c:RaptorCopter>
<c:Transform>
<Orientation X="0" Y="1205.41614" Z="0"/>
<Orientation X="0" Y="1272.14539" Z="0"/>
</c:Transform>
</Components>
<Children>
@@ -775,7 +830,7 @@
<Axis X="0" Y="1" Z="0"/>
</c:RaptorCopter>
<c:Transform>
<Orientation X="0" Y="1205.41614" Z="0"/>
<Orientation X="0" Y="1272.14539" Z="0"/>
</c:Transform>
</Components>
<Children>
@@ -795,52 +850,6 @@
</Entity>
</Children>
</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">
<Components>
<c:Model>
@@ -868,7 +877,7 @@
<Axis X="0" Y="1" Z="0"/>
</c:RaptorCopter>
<c:Transform>
<Orientation X="0" Y="1205.41614" Z="0"/>
<Orientation X="0" Y="1272.14539" Z="0"/>
</c:Transform>
</Components>
<Children>
@@ -915,7 +924,7 @@
<Axis X="0" Y="1" Z="0"/>
</c:RaptorCopter>
<c:Transform>
<Orientation X="0" Y="1205.41614" Z="0"/>
<Orientation X="0" Y="1272.14539" Z="0"/>
</c:Transform>
</Components>
<Children>
@@ -962,7 +971,7 @@
<Axis X="0" Y="1" Z="0"/>
</c:RaptorCopter>
<c:Transform>
<Orientation X="0" Y="1205.41614" Z="0"/>
<Orientation X="0" Y="1272.14539" Z="0"/>
</c:Transform>
</Components>
<Children>
@@ -1027,7 +1036,6 @@
<Red/>
</Team>
</c:Team>
<c:Trigger/>
<c:Model>
<Resource>Models/Core/UnitCube.mesh</Resource>
<Color A="0.300000012" B="0" G="0" R="1"/>
@@ -1037,6 +1045,7 @@
<Position X="0" Y="2" Z="0"/>
<Scale X="8" Y="4" Z="8"/>
</c:Transform>
<c:Trigger/>
</Components>
<Children/>
</Entity>
@@ -1073,7 +1082,6 @@
<CapturePointNumber>1</CapturePointNumber>
</c:CapturePoint>
<c:Team/>
<c:Trigger/>
<c:Model>
<Resource>Models/Core/UnitCube.mesh</Resource>
<Color A="0.300000012" B="1" G="1" R="1"/>
@@ -1083,6 +1091,7 @@
<Position X="0" Y="2" Z="0"/>
<Scale X="8" Y="4" Z="8"/>
</c:Transform>
<c:Trigger/>
</Components>
<Children/>
</Entity>
@@ -1117,7 +1126,6 @@
<CapturePointNumber>2</CapturePointNumber>
</c:CapturePoint>
<c:Team/>
<c:Trigger/>
<c:Model>
<Resource>Models/Core/UnitCube.mesh</Resource>
<Color A="0.300000012" B="1" G="1" R="1"/>
@@ -1127,6 +1135,7 @@
<Position X="0" Y="2" Z="0"/>
<Scale X="8" Y="4" Z="8"/>
</c:Transform>
<c:Trigger/>
</Components>
<Children/>
</Entity>
@@ -1163,7 +1172,6 @@
<CapturePointNumber>3</CapturePointNumber>
</c:CapturePoint>
<c:Team/>
<c:Trigger/>
<c:Model>
<Resource>Models/Core/UnitCube.mesh</Resource>
<Color A="0.300000012" B="1" G="1" R="1"/>
@@ -1173,6 +1181,7 @@
<Position X="0" Y="2" Z="0"/>
<Scale X="8" Y="4" Z="8"/>
</c:Transform>
<c:Trigger/>
</Components>
<Children/>
</Entity>
@@ -1217,7 +1226,6 @@
<Blue/>
</Team>
</c:Team>
<c:Trigger/>
<c:Model>
<Resource>Models/Core/UnitCube.mesh</Resource>
<Color A="0.300000012" B="1" G="0" R="0"/>
@@ -1227,6 +1235,7 @@
<Position X="0" Y="2" Z="0"/>
<Scale X="8" Y="4" Z="8"/>
</c:Transform>
<c:Trigger/>
</Components>
<Children/>
</Entity>
@@ -1376,19 +1385,19 @@
<Axis X="0" Y="1" Z="0"/>
</c:RaptorCopter>
<c:Transform>
<Orientation X="0" Y="1739.14307" Z="0"/>
<Orientation X="0" Y="1805.87231" Z="0"/>
</c:Transform>
</Components>
<Children>
<Entity name="Asset">
<Components>
<c:ExplosionEffect>
<ColorByDistance>true</ColorByDistance>
<Velocity X="0.800000012" Y="0.0379999988" Z="0"/>
<TimeSinceDeath>1.5712751414989441</TimeSinceDeath>
<TimeSinceDeath>1.3579803859829696</TimeSinceDeath>
<ExplosionDuration>3.7999999523162842</ExplosionDuration>
<EndColor A="0" B="23.5294113" G="11.7647057" R="0"/>
<Randomness>true</Randomness>
<ColorByDistance>true</ColorByDistance>
</c:ExplosionEffect>
<c:Model>
<Resource>Models/Weapons/Blue/AssaultWeaponBlue.mesh</Resource>
@@ -1432,7 +1441,7 @@
<Axis X="0" Y="1" Z="0"/>
</c:RaptorCopter>
<c:Transform>
<Orientation X="0" Y="1739.14307" Z="0"/>
<Orientation X="0" Y="1805.87231" Z="0"/>
</c:Transform>
</Components>
<Children>
@@ -1441,7 +1450,7 @@
<c:ExplosionEffect>
<Velocity X="0.5" Y="1" Z="0"/>
<ExplosionOrigin X="0" Y="0.900000036" Z="0"/>
<TimeSinceDeath>0.85439856235552725</TimeSinceDeath>
<TimeSinceDeath>0.79164215554514783</TimeSinceDeath>
</c:ExplosionEffect>
<c:Model>
<Resource>Models/Characters/Assault/AssaultTPose.mesh</Resource>
@@ -1484,7 +1493,7 @@
<Axis X="0" Y="1" Z="0"/>
</c:RaptorCopter>
<c:Transform>
<Orientation X="0" Y="1739.14307" Z="0"/>
<Orientation X="0" Y="1805.87231" Z="0"/>
</c:Transform>
</Components>
<Children>
@@ -1494,12 +1503,12 @@
<AnimationName></AnimationName>
</c:Animation>
<c:ExplosionEffect>
<ColorByDistance>true</ColorByDistance>
<Velocity X="0.300000012" Y="2" Z="0"/>
<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"/>
<Randomness>true</Randomness>
<ColorByDistance>true</ColorByDistance>
</c:ExplosionEffect>
<c:Model>
<Resource>Models/Characters/Assault/AssaultAnimated.mesh</Resource>
@@ -1542,21 +1551,21 @@
<Axis X="0" Y="1" Z="0"/>
</c:RaptorCopter>
<c:Transform>
<Orientation X="0" Y="1746.92322" Z="0"/>
<Orientation X="0" Y="1813.65247" Z="0"/>
</c:Transform>
</Components>
<Children>
<Entity name="Asset">
<Components>
<c:ExplosionEffect>
<ColorByDistance>true</ColorByDistance>
<Velocity X="0" Y="0.699999988" Z="0"/>
<ExplosionOrigin X="0" Y="-1.10000002" Z="0"/>
<TimeSinceDeath>7.5223549108000043</TimeSinceDeath>
<TimeSinceDeath>7.7876951610054306</TimeSinceDeath>
<ExplosionDuration>10</ExplosionDuration>
<EndColor A="1" B="0" G="0" R="1"/>
<RandomnessScalar>3</RandomnessScalar>
<Randomness>true</Randomness>
<ColorByDistance>true</ColorByDistance>
</c:ExplosionEffect>
<c:Model>
<Resource>Models/Core/UnitSphere.mesh</Resource>
@@ -1600,20 +1609,20 @@
<Axis X="0" Y="1" Z="0"/>
</c:RaptorCopter>
<c:Transform>
<Orientation X="0" Y="1345.03772" Z="0"/>
<Orientation X="0" Y="1411.76697" Z="0"/>
</c:Transform>
</Components>
<Children>
<Entity name="Asset">
<Components>
<c:ExplosionEffect>
<ColorByDistance>true</ColorByDistance>
<Velocity X="6" Y="0.100000001" Z="0"/>
<ExplosionOrigin X="0" Y="-10" Z="0"/>
<TimeSinceDeath>0.39702717854592606</TimeSinceDeath>
<ExponentialAccelaration>true</ExponentialAccelaration>
<TimeSinceDeath>2.6357521906414902</TimeSinceDeath>
<ExplosionDuration>5</ExplosionDuration>
<Randomness>true</Randomness>
<ColorByDistance>true</ColorByDistance>
<ExponentialAccelaration>true</ExponentialAccelaration>
</c:ExplosionEffect>
<c:Model>
<Resource>Models/Assault.mesh</Resource>
@@ -1791,12 +1800,12 @@
<Entity name="Weapon">
<Components>
<c:ExplosionEffect>
<ColorByDistance>true</ColorByDistance>
<Velocity X="0.800000012" Y="0.0379999988" Z="0"/>
<TimeSinceDeath>1.5712751414989441</TimeSinceDeath>
<TimeSinceDeath>1.3579803859829696</TimeSinceDeath>
<ExplosionDuration>3.7999999523162842</ExplosionDuration>
<EndColor A="0" B="23.5294113" G="11.7647057" R="0"/>
<Randomness>true</Randomness>
<ColorByDistance>true</ColorByDistance>
</c:ExplosionEffect>
<c:Model>
<Resource>Models/AssaultWeaponRed.mesh</Resource>
@@ -1939,8 +1948,9 @@
<Entity name="Sprite1">
<Components>
<c:Sprite>
<DiffuseTexture>Textures/Props/FoliageDiff.png</DiffuseTexture>
<Model>Models/Core/UnitQuad.mesh</Model>
<GlowMap></GlowMap>
<DiffuseTexture>Textures/Props/FoliageDiff.png</DiffuseTexture>
</c:Sprite>
<c:Transform/>
</Components>
@@ -1949,8 +1959,9 @@
<Entity name="Sprite2">
<Components>
<c:Sprite>
<DiffuseTexture>Textures/Props/FoliageDiff.png</DiffuseTexture>
<Model>Models/Core/UnitQuad.mesh</Model>
<GlowMap></GlowMap>
<DiffuseTexture>Textures/Props/FoliageDiff.png</DiffuseTexture>
</c:Sprite>
<c:Transform>
<Position X="-0.177861199" Y="0" Z="-1.04673338"/>
@@ -1970,8 +1981,9 @@
<Entity name="BackgroundHexagon">
<Components>
<c:Sprite>
<DiffuseTexture>Textures/Core/UnitHexagon.png</DiffuseTexture>
<Model>Models/Core/UnitQuad.mesh</Model>
<GlowMap></GlowMap>
<DiffuseTexture>Textures/Core/UnitHexagon.png</DiffuseTexture>
<Color A="0.300000012" B="1" G="1" R="1"/>
</c:Sprite>
<c:Transform>
@@ -1988,8 +2000,9 @@
<CapturePointNumber>2</CapturePointNumber>
</c:CapturePointHUD>
<c:Sprite>
<DiffuseTexture>Textures/Core/UnitHexagon_Rotated.png</DiffuseTexture>
<Model>Models/Core/UnitQuad.mesh</Model>
<GlowMap></GlowMap>
<DiffuseTexture>Textures/Core/UnitHexagon_Rotated.png</DiffuseTexture>
</c:Sprite>
<c:Transform>
<Position X="0" Y="0" Z="0.00999999978"/>
@@ -2004,8 +2017,9 @@
<Entity name="BackgroundHexagon">
<Components>
<c:Sprite>
<DiffuseTexture>Textures/Core/UnitHexagon.png</DiffuseTexture>
<Model>Models/Core/UnitQuad.mesh</Model>
<GlowMap></GlowMap>
<DiffuseTexture>Textures/Core/UnitHexagon.png</DiffuseTexture>
<Color A="0.300000012" B="1" G="1" R="1"/>
</c:Sprite>
<c:Transform>
@@ -2022,8 +2036,9 @@
<CapturePointNumber>3</CapturePointNumber>
</c:CapturePointHUD>
<c:Sprite>
<DiffuseTexture>Textures/Core/UnitHexagon_Rotated.png</DiffuseTexture>
<Model>Models/Core/UnitQuad.mesh</Model>
<GlowMap></GlowMap>
<DiffuseTexture>Textures/Core/UnitHexagon_Rotated.png</DiffuseTexture>
</c:Sprite>
<c:Transform>
<Position X="0" Y="0" Z="0.00999999978"/>
@@ -2038,8 +2053,9 @@
<Entity name="BackgroundHexagon">
<Components>
<c:Sprite>
<DiffuseTexture>Textures/Core/UnitHexagon.png</DiffuseTexture>
<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"/>
</c:Sprite>
<c:Transform>
@@ -2057,8 +2073,9 @@
<CapturePointNumber>4</CapturePointNumber>
</c:CapturePointHUD>
<c:Sprite>
<DiffuseTexture>Textures/Core/UnitHexagon_Rotated.png</DiffuseTexture>
<Model>Models/Core/UnitQuad.mesh</Model>
<GlowMap></GlowMap>
<DiffuseTexture>Textures/Core/UnitHexagon_Rotated.png</DiffuseTexture>
</c:Sprite>
<c:Transform>
<Position X="0" Y="0" Z="0.00999999978"/>
@@ -2073,8 +2090,9 @@
<Entity name="BackgroundHexagon">
<Components>
<c:Sprite>
<DiffuseTexture>Textures/Core/UnitHexagon.png</DiffuseTexture>
<Model>Models/Core/UnitQuad.mesh</Model>
<GlowMap></GlowMap>
<DiffuseTexture>Textures/Core/UnitHexagon.png</DiffuseTexture>
<Color A="0.300000012" B="1" G="1" R="1"/>
</c:Sprite>
<c:Transform>
@@ -2091,8 +2109,9 @@
<CapturePointNumber>1</CapturePointNumber>
</c:CapturePointHUD>
<c:Sprite>
<DiffuseTexture>Textures/Core/UnitHexagon_Rotated.png</DiffuseTexture>
<Model>Models/Core/UnitQuad.mesh</Model>
<GlowMap></GlowMap>
<DiffuseTexture>Textures/Core/UnitHexagon_Rotated.png</DiffuseTexture>
</c:Sprite>
<c:Transform>
<Position X="0" Y="0" Z="0.00999999978"/>
@@ -2107,8 +2126,9 @@
<Entity name="BackgroundHexagon">
<Components>
<c:Sprite>
<DiffuseTexture>Textures/Core/UnitHexagon.png</DiffuseTexture>
<Model>Models/Core/UnitQuad.mesh</Model>
<GlowMap></GlowMap>
<DiffuseTexture>Textures/Core/UnitHexagon.png</DiffuseTexture>
<Color A="0.699999988" B="0" G="0" R="1"/>
</c:Sprite>
<c:Transform>
@@ -2124,8 +2144,9 @@
</c:Fill>
<c:CapturePointHUD/>
<c:Sprite>
<DiffuseTexture>Textures/Core/UnitHexagon_Rotated.png</DiffuseTexture>
<Model>Models/Core/UnitQuad.mesh</Model>
<GlowMap></GlowMap>
<DiffuseTexture>Textures/Core/UnitHexagon_Rotated.png</DiffuseTexture>
</c:Sprite>
<c:Transform>
<Position X="0" Y="0" Z="0.00999999978"/>
@@ -2173,7 +2194,7 @@
<Entity name="MenuOirign">
<Components>
<c:Transform>
<Position X="0" Y="0.600000024" Z="-1.86100006"/>
<Position X="-6.60000038" Y="0.600000024" Z="-1.86100006"/>
</c:Transform>
</Components>
<Children>
@@ -2203,8 +2224,9 @@
<Entity name="MenuBackground">
<Components>
<c:Sprite>
<DiffuseTexture>Textures/Core/ErrorTexture.png</DiffuseTexture>
<Model>Models/Core/UnitQuad.mesh</Model>
<GlowMap></GlowMap>
<DiffuseTexture>Textures/Core/ErrorTexture.png</DiffuseTexture>
</c:Sprite>
<c:Transform>
<Position X="0" Y="0" Z="-1"/>
@@ -2215,8 +2237,9 @@
<Components>
<c:Button/>
<c:Sprite>
<DiffuseTexture>Textures/Core/White.png</DiffuseTexture>
<Model>Models/Core/UnitQuad.mesh</Model>
<GlowMap></GlowMap>
<DiffuseTexture>Textures/Core/White.png</DiffuseTexture>
</c:Sprite>
<c:Transform>
<Position X="0" Y="0.388422519" Z="0.0627754927"/>
@@ -2244,8 +2267,9 @@
<Components>
<c:Button/>
<c:Sprite>
<DiffuseTexture>Textures/Core/White.png</DiffuseTexture>
<Model>Models/Core/UnitQuad.mesh</Model>
<GlowMap></GlowMap>
<DiffuseTexture>Textures/Core/White.png</DiffuseTexture>
</c:Sprite>
<c:Transform>
<Position X="0" Y="0.214031488" Z="0.0627754927"/>
@@ -2273,8 +2297,9 @@
<Components>
<c:Button/>
<c:Sprite>
<DiffuseTexture>Textures/Core/White.png</DiffuseTexture>
<Model>Models/Core/UnitQuad.mesh</Model>
<GlowMap></GlowMap>
<DiffuseTexture>Textures/Core/White.png</DiffuseTexture>
</c:Sprite>
<c:Transform>
<Position X="0" Y="0.0367300175" Z="0.0627754927"/>
@@ -2302,8 +2327,9 @@
<Components>
<c:Button/>
<c:Sprite>
<DiffuseTexture>Textures/Core/White.png</DiffuseTexture>
<Model>Models/Core/UnitQuad.mesh</Model>
<GlowMap></GlowMap>
<DiffuseTexture>Textures/Core/White.png</DiffuseTexture>
</c:Sprite>
<c:Transform>
<Position X="0" Y="-0.148274168" Z="0.0627754927"/>
@@ -2331,8 +2357,9 @@
<Components>
<c:Button/>
<c:Sprite>
<DiffuseTexture>Textures/Core/White.png</DiffuseTexture>
<Model>Models/Core/UnitQuad.mesh</Model>
<GlowMap></GlowMap>
<DiffuseTexture>Textures/Core/White.png</DiffuseTexture>
</c:Sprite>
<c:Transform>
<Position X="0" Y="-0.335298717" Z="0.0627754927"/>
@@ -2373,9 +2400,10 @@
<Entity name="MenuBackground">
<Components>
<c:Sprite>
<Model>Models/Core/UnitQuad.mesh</Model>
<GlowMap></GlowMap>
<DiffuseTexture>Textures/Core/ErrorTexture.png</DiffuseTexture>
<BlurBackground>true</BlurBackground>
<GlowMap></GlowMap>
<Color A="0" B="1" G="1" R="1"/>
</c:Sprite>
<c:Transform>
@@ -2387,8 +2415,9 @@
<Components>
<c:Button/>
<c:Sprite>
<DiffuseTexture>Textures/Core/White.png</DiffuseTexture>
<Model>Models/Core/UnitQuad.mesh</Model>
<GlowMap></GlowMap>
<DiffuseTexture>Textures/Core/White.png</DiffuseTexture>
<Visible>false</Visible>
</c:Sprite>
<c:Transform>
@@ -2418,8 +2447,9 @@
<Components>
<c:Button/>
<c:Sprite>
<DiffuseTexture>Textures/Core/White.png</DiffuseTexture>
<Model>Models/Core/UnitQuad.mesh</Model>
<GlowMap></GlowMap>
<DiffuseTexture>Textures/Core/White.png</DiffuseTexture>
<Visible>false</Visible>
</c:Sprite>
<c:Transform>
@@ -2449,8 +2479,9 @@
<Components>
<c:Button/>
<c:Sprite>
<DiffuseTexture>Textures/Core/White.png</DiffuseTexture>
<Model>Models/Core/UnitQuad.mesh</Model>
<GlowMap></GlowMap>
<DiffuseTexture>Textures/Core/White.png</DiffuseTexture>
</c:Sprite>
<c:Transform>
<Position X="0" Y="0.0159880854" Z="0.0627754927"/>
@@ -2478,8 +2509,9 @@
<Components>
<c:Button/>
<c:Sprite>
<DiffuseTexture>Textures/Core/White.png</DiffuseTexture>
<Model>Models/Core/UnitQuad.mesh</Model>
<GlowMap></GlowMap>
<DiffuseTexture>Textures/Core/White.png</DiffuseTexture>
</c:Sprite>
<c:Transform>
<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>
<c:Lifetime>
<Lifetime>0.10000000149011612</Lifetime>
<Lifetime>0.079999998211860657</Lifetime>
</c:Lifetime>
<c:Transform>
<Scale X="0" Y="1" Z="1"/>
</c:Transform>
<c:Transform/>
</Components>
<Children>
<Entity>
<Components>
<c:Sprite>
<DiffuseTexture>Textures/Effects/Ray.png</DiffuseTexture>
<Model>Models/Core/UnitQuad.mesh</Model>
<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: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"/>
<Scale X="1" Y="0.0700000003" Z="0"/>
</c:Transform>
</Components>
<Children/>
@@ -29,14 +30,17 @@
<Entity>
<Components>
<c:Sprite>
<DiffuseTexture>Textures/Effects/Ray.png</DiffuseTexture>
<Model>Models/Core/UnitQuad.mesh</Model>
<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: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"/>
<Scale X="1" Y="0.0700000003" Z="0"/>
</c:Transform>
</Components>
<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">
<Components>
<c:Transform/>
<c:NetworkComponent/>
<c:Transform>
<Orientation X="0" Y="4.71199989" Z="0"/>
</c:Transform>
</Components>
<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">
<Components>
<c:Spawner>
<EntityFile></EntityFile>
<EntityFile>Schema/Entities/ScoreBoard_Red.xml</EntityFile>
</c:Spawner>
<c:Transform>
<Position X="-16.5" Y="0" Z="0"/>
@@ -63,6 +20,56 @@
</Components>
<Children/>
</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>
</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>
</c:BoneAttachment>
<c:Model>
<GlowIntensity>1.5</GlowIntensity>
<Resource>Models/Weapons/Blue/AssaultWeaponBlue.mesh</Resource>
</c:Model>
<c:Transform>
<Position X="0.120748274" Y="-0.228437141" Z="-0.181454718"/>
<Orientation X="0.0102804415" Y="-0.00312523148" Z="0.0428143665"/>
<Position X="0.120748267" Y="-0.22843127" Z="-0.181454584"/>
<Orientation X="0.0102799674" Y="-0.00312504289" Z="0.0428140014"/>
</c:Transform>
</Components>
<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">
<Components>
<c:Spawner>
@@ -117,6 +106,38 @@
</Components>
<Children/>
</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>
</Entity>
<Entity name="AmmoHUD">
@@ -127,17 +148,18 @@
<InheritScale>true</InheritScale>
</c:BoneAttachment>
<c:Transform>
<Position X="0.0540266186" Y="-0.0954354703" Z="-0.255526125"/>
<Orientation X="0.000778362213" Y="0.0774229616" Z="0.00124316185"/>
<Scale X="0.25000003" Y="0.250000238" Z="0.500000417"/>
<Position X="0.0540265888" Y="-0.0954296291" Z="-0.255526036"/>
<Orientation X="0.000777846028" Y="0.0774231106" Z="0.00124278688"/>
<Scale X="0.25000006" Y="0.250000149" Z="0.500000238"/>
</c:Transform>
</Components>
<Children>
<Entity name="Background">
<Components>
<c:Sprite>
<DiffuseTexture>Textures/Core/UnitHexagon.png</DiffuseTexture>
<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>
@@ -191,6 +213,17 @@
</Entity>
</Children>
</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>
</Entity>
</Children>
@@ -27,7 +27,7 @@
<Entity name="Shield">
<Components>
<c:Animation>
<AnimationName>ActivateDeactivateShieldF</AnimationName>
<AnimationName>ActivateShieldF</AnimationName>
<Loop>false</Loop>
</c:Animation>
<c:Transform/>
@@ -146,60 +146,26 @@
</Entity>
</Children>
</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">
<Components>
<c:BoneAttachment>
<BoneName>R_Ammo_Joint</BoneName>
<ScaleOffset X="0.600000024" Y="0.600000024" Z="0.600000024"/>
<InheritScale>true</InheritScale>
</c:BoneAttachment>
<c:Transform>
<Position X="0.0540262833" Y="-0.0954347998" Z="-0.225546911"/>
<Orientation X="0.000683821447" Y="0.0774240941" Z="-1.56960988"/>
<Scale X="0.500000179" Y="0.500000179" Z="0.499999911"/>
<Orientation X="0.00124507793" Y="0.077417776" Z="0.00737103401"/>
<Scale X="0.300000012" Y="0.300000042" Z="0.299999952"/>
</c:Transform>
</Components>
<Children>
<Entity name="Background">
<Components>
<c:Sprite>
<DiffuseTexture>Textures/Core/UnitHexagon.png</DiffuseTexture>
<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>
@@ -253,6 +219,81 @@
</Entity>
</Children>
</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>
</Entity>
</Children>
@@ -12,7 +12,7 @@
<Entity name="WeaponMuzzle">
<Components>
<c:Spawner>
<EntityFile>Schema/Entities/RayBlue.xml</EntityFile>
<EntityFile>Schema/Entities/DefenderRayBlue.xml</EntityFile>
</c:Spawner>
<c:Transform>
<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:ServerIdentity" 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:ConfigBtnFloat" minOccurs="0"/>
</xs:all>
+2 -3
View File
@@ -29,10 +29,9 @@ void main()
vec4 color_result = Color * diffuseTexel;
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;
}
color_result = FillColor*diffuseTexel.a*(1 - fillResult) + color_result*fillResult;
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()
{
if (this->World == nullptr || this->ID == EntityID_Invalid) {
if (!Valid()) {
return EntityWrapper::Invalid;
} else {
return EntityWrapper(this->World, this->World->GetParent(this->ID));
@@ -36,6 +36,10 @@ EntityWrapper EntityWrapper::Parent()
EntityWrapper EntityWrapper::FirstParentByName(const std::string& parentEntityName)
{
if (!Valid()) {
return EntityWrapper::Invalid;
}
EntityWrapper entity = *this;
while (entity.Parent().Valid()) {
entity = entity.Parent();
@@ -48,6 +52,10 @@ EntityWrapper EntityWrapper::FirstParentByName(const std::string& parentEntityNa
EntityWrapper EntityWrapper::FirstChildByName(const std::string& name)
{
if (!Valid()) {
return EntityWrapper::Invalid;
}
return firstChildByNameRecursive(name, this->ID);
}
@@ -78,6 +86,10 @@ EntityWrapper EntityWrapper::FirstLevelChildByName(const std::string& name)
EntityWrapper EntityWrapper::FirstParentWithComponent(const std::string& componentType)
{
if (!Valid()) {
return EntityWrapper::Invalid;
}
EntityWrapper entity = *this;
while (entity.Parent().Valid()) {
entity = entity.Parent();
+19
View File
@@ -173,6 +173,9 @@ void Client::parseMessageType(Packet& packet)
case MessageType::RemoveWorld:
parseRemoveWorld(packet);
break;
case MessageType::KD:
parseKDEvent(packet);
break;
default:
break;
}
@@ -357,6 +360,22 @@ void Client::parseRemoveWorld(Packet & packet)
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)
{
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)
{
Events::KillDeath eKD;
auto entity = e;
eKD.Casualty = getPlayerIDFromEntityID(e.Player.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);
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;
}
+12 -6
View File
@@ -76,18 +76,18 @@ void AnimationSystem::UpdateAnimations(double dt)
Field<std::string> res = modelEntity["Model"]["Resource"];
model = ResourceManager::Load<::Model, true>(res);
} catch (const std::exception&) {
return;
continue;
}
Skeleton* skeleton = model->m_RawModel->m_Skeleton;
if (skeleton == nullptr) {
return;
continue;
}
const Skeleton::Animation* animation = skeleton->GetAnimation(animationC["AnimationName"]);
if (animation == nullptr) {
continue;;
continue;
}
double animationSpeed = (const double&)animationC["Speed"];
@@ -128,8 +128,8 @@ void AnimationSystem::UpdateAnimations(double dt)
void AnimationSystem::UpdateWeights(double dt)
{
for (auto it = m_AutoBlendQueues.begin(); it != m_AutoBlendQueues.end(); ) {
/* LOG_INFO("%s", it->first.Name().c_str());
it->second.PrintQueue();*/
//LOG_INFO("%s", it->first.Name().c_str());
//it->second.PrintQueue();
if(it->second.HasActiveBlendJob()) {
AutoBlendQueue::AutoBlendJob& blendJob = it->second.GetActiveBlendJob();
@@ -159,12 +159,13 @@ void AnimationSystem::UpdateWeights(double dt)
bool AnimationSystem::OnAutoAnimationBlend(Events::AutoAnimationBlend& e)
{
if (!e.RootNode.Valid()) {
LOG_ERROR("%s, RootNode invalid %s", e.NodeName, e.RootNode.Name().c_str());
return false;
}
if (!e.RootNode.HasComponent("Model")) {
LOG_ERROR("%s, RootNode has no model %s", e.NodeName, e.RootNode.Name().c_str());
return false;
}
@@ -172,11 +173,13 @@ bool AnimationSystem::OnAutoAnimationBlend(Events::AutoAnimationBlend& e)
try {
model = ResourceManager::Load<::Model, true>((std::string)e.RootNode["Model"]["Resource"]);
} catch (const std::exception&) {
LOG_ERROR("%s, RootNode model not finished loading %s", e.NodeName, e.RootNode.Name().c_str());
return false;
}
Skeleton* skeleton = model->m_RawModel->m_Skeleton;
if (skeleton == nullptr) {
LOG_ERROR("%s, RootNode skeleton invalid %s", e.NodeName, e.RootNode.Name().c_str());
return false;
}
@@ -184,6 +187,7 @@ bool AnimationSystem::OnAutoAnimationBlend(Events::AutoAnimationBlend& e)
if (skeleton->BlendTrees.find(e.RootNode) != skeleton->BlendTrees.end()) {
blendTree = skeleton->BlendTrees.at(e.RootNode);
} else {
LOG_ERROR("%s, No blendtree was found invalid %s", e.NodeName, e.RootNode.Name().c_str());
return false;
}
@@ -194,6 +198,7 @@ bool AnimationSystem::OnAutoAnimationBlend(Events::AutoAnimationBlend& e)
subTreeRoot = blendTree->GetSubTreeRoot(e.NodeName);
if (!subTreeRoot.Valid()) {
LOG_ERROR("%s, subTreeRoot invalid", e.NodeName);
return false;
}
@@ -238,6 +243,7 @@ bool AnimationSystem::OnAutoAnimationBlend(Events::AutoAnimationBlend& e)
subTreeRoot = entity;
if (!subTreeRoot.Valid()) {
LOG_ERROR("%s, subTreeRoot invalid", e.NodeName);
return false;
}
+1 -2
View File
@@ -414,7 +414,6 @@ void DrawFinalPass::ClearBuffer()
GLERROR("END");
}
void DrawFinalPass::OnWindowResize()
{
if (m_FinalPassFrameBuffer->MultiSampling() != (bool)m_MSAA) {
@@ -1336,7 +1335,7 @@ void DrawFinalPass::DrawToDepthStencilBuffer(std::list<std::shared_ptr<RenderJob
} else {
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 {
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);
if (modelJob) {
if(modelJob->NotPickable) {
continue;
}
int pickColor[2] = { m_ColorCounter[0], m_ColorCounter[1] };
PickingInfo pickInfo;
+12 -3
View File
@@ -67,10 +67,19 @@ void Renderer::InitializeWindow()
// Create a window
GLFWmonitor* monitor = nullptr;
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) {
LOG_ERROR("GLFW: Failed to create window");
exit(EXIT_FAILURE);
+4
View File
@@ -40,6 +40,8 @@
#include "Game/Systems/MainMenuSystem.h"
#include "Game/Systems/ServerListSystem.h"
#include "Game/Systems/StartSystem.h"
#include "Game/Systems/EndScreenSystem.h"
#include "Game/Systems/FadeSystem.h"
#include "Rendering/TextureSprite.h"
@@ -158,6 +160,8 @@ Game::Game(int argc, char* argv[])
m_SystemPipeline->AddSystem<SpectatorCameraSystem>(updateOrderLevel);
m_SystemPipeline->AddSystem<ServerListSystem>(updateOrderLevel, m_Renderer);
m_SystemPipeline->AddSystem<StartSystem>(updateOrderLevel);
m_SystemPipeline->AddSystem<EndScreenSystem>(updateOrderLevel);
m_SystemPipeline->AddSystem<FadeSystem>(updateOrderLevel);
// Populate Octree with collidables
++updateOrderLevel;
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 == "AssaultWeapon"
|| component.Info.Name == "DefenderWeapon"
|| component.Info.Name == "SidearmWeapon"
|| component.Info.Name == "Animation"
|| component.Info.Name == "Blend"
|| component.Info.Name == "BlendAdditive"
+10 -7
View File
@@ -23,26 +23,29 @@ void AbilityCooldownHUDSystem::Update(double dt)
if (!abilityEntity.Valid()) {
//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;
} else {
//If we have a shield ability, we set the right icon
abilityName = "ShieldAbility";
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 {
//If we do have a sprint ability, we change the icon
abilityName = "SprintAbility";
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 {
//If we have a dash ability, we set the icon to the correct one.
abilityName = "DashAbility";
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.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") {
maxAbilityCD = 0.0;
maxAbilityCD = 1.0;
currentAbilityCD = 1 - (bool)abilityEntity[abilityName]["Active"];
}
if (abilityName == "SprintAbility") {
maxAbilityCD = 0.0;
maxAbilityCD = 1.0;
currentAbilityCD = 1 - (bool)abilityEntity[abilityName]["Active"];
}
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 defenderEntity = entity.FirstChildByName("Defender");
EntityWrapper sniperEntity = entity.FirstChildByName("Sniper");
EntityWrapper player = entity.FirstParentWithComponent("Player");
if(assaultEntity.Valid()) {
if (assaultEntity.HasComponent("Fill")) {
EntityWrapper parentWithAssaultBoost = assaultEntity.FirstParentWithComponent("BoostAssault");
if (parentWithAssaultBoost.Valid()) {
assaultEntity["Fill"]["Percentage"] = 1.0;
EntityWrapper assaultBoost = player.FirstChildByName("BoostAssault");
if (assaultBoost.Valid()) {
(Field<double>)assaultEntity["Fill"]["Percentage"] = 1.0;
} else {
assaultEntity["Fill"]["Percentage"] = 0.0;
(Field<double>)assaultEntity["Fill"]["Percentage"] = 0.0;
}
}
}
if (defenderEntity.Valid()) {
if (defenderEntity.HasComponent("Fill")) {
EntityWrapper parentWithAssaultBoost = defenderEntity.FirstParentWithComponent("BoostDefender");
if (parentWithAssaultBoost.Valid()) {
defenderEntity["Fill"]["Percentage"] = 1.0;
EntityWrapper defenderBoost = player.FirstChildByName("BoostDefender");
if (defenderBoost.Valid()) {
(Field<double>)defenderEntity["Fill"]["Percentage"] = 1.0;
} else {
defenderEntity["Fill"]["Percentage"] = 0.0;
(Field<double>)defenderEntity["Fill"]["Percentage"] = 0.0;
}
}
}
if (sniperEntity.Valid()) {
if (sniperEntity.HasComponent("Fill")) {
EntityWrapper parentWithAssaultBoost = sniperEntity.FirstParentWithComponent("BoostSniper");
if (parentWithAssaultBoost.Valid()) {
sniperEntity["Fill"]["Percentage"] = 1.0;
EntityWrapper sniperBoost = player.FirstChildByName("BoostSniper");
if (sniperBoost.Valid()) {
(Field<double>)sniperEntity["Fill"]["Percentage"] = 1.0;
} 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)
{
if (e.Victim.ID == e.Inflictor.ID) {
if (e.Victim == e.Inflictor) {
return false;
}
if (!e.Victim.Valid() || !LocalPlayer.Valid()) {
if (!e.Victim.Valid() || !e.Inflictor.Valid()) {
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 ((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;
}
//get the XML file, example: "Schema/Entities/BoostclassName.xml"
std::string classXML = "Schema/Entities/" + className + ".xml";
if (className == "SidearmWeapon") { // give ammo
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
auto playerBoostAssaultEntity = e.Victim.FirstChildByName(className);
if (playerBoostAssaultEntity.Valid()) {
m_World->DeleteEntity(playerBoostAssaultEntity.ID);
//check if player already has a child with the component, if so delete that child
auto playerBoostAssaultEntity = e.Victim.FirstChildByName(className);
if (playerBoostAssaultEntity.Valid()) {
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;
}
@@ -55,14 +58,56 @@ bool BoostSystem::OnPlayerDamage(Events::PlayerDamage& e)
std::string BoostSystem::DetermineClass(EntityWrapper inflictorPlayer)
{
//determine the class based on what component the inflictor-player has
if (m_World->HasComponent(inflictorPlayer.ID, "DashAbility")) {
return "BoostAssault";
}
if (m_World->HasComponent(inflictorPlayer.ID, "ShieldAbility")) {
return "BoostDefender";
}
if (m_World->HasComponent(inflictorPlayer.ID, "SprintAbility")) {
return "BoostSniper";
if (inflictorPlayer.HasComponent("Player")) {
if ((std::string)inflictorPlayer["Player"]["CurrentWeapon"] == "AssaultWeapon") {
return "BoostAssault";
}
if ((std::string)inflictorPlayer["Player"]["CurrentWeapon"] == "DefenderWeapon") {
return "BoostDefender";
}
if ((std::string)inflictorPlayer["Player"]["CurrentWeapon"] == "SniperWeapon") {
return "BoostSniper";
}
if ((std::string)inflictorPlayer["Player"]["CurrentWeapon"] == "SidearmWeapon") {
return "SidearmWeapon";
}
}
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 (entity.HasComponent("Text")) {
Field<double> health = entityIDParent["Health"]["Health"];
Field<double> maxHealth = entityIDParent["Health"]["Health"];
double health = (const double&)entityIDParent["Health"]["Health"];
double maxHealth = (const double&)entityIDParent["Health"]["MaxHealth"];
std::string s = "";
s = s + std::to_string((int)health);
s = s + "/";
@@ -34,8 +34,8 @@ void HealthHUDSystem::Update(double dt)
}
if(entity.HasComponent("Fill")) {
Field<double> health = entityIDParent["Health"]["Health"];
Field<double> maxHealth = entityIDParent["Health"]["Health"];
double health = (const double&)entityIDParent["Health"]["Health"];
double maxHealth = (const double&)entityIDParent["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"]["Percentage"] = (double)healthPercentage;
+1 -1
View File
@@ -58,7 +58,7 @@ bool HealthSystem::OnPlayerHealthPickup(Events::PlayerHealthPickup& e)
ComponentWrapper cHealth = e.Player["Health"];
Field<double> health = cHealth["Health"];
health += e.HealthAmount;
health = std::min((double)health, (double)cHealth["MaxHealth"]);
health = std::min(*health, (const double&)cHealth["MaxHealth"]);
return true;
}
+34 -27
View File
@@ -7,6 +7,10 @@ void KillFeedSystem::Update(double dt)
return;
}
for (auto it = m_DeathQueue.begin(); it != m_DeathQueue.end(); it++) {
(*it).TimeToLive -= dt;
}
for (auto& killFeedComponent : *killFeeds) {
EntityWrapper entity = EntityWrapper(m_World, killFeedComponent.EntityID);
@@ -16,10 +20,7 @@ void KillFeedSystem::Update(double dt)
(Field<std::string>)child["Text"]["Content"] = "";
}
}
int feedIndex = 1;
for (auto it = m_DeathQueue.begin(); it != m_DeathQueue.end(); ) {
bool remove = false;
@@ -27,14 +28,19 @@ void KillFeedSystem::Update(double dt)
EntityWrapper child = entity.FirstChildByName("KillFeed" + std::to_string(feedIndex));
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) {
(Field<std::string>)child["Text"]["Content"] = "";
(Field<glm::vec4>)child["Text"]["Color"] = (*it).Color;
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")) {
int red = e.Player["Team"].Enum("Team", "Red");
int blue = e.Player["Team"].Enum("Team", "Blue");
if ((int)e.Player["Team"]["Team"] == red) {
kfInfo.Content = "Blue Player killed Red Player";
kfInfo.Color = glm::vec4(0.f, 0.2f, 1.f, 0.8f);
m_DeathQueue.push_back(kfInfo);
} 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.KillerName = e.KillerName;
info.KillerID = e.Killer;
info.KillerClass = e.KillerClass;
info.KillerTeam = e.KillerTeam;
if(info.KillerTeam == 2){
info.KillerColor = m_BlueColor;
} else if (info.KillerTeam == 3) {
info.KillerColor = m_RedColor;
}
if(m_DeathQueue.size() > 3) {
m_DeathQueue.pop_front();
info.VictimName = e.CasualtyName;
info.VictimID = e.Casualty;
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);
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);
m_PickupAtMaximum.erase(it);
break;
@@ -59,7 +59,7 @@ bool PickupSpawnSystem::OnTriggerTouch(Events::TriggerTouch& e)
return false;
}
//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 });
return false;
}
@@ -87,7 +87,7 @@ void PickupSpawnSystem::DoPickup(EntityWrapper &player, EntityWrapper &trigger)
if (!trigger.Valid()) {
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
Events::PlayerHealthPickup ePlayerHealthPickup;
+35 -11
View File
@@ -24,6 +24,8 @@ void PlayerMovementSystem::Update(double dt)
if (LocalPlayer.Valid()){
updateVelocity(LocalPlayer, dt);
}
m_SprintEffectTimer += dt;
if (m_SprintEffectTimer < 0.016f) {
return;
@@ -82,17 +84,15 @@ void PlayerMovementSystem::updateMovementControllers(double dt)
// Limit camera pitch so we don't break our necks
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
EntityWrapper playerModel = player.FirstChildByName("PlayerModel");
if (playerModel.Valid()) {
EntityWrapper aimPrimaryEntity = playerModel.FirstChildByName("Aim");
if(aimPrimaryEntity.Valid()){
if(aimPrimaryEntity.HasComponent("Animation")) {
float pitch = cameraOrientation.x();
double time = ((pitch + glm::half_pi<float>()) / glm::pi<float>());
(Field<double>)aimPrimaryEntity["Animation"]["Time"] = time;
}
}
setAim(playerModel, "SidearmWeapon", time);
setAim(playerModel, "AssaultWeapon", time);
setAim(playerModel, "DefenderWeapon", time);
}
}
@@ -314,6 +314,25 @@ void PlayerMovementSystem::updateVelocity(EntityWrapper player, double 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)
{
// 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)
{
EntityWrapper player(m_World, e.Player);
if (!player.Valid()){// || !IsClient || player.ID == LocalPlayer.ID) {
EntityWrapper eventPlayer(m_World, e.Player);
if (!eventPlayer.Valid()){// || IsServer || eventPlayer.ID == LocalPlayer.ID) {
return false;
}
// auto entityFile = ResourceManager::Load<EntityFile>("Schema/Entities/DashEffect.xml");
// EntityWrapper dashEffect = entityFile->MergeInto(m_World);
EntityWrapper playerModel = player.FirstChildByName("PlayerModel");
EntityWrapper playerModel = eventPlayer.FirstChildByName("PlayerModel");
for (auto& kv : m_PlayerInputControllers) {
EntityWrapper player = kv.first;
if(player != eventPlayer) {
continue;
}
auto& controller = kv.second;
if (!player.Valid()) {
+11 -2
View File
@@ -83,15 +83,24 @@ void PlayerSpawnSystem::Update(double dt)
if (it->Team == cSpawnerTeam["Team"].Enum("Spectator")) {
++playersSpectating;
break;
} else {
continue;
}
continue;
}
}
// 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!
EntityWrapper player = SpawnerSystem::Spawn(spawner, EntityWrapper::Invalid, "Player");
EntityWrapper player = SpawnerSystem::SpawnEntityFile(playerEntityFile, spawner, EntityWrapper::Invalid, "Player");
// Set the player team affiliation
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)
{
// 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
World* world = parent.World;
@@ -15,8 +26,6 @@ EntityWrapper SpawnerSystem::Spawn(EntityWrapper spawner, EntityWrapper parent /
world = spawner.World;
}
// Load the entity file and parse it
const std::string& entityFilePath = spawner["Spawner"]["EntityFile"];
EntityWrapper spawnedEntity;
try {
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
auto children = spawner.World->GetDirectChildren(spawner.ID);
std::vector<EntityWrapper> spawnPoints;
std::list<EntityWrapper> spawnPoints;
for (auto kv = children.first; kv != children.second; ++kv) {
const EntityID& child = kv->second;
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)
{
CheckBoost(cWeapon, wi);
// Start reloading automatically if at 0 mag ammo
Field<int> magAmmo = cWeapon["MagazineAmmo"];
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
@@ -36,8 +49,11 @@ void AssaultWeaponBehaviour::UpdateWeapon(ComponentWrapper cWeapon, WeaponInfo&
Field<int> magSize = cWeapon["MagazineSize"];
Field<int> ammo = cWeapon["Ammo"];
ammo = glm::max(0, ammo - (magSize - magAmmo));
magAmmo = glm::min(*magSize, *ammo);
int usedAmmo = glm::max(0, *magSize - *magAmmo);
magAmmo = glm::clamp(*ammo + *magAmmo, 0, *magSize);
ammo = glm::max(0, *ammo - usedAmmo);
isReloading = false;
if (wi.FirstPersonEntity.Valid()) {
wi.FirstPersonEntity.FirstChildByName("ViewModel")["Model"]["Visible"] = true;
@@ -74,7 +90,7 @@ void AssaultWeaponBehaviour::UpdateWeapon(ComponentWrapper cWeapon, WeaponInfo&
float animationWeight = glm::min(speed, movementSpeed) / movementSpeed;
EntityWrapper rootNode = wi.FirstPersonEntity;
if (rootNode.Valid()) {
EntityWrapper blend = rootNode.FirstChildByName("MovementBlend");
EntityWrapper blend = rootNode.FirstChildByName("MovementBlendAssault");
if (blend.Valid()) {
(Field<double>)blend["Blend"]["Weight"] = animationWeight;
}
@@ -166,6 +182,14 @@ void AssaultWeaponBehaviour::OnReload(ComponentWrapper cWeapon, WeaponInfo& wi)
void AssaultWeaponBehaviour::OnEquip(ComponentWrapper cWeapon, WeaponInfo& wi)
{
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)
@@ -216,16 +240,25 @@ void AssaultWeaponBehaviour::fireBullet(ComponentWrapper cWeapon, WeaponInfo& wi
}
// Tracer
EntityWrapper tracerSpawner = weaponModelEntity.FirstChildByName("WeaponMuzzle");
EntityWrapper tracerSpawner = weaponModelEntity.FirstChildByName("WeaponMuzzleRay");
if (tracerSpawner.Valid()) {
glm::vec3 origin = TransformSystem::AbsolutePosition(tracerSpawner);
glm::vec3 direction = glm::quat(TransformSystem::AbsoluteOrientationEuler(tracerSpawner)) * glm::vec3(0, 0, -1);
float distance = traceRayDistance(origin, direction);
EntityWrapper ray = SpawnerSystem::Spawn(tracerSpawner);
EntityWrapper ray = SpawnerSystem::Spawn(tracerSpawner, tracerSpawner);
if (ray.Valid()) {
((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
if (dealDamage(cWeapon, wi)) {
@@ -239,6 +272,25 @@ void AssaultWeaponBehaviour::fireBullet(ComponentWrapper cWeapon, WeaponInfo& wi
m_EventBroker->Publish(e);
}
}
// 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
playAnimationAndReturn(wi.FirstPersonEntity, "ActionBlend", "Fire");
@@ -321,3 +373,149 @@ bool AssaultWeaponBehaviour::dealDamage(ComponentWrapper cWeapon, WeaponInfo& wi
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)
{
CheckBoost(cWeapon, wi);
// Decrement reload timer
Field<double> reloadTimer = cWeapon["ReloadTimer"];
reloadTimer = glm::max(0.0, reloadTimer - dt);
@@ -37,6 +38,16 @@ void DefenderWeaponBehaviour::UpdateWeapon(ComponentWrapper cWeapon, WeaponInfo&
} else {
isReloading = false;
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"];
Field<double> reloadTimer = cWeapon["ReloadTimer"];
Field<double> reloadTimer = cWeapon["ReloadTimer"];
// Start reload
isReloading = true;
@@ -114,6 +125,16 @@ void DefenderWeaponBehaviour::OnReload(ComponentWrapper cWeapon, WeaponInfo& wi)
eBlendLoop.AnimationEntity = wi.FirstPersonEntity.FirstChildByName("ReloadStart");
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)
@@ -132,27 +153,81 @@ bool DefenderWeaponBehaviour::OnInputCommand(ComponentWrapper cWeapon, WeaponInf
EntityWrapper attachment = wi.Player.FirstChildByName("ShieldAttachment");
if (attachment.Valid()) {
if (e.Value > 0) {
if(wi.Player.Valid()) {
if(wi.Player.HasComponent("ShieldAbility")) {
(Field<bool>)wi.Player["ShieldAbility"]["Active"] = true;
}
}
if (IsServer) {
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) {
EntityWrapper root = wi.FirstPersonEntity;
if (root.Valid()) {
EntityWrapper animationNode = root.FirstChildByName("Shield");
if (animationNode.Valid()) {
Events::AutoAnimationBlend eFireBlend;
eFireBlend.RootNode = root;
eFireBlend.NodeName = "Shield";
eFireBlend.Restart = true;
eFireBlend.Start = true;
m_EventBroker->Publish(eFireBlend);
Events::AutoAnimationBlend eShieldBlend;
eShieldBlend.RootNode = root;
eShieldBlend.NodeName = "Shield";
eShieldBlend.Restart = true;
eShieldBlend.Start = true;
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 {
attachment.DeleteChildren();
if (wi.Player.Valid()) {
if (wi.Player.HasComponent("ShieldAbility")) {
(Field<bool>)wi.Player["ShieldAbility"]["Active"] = false;
}
}
if (IsClient) {
EntityWrapper root = wi.FirstPersonEntity;
if (root.Valid()) {
@@ -166,6 +241,26 @@ bool DefenderWeaponBehaviour::OnInputCommand(ComponentWrapper cWeapon, WeaponInf
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;
}
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)
{
cWeapon["FireCooldown"] = 60.0 / (double)cWeapon["RPM"];
@@ -190,70 +297,54 @@ void DefenderWeaponBehaviour::fireShell(ComponentWrapper cWeapon, WeaponInfo& wi
magAmmo -= 1;
}
int numPellets = cWeapon["NumPellets"];
float spreadAngle = cWeapon["SpreadAngle"];
std::uniform_real_distribution<float> randomSpreadAngle(-spreadAngle, spreadAngle);
// 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)));
// We can't really do any valuable calculations without a valid camera
if (!m_CurrentCamera.Valid()) {
return;
}
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
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;
}
}
}
// 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);
}
}
//if (IsClient) {
// EntityWrapper camera = wi.Player.FirstChildByName("Camera");
// if (camera.Valid()) {
// glm::vec3& cameraOrientation = camera["Transform"]["Orientation"];
// float viewPunch = cWeapon["ViewPunch"];
// float maxTravelAngle = cWeapon["MaxTravelAngle"];
// float& currentTravel = cWeapon["CurrentTravel"];
// if (currentTravel < maxTravelAngle) {
// float change = viewPunch;
// if (currentTravel + change > maxTravelAngle) {
// change = maxTravelAngle - currentTravel;
// }
// cameraOrientation.x += change;
// currentTravel += change;
// }
// }
//}
// Play animation
playAnimationAndReturn(wi.FirstPersonEntity, "FinalBlend", "Fire");
playAnimationAndReturn(wi.ThirdPersonPlayerModel, "FinalBlend", "Fire");
// Sound
Events::PlaySoundOnEntity e;
@@ -262,7 +353,63 @@ void DefenderWeaponBehaviour::fireShell(ComponentWrapper cWeapon, WeaponInfo& wi
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
if (!IsClient) {
@@ -278,47 +425,76 @@ void DefenderWeaponBehaviour::dealDamage(ComponentWrapper cWeapon, WeaponInfo& w
if (!wi.Player.Valid()) {
return;
}
glm::vec3 maxRange = direction * 2.f;
EntityWrapper camera = wi.Player.FirstChildByName("Camera");
glm::vec3 cameraPosition = TransformSystem::AbsolutePosition(camera);
if (!camera.Valid()) {
return;
}
Rectangle screenResolution = m_Renderer->GetViewportSize();
glm::vec2 centerScreen = glm::vec2(screenResolution.Width / 2, screenResolution.Height / 2);
glm::vec2 screenCoords = cameraFromEntity(m_CurrentCamera).WorldToScreen(cameraPosition + maxRange, m_Renderer->GetViewportSize());
PickData pickData = m_Renderer->Pick(centerScreen + screenCoords);
EntityWrapper victim(m_World, pickData.Entity);
if (!victim.Valid()) {
return;
// Convert the spread angle to screen coordinates, taking FOV into account
Rectangle res = m_Renderer->GetViewportSize();
float spreadAngle = glm::radians((float)cWeapon["SpreadAngle"]);
float nearClip = (double)m_CurrentCamera["Camera"]["NearClip"];
float farClip = (double)m_CurrentCamera["Camera"]["FarClip"];
float yFOV = glm::radians((double)m_CurrentCamera["Camera"]["FOV"]);
//float yRefFOV = glm::radians(59.f);
//float yRef = glm::tan(yRefFOV) * nearClip;
//float yRatio = yRef / (glm::tan(yFOV) * nearClip);
//float yMax = (yRatio / 2.f) * spreadAngle * (res.Height / 2.f);
float yRefFOV = glm::radians(59.f);
float yRef = glm::tan(yRefFOV) * nearClip;
float yRatio = yRef / (glm::tan(yFOV) * nearClip);
float yMax = yRatio * (glm::tan(spreadAngle) * (farClip - nearClip)) * glm::pi<float>(); // ????? Good enough????
LOG_DEBUG("Ratio: %f", yRatio);
LOG_DEBUG("fatClip: %f", farClip);
LOG_DEBUG("yMax: %f", yMax);
double pelletDamage = (double)cWeapon["BaseDamage"] / pattern.size();
// Pick!
std::unordered_map<EntityWrapper, double> damageSum;
glm::vec2 screenCenter(res.Width / 2.f, res.Height / 2.f);
for (auto& pellet : pattern) {
glm::vec2 pickCoord = screenCenter + (pellet * glm::vec2(yMax, yMax));
PickData pick = m_Renderer->Pick(pickCoord);
EntityWrapper victim(m_World, pick.Entity);
if (!victim.Valid()) {
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);
}
// Don't let us shoot ourselves in the foot somehow
if (victim == LocalPlayer) {
return;
// Deal damage!
for (auto& kv : damageSum) {
// Deal damage!
Events::PlayerDamage ePlayerDamage;
ePlayerDamage.Inflictor = wi.Player;
ePlayerDamage.Victim = kv.first;
ePlayerDamage.Damage = kv.second;
m_EventBroker->Publish(ePlayerDamage);
LOG_DEBUG("Dealt %f damage to #%i", kv.second, kv.first.ID);
}
// Only care about players being hit
if (!victim.HasComponent("Player")) {
victim = victim.FirstParentWithComponent("Player");
}
if (!victim.Valid()) {
return;
}
// Check for friendly fire
if ((ComponentInfo::EnumType)victim["Team"]["Team"] == (ComponentInfo::EnumType)wi.Player["Team"]["Team"]) {
return;
}
// Deal damage!
Events::PlayerDamage ePlayerDamage;
ePlayerDamage.Inflictor = wi.Player;
ePlayerDamage.Victim = victim;
ePlayerDamage.Damage = damage;
m_EventBroker->Publish(ePlayerDamage);
LOG_DEBUG("Damage: %f", damage);
}
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"]));
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)
{
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)) {
fireBullet(cWeapon, wi);
}
@@ -32,9 +87,78 @@ void SidearmWeaponBehaviour::OnCeasePrimaryFire(ComponentWrapper cWeapon, Weapon
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)
{
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)
@@ -51,27 +175,369 @@ void SidearmWeaponBehaviour::fireBullet(ComponentWrapper cWeapon, WeaponInfo& wi
{
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
EntityWrapper weaponModelEntity = getRelevantWeaponEntity(wi);
if (!weaponModelEntity.Valid()) {
return;
}
// Tracer
EntityWrapper tracerSpawner = weaponModelEntity.FirstChildByName("WeaponMuzzle");
//Tracer
EntityWrapper tracerSpawner = weaponModelEntity.FirstChildByName("WeaponMuzzleRay");
if (tracerSpawner.Valid()) {
glm::vec3 origin = TransformSystem::AbsolutePosition(tracerSpawner);
glm::vec3 direction = TransformSystem::AbsoluteOrientation(tracerSpawner) * glm::vec3(0, 0, -1);
float distance = traceRayDistance(origin, direction);
EntityWrapper ray = SpawnerSystem::Spawn(tracerSpawner);
((Field<glm::vec3>)ray["Transform"]["Scale"]).z(distance / 100.f);
EntityWrapper ray = SpawnerSystem::Spawn(tracerSpawner, tracerSpawner);
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 triggerHeld = cWeapon["TriggerHeld"];
Field<double> cooldown = cWeapon["FireCooldown"];
// TODO: Ammo checks
return triggerHeld && cooldown <= 0.0;
}
bool cooldownPassed = (double)cWeapon["FireCooldown"] <= 0.0;
bool isNotReloading = !(bool)cWeapon["IsReloading"];
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();
}
}