AmmoSharing beta
This commit is contained in:
@@ -4,6 +4,8 @@
|
|||||||
#include "WeaponBehaviour.h"
|
#include "WeaponBehaviour.h"
|
||||||
#include "Collision/Collision.h"
|
#include "Collision/Collision.h"
|
||||||
#include "Core/EPlayerDamage.h"
|
#include "Core/EPlayerDamage.h"
|
||||||
|
#include "Sound/EPlaySoundOnEntity.h"
|
||||||
|
#include "Rendering/EAutoAnimationBlend.h"
|
||||||
|
|
||||||
class SidearmWeaponBehaviour : public WeaponBehaviour<SidearmWeaponBehaviour>
|
class SidearmWeaponBehaviour : public WeaponBehaviour<SidearmWeaponBehaviour>
|
||||||
{
|
{
|
||||||
@@ -18,6 +20,7 @@ public:
|
|||||||
void UpdateWeapon(ComponentWrapper cWeapon, WeaponInfo& wi, double dt) override;
|
void UpdateWeapon(ComponentWrapper cWeapon, WeaponInfo& wi, double dt) override;
|
||||||
void OnPrimaryFire(ComponentWrapper cWeapon, WeaponInfo& wi) override;
|
void OnPrimaryFire(ComponentWrapper cWeapon, WeaponInfo& wi) override;
|
||||||
void OnCeasePrimaryFire(ComponentWrapper cWeapon, WeaponInfo& wi) override;
|
void OnCeasePrimaryFire(ComponentWrapper cWeapon, WeaponInfo& wi) override;
|
||||||
|
void OnReload(ComponentWrapper cWeapon, WeaponInfo& wi) override;
|
||||||
void OnEquip(ComponentWrapper cWeapon, WeaponInfo& wi) override;
|
void OnEquip(ComponentWrapper cWeapon, WeaponInfo& wi) override;
|
||||||
void OnHolster(ComponentWrapper cWeapon, WeaponInfo& wi) override;
|
void OnHolster(ComponentWrapper cWeapon, WeaponInfo& wi) override;
|
||||||
|
|
||||||
@@ -32,6 +35,15 @@ private:
|
|||||||
// Utility
|
// Utility
|
||||||
bool canFire(ComponentWrapper cWeapon);
|
bool canFire(ComponentWrapper cWeapon);
|
||||||
bool playerInFirstPerson(EntityWrapper player);
|
bool playerInFirstPerson(EntityWrapper player);
|
||||||
|
|
||||||
|
bool dealDamage(ComponentWrapper cWeapon, WeaponInfo& wi);
|
||||||
|
void giveAmmo(ComponentWrapper cWeapon, WeaponInfo& wi, EntityWrapper receiver);
|
||||||
|
|
||||||
|
|
||||||
|
void CheckAmmo(ComponentWrapper cWeapon, WeaponInfo& wi);
|
||||||
|
void RemoveFrindlyAmmoHUD(WeaponInfo& wi);
|
||||||
|
|
||||||
|
|
||||||
//float traceRayDistance(glm::vec3 origin, glm::vec3 direction);
|
//float traceRayDistance(glm::vec3 origin, glm::vec3 direction);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -11,6 +11,7 @@
|
|||||||
<EquipTime>0.5</EquipTime>
|
<EquipTime>0.5</EquipTime>
|
||||||
<TriggerHeld>false</TriggerHeld>
|
<TriggerHeld>false</TriggerHeld>
|
||||||
<FireCooldown>0</FireCooldown>
|
<FireCooldown>0</FireCooldown>
|
||||||
|
<ReloadQueued>false</ReloadQueued>
|
||||||
<IsReloading>false</IsReloading>
|
<IsReloading>false</IsReloading>
|
||||||
<ReloadTimer>0</ReloadTimer>
|
<ReloadTimer>0</ReloadTimer>
|
||||||
</SidearmWeapon>
|
</SidearmWeapon>
|
||||||
@@ -44,6 +44,7 @@
|
|||||||
</xs:element>
|
</xs:element>
|
||||||
<xs:element name="TriggerHeld" type="t:bool" minOccurs="0"/>
|
<xs:element name="TriggerHeld" type="t:bool" minOccurs="0"/>
|
||||||
<xs:element name="FireCooldown" type="t:double" minOccurs="0"/>
|
<xs:element name="FireCooldown" type="t:double" minOccurs="0"/>
|
||||||
|
<xs:element name="ReloadQueued" type="t:bool" minOccurs="0"/>
|
||||||
<xs:element name="IsReloading" type="t:bool" minOccurs="0"/>
|
<xs:element name="IsReloading" type="t:bool" minOccurs="0"/>
|
||||||
<xs:element name="ReloadTimer" type="t:double" minOccurs="0"/>
|
<xs:element name="ReloadTimer" type="t:double" minOccurs="0"/>
|
||||||
</xs:all>
|
</xs:all>
|
||||||
|
|||||||
@@ -0,0 +1,49 @@
|
|||||||
|
<?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.119999997" Y="0.119999997" Z="0.119999997"/>
|
||||||
|
</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="3.92156863" G="0" R="0.392156869"/>
|
||||||
|
</c:Text>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0" Y="-0.0141239492" Z="0"/>
|
||||||
|
<Scale X="0.0599999987" Y="0.0599999987" Z="0.0599999987"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
|
||||||
|
</Entity>
|
||||||
@@ -14,12 +14,8 @@
|
|||||||
</c:Team>
|
</c:Team>
|
||||||
<c:Collidable/>
|
<c:Collidable/>
|
||||||
<c:DashAbility/>
|
<c:DashAbility/>
|
||||||
<c:DefenderWeapon>
|
|
||||||
<Slot>
|
|
||||||
<Secondary/>
|
|
||||||
</Slot>
|
|
||||||
</c:DefenderWeapon>
|
|
||||||
<c:DoubleJump/>
|
<c:DoubleJump/>
|
||||||
|
<c:SidearmWeapon/>
|
||||||
<c:Health/>
|
<c:Health/>
|
||||||
<c:NetworkComponent/>
|
<c:NetworkComponent/>
|
||||||
<c:Physics>
|
<c:Physics>
|
||||||
@@ -30,7 +26,6 @@
|
|||||||
<CurrentWeapon></CurrentWeapon>
|
<CurrentWeapon></CurrentWeapon>
|
||||||
</c:Player>
|
</c:Player>
|
||||||
<c:Transform>
|
<c:Transform>
|
||||||
<Position X="-0.300000012" Y="0.0270000007" Z="1.88267219"/>
|
|
||||||
<Orientation X="0" Y="-0" Z="0"/>
|
<Orientation X="0" Y="-0" Z="0"/>
|
||||||
</c:Transform>
|
</c:Transform>
|
||||||
</Components>
|
</Components>
|
||||||
@@ -70,9 +65,10 @@
|
|||||||
<Entity name="Crosshair">
|
<Entity name="Crosshair">
|
||||||
<Components>
|
<Components>
|
||||||
<c:Sprite>
|
<c:Sprite>
|
||||||
<DiffuseTexture>Textures/Weapons/Crosshair/SmallThickHoleDot.png</DiffuseTexture>
|
|
||||||
<GlowMap></GlowMap>
|
|
||||||
<DepthSort>false</DepthSort>
|
<DepthSort>false</DepthSort>
|
||||||
|
<Model>Models/Core/UnitQuad.mesh</Model>
|
||||||
|
<GlowMap></GlowMap>
|
||||||
|
<DiffuseTexture>Textures/Weapons/Crosshair/SmallThickHoleDot.png</DiffuseTexture>
|
||||||
</c:Sprite>
|
</c:Sprite>
|
||||||
<c:Transform>
|
<c:Transform>
|
||||||
<Position X="0" Y="0" Z="0.200000003"/>
|
<Position X="0" Y="0" Z="0.200000003"/>
|
||||||
@@ -101,8 +97,9 @@
|
|||||||
<Entity name="BackgroundHexagon">
|
<Entity name="BackgroundHexagon">
|
||||||
<Components>
|
<Components>
|
||||||
<c:Sprite>
|
<c:Sprite>
|
||||||
<DiffuseTexture>Textures/Core/UnitHexagon.png</DiffuseTexture>
|
<Model>Models/Core/UnitQuad.mesh</Model>
|
||||||
<GlowMap></GlowMap>
|
<GlowMap></GlowMap>
|
||||||
|
<DiffuseTexture>Textures/Core/UnitHexagon.png</DiffuseTexture>
|
||||||
<Color A="0.300000012" B="1" G="1" R="1"/>
|
<Color A="0.300000012" B="1" G="1" R="1"/>
|
||||||
</c:Sprite>
|
</c:Sprite>
|
||||||
<c:Transform>
|
<c:Transform>
|
||||||
@@ -119,8 +116,9 @@
|
|||||||
<CapturePointNumber>2</CapturePointNumber>
|
<CapturePointNumber>2</CapturePointNumber>
|
||||||
</c:CapturePointHUD>
|
</c:CapturePointHUD>
|
||||||
<c:Sprite>
|
<c:Sprite>
|
||||||
<DiffuseTexture>Textures/Core/UnitHexagon_Rotated.png</DiffuseTexture>
|
<Model>Models/Core/UnitQuad.mesh</Model>
|
||||||
<GlowMap></GlowMap>
|
<GlowMap></GlowMap>
|
||||||
|
<DiffuseTexture>Textures/Core/UnitHexagon_Rotated.png</DiffuseTexture>
|
||||||
</c:Sprite>
|
</c:Sprite>
|
||||||
<c:Transform>
|
<c:Transform>
|
||||||
<Position X="0" Y="0" Z="0.00999999978"/>
|
<Position X="0" Y="0" Z="0.00999999978"/>
|
||||||
@@ -135,8 +133,9 @@
|
|||||||
<Entity name="BackgroundHexagon">
|
<Entity name="BackgroundHexagon">
|
||||||
<Components>
|
<Components>
|
||||||
<c:Sprite>
|
<c:Sprite>
|
||||||
<DiffuseTexture>Textures/Core/UnitHexagon.png</DiffuseTexture>
|
<Model>Models/Core/UnitQuad.mesh</Model>
|
||||||
<GlowMap></GlowMap>
|
<GlowMap></GlowMap>
|
||||||
|
<DiffuseTexture>Textures/Core/UnitHexagon.png</DiffuseTexture>
|
||||||
<Color A="0.300000012" B="1" G="1" R="1"/>
|
<Color A="0.300000012" B="1" G="1" R="1"/>
|
||||||
</c:Sprite>
|
</c:Sprite>
|
||||||
<c:Transform>
|
<c:Transform>
|
||||||
@@ -153,8 +152,9 @@
|
|||||||
<CapturePointNumber>3</CapturePointNumber>
|
<CapturePointNumber>3</CapturePointNumber>
|
||||||
</c:CapturePointHUD>
|
</c:CapturePointHUD>
|
||||||
<c:Sprite>
|
<c:Sprite>
|
||||||
<DiffuseTexture>Textures/Core/UnitHexagon_Rotated.png</DiffuseTexture>
|
<Model>Models/Core/UnitQuad.mesh</Model>
|
||||||
<GlowMap></GlowMap>
|
<GlowMap></GlowMap>
|
||||||
|
<DiffuseTexture>Textures/Core/UnitHexagon_Rotated.png</DiffuseTexture>
|
||||||
</c:Sprite>
|
</c:Sprite>
|
||||||
<c:Transform>
|
<c:Transform>
|
||||||
<Position X="0" Y="0" Z="0.00999999978"/>
|
<Position X="0" Y="0" Z="0.00999999978"/>
|
||||||
@@ -169,8 +169,9 @@
|
|||||||
<Entity name="BackgroundHexagon">
|
<Entity name="BackgroundHexagon">
|
||||||
<Components>
|
<Components>
|
||||||
<c:Sprite>
|
<c:Sprite>
|
||||||
<DiffuseTexture>Textures/Core/UnitHexagon.png</DiffuseTexture>
|
<Model>Models/Core/UnitQuad.mesh</Model>
|
||||||
<GlowMap></GlowMap>
|
<GlowMap></GlowMap>
|
||||||
|
<DiffuseTexture>Textures/Core/UnitHexagon.png</DiffuseTexture>
|
||||||
<Color A="0.699999988" B="1" G="0.200000003" R="0"/>
|
<Color A="0.699999988" B="1" G="0.200000003" R="0"/>
|
||||||
</c:Sprite>
|
</c:Sprite>
|
||||||
<c:Transform>
|
<c:Transform>
|
||||||
@@ -188,8 +189,9 @@
|
|||||||
<CapturePointNumber>4</CapturePointNumber>
|
<CapturePointNumber>4</CapturePointNumber>
|
||||||
</c:CapturePointHUD>
|
</c:CapturePointHUD>
|
||||||
<c:Sprite>
|
<c:Sprite>
|
||||||
<DiffuseTexture>Textures/Core/UnitHexagon_Rotated.png</DiffuseTexture>
|
<Model>Models/Core/UnitQuad.mesh</Model>
|
||||||
<GlowMap></GlowMap>
|
<GlowMap></GlowMap>
|
||||||
|
<DiffuseTexture>Textures/Core/UnitHexagon_Rotated.png</DiffuseTexture>
|
||||||
</c:Sprite>
|
</c:Sprite>
|
||||||
<c:Transform>
|
<c:Transform>
|
||||||
<Position X="0" Y="0" Z="0.00999999978"/>
|
<Position X="0" Y="0" Z="0.00999999978"/>
|
||||||
@@ -204,8 +206,9 @@
|
|||||||
<Entity name="BackgroundHexagon">
|
<Entity name="BackgroundHexagon">
|
||||||
<Components>
|
<Components>
|
||||||
<c:Sprite>
|
<c:Sprite>
|
||||||
<DiffuseTexture>Textures/Core/UnitHexagon.png</DiffuseTexture>
|
<Model>Models/Core/UnitQuad.mesh</Model>
|
||||||
<GlowMap></GlowMap>
|
<GlowMap></GlowMap>
|
||||||
|
<DiffuseTexture>Textures/Core/UnitHexagon.png</DiffuseTexture>
|
||||||
<Color A="0.300000012" B="1" G="1" R="1"/>
|
<Color A="0.300000012" B="1" G="1" R="1"/>
|
||||||
</c:Sprite>
|
</c:Sprite>
|
||||||
<c:Transform>
|
<c:Transform>
|
||||||
@@ -222,8 +225,9 @@
|
|||||||
<CapturePointNumber>1</CapturePointNumber>
|
<CapturePointNumber>1</CapturePointNumber>
|
||||||
</c:CapturePointHUD>
|
</c:CapturePointHUD>
|
||||||
<c:Sprite>
|
<c:Sprite>
|
||||||
<DiffuseTexture>Textures/Core/UnitHexagon_Rotated.png</DiffuseTexture>
|
<Model>Models/Core/UnitQuad.mesh</Model>
|
||||||
<GlowMap></GlowMap>
|
<GlowMap></GlowMap>
|
||||||
|
<DiffuseTexture>Textures/Core/UnitHexagon_Rotated.png</DiffuseTexture>
|
||||||
</c:Sprite>
|
</c:Sprite>
|
||||||
<c:Transform>
|
<c:Transform>
|
||||||
<Position X="0" Y="0" Z="0.00999999978"/>
|
<Position X="0" Y="0" Z="0.00999999978"/>
|
||||||
@@ -238,8 +242,9 @@
|
|||||||
<Entity name="BackgroundHexagon">
|
<Entity name="BackgroundHexagon">
|
||||||
<Components>
|
<Components>
|
||||||
<c:Sprite>
|
<c:Sprite>
|
||||||
<DiffuseTexture>Textures/Core/UnitHexagon.png</DiffuseTexture>
|
<Model>Models/Core/UnitQuad.mesh</Model>
|
||||||
<GlowMap></GlowMap>
|
<GlowMap></GlowMap>
|
||||||
|
<DiffuseTexture>Textures/Core/UnitHexagon.png</DiffuseTexture>
|
||||||
<Color A="0.699999988" B="0" G="0" R="1"/>
|
<Color A="0.699999988" B="0" G="0" R="1"/>
|
||||||
</c:Sprite>
|
</c:Sprite>
|
||||||
<c:Transform>
|
<c:Transform>
|
||||||
@@ -255,8 +260,9 @@
|
|||||||
</c:Fill>
|
</c:Fill>
|
||||||
<c:CapturePointHUD/>
|
<c:CapturePointHUD/>
|
||||||
<c:Sprite>
|
<c:Sprite>
|
||||||
<DiffuseTexture>Textures/Core/UnitHexagon_Rotated.png</DiffuseTexture>
|
<Model>Models/Core/UnitQuad.mesh</Model>
|
||||||
<GlowMap></GlowMap>
|
<GlowMap></GlowMap>
|
||||||
|
<DiffuseTexture>Textures/Core/UnitHexagon_Rotated.png</DiffuseTexture>
|
||||||
</c:Sprite>
|
</c:Sprite>
|
||||||
<c:Transform>
|
<c:Transform>
|
||||||
<Position X="0" Y="0" Z="0.00999999978"/>
|
<Position X="0" Y="0" Z="0.00999999978"/>
|
||||||
@@ -379,8 +385,9 @@
|
|||||||
</c:Fill>
|
</c:Fill>
|
||||||
<c:HealthHUD/>
|
<c:HealthHUD/>
|
||||||
<c:Sprite>
|
<c:Sprite>
|
||||||
<DiffuseTexture>Textures/HealthHUD3.png</DiffuseTexture>
|
<Model>Models/Core/UnitQuad.mesh</Model>
|
||||||
<GlowMap></GlowMap>
|
<GlowMap></GlowMap>
|
||||||
|
<DiffuseTexture>Textures/HealthHUD3.png</DiffuseTexture>
|
||||||
<Color A="0.588235319" B="0" G="0" R="0"/>
|
<Color A="0.588235319" B="0" G="0" R="0"/>
|
||||||
</c:Sprite>
|
</c:Sprite>
|
||||||
<c:Transform>
|
<c:Transform>
|
||||||
@@ -403,9 +410,10 @@
|
|||||||
<Color A="1" B="0.533333361" G="1" R="0.329411775"/>
|
<Color A="1" B="0.533333361" G="1" R="0.329411775"/>
|
||||||
</c:Fill>
|
</c:Fill>
|
||||||
<c:Sprite>
|
<c:Sprite>
|
||||||
<DiffuseTexture>Textures/Icons/Boosts/Assault-01.png</DiffuseTexture>
|
|
||||||
<GlowMap></GlowMap>
|
|
||||||
<DepthSort>false</DepthSort>
|
<DepthSort>false</DepthSort>
|
||||||
|
<Model>Models/Core/UnitQuad.mesh</Model>
|
||||||
|
<GlowMap></GlowMap>
|
||||||
|
<DiffuseTexture>Textures/Icons/Boosts/Assault-01.png</DiffuseTexture>
|
||||||
<Color A="0.588235319" B="0.0392156877" G="0.184313729" R="0"/>
|
<Color A="0.588235319" B="0.0392156877" G="0.184313729" R="0"/>
|
||||||
</c:Sprite>
|
</c:Sprite>
|
||||||
<c:Transform>
|
<c:Transform>
|
||||||
@@ -422,9 +430,10 @@
|
|||||||
<Color A="1" B="1" G="0.58431375" R="0.105882354"/>
|
<Color A="1" B="1" G="0.58431375" R="0.105882354"/>
|
||||||
</c:Fill>
|
</c:Fill>
|
||||||
<c:Sprite>
|
<c:Sprite>
|
||||||
<DiffuseTexture>Textures/Icons/Boosts/Defender-01.png</DiffuseTexture>
|
|
||||||
<GlowMap></GlowMap>
|
|
||||||
<DepthSort>false</DepthSort>
|
<DepthSort>false</DepthSort>
|
||||||
|
<Model>Models/Core/UnitQuad.mesh</Model>
|
||||||
|
<GlowMap></GlowMap>
|
||||||
|
<DiffuseTexture>Textures/Icons/Boosts/Defender-01.png</DiffuseTexture>
|
||||||
<Color A="0.588235319" B="0.34117648" G="0.192156866" R="0"/>
|
<Color A="0.588235319" B="0.34117648" G="0.192156866" R="0"/>
|
||||||
</c:Sprite>
|
</c:Sprite>
|
||||||
<c:Transform>
|
<c:Transform>
|
||||||
@@ -441,9 +450,10 @@
|
|||||||
<Color A="1" B="0.345098048" G="0" R="1"/>
|
<Color A="1" B="0.345098048" G="0" R="1"/>
|
||||||
</c:Fill>
|
</c:Fill>
|
||||||
<c:Sprite>
|
<c:Sprite>
|
||||||
<DiffuseTexture>Textures/Icons/Boosts/Sniper-01.png</DiffuseTexture>
|
|
||||||
<GlowMap></GlowMap>
|
|
||||||
<DepthSort>false</DepthSort>
|
<DepthSort>false</DepthSort>
|
||||||
|
<Model>Models/Core/UnitQuad.mesh</Model>
|
||||||
|
<GlowMap></GlowMap>
|
||||||
|
<DiffuseTexture>Textures/Icons/Boosts/Sniper-01.png</DiffuseTexture>
|
||||||
<Color A="0.588235319" B="0.121568628" G="0" R="0.443137258"/>
|
<Color A="0.588235319" B="0.121568628" G="0" R="0.443137258"/>
|
||||||
</c:Sprite>
|
</c:Sprite>
|
||||||
<c:Transform>
|
<c:Transform>
|
||||||
@@ -463,9 +473,10 @@
|
|||||||
<Color A="1" B="0.392156869" G="0.392156869" R="0.392156869"/>
|
<Color A="1" B="0.392156869" G="0.392156869" R="0.392156869"/>
|
||||||
</c:Fill>
|
</c:Fill>
|
||||||
<c:Sprite>
|
<c:Sprite>
|
||||||
<DiffuseTexture>Textures\Icons\Abilities\Superman-01.png</DiffuseTexture>
|
|
||||||
<GlowMap></GlowMap>
|
|
||||||
<DepthSort>false</DepthSort>
|
<DepthSort>false</DepthSort>
|
||||||
|
<Model>Models/Core/UnitQuad.mesh</Model>
|
||||||
|
<GlowMap></GlowMap>
|
||||||
|
<DiffuseTexture>Textures\Icons\Abilities\Superman-01.png</DiffuseTexture>
|
||||||
<Color A="1" B="0.206628323" G="0.78039217" R="0.192802757"/>
|
<Color A="1" B="0.206628323" G="0.78039217" R="0.192802757"/>
|
||||||
</c:Sprite>
|
</c:Sprite>
|
||||||
<c:Transform>
|
<c:Transform>
|
||||||
@@ -517,11 +528,11 @@
|
|||||||
<Entity name="SecondaryAttachment">
|
<Entity name="SecondaryAttachment">
|
||||||
<Components>
|
<Components>
|
||||||
<c:Spawner>
|
<c:Spawner>
|
||||||
<EntityFile>Schema/Entities/WeaponDefenderBlueView.xml</EntityFile>
|
<EntityFile>Schema/Entities/WeaponSidearmAssaultBlueView.xml</EntityFile>
|
||||||
</c:Spawner>
|
</c:Spawner>
|
||||||
<c:Transform/>
|
<c:Transform/>
|
||||||
<c:WeaponAttachment>
|
<c:WeaponAttachment>
|
||||||
<Weapon>DefenderWeapon</Weapon>
|
<Weapon>SidearmWeapon</Weapon>
|
||||||
</c:WeaponAttachment>
|
</c:WeaponAttachment>
|
||||||
</Components>
|
</Components>
|
||||||
<Children/>
|
<Children/>
|
||||||
@@ -570,8 +581,8 @@
|
|||||||
<EntityFile>Schema/Entities/WeaponAssaultBlueWorld.xml</EntityFile>
|
<EntityFile>Schema/Entities/WeaponAssaultBlueWorld.xml</EntityFile>
|
||||||
</c:Spawner>
|
</c:Spawner>
|
||||||
<c:Transform>
|
<c:Transform>
|
||||||
<Position X="0.17052114" Y="1.03320956" Z="-0.224843055"/>
|
<Position X="0.128669754" Y="1.08486295" Z="-0.361068189"/>
|
||||||
<Orientation X="-0.035638921" Y="-0.0872893855" Z="0.133119702"/>
|
<Orientation X="-0.0353791788" Y="-0.0854677409" Z="0.133094966"/>
|
||||||
</c:Transform>
|
</c:Transform>
|
||||||
<c:WeaponAttachment>
|
<c:WeaponAttachment>
|
||||||
<Weapon>AssaultWeapon</Weapon>
|
<Weapon>AssaultWeapon</Weapon>
|
||||||
@@ -588,11 +599,11 @@
|
|||||||
<BoneName>R_Arm_Weapon_Joint</BoneName>
|
<BoneName>R_Arm_Weapon_Joint</BoneName>
|
||||||
</c:BoneAttachment>
|
</c:BoneAttachment>
|
||||||
<c:Spawner>
|
<c:Spawner>
|
||||||
<EntityFile>Schema/Entities/SidearmWeaponWorld.xml</EntityFile>
|
<EntityFile>Schema/Entities/SidearmWeaponBlueWorld.xml</EntityFile>
|
||||||
</c:Spawner>
|
</c:Spawner>
|
||||||
<c:Transform>
|
<c:Transform>
|
||||||
<Position X="0.17052114" Y="1.03320956" Z="-0.224843055"/>
|
<Position X="0.128669754" Y="1.08486295" Z="-0.361068189"/>
|
||||||
<Orientation X="-0.035638921" Y="-0.0872893855" Z="0.133119702"/>
|
<Orientation X="-0.0353791788" Y="-0.0854677409" Z="0.133094966"/>
|
||||||
</c:Transform>
|
</c:Transform>
|
||||||
<c:WeaponAttachment>
|
<c:WeaponAttachment>
|
||||||
<Weapon>SidearmWeapon</Weapon>
|
<Weapon>SidearmWeapon</Weapon>
|
||||||
@@ -659,7 +670,7 @@
|
|||||||
<Components>
|
<Components>
|
||||||
<c:Animation>
|
<c:Animation>
|
||||||
<AnimationName>CrouchStrafeLeftF</AnimationName>
|
<AnimationName>CrouchStrafeLeftF</AnimationName>
|
||||||
<Time>0.79179726223533642</Time>
|
<Time>0.14513013667773755</Time>
|
||||||
<Play>true</Play>
|
<Play>true</Play>
|
||||||
</c:Animation>
|
</c:Animation>
|
||||||
<c:Transform/>
|
<c:Transform/>
|
||||||
@@ -670,7 +681,7 @@
|
|||||||
<Components>
|
<Components>
|
||||||
<c:Animation>
|
<c:Animation>
|
||||||
<AnimationName>CrouchStrafeRightF</AnimationName>
|
<AnimationName>CrouchStrafeRightF</AnimationName>
|
||||||
<Time>0.719118724186119</Time>
|
<Time>0.072451598628520131</Time>
|
||||||
<Play>true</Play>
|
<Play>true</Play>
|
||||||
</c:Animation>
|
</c:Animation>
|
||||||
<c:Transform/>
|
<c:Transform/>
|
||||||
@@ -683,7 +694,7 @@
|
|||||||
<Components>
|
<Components>
|
||||||
<c:Animation>
|
<c:Animation>
|
||||||
<AnimationName>CrouchWalkF</AnimationName>
|
<AnimationName>CrouchWalkF</AnimationName>
|
||||||
<Time>0.49749270936352197</Time>
|
<Time>0.8508255838059231</Time>
|
||||||
<Play>true</Play>
|
<Play>true</Play>
|
||||||
</c:Animation>
|
</c:Animation>
|
||||||
<c:Transform/>
|
<c:Transform/>
|
||||||
@@ -696,7 +707,7 @@
|
|||||||
<Components>
|
<Components>
|
||||||
<c:Animation>
|
<c:Animation>
|
||||||
<AnimationName>CrouchF</AnimationName>
|
<AnimationName>CrouchF</AnimationName>
|
||||||
<Time>1.1707202063102131</Time>
|
<Time>1.5240530807526143</Time>
|
||||||
<Play>true</Play>
|
<Play>true</Play>
|
||||||
</c:Animation>
|
</c:Animation>
|
||||||
<c:Transform/>
|
<c:Transform/>
|
||||||
@@ -739,7 +750,7 @@
|
|||||||
<Components>
|
<Components>
|
||||||
<c:Animation>
|
<c:Animation>
|
||||||
<AnimationName>WalkF</AnimationName>
|
<AnimationName>WalkF</AnimationName>
|
||||||
<Time>0.0026473387732952602</Time>
|
<Time>0.35598021321569639</Time>
|
||||||
<Play>true</Play>
|
<Play>true</Play>
|
||||||
</c:Animation>
|
</c:Animation>
|
||||||
<c:Transform/>
|
<c:Transform/>
|
||||||
@@ -750,7 +761,7 @@
|
|||||||
<Components>
|
<Components>
|
||||||
<c:Animation>
|
<c:Animation>
|
||||||
<AnimationName>RunF</AnimationName>
|
<AnimationName>RunF</AnimationName>
|
||||||
<Time>0.60179430680919843</Time>
|
<Time>0.3084600556940007</Time>
|
||||||
<Speed>2</Speed>
|
<Speed>2</Speed>
|
||||||
<Play>true</Play>
|
<Play>true</Play>
|
||||||
</c:Animation>
|
</c:Animation>
|
||||||
@@ -774,7 +785,7 @@
|
|||||||
<Components>
|
<Components>
|
||||||
<c:Animation>
|
<c:Animation>
|
||||||
<AnimationName>StrafeLeftF</AnimationName>
|
<AnimationName>StrafeLeftF</AnimationName>
|
||||||
<Time>0.20450294221067544</Time>
|
<Time>0.91116869109547771</Time>
|
||||||
<Speed>2</Speed>
|
<Speed>2</Speed>
|
||||||
<Play>true</Play>
|
<Play>true</Play>
|
||||||
</c:Animation>
|
</c:Animation>
|
||||||
@@ -786,7 +797,7 @@
|
|||||||
<Components>
|
<Components>
|
||||||
<c:Animation>
|
<c:Animation>
|
||||||
<AnimationName>StrafeRightF</AnimationName>
|
<AnimationName>StrafeRightF</AnimationName>
|
||||||
<Time>0.28191395104664174</Time>
|
<Time>0.98857969993144401</Time>
|
||||||
<Speed>2</Speed>
|
<Speed>2</Speed>
|
||||||
<Play>true</Play>
|
<Play>true</Play>
|
||||||
</c:Animation>
|
</c:Animation>
|
||||||
@@ -802,7 +813,7 @@
|
|||||||
<Components>
|
<Components>
|
||||||
<c:Animation>
|
<c:Animation>
|
||||||
<AnimationName>IdleF</AnimationName>
|
<AnimationName>IdleF</AnimationName>
|
||||||
<Time>0.96819454985941356</Time>
|
<Time>0.85485929533452953</Time>
|
||||||
<Play>true</Play>
|
<Play>true</Play>
|
||||||
</c:Animation>
|
</c:Animation>
|
||||||
<c:Transform/>
|
<c:Transform/>
|
||||||
@@ -891,10 +902,10 @@
|
|||||||
<c:Transform/>
|
<c:Transform/>
|
||||||
</Components>
|
</Components>
|
||||||
<Children>
|
<Children>
|
||||||
<Entity name="DashRight">
|
<Entity name="DashLeft">
|
||||||
<Components>
|
<Components>
|
||||||
<c:Animation>
|
<c:Animation>
|
||||||
<AnimationName>DashRightF</AnimationName>
|
<AnimationName>DashLeftF</AnimationName>
|
||||||
<Time>1</Time>
|
<Time>1</Time>
|
||||||
<Speed>1.7999999523162842</Speed>
|
<Speed>1.7999999523162842</Speed>
|
||||||
<Loop>false</Loop>
|
<Loop>false</Loop>
|
||||||
@@ -903,10 +914,10 @@
|
|||||||
</Components>
|
</Components>
|
||||||
<Children/>
|
<Children/>
|
||||||
</Entity>
|
</Entity>
|
||||||
<Entity name="DashLeft">
|
<Entity name="DashRight">
|
||||||
<Components>
|
<Components>
|
||||||
<c:Animation>
|
<c:Animation>
|
||||||
<AnimationName>DashLeftF</AnimationName>
|
<AnimationName>DashRightF</AnimationName>
|
||||||
<Time>1</Time>
|
<Time>1</Time>
|
||||||
<Speed>1.7999999523162842</Speed>
|
<Speed>1.7999999523162842</Speed>
|
||||||
<Loop>false</Loop>
|
<Loop>false</Loop>
|
||||||
@@ -926,15 +937,15 @@
|
|||||||
<Entity name="BlendTreeUpper">
|
<Entity name="BlendTreeUpper">
|
||||||
<Components>
|
<Components>
|
||||||
<c:Blend>
|
<c:Blend>
|
||||||
<Pose1>AssaultWeaponBlend</Pose1>
|
<Pose1>AssaultWeapon</Pose1>
|
||||||
<Pose2>SidearmWeapon</Pose2>
|
<Pose2>SidearmWeapon</Pose2>
|
||||||
<Weight>0</Weight>
|
<Weight>1</Weight>
|
||||||
<SubTreeRoot>true</SubTreeRoot>
|
<SubTreeRoot>true</SubTreeRoot>
|
||||||
</c:Blend>
|
</c:Blend>
|
||||||
<c:Transform/>
|
<c:Transform/>
|
||||||
</Components>
|
</Components>
|
||||||
<Children>
|
<Children>
|
||||||
<Entity name="AssaultWeaponBlend">
|
<Entity name="AssaultWeapon">
|
||||||
<Components>
|
<Components>
|
||||||
<c:BlendAdditive>
|
<c:BlendAdditive>
|
||||||
<Adder>Aim</Adder>
|
<Adder>Aim</Adder>
|
||||||
@@ -999,7 +1010,7 @@
|
|||||||
<Components>
|
<Components>
|
||||||
<c:Animation>
|
<c:Animation>
|
||||||
<AnimationName>IdleAssaultRifleU</AnimationName>
|
<AnimationName>IdleAssaultRifleU</AnimationName>
|
||||||
<Time>1.6337870249215687</Time>
|
<Time>1.9871198993639698</Time>
|
||||||
<Play>true</Play>
|
<Play>true</Play>
|
||||||
<Additive>true</Additive>
|
<Additive>true</Additive>
|
||||||
</c:Animation>
|
</c:Animation>
|
||||||
@@ -1011,7 +1022,7 @@
|
|||||||
<Components>
|
<Components>
|
||||||
<c:Animation>
|
<c:Animation>
|
||||||
<AnimationName>IdleAssaultRifleU</AnimationName>
|
<AnimationName>IdleAssaultRifleU</AnimationName>
|
||||||
<Time>1.6337870249215687</Time>
|
<Time>1.9871198993639698</Time>
|
||||||
<Play>true</Play>
|
<Play>true</Play>
|
||||||
<Additive>true</Additive>
|
<Additive>true</Additive>
|
||||||
</c:Animation>
|
</c:Animation>
|
||||||
@@ -1038,6 +1049,104 @@
|
|||||||
</Entity>
|
</Entity>
|
||||||
</Children>
|
</Children>
|
||||||
</Entity>
|
</Entity>
|
||||||
|
<Entity name="SidearmWeapon">
|
||||||
|
<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="MovementBlend2">
|
||||||
|
<Components>
|
||||||
|
<c:Blend>
|
||||||
|
<Pose1>Idle</Pose1>
|
||||||
|
<Pose2>Run</Pose2>
|
||||||
|
<Weight>0</Weight>
|
||||||
|
</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>
|
||||||
|
<Entity name="ActionBlend">
|
||||||
|
<Components>
|
||||||
|
<c:Blend>
|
||||||
|
<Pose1>Reload</Pose1>
|
||||||
|
<Pose2>Fire</Pose2>
|
||||||
|
<Weight>1</Weight>
|
||||||
|
</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>
|
||||||
|
</Children>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="Aim">
|
||||||
|
<Components>
|
||||||
|
<c:Animation>
|
||||||
|
<AnimationName>AimSecWepA</AnimationName>
|
||||||
|
<Time>0.5</Time>
|
||||||
|
<Loop>false</Loop>
|
||||||
|
<Additive>true</Additive>
|
||||||
|
</c:Animation>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
</Entity>
|
||||||
</Children>
|
</Children>
|
||||||
</Entity>
|
</Entity>
|
||||||
</Children>
|
</Children>
|
||||||
@@ -1087,9 +1196,10 @@
|
|||||||
<Entity name="Indicator">
|
<Entity name="Indicator">
|
||||||
<Components>
|
<Components>
|
||||||
<c:Sprite>
|
<c:Sprite>
|
||||||
<DiffuseTexture>Textures/Icons/Arrow.png</DiffuseTexture>
|
|
||||||
<GlowMap></GlowMap>
|
|
||||||
<DepthSort>false</DepthSort>
|
<DepthSort>false</DepthSort>
|
||||||
|
<Model>Models/Core/UnitQuad.mesh</Model>
|
||||||
|
<GlowMap></GlowMap>
|
||||||
|
<DiffuseTexture>Textures/Icons/Arrow.png</DiffuseTexture>
|
||||||
<Color A="1" B="1" G="0.309803933" R="0"/>
|
<Color A="1" B="1" G="0.309803933" R="0"/>
|
||||||
</c:Sprite>
|
</c:Sprite>
|
||||||
<c:HiddenForLocalPlayer/>
|
<c:HiddenForLocalPlayer/>
|
||||||
|
|||||||
@@ -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,202 @@
|
|||||||
|
<?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="ViewModel">
|
||||||
|
<Components>
|
||||||
|
<c:BoneAttachment>
|
||||||
|
<BoneName>R_Arm_Weapon_Joint</BoneName>
|
||||||
|
</c:BoneAttachment>
|
||||||
|
<c:Model>
|
||||||
|
<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="WeaponMuzzle">
|
||||||
|
<Components>
|
||||||
|
<c:Spawner>
|
||||||
|
<EntityFile>Schema/Entities/Ray2Red.xml</EntityFile>
|
||||||
|
</c:Spawner>
|
||||||
|
<c:Transform>
|
||||||
|
<Position X="0" Y="0.105000004" Z="-0.256000012"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="ReloadSpawner">
|
||||||
|
<Components>
|
||||||
|
<c:Spawner>
|
||||||
|
<EntityFile>Schema/Entities/WeaponSidearmReloadEffectView.xml</EntityFile>
|
||||||
|
</c:Spawner>
|
||||||
|
<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.000123942038" Y="-0.100038163" Z="6.82489481e-05"/>
|
||||||
|
</c:Transform>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
|
||||||
|
</Entity>
|
||||||
@@ -0,0 +1,54 @@
|
|||||||
|
<?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:Lifetime>
|
||||||
|
<Lifetime>2</Lifetime>
|
||||||
|
</c:Lifetime>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
|
||||||
|
<Children>
|
||||||
|
<Entity name="Out">
|
||||||
|
<Components>
|
||||||
|
<c:ExplosionEffect>
|
||||||
|
<Velocity X="0" Y="1" Z="0"/>
|
||||||
|
<ExplosionOrigin X="-0.0450000018" Y="0.148000002" Z="-0.646000028"/>
|
||||||
|
<TimeSinceDeath>1</TimeSinceDeath>
|
||||||
|
<Delay>1</Delay>
|
||||||
|
<Speed>-1</Speed>
|
||||||
|
<ExplosionDuration>1</ExplosionDuration>
|
||||||
|
<EndColor A="0" B="3.92156863" G="0.545098066" R="1"/>
|
||||||
|
<Randomness>true</Randomness>
|
||||||
|
</c:ExplosionEffect>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>Models/Weapons/Blue/SecondaryWeaponBlue.mesh</Resource>
|
||||||
|
<Transparent>true</Transparent>
|
||||||
|
</c:Model>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
<Entity name="In">
|
||||||
|
<Components>
|
||||||
|
<c:Lifetime>
|
||||||
|
<Lifetime>1</Lifetime>
|
||||||
|
</c:Lifetime>
|
||||||
|
<c:ExplosionEffect>
|
||||||
|
<Velocity X="0" Y="1" Z="0"/>
|
||||||
|
<ExplosionOrigin X="-0.0450000018" Y="0.148000002" Z="-0.646000028"/>
|
||||||
|
<ExplosionDuration>1</ExplosionDuration>
|
||||||
|
<EndColor A="0" B="3.92156863" G="0.545098066" R="1"/>
|
||||||
|
<Randomness>true</Randomness>
|
||||||
|
</c:ExplosionEffect>
|
||||||
|
<c:Model>
|
||||||
|
<Resource>Models/Weapons/Blue/SecondaryWeaponBlue.mesh</Resource>
|
||||||
|
<Transparent>true</Transparent>
|
||||||
|
</c:Model>
|
||||||
|
<c:Transform/>
|
||||||
|
</Components>
|
||||||
|
<Children/>
|
||||||
|
</Entity>
|
||||||
|
</Children>
|
||||||
|
|
||||||
|
</Entity>
|
||||||
@@ -75,18 +75,18 @@ void AnimationSystem::UpdateAnimations(double dt)
|
|||||||
try {
|
try {
|
||||||
model = ResourceManager::Load<::Model, true>(modelEntity["Model"]["Resource"]);
|
model = ResourceManager::Load<::Model, true>(modelEntity["Model"]["Resource"]);
|
||||||
} catch (const std::exception&) {
|
} catch (const std::exception&) {
|
||||||
return;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
Skeleton* skeleton = model->m_RawModel->m_Skeleton;
|
Skeleton* skeleton = model->m_RawModel->m_Skeleton;
|
||||||
if (skeleton == nullptr) {
|
if (skeleton == nullptr) {
|
||||||
return;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
const Skeleton::Animation* animation = skeleton->GetAnimation(animationC["AnimationName"]);
|
const Skeleton::Animation* animation = skeleton->GetAnimation(animationC["AnimationName"]);
|
||||||
|
|
||||||
if (animation == nullptr) {
|
if (animation == nullptr) {
|
||||||
continue;;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
double animationSpeed = (double)animationC["Speed"];
|
double animationSpeed = (double)animationC["Speed"];
|
||||||
|
|||||||
@@ -166,6 +166,14 @@ void AssaultWeaponBehaviour::OnReload(ComponentWrapper cWeapon, WeaponInfo& wi)
|
|||||||
void AssaultWeaponBehaviour::OnEquip(ComponentWrapper cWeapon, WeaponInfo& wi)
|
void AssaultWeaponBehaviour::OnEquip(ComponentWrapper cWeapon, WeaponInfo& wi)
|
||||||
{
|
{
|
||||||
cWeapon["FireCooldown"] = (double)cWeapon["EquipTime"];
|
cWeapon["FireCooldown"] = (double)cWeapon["EquipTime"];
|
||||||
|
|
||||||
|
if (wi.ThirdPersonPlayerModel.Valid()) {
|
||||||
|
Events::AutoAnimationBlend b1;
|
||||||
|
b1.RootNode = wi.ThirdPersonPlayerModel;
|
||||||
|
b1.NodeName = "AssaultWeapon";
|
||||||
|
b1.SingleLevelBlend = true;
|
||||||
|
m_EventBroker->Publish(b1);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void AssaultWeaponBehaviour::OnHolster(ComponentWrapper cWeapon, WeaponInfo& wi)
|
void AssaultWeaponBehaviour::OnHolster(ComponentWrapper cWeapon, WeaponInfo& wi)
|
||||||
|
|||||||
@@ -14,6 +14,62 @@ void SidearmWeaponBehaviour::UpdateComponent(EntityWrapper& entity, ComponentWra
|
|||||||
|
|
||||||
void SidearmWeaponBehaviour::UpdateWeapon(ComponentWrapper cWeapon, WeaponInfo& wi, double dt)
|
void SidearmWeaponBehaviour::UpdateWeapon(ComponentWrapper cWeapon, WeaponInfo& wi, double dt)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
CheckAmmo(cWeapon, wi);
|
||||||
|
|
||||||
|
// Start reloading automatically if at 0 mag ammo
|
||||||
|
int& magAmmo = cWeapon["MagazineAmmo"];
|
||||||
|
if (m_ConfigAutoReload && magAmmo <= 0) {
|
||||||
|
OnReload(cWeapon, wi);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Only start reloading once we're done firing
|
||||||
|
bool& reloadQueued = cWeapon["ReloadQueued"];
|
||||||
|
double& fireCooldown = cWeapon["FireCooldown"];
|
||||||
|
bool& isReloading = cWeapon["IsReloading"];
|
||||||
|
if (reloadQueued && fireCooldown <= 0) {
|
||||||
|
reloadQueued = fireCooldown;
|
||||||
|
isReloading = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Decrement reload timer
|
||||||
|
double& reloadTimer = cWeapon["ReloadTimer"];
|
||||||
|
if (isReloading) {
|
||||||
|
reloadTimer = glm::max(0.0, reloadTimer - dt);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Handle reloading
|
||||||
|
if (isReloading && reloadTimer <= 0.0) {
|
||||||
|
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("MovementBlend");
|
||||||
|
if (blend.Valid()) {
|
||||||
|
(double&)blend["Blend"]["Weight"] = animationWeight;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if ((bool)cWeapon["Automatic"] && canFire(cWeapon)) {
|
if ((bool)cWeapon["Automatic"] && canFire(cWeapon)) {
|
||||||
fireBullet(cWeapon, wi);
|
fireBullet(cWeapon, wi);
|
||||||
}
|
}
|
||||||
@@ -32,6 +88,67 @@ void SidearmWeaponBehaviour::OnCeasePrimaryFire(ComponentWrapper cWeapon, Weapon
|
|||||||
cWeapon["TriggerHeld"] = false;
|
cWeapon["TriggerHeld"] = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void SidearmWeaponBehaviour::OnReload(ComponentWrapper cWeapon, WeaponInfo& wi)
|
||||||
|
{
|
||||||
|
bool& reloadQueued = cWeapon["ReloadQueued"];
|
||||||
|
bool& isReloading = cWeapon["IsReloading"];
|
||||||
|
if (reloadQueued || isReloading) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
int& magAmmo = cWeapon["MagazineAmmo"];
|
||||||
|
int& magSize = cWeapon["MagazineSize"];
|
||||||
|
if (magAmmo >= magSize) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
double reloadTime = cWeapon["ReloadTime"];
|
||||||
|
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.EmitterID = wi.Player.ID;
|
||||||
|
e.FilePath = "Audio/weapon/Assault/AssaultWeaponReload.wav";
|
||||||
|
m_EventBroker->Publish(e);
|
||||||
|
}
|
||||||
|
|
||||||
void SidearmWeaponBehaviour::OnEquip(ComponentWrapper cWeapon, WeaponInfo& wi)
|
void SidearmWeaponBehaviour::OnEquip(ComponentWrapper cWeapon, WeaponInfo& wi)
|
||||||
{
|
{
|
||||||
cWeapon["FireCooldown"] = (double)cWeapon["EquipTime"];
|
cWeapon["FireCooldown"] = (double)cWeapon["EquipTime"];
|
||||||
@@ -59,6 +176,14 @@ void SidearmWeaponBehaviour::fireBullet(ComponentWrapper cWeapon, WeaponInfo& wi
|
|||||||
{
|
{
|
||||||
cWeapon["FireCooldown"] = 60.0 / (double)cWeapon["RPM"];
|
cWeapon["FireCooldown"] = 60.0 / (double)cWeapon["RPM"];
|
||||||
|
|
||||||
|
// Ammo
|
||||||
|
int& magAmmo = cWeapon["MagazineAmmo"];
|
||||||
|
if (magAmmo <= 0) {
|
||||||
|
return;
|
||||||
|
} else {
|
||||||
|
magAmmo -= 1;
|
||||||
|
}
|
||||||
|
|
||||||
// Get weapon model based on current person
|
// Get weapon model based on current person
|
||||||
EntityWrapper weaponModelEntity = getRelevantWeaponEntity(wi);
|
EntityWrapper weaponModelEntity = getRelevantWeaponEntity(wi);
|
||||||
if (!weaponModelEntity.Valid()) {
|
if (!weaponModelEntity.Valid()) {
|
||||||
@@ -73,7 +198,20 @@ void SidearmWeaponBehaviour::fireBullet(ComponentWrapper cWeapon, WeaponInfo& wi
|
|||||||
float distance = traceRayDistance(origin, direction);
|
float distance = traceRayDistance(origin, direction);
|
||||||
EntityWrapper ray = SpawnerSystem::Spawn(tracerSpawner);
|
EntityWrapper ray = SpawnerSystem::Spawn(tracerSpawner);
|
||||||
if (ray.Valid()) {
|
if (ray.Valid()) {
|
||||||
((glm::vec3&)ray["Transform"]["Scale"]).z = (distance / 100.f);
|
((glm::vec3&)ray["Transform"]["Scale"]).z = distance;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 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.EmitterID = wi.Player.ID;
|
||||||
|
e.FilePath = "Audio/weapon/hitclick.wav";
|
||||||
|
m_EventBroker->Publish(e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -95,7 +233,184 @@ void SidearmWeaponBehaviour::fireBullet(ComponentWrapper cWeapon, WeaponInfo& wi
|
|||||||
bool SidearmWeaponBehaviour::canFire(ComponentWrapper cWeapon)
|
bool SidearmWeaponBehaviour::canFire(ComponentWrapper cWeapon)
|
||||||
{
|
{
|
||||||
bool triggerHeld = cWeapon["TriggerHeld"];
|
bool triggerHeld = cWeapon["TriggerHeld"];
|
||||||
double& cooldown = cWeapon["FireCooldown"];
|
bool cooldownPassed = (double)cWeapon["FireCooldown"] <= 0.0;
|
||||||
// TODO: Ammo checks
|
bool isNotReloading = !(bool)cWeapon["IsReloading"];
|
||||||
return triggerHeld && cooldown <= 0.0;
|
return triggerHeld && cooldownPassed && isNotReloading;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool SidearmWeaponBehaviour::dealDamage(ComponentWrapper cWeapon, WeaponInfo& wi)
|
||||||
|
{
|
||||||
|
// Only deal damage client side
|
||||||
|
if (!IsClient) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Only handle damage for the local player
|
||||||
|
if (wi.Player != LocalPlayer) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Make sure the player isn't shooting from the grave
|
||||||
|
if (!wi.Player.Valid()) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 3D-pick middle of screen
|
||||||
|
Rectangle viewport = m_Renderer->GetViewportSize();
|
||||||
|
glm::vec2 centerScreen(viewport.Width / 2, viewport.Height / 2);
|
||||||
|
// TODO: Some horizontal spread
|
||||||
|
PickData pickData = m_Renderer->Pick(centerScreen);
|
||||||
|
EntityWrapper victim(m_World, pickData.Entity);
|
||||||
|
if (!victim.Valid()) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Don't let us somehow shoot ourselves in the foot
|
||||||
|
if (victim == LocalPlayer) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Only care about players being hit
|
||||||
|
if (!victim.HasComponent("Player")) {
|
||||||
|
victim = victim.FirstParentWithComponent("Player");
|
||||||
|
}
|
||||||
|
if (!victim.Valid()) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
double damage = cWeapon["BaseDamage"];
|
||||||
|
// If friendly fire, reduce damage to 0 (needed to make Boosts, Ammosharing work)
|
||||||
|
if ((ComponentInfo::EnumType)victim["Team"]["Team"] == (ComponentInfo::EnumType)wi.Player["Team"]["Team"]) {
|
||||||
|
damage = 0;
|
||||||
|
giveAmmo(cWeapon, wi, victim);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Deal damage!
|
||||||
|
Events::PlayerDamage ePlayerDamage;
|
||||||
|
ePlayerDamage.Inflictor = wi.Player;
|
||||||
|
ePlayerDamage.Victim = victim;
|
||||||
|
ePlayerDamage.Damage = damage;
|
||||||
|
m_EventBroker->Publish(ePlayerDamage);
|
||||||
|
|
||||||
|
return damage > 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void SidearmWeaponBehaviour::giveAmmo(ComponentWrapper cWeapon, WeaponInfo& wi, EntityWrapper receiver)
|
||||||
|
{
|
||||||
|
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;
|
||||||
|
} else if (ammo < maxAmmo) {
|
||||||
|
ammo += 1;
|
||||||
|
}
|
||||||
|
} 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;
|
||||||
|
} else if (ammo < maxAmmo) {
|
||||||
|
ammo += 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
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;
|
||||||
|
if (victim.HasComponent("AssaultWeapon")) {
|
||||||
|
magazineAmmo = (int)victim["AssaultWeapon"]["MagazineAmmo"];
|
||||||
|
|
||||||
|
} else if (victim.HasComponent("DefenderWeapon")) {
|
||||||
|
magazineAmmo = (int)victim["DefenderWeapon"]["MagazineAmmo"];
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
EntityWrapper friendlyAmmoHudSpawner = wi.FirstPersonPlayerModel.FirstChildByName("FriendlyAmmoAttachment");
|
||||||
|
if(friendlyAmmoHudSpawner.Valid()) {
|
||||||
|
|
||||||
|
auto children = m_World->GetDirectChildren(friendlyAmmoHudSpawner.ID);
|
||||||
|
|
||||||
|
if (children.first == children.second) {
|
||||||
|
EntityWrapper friendlyAmmoHud = SpawnerSystem::Spawn(friendlyAmmoHudSpawner, friendlyAmmoHudSpawner);
|
||||||
|
if (friendlyAmmoHud.Valid()) {
|
||||||
|
EntityWrapper textEntity = friendlyAmmoHud.FirstChildByName("MagazineAmmo");
|
||||||
|
if (textEntity.Valid()) {
|
||||||
|
if (textEntity.HasComponent("Text")) {
|
||||||
|
(std::string&)textEntity["Text"]["Content"] = std::to_string(magazineAmmo);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
EntityWrapper textEntity = friendlyAmmoHudSpawner.FirstChildByName("MagazineAmmo");
|
||||||
|
if (textEntity.Valid()) {
|
||||||
|
if (textEntity.HasComponent("Text")) {
|
||||||
|
(std::string&)textEntity["Text"]["Content"] = std::to_string(magazineAmmo);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void SidearmWeaponBehaviour::RemoveFrindlyAmmoHUD(WeaponInfo& wi)
|
||||||
|
{
|
||||||
|
EntityWrapper friendlyAmmoHudSpawner = wi.FirstPersonPlayerModel.FirstChildByName("FriendlyAmmoAttachment");
|
||||||
|
if (friendlyAmmoHudSpawner.Valid()) {
|
||||||
|
friendlyAmmoHudSpawner.DeleteChildren();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user