Quellcode durchsuchen

Merge pull request #294 from aws-lumberyard-dev/mbalfour/gitflow_230330_o3de_multiplayersample

Stabilization to development merge
Mike Balfour vor 2 Jahren
Ursprung
Commit
fc5186a03e
39 geänderte Dateien mit 4048 neuen und 3408 gelöschten Zeilen
  1. 11 1
      Gem/Code/Include/WeaponNotificationBus.h
  2. 21 5
      Gem/Code/Source/AutoGen/EnergyBallComponent.AutoComponent.xml
  3. 12 4
      Gem/Code/Source/AutoGen/EnergyCannonComponent.AutoComponent.xml
  4. 1 1
      Gem/Code/Source/AutoGen/NetworkHealthComponent.AutoComponent.xml
  5. 24 0
      Gem/Code/Source/AutoGen/NetworkPlayerMovementComponent.AutoComponent.xml
  6. 1 1
      Gem/Code/Source/AutoGen/NetworkTeleportComponent.AutoComponent.xml
  7. 1 1
      Gem/Code/Source/AutoGen/NetworkWeaponsComponent.AutoComponent.xml
  8. 0 18
      Gem/Code/Source/AutoGen/PlayerKnockbackEffectComponent.AutoComponent.xml
  9. 119 72
      Gem/Code/Source/Components/Multiplayer/EnergyBallComponent.cpp
  10. 31 18
      Gem/Code/Source/Components/Multiplayer/EnergyBallComponent.h
  11. 51 12
      Gem/Code/Source/Components/Multiplayer/EnergyCannonComponent.cpp
  12. 26 1
      Gem/Code/Source/Components/Multiplayer/EnergyCannonComponent.h
  13. 0 52
      Gem/Code/Source/Components/Multiplayer/PlayerKnockbackEffectComponent.cpp
  14. 0 27
      Gem/Code/Source/Components/Multiplayer/PlayerKnockbackEffectComponent.h
  15. 45 6
      Gem/Code/Source/Components/NetworkPlayerMovementComponent.cpp
  16. 7 0
      Gem/Code/Source/Components/NetworkPlayerMovementComponent.h
  17. 21 0
      Gem/Code/Source/Components/NetworkWeaponsComponent.cpp
  18. 5 0
      Gem/Code/Source/Effects/GameEffect.cpp
  19. 4 0
      Gem/Code/Source/Effects/GameEffect.h
  20. 3 2
      Gem/Code/Source/MultiplayerSampleSystemComponent.cpp
  21. 52 0
      Gem/Code/Source/Weapons/WeaponTypes.cpp
  22. 7 1
      Gem/Code/Source/Weapons/WeaponTypes.h
  23. 0 1
      Gem/Code/multiplayersample_autogen_files.cmake
  24. 0 2
      Gem/Code/multiplayersample_files.cmake
  25. 2 2
      Gem/preview.png
  26. 185 751
      Levels/GameplayTest/GameplayTest.prefab
  27. 1530 230
      Levels/NewStarbase/NewStarbase.prefab
  28. 421 180
      Prefabs/4x4x4BoxGrid.prefab
  29. 87 76
      Prefabs/Energy_Cannon_with_Energy_Ball.prefab
  30. 27 19
      Prefabs/Player.prefab
  31. 5 1
      Registry/physxdebugconfiguration.setreg
  32. 19 1
      Registry/physxsystemconfiguration.setreg
  33. 2 2
      preview.png
  34. 338 800
      scriptcanvas/JumpPad.scriptcanvas
  35. 272 413
      scriptcanvas/PredictiveJumpPad.scriptcanvas
  36. 324 160
      scriptcanvas/ReticleEffects.scriptcanvas
  37. 277 323
      scriptcanvas/ShieldGeneratorRoundEffects.scriptcanvas
  38. 117 0
      scripts/JumpPadScriptEvent.scriptevents
  39. 0 225
      scripts/ShieldGenerator.scriptevents

+ 11 - 1
Gem/Code/Include/WeaponNotificationBus.h

@@ -12,11 +12,21 @@
 
 
 namespace MultiplayerSample
 namespace MultiplayerSample
 {
 {
-    class WeaponNotifications : public AZ::EBusTraits
+    class WeaponNotifications
+        : public AZ::EBusTraits
     {
     {
     public:
     public:
         virtual ~WeaponNotifications() = default;
         virtual ~WeaponNotifications() = default;
 
 
+        //! Called on a local player that has activated a weapon.
+        virtual void OnWeaponActivate([[maybe_unused]] const AZ::Transform& transform) {}
+
+        //! Called on a local player that has predictively impacted something with a weapon.
+        virtual void OnWeaponImpact([[maybe_unused]] const AZ::Transform& transform) {}
+
+        //! Called on a local player that has confirmed damaged something with a weapon.
+        virtual void OnWeaponDamage([[maybe_unused]] const AZ::Transform& transform) {}
+
         //! Called on a local player that has been confirmed to hit a player with a weapon.
         //! Called on a local player that has been confirmed to hit a player with a weapon.
         virtual void OnConfirmedHitPlayer([[maybe_unused]] AZ::EntityId byPlayerEntity, [[maybe_unused]] AZ::EntityId otherPlayerEntity) {}
         virtual void OnConfirmedHitPlayer([[maybe_unused]] AZ::EntityId byPlayerEntity, [[maybe_unused]] AZ::EntityId otherPlayerEntity) {}
     };
     };

+ 21 - 5
Gem/Code/Source/AutoGen/EnergyBallComponent.AutoComponent.xml

@@ -3,17 +3,33 @@
 <Component
 <Component
     Name="EnergyBallComponent"
     Name="EnergyBallComponent"
     Namespace="MultiplayerSample"
     Namespace="MultiplayerSample"
-    OverrideComponent="false"
+    OverrideComponent="true"
     OverrideController="true"
     OverrideController="true"
     OverrideInclude="Source/Components/Multiplayer/EnergyBallComponent.h"
     OverrideInclude="Source/Components/Multiplayer/EnergyBallComponent.h"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
 
 
+    <Include File="Source/Effects/GameEffect.h" />
+    <Include File="Source/Weapons/WeaponTypes.h" />
+
     <ComponentRelation Constraint="Required" HasController="true" Name="NetworkTransformComponent" Namespace="Multiplayer" Include="Multiplayer/Components/NetworkTransformComponent.h" />
     <ComponentRelation Constraint="Required" HasController="true" Name="NetworkTransformComponent" Namespace="Multiplayer" Include="Multiplayer/Components/NetworkTransformComponent.h" />
-    <ComponentRelation Constraint="Required" HasController="true" Name="NetworkRigidBodyComponent" Namespace="Multiplayer" Include="Multiplayer/Components/NetworkRigidBodyComponent.h" />
 
 
-    <RemoteProcedure Name="RPC_LaunchBall" InvokeFrom="Server" HandleOn="Authority" IsPublic="true" IsReliable="true"
-        GenerateEventBindings="true" Description="Launching an energy from a specified position in a specified direction.">
+    <ArchetypeProperty Type="GameEffect" Name="ExplosionEffect" Init="" ExposeToEditor="true" Description="Specifies the effect to play upon exploding" />
+    <ArchetypeProperty Type="GatherParams" Name="GatherParams" Init="" ExposeToEditor="true" Description="Specifies the types of intersections to test for on the projectile" />
+    <ArchetypeProperty Type="HitEffect" Name="HitEffect" Init="" ExposeToEditor="true" Description="Specifies the damage effects to apply on hit" />
+
+    <RemoteProcedure Name="RPC_LaunchBall" InvokeFrom="Server" HandleOn="Authority" IsPublic="true" IsReliable="true" GenerateEventBindings="true" Description="Launching an energy from a specified position in a specified direction.">
         <Param Type="AZ::Vector3" Name="StartingPosition"/>
         <Param Type="AZ::Vector3" Name="StartingPosition"/>
         <Param Type="AZ::Vector3" Name="Direction"/>
         <Param Type="AZ::Vector3" Name="Direction"/>
+        <Param Type="Multiplayer::NetEntityId" Name="OwningNetEntityId" />
+    </RemoteProcedure>
+
+    <RemoteProcedure Name="RPC_KillBall" InvokeFrom="Server" HandleOn="Authority" IsPublic="true" IsReliable="true" GenerateEventBindings="true" Description="Kills a launched energy ball." />
+
+    <RemoteProcedure Name="RPC_BallLaunched" InvokeFrom="Authority" HandleOn="Client" IsPublic="true" IsReliable="true" GenerateEventBindings="true" Description="Triggered on clients whenever an energy ball launches.">
+        <Param Type="AZ::Vector3" Name="Location"/>
+    </RemoteProcedure>
+
+    <RemoteProcedure Name="RPC_BallExplosion" InvokeFrom="Authority" HandleOn="Client" IsPublic="true" IsReliable="true" GenerateEventBindings="true" Description="Triggered on clients whenever an energy ball explodes.">
+        <Param Type="AZ::Vector3" Name="Location"/>
     </RemoteProcedure>
     </RemoteProcedure>
-</Component>
+</Component>

+ 12 - 4
Gem/Code/Source/AutoGen/EnergyCannonComponent.AutoComponent.xml

@@ -3,13 +3,21 @@
 <Component
 <Component
     Name="EnergyCannonComponent"
     Name="EnergyCannonComponent"
     Namespace="MultiplayerSample"
     Namespace="MultiplayerSample"
-    OverrideComponent="false"
+    OverrideComponent="true"
     OverrideController="true"
     OverrideController="true"
     OverrideInclude="Source/Components/Multiplayer/EnergyCannonComponent.h"
     OverrideInclude="Source/Components/Multiplayer/EnergyCannonComponent.h"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
 
 
+    <Include File="Source/Effects/GameEffect.h" />
+
     <ComponentRelation Constraint="Required" HasController="true" Name="NetworkTransformComponent" Namespace="Multiplayer" Include="Multiplayer/Components/NetworkTransformComponent.h" />
     <ComponentRelation Constraint="Required" HasController="true" Name="NetworkTransformComponent" Namespace="Multiplayer" Include="Multiplayer/Components/NetworkTransformComponent.h" />
 
 
-    <ArchetypeProperty Type="AZ::EntityId" Name="EnergyBallEntity" ExposeToEditor="true"
-                       Description="The entity representing an energy ball." />
-</Component>
+    <ArchetypeProperty Type="AZ::TimeMs" Name="RateOfFireMs" Init="" Container="Object" ExposeToEditor="true" 
+                       Description="Specifies the rate in milliseconds at which to fire projectiles, each cannon can only fire a single projectile at once so this also controls the projectile lifetime." />
+    <ArchetypeProperty Type="AZ::TimeMs" Name="BallLifetimeMs" Init="" Container="Object" ExposeToEditor="true"
+                       Description="Specifies the duration in milliseconds that the energy ball should live for. Must be less than the RateOfFireMs setting." />
+    <ArchetypeProperty Type="GameEffect" Name="FiringEffect" Init="" Container="Object" ExposeToEditor="true" Description="Specifies the effect to play upon firing" />
+    <ArchetypeProperty Type="AZ::EntityId" Name="EnergyBallEntity" ExposeToEditor="true" Description="The entity representing an energy ball." />
+
+    <RemoteProcedure Name="RPC_BallLaunched" InvokeFrom="Authority" HandleOn="Client" IsPublic="true" IsReliable="true" GenerateEventBindings="true" Description="Triggered on clients whenever a firing event occurs." />
+</Component>

+ 1 - 1
Gem/Code/Source/AutoGen/NetworkHealthComponent.AutoComponent.xml

@@ -12,7 +12,7 @@
 
 
     <ArchetypeProperty Type="float" Name="MaxHealth" Init="100.0f" ExposeToEditor="true" Description="Maximum health" />
     <ArchetypeProperty Type="float" Name="MaxHealth" Init="100.0f" ExposeToEditor="true" Description="Maximum health" />
 
 
-    <RemoteProcedure Name="SendHealthDelta" InvokeFrom="Server" HandleOn="Authority" IsPublic="true" IsReliable="true" GenerateEventBindings="false" Description="Health changed RPC">
+    <RemoteProcedure Name="SendHealthDelta" InvokeFrom="Server" HandleOn="Authority" IsPublic="true" IsReliable="true" GenerateEventBindings="true" Description="Health changed RPC">
         <Param Type="float" Name="deltaHealth" />
         <Param Type="float" Name="deltaHealth" />
     </RemoteProcedure>
     </RemoteProcedure>
 
 

+ 24 - 0
Gem/Code/Source/AutoGen/NetworkPlayerMovementComponent.AutoComponent.xml

@@ -33,6 +33,30 @@
     <NetworkInput Type="bool"      Name="Crouch"      Init="false" />
     <NetworkInput Type="bool"      Name="Crouch"      Init="false" />
     <NetworkInput Type="uint8_t"   Name="ResetCount"  Init="0" />
     <NetworkInput Type="uint8_t"   Name="ResetCount"  Init="0" />
 
 
+    <RemoteProcedure
+        Name="ApplyImpulse"
+        InvokeFrom="Server"
+        HandleOn="Authority"
+        IsPublic="false"
+        IsReliable="true"
+        GenerateEventBindings="true"
+        Description="Applies an impulse directly to the players self generated velocity">
+        <Param Type="AZ::Vector3" Name="Impulse" />
+        <Param Type="bool" Name="External" Description="If true, the impulse will be applied to the external velocity, and if false it will be applied to internal velocity" />
+    </RemoteProcedure>
+
+    <RemoteProcedure
+        Name="SetVelocity"
+        InvokeFrom="Server"
+        HandleOn="Authority"
+        IsPublic="false"
+        IsReliable="true"
+        GenerateEventBindings="true"
+        Description="Directly sets the self generated velocity to the provided value, overriding any current velocity values">
+        <Param Type="AZ::Vector3" Name="Velocity"/>
+        <Param Type="bool" Name="External" Description="If true, the impulse will be applied to the external velocity, and if false it will be applied to internal velocity" />
+    </RemoteProcedure>
+
     <ArchetypeProperty Type="float" Name="WalkSpeed"    Init="3.0f" ExposeToEditor="true" Description="Walk speed, units in meters per second" />
     <ArchetypeProperty Type="float" Name="WalkSpeed"    Init="3.0f" ExposeToEditor="true" Description="Walk speed, units in meters per second" />
     <ArchetypeProperty Type="float" Name="SprintSpeed"  Init="5.0f" ExposeToEditor="true" Description="Sprint speed, units in meters per second" />
     <ArchetypeProperty Type="float" Name="SprintSpeed"  Init="5.0f" ExposeToEditor="true" Description="Sprint speed, units in meters per second" />
     <ArchetypeProperty Type="float" Name="ReverseSpeed" Init="2.0f" ExposeToEditor="true" Description="Reverse speed, units in meters per second" />
     <ArchetypeProperty Type="float" Name="ReverseSpeed" Init="2.0f" ExposeToEditor="true" Description="Reverse speed, units in meters per second" />

+ 1 - 1
Gem/Code/Source/AutoGen/NetworkTeleportComponent.AutoComponent.xml

@@ -10,7 +10,7 @@
 
 
     <Include File="Source/Effects/GameEffect.h" />
     <Include File="Source/Effects/GameEffect.h" />
 
 
-    <ArchetypeProperty Type="GameEffect" Name="TeleportEffect" Init="" Container="Object" ExposeToEditor="true" Description="Specifies the effect to play upon teleportation" />
+    <ArchetypeProperty Type="GameEffect" Name="TeleportEffect" Init="" ExposeToEditor="true" Description="Specifies the effect to play upon teleportation" />
     <ArchetypeProperty Type="AZ::EntityId" Name="Destination" Init="" ExposeToEditor="true"/>
     <ArchetypeProperty Type="AZ::EntityId" Name="Destination" Init="" ExposeToEditor="true"/>
 
 
     <RemoteProcedure
     <RemoteProcedure

+ 1 - 1
Gem/Code/Source/AutoGen/NetworkWeaponsComponent.AutoComponent.xml

@@ -25,7 +25,7 @@
     <ArchetypeProperty Type="WeaponParams"  Name="WeaponParams"  Init="" Container="Array" Count="MaxWeaponsPerComponent" ExposeToEditor="true" Description="Parameters for the weapons attached to this NetworkWeaponsComponent" />
     <ArchetypeProperty Type="WeaponParams"  Name="WeaponParams"  Init="" Container="Array" Count="MaxWeaponsPerComponent" ExposeToEditor="true" Description="Parameters for the weapons attached to this NetworkWeaponsComponent" />
     <ArchetypeProperty Type="AZStd::string" Name="FireBoneNames" Init="" Container="Array" Count="MaxWeaponsPerComponent" ExposeToEditor="true" Description="Name of the bone to attach to for fire events" />
     <ArchetypeProperty Type="AZStd::string" Name="FireBoneNames" Init="" Container="Array" Count="MaxWeaponsPerComponent" ExposeToEditor="true" Description="Name of the bone to attach to for fire events" />
 
 
-    <RemoteProcedure Name="SendConfirmHit" InvokeFrom="Authority" HandleOn="Client" IsPublic="false" IsReliable="false" GenerateEventBindings="false" Description="Single hit event confirmed by the server" >
+    <RemoteProcedure Name="SendConfirmHit" InvokeFrom="Authority" HandleOn="Client" IsPublic="false" IsReliable="false" GenerateEventBindings="true" Description="Single hit event confirmed by the server" >
         <Param Type="WeaponIndex" Name="WeaponIndex" />
         <Param Type="WeaponIndex" Name="WeaponIndex" />
         <Param Type="HitEvent"    Name="HitEvent" />
         <Param Type="HitEvent"    Name="HitEvent" />
     </RemoteProcedure>
     </RemoteProcedure>

+ 0 - 18
Gem/Code/Source/AutoGen/PlayerKnockbackEffectComponent.AutoComponent.xml

@@ -1,18 +0,0 @@
-<?xml version="1.0"?>
-
-<Component
-    Name="PlayerKnockbackEffectComponent"
-    Namespace="MultiplayerSample"
-    OverrideComponent="false"
-    OverrideController="true"
-    OverrideInclude="Source/Components/Multiplayer/PlayerKnockbackEffectComponent.h"
-    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
-
-    <ComponentRelation Constraint="Required" HasController="true" Name="NetworkTransformComponent" Namespace="Multiplayer" Include="Multiplayer/Components/NetworkTransformComponent.h" />
-    <ComponentRelation Constraint="Required" HasController="true" Name="NetworkCharacterComponent" Namespace="Multiplayer" Include="Multiplayer/Components/NetworkCharacterComponent.h" />
-
-    <RemoteProcedure Name="RPC_Knockback" InvokeFrom="Server" HandleOn="Authority" IsPublic="true" IsReliable="true"
-                     GenerateEventBindings="false" Description="Shoves an object in a specified direction.">\
-	    <Param Type="AZ::Vector3" Name="Direction"/>
-    </RemoteProcedure>
-</Component>

+ 119 - 72
Gem/Code/Source/Components/Multiplayer/EnergyBallComponent.cpp

@@ -5,120 +5,167 @@
  *
  *
  */
  */
 
 
-#include <GameplayEffectsNotificationBus.h>
+#include <Source/Components/Multiplayer/EnergyBallComponent.h>
+#include <Source/AutoGen/NetworkHealthComponent.AutoComponent.h>
+#include <Multiplayer/Components/NetworkTransformComponent.h>
+#include <Multiplayer/Components/NetworkRigidBodyComponent.h>
 #include <MultiplayerSampleTypes.h>
 #include <MultiplayerSampleTypes.h>
-#include <AzCore/Component/ComponentApplicationBus.h>
 #include <AzCore/Component/TransformBus.h>
 #include <AzCore/Component/TransformBus.h>
-#include <AzCore/Settings/SettingsRegistry.h>
 #include <AzFramework/Physics/RigidBodyBus.h>
 #include <AzFramework/Physics/RigidBodyBus.h>
-#include <AzFramework/Physics/Collision/CollisionEvents.h>
-#include <AzFramework/Physics/SimulatedBodies/RigidBody.h>
-#include <Multiplayer/Components/NetworkTransformComponent.h>
-#include <Source/AutoGen/NetworkHealthComponent.AutoComponent.h>
-#include <Source/Components/Multiplayer/EnergyBallComponent.h>
-#include <Source/Components/Multiplayer/PlayerKnockbackEffectComponent.h>
+
+#if AZ_TRAIT_CLIENT
+#   include <PopcornFX/PopcornFXBus.h>
+#endif
 
 
 namespace MultiplayerSample
 namespace MultiplayerSample
 {
 {
-    EnergyBallComponentController::EnergyBallComponentController(EnergyBallComponent& parent)
-        : EnergyBallComponentControllerBase(parent)
+    AZ_CVAR(float, sv_EnergyBallImpulseScalar, 500.0f, nullptr, AZ::ConsoleFunctorFlags::Null, "A fudge factor for imparting impulses on rigid bodies due to weapon hits");
+
+    void EnergyBallComponent::Reflect(AZ::ReflectContext* context)
     {
     {
+        AZ::SerializeContext* serializeContext = azrtti_cast<AZ::SerializeContext*>(context);
+        if (serializeContext)
+        {
+            serializeContext->Class<EnergyBallComponent, EnergyBallComponentBase>()
+                ->Version(1);
+        }
+        EnergyBallComponentBase::Reflect(context);
     }
     }
 
 
-    void EnergyBallComponentController::OnActivate([[maybe_unused]] Multiplayer::EntityIsMigrating entityIsMigrating)
+    void EnergyBallComponent::OnActivate([[maybe_unused]] Multiplayer::EntityIsMigrating entityIsMigrating)
     {
     {
-        LoadEnergyBallSettings();
+        m_effect = GetExplosionEffect();
+        m_effect.Initialize();
+    }
 
 
-        AzPhysics::RigidBody* body = nullptr;
-        Physics::RigidBodyRequestBus::EventResult(body, GetEntityId(), &Physics::RigidBodyRequests::GetRigidBody);
-        if (body)
+    void EnergyBallComponent::OnDeactivate([[maybe_unused]] Multiplayer::EntityIsMigrating entityIsMigrating)
+    {
+    }
+
+#if AZ_TRAIT_CLIENT
+    void EnergyBallComponent::HandleRPC_BallLaunched([[maybe_unused]] AzNetworking::IConnection* invokingConnection, [[maybe_unused]] const AZ::Vector3& location)
+    {
+        PopcornFX::PopcornFXEmitterComponentRequests* emitterRequests = PopcornFX::PopcornFXEmitterComponentRequestBus::FindFirstHandler(GetEntity()->GetId());
+        if (emitterRequests != nullptr)
         {
         {
-            body->RegisterOnCollisionBeginHandler(m_collisionHandler);
+            emitterRequests->Start();
         }
         }
     }
     }
 
 
+    void EnergyBallComponent::HandleRPC_BallExplosion([[maybe_unused]] AzNetworking::IConnection* invokingConnection, const AZ::Vector3& location)
+    {
+        AZ::Transform transform = AZ::Transform::CreateFromQuaternionAndTranslation(AZ::Quaternion::CreateIdentity(), location);
+        m_effect.TriggerEffect(transform);
+
+        PopcornFX::PopcornFXEmitterComponentRequests* emitterRequests = PopcornFX::PopcornFXEmitterComponentRequestBus::FindFirstHandler(GetEntity()->GetId());
+        if (emitterRequests != nullptr)
+        {
+            emitterRequests->Kill();
+        }
+    }
+#endif
+
+
+    EnergyBallComponentController::EnergyBallComponentController(EnergyBallComponent& parent)
+        : EnergyBallComponentControllerBase(parent)
+    {
+    }
+
+    void EnergyBallComponentController::OnActivate([[maybe_unused]] Multiplayer::EntityIsMigrating entityIsMigrating)
+    {
+#if AZ_TRAIT_SERVER
+        m_collisionCheckEvent.Enqueue(AZ::TimeMs{ 10 }, true);
+#endif
+    }
+
     void EnergyBallComponentController::OnDeactivate([[maybe_unused]] Multiplayer::EntityIsMigrating entityIsMigrating)
     void EnergyBallComponentController::OnDeactivate([[maybe_unused]] Multiplayer::EntityIsMigrating entityIsMigrating)
     {
     {
-        m_collisionHandler.Disconnect();
+#if AZ_TRAIT_SERVER
+        m_collisionCheckEvent.RemoveFromQueue();
+#endif
     }
     }
 
 
 #if AZ_TRAIT_SERVER
 #if AZ_TRAIT_SERVER
-    void EnergyBallComponentController::HandleRPC_LaunchBall([[maybe_unused]] AzNetworking::IConnection* invokingConnection,
-        const AZ::Vector3& startingPosition, const AZ::Vector3& direction)
+    void EnergyBallComponentController::HandleRPC_LaunchBall([[maybe_unused]] AzNetworking::IConnection* invokingConnection, const AZ::Vector3& startingPosition, const AZ::Vector3& direction, const Multiplayer::NetEntityId& owningNetEntityId)
     {
     {
-        m_direction = direction;
+        m_shooterNetEntityId = owningNetEntityId;
 
 
-        using RigidBodyBus = Physics::RigidBodyRequestBus;
-        RigidBodyBus::Event(GetEntityId(), &RigidBodyBus::Events::DisablePhysics);
+        m_filteredNetEntityIds.clear();
+        m_filteredNetEntityIds.insert(owningNetEntityId);
+        m_filteredNetEntityIds.insert(GetNetEntityId());
+        m_direction = direction;
 
 
-        // move self and increment resetCount to prevent transform interpolation
-        AZ::TransformBus::Event(GetEntityId(), &AZ::TransformBus::Events::SetWorldTranslation, startingPosition);
-        GetNetworkTransformComponentController()->ModifyResetCount()++;
+        // Move the entity to the start position
+        GetEntity()->GetTransform()->SetWorldTranslation(startingPosition);
 
 
-        RigidBodyBus::Event(GetEntityId(), &RigidBodyBus::Events::EnablePhysics);
-        RigidBodyBus::Event(GetEntityId(), &RigidBodyBus::Events::SetLinearVelocity, direction * aznumeric_cast<float>(m_speed));
+        Physics::RigidBodyRequestBus::Event(GetEntityId(), &Physics::RigidBodyRequestBus::Events::EnablePhysics);
+        Physics::RigidBodyRequestBus::Event(GetEntityId(), &Physics::RigidBodyRequestBus::Events::SetLinearVelocity, direction * GetGatherParams().m_travelSpeed);
 
 
-        GameplayEffectsNotificationBus::Broadcast(&GameplayEffectsNotificationBus::Events::OnPositionalEffect,
-            SoundEffect::EnergyBallTrapProjectile, GetEntity()->GetTransform()->GetWorldTranslation());
+        RPC_BallLaunched(startingPosition);
     }
     }
-#endif
 
 
-    void EnergyBallComponentController::HideEnergyBall()
+    void EnergyBallComponentController::HandleRPC_KillBall([[maybe_unused]] AzNetworking::IConnection* invokingConnection)
     {
     {
-        Physics::RigidBodyRequestBus::Event(GetEntityId(), &Physics::RigidBodyRequestBus::Events::DisablePhysics);
-
-        // move self and increment resetCount to prevent transform interpolation
-        AZ::TransformBus::Event(GetEntityId(), &AZ::TransformBus::Events::SetWorldTranslation, AZ::Vector3::CreateAxisZ(-1000.f));
-        GetNetworkTransformComponentController()->ModifyResetCount()++;
+        HideEnergyBall();
     }
     }
 
 
-    void EnergyBallComponentController::OnCollisionBegin(const AzPhysics::CollisionEvent& collisionEvent)
+    void EnergyBallComponentController::CheckForCollisions()
     {
     {
-        if (collisionEvent.m_body2)
+        const AZ::Vector3& position = GetEntity()->GetTransform()->GetWorldTM().GetTranslation();
+        const HitEffect& effect = GetHitEffect();
+
+        IntersectResults results;
+        const ActivateEvent activateEvent{ GetEntity()->GetTransform()->GetWorldTM(), position, m_shooterNetEntityId, GetNetEntityId() };
+        GatherEntities(GetGatherParams(), activateEvent, m_filteredNetEntityIds, results);
+        if (!results.empty())
         {
         {
-            AZ::Entity* target = nullptr;
-            AZ::ComponentApplicationBus::BroadcastResult(target,
-                &AZ::ComponentApplicationBus::Events::FindEntity, collisionEvent.m_body2->GetEntityId());
-            if (target)
+            bool shouldTerminate = false;
+            for (const IntersectResult& result : results)
             {
             {
-#if AZ_TRAIT_SERVER
-                if (NetworkHealthComponent* health = target->FindComponent<NetworkHealthComponent>())
+                shouldTerminate = true;
+
+                Multiplayer::ConstNetworkEntityHandle handle = Multiplayer::GetMultiplayer()->GetNetworkEntityManager()->GetEntity(result.m_netEntityId);
+                if (handle.Exists())
                 {
                 {
-                    health->SendHealthDelta(aznumeric_cast<float>(-m_armorDamage));
+                    // Presently set to 1 until we capture falloff range
+                    float hitDistance = 1.f;
+                    float maxDistance = 1.f;
+                    float damage = effect.m_hitMagnitude * powf((effect.m_hitFalloff * (1.0f - hitDistance / maxDistance)), effect.m_hitExponent);
+
+                    // Look for physics rigid body component and make impact updates
+                    if (Multiplayer::NetworkRigidBodyComponent* rigidBodyComponent = handle.GetEntity()->FindComponent<Multiplayer::NetworkRigidBodyComponent>())
+                    {
+                        const AZ::Vector3 explosionCentre = position;
+                        const AZ::Vector3 hitObject = handle.GetEntity()->GetTransform()->GetWorldTM().GetTranslation();
+                        const AZ::Vector3 impulse = (hitObject - position).GetNormalized() * damage * sv_EnergyBallImpulseScalar;
+                        rigidBodyComponent->SendApplyImpulse(impulse, position);
+                    }
+
+                    // Look for health component and directly update health based on hit parameters
+                    if (NetworkHealthComponent* healthComponent = handle.GetEntity()->FindComponent<NetworkHealthComponent>())
+                    {
+                        healthComponent->SendHealthDelta(damage * -1.0f);
+                    }
                 }
                 }
-
-                TryKnockbackPlayer(target);
-#endif
             }
             }
 
 
-            GameplayEffectsNotificationBus::Broadcast(&GameplayEffectsNotificationBus::Events::OnPositionalEffect,
-                SoundEffect::EnergyBallTrapImpact, GetEntity()->GetTransform()->GetWorldTranslation());
-
-            HideEnergyBall();
+            if (shouldTerminate)
+            {
+                HideEnergyBall();
+            }
         }
         }
     }
     }
 
 
-    void EnergyBallComponentController::LoadEnergyBallSettings()
+    void EnergyBallComponentController::HideEnergyBall()
     {
     {
-        if (const auto registry = AZ::SettingsRegistry::Get())
-        {
-            registry->Get(m_knockbackDistance, KnockbackDistanceByEnergyBallSetting);
-            registry->Get(m_speed, EnergyBallSpeedSetting);
-            registry->Get(m_armorDamage, EnergyBallArmorDamageSetting);
-        }
-    }
+        RPC_BallExplosion(GetEntity()->GetTransform()->GetWorldTM().GetTranslation());
 
 
-#if AZ_TRAIT_SERVER
-    void EnergyBallComponentController::TryKnockbackPlayer(AZ::Entity* target)
-    {
-        if (PlayerKnockbackEffectComponent* effect = target->FindComponent<PlayerKnockbackEffectComponent>())
-        {
-            const AZ::Vector3 direction = m_direction.GetNormalized();
-            if (m_knockbackDistance > 0.0)
-            {
-                effect->RPC_Knockback(direction * aznumeric_cast<float>(m_knockbackDistance));
-            }
-        }
+        Physics::RigidBodyRequestBus::Event(GetEntityId(), &Physics::RigidBodyRequestBus::Events::DisablePhysics);
+        Physics::RigidBodyRequestBus::Event(GetEntityId(), &Physics::RigidBodyRequestBus::Events::SetLinearVelocity, AZ::Vector3::CreateZero());
+
+        // move self and increment resetCount to prevent transform interpolation
+        AZ::TransformBus::Event(GetEntityId(), &AZ::TransformBus::Events::SetWorldTranslation, AZ::Vector3::CreateAxisZ(-1000.f));
+        GetNetworkTransformComponentController()->ModifyResetCount()++;
     }
     }
 #endif
 #endif
 }
 }

+ 31 - 18
Gem/Code/Source/Components/Multiplayer/EnergyBallComponent.h

@@ -7,42 +7,55 @@
 
 
 #pragma once
 #pragma once
 
 
-#include <AzFramework/Physics/Common/PhysicsEvents.h>
 #include <Source/AutoGen/EnergyBallComponent.AutoComponent.h>
 #include <Source/AutoGen/EnergyBallComponent.AutoComponent.h>
+#include <Source/Weapons/WeaponGathers.h>
 
 
 namespace MultiplayerSample
 namespace MultiplayerSample
 {
 {
-    class EnergyBallComponentController
-        : public EnergyBallComponentControllerBase
+    class EnergyBallComponent
+        : public EnergyBallComponentBase
     {
     {
     public:
     public:
-        explicit EnergyBallComponentController(EnergyBallComponent& parent);
+        AZ_MULTIPLAYER_COMPONENT(MultiplayerSample::EnergyBallComponent, s_energyBallComponentConcreteUuid, MultiplayerSample::EnergyBallComponentBase);
+
+        static void Reflect(AZ::ReflectContext* context);
 
 
         void OnActivate(Multiplayer::EntityIsMigrating entityIsMigrating) override;
         void OnActivate(Multiplayer::EntityIsMigrating entityIsMigrating) override;
         void OnDeactivate(Multiplayer::EntityIsMigrating entityIsMigrating) override;
         void OnDeactivate(Multiplayer::EntityIsMigrating entityIsMigrating) override;
 
 
-#if AZ_TRAIT_SERVER
-        void HandleRPC_LaunchBall(AzNetworking::IConnection* invokingConnection, const AZ::Vector3& startingPosition, const AZ::Vector3& direction) override;
+#if AZ_TRAIT_CLIENT
+        void HandleRPC_BallLaunched(AzNetworking::IConnection* invokingConnection, const AZ::Vector3& location) override;
+        void HandleRPC_BallExplosion(AzNetworking::IConnection* invokingConnection, const AZ::Vector3& location) override;
 #endif
 #endif
 
 
     private:
     private:
-        void HideEnergyBall();
+        GameEffect m_effect;
+    };
+
+    class EnergyBallComponentController
+        : public EnergyBallComponentControllerBase
+    {
+    public:
+        explicit EnergyBallComponentController(EnergyBallComponent& parent);
+
+        void OnActivate(Multiplayer::EntityIsMigrating entityIsMigrating) override;
+        void OnDeactivate(Multiplayer::EntityIsMigrating entityIsMigrating) override;
 
 
 #if AZ_TRAIT_SERVER
 #if AZ_TRAIT_SERVER
-        void TryKnockbackPlayer(AZ::Entity* target);
-#endif
+        void HandleRPC_LaunchBall(AzNetworking::IConnection* invokingConnection, const AZ::Vector3& startingPosition, const AZ::Vector3& direction, const Multiplayer::NetEntityId& owningNetEntityId) override;
+        void HandleRPC_KillBall(AzNetworking::IConnection* invokingConnection) override;
+        void CheckForCollisions();
+        void HideEnergyBall();
 
 
-        void OnCollisionBegin(const AzPhysics::CollisionEvent& collisionEvent);
-        AzPhysics::SimulatedBodyEvents::OnCollisionBegin::Handler m_collisionHandler{ [this](
-            AzPhysics::SimulatedBodyHandle, const AzPhysics::CollisionEvent& collisionEvent)
+    private:
+        AZ::ScheduledEvent m_collisionCheckEvent{ [this]()
         {
         {
-            OnCollisionBegin(collisionEvent);
-        } };
+            CheckForCollisions();
+        }, AZ::Name("EnergyBallCheckForCollisions") };
 
 
-        void LoadEnergyBallSettings();
         AZ::Vector3 m_direction = AZ::Vector3::CreateZero();
         AZ::Vector3 m_direction = AZ::Vector3::CreateZero();
-        double m_knockbackDistance = 0.0;
-        double m_speed = 0.0;
-        AZ::s64 m_armorDamage = 0;
+        Multiplayer::NetEntityId m_shooterNetEntityId = Multiplayer::InvalidNetEntityId;
+        NetEntityIdSet m_filteredNetEntityIds;
+#endif
     };
     };
 }
 }

+ 51 - 12
Gem/Code/Source/Components/Multiplayer/EnergyCannonComponent.cpp

@@ -15,6 +15,35 @@
 
 
 namespace MultiplayerSample
 namespace MultiplayerSample
 {
 {
+    void EnergyCannonComponent::Reflect(AZ::ReflectContext* context)
+    {
+        AZ::SerializeContext* serializeContext = azrtti_cast<AZ::SerializeContext*>(context);
+        if (serializeContext)
+        {
+            serializeContext->Class<EnergyCannonComponent, EnergyCannonComponentBase>()
+                ->Version(1);
+        }
+        EnergyCannonComponentBase::Reflect(context);
+    }
+
+    void EnergyCannonComponent::OnActivate([[maybe_unused]] Multiplayer::EntityIsMigrating entityIsMigrating)
+    {
+        m_effect = GetFiringEffect();
+        m_effect.Initialize();
+    }
+
+    void EnergyCannonComponent::OnDeactivate([[maybe_unused]] Multiplayer::EntityIsMigrating entityIsMigrating)
+    {
+    }
+
+#if AZ_TRAIT_CLIENT
+    void EnergyCannonComponent::HandleRPC_BallLaunched([[maybe_unused]] AzNetworking::IConnection* invokingConnection)
+    {
+        m_effect.TriggerEffect(GetEntity()->GetTransform()->GetWorldTM());
+    }
+#endif
+
+
     EnergyCannonComponentController::EnergyCannonComponentController(EnergyCannonComponent& parent)
     EnergyCannonComponentController::EnergyCannonComponentController(EnergyCannonComponent& parent)
         : EnergyCannonComponentControllerBase(parent)
         : EnergyCannonComponentControllerBase(parent)
     {
     {
@@ -23,14 +52,9 @@ namespace MultiplayerSample
     void EnergyCannonComponentController::OnActivate([[maybe_unused]] Multiplayer::EntityIsMigrating entityIsMigrating)
     void EnergyCannonComponentController::OnActivate([[maybe_unused]] Multiplayer::EntityIsMigrating entityIsMigrating)
     {
     {
 #if AZ_TRAIT_SERVER
 #if AZ_TRAIT_SERVER
-        if (const auto registry = AZ::SettingsRegistry::Get())
+        if (GetRateOfFireMs() > AZ::TimeMs{ 0 })
         {
         {
-            AZ::s64 firingPeriod = 0;
-            registry->Get(firingPeriod, EnergyCannonFiringPeriodSetting);
-            if (firingPeriod > 0)
-            {
-                m_firingEvent.Enqueue(AZ::TimeMs{ firingPeriod }, true);
-            }
+            m_firingEvent.Enqueue(GetRateOfFireMs(), true);
         }
         }
 #endif
 #endif
     }
     }
@@ -47,18 +71,33 @@ namespace MultiplayerSample
     {
     {
         // Re-using the same ball entity.
         // Re-using the same ball entity.
         AZ::Entity* ball = nullptr;
         AZ::Entity* ball = nullptr;
-        AZ::ComponentApplicationBus::BroadcastResult(ball,
-            &AZ::ComponentApplicationBus::Events::FindEntity, GetEnergyBallEntity());
+        AZ::ComponentApplicationBus::BroadcastResult(ball, &AZ::ComponentApplicationBus::Events::FindEntity, GetEnergyBallEntity());
         if (ball)
         if (ball)
         {
         {
             if (EnergyBallComponent* ballComponent = ball->FindComponent<EnergyBallComponent>())
             if (EnergyBallComponent* ballComponent = ball->FindComponent<EnergyBallComponent>())
             {
             {
                 const AZ::Transform& cannonTm = GetEntity()->GetTransform()->GetWorldTM();
                 const AZ::Transform& cannonTm = GetEntity()->GetTransform()->GetWorldTM();
                 const AZ::Vector3 forward = cannonTm.TransformVector(AZ::Vector3::CreateAxisY(-1.f));
                 const AZ::Vector3 forward = cannonTm.TransformVector(AZ::Vector3::CreateAxisY(-1.f));
-                ballComponent->RPC_LaunchBall(cannonTm.GetTranslation(), forward);
+                const AZ::Vector3 effectOffset = GetFiringEffect().GetEffectOffset();
+                ballComponent->RPC_LaunchBall(cannonTm.GetTranslation() + effectOffset, forward, GetNetEntityId());
+                RPC_BallLaunched();
+
+                // Enqueue our ball kill event
+                m_killEvent.Enqueue(GetBallLifetimeMs(), false);
+            }
+        }
+    }
 
 
-                GameplayEffectsNotificationBus::Broadcast(&GameplayEffectsNotificationBus::Events::OnPositionalEffect,
-                    SoundEffect::EnergyBallTrapBuildup, GetEntity()->GetTransform()->GetWorldTranslation());
+    void EnergyCannonComponentController::OnKillEnergyBall()
+    {
+        // Re-using the same ball entity.
+        AZ::Entity* ball = nullptr;
+        AZ::ComponentApplicationBus::BroadcastResult(ball, &AZ::ComponentApplicationBus::Events::FindEntity, GetEnergyBallEntity());
+        if (ball)
+        {
+            if (EnergyBallComponent* ballComponent = ball->FindComponent<EnergyBallComponent>())
+            {
+                ballComponent->RPC_KillBall();
             }
             }
         }
         }
     }
     }

+ 26 - 1
Gem/Code/Source/Components/Multiplayer/EnergyCannonComponent.h

@@ -11,6 +11,25 @@
 
 
 namespace MultiplayerSample
 namespace MultiplayerSample
 {
 {
+    class EnergyCannonComponent
+        : public EnergyCannonComponentBase
+    {
+    public:
+        AZ_MULTIPLAYER_COMPONENT(MultiplayerSample::EnergyCannonComponent, s_energyCannonComponentConcreteUuid, MultiplayerSample::EnergyCannonComponentBase);
+
+        static void Reflect(AZ::ReflectContext* context);
+
+        void OnActivate(Multiplayer::EntityIsMigrating entityIsMigrating) override;
+        void OnDeactivate(Multiplayer::EntityIsMigrating entityIsMigrating) override;
+
+#if AZ_TRAIT_CLIENT
+        void HandleRPC_BallLaunched(AzNetworking::IConnection* invokingConnection) override;
+#endif
+
+    private:
+        GameEffect m_effect;
+    };
+
     class EnergyCannonComponentController
     class EnergyCannonComponentController
         : public EnergyCannonComponentControllerBase
         : public EnergyCannonComponentControllerBase
     {
     {
@@ -26,7 +45,13 @@ namespace MultiplayerSample
         AZ::ScheduledEvent m_firingEvent{[this]()
         AZ::ScheduledEvent m_firingEvent{[this]()
         {
         {
             OnFireEnergyBall();
             OnFireEnergyBall();
-        }, AZ::Name("EnergyCannonComponentController")};
+        }, AZ::Name("FireEnergyCannon")};
+
+        void OnKillEnergyBall();
+        AZ::ScheduledEvent m_killEvent{ [this]()
+        {
+            OnKillEnergyBall();
+        }, AZ::Name("KillEnergyBall") };
 #endif
 #endif
     };
     };
 }
 }

+ 0 - 52
Gem/Code/Source/Components/Multiplayer/PlayerKnockbackEffectComponent.cpp

@@ -1,52 +0,0 @@
-/*
- * Copyright (c) Contributors to the Open 3D Engine Project. For complete copyright and license terms please see the LICENSE at the root of this distribution.
- *
- * SPDX-License-Identifier: Apache-2.0 OR MIT
- *
- */
-
-#include <GameplayEffectsNotificationBus.h>
-#include <PlayerKnockbackBus.h>
-#include <Multiplayer/Components/NetworkCharacterComponent.h>
-#include <Multiplayer/Components/NetworkTransformComponent.h>
-#include <Source/Components/Multiplayer/PlayerKnockbackEffectComponent.h>
-
-namespace MultiplayerSample
-{
-    PlayerKnockbackEffectComponentController::PlayerKnockbackEffectComponentController(PlayerKnockbackEffectComponent& parent)
-        : PlayerKnockbackEffectComponentControllerBase(parent)
-    {
-    }
-
-    void PlayerKnockbackEffectComponentController::OnActivate([[maybe_unused]] Multiplayer::EntityIsMigrating entityIsMigrating)
-    {
-    }
-
-    void PlayerKnockbackEffectComponentController::OnDeactivate([[maybe_unused]] Multiplayer::EntityIsMigrating entityIsMigrating)
-    {
-    }
-
-#if AZ_TRAIT_SERVER
-    void PlayerKnockbackEffectComponentController::HandleRPC_Knockback([[maybe_unused]] AzNetworking::IConnection* invokingConnection,
-        const AZ::Vector3& direction)
-    {
-        const AZ::Vector3& position = GetNetworkTransformComponentController()->GetTranslation();
-        PlayerKnockbackNotificationBus::Event(GetEntityId(), &PlayerKnockbackNotificationBus::Events::OnPlayerKnockback, position, direction);
-
-        // Spread out the move to avoid issues in a physical simulation.
-        const float largestPossibleStep = 0.25f;
-        const int steps = aznumeric_cast<int>(direction.GetLength() / largestPossibleStep) + 1;
-        if (steps > 0)
-        {
-            const float deltaTime = 1.f / aznumeric_cast<float>(steps);
-            for (int i = 0; i < steps; ++i)
-            {
-                GetNetworkCharacterComponentController()->TryMoveWithVelocity(direction, deltaTime);
-            }
-        }
-
-        GameplayEffectsNotificationBus::Broadcast(&GameplayEffectsNotificationBus::Events::OnPositionalEffect,
-            SoundEffect::PlayerKnockedDown, GetEntity()->GetTransform()->GetWorldTranslation());
-    }
-#endif
-}

+ 0 - 27
Gem/Code/Source/Components/Multiplayer/PlayerKnockbackEffectComponent.h

@@ -1,27 +0,0 @@
-/*
- * Copyright (c) Contributors to the Open 3D Engine Project. For complete copyright and license terms please see the LICENSE at the root of this distribution.
- *
- * SPDX-License-Identifier: Apache-2.0 OR MIT
- *
- */
-
-#pragma once
-
-#include <Source/AutoGen/PlayerKnockbackEffectComponent.AutoComponent.h>
-
-namespace MultiplayerSample
-{
-    class PlayerKnockbackEffectComponentController
-        : public PlayerKnockbackEffectComponentControllerBase
-    {
-    public:
-        explicit PlayerKnockbackEffectComponentController(PlayerKnockbackEffectComponent& parent);
-
-        void OnActivate(Multiplayer::EntityIsMigrating entityIsMigrating) override;
-        void OnDeactivate(Multiplayer::EntityIsMigrating entityIsMigrating) override;
-
-#if AZ_TRAIT_SERVER
-        void HandleRPC_Knockback(AzNetworking::IConnection* invokingConnection, const AZ::Vector3& direction) override;
-#endif
-    };
-}

+ 45 - 6
Gem/Code/Source/Components/NetworkPlayerMovementComponent.cpp

@@ -54,7 +54,7 @@ namespace MultiplayerSample
         , m_updateAI{ [this] { UpdateAI(); }, AZ::Name{ "MovementControllerAi" } }
         , m_updateAI{ [this] { UpdateAI(); }, AZ::Name{ "MovementControllerAi" } }
 #endif
 #endif
 #if AZ_TRAIT_CLIENT
 #if AZ_TRAIT_CLIENT
-        , m_updateLocalBot{ [this] { UpdateLocalBot(); }, AZ::Name{ "MovementControllerLocalBot" } }
+    , m_updateLocalBot{ [this] { UpdateLocalBot(); }, AZ::Name{ "MovementControllerLocalBot" } }
 #endif
 #endif
     {
     {
         ;
         ;
@@ -153,6 +153,13 @@ namespace MultiplayerSample
 
 
         if (networkMatchComponent && (networkMatchComponent->PlayerActionsAllowed() == AllowedPlayerActions::All))
         if (networkMatchComponent && (networkMatchComponent->PlayerActionsAllowed() == AllowedPlayerActions::All))
         {
         {
+            // Check if the user requested to toggle sprint-state
+            if (m_toggleSprint)
+            {
+                m_sprinting = !m_sprinting;
+                m_toggleSprint = false;
+            }
+
             // Movement axis
             // Movement axis
             // Since we're on a keyboard, this adds a touch of an acceleration curve to the keyboard inputs
             // Since we're on a keyboard, this adds a touch of an acceleration curve to the keyboard inputs
             // This is so that tapping the keyboard moves the virtual stick less than just holding it down
             // This is so that tapping the keyboard moves the virtual stick less than just holding it down
@@ -274,10 +281,46 @@ namespace MultiplayerSample
         GetNetworkAnimationComponentController()->ModifyActiveAnimStates().SetBit(
         GetNetworkAnimationComponentController()->ModifyActiveAnimStates().SetBit(
             aznumeric_cast<uint32_t>(CharacterAnimState::Falling), isFalling);
             aznumeric_cast<uint32_t>(CharacterAnimState::Falling), isFalling);
 
 
+        // If we're still on the ground, then zero out our velocity from external forces
+        // This prevents us from sliding along the ground after we land
+        PhysX::CharacterGameplayRequestBus::EventResult(onGround, GetEntityId(), &PhysX::CharacterGameplayRequestBus::Events::IsOnGround);
+        if (onGround)
+        {
+            SetVelocityFromExternalSources(AZ::Vector3::CreateZero());
+        }
+
         // At the end, track whether or not we were on the ground for this input so we can compare states when processing the next input.
         // At the end, track whether or not we were on the ground for this input so we can compare states when processing the next input.
         SetWasOnGround(onGround);
         SetWasOnGround(onGround);
     }
     }
 
 
+#if AZ_TRAIT_SERVER
+    void NetworkPlayerMovementComponentController::HandleApplyImpulse([[maybe_unused]] AzNetworking::IConnection* connection, const AZ::Vector3& impulse, const bool& external)
+    {
+        if (external)
+        {
+            const AZ::Vector3 newVelocity = GetVelocityFromExternalSources() + impulse;
+            SetVelocityFromExternalSources(newVelocity);
+        }
+        else
+        {
+            const AZ::Vector3 newVelocity = GetSelfGeneratedVelocity() + impulse;
+            SetSelfGeneratedVelocity(newVelocity);
+        }
+    }
+
+    void NetworkPlayerMovementComponentController::HandleSetVelocity([[maybe_unused]] AzNetworking::IConnection* connection, const AZ::Vector3& velocity, const bool& external)
+    {
+        if (external)
+        {
+            SetVelocityFromExternalSources(velocity);
+        }
+        else
+        {
+            SetSelfGeneratedVelocity(velocity);
+        }
+    }
+#endif
+
     void NetworkPlayerMovementComponentController::UpdateVelocity(const NetworkPlayerMovementComponentNetworkInput& playerInput, float deltaTime, bool& jumpTriggered, bool& movingDownward)
     void NetworkPlayerMovementComponentController::UpdateVelocity(const NetworkPlayerMovementComponentNetworkInput& playerInput, float deltaTime, bool& jumpTriggered, bool& movingDownward)
     {
     {
         AZ::Vector3 velocityFromExternalSources = GetVelocityFromExternalSources(); // non-player generated (jump pads, explosions etc.)
         AZ::Vector3 velocityFromExternalSources = GetVelocityFromExternalSources(); // non-player generated (jump pads, explosions etc.)
@@ -514,7 +557,7 @@ namespace MultiplayerSample
         }
         }
         else if (*inputId == SprintEventId)
         else if (*inputId == SprintEventId)
         {
         {
-            m_sprinting = true;
+            m_toggleSprint = true;
         }
         }
         else if (*inputId == JumpEventId)
         else if (*inputId == JumpEventId)
         {
         {
@@ -561,10 +604,6 @@ namespace MultiplayerSample
         {
         {
             m_rightDown = false;
             m_rightDown = false;
         }
         }
-        else if (*inputId == SprintEventId)
-        {
-            m_sprinting = false;
-        }
         else if (*inputId == JumpEventId)
         else if (*inputId == JumpEventId)
         {
         {
             m_jumping = false;
             m_jumping = false;

+ 7 - 0
Gem/Code/Source/Components/NetworkPlayerMovementComponent.h

@@ -45,6 +45,11 @@ namespace MultiplayerSample
 
 
         void CreateInput(Multiplayer::NetworkInput& input, float deltaTime) override;
         void CreateInput(Multiplayer::NetworkInput& input, float deltaTime) override;
         void ProcessInput(Multiplayer::NetworkInput& input, float deltaTime) override;
         void ProcessInput(Multiplayer::NetworkInput& input, float deltaTime) override;
+
+#if AZ_TRAIT_SERVER
+        void HandleApplyImpulse(AzNetworking::IConnection* connection, const AZ::Vector3& impulse, const bool& external) override;
+        void HandleSetVelocity(AzNetworking::IConnection* connection, const AZ::Vector3& velocity, const bool& external) override;
+#endif
         //! @}
         //! @}
     
     
     protected:
     protected:
@@ -96,6 +101,8 @@ namespace MultiplayerSample
         float m_viewYaw = 0.0f;
         float m_viewYaw = 0.0f;
         float m_viewPitch = 0.0f;
         float m_viewPitch = 0.0f;
 
 
+        bool m_toggleSprint = false;
+
         bool m_forwardDown = false;
         bool m_forwardDown = false;
         bool m_leftDown = false;
         bool m_leftDown = false;
         bool m_backwardDown = false;
         bool m_backwardDown = false;

+ 21 - 0
Gem/Code/Source/Components/NetworkWeaponsComponent.cpp

@@ -40,8 +40,26 @@ namespace MultiplayerSample
     {
     {
     public:
     public:
         AZ_EBUS_BEHAVIOR_BINDER(BehaviorWeaponNotificationBusHandler, "{8F083B95-4519-4A24-8824-ED5ADA8FC52E}", AZ::SystemAllocator,
         AZ_EBUS_BEHAVIOR_BINDER(BehaviorWeaponNotificationBusHandler, "{8F083B95-4519-4A24-8824-ED5ADA8FC52E}", AZ::SystemAllocator,
+            OnWeaponActivate,
+            OnWeaponImpact,
+            OnWeaponDamage,
             OnConfirmedHitPlayer);
             OnConfirmedHitPlayer);
 
 
+        void OnWeaponActivate(const AZ::Transform& transform) override
+        {
+            Call(FN_OnWeaponActivate, transform);
+        }
+
+        void OnWeaponImpact(const AZ::Transform& transform) override
+        {
+            Call(FN_OnWeaponImpact, transform);
+        }
+
+        void OnWeaponDamage(const AZ::Transform& transform) override
+        {
+            Call(FN_OnWeaponDamage, transform);
+        }
+
         void OnConfirmedHitPlayer(AZ::EntityId byPlayerEntity, AZ::EntityId otherPlayerEntity) override
         void OnConfirmedHitPlayer(AZ::EntityId byPlayerEntity, AZ::EntityId otherPlayerEntity) override
         {
         {
             Call(FN_OnConfirmedHitPlayer, byPlayerEntity, otherPlayerEntity);
             Call(FN_OnConfirmedHitPlayer, byPlayerEntity, otherPlayerEntity);
@@ -165,6 +183,7 @@ namespace MultiplayerSample
         }
         }
 
 
         m_onWeaponActivateEvent.Signal(activationInfo);
         m_onWeaponActivateEvent.Signal(activationInfo);
+        WeaponNotificationBus::Broadcast(&WeaponNotificationBus::Events::OnWeaponActivate, activationInfo.m_activateEvent.m_initialTransform);
 
 
 #if AZ_TRAIT_CLIENT
 #if AZ_TRAIT_CLIENT
         if (cl_WeaponsDrawDebug && m_debugDraw)
         if (cl_WeaponsDrawDebug && m_debugDraw)
@@ -214,6 +233,7 @@ namespace MultiplayerSample
         }
         }
 
 
         m_onWeaponPredictHitEvent.Signal(hitInfo);
         m_onWeaponPredictHitEvent.Signal(hitInfo);
+        WeaponNotificationBus::Broadcast(&WeaponNotificationBus::Events::OnWeaponImpact, hitInfo.m_hitEvent.m_hitTransform);
 
 
         for (const auto& hitEntity : hitInfo.m_hitEvent.m_hitEntities)
         for (const auto& hitEntity : hitInfo.m_hitEvent.m_hitEntities)
         {
         {
@@ -286,6 +306,7 @@ namespace MultiplayerSample
 #endif
 #endif
 
 
         m_onWeaponConfirmHitEvent.Signal(hitInfo);
         m_onWeaponConfirmHitEvent.Signal(hitInfo);
+        WeaponNotificationBus::Broadcast(&WeaponNotificationBus::Events::OnWeaponDamage, hitInfo.m_hitEvent.m_hitTransform);
 
 
         // If we're a simulated weapon, or if the weapon is not predictive, then issue material hit effects since the predicted callback above will not get triggered
         // If we're a simulated weapon, or if the weapon is not predictive, then issue material hit effects since the predicted callback above will not get triggered
         // Note that materialfx are not hooked up currently as the engine currently doesn't support them
         // Note that materialfx are not hooked up currently as the engine currently doesn't support them

+ 5 - 0
Gem/Code/Source/Effects/GameEffect.cpp

@@ -168,4 +168,9 @@ namespace MultiplayerSample
         }
         }
 #endif
 #endif
     }
     }
+
+    const AZ::Vector3& GameEffect::GetEffectOffset() const
+    {
+        return m_effectOffset;
+    }
 }
 }

+ 4 - 0
Gem/Code/Source/Effects/GameEffect.h

@@ -52,6 +52,10 @@ namespace MultiplayerSample
         //! @param transform the root transform to move the effect to prior to triggering
         //! @param transform the root transform to move the effect to prior to triggering
         void TriggerEffect(const AZ::Transform& transform) const;
         void TriggerEffect(const AZ::Transform& transform) const;
 
 
+        //! Returns the configured effect offset.
+        //! @return the effect offset
+        const AZ::Vector3& GetEffectOffset() const;
+
     private:
     private:
         AZ::Data::AssetId m_particleAssetId; // The particle effect to play upon effect activation
         AZ::Data::AssetId m_particleAssetId; // The particle effect to play upon effect activation
         AZStd::string m_audioTrigger; // The name of the audio trigger to use on effect activation
         AZStd::string m_audioTrigger; // The name of the audio trigger to use on effect activation

+ 3 - 2
Gem/Code/Source/MultiplayerSampleSystemComponent.cpp

@@ -28,6 +28,8 @@ namespace MultiplayerSample
         ReflectWeaponEnums(context);
         ReflectWeaponEnums(context);
         GatherParams::Reflect(context);
         GatherParams::Reflect(context);
         HitEffect::Reflect(context);
         HitEffect::Reflect(context);
+        HitEntity::Reflect(context);
+        HitEvent::Reflect(context);
         WeaponParams::Reflect(context);
         WeaponParams::Reflect(context);
         GameEffect::Reflect(context);
         GameEffect::Reflect(context);
 
 
@@ -38,8 +40,7 @@ namespace MultiplayerSample
         if (AZ::SerializeContext* serialize = azrtti_cast<AZ::SerializeContext*>(context))
         if (AZ::SerializeContext* serialize = azrtti_cast<AZ::SerializeContext*>(context))
         {
         {
             serialize->Class<MultiplayerSampleSystemComponent, AZ::Component>()
             serialize->Class<MultiplayerSampleSystemComponent, AZ::Component>()
-                ->Version(0)
-                ;
+                ->Version(0);
 
 
             if (AZ::EditContext* ec = serialize->GetEditContext())
             if (AZ::EditContext* ec = serialize->GetEditContext())
             {
             {

+ 52 - 0
Gem/Code/Source/Weapons/WeaponTypes.cpp

@@ -351,6 +351,31 @@ namespace MultiplayerSample
             && serializer.Serialize(m_hitNetEntityId, "HitNetEntityId");
             && serializer.Serialize(m_hitNetEntityId, "HitNetEntityId");
     }
     }
 
 
+    void HitEntity::Reflect(AZ::ReflectContext* context)
+    {
+        AZ::SerializeContext* serializeContext = azrtti_cast<AZ::SerializeContext*>(context);
+        if (serializeContext)
+        {
+            serializeContext->Class<HitEntity>()
+                ->Version(0)
+                ->Field("HitPosition", &HitEntity::m_hitPosition)
+                ->Field("HitNetEntityId", &HitEntity::m_hitNetEntityId);
+        }
+
+        AZ::BehaviorContext* behaviorContext = azrtti_cast<AZ::BehaviorContext*>(context);
+        if (behaviorContext)
+        {
+            behaviorContext->Class<HitEntity>("HitEntity")
+                ->Attribute(AZ::Script::Attributes::Scope, AZ::Script::Attributes::ScopeFlags::Common)
+                ->Attribute(AZ::Script::Attributes::Module, "multiplayersample")
+                ->Attribute(AZ::Script::Attributes::Category, "MultiplayerSample")
+                ->Constructor<>()
+                ->Property("HitPosition", BehaviorValueProperty(&HitEntity::m_hitPosition))
+                ->Property("HitNetEntityId", BehaviorValueProperty(&HitEntity::m_hitNetEntityId))
+                ;
+        }
+    }
+
     bool HitEvent::Serialize(AzNetworking::ISerializer& serializer)
     bool HitEvent::Serialize(AzNetworking::ISerializer& serializer)
     {
     {
         return serializer.Serialize(m_hitTransform, "HitTransform")
         return serializer.Serialize(m_hitTransform, "HitTransform")
@@ -358,6 +383,33 @@ namespace MultiplayerSample
             && serializer.Serialize(m_hitEntities, "HitEntities");
             && serializer.Serialize(m_hitEntities, "HitEntities");
     }
     }
 
 
+    void HitEvent::Reflect(AZ::ReflectContext* context)
+    {
+        AZ::SerializeContext* serializeContext = azrtti_cast<AZ::SerializeContext*>(context);
+        if (serializeContext)
+        {
+            serializeContext->Class<HitEvent>()
+                ->Version(0)
+                ->Field("HitTransform", &HitEvent::m_hitTransform)
+                ->Field("ShooterNetEntityId", &HitEvent::m_shooterNetEntityId)
+                ->Field("HitEntities", &HitEvent::m_hitEntities);
+        }
+
+        AZ::BehaviorContext* behaviorContext = azrtti_cast<AZ::BehaviorContext*>(context);
+        if (behaviorContext)
+        {
+            behaviorContext->Class<HitEvent>("HitEvent")
+                ->Attribute(AZ::Script::Attributes::Scope, AZ::Script::Attributes::ScopeFlags::Common)
+                ->Attribute(AZ::Script::Attributes::Module, "multiplayersample")
+                ->Attribute(AZ::Script::Attributes::Category, "MultiplayerSample")
+                ->Constructor<>()
+                ->Property("HitTransform", BehaviorValueProperty(&HitEvent::m_hitTransform))
+                ->Property("ShooterNetEntityId", BehaviorValueProperty(&HitEvent::m_shooterNetEntityId))
+                ->Property("HitEntities", BehaviorValueProperty(&HitEvent::m_hitEntities))
+                ;
+        }
+    }
+
     bool FireParams::operator!=(const FireParams& rhs) const
     bool FireParams::operator!=(const FireParams& rhs) const
     {
     {
         return !m_targetPosition.IsClose(rhs.m_targetPosition)
         return !m_targetPosition.IsClose(rhs.m_targetPosition)

+ 7 - 1
Gem/Code/Source/Weapons/WeaponTypes.h

@@ -170,22 +170,28 @@ namespace MultiplayerSample
     //! Single hit entity in a weapon hit event.
     //! Single hit entity in a weapon hit event.
     struct HitEntity
     struct HitEntity
     {
     {
+        AZ_TYPE_INFO(HitEntity, "{A7A0A64A-816C-4675-9A02-652A72CD2255}");
+
         AZ::Vector3 m_hitPosition = AZ::Vector3::CreateZero(); // Location where the entity was hit, NOT the location of the projectile or weapon in the case of area damage
         AZ::Vector3 m_hitPosition = AZ::Vector3::CreateZero(); // Location where the entity was hit, NOT the location of the projectile or weapon in the case of area damage
         Multiplayer::NetEntityId m_hitNetEntityId = Multiplayer::InvalidNetEntityId; // Entity Id of the entity which was hit
         Multiplayer::NetEntityId m_hitNetEntityId = Multiplayer::InvalidNetEntityId; // Entity Id of the entity which was hit
 
 
         bool Serialize(AzNetworking::ISerializer& serializer);
         bool Serialize(AzNetworking::ISerializer& serializer);
+        static void Reflect(AZ::ReflectContext* context);
     };
     };
-    using HitEntities = AZStd::fixed_vector<HitEntity, MaxHitEntities>;
+    using HitEntities = AZStd::vector<HitEntity>;
 
 
     //! Structure containing details for a single weapon hit event.
     //! Structure containing details for a single weapon hit event.
     struct HitEvent
     struct HitEvent
     {
     {
+        AZ_TYPE_INFO(HitEvent, "{573515BB-E806-42C1-9F2C-2AA1B8E2EEF0}");
+
         AZ::Transform m_hitTransform = AZ::Transform::CreateIdentity(); // Transform of the hit event, NOT the location of the entity that was hit in the case of area damage
         AZ::Transform m_hitTransform = AZ::Transform::CreateIdentity(); // Transform of the hit event, NOT the location of the entity that was hit in the case of area damage
         Multiplayer::NetEntityId m_shooterNetEntityId    = Multiplayer::InvalidNetEntityId; // Entity Id of the shooter
         Multiplayer::NetEntityId m_shooterNetEntityId    = Multiplayer::InvalidNetEntityId; // Entity Id of the shooter
         Multiplayer::NetEntityId m_projectileNetEntityId = Multiplayer::InvalidNetEntityId; // Entity Id of the projectile, InvalidNetEntityId if this was a trace weapon hit
         Multiplayer::NetEntityId m_projectileNetEntityId = Multiplayer::InvalidNetEntityId; // Entity Id of the projectile, InvalidNetEntityId if this was a trace weapon hit
         HitEntities m_hitEntities; // Information about the entities that were hit
         HitEntities m_hitEntities; // Information about the entities that were hit
 
 
         bool Serialize(AzNetworking::ISerializer& serializer);
         bool Serialize(AzNetworking::ISerializer& serializer);
+        static void Reflect(AZ::ReflectContext* context);
     };
     };
 
 
     //! Structure containing details for a single fire event.
     //! Structure containing details for a single fire event.

+ 0 - 1
Gem/Code/multiplayersample_autogen_files.cmake

@@ -40,6 +40,5 @@ set(FILES
     Source/AutoGen/PlayerArmorComponent.AutoComponent.xml
     Source/AutoGen/PlayerArmorComponent.AutoComponent.xml
     Source/AutoGen/PlayerCoinCollectorComponent.AutoComponent.xml
     Source/AutoGen/PlayerCoinCollectorComponent.AutoComponent.xml
     Source/AutoGen/PlayerIdentityComponent.AutoComponent.xml
     Source/AutoGen/PlayerIdentityComponent.AutoComponent.xml
-    Source/AutoGen/PlayerKnockbackEffectComponent.AutoComponent.xml
     Source/AutoGen/RpcTesterComponent.AutoComponent.xml
     Source/AutoGen/RpcTesterComponent.AutoComponent.xml
 )
 )

+ 0 - 2
Gem/Code/multiplayersample_files.cmake

@@ -68,8 +68,6 @@ set(FILES
     Source/Components/Multiplayer/PlayerCoinCollectorComponent.h
     Source/Components/Multiplayer/PlayerCoinCollectorComponent.h
     Source/Components/Multiplayer/PlayerIdentityComponent.cpp
     Source/Components/Multiplayer/PlayerIdentityComponent.cpp
     Source/Components/Multiplayer/PlayerIdentityComponent.h
     Source/Components/Multiplayer/PlayerIdentityComponent.h
-    Source/Components/Multiplayer/PlayerKnockbackEffectComponent.cpp
-    Source/Components/Multiplayer/PlayerKnockbackEffectComponent.h
     Source/Components/Multiplayer/EnergyBallComponent.cpp
     Source/Components/Multiplayer/EnergyBallComponent.cpp
     Source/Components/Multiplayer/EnergyBallComponent.h
     Source/Components/Multiplayer/EnergyBallComponent.h
     Source/Components/Multiplayer/EnergyCannonComponent.cpp
     Source/Components/Multiplayer/EnergyCannonComponent.cpp

+ 2 - 2
Gem/preview.png

@@ -1,3 +1,3 @@
 version https://git-lfs.github.com/spec/v1
 version https://git-lfs.github.com/spec/v1
-oid sha256:936e6057fd22a0c7ef6c48b66d7495dcab105052eaaf24d11b3baff8cce932dc
-size 29895
+oid sha256:248e3ffe1fc9ffc02afb2ba8914e222a5a5d13ac45a48b98c95ee062e959a94c
+size 4475

Datei-Diff unterdrückt, da er zu groß ist
+ 185 - 751
Levels/GameplayTest/GameplayTest.prefab


Datei-Diff unterdrückt, da er zu groß ist
+ 1530 - 230
Levels/NewStarbase/NewStarbase.prefab


Datei-Diff unterdrückt, da er zu groß ist
+ 421 - 180
Prefabs/4x4x4BoxGrid.prefab


+ 87 - 76
Prefabs/Energy_Cannon_with_Energy_Ball.prefab

@@ -62,72 +62,72 @@
                     "$type": "EditorEntitySortComponent",
                     "$type": "EditorEntitySortComponent",
                     "Id": 10375256730531750003
                     "Id": 10375256730531750003
                 },
                 },
-                "Component_[10980786607067158143]": {
-                    "$type": "EditorMaterialComponent",
-                    "Id": 10980786607067158143,
-                    "Controller": {
-                        "Configuration": {
-                            "materials": {
-                                "{}": {
-                                    "MaterialAsset": {
-                                        "assetId": {
-                                            "guid": "{A07AB932-AA2C-5097-A476-2C80B74CBE44}"
-                                        },
-                                        "assetHint": "materials/presets/macbeth/13_blue_tex.azmaterial"
-                                    }
-                                }
-                            }
-                        }
-                    }
-                },
                 "Component_[1260159715379895998]": {
                 "Component_[1260159715379895998]": {
                     "$type": "EditorRigidBodyComponent",
                     "$type": "EditorRigidBodyComponent",
                     "Id": 1260159715379895998,
                     "Id": 1260159715379895998,
                     "Configuration": {
                     "Configuration": {
                         "entityId": "",
                         "entityId": "",
-                        "Gravity Enabled": false,
-                        "Mass": 523.5988159179688,
-                        "Inertia tensor": [
-                            52.35987854003906,
-                            0.0,
-                            0.0,
-                            0.0,
-                            52.35987854003906,
-                            0.0,
-                            0.0,
-                            0.0,
-                            52.35987854003906
-                        ]
+                        "Gravity Enabled": false
                     }
                     }
                 },
                 },
-                "Component_[12810850094831600573]": {
-                    "$type": "AZ::Render::EditorMeshComponent",
-                    "Id": 12810850094831600573,
-                    "Controller": {
-                        "Configuration": {
-                            "ModelAsset": {
-                                "assetId": {
-                                    "guid": "{CF3204A8-DE09-56D5-B5FA-E218A6F65E6F}",
-                                    "subId": 283342095
-                                },
-                                "assetHint": "testdata/objects/modelhotreload/sphere_5lods.azmodel"
+                "Component_[12889870600493739301]": {
+                    "$type": "PopcornFXEmitterEditorComponent",
+                    "Id": 12889870600493739301,
+                    "ParticleSystem": {
+                        "assetId": {
+                            "guid": "{4981130E-D6A9-54D3-A693-2B957A15051F}"
+                        },
+                        "assetHint": "popcornfx/particles/energyballtrap/fx_energyballtrap_projectile.pkfx"
+                    },
+                    "PrewarmTime": 0.0,
+                    "AttributeList": {
+                        "Attributes": [
+                            {
+                                "Name": "Color Intensity",
+                                "Type": 31
+                            },
+                            {
+                                "Name": "Global Scale",
+                                "Type": 31
                             }
                             }
-                        }
+                        ],
+                        "AttributesRawData": "AACAPwAAAAAAAAAAAAAAAAAAQD8AAAAAAAAAAAAAAAA="
+                    },
+                    "EditorAttributeList": {
+                        "AttributeCategories": [
+                            {
+                                "Attributes": [
+                                    {
+                                        "ValueFX": 1.0
+                                    },
+                                    {
+                                        "ValueFX": 0.75
+                                    }
+                                ]
+                            }
+                        ]
                     }
                     }
                 },
                 },
                 "Component_[1317909201307914089]": {
                 "Component_[1317909201307914089]": {
                     "$type": "EditorOnlyEntityComponent",
                     "$type": "EditorOnlyEntityComponent",
                     "Id": 1317909201307914089
                     "Id": 1317909201307914089
                 },
                 },
+                "Component_[147163556142342236]": {
+                    "$type": "EditorAudioTriggerComponent",
+                    "Id": 147163556142342236,
+                    "Play Trigger": {
+                        "controlName": "play_sx_int_energyballtrap_projectile"
+                    }
+                },
                 "Component_[14745079858933335176]": {
                 "Component_[14745079858933335176]": {
                     "$type": "{27F1E1A1-8D9D-4C3B-BD3A-AFB9762449C0} TransformComponent",
                     "$type": "{27F1E1A1-8D9D-4C3B-BD3A-AFB9762449C0} TransformComponent",
                     "Id": 14745079858933335176,
                     "Id": 14745079858933335176,
                     "Parent Entity": "Entity_[660556807508]",
                     "Parent Entity": "Entity_[660556807508]",
                     "Transform Data": {
                     "Transform Data": {
                         "Translate": [
                         "Translate": [
-                            0.0,
-                            -1.0,
-                            0.0
+                            -4.76837158203125e-7,
+                            0.014715194702148438,
+                            1.3146799802780151
                         ],
                         ],
                         "UniformScale": 0.5
                         "UniformScale": 0.5
                     }
                     }
@@ -136,12 +136,33 @@
                     "$type": "EditorVisibilityComponent",
                     "$type": "EditorVisibilityComponent",
                     "Id": 15147782715820726746
                     "Id": 15147782715820726746
                 },
                 },
+                "Component_[15983379144838108017]": {
+                    "$type": "GenericComponentWrapper",
+                    "Id": 15983379144838108017,
+                    "m_template": {
+                        "$type": "AudioProxyComponent"
+                    }
+                },
                 "Component_[16569145727191893785]": {
                 "Component_[16569145727191893785]": {
                     "$type": "GenericComponentWrapper",
                     "$type": "GenericComponentWrapper",
                     "Id": 16569145727191893785,
                     "Id": 16569145727191893785,
                     "m_template": {
                     "m_template": {
                         "$type": "MultiplayerSample::EnergyBallComponent",
                         "$type": "MultiplayerSample::EnergyBallComponent",
-                        "Speed": 5.0
+                        "ExplosionEffect": {
+                            "ParticleAsset": {
+                                "guid": "{D49CE200-BF8B-5DBF-98BD-14CF7C480D45}"
+                            },
+                            "AudioTrigger": "play_sx_int_energyballtrap_impact"
+                        },
+                        "GatherParams": {
+                            "GatherShape": 2,
+                            "CastDistance": 0.0,
+                            "TravelSpeed": 12.0,
+                            "BulletDrop": false
+                        },
+                        "HitEffect": {
+                            "HitMagnitude": 15.0
+                        }
                     }
                     }
                 },
                 },
                 "Component_[16681766830394531701]": {
                 "Component_[16681766830394531701]": {
@@ -151,30 +172,6 @@
                         "$type": "Multiplayer::NetworkRigidBodyComponent"
                         "$type": "Multiplayer::NetworkRigidBodyComponent"
                     }
                     }
                 },
                 },
-                "Component_[17564887301536129798]": {
-                    "$type": "EditorColliderComponent",
-                    "Id": 17564887301536129798,
-                    "ColliderConfiguration": {
-                        "MaterialSlots": {
-                            "Slots": [
-                                {
-                                    "Name": "Entire object"
-                                }
-                            ]
-                        }
-                    },
-                    "ShapeConfiguration": {
-                        "ShapeType": 0,
-                        "Sphere": {
-                            "Scale": [
-                                0.5,
-                                0.5,
-                                0.5
-                            ],
-                            "Radius": 1.0
-                        }
-                    }
-                },
                 "Component_[425805608025666933]": {
                 "Component_[425805608025666933]": {
                     "$type": "GenericComponentWrapper",
                     "$type": "GenericComponentWrapper",
                     "Id": 425805608025666933,
                     "Id": 425805608025666933,
@@ -243,10 +240,10 @@
                         "Configuration": {
                         "Configuration": {
                             "ModelAsset": {
                             "ModelAsset": {
                                 "assetId": {
                                 "assetId": {
-                                    "guid": "{E14975EF-E676-51A4-B826-3EF59CB645AA}",
-                                    "subId": 285127096
+                                    "guid": "{98F0A4B8-3708-5D15-BFB4-FA4AA377F084}",
+                                    "subId": 269172407
                                 },
                                 },
-                                "assetHint": "testdata/objects/cube/cube.azmodel"
+                                "assetHint": "defenceturret/defenceturret.azmodel"
                             }
                             }
                         }
                         }
                     }
                     }
@@ -288,6 +285,19 @@
                     "Id": 15034031694382477776,
                     "Id": 15034031694382477776,
                     "m_template": {
                     "m_template": {
                         "$type": "MultiplayerSample::EnergyCannonComponent",
                         "$type": "MultiplayerSample::EnergyCannonComponent",
+                        "RateOfFireMs": 4000,
+                        "BallLifetimeMs": 3800,
+                        "FiringEffect": {
+                            "ParticleAsset": {
+                                "guid": "{F16C718B-7B3D-5F6B-877C-0CA15AAE7544}"
+                            },
+                            "AudioTrigger": "play_sx_int_energyballtrap_buildup",
+                            "EffectOffset": [
+                                0.0,
+                                0.0,
+                                1.2999999523162842
+                            ]
+                        },
                         "EnergyBallEntity": "Entity_[656261840212]"
                         "EnergyBallEntity": "Entity_[656261840212]"
                     }
                     }
                 },
                 },
@@ -328,9 +338,10 @@
                                 "{}": {
                                 "{}": {
                                     "MaterialAsset": {
                                     "MaterialAsset": {
                                         "assetId": {
                                         "assetId": {
-                                            "guid": "{A07AB932-AA2C-5097-A476-2C80B74CBE44}"
+                                            "guid": "{98F0A4B8-3708-5D15-BFB4-FA4AA377F084}",
+                                            "subId": 1927518764
                                         },
                                         },
-                                        "assetHint": "materials/presets/macbeth/13_blue_tex.azmaterial"
+                                        "assetHint": "defenceturret/defenceturret_opaque_mat_14061460897371757100.azmaterial"
                                     }
                                     }
                                 }
                                 }
                             }
                             }

+ 27 - 19
Prefabs/Player.prefab

@@ -263,6 +263,7 @@
                         },
                         },
                         "MaximumSlopeAngle": 45.0,
                         "MaximumSlopeAngle": 45.0,
                         "StepHeight": 0.30000001192092896,
                         "StepHeight": 0.30000001192092896,
+                        "ColliderTag": "Player",
                         "ApplyMoveOnPhysicsTick": false,
                         "ApplyMoveOnPhysicsTick": false,
                         "SlopeBehaviour": 1,
                         "SlopeBehaviour": 1,
                         "ScaleCoeff": 0.8999999761581421
                         "ScaleCoeff": 0.8999999761581421
@@ -328,6 +329,23 @@
                         "$type": "Multiplayer::LocalPredictionPlayerInputComponent"
                         "$type": "Multiplayer::LocalPredictionPlayerInputComponent"
                     }
                     }
                 },
                 },
+                "Component_[3433022179537173310]": {
+                    "$type": "EditorScriptCanvasComponent",
+                    "Id": 3433022179537173310,
+                    "configuration": {
+                        "sourceHandle": {
+                            "id": "{18883F85-05DF-5AED-ABC2-21A539A89B8A}",
+                            "path": "scriptcanvas/PredictiveJumpPad.scriptcanvas"
+                        },
+                        "sourceName": "PredictiveJumpPad.scriptcanvas",
+                        "propertyOverrides": {
+                            "source": {
+                                "id": "{18883F85-05DF-5AED-ABC2-21A539A89B8A}",
+                                "path": "scriptcanvas/PredictiveJumpPad.scriptcanvas"
+                            }
+                        }
+                    }
+                },
                 "Component_[3651951460255600248]": {
                 "Component_[3651951460255600248]": {
                     "$type": "GenericComponentWrapper",
                     "$type": "GenericComponentWrapper",
                     "Id": 3651951460255600248,
                     "Id": 3651951460255600248,
@@ -335,9 +353,9 @@
                         "$type": "MultiplayerSample::NetworkTeleportCompatibleComponent",
                         "$type": "MultiplayerSample::NetworkTeleportCompatibleComponent",
                         "TeleportEffect": {
                         "TeleportEffect": {
                             "ParticleAsset": {
                             "ParticleAsset": {
-                                "guid": "{D49CE200-BF8B-5DBF-98BD-14CF7C480D45}"
+                                "guid": "{FAEA4FC5-78DF-5608-8DA2-88C6CFB1D281}"
                             },
                             },
-                            "AudioTrigger": "Play_Laser_Gun_Impact",
+                            "AudioTrigger": "play_sx_int_jumppad_launch",
                             "EffectOffset": [
                             "EffectOffset": [
                                 0.0,
                                 0.0,
                                 0.0,
                                 0.0,
@@ -346,6 +364,13 @@
                         }
                         }
                     }
                     }
                 },
                 },
+                "Component_[3712185848172530557]": {
+                    "$type": "GenericComponentWrapper",
+                    "Id": 3712185848172530557,
+                    "m_template": {
+                        "$type": "MultiplayerSample::ScriptingPlayerMovementComponent"
+                    }
+                },
                 "Component_[3873700008294568875]": {
                 "Component_[3873700008294568875]": {
                     "$type": "EditorPendingCompositionComponent",
                     "$type": "EditorPendingCompositionComponent",
                     "Id": 3873700008294568875
                     "Id": 3873700008294568875
@@ -501,23 +526,6 @@
                         "$type": "Multiplayer::NetworkTransformComponent"
                         "$type": "Multiplayer::NetworkTransformComponent"
                     }
                     }
                 },
                 },
-                "Component_[6986583060757611873]": {
-                    "$type": "EditorScriptCanvasComponent",
-                    "Id": 6986583060757611873,
-                    "configuration": {
-                        "sourceHandle": {
-                            "id": "{83DDCA95-0CA1-5599-AA7C-EFCF1E6BC753}",
-                            "path": "scriptcanvas/DamagePlayer.scriptcanvas"
-                        },
-                        "sourceName": "DamagePlayer.scriptcanvas",
-                        "propertyOverrides": {
-                            "source": {
-                                "id": "{83DDCA95-0CA1-5599-AA7C-EFCF1E6BC753}",
-                                "path": "scriptcanvas/DamagePlayer.scriptcanvas"
-                            }
-                        }
-                    }
-                },
                 "Component_[7398251875150394377]": {
                 "Component_[7398251875150394377]": {
                     "$type": "GenericComponentWrapper",
                     "$type": "GenericComponentWrapper",
                     "Id": 7398251875150394377,
                     "Id": 7398251875150394377,

+ 5 - 1
Registry/physxdebugconfiguration.setreg

@@ -3,7 +3,11 @@
         "Gems": {
         "Gems": {
             "PhysX": {
             "PhysX": {
                 "Debug": {
                 "Debug": {
-                    "PhysXDebugConfiguration": {}
+                    "PhysXDebugConfiguration": {
+                        "PvdConfigurationData": {
+                            "AutoConnectMode": 2
+                        }
+                    }
                 }
                 }
             }
             }
         }
         }

+ 19 - 1
Registry/physxsystemconfiguration.setreg

@@ -8,7 +8,7 @@
                             "LayerNames": [
                             "LayerNames": [
                                 "Default",
                                 "Default",
                                 "HitVolumes",
                                 "HitVolumes",
-                                {},
+                                "JumpPads",
                                 {},
                                 {},
                                 {},
                                 {},
                                 {},
                                 {},
@@ -106,6 +106,24 @@
                                     "Group": {
                                     "Group": {
                                         "Mask": 18446744073709551613
                                         "Mask": 18446744073709551613
                                     }
                                     }
+                                },
+                                {
+                                    "Id": {
+                                        "GroupId": "{678782A2-7719-4E6D-AF9E-9C90843B66B7}"
+                                    },
+                                    "Name": "Players",
+                                    "Group": {
+                                        "Mask": 9223372036854775802
+                                    }
+                                },
+                                {
+                                    "Id": {
+                                        "GroupId": "{759C364D-E383-4079-8AF6-3B9DC9A4AC4B}"
+                                    },
+                                    "Name": "JumpPads",
+                                    "Group": {
+                                        "Mask": 9223372036854775804
+                                    }
                                 }
                                 }
                             ]
                             ]
                         }
                         }

+ 2 - 2
preview.png

@@ -1,3 +1,3 @@
 version https://git-lfs.github.com/spec/v1
 version https://git-lfs.github.com/spec/v1
-oid sha256:06e6db9ae8c332ef40921ede4ac1aa5637e9125cf616787d1640809ed8fc565a
-size 117744
+oid sha256:fbf7a7aa55e6b1c8332e9947a507c2ea61a566251fea7edfdc81e31598e5e9e8
+size 98730

Datei-Diff unterdrückt, da er zu groß ist
+ 338 - 800
scriptcanvas/JumpPad.scriptcanvas


Datei-Diff unterdrückt, da er zu groß ist
+ 272 - 413
scriptcanvas/PredictiveJumpPad.scriptcanvas


Datei-Diff unterdrückt, da er zu groß ist
+ 324 - 160
scriptcanvas/ReticleEffects.scriptcanvas


Datei-Diff unterdrückt, da er zu groß ist
+ 277 - 323
scriptcanvas/ShieldGeneratorRoundEffects.scriptcanvas


+ 117 - 0
scripts/JumpPadScriptEvent.scriptevents

@@ -0,0 +1,117 @@
+<ObjectStream version="3">
+	<Class name="ScriptEventsAsset" version="1" type="{CB4D603E-8CB0-4D80-8165-4244F28AF187}">
+		<Class name="ScriptEvent" field="m_definition" version="2" type="{10A08CD3-32C9-4E18-8039-4B8A8157918E}">
+			<Class name="unsigned int" field="m_version" value="2" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
+			<Class name="VersionedProperty" field="m_name" version="4" type="{828CA9C0-32F1-40B3-8018-EE7C3C38192A}">
+				<Class name="AZ::Uuid" field="m_id" value="{C355E27F-6E6C-4898-BA75-43FF6514EA87}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+				<Class name="AZStd::string" field="m_label" value="Name" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
+				<Class name="unsigned int" field="m_version" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
+				<Class name="AZStd::vector&lt;VersionedProperty, allocator&gt;" field="m_versions" type="{326CAAFE-9101-56E2-B869-D770629A6B19}"/>
+				<Class name="AZStd::any" field="m_data" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}">
+					<Class name="AZStd::string" field="m_data" value="PlayerJumpPad" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
+				</Class>
+			</Class>
+			<Class name="VersionedProperty" field="m_category" version="4" type="{828CA9C0-32F1-40B3-8018-EE7C3C38192A}">
+				<Class name="AZ::Uuid" field="m_id" value="{692F4239-3385-4A08-8E0C-7C8B574F8061}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+				<Class name="AZStd::string" field="m_label" value="Category" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
+				<Class name="unsigned int" field="m_version" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
+				<Class name="AZStd::vector&lt;VersionedProperty, allocator&gt;" field="m_versions" type="{326CAAFE-9101-56E2-B869-D770629A6B19}"/>
+				<Class name="AZStd::any" field="m_data" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}">
+					<Class name="AZStd::string" field="m_data" value="Script Events" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
+				</Class>
+			</Class>
+			<Class name="VersionedProperty" field="m_tooltip" version="4" type="{828CA9C0-32F1-40B3-8018-EE7C3C38192A}">
+				<Class name="AZ::Uuid" field="m_id" value="{3953A295-FBF0-4767-939B-89EDCAC60D06}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+				<Class name="AZStd::string" field="m_label" value="Tooltip" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
+				<Class name="unsigned int" field="m_version" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
+				<Class name="AZStd::vector&lt;VersionedProperty, allocator&gt;" field="m_versions" type="{326CAAFE-9101-56E2-B869-D770629A6B19}"/>
+				<Class name="AZStd::any" field="m_data" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}">
+					<Class name="AZStd::string" field="m_data" value="Send jump pad events from the player to the jump pad" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
+				</Class>
+			</Class>
+			<Class name="VersionedProperty" field="m_addressType" version="4" type="{828CA9C0-32F1-40B3-8018-EE7C3C38192A}">
+				<Class name="AZ::Uuid" field="m_id" value="{F36CF154-79D0-4E87-A48B-12647D79A71E}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+				<Class name="AZStd::string" field="m_label" value="Entity Id" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
+				<Class name="unsigned int" field="m_version" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
+				<Class name="AZStd::vector&lt;VersionedProperty, allocator&gt;" field="m_versions" type="{326CAAFE-9101-56E2-B869-D770629A6B19}"/>
+				<Class name="AZStd::any" field="m_data" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}">
+					<Class name="AZ::Uuid" field="m_data" value="{6383F1D3-BB27-4E6B-A49A-6409B2059EAA}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+				</Class>
+			</Class>
+			<Class name="AZStd::vector&lt;Method, allocator&gt;" field="m_methods" type="{D9866B79-D11A-58E6-B974-0B45783F53A4}">
+				<Class name="Method" field="element" type="{E034EA83-C798-413D-ACE8-4923C51CF4F7}">
+					<Class name="VersionedProperty" field="m_name" version="4" type="{828CA9C0-32F1-40B3-8018-EE7C3C38192A}">
+						<Class name="AZ::Uuid" field="m_id" value="{47603717-F7E7-405A-89E0-407DDA644034}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+						<Class name="AZStd::string" field="m_label" value="Name" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
+						<Class name="unsigned int" field="m_version" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
+						<Class name="AZStd::vector&lt;VersionedProperty, allocator&gt;" field="m_versions" type="{326CAAFE-9101-56E2-B869-D770629A6B19}"/>
+						<Class name="AZStd::any" field="m_data" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}">
+							<Class name="AZStd::string" field="m_data" value="OnEnter" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
+						</Class>
+					</Class>
+					<Class name="VersionedProperty" field="m_tooltip" version="4" type="{828CA9C0-32F1-40B3-8018-EE7C3C38192A}">
+						<Class name="AZ::Uuid" field="m_id" value="{2EC873C5-8573-4D87-AC81-33D63A6CAE3A}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+						<Class name="AZStd::string" field="m_label" value="Tooltip" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
+						<Class name="unsigned int" field="m_version" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
+						<Class name="AZStd::vector&lt;VersionedProperty, allocator&gt;" field="m_versions" type="{326CAAFE-9101-56E2-B869-D770629A6B19}"/>
+						<Class name="AZStd::any" field="m_data" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}">
+							<Class name="AZStd::string" field="m_data" value="Triggered when a player enters a jump pad volume" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
+						</Class>
+					</Class>
+					<Class name="VersionedProperty" field="m_returnType" version="4" type="{828CA9C0-32F1-40B3-8018-EE7C3C38192A}">
+						<Class name="AZ::Uuid" field="m_id" value="{0BF15B20-E7F0-41EE-A5E6-179B2D1DA4BD}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+						<Class name="AZStd::string" field="m_label" value="Vector3" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
+						<Class name="unsigned int" field="m_version" value="1" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
+						<Class name="AZStd::vector&lt;VersionedProperty, allocator&gt;" field="m_versions" type="{326CAAFE-9101-56E2-B869-D770629A6B19}">
+							<Class name="VersionedProperty" field="element" version="4" type="{828CA9C0-32F1-40B3-8018-EE7C3C38192A}">
+								<Class name="AZ::Uuid" field="m_id" value="{0AE183B7-9401-413E-BDF1-DAA40D64DAAC}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+								<Class name="AZStd::string" field="m_label" value="Return Type" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
+								<Class name="unsigned int" field="m_version" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
+								<Class name="AZStd::vector&lt;VersionedProperty, allocator&gt;" field="m_versions" type="{326CAAFE-9101-56E2-B869-D770629A6B19}"/>
+								<Class name="AZStd::any" field="m_data" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}">
+									<Class name="AZ::Uuid" field="m_data" value="{C0F1AFAD-5CB3-450E-B0F5-ADB5D46B0E22}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+								</Class>
+							</Class>
+						</Class>
+						<Class name="AZStd::any" field="m_data" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}">
+							<Class name="AZ::Uuid" field="m_data" value="{8379EB7D-01FA-4538-B64B-A6543B4BE73D}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+						</Class>
+					</Class>
+					<Class name="AZStd::vector&lt;Parameter, allocator&gt;" field="m_parameters" type="{6ED13EA7-791B-57A8-A4F1-560B5F35B472}">
+						<Class name="Parameter" field="element" type="{0DA4809B-08A6-49DC-9024-F81645D97FAC}">
+							<Class name="VersionedProperty" field="m_name" version="4" type="{828CA9C0-32F1-40B3-8018-EE7C3C38192A}">
+								<Class name="AZ::Uuid" field="m_id" value="{FFBEE062-A693-4F35-88D6-11FD2674F095}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+								<Class name="AZStd::string" field="m_label" value="Name" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
+								<Class name="unsigned int" field="m_version" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
+								<Class name="AZStd::vector&lt;VersionedProperty, allocator&gt;" field="m_versions" type="{326CAAFE-9101-56E2-B869-D770629A6B19}"/>
+								<Class name="AZStd::any" field="m_data" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}">
+									<Class name="AZStd::string" field="m_data" value="PlayerEntityId" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
+								</Class>
+							</Class>
+							<Class name="VersionedProperty" field="m_tooltip" version="4" type="{828CA9C0-32F1-40B3-8018-EE7C3C38192A}">
+								<Class name="AZ::Uuid" field="m_id" value="{2D7B7AA5-0B55-4A86-8DF2-47250881E78D}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+								<Class name="AZStd::string" field="m_label" value="Tooltip" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
+								<Class name="unsigned int" field="m_version" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
+								<Class name="AZStd::vector&lt;VersionedProperty, allocator&gt;" field="m_versions" type="{326CAAFE-9101-56E2-B869-D770629A6B19}"/>
+								<Class name="AZStd::any" field="m_data" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}">
+									<Class name="AZStd::string" field="m_data" value="The players entityId" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
+								</Class>
+							</Class>
+							<Class name="VersionedProperty" field="m_type" version="4" type="{828CA9C0-32F1-40B3-8018-EE7C3C38192A}">
+								<Class name="AZ::Uuid" field="m_id" value="{6DC86E1B-21DE-4AE9-83B2-E8A2526AD29F}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+								<Class name="AZStd::string" field="m_label" value="Entity Id" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
+								<Class name="unsigned int" field="m_version" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
+								<Class name="AZStd::vector&lt;VersionedProperty, allocator&gt;" field="m_versions" type="{326CAAFE-9101-56E2-B869-D770629A6B19}"/>
+								<Class name="AZStd::any" field="m_data" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}">
+									<Class name="AZ::Uuid" field="m_data" value="{6383F1D3-BB27-4E6B-A49A-6409B2059EAA}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
+								</Class>
+							</Class>
+						</Class>
+					</Class>
+				</Class>
+			</Class>
+			<Class name="AZStd::string" field="scriptCanvasSerializedData" value="" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
+		</Class>
+	</Class>
+</ObjectStream>
+

+ 0 - 225
scripts/ShieldGenerator.scriptevents

@@ -1,225 +0,0 @@
-<ObjectStream version="3">
-	<Class name="ScriptEventsAsset" version="1" type="{CB4D603E-8CB0-4D80-8165-4244F28AF187}">
-		<Class name="ScriptEvent" field="m_definition" version="2" type="{10A08CD3-32C9-4E18-8039-4B8A8157918E}">
-			<Class name="unsigned int" field="m_version" value="2" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
-			<Class name="VersionedProperty" field="m_name" version="4" type="{828CA9C0-32F1-40B3-8018-EE7C3C38192A}">
-				<Class name="AZ::Uuid" field="m_id" value="{439154F3-21C2-4718-8312-F350AE3E4756}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
-				<Class name="AZStd::string" field="m_label" value="Name" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
-				<Class name="unsigned int" field="m_version" value="1" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
-				<Class name="AZStd::vector&lt;VersionedProperty, allocator&gt;" field="m_versions" type="{326CAAFE-9101-56E2-B869-D770629A6B19}">
-					<Class name="VersionedProperty" field="element" version="4" type="{828CA9C0-32F1-40B3-8018-EE7C3C38192A}">
-						<Class name="AZ::Uuid" field="m_id" value="{439154F3-21C2-4718-8312-F350AE3E4756}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
-						<Class name="AZStd::string" field="m_label" value="Name" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
-						<Class name="unsigned int" field="m_version" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
-						<Class name="AZStd::vector&lt;VersionedProperty, allocator&gt;" field="m_versions" type="{326CAAFE-9101-56E2-B869-D770629A6B19}"/>
-						<Class name="AZStd::any" field="m_data" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}">
-							<Class name="AZStd::string" field="m_data" value="EventName" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
-						</Class>
-					</Class>
-				</Class>
-				<Class name="AZStd::any" field="m_data" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}">
-					<Class name="AZStd::string" field="m_data" value="GeneratorExplosion" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
-				</Class>
-			</Class>
-			<Class name="VersionedProperty" field="m_category" version="4" type="{828CA9C0-32F1-40B3-8018-EE7C3C38192A}">
-				<Class name="AZ::Uuid" field="m_id" value="{D4A63012-C20A-457C-8D5A-E954959F8BBA}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
-				<Class name="AZStd::string" field="m_label" value="Category" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
-				<Class name="unsigned int" field="m_version" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
-				<Class name="AZStd::vector&lt;VersionedProperty, allocator&gt;" field="m_versions" type="{326CAAFE-9101-56E2-B869-D770629A6B19}"/>
-				<Class name="AZStd::any" field="m_data" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}">
-					<Class name="AZStd::string" field="m_data" value="Script Events" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
-				</Class>
-			</Class>
-			<Class name="VersionedProperty" field="m_tooltip" version="4" type="{828CA9C0-32F1-40B3-8018-EE7C3C38192A}">
-				<Class name="AZ::Uuid" field="m_id" value="{B42E8437-E29B-45D2-A416-FEC8A244D2CE}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
-				<Class name="AZStd::string" field="m_label" value="Tooltip" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
-				<Class name="unsigned int" field="m_version" value="1" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
-				<Class name="AZStd::vector&lt;VersionedProperty, allocator&gt;" field="m_versions" type="{326CAAFE-9101-56E2-B869-D770629A6B19}">
-					<Class name="VersionedProperty" field="element" version="4" type="{828CA9C0-32F1-40B3-8018-EE7C3C38192A}">
-						<Class name="AZ::Uuid" field="m_id" value="{B42E8437-E29B-45D2-A416-FEC8A244D2CE}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
-						<Class name="AZStd::string" field="m_label" value="Tooltip" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
-						<Class name="unsigned int" field="m_version" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
-						<Class name="AZStd::vector&lt;VersionedProperty, allocator&gt;" field="m_versions" type="{326CAAFE-9101-56E2-B869-D770629A6B19}"/>
-						<Class name="AZStd::any" field="m_data" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}">
-							<Class name="AZStd::string" field="m_data" value="" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
-						</Class>
-					</Class>
-				</Class>
-				<Class name="AZStd::any" field="m_data" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}">
-					<Class name="AZStd::string" field="m_data" value="Triggers when the generators should explode" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
-				</Class>
-			</Class>
-			<Class name="VersionedProperty" field="m_addressType" version="4" type="{828CA9C0-32F1-40B3-8018-EE7C3C38192A}">
-				<Class name="AZ::Uuid" field="m_id" value="{073F8788-EE4B-4CAF-B104-A4714699A45A}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
-				<Class name="AZStd::string" field="m_label" value="None" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
-				<Class name="unsigned int" field="m_version" value="1" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
-				<Class name="AZStd::vector&lt;VersionedProperty, allocator&gt;" field="m_versions" type="{326CAAFE-9101-56E2-B869-D770629A6B19}">
-					<Class name="VersionedProperty" field="element" version="4" type="{828CA9C0-32F1-40B3-8018-EE7C3C38192A}">
-						<Class name="AZ::Uuid" field="m_id" value="{BCA45CE9-93E3-4F4B-8E61-B42305FD9D7B}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
-						<Class name="AZStd::string" field="m_label" value="Address Type" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
-						<Class name="unsigned int" field="m_version" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
-						<Class name="AZStd::vector&lt;VersionedProperty, allocator&gt;" field="m_versions" type="{326CAAFE-9101-56E2-B869-D770629A6B19}"/>
-						<Class name="AZStd::any" field="m_data" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}">
-							<Class name="AZ::Uuid" field="m_data" value="{C0F1AFAD-5CB3-450E-B0F5-ADB5D46B0E22}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
-						</Class>
-					</Class>
-				</Class>
-				<Class name="AZStd::any" field="m_data" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}">
-					<Class name="AZ::Uuid" field="m_data" value="{C0F1AFAD-5CB3-450E-B0F5-ADB5D46B0E22}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
-				</Class>
-			</Class>
-			<Class name="AZStd::vector&lt;Method, allocator&gt;" field="m_methods" type="{D9866B79-D11A-58E6-B974-0B45783F53A4}">
-				<Class name="Method" field="element" type="{E034EA83-C798-413D-ACE8-4923C51CF4F7}">
-					<Class name="VersionedProperty" field="m_name" version="4" type="{828CA9C0-32F1-40B3-8018-EE7C3C38192A}">
-						<Class name="AZ::Uuid" field="m_id" value="{EA552A3B-5BA5-49AD-BD47-950CE3C07935}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
-						<Class name="AZStd::string" field="m_label" value="Name" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
-						<Class name="unsigned int" field="m_version" value="1" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
-						<Class name="AZStd::vector&lt;VersionedProperty, allocator&gt;" field="m_versions" type="{326CAAFE-9101-56E2-B869-D770629A6B19}">
-							<Class name="VersionedProperty" field="element" version="4" type="{828CA9C0-32F1-40B3-8018-EE7C3C38192A}">
-								<Class name="AZ::Uuid" field="m_id" value="{EA552A3B-5BA5-49AD-BD47-950CE3C07935}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
-								<Class name="AZStd::string" field="m_label" value="Name" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
-								<Class name="unsigned int" field="m_version" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
-								<Class name="AZStd::vector&lt;VersionedProperty, allocator&gt;" field="m_versions" type="{326CAAFE-9101-56E2-B869-D770629A6B19}"/>
-								<Class name="AZStd::any" field="m_data" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}">
-									<Class name="AZStd::string" field="m_data" value="MethodName" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
-								</Class>
-							</Class>
-						</Class>
-						<Class name="AZStd::any" field="m_data" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}">
-							<Class name="AZStd::string" field="m_data" value="GeneratorExplosion" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
-						</Class>
-					</Class>
-					<Class name="VersionedProperty" field="m_tooltip" version="4" type="{828CA9C0-32F1-40B3-8018-EE7C3C38192A}">
-						<Class name="AZ::Uuid" field="m_id" value="{8773563F-DDA3-4C30-A3D3-4EACD93429E6}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
-						<Class name="AZStd::string" field="m_label" value="Tooltip" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
-						<Class name="unsigned int" field="m_version" value="1" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
-						<Class name="AZStd::vector&lt;VersionedProperty, allocator&gt;" field="m_versions" type="{326CAAFE-9101-56E2-B869-D770629A6B19}">
-							<Class name="VersionedProperty" field="element" version="4" type="{828CA9C0-32F1-40B3-8018-EE7C3C38192A}">
-								<Class name="AZ::Uuid" field="m_id" value="{8773563F-DDA3-4C30-A3D3-4EACD93429E6}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
-								<Class name="AZStd::string" field="m_label" value="Tooltip" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
-								<Class name="unsigned int" field="m_version" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
-								<Class name="AZStd::vector&lt;VersionedProperty, allocator&gt;" field="m_versions" type="{326CAAFE-9101-56E2-B869-D770629A6B19}"/>
-								<Class name="AZStd::any" field="m_data" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}">
-									<Class name="AZStd::string" field="m_data" value="" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
-								</Class>
-							</Class>
-						</Class>
-						<Class name="AZStd::any" field="m_data" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}">
-							<Class name="AZStd::string" field="m_data" value="Triggers when a generator explodes" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
-						</Class>
-					</Class>
-					<Class name="VersionedProperty" field="m_returnType" version="4" type="{828CA9C0-32F1-40B3-8018-EE7C3C38192A}">
-						<Class name="AZ::Uuid" field="m_id" value="{D3E9FC77-C9E8-4489-9356-683E029B16F7}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
-						<Class name="AZStd::string" field="m_label" value="None" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
-						<Class name="unsigned int" field="m_version" value="1" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
-						<Class name="AZStd::vector&lt;VersionedProperty, allocator&gt;" field="m_versions" type="{326CAAFE-9101-56E2-B869-D770629A6B19}">
-							<Class name="VersionedProperty" field="element" version="4" type="{828CA9C0-32F1-40B3-8018-EE7C3C38192A}">
-								<Class name="AZ::Uuid" field="m_id" value="{74F991A1-69AF-4BA5-AE5F-6B51950317E9}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
-								<Class name="AZStd::string" field="m_label" value="Return Type" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
-								<Class name="unsigned int" field="m_version" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
-								<Class name="AZStd::vector&lt;VersionedProperty, allocator&gt;" field="m_versions" type="{326CAAFE-9101-56E2-B869-D770629A6B19}"/>
-								<Class name="AZStd::any" field="m_data" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}">
-									<Class name="AZ::Uuid" field="m_data" value="{C0F1AFAD-5CB3-450E-B0F5-ADB5D46B0E22}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
-								</Class>
-							</Class>
-						</Class>
-						<Class name="AZStd::any" field="m_data" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}">
-							<Class name="AZ::Uuid" field="m_data" value="{C0F1AFAD-5CB3-450E-B0F5-ADB5D46B0E22}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
-						</Class>
-					</Class>
-					<Class name="AZStd::vector&lt;Parameter, allocator&gt;" field="m_parameters" type="{6ED13EA7-791B-57A8-A4F1-560B5F35B472}">
-						<Class name="Parameter" field="element" type="{0DA4809B-08A6-49DC-9024-F81645D97FAC}">
-							<Class name="VersionedProperty" field="m_name" version="4" type="{828CA9C0-32F1-40B3-8018-EE7C3C38192A}">
-								<Class name="AZ::Uuid" field="m_id" value="{2703BF1A-78D3-4D3C-A85C-E999CAE22385}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
-								<Class name="AZStd::string" field="m_label" value="Name" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
-								<Class name="unsigned int" field="m_version" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
-								<Class name="AZStd::vector&lt;VersionedProperty, allocator&gt;" field="m_versions" type="{326CAAFE-9101-56E2-B869-D770629A6B19}"/>
-								<Class name="AZStd::any" field="m_data" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}">
-									<Class name="AZStd::string" field="m_data" value="Location" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
-								</Class>
-							</Class>
-							<Class name="VersionedProperty" field="m_tooltip" version="4" type="{828CA9C0-32F1-40B3-8018-EE7C3C38192A}">
-								<Class name="AZ::Uuid" field="m_id" value="{60AB1144-911A-48D7-84D4-2DDF38A9E0CF}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
-								<Class name="AZStd::string" field="m_label" value="Tooltip" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
-								<Class name="unsigned int" field="m_version" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
-								<Class name="AZStd::vector&lt;VersionedProperty, allocator&gt;" field="m_versions" type="{326CAAFE-9101-56E2-B869-D770629A6B19}"/>
-								<Class name="AZStd::any" field="m_data" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}">
-									<Class name="AZStd::string" field="m_data" value="Location" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
-								</Class>
-							</Class>
-							<Class name="VersionedProperty" field="m_type" version="4" type="{828CA9C0-32F1-40B3-8018-EE7C3C38192A}">
-								<Class name="AZ::Uuid" field="m_id" value="{46A6A963-0E29-47F8-9729-15465D5CE331}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
-								<Class name="AZStd::string" field="m_label" value="Vector3" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
-								<Class name="unsigned int" field="m_version" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
-								<Class name="AZStd::vector&lt;VersionedProperty, allocator&gt;" field="m_versions" type="{326CAAFE-9101-56E2-B869-D770629A6B19}"/>
-								<Class name="AZStd::any" field="m_data" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}">
-									<Class name="AZ::Uuid" field="m_data" value="{8379EB7D-01FA-4538-B64B-A6543B4BE73D}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
-								</Class>
-							</Class>
-						</Class>
-						<Class name="Parameter" field="element" type="{0DA4809B-08A6-49DC-9024-F81645D97FAC}">
-							<Class name="VersionedProperty" field="m_name" version="4" type="{828CA9C0-32F1-40B3-8018-EE7C3C38192A}">
-								<Class name="AZ::Uuid" field="m_id" value="{1143C37B-87C1-4C02-8166-52A008980B5A}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
-								<Class name="AZStd::string" field="m_label" value="Name" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
-								<Class name="unsigned int" field="m_version" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
-								<Class name="AZStd::vector&lt;VersionedProperty, allocator&gt;" field="m_versions" type="{326CAAFE-9101-56E2-B869-D770629A6B19}"/>
-								<Class name="AZStd::any" field="m_data" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}">
-									<Class name="AZStd::string" field="m_data" value="DamageDistance" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
-								</Class>
-							</Class>
-							<Class name="VersionedProperty" field="m_tooltip" version="4" type="{828CA9C0-32F1-40B3-8018-EE7C3C38192A}">
-								<Class name="AZ::Uuid" field="m_id" value="{5AEF5367-29CA-4D37-8B0B-2D8B3873B070}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
-								<Class name="AZStd::string" field="m_label" value="Tooltip" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
-								<Class name="unsigned int" field="m_version" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
-								<Class name="AZStd::vector&lt;VersionedProperty, allocator&gt;" field="m_versions" type="{326CAAFE-9101-56E2-B869-D770629A6B19}"/>
-								<Class name="AZStd::any" field="m_data" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}">
-									<Class name="AZStd::string" field="m_data" value="DamageDistance" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
-								</Class>
-							</Class>
-							<Class name="VersionedProperty" field="m_type" version="4" type="{828CA9C0-32F1-40B3-8018-EE7C3C38192A}">
-								<Class name="AZ::Uuid" field="m_id" value="{387125F4-39E3-47FF-8FFF-36E2734B73D1}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
-								<Class name="AZStd::string" field="m_label" value="Number" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
-								<Class name="unsigned int" field="m_version" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
-								<Class name="AZStd::vector&lt;VersionedProperty, allocator&gt;" field="m_versions" type="{326CAAFE-9101-56E2-B869-D770629A6B19}"/>
-								<Class name="AZStd::any" field="m_data" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}">
-									<Class name="AZ::Uuid" field="m_data" value="{110C4B14-11A8-4E9D-8638-5051013A56AC}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
-								</Class>
-							</Class>
-						</Class>
-						<Class name="Parameter" field="element" type="{0DA4809B-08A6-49DC-9024-F81645D97FAC}">
-							<Class name="VersionedProperty" field="m_name" version="4" type="{828CA9C0-32F1-40B3-8018-EE7C3C38192A}">
-								<Class name="AZ::Uuid" field="m_id" value="{F50F1027-6958-49D1-B951-CF9B0800DBAB}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
-								<Class name="AZStd::string" field="m_label" value="Name" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
-								<Class name="unsigned int" field="m_version" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
-								<Class name="AZStd::vector&lt;VersionedProperty, allocator&gt;" field="m_versions" type="{326CAAFE-9101-56E2-B869-D770629A6B19}"/>
-								<Class name="AZStd::any" field="m_data" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}">
-									<Class name="AZStd::string" field="m_data" value="DamageMagnitude" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
-								</Class>
-							</Class>
-							<Class name="VersionedProperty" field="m_tooltip" version="4" type="{828CA9C0-32F1-40B3-8018-EE7C3C38192A}">
-								<Class name="AZ::Uuid" field="m_id" value="{152A0354-FF38-4EDE-9236-A009557196DC}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
-								<Class name="AZStd::string" field="m_label" value="Tooltip" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
-								<Class name="unsigned int" field="m_version" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
-								<Class name="AZStd::vector&lt;VersionedProperty, allocator&gt;" field="m_versions" type="{326CAAFE-9101-56E2-B869-D770629A6B19}"/>
-								<Class name="AZStd::any" field="m_data" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}">
-									<Class name="AZStd::string" field="m_data" value="DamageMagnitude" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
-								</Class>
-							</Class>
-							<Class name="VersionedProperty" field="m_type" version="4" type="{828CA9C0-32F1-40B3-8018-EE7C3C38192A}">
-								<Class name="AZ::Uuid" field="m_id" value="{387125F4-39E3-47FF-8FFF-36E2734B73D1}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
-								<Class name="AZStd::string" field="m_label" value="Number" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
-								<Class name="unsigned int" field="m_version" value="0" type="{43DA906B-7DEF-4CA8-9790-854106D3F983}"/>
-								<Class name="AZStd::vector&lt;VersionedProperty, allocator&gt;" field="m_versions" type="{326CAAFE-9101-56E2-B869-D770629A6B19}"/>
-								<Class name="AZStd::any" field="m_data" type="{03924488-C7F4-4D6D-948B-ABC2D1AE2FD3}">
-									<Class name="AZ::Uuid" field="m_data" value="{110C4B14-11A8-4E9D-8638-5051013A56AC}" type="{E152C105-A133-4D03-BBF8-3D4B2FBA3E2A}"/>
-								</Class>
-							</Class>
-						</Class>
-					</Class>
-				</Class>
-			</Class>
-			<Class name="AZStd::string" field="scriptCanvasSerializedData" value="" type="{03AAAB3F-5C47-5A66-9EBC-D5FA4DB353C9}"/>
-		</Class>
-	</Class>
-</ObjectStream>
-

Einige Dateien werden nicht angezeigt, da zu viele Dateien in diesem Diff geändert wurden.