This commit is contained in:
2016-03-04 15:02:01 +01:00
parent 434ff1e7eb
commit b7a7f7fd5e
8 changed files with 951 additions and 721 deletions
+1 -1
View File
@@ -52,7 +52,7 @@ public:
void Connect(std::string address, int port); void Connect(std::string address, int port);
void Update() override; void Update() override;
private: private:
UDPClient m_Unreliable; //UDPClient m_Unreliable;
TCPClient m_Reliable; TCPClient m_Reliable;
std::vector<Events::PlayerSpawned> m_PlayerSpawnEvents; std::vector<Events::PlayerSpawned> m_PlayerSpawnEvents;
void parseSpawnEvents(); void parseSpawnEvents();
+1 -1
View File
@@ -36,7 +36,7 @@ public:
private: private:
// Network channels // Network channels
TCPServer m_Reliable; TCPServer m_Reliable;
UDPServer m_Unreliable; //UDPServer m_Unreliable;
UDPServer m_ServerlistRequest; UDPServer m_ServerlistRequest;
// dont forget to set these in the childrens receive logic // dont forget to set these in the childrens receive logic
boost::asio::ip::address m_Address; boost::asio::ip::address m_Address;
+439 -332
View File
@@ -6,7 +6,9 @@
<Origin X="0" Y="0.772000015" Z="0"/> <Origin X="0" Y="0.772000015" Z="0"/>
<Size X="1" Y="1.60000002" Z="1"/> <Size X="1" Y="1.60000002" Z="1"/>
</c:AABB> </c:AABB>
<c:AssaultWeapon/> <c:AssaultWeapon>
<FireCooldown>0.5</FireCooldown>
</c:AssaultWeapon>
<c:Team> <c:Team>
<Team> <Team>
<Blue/> <Blue/>
@@ -519,7 +521,113 @@
<Orientation X="0.0104048206" Y="-0.00268219248" Z="0.0428443849"/> <Orientation X="0.0104048206" Y="-0.00268219248" Z="0.0428443849"/>
</c:Transform> </c:Transform>
</Components> </Components>
<Children/> <Children>
<Entity name="AssaultWeapon">
<Components>
<c:Model>
<Resource>Models/Weapons/Blue/AssaultWeaponBlue.mesh</Resource>
</c:Model>
<c:Transform/>
</Components>
<Children>
<Entity name="ReloadEffect">
<Components>
<c:Transform/>
</Components>
<Children/>
</Entity>
<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="FirstPersonReloadSpawner">
<Components>
<c:Spawner>
<EntityFile>Schema/Entities/ReloadEffectView.xml</EntityFile>
</c:Spawner>
<c:Transform/>
</Components>
<Children/>
</Entity>
<Entity name="AmmunitionHUD">
<Components>
<c:Transform>
<Position X="-0.0440000035" Y="0.136000007" Z="-0.119000003"/>
<Scale X="0.400000006" Y="0.400000006" Z="0.400000006"/>
</c:Transform>
</Components>
<Children>
<Entity name="AmmunitionHUDBackground">
<Components>
<c:Sprite>
<DiffuseTexture>Textures/Core/UnitHexagon.png</DiffuseTexture>
<GlowMap></GlowMap>
<Color A="0.588235319" B="0" G="0" R="0"/>
</c:Sprite>
<c:Transform>
<Position X="0" Y="0" Z="-0.00200000009"/>
<Scale X="0.119999997" Y="0.119999997" Z="0.119999997"/>
</c:Transform>
</Components>
<Children/>
</Entity>
<Entity name="AmmunitionText">
<Components>
<c:Transform/>
</Components>
<Children>
<Entity name="MagazineAmmo">
<Components>
<c:Text>
<Content>32</Content>
<Resource>Fonts/DroidSans.ttf,64</Resource>
<Color A="1" B="3.92156863" G="1.17647064" R="0"/>
</c:Text>
<c:TextFieldReader>
<ParentEntityName>PlayerAssault</ParentEntityName>
<ComponentType>AssaultWeapon</ComponentType>
<Field>MagazineAmmo</Field>
</c:TextFieldReader>
<c:Transform>
<Scale X="0.0599999987" Y="0.0599999987" Z="0.0599999987"/>
</c:Transform>
</Components>
<Children/>
</Entity>
<Entity name="Ammo">
<Components>
<c:Text>
<Content>320</Content>
<Resource>Fonts/DroidSans.ttf,64</Resource>
<Color A="1" B="3.92156863" G="1.17647064" R="0"/>
</c:Text>
<c:TextFieldReader>
<ParentEntityName>PlayerAssault</ParentEntityName>
<ComponentType>AssaultWeapon</ComponentType>
<Field>Ammo</Field>
</c:TextFieldReader>
<c:Transform>
<Position X="5.2833886e-05" Y="-0.0407950208" Z="0"/>
<Scale X="0.0399999991" Y="0.0399999991" Z="0.0399999991"/>
</c:Transform>
</Components>
<Children/>
</Entity>
</Children>
</Entity>
</Children>
</Entity>
</Children>
</Entity>
</Children>
</Entity> </Entity>
<Entity name="SecondaryAttachment"> <Entity name="SecondaryAttachment">
<Components> <Components>
@@ -652,179 +760,192 @@
<Children/> <Children/>
</Entity> </Entity>
<Entity name="PlayerModel"> <Entity name="PlayerModel">
<Components>
<c:BlendAdditive>
<Adder>BlendTreeAim</Adder>
<Receiver>BlendTreeAssault</Receiver>
</c:BlendAdditive>
<c:Shielded/>
<c:HiddenForLocalPlayer/>
<c:Model>
<Resource>Models/Characters/Assault/AssaultBlue.mesh</Resource>
<Color A="1" B="1" G="0.25" R="0"/>
<Visible>false</Visible>
</c:Model>
<c:Transform/>
</Components>
<Children>
<Entity name="PrimaryAttachment">
<Components> <Components>
<c:BoneAttachment> <c:BlendAdditive>
<BoneName>R_Arm_Weapon_Joint</BoneName> <Adder>BlendTreeAim</Adder>
</c:BoneAttachment> <Receiver>BlendTreeAssault</Receiver>
<c:WeaponAttachment> </c:BlendAdditive>
<Weapon>AssaultWeapon</Weapon> <c:Shielded/>
<Person> <c:HiddenForLocalPlayer/>
<ThirdPerson/> <c:Model>
</Person> <Resource>Models/Characters/Assault/AssaultBlue.mesh</Resource>
</c:WeaponAttachment> <Color A="1" B="1" G="1" R="1"/>
<c:Spawner> <Visible>true</Visible>
<EntityFile>Schema/Entities/WeaponAssaultBlueWorld.xml</EntityFile> </c:Model>
</c:Spawner>
<c:Transform>
<Position X="0.165396646" Y="1.14537966" Z="-0.206537575"/>
<Orientation X="0.484640986" Y="-0.00695174001" Z="0.0685098693"/>
</c:Transform>
</Components>
<Children/>
</Entity>
<Entity name="SecondaryAttachment">
<Components>
<c:BoneAttachment>
<BoneName>R_Arm_Weapon_Joint</BoneName>
</c:BoneAttachment>
<c:WeaponAttachment>
<Weapon>SidearmWeapon</Weapon>
<Person>
<ThirdPerson/>
</Person>
</c:WeaponAttachment>
<c:Spawner>
<EntityFile>Schema/Entities/SidearmWeaponWorld.xml</EntityFile>
</c:Spawner>
<c:Transform>
<Position X="0.165396646" Y="1.14537966" Z="-0.206537575"/>
<Orientation X="0.484640986" Y="-0.00695174001" Z="0.0685098693"/>
</c:Transform>
</Components>
<Children/>
</Entity>
<Entity name="BlendTreeAim">
<Components>
<c:Blend>
<Pose1>AimPrimary</Pose1>
<Pose2>AimSecondary</Pose2>
<Weight>0</Weight>
<SubTreeRoot>true</SubTreeRoot>
</c:Blend>
<c:Transform/> <c:Transform/>
</Components> </Components>
<Children> <Children>
<Entity name="AimSecondary"> <Entity name="PrimaryAttachment">
<Components> <Components>
<c:Animation> <c:BoneAttachment>
<AnimationName>AimSecWepA</AnimationName> <BoneName>R_Arm_Weapon_Joint</BoneName>
<Time>0.71143966913223267</Time> </c:BoneAttachment>
<Loop>false</Loop> <c:WeaponAttachment>
<Additive>true</Additive> <Weapon>AssaultWeapon</Weapon>
</c:Animation> <Person>
<c:Transform/> <ThirdPerson/>
</Person>
</c:WeaponAttachment>
<c:Spawner>
<EntityFile>Schema/Entities/WeaponAssaultBlueWorld.xml</EntityFile>
</c:Spawner>
<c:Transform>
<Position X="0.165396646" Y="1.14537966" Z="-0.206537575"/>
<Orientation X="0.484640986" Y="-0.00695174001" Z="0.0685098693"/>
</c:Transform>
</Components> </Components>
<Children/> <Children/>
</Entity> </Entity>
<Entity name="AimPrimary"> <Entity name="SecondaryAttachment">
<Components> <Components>
<c:Animation> <c:BoneAttachment>
<AnimationName>AimRifleA</AnimationName> <BoneName>R_Arm_Weapon_Joint</BoneName>
<Time>0.71143966913223267</Time> </c:BoneAttachment>
<Loop>false</Loop> <c:WeaponAttachment>
<Additive>true</Additive> <Weapon>SidearmWeapon</Weapon>
</c:Animation> <Person>
<c:Transform/> <ThirdPerson/>
</Person>
</c:WeaponAttachment>
<c:Spawner>
<EntityFile>Schema/Entities/SidearmWeaponWorld.xml</EntityFile>
</c:Spawner>
<c:Transform>
<Position X="0.165396646" Y="1.14537966" Z="-0.206537575"/>
<Orientation X="0.484640986" Y="-0.00695174001" Z="0.0685098693"/>
</c:Transform>
</Components> </Components>
<Children/> <Children/>
</Entity> </Entity>
</Children> <Entity name="BlendTreeAim">
</Entity>
<Entity name="BlendTreeAssault">
<Components>
<c:BlendOverride>
<Master>ReloadSwitchBlend</Master>
<Slave>FinalMovementBlend</Slave>
</c:BlendOverride>
<c:Transform/>
</Components>
<Children>
<Entity name="FinalMovementBlend">
<Components> <Components>
<c:Blend> <c:Blend>
<Pose1>StandCrouchBlend</Pose1> <Pose1>AimPrimary</Pose1>
<Pose2>JumpDashBlend</Pose2> <Pose2>AimSecondary</Pose2>
<Weight>2.5146881298480398e-63</Weight> <Weight>0</Weight>
<SubTreeRoot>true</SubTreeRoot> <SubTreeRoot>true</SubTreeRoot>
</c:Blend> </c:Blend>
<c:Transform/> <c:Transform/>
</Components> </Components>
<Children> <Children>
<Entity name="StandCrouchBlend"> <Entity name="AimSecondary">
<Components>
<c:Animation>
<AnimationName>AimSecWepA</AnimationName>
<Time>0.71143966913223267</Time>
<Loop>false</Loop>
<Additive>true</Additive>
</c:Animation>
<c:Transform/>
</Components>
<Children/>
</Entity>
<Entity name="AimPrimary">
<Components>
<c:Animation>
<AnimationName>AimRifleA</AnimationName>
<Time>0.71143966913223267</Time>
<Loop>false</Loop>
<Additive>true</Additive>
</c:Animation>
<c:Transform/>
</Components>
<Children/>
</Entity>
</Children>
</Entity>
<Entity name="BlendTreeAssault">
<Components>
<c:BlendOverride>
<Master>ReloadSwitchBlend</Master>
<Slave>FinalMovementBlend</Slave>
</c:BlendOverride>
<c:Transform/>
</Components>
<Children>
<Entity name="FinalMovementBlend">
<Components> <Components>
<c:Blend> <c:Blend>
<Pose1>StandMovement</Pose1> <Pose1>StandCrouchBlend</Pose1>
<Pose2>CrouchMovement</Pose2> <Pose2>JumpDashBlend</Pose2>
<Weight>0</Weight> <Weight>2.5146881298480398e-63</Weight>
<SubTreeRoot>true</SubTreeRoot> <SubTreeRoot>true</SubTreeRoot>
</c:Blend> </c:Blend>
<c:Transform/> <c:Transform/>
</Components> </Components>
<Children> <Children>
<Entity name="CrouchMovement"> <Entity name="StandCrouchBlend">
<Components> <Components>
<c:Blend> <c:Blend>
<Pose1>MovementBlend</Pose1> <Pose1>StandMovement</Pose1>
<Pose2>Idle</Pose2> <Pose2>CrouchMovement</Pose2>
<Weight>1</Weight> <Weight>0</Weight>
<SubTreeRoot>true</SubTreeRoot>
</c:Blend> </c:Blend>
<c:Transform/> <c:Transform/>
</Components> </Components>
<Children> <Children>
<Entity name="MovementBlend"> <Entity name="CrouchMovement">
<Components> <Components>
<c:Blend> <c:Blend>
<Pose1>Walk</Pose1> <Pose1>MovementBlend</Pose1>
<Pose2>StrafeLRBlend</Pose2> <Pose2>Idle</Pose2>
<Weight>0</Weight> <Weight>1</Weight>
</c:Blend> </c:Blend>
<c:Transform/> <c:Transform/>
</Components> </Components>
<Children> <Children>
<Entity name="StrafeLRBlend"> <Entity name="MovementBlend">
<Components> <Components>
<c:Blend> <c:Blend>
<Pose1>Left</Pose1> <Pose1>Walk</Pose1>
<Pose2>Right</Pose2> <Pose2>StrafeLRBlend</Pose2>
<Weight>0.033793529385008014</Weight> <Weight>0</Weight>
</c:Blend> </c:Blend>
<c:Transform/> <c:Transform/>
</Components> </Components>
<Children> <Children>
<Entity name="Left"> <Entity name="StrafeLRBlend">
<Components> <Components>
<c:Animation> <c:Blend>
<AnimationName>CrouchStrafeLeftF</AnimationName> <Pose1>Left</Pose1>
<Time>0.93215091236880454</Time> <Pose2>Right</Pose2>
<Speed>1</Speed> <Weight>0.033793529385008014</Weight>
<Play>true</Play> </c:Blend>
</c:Animation>
<c:Transform/> <c:Transform/>
</Components> </Components>
<Children/> <Children>
<Entity name="Left">
<Components>
<c:Animation>
<AnimationName>CrouchStrafeLeftF</AnimationName>
<Time>0.93215091236880454</Time>
<Speed>1</Speed>
<Play>true</Play>
</c:Animation>
<c:Transform/>
</Components>
<Children/>
</Entity>
<Entity name="Right">
<Components>
<c:Animation>
<AnimationName>CrouchStrafeRightF</AnimationName>
<Time>0.85947237431958712</Time>
<Speed>1</Speed>
<Play>true</Play>
</c:Animation>
<c:Transform/>
</Components>
<Children/>
</Entity>
</Children>
</Entity> </Entity>
<Entity name="Right"> <Entity name="Walk">
<Components> <Components>
<c:Animation> <c:Animation>
<AnimationName>CrouchStrafeRightF</AnimationName> <AnimationName>CrouchWalkF</AnimationName>
<Time>0.85947237431958712</Time> <Time>0.63784635949699009</Time>
<Speed>1</Speed> <Speed>1</Speed>
<Play>true</Play> <Play>true</Play>
</c:Animation> </c:Animation>
@@ -834,11 +955,118 @@
</Entity> </Entity>
</Children> </Children>
</Entity> </Entity>
<Entity name="Walk"> <Entity name="Idle">
<Components> <Components>
<c:Animation> <c:Animation>
<AnimationName>CrouchWalkF</AnimationName> <AnimationName>CrouchF</AnimationName>
<Time>0.63784635949699009</Time> <Time>0.99862473341677438</Time>
<Speed>1</Speed>
</c:Animation>
<c:Transform/>
</Components>
<Children/>
</Entity>
</Children>
</Entity>
<Entity name="StandMovement">
<Components>
<c:Blend>
<Pose1>MovementBlend</Pose1>
<Pose2>Idle</Pose2>
<Weight>1</Weight>
</c:Blend>
<c:Transform/>
</Components>
<Children>
<Entity name="MovementBlend">
<Components>
<c:Blend>
<Pose1>RunWalkBlend</Pose1>
<Pose2>StrafeLRBlend</Pose2>
<Weight>2.4565650245976452e-16</Weight>
</c:Blend>
<c:Transform/>
</Components>
<Children>
<Entity name="StrafeLRBlend">
<Components>
<c:Blend>
<Pose1>Left</Pose1>
<Pose2>Right</Pose2>
<Weight>0.033793529385008014</Weight>
</c:Blend>
<c:Transform/>
</Components>
<Children>
<Entity name="Left">
<Components>
<c:Animation>
<AnimationName>StrafeLeftF</AnimationName>
<Time>0.32459360994030106</Time>
<Speed>1</Speed>
<Play>true</Play>
</c:Animation>
<c:Transform/>
</Components>
<Children/>
</Entity>
<Entity name="Right">
<Components>
<c:Animation>
<AnimationName>StrafeRightF</AnimationName>
<Time>0.34810913982041569</Time>
<Speed>1</Speed>
<Play>true</Play>
</c:Animation>
<c:Transform/>
</Components>
<Children/>
</Entity>
</Children>
</Entity>
<Entity name="RunWalkBlend">
<Components>
<c:Blend>
<Pose1>Walk</Pose1>
<Pose2>Run</Pose2>
<Weight>1.2938206818383024e-24</Weight>
</c:Blend>
<c:Transform/>
</Components>
<Children>
<Entity name="Walk">
<Components>
<c:Animation>
<AnimationName>WalkF</AnimationName>
<Time>0.14300098890676338</Time>
<Speed>1</Speed>
<Play>true</Play>
</c:Animation>
<c:Transform/>
</Components>
<Children/>
</Entity>
<Entity name="Run">
<Components>
<c:Animation>
<AnimationName>RunF</AnimationName>
<Time>0.41501449293066628</Time>
<Speed>1</Speed>
<Play>true</Play>
</c:Animation>
<c:Transform/>
</Components>
<Children/>
</Entity>
</Children>
</Entity>
</Children>
</Entity>
<Entity name="Idle">
<Components>
<c:Animation>
<AnimationName>IdleF</AnimationName>
<Time>1.2585556863362655</Time>
<Speed>1</Speed> <Speed>1</Speed>
<Play>true</Play> <Play>true</Play>
</c:Animation> </c:Animation>
@@ -848,68 +1076,70 @@
</Entity> </Entity>
</Children> </Children>
</Entity> </Entity>
<Entity name="Idle"> </Children>
</Entity>
<Entity name="JumpDashBlend">
<Components>
<c:Blend>
<Pose1>Jump</Pose1>
<Pose2>DashBlend</Pose2>
<Weight>1</Weight>
<SubTreeRoot>true</SubTreeRoot>
</c:Blend>
<c:Transform/>
</Components>
<Children>
<Entity name="Jump">
<Components> <Components>
<c:Animation> <c:Animation>
<AnimationName>CrouchF</AnimationName> <AnimationName>JumpF</AnimationName>
<Time>0.99862473341677438</Time> <Time>0.5</Time>
<Speed>1</Speed> <Speed>1</Speed>
<Loop>false</Loop>
</c:Animation> </c:Animation>
<c:Transform/> <c:Transform/>
</Components> </Components>
<Children/> <Children/>
</Entity> </Entity>
</Children> <Entity name="DashBlend">
</Entity>
<Entity name="StandMovement">
<Components>
<c:Blend>
<Pose1>MovementBlend</Pose1>
<Pose2>Idle</Pose2>
<Weight>1</Weight>
</c:Blend>
<c:Transform/>
</Components>
<Children>
<Entity name="MovementBlend">
<Components> <Components>
<c:Blend> <c:Blend>
<Pose1>RunWalkBlend</Pose1> <Pose1>DashFBBlend</Pose1>
<Pose2>StrafeLRBlend</Pose2> <Pose2>DashLRBlend</Pose2>
<Weight>2.4565650245976452e-16</Weight> <Weight>0.014621149736541383</Weight>
</c:Blend> </c:Blend>
<c:Transform/> <c:Transform/>
</Components> </Components>
<Children> <Children>
<Entity name="RunWalkBlend"> <Entity name="DashFBBlend">
<Components> <Components>
<c:Blend> <c:Blend>
<Pose1>Walk</Pose1> <Pose1>DashForward</Pose1>
<Pose2>Run</Pose2> <Pose2>DashBackward</Pose2>
<Weight>1.2938206818383024e-24</Weight> <Weight>0.014363533804961248</Weight>
</c:Blend> </c:Blend>
<c:Transform/> <c:Transform/>
</Components> </Components>
<Children> <Children>
<Entity name="Walk"> <Entity name="DashForward">
<Components> <Components>
<c:Animation> <c:Animation>
<AnimationName>WalkF</AnimationName> <AnimationName>DashForwardF</AnimationName>
<Time>0.14300098890676338</Time> <Time>1</Time>
<Speed>1</Speed> <Speed>2</Speed>
<Play>true</Play> <Loop>false</Loop>
</c:Animation> </c:Animation>
<c:Transform/> <c:Transform/>
</Components> </Components>
<Children/> <Children/>
</Entity> </Entity>
<Entity name="Run"> <Entity name="DashBackward">
<Components> <Components>
<c:Animation> <c:Animation>
<AnimationName>RunF</AnimationName> <AnimationName>DashBackwardF</AnimationName>
<Time>0.41501449293066628</Time> <Time>1</Time>
<Speed>1</Speed> <Speed>2</Speed>
<Play>true</Play> <Loop>false</Loop>
</c:Animation> </c:Animation>
<c:Transform/> <c:Transform/>
</Components> </Components>
@@ -917,35 +1147,35 @@
</Entity> </Entity>
</Children> </Children>
</Entity> </Entity>
<Entity name="StrafeLRBlend"> <Entity name="DashLRBlend">
<Components> <Components>
<c:Blend> <c:Blend>
<Pose1>Left</Pose1> <Pose1>DashLeft</Pose1>
<Pose2>Right</Pose2> <Pose2>DashRight</Pose2>
<Weight>0.033793529385008014</Weight> <Weight>4.3244885367500671e-16</Weight>
</c:Blend> </c:Blend>
<c:Transform/> <c:Transform/>
</Components> </Components>
<Children> <Children>
<Entity name="Left"> <Entity name="DashLeft">
<Components> <Components>
<c:Animation> <c:Animation>
<AnimationName>StrafeLeftF</AnimationName> <AnimationName>DashLeftF</AnimationName>
<Time>0.32459360994030106</Time> <Time>1</Time>
<Speed>1</Speed> <Speed>2</Speed>
<Play>true</Play> <Loop>false</Loop>
</c:Animation> </c:Animation>
<c:Transform/> <c:Transform/>
</Components> </Components>
<Children/> <Children/>
</Entity> </Entity>
<Entity name="Right"> <Entity name="DashRight">
<Components> <Components>
<c:Animation> <c:Animation>
<AnimationName>StrafeRightF</AnimationName> <AnimationName>DashRightF</AnimationName>
<Time>0.34810913982041569</Time> <Time>1</Time>
<Speed>1</Speed> <Speed>2</Speed>
<Play>true</Play> <Loop>false</Loop>
</c:Animation> </c:Animation>
<c:Transform/> <c:Transform/>
</Components> </Components>
@@ -955,84 +1185,71 @@
</Entity> </Entity>
</Children> </Children>
</Entity> </Entity>
<Entity name="Idle">
<Components>
<c:Animation>
<AnimationName>IdleF</AnimationName>
<Time>1.2585556863362655</Time>
<Speed>1</Speed>
<Play>true</Play>
</c:Animation>
<c:Transform/>
</Components>
<Children/>
</Entity>
</Children> </Children>
</Entity> </Entity>
</Children> </Children>
</Entity> </Entity>
<Entity name="JumpDashBlend"> <Entity name="ReloadSwitchBlend">
<Components> <Components>
<c:Blend> <c:Blend>
<Pose1>Jump</Pose1> <Pose1>ReloadSwitch</Pose1>
<Pose2>DashBlend</Pose2> <Pose2>WeaponActionBlend</Pose2>
<Weight>1</Weight> <Weight>1</Weight>
<SubTreeRoot>true</SubTreeRoot> <SubTreeRoot>true</SubTreeRoot>
</c:Blend> </c:Blend>
<c:Transform/> <c:Transform/>
</Components> </Components>
<Children> <Children>
<Entity name="Jump"> <Entity name="ReloadSwitch">
<Components> <Components>
<c:Animation> <c:Animation>
<AnimationName>JumpF</AnimationName> <AnimationName>ReloadSwitchU</AnimationName>
<Time>0.5</Time> <Time>0.00030848838797092881</Time>
<Speed>1</Speed> <Speed>1</Speed>
<Loop>false</Loop>
</c:Animation> </c:Animation>
<c:Transform/> <c:Transform/>
</Components> </Components>
<Children/> <Children/>
</Entity> </Entity>
<Entity name="DashBlend"> <Entity name="WeaponActionBlend">
<Components> <Components>
<c:Blend> <c:Blend>
<Pose1>DashFBBlend</Pose1> <Pose1>IdleBlend</Pose1>
<Pose2>DashLRBlend</Pose2> <Pose2>ShootBlend</Pose2>
<Weight>0.014621149736541383</Weight> <Weight>0</Weight>
</c:Blend> </c:Blend>
<c:Transform/> <c:Transform/>
</Components> </Components>
<Children> <Children>
<Entity name="DashFBBlend"> <Entity name="IdleBlend">
<Components> <Components>
<c:Blend> <c:Blend>
<Pose1>DashForward</Pose1> <Pose1>IdlePrimary</Pose1>
<Pose2>DashBackward</Pose2> <Pose2>IdleSecondary</Pose2>
<Weight>0.014363533804961248</Weight> <Weight>0</Weight>
</c:Blend> </c:Blend>
<c:Transform/> <c:Transform/>
</Components> </Components>
<Children> <Children>
<Entity name="DashForward"> <Entity name="IdlePrimary">
<Components> <Components>
<c:Animation> <c:Animation>
<AnimationName>DashForwardF</AnimationName> <AnimationName>IdleAssaultRifleU</AnimationName>
<Time>1</Time> <Time>0.56722367394927176</Time>
<Speed>2</Speed> <Speed>1</Speed>
<Loop>false</Loop> <Play>true</Play>
</c:Animation> </c:Animation>
<c:Transform/> <c:Transform/>
</Components> </Components>
<Children/> <Children/>
</Entity> </Entity>
<Entity name="DashBackward"> <Entity name="IdleSecondary">
<Components> <Components>
<c:Animation> <c:Animation>
<AnimationName>DashBackwardF</AnimationName> <AnimationName>IdleSecWepU</AnimationName>
<Time>1</Time> <Time>0.57074871423905904</Time>
<Speed>2</Speed> <Speed>1</Speed>
<Loop>false</Loop> <Play>true</Play>
</c:Animation> </c:Animation>
<c:Transform/> <c:Transform/>
</Components> </Components>
@@ -1040,35 +1257,31 @@
</Entity> </Entity>
</Children> </Children>
</Entity> </Entity>
<Entity name="DashLRBlend"> <Entity name="ShootBlend">
<Components> <Components>
<c:Blend> <c:Blend>
<Pose1>DashLeft</Pose1> <Pose1>ShootPrimary</Pose1>
<Pose2>DashRight</Pose2> <Pose2>ShootSecondary</Pose2>
<Weight>4.3244885367500671e-16</Weight> <Weight>0</Weight>
</c:Blend> </c:Blend>
<c:Transform/> <c:Transform/>
</Components> </Components>
<Children> <Children>
<Entity name="DashLeft"> <Entity name="ShootPrimary">
<Components> <Components>
<c:Animation> <c:Animation>
<AnimationName>DashLeftF</AnimationName> <AnimationName>ShootFastRifleU</AnimationName>
<Time>1</Time> <Time>0.12914212153428517</Time>
<Speed>2</Speed> <Speed>1</Speed>
<Loop>false</Loop>
</c:Animation> </c:Animation>
<c:Transform/> <c:Transform/>
</Components> </Components>
<Children/> <Children/>
</Entity> </Entity>
<Entity name="DashRight"> <Entity name="ShootSecondary">
<Components> <Components>
<c:Animation> <c:Animation>
<AnimationName>DashRightF</AnimationName> <AnimationName>ShootSecWepFastU</AnimationName>
<Time>1</Time>
<Speed>2</Speed>
<Loop>false</Loop>
</c:Animation> </c:Animation>
<c:Transform/> <c:Transform/>
</Components> </Components>
@@ -1082,114 +1295,8 @@
</Entity> </Entity>
</Children> </Children>
</Entity> </Entity>
<Entity name="ReloadSwitchBlend">
<Components>
<c:Blend>
<Pose1>ReloadSwitch</Pose1>
<Pose2>WeaponActionBlend</Pose2>
<Weight>1</Weight>
<SubTreeRoot>true</SubTreeRoot>
</c:Blend>
<c:Transform/>
</Components>
<Children>
<Entity name="ReloadSwitch">
<Components>
<c:Animation>
<AnimationName>ReloadSwitchU</AnimationName>
<Time>0.00030848838797092881</Time>
<Speed>1</Speed>
</c:Animation>
<c:Transform/>
</Components>
<Children/>
</Entity>
<Entity name="WeaponActionBlend">
<Components>
<c:Blend>
<Pose1>IdleBlend</Pose1>
<Pose2>ShootBlend</Pose2>
<Weight>0</Weight>
</c:Blend>
<c:Transform/>
</Components>
<Children>
<Entity name="IdleBlend">
<Components>
<c:Blend>
<Pose1>IdlePrimary</Pose1>
<Pose2>IdleSecondary</Pose2>
<Weight>0</Weight>
</c:Blend>
<c:Transform/>
</Components>
<Children>
<Entity name="IdlePrimary">
<Components>
<c:Animation>
<AnimationName>IdleAssaultRifleU</AnimationName>
<Time>0.56722367394927176</Time>
<Speed>1</Speed>
<Play>true</Play>
</c:Animation>
<c:Transform/>
</Components>
<Children/>
</Entity>
<Entity name="IdleSecondary">
<Components>
<c:Animation>
<AnimationName>IdleSecWepU</AnimationName>
<Time>0.57074871423905904</Time>
<Speed>1</Speed>
<Play>true</Play>
</c:Animation>
<c:Transform/>
</Components>
<Children/>
</Entity>
</Children>
</Entity>
<Entity name="ShootBlend">
<Components>
<c:Blend>
<Pose1>ShootPrimary</Pose1>
<Pose2>ShootSecondary</Pose2>
<Weight>0</Weight>
</c:Blend>
<c:Transform/>
</Components>
<Children>
<Entity name="ShootPrimary">
<Components>
<c:Animation>
<AnimationName>ShootFastRifleU</AnimationName>
<Time>0.12914212153428517</Time>
<Speed>1</Speed>
</c:Animation>
<c:Transform/>
</Components>
<Children/>
</Entity>
<Entity name="ShootSecondary">
<Components>
<c:Animation>
<AnimationName>ShootSecWepFastU</AnimationName>
</c:Animation>
<c:Transform/>
</Components>
<Children/>
</Entity>
</Children>
</Entity>
</Children>
</Entity>
</Children>
</Entity>
</Children> </Children>
</Entity> </Entity>
</Children>
</Entity>
<Entity name="AABBStanding"> <Entity name="AABBStanding">
<Components> <Components>
<c:Model> <c:Model>
+439 -332
View File
@@ -6,7 +6,9 @@
<Origin X="0" Y="0.772000015" Z="0"/> <Origin X="0" Y="0.772000015" Z="0"/>
<Size X="1" Y="1.60000002" Z="1"/> <Size X="1" Y="1.60000002" Z="1"/>
</c:AABB> </c:AABB>
<c:AssaultWeapon/> <c:AssaultWeapon>
<FireCooldown>0.5</FireCooldown>
</c:AssaultWeapon>
<c:Team> <c:Team>
<Team> <Team>
<Red/> <Red/>
@@ -519,7 +521,113 @@
<Orientation X="0.0104048206" Y="-0.00268219248" Z="0.0428443849"/> <Orientation X="0.0104048206" Y="-0.00268219248" Z="0.0428443849"/>
</c:Transform> </c:Transform>
</Components> </Components>
<Children/> <Children>
<Entity name="AssaultWeapon">
<Components>
<c:Model>
<Resource>Models/Weapons/Red/AssaultWeaponRed.mesh</Resource>
</c:Model>
<c:Transform/>
</Components>
<Children>
<Entity name="ReloadEffect">
<Components>
<c:Transform/>
</Components>
<Children/>
</Entity>
<Entity name="WeaponMuzzle">
<Components>
<c:Spawner>
<EntityFile>Schema/Entities/RayRed.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="FirstPersonReloadSpawner">
<Components>
<c:Spawner>
<EntityFile>Schema/Entities/ReloadEffectView.xml</EntityFile>
</c:Spawner>
<c:Transform/>
</Components>
<Children/>
</Entity>
<Entity name="AmmunitionHUD">
<Components>
<c:Transform>
<Position X="-0.0440000035" Y="0.136000007" Z="-0.119000003"/>
<Scale X="0.400000006" Y="0.400000006" Z="0.400000006"/>
</c:Transform>
</Components>
<Children>
<Entity name="AmmunitionHUDBackground">
<Components>
<c:Sprite>
<DiffuseTexture>Textures/Core/UnitHexagon.png</DiffuseTexture>
<GlowMap></GlowMap>
<Color A="0.588235319" B="0" G="0" R="0"/>
</c:Sprite>
<c:Transform>
<Position X="0" Y="0" Z="-0.00200000009"/>
<Scale X="0.119999997" Y="0.119999997" Z="0.119999997"/>
</c:Transform>
</Components>
<Children/>
</Entity>
<Entity name="AmmunitionText">
<Components>
<c:Transform/>
</Components>
<Children>
<Entity name="MagazineAmmo">
<Components>
<c:Text>
<Content>32</Content>
<Resource>Fonts/DroidSans.ttf,64</Resource>
<Color A="1" B="3.92156863" G="1.17647064" R="0"/>
</c:Text>
<c:TextFieldReader>
<ParentEntityName>PlayerAssault</ParentEntityName>
<ComponentType>AssaultWeapon</ComponentType>
<Field>MagazineAmmo</Field>
</c:TextFieldReader>
<c:Transform>
<Scale X="0.0599999987" Y="0.0599999987" Z="0.0599999987"/>
</c:Transform>
</Components>
<Children/>
</Entity>
<Entity name="Ammo">
<Components>
<c:Text>
<Content>320</Content>
<Resource>Fonts/DroidSans.ttf,64</Resource>
<Color A="1" B="3.92156863" G="1.17647064" R="0"/>
</c:Text>
<c:TextFieldReader>
<ParentEntityName>PlayerAssault</ParentEntityName>
<ComponentType>AssaultWeapon</ComponentType>
<Field>Ammo</Field>
</c:TextFieldReader>
<c:Transform>
<Position X="5.2833886e-05" Y="-0.0407950208" Z="0"/>
<Scale X="0.0399999991" Y="0.0399999991" Z="0.0399999991"/>
</c:Transform>
</Components>
<Children/>
</Entity>
</Children>
</Entity>
</Children>
</Entity>
</Children>
</Entity>
</Children>
</Entity> </Entity>
<Entity name="SecondaryAttachment"> <Entity name="SecondaryAttachment">
<Components> <Components>
@@ -652,179 +760,192 @@
<Children/> <Children/>
</Entity> </Entity>
<Entity name="PlayerModel"> <Entity name="PlayerModel">
<Components>
<c:BlendAdditive>
<Adder>BlendTreeAim</Adder>
<Receiver>BlendTreeAssault</Receiver>
</c:BlendAdditive>
<c:Shielded/>
<c:HiddenForLocalPlayer/>
<c:Model>
<Resource>Models/Characters/Assault/AssaultRed.mesh</Resource>
<Color A="1" B="1" G="0.25" R="0"/>
<Visible>false</Visible>
</c:Model>
<c:Transform/>
</Components>
<Children>
<Entity name="PrimaryAttachment">
<Components> <Components>
<c:BoneAttachment> <c:BlendAdditive>
<BoneName>R_Arm_Weapon_Joint</BoneName> <Adder>BlendTreeAim</Adder>
</c:BoneAttachment> <Receiver>BlendTreeAssault</Receiver>
<c:WeaponAttachment> </c:BlendAdditive>
<Weapon>AssaultWeapon</Weapon> <c:Shielded/>
<Person> <c:HiddenForLocalPlayer/>
<ThirdPerson/> <c:Model>
</Person> <Resource>Models/Characters/Assault/AssaultRed.mesh</Resource>
</c:WeaponAttachment> <Color A="1" B="1" G="1" R="1"/>
<c:Spawner> <Visible>true</Visible>
<EntityFile>Schema/Entities/WeaponAssaultRedWorld.xml</EntityFile> </c:Model>
</c:Spawner>
<c:Transform>
<Position X="0.165396646" Y="1.14537966" Z="-0.206537575"/>
<Orientation X="0.484640986" Y="-0.00695174001" Z="0.0685098693"/>
</c:Transform>
</Components>
<Children/>
</Entity>
<Entity name="SecondaryAttachment">
<Components>
<c:BoneAttachment>
<BoneName>R_Arm_Weapon_Joint</BoneName>
</c:BoneAttachment>
<c:WeaponAttachment>
<Weapon>SidearmWeapon</Weapon>
<Person>
<ThirdPerson/>
</Person>
</c:WeaponAttachment>
<c:Spawner>
<EntityFile>Schema/Entities/SidearmWeaponWorld.xml</EntityFile>
</c:Spawner>
<c:Transform>
<Position X="0.165396646" Y="1.14537966" Z="-0.206537575"/>
<Orientation X="0.484640986" Y="-0.00695174001" Z="0.0685098693"/>
</c:Transform>
</Components>
<Children/>
</Entity>
<Entity name="BlendTreeAim">
<Components>
<c:Blend>
<Pose1>AimPrimary</Pose1>
<Pose2>AimSecondary</Pose2>
<Weight>0</Weight>
<SubTreeRoot>true</SubTreeRoot>
</c:Blend>
<c:Transform/> <c:Transform/>
</Components> </Components>
<Children> <Children>
<Entity name="AimSecondary"> <Entity name="PrimaryAttachment">
<Components> <Components>
<c:Animation> <c:BoneAttachment>
<AnimationName>AimSecWepA</AnimationName> <BoneName>R_Arm_Weapon_Joint</BoneName>
<Time>0.71143966913223267</Time> </c:BoneAttachment>
<Loop>false</Loop> <c:WeaponAttachment>
<Additive>true</Additive> <Weapon>AssaultWeapon</Weapon>
</c:Animation> <Person>
<c:Transform/> <ThirdPerson/>
</Person>
</c:WeaponAttachment>
<c:Spawner>
<EntityFile>Schema/Entities/WeaponAssaultRedWorld.xml</EntityFile>
</c:Spawner>
<c:Transform>
<Position X="0.165396646" Y="1.14537966" Z="-0.206537575"/>
<Orientation X="0.484640986" Y="-0.00695174001" Z="0.0685098693"/>
</c:Transform>
</Components> </Components>
<Children/> <Children/>
</Entity> </Entity>
<Entity name="AimPrimary"> <Entity name="SecondaryAttachment">
<Components> <Components>
<c:Animation> <c:BoneAttachment>
<AnimationName>AimRifleA</AnimationName> <BoneName>R_Arm_Weapon_Joint</BoneName>
<Time>0.71143966913223267</Time> </c:BoneAttachment>
<Loop>false</Loop> <c:WeaponAttachment>
<Additive>true</Additive> <Weapon>SidearmWeapon</Weapon>
</c:Animation> <Person>
<c:Transform/> <ThirdPerson/>
</Person>
</c:WeaponAttachment>
<c:Spawner>
<EntityFile>Schema/Entities/SidearmWeaponWorld.xml</EntityFile>
</c:Spawner>
<c:Transform>
<Position X="0.165396646" Y="1.14537966" Z="-0.206537575"/>
<Orientation X="0.484640986" Y="-0.00695174001" Z="0.0685098693"/>
</c:Transform>
</Components> </Components>
<Children/> <Children/>
</Entity> </Entity>
</Children> <Entity name="BlendTreeAim">
</Entity>
<Entity name="BlendTreeAssault">
<Components>
<c:BlendOverride>
<Master>ReloadSwitchBlend</Master>
<Slave>FinalMovementBlend</Slave>
</c:BlendOverride>
<c:Transform/>
</Components>
<Children>
<Entity name="FinalMovementBlend">
<Components> <Components>
<c:Blend> <c:Blend>
<Pose1>StandCrouchBlend</Pose1> <Pose1>AimPrimary</Pose1>
<Pose2>JumpDashBlend</Pose2> <Pose2>AimSecondary</Pose2>
<Weight>2.5146881298480398e-63</Weight> <Weight>0</Weight>
<SubTreeRoot>true</SubTreeRoot> <SubTreeRoot>true</SubTreeRoot>
</c:Blend> </c:Blend>
<c:Transform/> <c:Transform/>
</Components> </Components>
<Children> <Children>
<Entity name="StandCrouchBlend"> <Entity name="AimSecondary">
<Components>
<c:Animation>
<AnimationName>AimSecWepA</AnimationName>
<Time>0.71143966913223267</Time>
<Loop>false</Loop>
<Additive>true</Additive>
</c:Animation>
<c:Transform/>
</Components>
<Children/>
</Entity>
<Entity name="AimPrimary">
<Components>
<c:Animation>
<AnimationName>AimRifleA</AnimationName>
<Time>0.71143966913223267</Time>
<Loop>false</Loop>
<Additive>true</Additive>
</c:Animation>
<c:Transform/>
</Components>
<Children/>
</Entity>
</Children>
</Entity>
<Entity name="BlendTreeAssault">
<Components>
<c:BlendOverride>
<Master>ReloadSwitchBlend</Master>
<Slave>FinalMovementBlend</Slave>
</c:BlendOverride>
<c:Transform/>
</Components>
<Children>
<Entity name="FinalMovementBlend">
<Components> <Components>
<c:Blend> <c:Blend>
<Pose1>StandMovement</Pose1> <Pose1>StandCrouchBlend</Pose1>
<Pose2>CrouchMovement</Pose2> <Pose2>JumpDashBlend</Pose2>
<Weight>0</Weight> <Weight>2.5146881298480398e-63</Weight>
<SubTreeRoot>true</SubTreeRoot> <SubTreeRoot>true</SubTreeRoot>
</c:Blend> </c:Blend>
<c:Transform/> <c:Transform/>
</Components> </Components>
<Children> <Children>
<Entity name="CrouchMovement"> <Entity name="StandCrouchBlend">
<Components> <Components>
<c:Blend> <c:Blend>
<Pose1>MovementBlend</Pose1> <Pose1>StandMovement</Pose1>
<Pose2>Idle</Pose2> <Pose2>CrouchMovement</Pose2>
<Weight>1</Weight> <Weight>0</Weight>
<SubTreeRoot>true</SubTreeRoot>
</c:Blend> </c:Blend>
<c:Transform/> <c:Transform/>
</Components> </Components>
<Children> <Children>
<Entity name="MovementBlend"> <Entity name="CrouchMovement">
<Components> <Components>
<c:Blend> <c:Blend>
<Pose1>Walk</Pose1> <Pose1>MovementBlend</Pose1>
<Pose2>StrafeLRBlend</Pose2> <Pose2>Idle</Pose2>
<Weight>0</Weight> <Weight>1</Weight>
</c:Blend> </c:Blend>
<c:Transform/> <c:Transform/>
</Components> </Components>
<Children> <Children>
<Entity name="StrafeLRBlend"> <Entity name="MovementBlend">
<Components> <Components>
<c:Blend> <c:Blend>
<Pose1>Left</Pose1> <Pose1>Walk</Pose1>
<Pose2>Right</Pose2> <Pose2>StrafeLRBlend</Pose2>
<Weight>0.033793529385008014</Weight> <Weight>0</Weight>
</c:Blend> </c:Blend>
<c:Transform/> <c:Transform/>
</Components> </Components>
<Children> <Children>
<Entity name="Left"> <Entity name="StrafeLRBlend">
<Components> <Components>
<c:Animation> <c:Blend>
<AnimationName>CrouchStrafeLeftF</AnimationName> <Pose1>Left</Pose1>
<Time>0.93215091236880454</Time> <Pose2>Right</Pose2>
<Speed>1</Speed> <Weight>0.033793529385008014</Weight>
<Play>true</Play> </c:Blend>
</c:Animation>
<c:Transform/> <c:Transform/>
</Components> </Components>
<Children/> <Children>
<Entity name="Left">
<Components>
<c:Animation>
<AnimationName>CrouchStrafeLeftF</AnimationName>
<Time>0.93215091236880454</Time>
<Speed>1</Speed>
<Play>true</Play>
</c:Animation>
<c:Transform/>
</Components>
<Children/>
</Entity>
<Entity name="Right">
<Components>
<c:Animation>
<AnimationName>CrouchStrafeRightF</AnimationName>
<Time>0.85947237431958712</Time>
<Speed>1</Speed>
<Play>true</Play>
</c:Animation>
<c:Transform/>
</Components>
<Children/>
</Entity>
</Children>
</Entity> </Entity>
<Entity name="Right"> <Entity name="Walk">
<Components> <Components>
<c:Animation> <c:Animation>
<AnimationName>CrouchStrafeRightF</AnimationName> <AnimationName>CrouchWalkF</AnimationName>
<Time>0.85947237431958712</Time> <Time>0.63784635949699009</Time>
<Speed>1</Speed> <Speed>1</Speed>
<Play>true</Play> <Play>true</Play>
</c:Animation> </c:Animation>
@@ -834,11 +955,118 @@
</Entity> </Entity>
</Children> </Children>
</Entity> </Entity>
<Entity name="Walk"> <Entity name="Idle">
<Components> <Components>
<c:Animation> <c:Animation>
<AnimationName>CrouchWalkF</AnimationName> <AnimationName>CrouchF</AnimationName>
<Time>0.63784635949699009</Time> <Time>0.99862473341677438</Time>
<Speed>1</Speed>
</c:Animation>
<c:Transform/>
</Components>
<Children/>
</Entity>
</Children>
</Entity>
<Entity name="StandMovement">
<Components>
<c:Blend>
<Pose1>MovementBlend</Pose1>
<Pose2>Idle</Pose2>
<Weight>1</Weight>
</c:Blend>
<c:Transform/>
</Components>
<Children>
<Entity name="MovementBlend">
<Components>
<c:Blend>
<Pose1>RunWalkBlend</Pose1>
<Pose2>StrafeLRBlend</Pose2>
<Weight>2.4565650245976452e-16</Weight>
</c:Blend>
<c:Transform/>
</Components>
<Children>
<Entity name="StrafeLRBlend">
<Components>
<c:Blend>
<Pose1>Left</Pose1>
<Pose2>Right</Pose2>
<Weight>0.033793529385008014</Weight>
</c:Blend>
<c:Transform/>
</Components>
<Children>
<Entity name="Left">
<Components>
<c:Animation>
<AnimationName>StrafeLeftF</AnimationName>
<Time>0.32459360994030106</Time>
<Speed>1</Speed>
<Play>true</Play>
</c:Animation>
<c:Transform/>
</Components>
<Children/>
</Entity>
<Entity name="Right">
<Components>
<c:Animation>
<AnimationName>StrafeRightF</AnimationName>
<Time>0.34810913982041569</Time>
<Speed>1</Speed>
<Play>true</Play>
</c:Animation>
<c:Transform/>
</Components>
<Children/>
</Entity>
</Children>
</Entity>
<Entity name="RunWalkBlend">
<Components>
<c:Blend>
<Pose1>Walk</Pose1>
<Pose2>Run</Pose2>
<Weight>1.2938206818383024e-24</Weight>
</c:Blend>
<c:Transform/>
</Components>
<Children>
<Entity name="Walk">
<Components>
<c:Animation>
<AnimationName>WalkF</AnimationName>
<Time>0.14300098890676338</Time>
<Speed>1</Speed>
<Play>true</Play>
</c:Animation>
<c:Transform/>
</Components>
<Children/>
</Entity>
<Entity name="Run">
<Components>
<c:Animation>
<AnimationName>RunF</AnimationName>
<Time>0.41501449293066628</Time>
<Speed>1</Speed>
<Play>true</Play>
</c:Animation>
<c:Transform/>
</Components>
<Children/>
</Entity>
</Children>
</Entity>
</Children>
</Entity>
<Entity name="Idle">
<Components>
<c:Animation>
<AnimationName>IdleF</AnimationName>
<Time>1.2585556863362655</Time>
<Speed>1</Speed> <Speed>1</Speed>
<Play>true</Play> <Play>true</Play>
</c:Animation> </c:Animation>
@@ -848,68 +1076,70 @@
</Entity> </Entity>
</Children> </Children>
</Entity> </Entity>
<Entity name="Idle"> </Children>
</Entity>
<Entity name="JumpDashBlend">
<Components>
<c:Blend>
<Pose1>Jump</Pose1>
<Pose2>DashBlend</Pose2>
<Weight>1</Weight>
<SubTreeRoot>true</SubTreeRoot>
</c:Blend>
<c:Transform/>
</Components>
<Children>
<Entity name="Jump">
<Components> <Components>
<c:Animation> <c:Animation>
<AnimationName>CrouchF</AnimationName> <AnimationName>JumpF</AnimationName>
<Time>0.99862473341677438</Time> <Time>0.5</Time>
<Speed>1</Speed> <Speed>1</Speed>
<Loop>false</Loop>
</c:Animation> </c:Animation>
<c:Transform/> <c:Transform/>
</Components> </Components>
<Children/> <Children/>
</Entity> </Entity>
</Children> <Entity name="DashBlend">
</Entity>
<Entity name="StandMovement">
<Components>
<c:Blend>
<Pose1>MovementBlend</Pose1>
<Pose2>Idle</Pose2>
<Weight>1</Weight>
</c:Blend>
<c:Transform/>
</Components>
<Children>
<Entity name="MovementBlend">
<Components> <Components>
<c:Blend> <c:Blend>
<Pose1>RunWalkBlend</Pose1> <Pose1>DashFBBlend</Pose1>
<Pose2>StrafeLRBlend</Pose2> <Pose2>DashLRBlend</Pose2>
<Weight>2.4565650245976452e-16</Weight> <Weight>0.014621149736541383</Weight>
</c:Blend> </c:Blend>
<c:Transform/> <c:Transform/>
</Components> </Components>
<Children> <Children>
<Entity name="RunWalkBlend"> <Entity name="DashFBBlend">
<Components> <Components>
<c:Blend> <c:Blend>
<Pose1>Walk</Pose1> <Pose1>DashForward</Pose1>
<Pose2>Run</Pose2> <Pose2>DashBackward</Pose2>
<Weight>1.2938206818383024e-24</Weight> <Weight>0.014363533804961248</Weight>
</c:Blend> </c:Blend>
<c:Transform/> <c:Transform/>
</Components> </Components>
<Children> <Children>
<Entity name="Walk"> <Entity name="DashForward">
<Components> <Components>
<c:Animation> <c:Animation>
<AnimationName>WalkF</AnimationName> <AnimationName>DashForwardF</AnimationName>
<Time>0.14300098890676338</Time> <Time>1</Time>
<Speed>1</Speed> <Speed>2</Speed>
<Play>true</Play> <Loop>false</Loop>
</c:Animation> </c:Animation>
<c:Transform/> <c:Transform/>
</Components> </Components>
<Children/> <Children/>
</Entity> </Entity>
<Entity name="Run"> <Entity name="DashBackward">
<Components> <Components>
<c:Animation> <c:Animation>
<AnimationName>RunF</AnimationName> <AnimationName>DashBackwardF</AnimationName>
<Time>0.41501449293066628</Time> <Time>1</Time>
<Speed>1</Speed> <Speed>2</Speed>
<Play>true</Play> <Loop>false</Loop>
</c:Animation> </c:Animation>
<c:Transform/> <c:Transform/>
</Components> </Components>
@@ -917,35 +1147,35 @@
</Entity> </Entity>
</Children> </Children>
</Entity> </Entity>
<Entity name="StrafeLRBlend"> <Entity name="DashLRBlend">
<Components> <Components>
<c:Blend> <c:Blend>
<Pose1>Left</Pose1> <Pose1>DashLeft</Pose1>
<Pose2>Right</Pose2> <Pose2>DashRight</Pose2>
<Weight>0.033793529385008014</Weight> <Weight>4.3244885367500671e-16</Weight>
</c:Blend> </c:Blend>
<c:Transform/> <c:Transform/>
</Components> </Components>
<Children> <Children>
<Entity name="Left"> <Entity name="DashLeft">
<Components> <Components>
<c:Animation> <c:Animation>
<AnimationName>StrafeLeftF</AnimationName> <AnimationName>DashLeftF</AnimationName>
<Time>0.32459360994030106</Time> <Time>1</Time>
<Speed>1</Speed> <Speed>2</Speed>
<Play>true</Play> <Loop>false</Loop>
</c:Animation> </c:Animation>
<c:Transform/> <c:Transform/>
</Components> </Components>
<Children/> <Children/>
</Entity> </Entity>
<Entity name="Right"> <Entity name="DashRight">
<Components> <Components>
<c:Animation> <c:Animation>
<AnimationName>StrafeRightF</AnimationName> <AnimationName>DashRightF</AnimationName>
<Time>0.34810913982041569</Time> <Time>1</Time>
<Speed>1</Speed> <Speed>2</Speed>
<Play>true</Play> <Loop>false</Loop>
</c:Animation> </c:Animation>
<c:Transform/> <c:Transform/>
</Components> </Components>
@@ -955,84 +1185,71 @@
</Entity> </Entity>
</Children> </Children>
</Entity> </Entity>
<Entity name="Idle">
<Components>
<c:Animation>
<AnimationName>IdleF</AnimationName>
<Time>1.2585556863362655</Time>
<Speed>1</Speed>
<Play>true</Play>
</c:Animation>
<c:Transform/>
</Components>
<Children/>
</Entity>
</Children> </Children>
</Entity> </Entity>
</Children> </Children>
</Entity> </Entity>
<Entity name="JumpDashBlend"> <Entity name="ReloadSwitchBlend">
<Components> <Components>
<c:Blend> <c:Blend>
<Pose1>Jump</Pose1> <Pose1>ReloadSwitch</Pose1>
<Pose2>DashBlend</Pose2> <Pose2>WeaponActionBlend</Pose2>
<Weight>1</Weight> <Weight>1</Weight>
<SubTreeRoot>true</SubTreeRoot> <SubTreeRoot>true</SubTreeRoot>
</c:Blend> </c:Blend>
<c:Transform/> <c:Transform/>
</Components> </Components>
<Children> <Children>
<Entity name="Jump"> <Entity name="ReloadSwitch">
<Components> <Components>
<c:Animation> <c:Animation>
<AnimationName>JumpF</AnimationName> <AnimationName>ReloadSwitchU</AnimationName>
<Time>0.5</Time> <Time>0.00030848838797092881</Time>
<Speed>1</Speed> <Speed>1</Speed>
<Loop>false</Loop>
</c:Animation> </c:Animation>
<c:Transform/> <c:Transform/>
</Components> </Components>
<Children/> <Children/>
</Entity> </Entity>
<Entity name="DashBlend"> <Entity name="WeaponActionBlend">
<Components> <Components>
<c:Blend> <c:Blend>
<Pose1>DashFBBlend</Pose1> <Pose1>IdleBlend</Pose1>
<Pose2>DashLRBlend</Pose2> <Pose2>ShootBlend</Pose2>
<Weight>0.014621149736541383</Weight> <Weight>0</Weight>
</c:Blend> </c:Blend>
<c:Transform/> <c:Transform/>
</Components> </Components>
<Children> <Children>
<Entity name="DashFBBlend"> <Entity name="IdleBlend">
<Components> <Components>
<c:Blend> <c:Blend>
<Pose1>DashForward</Pose1> <Pose1>IdlePrimary</Pose1>
<Pose2>DashBackward</Pose2> <Pose2>IdleSecondary</Pose2>
<Weight>0.014363533804961248</Weight> <Weight>0</Weight>
</c:Blend> </c:Blend>
<c:Transform/> <c:Transform/>
</Components> </Components>
<Children> <Children>
<Entity name="DashForward"> <Entity name="IdlePrimary">
<Components> <Components>
<c:Animation> <c:Animation>
<AnimationName>DashForwardF</AnimationName> <AnimationName>IdleAssaultRifleU</AnimationName>
<Time>1</Time> <Time>0.56722367394927176</Time>
<Speed>2</Speed> <Speed>1</Speed>
<Loop>false</Loop> <Play>true</Play>
</c:Animation> </c:Animation>
<c:Transform/> <c:Transform/>
</Components> </Components>
<Children/> <Children/>
</Entity> </Entity>
<Entity name="DashBackward"> <Entity name="IdleSecondary">
<Components> <Components>
<c:Animation> <c:Animation>
<AnimationName>DashBackwardF</AnimationName> <AnimationName>IdleSecWepU</AnimationName>
<Time>1</Time> <Time>0.57074871423905904</Time>
<Speed>2</Speed> <Speed>1</Speed>
<Loop>false</Loop> <Play>true</Play>
</c:Animation> </c:Animation>
<c:Transform/> <c:Transform/>
</Components> </Components>
@@ -1040,35 +1257,31 @@
</Entity> </Entity>
</Children> </Children>
</Entity> </Entity>
<Entity name="DashLRBlend"> <Entity name="ShootBlend">
<Components> <Components>
<c:Blend> <c:Blend>
<Pose1>DashLeft</Pose1> <Pose1>ShootPrimary</Pose1>
<Pose2>DashRight</Pose2> <Pose2>ShootSecondary</Pose2>
<Weight>4.3244885367500671e-16</Weight> <Weight>0</Weight>
</c:Blend> </c:Blend>
<c:Transform/> <c:Transform/>
</Components> </Components>
<Children> <Children>
<Entity name="DashLeft"> <Entity name="ShootPrimary">
<Components> <Components>
<c:Animation> <c:Animation>
<AnimationName>DashLeftF</AnimationName> <AnimationName>ShootFastRifleU</AnimationName>
<Time>1</Time> <Time>0.12914212153428517</Time>
<Speed>2</Speed> <Speed>1</Speed>
<Loop>false</Loop>
</c:Animation> </c:Animation>
<c:Transform/> <c:Transform/>
</Components> </Components>
<Children/> <Children/>
</Entity> </Entity>
<Entity name="DashRight"> <Entity name="ShootSecondary">
<Components> <Components>
<c:Animation> <c:Animation>
<AnimationName>DashRightF</AnimationName> <AnimationName>ShootSecWepFastU</AnimationName>
<Time>1</Time>
<Speed>2</Speed>
<Loop>false</Loop>
</c:Animation> </c:Animation>
<c:Transform/> <c:Transform/>
</Components> </Components>
@@ -1082,114 +1295,8 @@
</Entity> </Entity>
</Children> </Children>
</Entity> </Entity>
<Entity name="ReloadSwitchBlend">
<Components>
<c:Blend>
<Pose1>ReloadSwitch</Pose1>
<Pose2>WeaponActionBlend</Pose2>
<Weight>1</Weight>
<SubTreeRoot>true</SubTreeRoot>
</c:Blend>
<c:Transform/>
</Components>
<Children>
<Entity name="ReloadSwitch">
<Components>
<c:Animation>
<AnimationName>ReloadSwitchU</AnimationName>
<Time>0.00030848838797092881</Time>
<Speed>1</Speed>
</c:Animation>
<c:Transform/>
</Components>
<Children/>
</Entity>
<Entity name="WeaponActionBlend">
<Components>
<c:Blend>
<Pose1>IdleBlend</Pose1>
<Pose2>ShootBlend</Pose2>
<Weight>0</Weight>
</c:Blend>
<c:Transform/>
</Components>
<Children>
<Entity name="IdleBlend">
<Components>
<c:Blend>
<Pose1>IdlePrimary</Pose1>
<Pose2>IdleSecondary</Pose2>
<Weight>0</Weight>
</c:Blend>
<c:Transform/>
</Components>
<Children>
<Entity name="IdlePrimary">
<Components>
<c:Animation>
<AnimationName>IdleAssaultRifleU</AnimationName>
<Time>0.56722367394927176</Time>
<Speed>1</Speed>
<Play>true</Play>
</c:Animation>
<c:Transform/>
</Components>
<Children/>
</Entity>
<Entity name="IdleSecondary">
<Components>
<c:Animation>
<AnimationName>IdleSecWepU</AnimationName>
<Time>0.57074871423905904</Time>
<Speed>1</Speed>
<Play>true</Play>
</c:Animation>
<c:Transform/>
</Components>
<Children/>
</Entity>
</Children>
</Entity>
<Entity name="ShootBlend">
<Components>
<c:Blend>
<Pose1>ShootPrimary</Pose1>
<Pose2>ShootSecondary</Pose2>
<Weight>0</Weight>
</c:Blend>
<c:Transform/>
</Components>
<Children>
<Entity name="ShootPrimary">
<Components>
<c:Animation>
<AnimationName>ShootFastRifleU</AnimationName>
<Time>0.12914212153428517</Time>
<Speed>1</Speed>
</c:Animation>
<c:Transform/>
</Components>
<Children/>
</Entity>
<Entity name="ShootSecondary">
<Components>
<c:Animation>
<AnimationName>ShootSecWepFastU</AnimationName>
</c:Animation>
<c:Transform/>
</Components>
<Children/>
</Entity>
</Children>
</Entity>
</Children>
</Entity>
</Children>
</Entity>
</Children> </Children>
</Entity> </Entity>
</Children>
</Entity>
<Entity name="AABBStanding"> <Entity name="AABBStanding">
<Components> <Components>
<c:Model> <c:Model>
+14 -14
View File
@@ -49,16 +49,16 @@ void Client::Connect(std::string address, int port)
void Client::Update() void Client::Update()
{ {
m_EventBroker->Process<Client>(); m_EventBroker->Process<Client>();
while (m_Unreliable.IsSocketAvailable()) { //while (m_Unreliable.IsSocketAvailable()) {
// Packet will get real data in receive // // Packet will get real data in receive
Packet packet(MessageType::Invalid); // Packet packet(MessageType::Invalid);
m_Unreliable.Receive(packet); // m_Unreliable.Receive(packet);
if (packet.GetMessageType() == MessageType::Connect) { // if (packet.GetMessageType() == MessageType::Connect) {
parseUDPConnect(packet); // parseUDPConnect(packet);
} else { // } else {
parseMessageType(packet); // parseMessageType(packet);
} // }
} //}
while (m_Reliable.IsSocketAvailable()) { while (m_Reliable.IsSocketAvailable()) {
// Packet will get real data in receive // Packet will get real data in receive
Packet packet(MessageType::Invalid); Packet packet(MessageType::Invalid);
@@ -177,8 +177,8 @@ void Client::parseTCPConnect(Packet& packet)
Packet UnreliablePacket(MessageType::Connect, m_SendPacketID); Packet UnreliablePacket(MessageType::Connect, m_SendPacketID);
// Add player id and other stuff // Add player id and other stuff
packet.WritePrimitive(m_PlayerID); packet.WritePrimitive(m_PlayerID);
m_Unreliable.Send(packet); // m_Unreliable.Send(packet);
LOG_INFO("Sent UDP Connect Server"); // LOG_INFO("Sent UDP Connect Server");
} }
void Client::parsePlayerConnected(Packet & packet) void Client::parsePlayerConnected(Packet & packet)
@@ -476,7 +476,7 @@ bool Client::OnInputCommand(const Events::InputCommand & e)
if (e.Command == "ConnectToServer") { // Connect for now if (e.Command == "ConnectToServer") { // Connect for now
if (e.Value > 0) { if (e.Value > 0) {
m_Reliable.Connect(m_PlayerName, m_Address, m_Port); m_Reliable.Connect(m_PlayerName, m_Address, m_Port);
m_Unreliable.Connect(m_PlayerName, m_Address, m_Port); // m_Unreliable.Connect(m_PlayerName, m_Address, m_Port);
} }
//LOG_DEBUG("Client::OnInputCommand: Command is %s. Value is %f. PlayerID is %i.", e.Command.c_str(), e.Value, e.PlayerID); //LOG_DEBUG("Client::OnInputCommand: Command is %s. Value is %f. PlayerID is %i.", e.Command.c_str(), e.Value, e.PlayerID);
return true; return true;
@@ -613,7 +613,7 @@ void Client::sendLocalPlayerTransform()
packet.WritePrimitive((int)cAssaultWeapon["Ammo"]); packet.WritePrimitive((int)cAssaultWeapon["Ammo"]);
} }
m_Unreliable.Send(packet); m_Reliable.Send(packet);
} }
void Client::identifyPacketLoss() void Client::identifyPacketLoss()
+37 -34
View File
@@ -47,19 +47,19 @@ void Server::Update()
} }
} }
PlayerDefinition pd; //PlayerDefinition pd;
while (m_Unreliable.IsSocketAvailable()) { //while (m_Unreliable.IsSocketAvailable()) {
// Packet will get real data in receive // // Packet will get real data in receive
Packet packet(MessageType::Invalid); // Packet packet(MessageType::Invalid);
m_Unreliable.Receive(packet, pd); // m_Unreliable.Receive(packet, pd);
m_Address = pd.Endpoint.address(); // m_Address = pd.Endpoint.address();
m_Port = pd.Endpoint.port(); // m_Port = pd.Endpoint.port();
if (packet.GetMessageType() == MessageType::Connect) { // if (packet.GetMessageType() == MessageType::Connect) {
parseUDPConnect(packet); // parseUDPConnect(packet);
} else { // } else {
parseMessageType(packet); // parseMessageType(packet);
} // }
} //}
while (m_ServerlistRequest.IsSocketAvailable()) { while (m_ServerlistRequest.IsSocketAvailable()) {
Packet packet(MessageType::Invalid); Packet packet(MessageType::Invalid);
@@ -162,7 +162,7 @@ void Server::unreliableBroadcast(Packet& packet)
{ {
for (auto& kv : m_ConnectedPlayers) { for (auto& kv : m_ConnectedPlayers) {
packet.ChangePacketID(kv.second.PacketID); packet.ChangePacketID(kv.second.PacketID);
m_Unreliable.Send(packet, kv.second); // m_Unreliable.Send(packet, kv.second);
} }
} }
@@ -172,7 +172,7 @@ void Server::sendSnapshot()
Packet packet(MessageType::Snapshot); Packet packet(MessageType::Snapshot);
addInputCommandsToPacket(packet); addInputCommandsToPacket(packet);
addPlayersToPacket(packet, EntityID_Invalid); addPlayersToPacket(packet, EntityID_Invalid);
unreliableBroadcast(packet); reliableBroadcast(packet);
} }
void Server::addInputCommandsToPacket(Packet& packet) void Server::addInputCommandsToPacket(Packet& packet)
@@ -320,25 +320,28 @@ void Server::checkForTimeOuts()
} }
} }
void Server::parseUDPConnect(Packet & packet) //void Server::parseUDPConnect(Packet & packet)
{ //{
// Pop size of message int // // Pop size of message int
packet.ReadPrimitive<int>(); // packet.ReadPrimitive<int>();
int messageType = packet.ReadPrimitive<int>(); // int messageType = packet.ReadPrimitive<int>();
// Read packet ID // // Read packet ID
m_PreviousPacketID = m_PacketID; // Set previous packet id // m_PreviousPacketID = m_PacketID; // Set previous packet id
m_PacketID = packet.ReadPrimitive<int>(); //Read new packet id // m_PacketID = packet.ReadPrimitive<int>(); //Read new packet id
// parse player id and other stuff // // parse player id and other stuff
PlayerID playerID = packet.ReadPrimitive<int>(); // PlayerID playerID = packet.ReadPrimitive<int>();
// Do something here? // if (!EntityWrapper(m_World, playerID).Valid()) {
boost::asio::ip::udp::endpoint endpoint(m_Address, m_Port); //
m_ConnectedPlayers.at(playerID).Endpoint = endpoint; // }
LOG_INFO("parseUDPConnect: Spectator \"%s\" connected on IP: %s", m_ConnectedPlayers.at(playerID).Name.c_str(), m_ConnectedPlayers.at(playerID).Endpoint.address().to_string().c_str()); // // Do something here?
// Send a message to the player that connected // boost::asio::ip::udp::endpoint endpoint(m_Address, m_Port);
Packet connnectPacket(MessageType::Connect, m_ConnectedPlayers.at(playerID).PacketID); // m_ConnectedPlayers.at(playerID).Endpoint = endpoint;
m_Unreliable.Send(connnectPacket); // LOG_INFO("parseUDPConnect: Spectator \"%s\" connected on IP: %s", m_ConnectedPlayers.at(playerID).Name.c_str(), m_ConnectedPlayers.at(playerID).Endpoint.address().to_string().c_str());
LOG_INFO("UDP Connect sent to client"); // // Send a message to the player that connected
} // Packet connnectPacket(MessageType::Connect, m_ConnectedPlayers.at(playerID).PacketID);
// m_Unreliable.Send(connnectPacket);
// LOG_INFO("UDP Connect sent to client");
//}
void Server::parseTCPConnect(Packet & packet) void Server::parseTCPConnect(Packet & packet)
{ {
+8 -3
View File
@@ -21,33 +21,38 @@ void UDPServer::Send(Packet& packet, PlayerDefinition & playerDefinition)
boost::asio::buffer(packet.Data(), packet.Size()), boost::asio::buffer(packet.Data(), packet.Size()),
playerDefinition.Endpoint, playerDefinition.Endpoint,
0); 0);
LOG_INFO("Size of packet is %i", bytesSent);
} catch (const boost::system::system_error& e) { } catch (const boost::system::system_error& e) {
LOG_INFO(e.what());
// TODO: Clean up invalid endpoints out of m_ConnectedPlayers later // TODO: Clean up invalid endpoints out of m_ConnectedPlayers later
playerDefinition.Endpoint = boost::asio::ip::udp::endpoint(); playerDefinition.Endpoint = boost::asio::ip::udp::endpoint();
} }
} }
// Send back to endpoint of received packet // Send back to endpoint of received packet
void UDPServer::Send(Packet & packet) void UDPServer::Send(Packet & packet)
{ {
packet.UpdateSize(); packet.UpdateSize();
m_Socket->send_to( size_t bytesSent = m_Socket->send_to(
boost::asio::buffer( boost::asio::buffer(
packet.Data(), packet.Data(),
packet.Size()), packet.Size()),
m_ReceiverEndpoint, m_ReceiverEndpoint,
0); 0);
LOG_INFO("Size of packet is %i", bytesSent);
} }
// Broadcasting respond specific logic // Broadcasting respond specific logic
void UDPServer::Send(Packet & packet, boost::asio::ip::udp::endpoint endpoint) void UDPServer::Send(Packet & packet, boost::asio::ip::udp::endpoint endpoint)
{ {
packet.UpdateSize(); packet.UpdateSize();
m_Socket->send_to( size_t bytesSent = m_Socket->send_to(
boost::asio::buffer( boost::asio::buffer(
packet.Data(), packet.Data(),
packet.Size()), packet.Size()),
endpoint, endpoint,
0); 0);
LOG_INFO("Size of packet is %i", bytesSent);
} }
// Broadcasting // Broadcasting
@@ -55,7 +60,7 @@ void UDPServer::Broadcast(Packet & packet, int port)
{ {
packet.UpdateSize(); packet.UpdateSize();
m_Socket->set_option(boost::asio::socket_base::broadcast(true)); m_Socket->set_option(boost::asio::socket_base::broadcast(true));
m_Socket->send_to( size_t bytesSent = m_Socket->send_to(
boost::asio::buffer( boost::asio::buffer(
packet.Data(), packet.Data(),
packet.Size()), packet.Size()),
@@ -39,8 +39,12 @@ void AssaultWeaponBehaviour::UpdateWeapon(ComponentWrapper cWeapon, WeaponInfo&
ammo = glm::max(0, ammo - (magSize - magAmmo)); ammo = glm::max(0, ammo - (magSize - magAmmo));
magAmmo = glm::min(magSize, ammo); magAmmo = glm::min(magSize, ammo);
isReloading = false; isReloading = false;
wi.FirstPersonEntity["Model"]["Visible"] = true; if (wi.FirstPersonEntity.Valid()) {
wi.ThirdPersonEntity["Model"]["Visible"] = true; wi.FirstPersonEntity["Model"]["Visible"] = true;
}
if (wi.ThirdPersonEntity.Valid()) {
wi.ThirdPersonEntity["Model"]["Visible"] = true;
}
} }
// Restore view angle // Restore view angle
@@ -124,8 +128,12 @@ void AssaultWeaponBehaviour::OnReload(ComponentWrapper cWeapon, WeaponInfo& wi)
if (reloadEffectSpawner.Valid()) { if (reloadEffectSpawner.Valid()) {
SpawnerSystem::Spawn(reloadEffectSpawner, reloadEffectSpawner); SpawnerSystem::Spawn(reloadEffectSpawner, reloadEffectSpawner);
} }
wi.FirstPersonEntity["Model"]["Visible"] = false; if (wi.FirstPersonEntity.Valid()) {
wi.ThirdPersonEntity["Model"]["Visible"] = false; wi.FirstPersonEntity["Model"]["Visible"] = false;
}
if (wi.ThirdPersonEntity.Valid()) {
wi.ThirdPersonEntity["Model"]["Visible"] = false;
}
} }
// Sound // Sound