<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<?mso-application progid="Word.Document"?>
<pkg:package xmlns:pkg="http://schemas.microsoft.com/office/2006/xmlPackage"><pkg:part pkg:name="/_rels/.rels" pkg:contentType="application/vnd.openxmlformats-package.relationships+xml" pkg:padding="512"><pkg:xmlData><Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships"><Relationship Id="rId3" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties" Target="docProps/app.xml"/><Relationship Id="rId2" Type="http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties" Target="docProps/core.xml"/><Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument" Target="word/document.xml"/></Relationships></pkg:xmlData></pkg:part><pkg:part pkg:name="/word/document.xml" pkg:contentType="application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml"><pkg:xmlData><w:document xmlns:wpc="http://schemas.microsoft.com/office/word/2010/wordprocessingCanvas" xmlns:cx="http://schemas.microsoft.com/office/drawing/2014/chartex" xmlns:cx1="http://schemas.microsoft.com/office/drawing/2015/9/8/chartex" xmlns:cx2="http://schemas.microsoft.com/office/drawing/2015/10/21/chartex" xmlns:cx3="http://schemas.microsoft.com/office/drawing/2016/5/9/chartex" xmlns:cx4="http://schemas.microsoft.com/office/drawing/2016/5/10/chartex" xmlns:cx5="http://schemas.microsoft.com/office/drawing/2016/5/11/chartex" xmlns:cx6="http://schemas.microsoft.com/office/drawing/2016/5/12/chartex" xmlns:cx7="http://schemas.microsoft.com/office/drawing/2016/5/13/chartex" xmlns:cx8="http://schemas.microsoft.com/office/drawing/2016/5/14/chartex" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:aink="http://schemas.microsoft.com/office/drawing/2016/ink" xmlns:am3d="http://schemas.microsoft.com/office/drawing/2017/model3d" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:oel="http://schemas.microsoft.com/office/2019/extlst" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:m="http://schemas.openxmlformats.org/officeDocument/2006/math" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:wp14="http://schemas.microsoft.com/office/word/2010/wordprocessingDrawing" xmlns:wp="http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing" xmlns:w10="urn:schemas-microsoft-com:office:word" xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main" xmlns:w14="http://schemas.microsoft.com/office/word/2010/wordml" xmlns:w15="http://schemas.microsoft.com/office/word/2012/wordml" xmlns:w16cex="http://schemas.microsoft.com/office/word/2018/wordml/cex" xmlns:w16cid="http://schemas.microsoft.com/office/word/2016/wordml/cid" xmlns:w16="http://schemas.microsoft.com/office/word/2018/wordml" xmlns:w16sdtdh="http://schemas.microsoft.com/office/word/2020/wordml/sdtdatahash" xmlns:w16se="http://schemas.microsoft.com/office/word/2015/wordml/symex" xmlns:wpg="http://schemas.microsoft.com/office/word/2010/wordprocessingGroup" xmlns:wpi="http://schemas.microsoft.com/office/word/2010/wordprocessingInk" xmlns:wne="http://schemas.microsoft.com/office/word/2006/wordml" xmlns:wps="http://schemas.microsoft.com/office/word/2010/wordprocessingShape" mc:Ignorable="w14 w15 w16se w16cid w16 w16cex w16sdtdh wp14"><w:body><w:p w14:paraId="001C419D" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:t>#include "GameFramework/ProjectileMovementComponent.h"</w:t></w:r></w:p><w:p w14:paraId="570DCC1F" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:t>#include "EngineDefines.h"</w:t></w:r></w:p><w:p w14:paraId="475CA1EC" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:t>#include "GameFramework/DamageType.h"</w:t></w:r></w:p><w:p w14:paraId="47BCA8BC" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:t>#include "Engine/World.h"</w:t></w:r></w:p><w:p w14:paraId="2BA21182" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:t>#include "Components/PrimitiveComponent.h"</w:t></w:r></w:p><w:p w14:paraId="03868092" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:t>#include "GameFramework/WorldSettings.h"</w:t></w:r></w:p><w:p w14:paraId="59FF1A6F" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:t>#include "ProfilingDebugging/CsvProfiler.h"</w:t></w:r></w:p><w:p w14:paraId="2AA5F369" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"/><w:p w14:paraId="3B77C9E1" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:t>CSV_DECLARE_CATEGORY_MODULE_EXTERN(CORE_API, Basic);</w:t></w:r></w:p><w:p w14:paraId="7D888232" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:t>DEFINE_LOG_CATEGORY_STATIC(LogProjectileMovement, Log, All);</w:t></w:r></w:p><w:p w14:paraId="78F7A09C" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"/><w:p w14:paraId="4ED988F7" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:t>const float UProjectileMovementComponent::MIN_TICK_TIME = 1e-6f;</w:t></w:r></w:p><w:p w14:paraId="0A685528" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"/><w:p w14:paraId="5F97A8CF" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:t>UProjectileMovementComponent::UProjectileMovementComponent(const FObjectInitializer&amp; ObjectInitializer)</w:t></w:r></w:p><w:p w14:paraId="5833FFC3" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>: Super(ObjectInitializer)</w:t></w:r></w:p><w:p w14:paraId="5DE7D1A0" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:t>{</w:t></w:r></w:p><w:p w14:paraId="2161D5A5" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>bUpdateOnlyIfRendered = false;</w:t></w:r></w:p><w:p w14:paraId="414DF1B5" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>bInitialVelocityInLocalSpace = true;</w:t></w:r></w:p><w:p w14:paraId="663E93A1" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>bForceSubStepping = false;</w:t></w:r></w:p><w:p w14:paraId="09B27064" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>bSimulationEnabled = true;</w:t></w:r></w:p><w:p w14:paraId="1D8E6B32" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>bSweepCollision = true;</w:t></w:r></w:p><w:p w14:paraId="7BB31FD9" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>bInterpMovement = false;</w:t></w:r></w:p><w:p w14:paraId="21D9BB00" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>bInterpRotation = false;</w:t></w:r></w:p><w:p w14:paraId="38E7A985" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>bInterpolationComplete = true;</w:t></w:r></w:p><w:p w14:paraId="2A5F27D6" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>InterpLocationTime = 0.100f;</w:t></w:r></w:p><w:p w14:paraId="1F881263" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>InterpRotationTime = 0.050f;</w:t></w:r></w:p><w:p w14:paraId="42362B0B" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>InterpLocationMaxLagDistance = 300.0f;</w:t></w:r></w:p><w:p w14:paraId="331E1EFC" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>InterpLocationSnapToTargetDistance = 500.0f;</w:t></w:r></w:p><w:p w14:paraId="25978928" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"/><w:p w14:paraId="417594AE" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>Velocity = FVector(1.f,0.f,0.f);</w:t></w:r></w:p><w:p w14:paraId="56D5A62F" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"/><w:p w14:paraId="5D554425" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>ProjectileGravityScale = 1.f;</w:t></w:r></w:p><w:p w14:paraId="2B242EF0" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"/><w:p w14:paraId="26296B74" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>Bounciness = 0.6f;</w:t></w:r></w:p><w:p w14:paraId="1E0C18CF" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>Friction = 0.2f;</w:t></w:r></w:p><w:p w14:paraId="5120849B" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>BounceVelocityStopSimulatingThreshold = 5.f;</w:t></w:r></w:p><w:p w14:paraId="678C0C1E" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>MinFrictionFraction = 0.0f;</w:t></w:r></w:p><w:p w14:paraId="02B9C4A0" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"/><w:p w14:paraId="2BB8ECEB" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>HomingAccelerationMagnitude = 0.f;</w:t></w:r></w:p><w:p w14:paraId="7065AF17" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"/><w:p w14:paraId="07FAED49" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>bWantsInitializeComponent = true;</w:t></w:r></w:p><w:p w14:paraId="406DBA99" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>bComponentShouldUpdatePhysicsVolume = false;</w:t></w:r></w:p><w:p w14:paraId="4C9C5872" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"/><w:p w14:paraId="24F9F797" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>MaxSimulationTimeStep = 0.05f;</w:t></w:r></w:p><w:p w14:paraId="249C1E18" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>MaxSimulationIterations = 4;</w:t></w:r></w:p><w:p w14:paraId="143B4814" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>BounceAdditionalIterations = 1;</w:t></w:r></w:p><w:p w14:paraId="4148D413" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"/><w:p w14:paraId="21FCA835" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>bBounceAngleAffectsFriction = false;</w:t></w:r></w:p><w:p w14:paraId="74CDC1C8" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>bIsSliding = false;</w:t></w:r></w:p><w:p w14:paraId="14900F45" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>PreviousHitTime = 1.f;</w:t></w:r></w:p><w:p w14:paraId="75A6760C" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>PreviousHitNormal = FVector::UpVector;</w:t></w:r></w:p><w:p w14:paraId="0E0B9C1B" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:t>}</w:t></w:r></w:p><w:p w14:paraId="6E706117" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"/><w:p w14:paraId="6849B2C7" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:t>void UProjectileMovementComponent::PostLoad()</w:t></w:r></w:p><w:p w14:paraId="6E5C6D35" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:t>{</w:t></w:r></w:p><w:p w14:paraId="6AD68030" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>Super::PostLoad();</w:t></w:r></w:p><w:p w14:paraId="4200AE0B" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"/><w:p w14:paraId="2F21B889" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>const int32 LinkerUE4Ver = GetLinkerUE4Version();</w:t></w:r></w:p><w:p w14:paraId="3BB11FC2" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"/><w:p w14:paraId="151C33F7" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>if (LinkerUE4Ver &lt; VER_UE4_REFACTOR_PROJECTILE_MOVEMENT)</w:t></w:r></w:p><w:p w14:paraId="76024014" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>{</w:t></w:r></w:p><w:p w14:paraId="4F6125B1" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:lastRenderedPageBreak/><w:tab/></w:r><w:r><w:tab/><w:t>// Old code used to treat Bounciness as Friction as well.</w:t></w:r></w:p><w:p w14:paraId="5CEFDCD4" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/><w:t>Friction = FMath::Clamp(1.f - Bounciness, 0.f, 1.f);</w:t></w:r></w:p><w:p w14:paraId="78F78F92" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"/><w:p w14:paraId="4C4BDD15" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/><w:t>// Old projectiles probably don't want to use this behavior by default.</w:t></w:r></w:p><w:p w14:paraId="156D5103" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/><w:t>bInitialVelocityInLocalSpace = false;</w:t></w:r></w:p><w:p w14:paraId="1DC9A686" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>}</w:t></w:r></w:p><w:p w14:paraId="5C0632A0" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:t>}</w:t></w:r></w:p><w:p w14:paraId="74D11D0E" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"/><w:p w14:paraId="1554A8BC" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"/><w:p w14:paraId="6BD9F781" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:t>void UProjectileMovementComponent::InitializeComponent()</w:t></w:r></w:p><w:p w14:paraId="23F90D72" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:t>{</w:t></w:r></w:p><w:p w14:paraId="24859260" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>Super::InitializeComponent();</w:t></w:r></w:p><w:p w14:paraId="334D3D0D" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"/><w:p w14:paraId="352BDCD6" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>if (Velocity.SizeSquared() &gt; 0.f)</w:t></w:r></w:p><w:p w14:paraId="6EC3D1A9" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>{</w:t></w:r></w:p><w:p w14:paraId="694F2B04" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/><w:t>// InitialSpeed &gt; 0 overrides initial velocity magnitude.</w:t></w:r></w:p><w:p w14:paraId="1D322494" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/><w:t>if (InitialSpeed &gt; 0.f)</w:t></w:r></w:p><w:p w14:paraId="27B1F95D" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/><w:t>{</w:t></w:r></w:p><w:p w14:paraId="71B83614" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>Velocity = Velocity.GetSafeNormal() * InitialSpeed;</w:t></w:r></w:p><w:p w14:paraId="42FFA08A" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/><w:t>}</w:t></w:r></w:p><w:p w14:paraId="63BEB0F6" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"/><w:p w14:paraId="2597BD9D" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/><w:t>if (bInitialVelocityInLocalSpace)</w:t></w:r></w:p><w:p w14:paraId="4951E742" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/><w:t>{</w:t></w:r></w:p><w:p w14:paraId="6621A3CB" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>SetVelocityInLocalSpace(Velocity);</w:t></w:r></w:p><w:p w14:paraId="33959443" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/><w:t>}</w:t></w:r></w:p><w:p w14:paraId="0C65AF4D" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"/><w:p w14:paraId="3402D219" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/><w:t>if (bRotationFollowsVelocity)</w:t></w:r></w:p><w:p w14:paraId="6B42DA9A" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/><w:t>{</w:t></w:r></w:p><w:p w14:paraId="7EC937C2" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>if (UpdatedComponent)</w:t></w:r></w:p><w:p w14:paraId="086D0A63" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>{</w:t></w:r></w:p><w:p w14:paraId="5A3423A6" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>UpdatedComponent-&gt;SetWorldRotation(Velocity.Rotation());</w:t></w:r></w:p><w:p w14:paraId="1D486D2D" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:lastRenderedPageBreak/><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>}</w:t></w:r></w:p><w:p w14:paraId="7E9110F7" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/><w:t>}</w:t></w:r></w:p><w:p w14:paraId="1E44C7B9" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"/><w:p w14:paraId="4FAEBE93" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/><w:t>UpdateComponentVelocity();</w:t></w:r></w:p><w:p w14:paraId="7DD1FA58" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r></w:p><w:p w14:paraId="7B7E0637" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/><w:t>if (UpdatedPrimitive &amp;&amp; UpdatedPrimitive-&gt;IsSimulatingPhysics())</w:t></w:r></w:p><w:p w14:paraId="2CC15CC0" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/><w:t>{</w:t></w:r></w:p><w:p w14:paraId="110FF377" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>UpdatedPrimitive-&gt;SetPhysicsLinearVelocity(Velocity);</w:t></w:r></w:p><w:p w14:paraId="2BFBDB2C" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/><w:t>}</w:t></w:r></w:p><w:p w14:paraId="7813F0A3" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>}</w:t></w:r></w:p><w:p w14:paraId="30038C43" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:t>}</w:t></w:r></w:p><w:p w14:paraId="1328A150" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"/><w:p w14:paraId="18C12BAB" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"/><w:p w14:paraId="45B4FC0A" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:t>void UProjectileMovementComponent::UpdateTickRegistration()</w:t></w:r></w:p><w:p w14:paraId="4B35D8F5" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:t>{</w:t></w:r></w:p><w:p w14:paraId="6BD11A39" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>if (bAutoUpdateTickRegistration)</w:t></w:r></w:p><w:p w14:paraId="4FE7FA23" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>{</w:t></w:r></w:p><w:p w14:paraId="1173ED41" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/><w:t>if (!bInterpolationComplete)</w:t></w:r></w:p><w:p w14:paraId="2761969B" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/><w:t>{</w:t></w:r></w:p><w:p w14:paraId="65DB706E" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>SetComponentTickEnabled(true);</w:t></w:r></w:p><w:p w14:paraId="2E7507AD" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/><w:t>}</w:t></w:r></w:p><w:p w14:paraId="5AB437E9" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/><w:t>else</w:t></w:r></w:p><w:p w14:paraId="4ED1CB19" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/><w:t>{</w:t></w:r></w:p><w:p w14:paraId="616955AC" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>Super::UpdateTickRegistration();</w:t></w:r></w:p><w:p w14:paraId="21088E4A" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/><w:t>}</w:t></w:r></w:p><w:p w14:paraId="60476873" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>}</w:t></w:r></w:p><w:p w14:paraId="2E7EED21" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:t>}</w:t></w:r></w:p><w:p w14:paraId="565BCD4C" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"/><w:p w14:paraId="1ADFD34C" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:t>void UProjectileMovementComponent::TickComponent(float DeltaTime, enum ELevelTick TickType, FActorComponentTickFunction *ThisTickFunction)</w:t></w:r></w:p><w:p w14:paraId="17B9D9A9" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:t>{</w:t></w:r></w:p><w:p w14:paraId="4FDFF412" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:lastRenderedPageBreak/><w:tab/><w:t>QUICK_SCOPE_CYCLE_COUNTER( STAT_ProjectileMovementComponent_TickComponent );</w:t></w:r></w:p><w:p w14:paraId="5DA341E9" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>CSV_SCOPED_TIMING_STAT(Basic, UWorld_Tick_ProjectileMovement);</w:t></w:r></w:p><w:p w14:paraId="5B246CA6" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"/><w:p w14:paraId="1F68F074" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>// Still need to finish interpolating after we've stopped simulating, so do that first.</w:t></w:r></w:p><w:p w14:paraId="17DD44F2" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>if (bInterpMovement &amp;&amp; !bInterpolationComplete)</w:t></w:r></w:p><w:p w14:paraId="1EAAB13D" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>{</w:t></w:r></w:p><w:p w14:paraId="155E22EA" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/><w:t>QUICK_SCOPE_CYCLE_COUNTER(STAT_ProjectileMovementComponent_TickInterpolation);</w:t></w:r></w:p><w:p w14:paraId="576E35DC" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/><w:t>TickInterpolation(DeltaTime);</w:t></w:r></w:p><w:p w14:paraId="3A15245F" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>}</w:t></w:r></w:p><w:p w14:paraId="5821161E" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"/><w:p w14:paraId="085A734A" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>// skip if don't want component updated when not rendered or updated component can't move</w:t></w:r></w:p><w:p w14:paraId="11059110" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>if (HasStoppedSimulation() || ShouldSkipUpdate(DeltaTime))</w:t></w:r></w:p><w:p w14:paraId="1D9AC89D" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>{</w:t></w:r></w:p><w:p w14:paraId="560EF28B" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/><w:t>return;</w:t></w:r></w:p><w:p w14:paraId="167BB197" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>}</w:t></w:r></w:p><w:p w14:paraId="2258A155" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"/><w:p w14:paraId="3D320B8D" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>Super::TickComponent(DeltaTime, TickType, ThisTickFunction);</w:t></w:r></w:p><w:p w14:paraId="43F1F99D" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"/><w:p w14:paraId="3501CA43" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>if (!IsValid(UpdatedComponent) || !bSimulationEnabled)</w:t></w:r></w:p><w:p w14:paraId="20B93818" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>{</w:t></w:r></w:p><w:p w14:paraId="7CA9BCB1" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/><w:t>return;</w:t></w:r></w:p><w:p w14:paraId="16B8D98D" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>}</w:t></w:r></w:p><w:p w14:paraId="4C7EA474" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"/><w:p w14:paraId="3177D2C1" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>AActor* ActorOwner = UpdatedComponent-&gt;GetOwner();</w:t></w:r></w:p><w:p w14:paraId="5CDCFD12" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>if ( !ActorOwner || !CheckStillInWorld() )</w:t></w:r></w:p><w:p w14:paraId="24E575E8" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>{</w:t></w:r></w:p><w:p w14:paraId="11E8FB02" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/><w:t>return;</w:t></w:r></w:p><w:p w14:paraId="31F23845" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>}</w:t></w:r></w:p><w:p w14:paraId="34657FEA" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"/><w:p w14:paraId="34E90D79" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>if (UpdatedComponent-&gt;IsSimulatingPhysics())</w:t></w:r></w:p><w:p w14:paraId="6BB6B026" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:lastRenderedPageBreak/><w:tab/><w:t>{</w:t></w:r></w:p><w:p w14:paraId="5A908FCC" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/><w:t>return;</w:t></w:r></w:p><w:p w14:paraId="76E977D2" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>}</w:t></w:r></w:p><w:p w14:paraId="75A6B703" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"/><w:p w14:paraId="17C7D485" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>float RemainingTime</w:t></w:r><w:r><w:tab/><w:t>= DeltaTime;</w:t></w:r></w:p><w:p w14:paraId="6830B17B" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>int32 NumImpacts = 0;</w:t></w:r></w:p><w:p w14:paraId="2F159A3F" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>int32 NumBounces = 0;</w:t></w:r></w:p><w:p w14:paraId="6ACB1F34" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>int32 LoopCount = 0;</w:t></w:r></w:p><w:p w14:paraId="0D78F033" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>int32 Iterations = 0;</w:t></w:r></w:p><w:p w14:paraId="73A393FD" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>FHitResult Hit(1.f);</w:t></w:r></w:p><w:p w14:paraId="65714B57" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r></w:p><w:p w14:paraId="46644151" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>while (bSimulationEnabled &amp;&amp; RemainingTime &gt;= MIN_TICK_TIME &amp;&amp; (Iterations &lt; MaxSimulationIterations) &amp;&amp; !ActorOwner-&gt;IsPendingKill() &amp;&amp; !HasStoppedSimulation())</w:t></w:r></w:p><w:p w14:paraId="0F2A8BCF" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>{</w:t></w:r></w:p><w:p w14:paraId="6E422D55" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/><w:t>LoopCount++;</w:t></w:r></w:p><w:p w14:paraId="7BD20B5D" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/><w:t>Iterations++;</w:t></w:r></w:p><w:p w14:paraId="440AE7CB" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"/><w:p w14:paraId="716B3E12" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/><w:t>// subdivide long ticks to more closely follow parabolic trajectory</w:t></w:r></w:p><w:p w14:paraId="3A3924E3" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/><w:t>const float InitialTimeRemaining = RemainingTime;</w:t></w:r></w:p><w:p w14:paraId="3D48E51E" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/><w:t>const float TimeTick = ShouldUseSubStepping() ? GetSimulationTimeStep(RemainingTime, Iterations) : RemainingTime;</w:t></w:r></w:p><w:p w14:paraId="308A82C5" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/><w:t>RemainingTime -= TimeTick;</w:t></w:r></w:p><w:p w14:paraId="4CC7955C" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r></w:p><w:p w14:paraId="1FB9C370" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/><w:t>// Logging</w:t></w:r></w:p><w:p w14:paraId="348B716F" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/><w:t>UE_LOG(LogProjectileMovement, Verbose, TEXT("Projectile %s: (Role: %d, Iteration %d, step %.3f, [%.3f / %.3f] cur/total) sim (Pos %s, Vel %s)"),</w:t></w:r></w:p><w:p w14:paraId="648B8FAE" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>*GetNameSafe(ActorOwner), (int32)ActorOwner-&gt;Role, LoopCount, TimeTick, FMath::Max(0.f, DeltaTime - InitialTimeRemaining), DeltaTime,</w:t></w:r></w:p><w:p w14:paraId="5913F6AD" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>*UpdatedComponent-&gt;GetComponentLocation().ToString(), *Velocity.ToString());</w:t></w:r></w:p><w:p w14:paraId="6DEB3D56" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"/><w:p w14:paraId="749CFB0F" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/><w:t>// Initial move state</w:t></w:r></w:p><w:p w14:paraId="4558612A" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/><w:t>Hit.Time = 1.f;</w:t></w:r></w:p><w:p w14:paraId="6A9465B1" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:lastRenderedPageBreak/><w:tab/></w:r><w:r><w:tab/><w:t>const FVector OldVelocity = Velocity;</w:t></w:r></w:p><w:p w14:paraId="5A0E248C" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/><w:t>const FVector MoveDelta = ComputeMoveDelta(OldVelocity, TimeTick);</w:t></w:r></w:p><w:p w14:paraId="6B9CE241" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/><w:t>const FQuat NewRotation = (bRotationFollowsVelocity &amp;&amp; !OldVelocity.IsNearlyZero(0.01f)) ? OldVelocity.ToOrientationQuat() : UpdatedComponent-&gt;GetComponentQuat();</w:t></w:r></w:p><w:p w14:paraId="7CA0B7D1" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"/><w:p w14:paraId="3CB8D5D2" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/><w:t>// Move the component</w:t></w:r></w:p><w:p w14:paraId="19EFADBC" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/><w:t>if (bShouldBounce)</w:t></w:r></w:p><w:p w14:paraId="1AE8D3F9" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/><w:t>{</w:t></w:r></w:p><w:p w14:paraId="7118C6A7" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>// If we can bounce, we are allowed to move out of penetrations, so use SafeMoveUpdatedComponent which does that automatically.</w:t></w:r></w:p><w:p w14:paraId="5E89F4A5" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>SafeMoveUpdatedComponent( MoveDelta, NewRotation, bSweepCollision, Hit );</w:t></w:r></w:p><w:p w14:paraId="6D7B4112" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/><w:t>}</w:t></w:r></w:p><w:p w14:paraId="2C7C354B" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/><w:t>else</w:t></w:r></w:p><w:p w14:paraId="34154B80" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/><w:t>{</w:t></w:r></w:p><w:p w14:paraId="2FFE2B64" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>// If we can't bounce, then we shouldn't adjust if initially penetrating, because that should be a blocking hit that causes a hit event and stop simulation.</w:t></w:r></w:p><w:p w14:paraId="44D37684" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>TGuardValue&lt;EMoveComponentFlags&gt; ScopedFlagRestore(MoveComponentFlags, MoveComponentFlags | MOVECOMP_NeverIgnoreBlockingOverlaps);</w:t></w:r></w:p><w:p w14:paraId="7F7681F6" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>MoveUpdatedComponent(MoveDelta, NewRotation, bSweepCollision, &amp;Hit );</w:t></w:r></w:p><w:p w14:paraId="0064BCAC" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/><w:t>}</w:t></w:r></w:p><w:p w14:paraId="33A6C12A" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r></w:p><w:p w14:paraId="1F4D4852" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/><w:t>// If we hit a trigger that destroyed us, abort.</w:t></w:r></w:p><w:p w14:paraId="72DC2E67" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/><w:t>if( ActorOwner-&gt;IsPendingKill() || HasStoppedSimulation() )</w:t></w:r></w:p><w:p w14:paraId="03ED239A" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/><w:t>{</w:t></w:r></w:p><w:p w14:paraId="3B7B79ED" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>return;</w:t></w:r></w:p><w:p w14:paraId="0B014EAB" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/><w:t>}</w:t></w:r></w:p><w:p w14:paraId="4C33BA3B" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"/><w:p w14:paraId="777C478A" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/><w:t>// Handle hit result after movement</w:t></w:r></w:p><w:p w14:paraId="75D17EBA" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/><w:t>if( !Hit.bBlockingHit )</w:t></w:r></w:p><w:p w14:paraId="00F7A0AF" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/><w:t>{</w:t></w:r></w:p><w:p w14:paraId="36DBF779" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>PreviousHitTime = 1.f;</w:t></w:r></w:p><w:p w14:paraId="2FB1A2A5" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:lastRenderedPageBreak/><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>bIsSliding = false;</w:t></w:r></w:p><w:p w14:paraId="4CB95009" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"/><w:p w14:paraId="7C4036AB" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>// Only calculate new velocity if events didn't change it during the movement update.</w:t></w:r></w:p><w:p w14:paraId="467E3050" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>if (Velocity == OldVelocity)</w:t></w:r></w:p><w:p w14:paraId="72104001" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>{</w:t></w:r></w:p><w:p w14:paraId="7474697C" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>Velocity = ComputeVelocity(Velocity, TimeTick);</w:t></w:r><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/></w:r></w:p><w:p w14:paraId="30FFB574" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>}</w:t></w:r></w:p><w:p w14:paraId="5CE10346" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"/><w:p w14:paraId="3F476FFE" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>// Logging</w:t></w:r></w:p><w:p w14:paraId="32A03BC4" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>UE_LOG(LogProjectileMovement, VeryVerbose, TEXT("Projectile %s: (Role: %d, Iteration %d, step %.3f) no hit (Pos %s, Vel %s)"),</w:t></w:r></w:p><w:p w14:paraId="48219589" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>*GetNameSafe(ActorOwner), (int32)ActorOwner-&gt;Role, LoopCount, TimeTick, *UpdatedComponent-&gt;GetComponentLocation().ToString(), *Velocity.ToString());</w:t></w:r></w:p><w:p w14:paraId="4B727F9C" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/><w:t>}</w:t></w:r></w:p><w:p w14:paraId="02967185" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/><w:t>else</w:t></w:r></w:p><w:p w14:paraId="608DB9BB" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/><w:t>{</w:t></w:r></w:p><w:p w14:paraId="381B208A" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>// Only calculate new velocity if events didn't change it during the movement update.</w:t></w:r></w:p><w:p w14:paraId="03BC244E" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>if (Velocity == OldVelocity)</w:t></w:r></w:p><w:p w14:paraId="63C97377" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>{</w:t></w:r></w:p><w:p w14:paraId="425F7FBC" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>// re-calculate end velocity for partial time</w:t></w:r></w:p><w:p w14:paraId="64B43187" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>Velocity = (Hit.Time &gt; KINDA_SMALL_NUMBER) ? ComputeVelocity(OldVelocity, TimeTick * Hit.Time) : OldVelocity;</w:t></w:r></w:p><w:p w14:paraId="6FDCE6E6" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>}</w:t></w:r></w:p><w:p w14:paraId="0893041D" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"/><w:p w14:paraId="0B117812" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>// Logging</w:t></w:r></w:p><w:p w14:paraId="38381279" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>UE_CLOG(UpdatedComponent != nullptr, LogProjectileMovement, VeryVerbose, TEXT("Projectile %s: (Role: %d, Iteration %d, step %.3f) new hit at t=%.3f: (Pos %s, Vel %s)"),</w:t></w:r></w:p><w:p w14:paraId="5A296DD1" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>*GetNameSafe(ActorOwner), (int32)ActorOwner-&gt;Role, LoopCount, TimeTick, Hit.Time, *UpdatedComponent-&gt;GetComponentLocation().ToString(), *Velocity.ToString());</w:t></w:r></w:p><w:p w14:paraId="0266DE2B" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"/><w:p w14:paraId="3F65D909" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:lastRenderedPageBreak/><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>// Handle blocking hit</w:t></w:r></w:p><w:p w14:paraId="4143F7B4" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>NumImpacts++;</w:t></w:r></w:p><w:p w14:paraId="67827F2B" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>float SubTickTimeRemaining = TimeTick * (1.f - Hit.Time);</w:t></w:r></w:p><w:p w14:paraId="1455791A" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>const EHandleBlockingHitResult HandleBlockingResult = HandleBlockingHit(Hit, TimeTick, MoveDelta, SubTickTimeRemaining);</w:t></w:r></w:p><w:p w14:paraId="2E13A42D" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>if (HandleBlockingResult == EHandleBlockingHitResult::Abort || HasStoppedSimulation())</w:t></w:r></w:p><w:p w14:paraId="428E21FF" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>{</w:t></w:r></w:p><w:p w14:paraId="61BB10B2" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>break;</w:t></w:r></w:p><w:p w14:paraId="607C6D6E" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>}</w:t></w:r></w:p><w:p w14:paraId="207EFCF7" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>else if (HandleBlockingResult == EHandleBlockingHitResult::Deflect)</w:t></w:r></w:p><w:p w14:paraId="42BB47B4" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>{</w:t></w:r></w:p><w:p w14:paraId="25BA922B" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>NumBounces++;</w:t></w:r></w:p><w:p w14:paraId="018643EE" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>HandleDeflection(Hit, OldVelocity, NumBounces, SubTickTimeRemaining);</w:t></w:r></w:p><w:p w14:paraId="16E8BFCE" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>PreviousHitTime = Hit.Time;</w:t></w:r></w:p><w:p w14:paraId="7A12FA1B" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>PreviousHitNormal = ConstrainNormalToPlane(Hit.Normal);</w:t></w:r></w:p><w:p w14:paraId="4511D2F6" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>}</w:t></w:r></w:p><w:p w14:paraId="57D6EDE0" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>else if (HandleBlockingResult == EHandleBlockingHitResult::AdvanceNextSubstep)</w:t></w:r></w:p><w:p w14:paraId="6B70814A" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>{</w:t></w:r></w:p><w:p w14:paraId="561CE8B2" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>// Reset deflection logic to ignore this hit</w:t></w:r></w:p><w:p w14:paraId="2E17D566" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>PreviousHitTime = 1.f;</w:t></w:r></w:p><w:p w14:paraId="636270A3" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>}</w:t></w:r></w:p><w:p w14:paraId="5287FB19" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>else</w:t></w:r></w:p><w:p w14:paraId="45B8DEC6" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>{</w:t></w:r></w:p><w:p w14:paraId="604732F6" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>// Unhandled EHandleBlockingHitResult</w:t></w:r></w:p><w:p w14:paraId="267AE9D3" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>checkNoEntry();</w:t></w:r></w:p><w:p w14:paraId="5469110D" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>}</w:t></w:r></w:p><w:p w14:paraId="5DC011E9" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/></w:r></w:p><w:p w14:paraId="2C7C10F4" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>// Logging</w:t></w:r></w:p><w:p w14:paraId="2EA33D67" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:lastRenderedPageBreak/><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>UE_CLOG(UpdatedComponent != nullptr, LogProjectileMovement, VeryVerbose, TEXT("Projectile %s: (Role: %d, Iteration %d, step %.3f) deflect at t=%.3f: (Pos %s, Vel %s)"),</w:t></w:r></w:p><w:p w14:paraId="47776D50" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>*GetNameSafe(ActorOwner), (int32)ActorOwner-&gt;Role, Iterations, TimeTick, Hit.Time, *UpdatedComponent-&gt;GetComponentLocation().ToString(), *Velocity.ToString());</w:t></w:r></w:p><w:p w14:paraId="4BA9682F" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/></w:r></w:p><w:p w14:paraId="3D0EAFE9" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>// Add unprocessed time after impact</w:t></w:r></w:p><w:p w14:paraId="777F5981" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>if (SubTickTimeRemaining &gt;= MIN_TICK_TIME)</w:t></w:r></w:p><w:p w14:paraId="6B999E39" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>{</w:t></w:r></w:p><w:p w14:paraId="7F57F45A" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>RemainingTime += SubTickTimeRemaining;</w:t></w:r></w:p><w:p w14:paraId="6C462671" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"/><w:p w14:paraId="5A3D9FBB" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>// A few initial impacts should possibly allow more iterations to complete more of the simulation.</w:t></w:r></w:p><w:p w14:paraId="0925AB51" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>if (NumImpacts &lt;= BounceAdditionalIterations)</w:t></w:r></w:p><w:p w14:paraId="052A08DD" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>{</w:t></w:r></w:p><w:p w14:paraId="38A2AFDF" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>Iterations--;</w:t></w:r></w:p><w:p w14:paraId="5441D095" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"/><w:p w14:paraId="7BEBC469" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>// Logging</w:t></w:r></w:p><w:p w14:paraId="1EDAD9A5" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>UE_LOG(LogProjectileMovement, Verbose, TEXT("Projectile %s: (Role: %d, Iteration %d, step %.3f) allowing extra iteration after bounce %u (t=%.3f, adding %.3f secs)"),</w:t></w:r></w:p><w:p w14:paraId="4CDC5F30" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>*GetNameSafe(ActorOwner), (int32)ActorOwner-&gt;Role, LoopCount, TimeTick, NumBounces, Hit.Time, SubTickTimeRemaining);</w:t></w:r></w:p><w:p w14:paraId="3D3CA2E2" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>}</w:t></w:r></w:p><w:p w14:paraId="5A4187E6" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>}</w:t></w:r></w:p><w:p w14:paraId="1F076D8E" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/><w:t>}</w:t></w:r></w:p><w:p w14:paraId="7B02A2BF" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>}</w:t></w:r></w:p><w:p w14:paraId="2F2A6223" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"/><w:p w14:paraId="0803B029" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>UpdateComponentVelocity();</w:t></w:r></w:p><w:p w14:paraId="1089C766" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:t>}</w:t></w:r></w:p><w:p w14:paraId="10B357DE" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"/><w:p w14:paraId="4B3EA1E2" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"/><w:p w14:paraId="3CD54AD2" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:t>bool UProjectileMovementComponent::HandleDeflection(FHitResult&amp; Hit, const FVector&amp; OldVelocity, const uint32 NumBounces, float&amp; SubTickTimeRemaining)</w:t></w:r></w:p><w:p w14:paraId="5DA42D75" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:lastRenderedPageBreak/><w:t>{</w:t></w:r></w:p><w:p w14:paraId="7E70D32B" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>const FVector Normal = ConstrainNormalToPlane(Hit.Normal);</w:t></w:r></w:p><w:p w14:paraId="49620784" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"/><w:p w14:paraId="50C72633" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>// Multiple hits within very short time period?</w:t></w:r></w:p><w:p w14:paraId="031144CD" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>const bool bMultiHit = (PreviousHitTime &lt; 1.f &amp;&amp; Hit.Time &lt;= KINDA_SMALL_NUMBER);</w:t></w:r></w:p><w:p w14:paraId="488930E2" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"/><w:p w14:paraId="522521B9" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>// if velocity still into wall (after HandleBlockingHit() had a chance to adjust), slide along wall</w:t></w:r></w:p><w:p w14:paraId="758B9BF5" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>const float DotTolerance = 0.01f;</w:t></w:r></w:p><w:p w14:paraId="07EAF979" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>bIsSliding = (bMultiHit &amp;&amp; FVector::Coincident(PreviousHitNormal, Normal)) ||</w:t></w:r></w:p><w:p w14:paraId="5C7146FC" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>((Velocity.GetSafeNormal() | Normal) &lt;= DotTolerance);</w:t></w:r></w:p><w:p w14:paraId="00BD1BF3" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"/><w:p w14:paraId="71E5EA0E" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>if (bIsSliding)</w:t></w:r></w:p><w:p w14:paraId="1C50FE72" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>{</w:t></w:r></w:p><w:p w14:paraId="6A3E14E2" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/><w:t>if (bMultiHit &amp;&amp; (PreviousHitNormal | Normal) &lt;= 0.f)</w:t></w:r></w:p><w:p w14:paraId="6AB40827" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/><w:t>{</w:t></w:r></w:p><w:p w14:paraId="17A9A925" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>//90 degree or less corner, so use cross product for direction</w:t></w:r></w:p><w:p w14:paraId="62CAB646" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>FVector NewDir = (Normal ^ PreviousHitNormal);</w:t></w:r></w:p><w:p w14:paraId="15BF805C" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>NewDir = NewDir.GetSafeNormal();</w:t></w:r></w:p><w:p w14:paraId="6EAC1698" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>Velocity = Velocity.ProjectOnToNormal(NewDir);</w:t></w:r></w:p><w:p w14:paraId="5AEBC8DE" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>if ((OldVelocity | Velocity) &lt; 0.f)</w:t></w:r></w:p><w:p w14:paraId="2285CC09" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>{</w:t></w:r></w:p><w:p w14:paraId="01F13184" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>Velocity *= -1.f;</w:t></w:r></w:p><w:p w14:paraId="1D0549EE" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>}</w:t></w:r></w:p><w:p w14:paraId="6EF1F30C" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>Velocity = ConstrainDirectionToPlane(Velocity);</w:t></w:r></w:p><w:p w14:paraId="5305FE0E" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/><w:t>}</w:t></w:r></w:p><w:p w14:paraId="27F0521A" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/><w:t>else</w:t></w:r></w:p><w:p w14:paraId="498A8251" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/><w:t>{</w:t></w:r></w:p><w:p w14:paraId="61B63338" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>//adjust to move along new wall</w:t></w:r></w:p><w:p w14:paraId="25D7C45C" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>Velocity = ComputeSlideVector(Velocity, 1.f, Normal, Hit);</w:t></w:r></w:p><w:p w14:paraId="6194CF2B" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/><w:t>}</w:t></w:r></w:p><w:p w14:paraId="24DC84FB" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"/><w:p w14:paraId="3AE65B4A" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:lastRenderedPageBreak/><w:tab/></w:r><w:r><w:tab/><w:t>// Check min velocity.</w:t></w:r></w:p><w:p w14:paraId="3248F203" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/><w:t>if (IsVelocityUnderSimulationThreshold())</w:t></w:r></w:p><w:p w14:paraId="3379258C" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/><w:t>{</w:t></w:r></w:p><w:p w14:paraId="49A23823" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>StopSimulating(Hit);</w:t></w:r></w:p><w:p w14:paraId="6F506D1B" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>return false;</w:t></w:r></w:p><w:p w14:paraId="7B768F34" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/><w:t>}</w:t></w:r></w:p><w:p w14:paraId="0E60BB66" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"/><w:p w14:paraId="3001F51F" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/><w:t>// Velocity is now parallel to the impact surface.</w:t></w:r></w:p><w:p w14:paraId="56258186" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/><w:t>if (SubTickTimeRemaining &gt; KINDA_SMALL_NUMBER)</w:t></w:r></w:p><w:p w14:paraId="77E6D4A8" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/><w:t>{</w:t></w:r></w:p><w:p w14:paraId="6D792F35" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>if (!HandleSliding(Hit, SubTickTimeRemaining))</w:t></w:r></w:p><w:p w14:paraId="5D14FFF6" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>{</w:t></w:r></w:p><w:p w14:paraId="09AC5604" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>return false;</w:t></w:r></w:p><w:p w14:paraId="336C7C2B" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>}</w:t></w:r></w:p><w:p w14:paraId="63E4579C" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/><w:t>}</w:t></w:r></w:p><w:p w14:paraId="4A01DB48" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>}</w:t></w:r></w:p><w:p w14:paraId="44462A4E" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"/><w:p w14:paraId="52D1C14F" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>return true;</w:t></w:r></w:p><w:p w14:paraId="53F1DEC5" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:t>}</w:t></w:r></w:p><w:p w14:paraId="00FC1B10" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"/><w:p w14:paraId="62A6F313" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"/><w:p w14:paraId="39C81DEF" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:t>bool UProjectileMovementComponent::HandleSliding(FHitResult&amp; Hit, float&amp; SubTickTimeRemaining)</w:t></w:r></w:p><w:p w14:paraId="4D312CB2" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:t>{</w:t></w:r></w:p><w:p w14:paraId="728C7E74" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>FHitResult InitialHit(Hit);</w:t></w:r></w:p><w:p w14:paraId="12DC2786" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>const FVector OldHitNormal = ConstrainDirectionToPlane(Hit.Normal);</w:t></w:r></w:p><w:p w14:paraId="22E4EB11" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"/><w:p w14:paraId="431AA52C" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>// Velocity is now parallel to the impact surface.</w:t></w:r></w:p><w:p w14:paraId="703F5316" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>// Perform the move now, before adding gravity/accel again, so we don't just keep hitting the surface.</w:t></w:r></w:p><w:p w14:paraId="4863657C" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>SafeMoveUpdatedComponent(Velocity * SubTickTimeRemaining, UpdatedComponent-&gt;GetComponentQuat(), bSweepCollision, Hit);</w:t></w:r></w:p><w:p w14:paraId="28390E81" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"/><w:p w14:paraId="2FEE3724" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>if (HasStoppedSimulation())</w:t></w:r></w:p><w:p w14:paraId="60C63678" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>{</w:t></w:r></w:p><w:p w14:paraId="2F2483FE" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/><w:t>return false;</w:t></w:r></w:p><w:p w14:paraId="26E87E6B" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>}</w:t></w:r></w:p><w:p w14:paraId="40468BDD" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"/><w:p w14:paraId="6D707194" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>// A second hit can deflect the velocity (through the normal bounce code), for the next iteration.</w:t></w:r></w:p><w:p w14:paraId="0DC221DF" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>if (Hit.bBlockingHit)</w:t></w:r></w:p><w:p w14:paraId="6B9A1916" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>{</w:t></w:r></w:p><w:p w14:paraId="11C16039" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/><w:t>const float TimeTick = SubTickTimeRemaining;</w:t></w:r></w:p><w:p w14:paraId="42952EAB" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/><w:t>SubTickTimeRemaining = TimeTick * (1.f - Hit.Time);</w:t></w:r></w:p><w:p w14:paraId="702C264B" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r></w:p><w:p w14:paraId="68C5F2B8" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/><w:t>if (HandleBlockingHit(Hit, TimeTick, Velocity * TimeTick, SubTickTimeRemaining) == EHandleBlockingHitResult::Abort ||</w:t></w:r></w:p><w:p w14:paraId="0CFD7735" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>HasStoppedSimulation())</w:t></w:r></w:p><w:p w14:paraId="72D2D11E" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/><w:t>{</w:t></w:r></w:p><w:p w14:paraId="1CAD53D4" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>return false;</w:t></w:r></w:p><w:p w14:paraId="40759D18" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/><w:t>}</w:t></w:r></w:p><w:p w14:paraId="7B187A95" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>}</w:t></w:r></w:p><w:p w14:paraId="7523904D" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>else</w:t></w:r></w:p><w:p w14:paraId="7063C2A5" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>{</w:t></w:r></w:p><w:p w14:paraId="3E2F2AB4" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/><w:t>// Find velocity after elapsed time</w:t></w:r></w:p><w:p w14:paraId="3286117C" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/><w:t>const FVector PostTickVelocity = ComputeVelocity(Velocity, SubTickTimeRemaining);</w:t></w:r></w:p><w:p w14:paraId="5C599092" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"/><w:p w14:paraId="730C18A9" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/><w:t>// If pointing back into surface, apply friction and acceleration.</w:t></w:r></w:p><w:p w14:paraId="321B139E" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/><w:t>const FVector Force = (PostTickVelocity - Velocity);</w:t></w:r></w:p><w:p w14:paraId="53CC5091" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/><w:t>const float ForceDotN = (Force | OldHitNormal);</w:t></w:r></w:p><w:p w14:paraId="603B9F0B" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/><w:t>if (ForceDotN &lt; 0.f)</w:t></w:r></w:p><w:p w14:paraId="6A515710" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/><w:t>{</w:t></w:r></w:p><w:p w14:paraId="4D85FA7F" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>const FVector ProjectedForce = FVector::VectorPlaneProject(Force, OldHitNormal);</w:t></w:r></w:p><w:p w14:paraId="27E7B361" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:lastRenderedPageBreak/><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>const FVector NewVelocity = Velocity + ProjectedForce;</w:t></w:r></w:p><w:p w14:paraId="7ED95086" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"/><w:p w14:paraId="71F31F09" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>const FVector FrictionForce = -NewVelocity.GetSafeNormal() * FMath::Min(-ForceDotN * Friction, NewVelocity.Size());</w:t></w:r></w:p><w:p w14:paraId="16FA8DF0" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>Velocity = ConstrainDirectionToPlane(NewVelocity + FrictionForce);</w:t></w:r></w:p><w:p w14:paraId="2523F8CC" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/><w:t>}</w:t></w:r></w:p><w:p w14:paraId="700C5DF5" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/><w:t>else</w:t></w:r></w:p><w:p w14:paraId="257D7485" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/><w:t>{</w:t></w:r></w:p><w:p w14:paraId="58EBD72D" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>Velocity = PostTickVelocity;</w:t></w:r></w:p><w:p w14:paraId="6AAAB069" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/><w:t>}</w:t></w:r></w:p><w:p w14:paraId="313EAEE5" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"/><w:p w14:paraId="4CC85F9B" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/><w:t>// Check min velocity</w:t></w:r></w:p><w:p w14:paraId="3E08A409" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/><w:t>if (IsVelocityUnderSimulationThreshold())</w:t></w:r></w:p><w:p w14:paraId="6C89C83B" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/><w:t>{</w:t></w:r></w:p><w:p w14:paraId="7CD36CE7" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>StopSimulating(InitialHit);</w:t></w:r></w:p><w:p w14:paraId="5605C24B" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>return false;</w:t></w:r></w:p><w:p w14:paraId="35FB9223" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/><w:t>}</w:t></w:r></w:p><w:p w14:paraId="0F2208DB" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"/><w:p w14:paraId="27BA7F9E" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/><w:t>SubTickTimeRemaining = 0.f;</w:t></w:r></w:p><w:p w14:paraId="38BEA3DF" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>}</w:t></w:r></w:p><w:p w14:paraId="04A162D4" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"/><w:p w14:paraId="3E591710" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>return true;</w:t></w:r></w:p><w:p w14:paraId="7AD6958E" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:t>}</w:t></w:r></w:p><w:p w14:paraId="15345323" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"/><w:p w14:paraId="13662495" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"/><w:p w14:paraId="50962AD0" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:t>void UProjectileMovementComponent::SetVelocityInLocalSpace(FVector NewVelocity)</w:t></w:r></w:p><w:p w14:paraId="2BF560BB" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:t>{</w:t></w:r></w:p><w:p w14:paraId="7F8CA060" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>if (UpdatedComponent)</w:t></w:r></w:p><w:p w14:paraId="50F176CA" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>{</w:t></w:r></w:p><w:p w14:paraId="5A66FD38" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/><w:t>Velocity = UpdatedComponent-&gt;GetComponentToWorld().TransformVectorNoScale(NewVelocity);</w:t></w:r></w:p><w:p w14:paraId="3C0D4561" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>}</w:t></w:r></w:p><w:p w14:paraId="642B73A0" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:lastRenderedPageBreak/><w:t>}</w:t></w:r></w:p><w:p w14:paraId="71FFB5B6" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"/><w:p w14:paraId="79EAF93B" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"/><w:p w14:paraId="46683ED9" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:t>FVector UProjectileMovementComponent::ComputeVelocity(FVector InitialVelocity, float DeltaTime) const</w:t></w:r></w:p><w:p w14:paraId="283FF2C2" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:t>{</w:t></w:r></w:p><w:p w14:paraId="3850D3D8" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>// v = v0 + a*t</w:t></w:r></w:p><w:p w14:paraId="0FDBD75E" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>const FVector Acceleration = ComputeAcceleration(InitialVelocity, DeltaTime);</w:t></w:r></w:p><w:p w14:paraId="7FE1F913" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>FVector NewVelocity = InitialVelocity + (Acceleration * DeltaTime);</w:t></w:r></w:p><w:p w14:paraId="1B1D5C7E" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"/><w:p w14:paraId="50721AB9" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>return LimitVelocity(NewVelocity);</w:t></w:r></w:p><w:p w14:paraId="447819F3" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:t>}</w:t></w:r></w:p><w:p w14:paraId="4E886AF3" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"/><w:p w14:paraId="627BC6CA" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"/><w:p w14:paraId="41861D68" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:t>FVector UProjectileMovementComponent::LimitVelocity(FVector NewVelocity) const</w:t></w:r></w:p><w:p w14:paraId="5122F972" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:t>{</w:t></w:r></w:p><w:p w14:paraId="45C85C03" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>const float CurrentMaxSpeed = GetMaxSpeed();</w:t></w:r></w:p><w:p w14:paraId="327EB183" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>if (CurrentMaxSpeed &gt; 0.f)</w:t></w:r></w:p><w:p w14:paraId="416CC0F0" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>{</w:t></w:r></w:p><w:p w14:paraId="04328292" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/><w:t>NewVelocity = NewVelocity.GetClampedToMaxSize(CurrentMaxSpeed);</w:t></w:r></w:p><w:p w14:paraId="20C7C42D" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>}</w:t></w:r></w:p><w:p w14:paraId="2ABDC179" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"/><w:p w14:paraId="4CB4119A" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>return ConstrainDirectionToPlane(NewVelocity);</w:t></w:r></w:p><w:p w14:paraId="33142833" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:t>}</w:t></w:r></w:p><w:p w14:paraId="2756EB8B" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"/><w:p w14:paraId="4C97041E" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:t>FVector UProjectileMovementComponent::ComputeMoveDelta(const FVector&amp; InVelocity, float DeltaTime) const</w:t></w:r></w:p><w:p w14:paraId="5885DDD2" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:t>{</w:t></w:r></w:p><w:p w14:paraId="229BA2D9" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>// Velocity Verlet integration (http://en.wikipedia.org/wiki/Verlet_integration#Velocity_Verlet)</w:t></w:r></w:p><w:p w14:paraId="47C32557" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>// The addition of p0 is done outside this method, we are just computing the delta.</w:t></w:r></w:p><w:p w14:paraId="247C5186" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>// p = p0 + v0*t + 1/2*a*t^2</w:t></w:r></w:p><w:p w14:paraId="50505021" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"/><w:p w14:paraId="341EE2A6" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>// We use ComputeVelocity() here to infer the acceleration, to make it easier to apply custom velocities.</w:t></w:r></w:p><w:p w14:paraId="1FE9B9EC" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>// p = p0 + v0*t + 1/2*((v1-v0)/t)*t^2</w:t></w:r></w:p><w:p w14:paraId="648E4E60" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>// p = p0 + v0*t + 1/2*((v1-v0))*t</w:t></w:r></w:p><w:p w14:paraId="4261A931" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"/><w:p w14:paraId="37A4A15B" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>const FVector NewVelocity = ComputeVelocity(InVelocity, DeltaTime);</w:t></w:r></w:p><w:p w14:paraId="41CEF0C2" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>const FVector Delta = (InVelocity * DeltaTime) + (NewVelocity - InVelocity) * (0.5f * DeltaTime);</w:t></w:r></w:p><w:p w14:paraId="3AF70E01" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>return Delta;</w:t></w:r></w:p><w:p w14:paraId="32E119CD" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:t>}</w:t></w:r></w:p><w:p w14:paraId="00A7945C" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"/><w:p w14:paraId="37F33A74" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:t>FVector UProjectileMovementComponent::ComputeAcceleration(const FVector&amp; InVelocity, float DeltaTime) const</w:t></w:r></w:p><w:p w14:paraId="0916545A" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:t>{</w:t></w:r></w:p><w:p w14:paraId="38AEC854" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>FVector Acceleration(FVector::ZeroVector);</w:t></w:r></w:p><w:p w14:paraId="24480ADF" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"/><w:p w14:paraId="7AD5C401" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>Acceleration.Z += GetGravityZ();</w:t></w:r></w:p><w:p w14:paraId="75CD6700" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"/><w:p w14:paraId="63F568F4" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>if (bIsHomingProjectile &amp;&amp; HomingTargetComponent.IsValid())</w:t></w:r></w:p><w:p w14:paraId="58C83F84" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>{</w:t></w:r></w:p><w:p w14:paraId="153993DB" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/><w:t>Acceleration += ComputeHomingAcceleration(InVelocity, DeltaTime);</w:t></w:r></w:p><w:p w14:paraId="5CE9F76C" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>}</w:t></w:r></w:p><w:p w14:paraId="16C5D349" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"/><w:p w14:paraId="3E476452" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>return Acceleration;</w:t></w:r></w:p><w:p w14:paraId="53E07E98" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:t>}</w:t></w:r></w:p><w:p w14:paraId="66658121" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"/><w:p w14:paraId="5F17CF1D" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:t>// Allow the projectile to track towards its homing target.</w:t></w:r></w:p><w:p w14:paraId="2F717C9A" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:t>FVector UProjectileMovementComponent::ComputeHomingAcceleration(const FVector&amp; InVelocity, float DeltaTime) const</w:t></w:r></w:p><w:p w14:paraId="2FC5FD75" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:t>{</w:t></w:r></w:p><w:p w14:paraId="59993F5A" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>FVector HomingAcceleration = ((HomingTargetComponent-&gt;GetComponentLocation() - UpdatedComponent-&gt;GetComponentLocation()).GetSafeNormal() * HomingAccelerationMagnitude);</w:t></w:r></w:p><w:p w14:paraId="67205555" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:lastRenderedPageBreak/><w:tab/><w:t>return HomingAcceleration;</w:t></w:r></w:p><w:p w14:paraId="5E767E76" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:t>}</w:t></w:r></w:p><w:p w14:paraId="02DE53E1" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"/><w:p w14:paraId="26449E81" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"/><w:p w14:paraId="31818472" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:t>float UProjectileMovementComponent::GetGravityZ() const</w:t></w:r></w:p><w:p w14:paraId="50C2E221" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:t>{</w:t></w:r></w:p><w:p w14:paraId="5F69E839" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>// TODO: apply buoyancy if in water</w:t></w:r></w:p><w:p w14:paraId="7CFEC38C" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>return ShouldApplyGravity() ? Super::GetGravityZ() * ProjectileGravityScale : 0.f;</w:t></w:r></w:p><w:p w14:paraId="54A0C0D4" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:t>}</w:t></w:r></w:p><w:p w14:paraId="36125F4E" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"/><w:p w14:paraId="79DF0874" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"/><w:p w14:paraId="7C54312A" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:t>void UProjectileMovementComponent::StopSimulating(const FHitResult&amp; HitResult)</w:t></w:r></w:p><w:p w14:paraId="44EF0F2B" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:t>{</w:t></w:r></w:p><w:p w14:paraId="2225C8A7" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>Velocity = FVector::ZeroVector;</w:t></w:r></w:p><w:p w14:paraId="1E8F74F4" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>UpdateComponentVelocity();</w:t></w:r></w:p><w:p w14:paraId="008676A8" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>SetUpdatedComponent(NULL);</w:t></w:r></w:p><w:p w14:paraId="4182BF7B" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>OnProjectileStop.Broadcast(HitResult);</w:t></w:r></w:p><w:p w14:paraId="4FF8B138" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:t>}</w:t></w:r></w:p><w:p w14:paraId="12B386FD" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"/><w:p w14:paraId="0C4E62FE" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"/><w:p w14:paraId="36385DE6" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:t>UProjectileMovementComponent::EHandleBlockingHitResult UProjectileMovementComponent::HandleBlockingHit(const FHitResult&amp; Hit, float TimeTick, const FVector&amp; MoveDelta, float&amp; SubTickTimeRemaining)</w:t></w:r></w:p><w:p w14:paraId="2B77202A" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:t>{</w:t></w:r></w:p><w:p w14:paraId="1419BC68" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>AActor* ActorOwner = UpdatedComponent ? UpdatedComponent-&gt;GetOwner() : NULL;</w:t></w:r></w:p><w:p w14:paraId="3A5DB0C2" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>if (!CheckStillInWorld() || !ActorOwner || ActorOwner-&gt;IsPendingKill())</w:t></w:r></w:p><w:p w14:paraId="3752C730" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>{</w:t></w:r></w:p><w:p w14:paraId="7DB04590" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/><w:t>return EHandleBlockingHitResult::Abort;</w:t></w:r></w:p><w:p w14:paraId="6E69B04D" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>}</w:t></w:r></w:p><w:p w14:paraId="679D7813" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r></w:p><w:p w14:paraId="1F1465B8" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>HandleImpact(Hit, TimeTick, MoveDelta);</w:t></w:r></w:p><w:p w14:paraId="6C8EFE23" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r></w:p><w:p w14:paraId="44B86AB1" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:lastRenderedPageBreak/><w:tab/><w:t>if (ActorOwner-&gt;IsPendingKill() || HasStoppedSimulation())</w:t></w:r></w:p><w:p w14:paraId="71E1EA61" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>{</w:t></w:r></w:p><w:p w14:paraId="02E98287" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/><w:t>return EHandleBlockingHitResult::Abort;</w:t></w:r></w:p><w:p w14:paraId="53412F1D" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>}</w:t></w:r></w:p><w:p w14:paraId="06B93C9D" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"/><w:p w14:paraId="0B570BAF" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>if (Hit.bStartPenetrating)</w:t></w:r></w:p><w:p w14:paraId="2567F857" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>{</w:t></w:r></w:p><w:p w14:paraId="20AEEB30" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/><w:t>UE_LOG(LogProjectileMovement, Verbose, TEXT("Projectile %s is stuck inside %s.%s!"), *GetNameSafe(ActorOwner), *GetNameSafe(Hit.GetActor()), *GetNameSafe(Hit.GetComponent()));</w:t></w:r></w:p><w:p w14:paraId="71815226" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/><w:t>return EHandleBlockingHitResult::Abort;</w:t></w:r></w:p><w:p w14:paraId="0939611D" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>}</w:t></w:r></w:p><w:p w14:paraId="794F38D3" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"/><w:p w14:paraId="6F43E5B2" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>SubTickTimeRemaining = TimeTick * (1.f - Hit.Time);</w:t></w:r></w:p><w:p w14:paraId="1ACFBF00" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>return EHandleBlockingHitResult::Deflect;</w:t></w:r></w:p><w:p w14:paraId="2EDF14AE" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:t>}</w:t></w:r></w:p><w:p w14:paraId="3F291B19" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:t xml:space="preserve"> </w:t></w:r></w:p><w:p w14:paraId="2701574A" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:t>FVector UProjectileMovementComponent::ComputeBounceResult(const FHitResult&amp; Hit, float TimeSlice, const FVector&amp; MoveDelta)</w:t></w:r></w:p><w:p w14:paraId="797E771D" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:t>{</w:t></w:r></w:p><w:p w14:paraId="03AC8D73" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>FVector TempVelocity = Velocity;</w:t></w:r></w:p><w:p w14:paraId="0DBB1646" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>const FVector Normal = ConstrainNormalToPlane(Hit.Normal);</w:t></w:r></w:p><w:p w14:paraId="5D523652" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>const float VDotNormal = (TempVelocity | Normal);</w:t></w:r></w:p><w:p w14:paraId="35FADF27" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"/><w:p w14:paraId="744F9C34" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>// Only if velocity is opposed by normal or parallel</w:t></w:r></w:p><w:p w14:paraId="2D286A35" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>if (VDotNormal &lt;= 0.f)</w:t></w:r></w:p><w:p w14:paraId="027F3BB7" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>{</w:t></w:r></w:p><w:p w14:paraId="66228164" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/><w:t>// Project velocity onto normal in reflected direction.</w:t></w:r></w:p><w:p w14:paraId="54CAD616" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/><w:t>const FVector ProjectedNormal = Normal * -VDotNormal;</w:t></w:r></w:p><w:p w14:paraId="0483E509" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"/><w:p w14:paraId="52F631FB" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/><w:t>// Point velocity in direction parallel to surface</w:t></w:r></w:p><w:p w14:paraId="49E84E5D" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/><w:t>TempVelocity += ProjectedNormal;</w:t></w:r></w:p><w:p w14:paraId="70131A00" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"/><w:p w14:paraId="27D97880" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/><w:t>// Only tangential velocity should be affected by friction.</w:t></w:r></w:p><w:p w14:paraId="5CF07BC6" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/><w:t>const float ScaledFriction = (bBounceAngleAffectsFriction || bIsSliding) ? FMath::Clamp(-VDotNormal / TempVelocity.Size(), MinFrictionFraction, 1.f) * Friction : Friction;</w:t></w:r></w:p><w:p w14:paraId="10C93A64" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/><w:t>TempVelocity *= FMath::Clamp(1.f - ScaledFriction, 0.f, 1.f);</w:t></w:r></w:p><w:p w14:paraId="12D1D18B" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"/><w:p w14:paraId="1660725A" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/><w:t>// Coefficient of restitution only applies perpendicular to impact.</w:t></w:r></w:p><w:p w14:paraId="0D0FAAA9" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/><w:t>TempVelocity += (ProjectedNormal * FMath::Max(Bounciness, 0.f));</w:t></w:r></w:p><w:p w14:paraId="2D12BF35" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"/><w:p w14:paraId="433E155E" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/><w:t>// Bounciness could cause us to exceed max speed.</w:t></w:r></w:p><w:p w14:paraId="3FC68B12" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/><w:t>TempVelocity = LimitVelocity(TempVelocity);</w:t></w:r></w:p><w:p w14:paraId="3ED1F5CD" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>}</w:t></w:r></w:p><w:p w14:paraId="17CF7F29" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"/><w:p w14:paraId="0E4DF887" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>return TempVelocity;</w:t></w:r></w:p><w:p w14:paraId="60440219" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:t>}</w:t></w:r></w:p><w:p w14:paraId="2C11559F" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"/><w:p w14:paraId="300E74C0" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:t>void UProjectileMovementComponent::HandleImpact(const FHitResult&amp; Hit, float TimeSlice, const FVector&amp; MoveDelta)</w:t></w:r></w:p><w:p w14:paraId="35A1C83C" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:t>{</w:t></w:r></w:p><w:p w14:paraId="1A8B8183" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>bool bStopSimulating = false;</w:t></w:r></w:p><w:p w14:paraId="74F43EA7" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"/><w:p w14:paraId="5914721F" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>if (bShouldBounce)</w:t></w:r></w:p><w:p w14:paraId="006AE702" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>{</w:t></w:r></w:p><w:p w14:paraId="202CDFBE" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/><w:t>const FVector OldVelocity = Velocity;</w:t></w:r></w:p><w:p w14:paraId="74902F59" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/><w:t>Velocity = ComputeBounceResult(Hit, TimeSlice, MoveDelta);</w:t></w:r></w:p><w:p w14:paraId="5A755EEE" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"/><w:p w14:paraId="63C7C0C7" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/><w:t>// Trigger bounce events</w:t></w:r></w:p><w:p w14:paraId="013B76DA" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/><w:t>OnProjectileBounce.Broadcast(Hit, OldVelocity);</w:t></w:r></w:p><w:p w14:paraId="614B3387" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"/><w:p w14:paraId="1D04B3F0" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/><w:t>// Event may modify velocity or threshold, so check velocity threshold now.</w:t></w:r></w:p><w:p w14:paraId="5877C0B9" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/><w:t>Velocity = LimitVelocity(Velocity);</w:t></w:r></w:p><w:p w14:paraId="05295E70" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/><w:t>if (IsVelocityUnderSimulationThreshold())</w:t></w:r></w:p><w:p w14:paraId="1F18B160" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:lastRenderedPageBreak/><w:tab/></w:r><w:r><w:tab/><w:t>{</w:t></w:r></w:p><w:p w14:paraId="11597CAE" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>bStopSimulating = true;</w:t></w:r></w:p><w:p w14:paraId="3110D9A8" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/><w:t>}</w:t></w:r></w:p><w:p w14:paraId="6E7ACF94" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>}</w:t></w:r></w:p><w:p w14:paraId="787A60E4" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>else</w:t></w:r></w:p><w:p w14:paraId="09E3FC0C" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>{</w:t></w:r></w:p><w:p w14:paraId="0A491D86" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/><w:t>bStopSimulating = true;</w:t></w:r></w:p><w:p w14:paraId="31FE43E5" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>}</w:t></w:r></w:p><w:p w14:paraId="027F7419" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"/><w:p w14:paraId="6E9596A1" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"/><w:p w14:paraId="7BC09D7E" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>if (bStopSimulating)</w:t></w:r></w:p><w:p w14:paraId="2766D70C" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>{</w:t></w:r></w:p><w:p w14:paraId="2F54ACF8" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/><w:t>StopSimulating(Hit);</w:t></w:r></w:p><w:p w14:paraId="5E7C761E" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>}</w:t></w:r></w:p><w:p w14:paraId="67CC3670" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:t>}</w:t></w:r></w:p><w:p w14:paraId="205142DA" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"/><w:p w14:paraId="687E68B4" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:t>bool UProjectileMovementComponent::CheckStillInWorld()</w:t></w:r></w:p><w:p w14:paraId="5483B47B" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:t>{</w:t></w:r></w:p><w:p w14:paraId="5BAFAC85" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>if ( !UpdatedComponent )</w:t></w:r></w:p><w:p w14:paraId="7D7A6259" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>{</w:t></w:r></w:p><w:p w14:paraId="5B1BF015" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/><w:t>return false;</w:t></w:r></w:p><w:p w14:paraId="59D64A4A" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>}</w:t></w:r></w:p><w:p w14:paraId="0CECF1F8" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"/><w:p w14:paraId="790B7EF2" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>const UWorld* MyWorld = GetWorld();</w:t></w:r></w:p><w:p w14:paraId="49121189" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>if (!MyWorld)</w:t></w:r></w:p><w:p w14:paraId="553785EA" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>{</w:t></w:r></w:p><w:p w14:paraId="4E195758" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/><w:t>return false;</w:t></w:r></w:p><w:p w14:paraId="3D38B60B" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>}</w:t></w:r></w:p><w:p w14:paraId="43AC8D20" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"/><w:p w14:paraId="4DAEE941" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>// check the variations of KillZ</w:t></w:r></w:p><w:p w14:paraId="4A373A47" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>AWorldSettings* WorldSettings = MyWorld-&gt;GetWorldSettings( true );</w:t></w:r></w:p><w:p w14:paraId="43C3A390" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:lastRenderedPageBreak/><w:tab/><w:t>if (!WorldSettings-&gt;bEnableWorldBoundsChecks)</w:t></w:r></w:p><w:p w14:paraId="4366A91F" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>{</w:t></w:r></w:p><w:p w14:paraId="5472F3FC" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/><w:t>return true;</w:t></w:r></w:p><w:p w14:paraId="5906EFB3" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>}</w:t></w:r></w:p><w:p w14:paraId="7A26881B" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>AActor* ActorOwner = UpdatedComponent-&gt;GetOwner();</w:t></w:r></w:p><w:p w14:paraId="33406B18" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>if (!IsValid(ActorOwner))</w:t></w:r></w:p><w:p w14:paraId="49595827" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>{</w:t></w:r></w:p><w:p w14:paraId="0397A13F" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/><w:t>return false;</w:t></w:r></w:p><w:p w14:paraId="6B118F87" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>}</w:t></w:r></w:p><w:p w14:paraId="1BBC1D3D" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>if( ActorOwner-&gt;GetActorLocation().Z &lt; WorldSettings-&gt;KillZ )</w:t></w:r></w:p><w:p w14:paraId="1ABA75EB" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>{</w:t></w:r></w:p><w:p w14:paraId="7E4A7A28" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/><w:t>UDamageType const* DmgType = WorldSettings-&gt;KillZDamageType ? WorldSettings-&gt;KillZDamageType-&gt;GetDefaultObject&lt;UDamageType&gt;() : GetDefault&lt;UDamageType&gt;();</w:t></w:r></w:p><w:p w14:paraId="0A3D3CCE" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/><w:t>ActorOwner-&gt;FellOutOfWorld(*DmgType);</w:t></w:r></w:p><w:p w14:paraId="6A527071" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/><w:t>return false;</w:t></w:r></w:p><w:p w14:paraId="77B0956F" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>}</w:t></w:r></w:p><w:p w14:paraId="4C61C33A" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>// Check if box has poked outside the world</w:t></w:r></w:p><w:p w14:paraId="5D8B644E" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>else if( UpdatedComponent &amp;&amp; UpdatedComponent-&gt;IsRegistered() )</w:t></w:r></w:p><w:p w14:paraId="4793F52E" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>{</w:t></w:r></w:p><w:p w14:paraId="1231AE52" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/><w:t>const FBox&amp;</w:t></w:r><w:r><w:tab/><w:t>Box = UpdatedComponent-&gt;Bounds.GetBox();</w:t></w:r></w:p><w:p w14:paraId="16F933A4" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/><w:t>if(</w:t></w:r><w:r><w:tab/><w:t>Box.Min.X &lt; -HALF_WORLD_MAX || Box.Max.X &gt; HALF_WORLD_MAX ||</w:t></w:r></w:p><w:p w14:paraId="713EE8BA" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>Box.Min.Y &lt; -HALF_WORLD_MAX || Box.Max.Y &gt; HALF_WORLD_MAX ||</w:t></w:r></w:p><w:p w14:paraId="157312B9" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>Box.Min.Z &lt; -HALF_WORLD_MAX || Box.Max.Z &gt; HALF_WORLD_MAX )</w:t></w:r></w:p><w:p w14:paraId="7AA1ED17" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/><w:t>{</w:t></w:r></w:p><w:p w14:paraId="311179CD" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>UE_LOG(LogProjectileMovement, Warning, TEXT("%s is outside the world bounds!"), *ActorOwner-&gt;GetName());</w:t></w:r></w:p><w:p w14:paraId="067A7D6D" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>ActorOwner-&gt;OutsideWorldBounds();</w:t></w:r></w:p><w:p w14:paraId="242A6ACF" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>// not safe to use physics or collision at this point</w:t></w:r></w:p><w:p w14:paraId="0A50411F" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>ActorOwner-&gt;SetActorEnableCollision(false);</w:t></w:r></w:p><w:p w14:paraId="43DF0566" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>FHitResult Hit(1.f);</w:t></w:r></w:p><w:p w14:paraId="5DDEEA4D" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>StopSimulating(Hit);</w:t></w:r></w:p><w:p w14:paraId="4BCF7A6B" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>return false;</w:t></w:r></w:p><w:p w14:paraId="71982AAB" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:lastRenderedPageBreak/><w:tab/></w:r><w:r><w:tab/><w:t>}</w:t></w:r></w:p><w:p w14:paraId="75A9CD1E" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>}</w:t></w:r></w:p><w:p w14:paraId="0E2EE06D" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>return true;</w:t></w:r></w:p><w:p w14:paraId="3764780F" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:t>}</w:t></w:r></w:p><w:p w14:paraId="245EB5B6" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"/><w:p w14:paraId="606DCDEC" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"/><w:p w14:paraId="6F81C986" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:t>bool UProjectileMovementComponent::ShouldUseSubStepping() const</w:t></w:r></w:p><w:p w14:paraId="611CFE02" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:t>{</w:t></w:r></w:p><w:p w14:paraId="304974F5" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>return bForceSubStepping || (GetGravityZ() != 0.f) || (bIsHomingProjectile &amp;&amp; HomingTargetComponent.IsValid());</w:t></w:r></w:p><w:p w14:paraId="0D18B9DE" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:t>}</w:t></w:r></w:p><w:p w14:paraId="089F2B7B" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"/><w:p w14:paraId="5D53B924" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"/><w:p w14:paraId="6FF28167" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:t>float UProjectileMovementComponent::GetSimulationTimeStep(float RemainingTime, int32 Iterations) const</w:t></w:r></w:p><w:p w14:paraId="455B38C4" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:t>{</w:t></w:r></w:p><w:p w14:paraId="579D83DB" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>if (RemainingTime &gt; MaxSimulationTimeStep)</w:t></w:r></w:p><w:p w14:paraId="50D83B6E" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>{</w:t></w:r></w:p><w:p w14:paraId="126CC0C2" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/><w:t>if (Iterations &lt; MaxSimulationIterations)</w:t></w:r></w:p><w:p w14:paraId="712B8520" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/><w:t>{</w:t></w:r></w:p><w:p w14:paraId="2D9F14BD" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>// Subdivide moves to be no longer than MaxSimulationTimeStep seconds</w:t></w:r></w:p><w:p w14:paraId="4AEB50BB" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>RemainingTime = FMath::Min(MaxSimulationTimeStep, RemainingTime * 0.5f);</w:t></w:r></w:p><w:p w14:paraId="4084E702" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/><w:t>}</w:t></w:r></w:p><w:p w14:paraId="459EFFBC" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/><w:t>else</w:t></w:r></w:p><w:p w14:paraId="7FC59820" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/><w:t>{</w:t></w:r></w:p><w:p w14:paraId="5A69F2BE" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>// If this is the last iteration, just use all the remaining time. This is better than cutting things short, as the simulation won't move far enough otherwise.</w:t></w:r></w:p><w:p w14:paraId="2D924B40" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>// Print a throttled warning.</w:t></w:r></w:p><w:p w14:paraId="605DA320" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:t>#if !(UE_BUILD_SHIPPING || UE_BUILD_TEST)</w:t></w:r></w:p><w:p w14:paraId="0347EA68" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>if (const UWorld* const World = GetWorld())</w:t></w:r></w:p><w:p w14:paraId="78F83AD8" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>{</w:t></w:r></w:p><w:p w14:paraId="65F670F9" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:lastRenderedPageBreak/><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>// Don't report during long hitches, we're more concerned about normal behavior just to make sure we have reasonable simulation settings.</w:t></w:r></w:p><w:p w14:paraId="3A58DEA4" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>if (World-&gt;DeltaTimeSeconds &lt; 0.20f)</w:t></w:r></w:p><w:p w14:paraId="7E621FC7" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>{</w:t></w:r></w:p><w:p w14:paraId="156A0C35" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>static uint32 s_WarningCount = 0;</w:t></w:r></w:p><w:p w14:paraId="20630AEC" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>if ((s_WarningCount++ &lt; 100) || (GFrameCounter &amp; 15) == 0)</w:t></w:r></w:p><w:p w14:paraId="12A6C605" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>{</w:t></w:r></w:p><w:p w14:paraId="23076FD5" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>UE_LOG(LogProjectileMovement, Warning, TEXT("GetSimulationTimeStep() - Max iterations %d hit while remaining time %.6f &gt; MaxSimulationTimeStep (%.3f) for '%s'"), MaxSimulationIterations, RemainingTime, MaxSimulationTimeStep, *GetPathNameSafe(UpdatedComponent));</w:t></w:r></w:p><w:p w14:paraId="6F59F2D3" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>}</w:t></w:r></w:p><w:p w14:paraId="68C58E8C" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>}</w:t></w:r></w:p><w:p w14:paraId="7DFA8179" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>}</w:t></w:r></w:p><w:p w14:paraId="0E45FF63" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:t>#endif</w:t></w:r></w:p><w:p w14:paraId="2E633954" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/><w:t>}</w:t></w:r></w:p><w:p w14:paraId="2F9B267B" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>}</w:t></w:r></w:p><w:p w14:paraId="6E2003CA" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"/><w:p w14:paraId="5D3E44AE" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>// no less than MIN_TICK_TIME (to avoid potential divide-by-zero during simulation).</w:t></w:r></w:p><w:p w14:paraId="38DDC16B" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>return FMath::Max(MIN_TICK_TIME, RemainingTime);</w:t></w:r></w:p><w:p w14:paraId="2E520987" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:t>}</w:t></w:r></w:p><w:p w14:paraId="1C4449DA" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"/><w:p w14:paraId="02D1E074" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:t>void UProjectileMovementComponent::SetInterpolatedComponent(USceneComponent* Component)</w:t></w:r></w:p><w:p w14:paraId="489C74B8" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:t>{</w:t></w:r></w:p><w:p w14:paraId="353681A0" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>if (Component == GetInterpolatedComponent())</w:t></w:r></w:p><w:p w14:paraId="0717AC3F" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>{</w:t></w:r></w:p><w:p w14:paraId="3237AD8D" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/><w:t>return;</w:t></w:r></w:p><w:p w14:paraId="1D09CAB3" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>}</w:t></w:r></w:p><w:p w14:paraId="1BB1EBA7" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"/><w:p w14:paraId="13AA291B" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>if (Component)</w:t></w:r></w:p><w:p w14:paraId="01F7B692" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>{</w:t></w:r></w:p><w:p w14:paraId="1723B6A4" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/><w:t>ResetInterpolation();</w:t></w:r></w:p><w:p w14:paraId="50225C84" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:lastRenderedPageBreak/><w:tab/></w:r><w:r><w:tab/><w:t>InterpolatedComponentPtr = Component;</w:t></w:r></w:p><w:p w14:paraId="51440181" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/><w:t>InterpInitialLocationOffset = Component-&gt;RelativeLocation;</w:t></w:r></w:p><w:p w14:paraId="38FA8BA1" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/><w:t>InterpInitialRotationOffset = Component-&gt;RelativeRotation.Quaternion();</w:t></w:r></w:p><w:p w14:paraId="7ECB6A30" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/><w:t>bInterpolationComplete = false;</w:t></w:r></w:p><w:p w14:paraId="5CB5B74F" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>}</w:t></w:r></w:p><w:p w14:paraId="424645EA" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>else</w:t></w:r></w:p><w:p w14:paraId="1CF4F149" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>{</w:t></w:r></w:p><w:p w14:paraId="7BD937BC" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/><w:t>ResetInterpolation();</w:t></w:r></w:p><w:p w14:paraId="573C2CAB" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/><w:t>InterpolatedComponentPtr = nullptr;</w:t></w:r></w:p><w:p w14:paraId="3A8A8240" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/><w:t>InterpInitialLocationOffset = FVector::ZeroVector;</w:t></w:r></w:p><w:p w14:paraId="6EB39AD4" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/><w:t>InterpInitialRotationOffset = FQuat::Identity;</w:t></w:r></w:p><w:p w14:paraId="7B479F16" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/><w:t>bInterpolationComplete = true;</w:t></w:r></w:p><w:p w14:paraId="05AF1ABD" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>}</w:t></w:r></w:p><w:p w14:paraId="29A16EFF" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:t>}</w:t></w:r></w:p><w:p w14:paraId="312BF82A" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"/><w:p w14:paraId="7EDC40B1" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:t>USceneComponent* UProjectileMovementComponent::GetInterpolatedComponent() const</w:t></w:r></w:p><w:p w14:paraId="62AAB38B" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:t>{</w:t></w:r></w:p><w:p w14:paraId="49B6D567" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>return InterpolatedComponentPtr.Get();</w:t></w:r></w:p><w:p w14:paraId="0625BE91" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:t>}</w:t></w:r></w:p><w:p w14:paraId="710C7499" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"/><w:p w14:paraId="05E20D11" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:t>void UProjectileMovementComponent::MoveInterpolationTarget(const FVector&amp; NewLocation, const FRotator&amp; NewRotation)</w:t></w:r></w:p><w:p w14:paraId="4C1C05D7" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:t>{</w:t></w:r></w:p><w:p w14:paraId="6A18D994" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>if (!UpdatedComponent)</w:t></w:r></w:p><w:p w14:paraId="565FDFC0" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>{</w:t></w:r></w:p><w:p w14:paraId="3717B28D" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/><w:t>return;</w:t></w:r></w:p><w:p w14:paraId="232990FC" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>}</w:t></w:r></w:p><w:p w14:paraId="0CABCB26" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"/><w:p w14:paraId="359D1BBD" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>bool bHandledMovement = false;</w:t></w:r></w:p><w:p w14:paraId="673DFE92" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>if (bInterpMovement)</w:t></w:r></w:p><w:p w14:paraId="505C09DE" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>{</w:t></w:r></w:p><w:p w14:paraId="75F379E3" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:lastRenderedPageBreak/><w:tab/></w:r><w:r><w:tab/><w:t>if (USceneComponent* InterpComponent = GetInterpolatedComponent())</w:t></w:r></w:p><w:p w14:paraId="1897FD6B" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/><w:t>{</w:t></w:r></w:p><w:p w14:paraId="19E1A067" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>// Avoid moving the child, it will interpolate later</w:t></w:r></w:p><w:p w14:paraId="7FD36189" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>const FRotator InterpRelativeRotation = InterpComponent-&gt;RelativeRotation;</w:t></w:r></w:p><w:p w14:paraId="6B51C7F7" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>FScopedPreventAttachedComponentMove ScopedChildNoMove(InterpComponent);</w:t></w:r></w:p><w:p w14:paraId="3B715108" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/></w:r></w:p><w:p w14:paraId="053E74F4" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>// Update interp offset</w:t></w:r></w:p><w:p w14:paraId="48196E56" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>const FVector OldLocation = UpdatedComponent-&gt;GetComponentLocation();</w:t></w:r></w:p><w:p w14:paraId="12AAADD7" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>const FVector NewToOldVector = (OldLocation - NewLocation);</w:t></w:r></w:p><w:p w14:paraId="38DBC75B" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>InterpLocationOffset += NewToOldVector;</w:t></w:r></w:p><w:p w14:paraId="627BB504" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"/><w:p w14:paraId="3EDC34D1" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>// Enforce distance limits</w:t></w:r></w:p><w:p w14:paraId="20E31204" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>if (NewToOldVector.SizeSquared() &gt; FMath::Square(InterpLocationSnapToTargetDistance))</w:t></w:r></w:p><w:p w14:paraId="4236DFFF" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>{</w:t></w:r></w:p><w:p w14:paraId="4E3C0A7C" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>InterpLocationOffset = FVector::ZeroVector;</w:t></w:r></w:p><w:p w14:paraId="706B1082" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>}</w:t></w:r></w:p><w:p w14:paraId="566546C8" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>else if (InterpLocationOffset.SizeSquared() &gt; FMath::Square(InterpLocationMaxLagDistance))</w:t></w:r></w:p><w:p w14:paraId="065954BB" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>{</w:t></w:r></w:p><w:p w14:paraId="2C1436E4" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>InterpLocationOffset = InterpLocationMaxLagDistance * InterpLocationOffset.GetSafeNormal();</w:t></w:r></w:p><w:p w14:paraId="1E8AA212" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>}</w:t></w:r></w:p><w:p w14:paraId="47784CD4" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"/><w:p w14:paraId="6D283502" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>// Handle rotation</w:t></w:r></w:p><w:p w14:paraId="3A867F52" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>if (bInterpRotation)</w:t></w:r></w:p><w:p w14:paraId="54CF2E5A" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>{</w:t></w:r></w:p><w:p w14:paraId="2B320A10" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>const FQuat OldRotation = UpdatedComponent-&gt;GetComponentQuat();</w:t></w:r></w:p><w:p w14:paraId="39B8D9B6" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>InterpRotationOffset = (NewRotation.Quaternion().Inverse() * OldRotation) * InterpRotationOffset;</w:t></w:r></w:p><w:p w14:paraId="0384E30D" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>}</w:t></w:r></w:p><w:p w14:paraId="1C072B96" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:lastRenderedPageBreak/><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>else</w:t></w:r></w:p><w:p w14:paraId="5A1FE65E" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>{</w:t></w:r></w:p><w:p w14:paraId="14D58BED" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>// If not interpolating rotation, we should allow the component to rotate.</w:t></w:r></w:p><w:p w14:paraId="5F65CC87" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>// The absolute flag will get restored by the scoped move.</w:t></w:r></w:p><w:p w14:paraId="5F64312E" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>InterpComponent-&gt;bAbsoluteRotation = false;</w:t></w:r></w:p><w:p w14:paraId="21BF9F42" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>InterpComponent-&gt;RelativeRotation = InterpRelativeRotation;</w:t></w:r></w:p><w:p w14:paraId="4F4D6FE2" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>InterpRotationOffset = FQuat::Identity;</w:t></w:r></w:p><w:p w14:paraId="68CA00D3" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>}</w:t></w:r></w:p><w:p w14:paraId="288E82AF" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"/><w:p w14:paraId="7E3839DA" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>// Move the root</w:t></w:r></w:p><w:p w14:paraId="4E106EEF" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>UpdatedComponent-&gt;SetRelativeLocationAndRotation(NewLocation, NewRotation);</w:t></w:r></w:p><w:p w14:paraId="677CA1B6" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>bHandledMovement = true;</w:t></w:r></w:p><w:p w14:paraId="3354A99F" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>bInterpolationComplete = false;</w:t></w:r></w:p><w:p w14:paraId="51FBFED2" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/><w:t>}</w:t></w:r></w:p><w:p w14:paraId="4B6B91C2" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/><w:t>else</w:t></w:r></w:p><w:p w14:paraId="78C3A6A6" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/><w:t>{</w:t></w:r></w:p><w:p w14:paraId="04DD3315" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>ResetInterpolation();</w:t></w:r></w:p><w:p w14:paraId="34FD5B03" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>bInterpolationComplete = true;</w:t></w:r></w:p><w:p w14:paraId="76994646" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/><w:t>}</w:t></w:r></w:p><w:p w14:paraId="7129D081" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>}</w:t></w:r></w:p><w:p w14:paraId="6C30E669" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r></w:p><w:p w14:paraId="2B044C99" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>if (!bHandledMovement)</w:t></w:r></w:p><w:p w14:paraId="5EFB4633" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>{</w:t></w:r></w:p><w:p w14:paraId="68C0EA57" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/><w:t>UpdatedComponent-&gt;SetRelativeLocationAndRotation(NewLocation, NewRotation);</w:t></w:r></w:p><w:p w14:paraId="4BEB0750" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>}</w:t></w:r></w:p><w:p w14:paraId="12845DA2" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:t>}</w:t></w:r></w:p><w:p w14:paraId="7B08D3F5" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"/><w:p w14:paraId="1CB8627B" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:t>void UProjectileMovementComponent::ResetInterpolation()</w:t></w:r></w:p><w:p w14:paraId="68A6C18D" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:t>{</w:t></w:r></w:p><w:p w14:paraId="605C3941" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>if (USceneComponent* InterpComponent = GetInterpolatedComponent())</w:t></w:r></w:p><w:p w14:paraId="4D0D5631" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:lastRenderedPageBreak/><w:tab/><w:t>{</w:t></w:r></w:p><w:p w14:paraId="13B07F01" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/><w:t>InterpComponent-&gt;SetRelativeLocationAndRotation(InterpInitialLocationOffset, InterpInitialRotationOffset);</w:t></w:r></w:p><w:p w14:paraId="7504FDBC" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>}</w:t></w:r></w:p><w:p w14:paraId="5B871439" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"/><w:p w14:paraId="681FC385" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>InterpLocationOffset = FVector::ZeroVector;</w:t></w:r></w:p><w:p w14:paraId="259CA5FA" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>InterpRotationOffset = FQuat::Identity;</w:t></w:r></w:p><w:p w14:paraId="05982770" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>bInterpolationComplete = true;</w:t></w:r></w:p><w:p w14:paraId="392DAF55" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:t>}</w:t></w:r></w:p><w:p w14:paraId="28AC19D6" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"/><w:p w14:paraId="6D67E4EE" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:t>void UProjectileMovementComponent::TickInterpolation(float DeltaTime)</w:t></w:r></w:p><w:p w14:paraId="45C67586" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:t>{</w:t></w:r></w:p><w:p w14:paraId="69976148" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>if (!bInterpolationComplete)</w:t></w:r></w:p><w:p w14:paraId="6F7BEB8F" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>{</w:t></w:r></w:p><w:p w14:paraId="0008B614" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/><w:t>if (USceneComponent* InterpComponent = GetInterpolatedComponent())</w:t></w:r></w:p><w:p w14:paraId="693DCABF" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/><w:t>{</w:t></w:r></w:p><w:p w14:paraId="0297E50C" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>// Smooth location. Interp faster when stopping.</w:t></w:r></w:p><w:p w14:paraId="183AAE71" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>const float ActualInterpLocationTime = Velocity.IsZero() ? 0.5f * InterpLocationTime : InterpLocationTime;</w:t></w:r></w:p><w:p w14:paraId="1E42D78F" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>if (DeltaTime &lt; ActualInterpLocationTime)</w:t></w:r></w:p><w:p w14:paraId="05543D67" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>{</w:t></w:r></w:p><w:p w14:paraId="0BC45197" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>// Slowly decay translation offset (lagged exponential smoothing)</w:t></w:r></w:p><w:p w14:paraId="057AD80A" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>InterpLocationOffset = (InterpLocationOffset * (1.f - DeltaTime / ActualInterpLocationTime));</w:t></w:r></w:p><w:p w14:paraId="54BEA45D" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>}</w:t></w:r></w:p><w:p w14:paraId="30B46E7C" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>else</w:t></w:r></w:p><w:p w14:paraId="14FF57B4" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>{</w:t></w:r></w:p><w:p w14:paraId="22D440E6" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>InterpLocationOffset = FVector::ZeroVector;</w:t></w:r></w:p><w:p w14:paraId="43CA8D59" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>}</w:t></w:r></w:p><w:p w14:paraId="4C9D6859" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"/><w:p w14:paraId="4DB8F014" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>// Smooth rotation</w:t></w:r></w:p><w:p w14:paraId="4ADF0FA0" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>if (DeltaTime &lt; InterpRotationTime &amp;&amp; bInterpRotation)</w:t></w:r></w:p><w:p w14:paraId="6A67373A" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:lastRenderedPageBreak/><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>{</w:t></w:r></w:p><w:p w14:paraId="14BE9E90" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>// Slowly decay rotation offset</w:t></w:r></w:p><w:p w14:paraId="6FD5C2C4" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>InterpRotationOffset = FQuat::FastLerp(InterpRotationOffset, FQuat::Identity, DeltaTime / InterpRotationTime).GetNormalized();</w:t></w:r></w:p><w:p w14:paraId="769DCBD7" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>}</w:t></w:r></w:p><w:p w14:paraId="1EA1F403" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>else</w:t></w:r></w:p><w:p w14:paraId="461AE923" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>{</w:t></w:r></w:p><w:p w14:paraId="116EB996" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>InterpRotationOffset = FQuat::Identity;</w:t></w:r></w:p><w:p w14:paraId="5FD2691C" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>}</w:t></w:r></w:p><w:p w14:paraId="26174B2A" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"/><w:p w14:paraId="66AB44A0" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>// Test for reaching the end</w:t></w:r></w:p><w:p w14:paraId="53749B12" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>if (InterpLocationOffset.IsNearlyZero(1e-2f) &amp;&amp; InterpRotationOffset.Equals(FQuat::Identity, 1e-5f))</w:t></w:r></w:p><w:p w14:paraId="3B6DDF6D" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>{</w:t></w:r></w:p><w:p w14:paraId="012122EE" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>InterpLocationOffset = FVector::ZeroVector;</w:t></w:r></w:p><w:p w14:paraId="6F45BF21" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>InterpRotationOffset = FQuat::Identity;</w:t></w:r></w:p><w:p w14:paraId="61C23772" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>bInterpolationComplete = true;</w:t></w:r></w:p><w:p w14:paraId="72D5E95A" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>}</w:t></w:r></w:p><w:p w14:paraId="136612D7" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"/><w:p w14:paraId="4DED805F" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>// Apply result</w:t></w:r></w:p><w:p w14:paraId="2B62942E" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>if (UpdatedComponent)</w:t></w:r></w:p><w:p w14:paraId="7FDB701D" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>{</w:t></w:r></w:p><w:p w14:paraId="20690CB6" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>const FVector NewRelTranslation = UpdatedComponent-&gt;GetComponentToWorld().InverseTransformVectorNoScale(InterpLocationOffset) + InterpInitialLocationOffset;</w:t></w:r></w:p><w:p w14:paraId="79196579" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>if (bInterpRotation)</w:t></w:r></w:p><w:p w14:paraId="5E56DE79" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>{</w:t></w:r></w:p><w:p w14:paraId="45A1AA30" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>const FQuat NewRelRotation = InterpRotationOffset * InterpInitialRotationOffset;</w:t></w:r></w:p><w:p w14:paraId="660AD24B" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>InterpComponent-&gt;SetRelativeLocationAndRotation(NewRelTranslation, NewRelRotation);</w:t></w:r></w:p><w:p w14:paraId="483285CD" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>}</w:t></w:r></w:p><w:p w14:paraId="5543DB4B" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>else</w:t></w:r></w:p><w:p w14:paraId="2740B393" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:lastRenderedPageBreak/><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>{</w:t></w:r></w:p><w:p w14:paraId="7835D462" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>InterpComponent-&gt;SetRelativeLocation(NewRelTranslation);</w:t></w:r></w:p><w:p w14:paraId="4421A677" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>}</w:t></w:r></w:p><w:p w14:paraId="59FC0E9A" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>}</w:t></w:r></w:p><w:p w14:paraId="35C90EF3" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/><w:t>}</w:t></w:r></w:p><w:p w14:paraId="7D4F546B" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/><w:t>else</w:t></w:r></w:p><w:p w14:paraId="67668C66" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/><w:t>{</w:t></w:r></w:p><w:p w14:paraId="642504E3" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>ResetInterpolation();</w:t></w:r></w:p><w:p w14:paraId="7B395E84" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/></w:r><w:r><w:tab/><w:t>bInterpolationComplete = true;</w:t></w:r></w:p><w:p w14:paraId="62EBD6ED" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/><w:t>}</w:t></w:r></w:p><w:p w14:paraId="0CA12E5F" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>}</w:t></w:r></w:p><w:p w14:paraId="1E7CB80C" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"/><w:p w14:paraId="31AD6D6A" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>// Might be done interpolating and want to disable tick</w:t></w:r></w:p><w:p w14:paraId="654B592B" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>if (bInterpolationComplete &amp;&amp; bAutoUpdateTickRegistration &amp;&amp; (UpdatedComponent == nullptr))</w:t></w:r></w:p><w:p w14:paraId="16A8A269" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>{</w:t></w:r></w:p><w:p w14:paraId="5E6B5D2D" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/></w:r><w:r><w:tab/><w:t>UpdateTickRegistration();</w:t></w:r></w:p><w:p w14:paraId="57E268AE" w14:textId="77777777" w:rsidR="00412934" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:tab/><w:t>}</w:t></w:r></w:p><w:p w14:paraId="5FE7FFF2" w14:textId="23D6B32E" w:rsidR="00BE3594" w:rsidRDefault="00412934" w:rsidP="00412934"><w:r><w:t>}</w:t></w:r></w:p><w:sectPr w:rsidR="00BE3594"><w:pgSz w:w="11906" w:h="16838"/><w:pgMar w:top="1417" w:right="1417" w:bottom="1417" w:left="1417" w:header="708" w:footer="708" w:gutter="0"/><w:cols w:space="708"/><w:docGrid w:linePitch="360"/></w:sectPr></w:body></w:document></pkg:xmlData></pkg:part><pkg:part pkg:name="/word/_rels/document.xml.rels" pkg:contentType="application/vnd.openxmlformats-package.relationships+xml" pkg:padding="256"><pkg:xmlData><Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships"><Relationship Id="rId3" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/webSettings" Target="webSettings.xml"/><Relationship Id="rId2" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/settings" Target="settings.xml"/><Relationship Id="rId1" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles" Target="styles.xml"/><Relationship Id="rId5" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme" Target="theme/theme1.xml"/><Relationship Id="rId4" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/fontTable" Target="fontTable.xml"/></Relationships></pkg:xmlData></pkg:part><pkg:part pkg:name="/word/theme/theme1.xml" pkg:contentType="application/vnd.openxmlformats-officedocument.theme+xml"><pkg:xmlData><a:theme xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" name="Motyw pakietu Office"><a:themeElements><a:clrScheme name="Pakiet Office"><a:dk1><a:sysClr val="windowText" lastClr="000000"/></a:dk1><a:lt1><a:sysClr val="window" lastClr="FFFFFF"/></a:lt1><a:dk2><a:srgbClr val="44546A"/></a:dk2><a:lt2><a:srgbClr val="E7E6E6"/></a:lt2><a:accent1><a:srgbClr val="4472C4"/></a:accent1><a:accent2><a:srgbClr val="ED7D31"/></a:accent2><a:accent3><a:srgbClr val="A5A5A5"/></a:accent3><a:accent4><a:srgbClr val="FFC000"/></a:accent4><a:accent5><a:srgbClr val="5B9BD5"/></a:accent5><a:accent6><a:srgbClr val="70AD47"/></a:accent6><a:hlink><a:srgbClr val="0563C1"/></a:hlink><a:folHlink><a:srgbClr val="954F72"/></a:folHlink></a:clrScheme><a:fontScheme name="Pakiet Office"><a:majorFont><a:latin typeface="Calibri Light" panose="020F0302020204030204"/><a:ea typeface=""/><a:cs typeface=""/><a:font script="Jpan" typeface="游ゴシック Light"/><a:font script="Hang" typeface="맑은 고딕"/><a:font script="Hans" typeface="等线 Light"/><a:font script="Hant" typeface="新細明體"/><a:font script="Arab" typeface="Times New Roman"/><a:font script="Hebr" typeface="Times New Roman"/><a:font script="Thai" typeface="Angsana New"/><a:font script="Ethi" typeface="Nyala"/><a:font script="Beng" typeface="Vrinda"/><a:font script="Gujr" typeface="Shruti"/><a:font script="Khmr" typeface="MoolBoran"/><a:font script="Knda" typeface="Tunga"/><a:font script="Guru" typeface="Raavi"/><a:font script="Cans" typeface="Euphemia"/><a:font script="Cher" typeface="Plantagenet Cherokee"/><a:font script="Yiii" typeface="Microsoft Yi Baiti"/><a:font script="Tibt" typeface="Microsoft Himalaya"/><a:font script="Thaa" typeface="MV Boli"/><a:font script="Deva" typeface="Mangal"/><a:font script="Telu" typeface="Gautami"/><a:font script="Taml" typeface="Latha"/><a:font script="Syrc" typeface="Estrangelo Edessa"/><a:font script="Orya" typeface="Kalinga"/><a:font script="Mlym" typeface="Kartika"/><a:font script="Laoo" typeface="DokChampa"/><a:font script="Sinh" typeface="Iskoola Pota"/><a:font script="Mong" typeface="Mongolian Baiti"/><a:font script="Viet" typeface="Times New Roman"/><a:font script="Uigh" typeface="Microsoft Uighur"/><a:font script="Geor" typeface="Sylfaen"/><a:font script="Armn" typeface="Arial"/><a:font script="Bugi" typeface="Leelawadee UI"/><a:font script="Bopo" typeface="Microsoft JhengHei"/><a:font script="Java" typeface="Javanese Text"/><a:font script="Lisu" typeface="Segoe UI"/><a:font script="Mymr" typeface="Myanmar Text"/><a:font script="Nkoo" typeface="Ebrima"/><a:font script="Olck" typeface="Nirmala UI"/><a:font script="Osma" typeface="Ebrima"/><a:font script="Phag" typeface="Phagspa"/><a:font script="Syrn" typeface="Estrangelo Edessa"/><a:font script="Syrj" typeface="Estrangelo Edessa"/><a:font script="Syre" typeface="Estrangelo Edessa"/><a:font script="Sora" typeface="Nirmala UI"/><a:font script="Tale" typeface="Microsoft Tai Le"/><a:font script="Talu" typeface="Microsoft New Tai Lue"/><a:font script="Tfng" typeface="Ebrima"/></a:majorFont><a:minorFont><a:latin typeface="Calibri" panose="020F0502020204030204"/><a:ea typeface=""/><a:cs typeface=""/><a:font script="Jpan" typeface="游明朝"/><a:font script="Hang" typeface="맑은 고딕"/><a:font script="Hans" typeface="等线"/><a:font script="Hant" typeface="新細明體"/><a:font script="Arab" typeface="Arial"/><a:font script="Hebr" typeface="Arial"/><a:font script="Thai" typeface="Cordia New"/><a:font script="Ethi" typeface="Nyala"/><a:font script="Beng" typeface="Vrinda"/><a:font script="Gujr" typeface="Shruti"/><a:font script="Khmr" typeface="DaunPenh"/><a:font script="Knda" typeface="Tunga"/><a:font script="Guru" typeface="Raavi"/><a:font script="Cans" typeface="Euphemia"/><a:font script="Cher" typeface="Plantagenet Cherokee"/><a:font script="Yiii" typeface="Microsoft Yi Baiti"/><a:font script="Tibt" typeface="Microsoft Himalaya"/><a:font script="Thaa" typeface="MV Boli"/><a:font script="Deva" typeface="Mangal"/><a:font script="Telu" typeface="Gautami"/><a:font script="Taml" typeface="Latha"/><a:font script="Syrc" typeface="Estrangelo Edessa"/><a:font script="Orya" typeface="Kalinga"/><a:font script="Mlym" typeface="Kartika"/><a:font script="Laoo" typeface="DokChampa"/><a:font script="Sinh" typeface="Iskoola Pota"/><a:font script="Mong" typeface="Mongolian Baiti"/><a:font script="Viet" typeface="Arial"/><a:font script="Uigh" typeface="Microsoft Uighur"/><a:font script="Geor" typeface="Sylfaen"/><a:font script="Armn" typeface="Arial"/><a:font script="Bugi" typeface="Leelawadee UI"/><a:font script="Bopo" typeface="Microsoft JhengHei"/><a:font script="Java" typeface="Javanese Text"/><a:font script="Lisu" typeface="Segoe UI"/><a:font script="Mymr" typeface="Myanmar Text"/><a:font script="Nkoo" typeface="Ebrima"/><a:font script="Olck" typeface="Nirmala UI"/><a:font script="Osma" typeface="Ebrima"/><a:font script="Phag" typeface="Phagspa"/><a:font script="Syrn" typeface="Estrangelo Edessa"/><a:font script="Syrj" typeface="Estrangelo Edessa"/><a:font script="Syre" typeface="Estrangelo Edessa"/><a:font script="Sora" typeface="Nirmala UI"/><a:font script="Tale" typeface="Microsoft Tai Le"/><a:font script="Talu" typeface="Microsoft New Tai Lue"/><a:font script="Tfng" typeface="Ebrima"/></a:minorFont></a:fontScheme><a:fmtScheme name="Pakiet Office"><a:fillStyleLst><a:solidFill><a:schemeClr val="phClr"/></a:solidFill><a:gradFill rotWithShape="1"><a:gsLst><a:gs pos="0"><a:schemeClr val="phClr"><a:lumMod val="110000"/><a:satMod val="105000"/><a:tint val="67000"/></a:schemeClr></a:gs><a:gs pos="50000"><a:schemeClr val="phClr"><a:lumMod val="105000"/><a:satMod val="103000"/><a:tint val="73000"/></a:schemeClr></a:gs><a:gs pos="100000"><a:schemeClr val="phClr"><a:lumMod val="105000"/><a:satMod val="109000"/><a:tint val="81000"/></a:schemeClr></a:gs></a:gsLst><a:lin ang="5400000" scaled="0"/></a:gradFill><a:gradFill rotWithShape="1"><a:gsLst><a:gs pos="0"><a:schemeClr val="phClr"><a:satMod val="103000"/><a:lumMod val="102000"/><a:tint val="94000"/></a:schemeClr></a:gs><a:gs pos="50000"><a:schemeClr val="phClr"><a:satMod val="110000"/><a:lumMod val="100000"/><a:shade val="100000"/></a:schemeClr></a:gs><a:gs pos="100000"><a:schemeClr val="phClr"><a:lumMod val="99000"/><a:satMod val="120000"/><a:shade val="78000"/></a:schemeClr></a:gs></a:gsLst><a:lin ang="5400000" scaled="0"/></a:gradFill></a:fillStyleLst><a:lnStyleLst><a:ln w="6350" cap="flat" cmpd="sng" algn="ctr"><a:solidFill><a:schemeClr val="phClr"/></a:solidFill><a:prstDash val="solid"/><a:miter lim="800000"/></a:ln><a:ln w="12700" cap="flat" cmpd="sng" algn="ctr"><a:solidFill><a:schemeClr val="phClr"/></a:solidFill><a:prstDash val="solid"/><a:miter lim="800000"/></a:ln><a:ln w="19050" cap="flat" cmpd="sng" algn="ctr"><a:solidFill><a:schemeClr val="phClr"/></a:solidFill><a:prstDash val="solid"/><a:miter lim="800000"/></a:ln></a:lnStyleLst><a:effectStyleLst><a:effectStyle><a:effectLst/></a:effectStyle><a:effectStyle><a:effectLst/></a:effectStyle><a:effectStyle><a:effectLst><a:outerShdw blurRad="57150" dist="19050" dir="5400000" algn="ctr" rotWithShape="0"><a:srgbClr val="000000"><a:alpha val="63000"/></a:srgbClr></a:outerShdw></a:effectLst></a:effectStyle></a:effectStyleLst><a:bgFillStyleLst><a:solidFill><a:schemeClr val="phClr"/></a:solidFill><a:solidFill><a:schemeClr val="phClr"><a:tint val="95000"/><a:satMod val="170000"/></a:schemeClr></a:solidFill><a:gradFill rotWithShape="1"><a:gsLst><a:gs pos="0"><a:schemeClr val="phClr"><a:tint val="93000"/><a:satMod val="150000"/><a:shade val="98000"/><a:lumMod val="102000"/></a:schemeClr></a:gs><a:gs pos="50000"><a:schemeClr val="phClr"><a:tint val="98000"/><a:satMod val="130000"/><a:shade val="90000"/><a:lumMod val="103000"/></a:schemeClr></a:gs><a:gs pos="100000"><a:schemeClr val="phClr"><a:shade val="63000"/><a:satMod val="120000"/></a:schemeClr></a:gs></a:gsLst><a:lin ang="5400000" scaled="0"/></a:gradFill></a:bgFillStyleLst></a:fmtScheme></a:themeElements><a:objectDefaults/><a:extraClrSchemeLst/><a:extLst><a:ext uri="{05A4C25C-085E-4340-85A3-A5531E510DB2}"><thm15:themeFamily xmlns:thm15="http://schemas.microsoft.com/office/thememl/2012/main" name="Office Theme" id="{62F939B6-93AF-4DB8-9C6B-D6C7DFDC589F}" vid="{4A3C46E8-61CC-4603-A589-7422A47A8E4A}"/></a:ext></a:extLst></a:theme></pkg:xmlData></pkg:part><pkg:part pkg:name="/word/settings.xml" pkg:contentType="application/vnd.openxmlformats-officedocument.wordprocessingml.settings+xml"><pkg:xmlData><w:settings xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:m="http://schemas.openxmlformats.org/officeDocument/2006/math" xmlns:v="urn:schemas-microsoft-com:vml" xmlns:w10="urn:schemas-microsoft-com:office:word" xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main" xmlns:w14="http://schemas.microsoft.com/office/word/2010/wordml" xmlns:w15="http://schemas.microsoft.com/office/word/2012/wordml" xmlns:w16cex="http://schemas.microsoft.com/office/word/2018/wordml/cex" xmlns:w16cid="http://schemas.microsoft.com/office/word/2016/wordml/cid" xmlns:w16="http://schemas.microsoft.com/office/word/2018/wordml" xmlns:w16sdtdh="http://schemas.microsoft.com/office/word/2020/wordml/sdtdatahash" xmlns:w16se="http://schemas.microsoft.com/office/word/2015/wordml/symex" xmlns:sl="http://schemas.openxmlformats.org/schemaLibrary/2006/main" mc:Ignorable="w14 w15 w16se w16cid w16 w16cex w16sdtdh"><w:zoom w:percent="100"/><w:defaultTabStop w:val="708"/><w:hyphenationZone w:val="425"/><w:characterSpacingControl w:val="doNotCompress"/><w:compat><w:compatSetting w:name="compatibilityMode" w:uri="http://schemas.microsoft.com/office/word" w:val="15"/><w:compatSetting w:name="overrideTableStyleFontSizeAndJustification" w:uri="http://schemas.microsoft.com/office/word" w:val="1"/><w:compatSetting w:name="enableOpenTypeFeatures" w:uri="http://schemas.microsoft.com/office/word" w:val="1"/><w:compatSetting w:name="doNotFlipMirrorIndents" w:uri="http://schemas.microsoft.com/office/word" w:val="1"/><w:compatSetting w:name="differentiateMultirowTableHeaders" w:uri="http://schemas.microsoft.com/office/word" w:val="1"/><w:compatSetting w:name="useWord2013TrackBottomHyphenation" w:uri="http://schemas.microsoft.com/office/word" w:val="0"/></w:compat><w:rsids><w:rsidRoot w:val="00511C04"/><w:rsid w:val="00412934"/><w:rsid w:val="00511C04"/><w:rsid w:val="00BE3594"/><w:rsid w:val="00C364AE"/><w:rsid w:val="00D03859"/></w:rsids><m:mathPr><m:mathFont m:val="Cambria Math"/><m:brkBin m:val="before"/><m:brkBinSub m:val="--"/><m:smallFrac m:val="0"/><m:dispDef/><m:lMargin m:val="0"/><m:rMargin m:val="0"/><m:defJc m:val="centerGroup"/><m:wrapIndent m:val="1440"/><m:intLim m:val="subSup"/><m:naryLim m:val="undOvr"/></m:mathPr><w:themeFontLang w:val="pl-PL"/><w:clrSchemeMapping w:bg1="light1" w:t1="dark1" w:bg2="light2" w:t2="dark2" w:accent1="accent1" w:accent2="accent2" w:accent3="accent3" w:accent4="accent4" w:accent5="accent5" w:accent6="accent6" w:hyperlink="hyperlink" w:followedHyperlink="followedHyperlink"/><w:shapeDefaults><o:shapedefaults v:ext="edit" spidmax="1026"/><o:shapelayout v:ext="edit"><o:idmap v:ext="edit" data="1"/></o:shapelayout></w:shapeDefaults><w:decimalSymbol w:val=","/><w:listSeparator w:val=";"/><w15:chartTrackingRefBased/><w15:docId w15:val="{C37B2CF2-64C7-477B-AF2F-5A2CF0CC01B6}"/></w:settings></pkg:xmlData></pkg:part><pkg:part pkg:name="/word/styles.xml" pkg:contentType="application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml"><pkg:xmlData><w:styles xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main" xmlns:w14="http://schemas.microsoft.com/office/word/2010/wordml" xmlns:w15="http://schemas.microsoft.com/office/word/2012/wordml" xmlns:w16cex="http://schemas.microsoft.com/office/word/2018/wordml/cex" xmlns:w16cid="http://schemas.microsoft.com/office/word/2016/wordml/cid" xmlns:w16="http://schemas.microsoft.com/office/word/2018/wordml" xmlns:w16sdtdh="http://schemas.microsoft.com/office/word/2020/wordml/sdtdatahash" xmlns:w16se="http://schemas.microsoft.com/office/word/2015/wordml/symex" mc:Ignorable="w14 w15 w16se w16cid w16 w16cex w16sdtdh"><w:docDefaults><w:rPrDefault><w:rPr><w:rFonts w:asciiTheme="minorHAnsi" w:eastAsiaTheme="minorHAnsi" w:hAnsiTheme="minorHAnsi" w:cstheme="minorBidi"/><w:kern w:val="2"/><w:sz w:val="22"/><w:szCs w:val="22"/><w:lang w:val="pl-PL" w:eastAsia="en-US" w:bidi="ar-SA"/><w14:ligatures w14:val="standardContextual"/></w:rPr></w:rPrDefault><w:pPrDefault><w:pPr><w:spacing w:after="160" w:line="259" w:lineRule="auto"/></w:pPr></w:pPrDefault></w:docDefaults><w:latentStyles w:defLockedState="0" w:defUIPriority="99" w:defSemiHidden="0" w:defUnhideWhenUsed="0" w:defQFormat="0" w:count="376"><w:lsdException w:name="Normal" w:uiPriority="0" w:qFormat="1"/><w:lsdException w:name="heading 1" w:uiPriority="9" w:qFormat="1"/><w:lsdException w:name="heading 2" w:semiHidden="1" w:uiPriority="9" w:unhideWhenUsed="1" w:qFormat="1"/><w:lsdException w:name="heading 3" w:semiHidden="1" w:uiPriority="9" w:unhideWhenUsed="1" w:qFormat="1"/><w:lsdException w:name="heading 4" w:semiHidden="1" w:uiPriority="9" w:unhideWhenUsed="1" w:qFormat="1"/><w:lsdException w:name="heading 5" w:semiHidden="1" w:uiPriority="9" w:unhideWhenUsed="1" w:qFormat="1"/><w:lsdException w:name="heading 6" w:semiHidden="1" w:uiPriority="9" w:unhideWhenUsed="1" w:qFormat="1"/><w:lsdException w:name="heading 7" w:semiHidden="1" w:uiPriority="9" w:unhideWhenUsed="1" w:qFormat="1"/><w:lsdException w:name="heading 8" w:semiHidden="1" w:uiPriority="9" w:unhideWhenUsed="1" w:qFormat="1"/><w:lsdException w:name="heading 9" w:semiHidden="1" w:uiPriority="9" w:unhideWhenUsed="1" w:qFormat="1"/><w:lsdException w:name="index 1" w:semiHidden="1" w:unhideWhenUsed="1"/><w:lsdException w:name="index 2" w:semiHidden="1" w:unhideWhenUsed="1"/><w:lsdException w:name="index 3" w:semiHidden="1" w:unhideWhenUsed="1"/><w:lsdException w:name="index 4" w:semiHidden="1" w:unhideWhenUsed="1"/><w:lsdException w:name="index 5" w:semiHidden="1" w:unhideWhenUsed="1"/><w:lsdException w:name="index 6" w:semiHidden="1" w:unhideWhenUsed="1"/><w:lsdException w:name="index 7" w:semiHidden="1" w:unhideWhenUsed="1"/><w:lsdException w:name="index 8" w:semiHidden="1" w:unhideWhenUsed="1"/><w:lsdException w:name="index 9" w:semiHidden="1" w:unhideWhenUsed="1"/><w:lsdException w:name="toc 1" w:semiHidden="1" w:uiPriority="39" w:unhideWhenUsed="1"/><w:lsdException w:name="toc 2" w:semiHidden="1" w:uiPriority="39" w:unhideWhenUsed="1"/><w:lsdException w:name="toc 3" w:semiHidden="1" w:uiPriority="39" w:unhideWhenUsed="1"/><w:lsdException w:name="toc 4" w:semiHidden="1" w:uiPriority="39" w:unhideWhenUsed="1"/><w:lsdException w:name="toc 5" w:semiHidden="1" w:uiPriority="39" w:unhideWhenUsed="1"/><w:lsdException w:name="toc 6" w:semiHidden="1" w:uiPriority="39" w:unhideWhenUsed="1"/><w:lsdException w:name="toc 7" w:semiHidden="1" w:uiPriority="39" w:unhideWhenUsed="1"/><w:lsdException w:name="toc 8" w:semiHidden="1" w:uiPriority="39" w:unhideWhenUsed="1"/><w:lsdException w:name="toc 9" w:semiHidden="1" w:uiPriority="39" w:unhideWhenUsed="1"/><w:lsdException w:name="Normal Indent" w:semiHidden="1" w:unhideWhenUsed="1"/><w:lsdException w:name="footnote text" w:semiHidden="1" w:unhideWhenUsed="1"/><w:lsdException w:name="annotation text" w:semiHidden="1" w:unhideWhenUsed="1"/><w:lsdException w:name="header" w:semiHidden="1" w:unhideWhenUsed="1"/><w:lsdException w:name="footer" w:semiHidden="1" w:unhideWhenUsed="1"/><w:lsdException w:name="index heading" w:semiHidden="1" w:unhideWhenUsed="1"/><w:lsdException w:name="caption" w:semiHidden="1" w:uiPriority="35" w:unhideWhenUsed="1" w:qFormat="1"/><w:lsdException w:name="table of figures" w:semiHidden="1" w:unhideWhenUsed="1"/><w:lsdException w:name="envelope address" w:semiHidden="1" w:unhideWhenUsed="1"/><w:lsdException w:name="envelope return" w:semiHidden="1" w:unhideWhenUsed="1"/><w:lsdException w:name="footnote reference" w:semiHidden="1" w:unhideWhenUsed="1"/><w:lsdException w:name="annotation reference" w:semiHidden="1" w:unhideWhenUsed="1"/><w:lsdException w:name="line number" w:semiHidden="1" w:unhideWhenUsed="1"/><w:lsdException w:name="page number" w:semiHidden="1" w:unhideWhenUsed="1"/><w:lsdException w:name="endnote reference" w:semiHidden="1" w:unhideWhenUsed="1"/><w:lsdException w:name="endnote text" w:semiHidden="1" w:unhideWhenUsed="1"/><w:lsdException w:name="table of authorities" w:semiHidden="1" w:unhideWhenUsed="1"/><w:lsdException w:name="macro" w:semiHidden="1" w:unhideWhenUsed="1"/><w:lsdException w:name="toa heading" w:semiHidden="1" w:unhideWhenUsed="1"/><w:lsdException w:name="List" w:semiHidden="1" w:unhideWhenUsed="1"/><w:lsdException w:name="List Bullet" w:semiHidden="1" w:unhideWhenUsed="1"/><w:lsdException w:name="List Number" w:semiHidden="1" w:unhideWhenUsed="1"/><w:lsdException w:name="List 2" w:semiHidden="1" w:unhideWhenUsed="1"/><w:lsdException w:name="List 3" w:semiHidden="1" w:unhideWhenUsed="1"/><w:lsdException w:name="List 4" w:semiHidden="1" w:unhideWhenUsed="1"/><w:lsdException w:name="List 5" w:semiHidden="1" w:unhideWhenUsed="1"/><w:lsdException w:name="List Bullet 2" w:semiHidden="1" w:unhideWhenUsed="1"/><w:lsdException w:name="List Bullet 3" w:semiHidden="1" w:unhideWhenUsed="1"/><w:lsdException w:name="List Bullet 4" w:semiHidden="1" w:unhideWhenUsed="1"/><w:lsdException w:name="List Bullet 5" w:semiHidden="1" w:unhideWhenUsed="1"/><w:lsdException w:name="List Number 2" w:semiHidden="1" w:unhideWhenUsed="1"/><w:lsdException w:name="List Number 3" w:semiHidden="1" w:unhideWhenUsed="1"/><w:lsdException w:name="List Number 4" w:semiHidden="1" w:unhideWhenUsed="1"/><w:lsdException w:name="List Number 5" w:semiHidden="1" w:unhideWhenUsed="1"/><w:lsdException w:name="Title" w:uiPriority="10" w:qFormat="1"/><w:lsdException w:name="Closing" w:semiHidden="1" w:unhideWhenUsed="1"/><w:lsdException w:name="Signature" w:semiHidden="1" w:unhideWhenUsed="1"/><w:lsdException w:name="Default Paragraph Font" w:semiHidden="1" w:uiPriority="1" w:unhideWhenUsed="1"/><w:lsdException w:name="Body Text" w:semiHidden="1" w:unhideWhenUsed="1"/><w:lsdException w:name="Body Text Indent" w:semiHidden="1" w:unhideWhenUsed="1"/><w:lsdException w:name="List Continue" w:semiHidden="1" w:unhideWhenUsed="1"/><w:lsdException w:name="List Continue 2" w:semiHidden="1" w:unhideWhenUsed="1"/><w:lsdException w:name="List Continue 3" w:semiHidden="1" w:unhideWhenUsed="1"/><w:lsdException w:name="List Continue 4" w:semiHidden="1" w:unhideWhenUsed="1"/><w:lsdException w:name="List Continue 5" w:semiHidden="1" w:unhideWhenUsed="1"/><w:lsdException w:name="Message Header" w:semiHidden="1" w:unhideWhenUsed="1"/><w:lsdException w:name="Subtitle" w:uiPriority="11" w:qFormat="1"/><w:lsdException w:name="Salutation" w:semiHidden="1" w:unhideWhenUsed="1"/><w:lsdException w:name="Date" w:semiHidden="1" w:unhideWhenUsed="1"/><w:lsdException w:name="Body Text First Indent" w:semiHidden="1" w:unhideWhenUsed="1"/><w:lsdException w:name="Body Text First Indent 2" w:semiHidden="1" w:unhideWhenUsed="1"/><w:lsdException w:name="Note Heading" w:semiHidden="1" w:unhideWhenUsed="1"/><w:lsdException w:name="Body Text 2" w:semiHidden="1" w:unhideWhenUsed="1"/><w:lsdException w:name="Body Text 3" w:semiHidden="1" w:unhideWhenUsed="1"/><w:lsdException w:name="Body Text Indent 2" w:semiHidden="1" w:unhideWhenUsed="1"/><w:lsdException w:name="Body Text Indent 3" w:semiHidden="1" w:unhideWhenUsed="1"/><w:lsdException w:name="Block Text" w:semiHidden="1" w:unhideWhenUsed="1"/><w:lsdException w:name="Hyperlink" w:semiHidden="1" w:unhideWhenUsed="1"/><w:lsdException w:name="FollowedHyperlink" w:semiHidden="1" w:unhideWhenUsed="1"/><w:lsdException w:name="Strong" w:uiPriority="22" w:qFormat="1"/><w:lsdException w:name="Emphasis" w:uiPriority="20" w:qFormat="1"/><w:lsdException w:name="Document Map" w:semiHidden="1" w:unhideWhenUsed="1"/><w:lsdException w:name="Plain Text" w:semiHidden="1" w:unhideWhenUsed="1"/><w:lsdException w:name="E-mail Signature" w:semiHidden="1" w:unhideWhenUsed="1"/><w:lsdException w:name="HTML Top of Form" w:semiHidden="1" w:unhideWhenUsed="1"/><w:lsdException w:name="HTML Bottom of Form" w:semiHidden="1" w:unhideWhenUsed="1"/><w:lsdException w:name="Normal (Web)" w:semiHidden="1" w:unhideWhenUsed="1"/><w:lsdException w:name="HTML Acronym" w:semiHidden="1" w:unhideWhenUsed="1"/><w:lsdException w:name="HTML Address" w:semiHidden="1" w:unhideWhenUsed="1"/><w:lsdException w:name="HTML Cite" w:semiHidden="1" w:unhideWhenUsed="1"/><w:lsdException w:name="HTML Code" w:semiHidden="1" w:unhideWhenUsed="1"/><w:lsdException w:name="HTML Definition" w:semiHidden="1" w:unhideWhenUsed="1"/><w:lsdException w:name="HTML Keyboard" w:semiHidden="1" w:unhideWhenUsed="1"/><w:lsdException w:name="HTML Preformatted" w:semiHidden="1" w:unhideWhenUsed="1"/><w:lsdException w:name="HTML Sample" w:semiHidden="1" w:unhideWhenUsed="1"/><w:lsdException w:name="HTML Typewriter" w:semiHidden="1" w:unhideWhenUsed="1"/><w:lsdException w:name="HTML Variable" w:semiHidden="1" w:unhideWhenUsed="1"/><w:lsdException w:name="Normal Table" w:semiHidden="1" w:unhideWhenUsed="1"/><w:lsdException w:name="annotation subject" w:semiHidden="1" w:unhideWhenUsed="1"/><w:lsdException w:name="No List" w:semiHidden="1" w:unhideWhenUsed="1"/><w:lsdException w:name="Outline List 1" w:semiHidden="1" w:unhideWhenUsed="1"/><w:lsdException w:name="Outline List 2" w:semiHidden="1" w:unhideWhenUsed="1"/><w:lsdException w:name="Outline List 3" w:semiHidden="1" w:unhideWhenUsed="1"/><w:lsdException w:name="Table Simple 1" w:semiHidden="1" w:unhideWhenUsed="1"/><w:lsdException w:name="Table Simple 2" w:semiHidden="1" w:unhideWhenUsed="1"/><w:lsdException w:name="Table Simple 3" w:semiHidden="1" w:unhideWhenUsed="1"/><w:lsdException w:name="Table Classic 1" w:semiHidden="1" w:unhideWhenUsed="1"/><w:lsdException w:name="Table Classic 2" w:semiHidden="1" w:unhideWhenUsed="1"/><w:lsdException w:name="Table Classic 3" w:semiHidden="1" w:unhideWhenUsed="1"/><w:lsdException w:name="Table Classic 4" w:semiHidden="1" w:unhideWhenUsed="1"/><w:lsdException w:name="Table Colorful 1" w:semiHidden="1" w:unhideWhenUsed="1"/><w:lsdException w:name="Table Colorful 2" w:semiHidden="1" w:unhideWhenUsed="1"/><w:lsdException w:name="Table Colorful 3" w:semiHidden="1" w:unhideWhenUsed="1"/><w:lsdException w:name="Table Columns 1" w:semiHidden="1" w:unhideWhenUsed="1"/><w:lsdException w:name="Table Columns 2" w:semiHidden="1" w:unhideWhenUsed="1"/><w:lsdException w:name="Table Columns 3" w:semiHidden="1" w:unhideWhenUsed="1"/><w:lsdException w:name="Table Columns 4" w:semiHidden="1" w:unhideWhenUsed="1"/><w:lsdException w:name="Table Columns 5" w:semiHidden="1" w:unhideWhenUsed="1"/><w:lsdException w:name="Table Grid 1" w:semiHidden="1" w:unhideWhenUsed="1"/><w:lsdException w:name="Table Grid 2" w:semiHidden="1" w:unhideWhenUsed="1"/><w:lsdException w:name="Table Grid 3" w:semiHidden="1" w:unhideWhenUsed="1"/><w:lsdException w:name="Table Grid 4" w:semiHidden="1" w:unhideWhenUsed="1"/><w:lsdException w:name="Table Grid 5" w:semiHidden="1" w:unhideWhenUsed="1"/><w:lsdException w:name="Table Grid 6" w:semiHidden="1" w:unhideWhenUsed="1"/><w:lsdException w:name="Table Grid 7" w:semiHidden="1" w:unhideWhenUsed="1"/><w:lsdException w:name="Table Grid 8" w:semiHidden="1" w:unhideWhenUsed="1"/><w:lsdException w:name="Table List 1" w:semiHidden="1" w:unhideWhenUsed="1"/><w:lsdException w:name="Table List 2" w:semiHidden="1" w:unhideWhenUsed="1"/><w:lsdException w:name="Table List 3" w:semiHidden="1" w:unhideWhenUsed="1"/><w:lsdException w:name="Table List 4" w:semiHidden="1" w:unhideWhenUsed="1"/><w:lsdException w:name="Table List 5" w:semiHidden="1" w:unhideWhenUsed="1"/><w:lsdException w:name="Table List 6" w:semiHidden="1" w:unhideWhenUsed="1"/><w:lsdException w:name="Table List 7" w:semiHidden="1" w:unhideWhenUsed="1"/><w:lsdException w:name="Table List 8" w:semiHidden="1" w:unhideWhenUsed="1"/><w:lsdException w:name="Table 3D effects 1" w:semiHidden="1" w:unhideWhenUsed="1"/><w:lsdException w:name="Table 3D effects 2" w:semiHidden="1" w:unhideWhenUsed="1"/><w:lsdException w:name="Table 3D effects 3" w:semiHidden="1" w:unhideWhenUsed="1"/><w:lsdException w:name="Table Contemporary" w:semiHidden="1" w:unhideWhenUsed="1"/><w:lsdException w:name="Table Elegant" w:semiHidden="1" w:unhideWhenUsed="1"/><w:lsdException w:name="Table Professional" w:semiHidden="1" w:unhideWhenUsed="1"/><w:lsdException w:name="Table Subtle 1" w:semiHidden="1" w:unhideWhenUsed="1"/><w:lsdException w:name="Table Subtle 2" w:semiHidden="1" w:unhideWhenUsed="1"/><w:lsdException w:name="Table Web 1" w:semiHidden="1" w:unhideWhenUsed="1"/><w:lsdException w:name="Table Web 2" w:semiHidden="1" w:unhideWhenUsed="1"/><w:lsdException w:name="Table Web 3" w:semiHidden="1" w:unhideWhenUsed="1"/><w:lsdException w:name="Balloon Text" w:semiHidden="1" w:unhideWhenUsed="1"/><w:lsdException w:name="Table Grid" w:uiPriority="39"/><w:lsdException w:name="Table Theme" w:semiHidden="1" w:unhideWhenUsed="1"/><w:lsdException w:name="Placeholder Text" w:semiHidden="1"/><w:lsdException w:name="No Spacing" w:uiPriority="1" w:qFormat="1"/><w:lsdException w:name="Light Shading" w:uiPriority="60"/><w:lsdException w:name="Light List" w:uiPriority="61"/><w:lsdException w:name="Light Grid" w:uiPriority="62"/><w:lsdException w:name="Medium Shading 1" w:uiPriority="63"/><w:lsdException w:name="Medium Shading 2" w:uiPriority="64"/><w:lsdException w:name="Medium List 1" w:uiPriority="65"/><w:lsdException w:name="Medium List 2" w:uiPriority="66"/><w:lsdException w:name="Medium Grid 1" w:uiPriority="67"/><w:lsdException w:name="Medium Grid 2" w:uiPriority="68"/><w:lsdException w:name="Medium Grid 3" w:uiPriority="69"/><w:lsdException w:name="Dark List" w:uiPriority="70"/><w:lsdException w:name="Colorful Shading" w:uiPriority="71"/><w:lsdException w:name="Colorful List" w:uiPriority="72"/><w:lsdException w:name="Colorful Grid" w:uiPriority="73"/><w:lsdException w:name="Light Shading Accent 1" w:uiPriority="60"/><w:lsdException w:name="Light List Accent 1" w:uiPriority="61"/><w:lsdException w:name="Light Grid Accent 1" w:uiPriority="62"/><w:lsdException w:name="Medium Shading 1 Accent 1" w:uiPriority="63"/><w:lsdException w:name="Medium Shading 2 Accent 1" w:uiPriority="64"/><w:lsdException w:name="Medium List 1 Accent 1" w:uiPriority="65"/><w:lsdException w:name="Revision" w:semiHidden="1"/><w:lsdException w:name="List Paragraph" w:uiPriority="34" w:qFormat="1"/><w:lsdException w:name="Quote" w:uiPriority="29" w:qFormat="1"/><w:lsdException w:name="Intense Quote" w:uiPriority="30" w:qFormat="1"/><w:lsdException w:name="Medium List 2 Accent 1" w:uiPriority="66"/><w:lsdException w:name="Medium Grid 1 Accent 1" w:uiPriority="67"/><w:lsdException w:name="Medium Grid 2 Accent 1" w:uiPriority="68"/><w:lsdException w:name="Medium Grid 3 Accent 1" w:uiPriority="69"/><w:lsdException w:name="Dark List Accent 1" w:uiPriority="70"/><w:lsdException w:name="Colorful Shading Accent 1" w:uiPriority="71"/><w:lsdException w:name="Colorful List Accent 1" w:uiPriority="72"/><w:lsdException w:name="Colorful Grid Accent 1" w:uiPriority="73"/><w:lsdException w:name="Light Shading Accent 2" w:uiPriority="60"/><w:lsdException w:name="Light List Accent 2" w:uiPriority="61"/><w:lsdException w:name="Light Grid Accent 2" w:uiPriority="62"/><w:lsdException w:name="Medium Shading 1 Accent 2" w:uiPriority="63"/><w:lsdException w:name="Medium Shading 2 Accent 2" w:uiPriority="64"/><w:lsdException w:name="Medium List 1 Accent 2" w:uiPriority="65"/><w:lsdException w:name="Medium List 2 Accent 2" w:uiPriority="66"/><w:lsdException w:name="Medium Grid 1 Accent 2" w:uiPriority="67"/><w:lsdException w:name="Medium Grid 2 Accent 2" w:uiPriority="68"/><w:lsdException w:name="Medium Grid 3 Accent 2" w:uiPriority="69"/><w:lsdException w:name="Dark List Accent 2" w:uiPriority="70"/><w:lsdException w:name="Colorful Shading Accent 2" w:uiPriority="71"/><w:lsdException w:name="Colorful List Accent 2" w:uiPriority="72"/><w:lsdException w:name="Colorful Grid Accent 2" w:uiPriority="73"/><w:lsdException w:name="Light Shading Accent 3" w:uiPriority="60"/><w:lsdException w:name="Light List Accent 3" w:uiPriority="61"/><w:lsdException w:name="Light Grid Accent 3" w:uiPriority="62"/><w:lsdException w:name="Medium Shading 1 Accent 3" w:uiPriority="63"/><w:lsdException w:name="Medium Shading 2 Accent 3" w:uiPriority="64"/><w:lsdException w:name="Medium List 1 Accent 3" w:uiPriority="65"/><w:lsdException w:name="Medium List 2 Accent 3" w:uiPriority="66"/><w:lsdException w:name="Medium Grid 1 Accent 3" w:uiPriority="67"/><w:lsdException w:name="Medium Grid 2 Accent 3" w:uiPriority="68"/><w:lsdException w:name="Medium Grid 3 Accent 3" w:uiPriority="69"/><w:lsdException w:name="Dark List Accent 3" w:uiPriority="70"/><w:lsdException w:name="Colorful Shading Accent 3" w:uiPriority="71"/><w:lsdException w:name="Colorful List Accent 3" w:uiPriority="72"/><w:lsdException w:name="Colorful Grid Accent 3" w:uiPriority="73"/><w:lsdException w:name="Light Shading Accent 4" w:uiPriority="60"/><w:lsdException w:name="Light List Accent 4" w:uiPriority="61"/><w:lsdException w:name="Light Grid Accent 4" w:uiPriority="62"/><w:lsdException w:name="Medium Shading 1 Accent 4" w:uiPriority="63"/><w:lsdException w:name="Medium Shading 2 Accent 4" w:uiPriority="64"/><w:lsdException w:name="Medium List 1 Accent 4" w:uiPriority="65"/><w:lsdException w:name="Medium List 2 Accent 4" w:uiPriority="66"/><w:lsdException w:name="Medium Grid 1 Accent 4" w:uiPriority="67"/><w:lsdException w:name="Medium Grid 2 Accent 4" w:uiPriority="68"/><w:lsdException w:name="Medium Grid 3 Accent 4" w:uiPriority="69"/><w:lsdException w:name="Dark List Accent 4" w:uiPriority="70"/><w:lsdException w:name="Colorful Shading Accent 4" w:uiPriority="71"/><w:lsdException w:name="Colorful List Accent 4" w:uiPriority="72"/><w:lsdException w:name="Colorful Grid Accent 4" w:uiPriority="73"/><w:lsdException w:name="Light Shading Accent 5" w:uiPriority="60"/><w:lsdException w:name="Light List Accent 5" w:uiPriority="61"/><w:lsdException w:name="Light Grid Accent 5" w:uiPriority="62"/><w:lsdException w:name="Medium Shading 1 Accent 5" w:uiPriority="63"/><w:lsdException w:name="Medium Shading 2 Accent 5" w:uiPriority="64"/><w:lsdException w:name="Medium List 1 Accent 5" w:uiPriority="65"/><w:lsdException w:name="Medium List 2 Accent 5" w:uiPriority="66"/><w:lsdException w:name="Medium Grid 1 Accent 5" w:uiPriority="67"/><w:lsdException w:name="Medium Grid 2 Accent 5" w:uiPriority="68"/><w:lsdException w:name="Medium Grid 3 Accent 5" w:uiPriority="69"/><w:lsdException w:name="Dark List Accent 5" w:uiPriority="70"/><w:lsdException w:name="Colorful Shading Accent 5" w:uiPriority="71"/><w:lsdException w:name="Colorful List Accent 5" w:uiPriority="72"/><w:lsdException w:name="Colorful Grid Accent 5" w:uiPriority="73"/><w:lsdException w:name="Light Shading Accent 6" w:uiPriority="60"/><w:lsdException w:name="Light List Accent 6" w:uiPriority="61"/><w:lsdException w:name="Light Grid Accent 6" w:uiPriority="62"/><w:lsdException w:name="Medium Shading 1 Accent 6" w:uiPriority="63"/><w:lsdException w:name="Medium Shading 2 Accent 6" w:uiPriority="64"/><w:lsdException w:name="Medium List 1 Accent 6" w:uiPriority="65"/><w:lsdException w:name="Medium List 2 Accent 6" w:uiPriority="66"/><w:lsdException w:name="Medium Grid 1 Accent 6" w:uiPriority="67"/><w:lsdException w:name="Medium Grid 2 Accent 6" w:uiPriority="68"/><w:lsdException w:name="Medium Grid 3 Accent 6" w:uiPriority="69"/><w:lsdException w:name="Dark List Accent 6" w:uiPriority="70"/><w:lsdException w:name="Colorful Shading Accent 6" w:uiPriority="71"/><w:lsdException w:name="Colorful List Accent 6" w:uiPriority="72"/><w:lsdException w:name="Colorful Grid Accent 6" w:uiPriority="73"/><w:lsdException w:name="Subtle Emphasis" w:uiPriority="19" w:qFormat="1"/><w:lsdException w:name="Intense Emphasis" w:uiPriority="21" w:qFormat="1"/><w:lsdException w:name="Subtle Reference" w:uiPriority="31" w:qFormat="1"/><w:lsdException w:name="Intense Reference" w:uiPriority="32" w:qFormat="1"/><w:lsdException w:name="Book Title" w:uiPriority="33" w:qFormat="1"/><w:lsdException w:name="Bibliography" w:semiHidden="1" w:uiPriority="37" w:unhideWhenUsed="1"/><w:lsdException w:name="TOC Heading" w:semiHidden="1" w:uiPriority="39" w:unhideWhenUsed="1" w:qFormat="1"/><w:lsdException w:name="Plain Table 1" w:uiPriority="41"/><w:lsdException w:name="Plain Table 2" w:uiPriority="42"/><w:lsdException w:name="Plain Table 3" w:uiPriority="43"/><w:lsdException w:name="Plain Table 4" w:uiPriority="44"/><w:lsdException w:name="Plain Table 5" w:uiPriority="45"/><w:lsdException w:name="Grid Table Light" w:uiPriority="40"/><w:lsdException w:name="Grid Table 1 Light" w:uiPriority="46"/><w:lsdException w:name="Grid Table 2" w:uiPriority="47"/><w:lsdException w:name="Grid Table 3" w:uiPriority="48"/><w:lsdException w:name="Grid Table 4" w:uiPriority="49"/><w:lsdException w:name="Grid Table 5 Dark" w:uiPriority="50"/><w:lsdException w:name="Grid Table 6 Colorful" w:uiPriority="51"/><w:lsdException w:name="Grid Table 7 Colorful" w:uiPriority="52"/><w:lsdException w:name="Grid Table 1 Light Accent 1" w:uiPriority="46"/><w:lsdException w:name="Grid Table 2 Accent 1" w:uiPriority="47"/><w:lsdException w:name="Grid Table 3 Accent 1" w:uiPriority="48"/><w:lsdException w:name="Grid Table 4 Accent 1" w:uiPriority="49"/><w:lsdException w:name="Grid Table 5 Dark Accent 1" w:uiPriority="50"/><w:lsdException w:name="Grid Table 6 Colorful Accent 1" w:uiPriority="51"/><w:lsdException w:name="Grid Table 7 Colorful Accent 1" w:uiPriority="52"/><w:lsdException w:name="Grid Table 1 Light Accent 2" w:uiPriority="46"/><w:lsdException w:name="Grid Table 2 Accent 2" w:uiPriority="47"/><w:lsdException w:name="Grid Table 3 Accent 2" w:uiPriority="48"/><w:lsdException w:name="Grid Table 4 Accent 2" w:uiPriority="49"/><w:lsdException w:name="Grid Table 5 Dark Accent 2" w:uiPriority="50"/><w:lsdException w:name="Grid Table 6 Colorful Accent 2" w:uiPriority="51"/><w:lsdException w:name="Grid Table 7 Colorful Accent 2" w:uiPriority="52"/><w:lsdException w:name="Grid Table 1 Light Accent 3" w:uiPriority="46"/><w:lsdException w:name="Grid Table 2 Accent 3" w:uiPriority="47"/><w:lsdException w:name="Grid Table 3 Accent 3" w:uiPriority="48"/><w:lsdException w:name="Grid Table 4 Accent 3" w:uiPriority="49"/><w:lsdException w:name="Grid Table 5 Dark Accent 3" w:uiPriority="50"/><w:lsdException w:name="Grid Table 6 Colorful Accent 3" w:uiPriority="51"/><w:lsdException w:name="Grid Table 7 Colorful Accent 3" w:uiPriority="52"/><w:lsdException w:name="Grid Table 1 Light Accent 4" w:uiPriority="46"/><w:lsdException w:name="Grid Table 2 Accent 4" w:uiPriority="47"/><w:lsdException w:name="Grid Table 3 Accent 4" w:uiPriority="48"/><w:lsdException w:name="Grid Table 4 Accent 4" w:uiPriority="49"/><w:lsdException w:name="Grid Table 5 Dark Accent 4" w:uiPriority="50"/><w:lsdException w:name="Grid Table 6 Colorful Accent 4" w:uiPriority="51"/><w:lsdException w:name="Grid Table 7 Colorful Accent 4" w:uiPriority="52"/><w:lsdException w:name="Grid Table 1 Light Accent 5" w:uiPriority="46"/><w:lsdException w:name="Grid Table 2 Accent 5" w:uiPriority="47"/><w:lsdException w:name="Grid Table 3 Accent 5" w:uiPriority="48"/><w:lsdException w:name="Grid Table 4 Accent 5" w:uiPriority="49"/><w:lsdException w:name="Grid Table 5 Dark Accent 5" w:uiPriority="50"/><w:lsdException w:name="Grid Table 6 Colorful Accent 5" w:uiPriority="51"/><w:lsdException w:name="Grid Table 7 Colorful Accent 5" w:uiPriority="52"/><w:lsdException w:name="Grid Table 1 Light Accent 6" w:uiPriority="46"/><w:lsdException w:name="Grid Table 2 Accent 6" w:uiPriority="47"/><w:lsdException w:name="Grid Table 3 Accent 6" w:uiPriority="48"/><w:lsdException w:name="Grid Table 4 Accent 6" w:uiPriority="49"/><w:lsdException w:name="Grid Table 5 Dark Accent 6" w:uiPriority="50"/><w:lsdException w:name="Grid Table 6 Colorful Accent 6" w:uiPriority="51"/><w:lsdException w:name="Grid Table 7 Colorful Accent 6" w:uiPriority="52"/><w:lsdException w:name="List Table 1 Light" w:uiPriority="46"/><w:lsdException w:name="List Table 2" w:uiPriority="47"/><w:lsdException w:name="List Table 3" w:uiPriority="48"/><w:lsdException w:name="List Table 4" w:uiPriority="49"/><w:lsdException w:name="List Table 5 Dark" w:uiPriority="50"/><w:lsdException w:name="List Table 6 Colorful" w:uiPriority="51"/><w:lsdException w:name="List Table 7 Colorful" w:uiPriority="52"/><w:lsdException w:name="List Table 1 Light Accent 1" w:uiPriority="46"/><w:lsdException w:name="List Table 2 Accent 1" w:uiPriority="47"/><w:lsdException w:name="List Table 3 Accent 1" w:uiPriority="48"/><w:lsdException w:name="List Table 4 Accent 1" w:uiPriority="49"/><w:lsdException w:name="List Table 5 Dark Accent 1" w:uiPriority="50"/><w:lsdException w:name="List Table 6 Colorful Accent 1" w:uiPriority="51"/><w:lsdException w:name="List Table 7 Colorful Accent 1" w:uiPriority="52"/><w:lsdException w:name="List Table 1 Light Accent 2" w:uiPriority="46"/><w:lsdException w:name="List Table 2 Accent 2" w:uiPriority="47"/><w:lsdException w:name="List Table 3 Accent 2" w:uiPriority="48"/><w:lsdException w:name="List Table 4 Accent 2" w:uiPriority="49"/><w:lsdException w:name="List Table 5 Dark Accent 2" w:uiPriority="50"/><w:lsdException w:name="List Table 6 Colorful Accent 2" w:uiPriority="51"/><w:lsdException w:name="List Table 7 Colorful Accent 2" w:uiPriority="52"/><w:lsdException w:name="List Table 1 Light Accent 3" w:uiPriority="46"/><w:lsdException w:name="List Table 2 Accent 3" w:uiPriority="47"/><w:lsdException w:name="List Table 3 Accent 3" w:uiPriority="48"/><w:lsdException w:name="List Table 4 Accent 3" w:uiPriority="49"/><w:lsdException w:name="List Table 5 Dark Accent 3" w:uiPriority="50"/><w:lsdException w:name="List Table 6 Colorful Accent 3" w:uiPriority="51"/><w:lsdException w:name="List Table 7 Colorful Accent 3" w:uiPriority="52"/><w:lsdException w:name="List Table 1 Light Accent 4" w:uiPriority="46"/><w:lsdException w:name="List Table 2 Accent 4" w:uiPriority="47"/><w:lsdException w:name="List Table 3 Accent 4" w:uiPriority="48"/><w:lsdException w:name="List Table 4 Accent 4" w:uiPriority="49"/><w:lsdException w:name="List Table 5 Dark Accent 4" w:uiPriority="50"/><w:lsdException w:name="List Table 6 Colorful Accent 4" w:uiPriority="51"/><w:lsdException w:name="List Table 7 Colorful Accent 4" w:uiPriority="52"/><w:lsdException w:name="List Table 1 Light Accent 5" w:uiPriority="46"/><w:lsdException w:name="List Table 2 Accent 5" w:uiPriority="47"/><w:lsdException w:name="List Table 3 Accent 5" w:uiPriority="48"/><w:lsdException w:name="List Table 4 Accent 5" w:uiPriority="49"/><w:lsdException w:name="List Table 5 Dark Accent 5" w:uiPriority="50"/><w:lsdException w:name="List Table 6 Colorful Accent 5" w:uiPriority="51"/><w:lsdException w:name="List Table 7 Colorful Accent 5" w:uiPriority="52"/><w:lsdException w:name="List Table 1 Light Accent 6" w:uiPriority="46"/><w:lsdException w:name="List Table 2 Accent 6" w:uiPriority="47"/><w:lsdException w:name="List Table 3 Accent 6" w:uiPriority="48"/><w:lsdException w:name="List Table 4 Accent 6" w:uiPriority="49"/><w:lsdException w:name="List Table 5 Dark Accent 6" w:uiPriority="50"/><w:lsdException w:name="List Table 6 Colorful Accent 6" w:uiPriority="51"/><w:lsdException w:name="List Table 7 Colorful Accent 6" w:uiPriority="52"/><w:lsdException w:name="Mention" w:semiHidden="1" w:unhideWhenUsed="1"/><w:lsdException w:name="Smart Hyperlink" w:semiHidden="1" w:unhideWhenUsed="1"/><w:lsdException w:name="Hashtag" w:semiHidden="1" w:unhideWhenUsed="1"/><w:lsdException w:name="Unresolved Mention" w:semiHidden="1" w:unhideWhenUsed="1"/><w:lsdException w:name="Smart Link" w:semiHidden="1" w:unhideWhenUsed="1"/></w:latentStyles><w:style w:type="paragraph" w:default="1" w:styleId="Normalny"><w:name w:val="Normal"/><w:qFormat/></w:style><w:style w:type="character" w:default="1" w:styleId="Domylnaczcionkaakapitu"><w:name w:val="Default Paragraph Font"/><w:uiPriority w:val="1"/><w:semiHidden/><w:unhideWhenUsed/></w:style><w:style w:type="table" w:default="1" w:styleId="Standardowy"><w:name w:val="Normal Table"/><w:uiPriority w:val="99"/><w:semiHidden/><w:unhideWhenUsed/><w:tblPr><w:tblInd w:w="0" w:type="dxa"/><w:tblCellMar><w:top w:w="0" w:type="dxa"/><w:left w:w="108" w:type="dxa"/><w:bottom w:w="0" w:type="dxa"/><w:right w:w="108" w:type="dxa"/></w:tblCellMar></w:tblPr></w:style><w:style w:type="numbering" w:default="1" w:styleId="Bezlisty"><w:name w:val="No List"/><w:uiPriority w:val="99"/><w:semiHidden/><w:unhideWhenUsed/></w:style></w:styles></pkg:xmlData></pkg:part><pkg:part pkg:name="/word/webSettings.xml" pkg:contentType="application/vnd.openxmlformats-officedocument.wordprocessingml.webSettings+xml"><pkg:xmlData><w:webSettings xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main" xmlns:w14="http://schemas.microsoft.com/office/word/2010/wordml" xmlns:w15="http://schemas.microsoft.com/office/word/2012/wordml" xmlns:w16cex="http://schemas.microsoft.com/office/word/2018/wordml/cex" xmlns:w16cid="http://schemas.microsoft.com/office/word/2016/wordml/cid" xmlns:w16="http://schemas.microsoft.com/office/word/2018/wordml" xmlns:w16sdtdh="http://schemas.microsoft.com/office/word/2020/wordml/sdtdatahash" xmlns:w16se="http://schemas.microsoft.com/office/word/2015/wordml/symex" mc:Ignorable="w14 w15 w16se w16cid w16 w16cex w16sdtdh"><w:optimizeForBrowser/><w:allowPNG/></w:webSettings></pkg:xmlData></pkg:part><pkg:part pkg:name="/word/fontTable.xml" pkg:contentType="application/vnd.openxmlformats-officedocument.wordprocessingml.fontTable+xml"><pkg:xmlData><w:fonts xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:w="http://schemas.openxmlformats.org/wordprocessingml/2006/main" xmlns:w14="http://schemas.microsoft.com/office/word/2010/wordml" xmlns:w15="http://schemas.microsoft.com/office/word/2012/wordml" xmlns:w16cex="http://schemas.microsoft.com/office/word/2018/wordml/cex" xmlns:w16cid="http://schemas.microsoft.com/office/word/2016/wordml/cid" xmlns:w16="http://schemas.microsoft.com/office/word/2018/wordml" xmlns:w16sdtdh="http://schemas.microsoft.com/office/word/2020/wordml/sdtdatahash" xmlns:w16se="http://schemas.microsoft.com/office/word/2015/wordml/symex" mc:Ignorable="w14 w15 w16se w16cid w16 w16cex w16sdtdh"><w:font w:name="Calibri"><w:panose1 w:val="020F0502020204030204"/><w:charset w:val="EE"/><w:family w:val="swiss"/><w:pitch w:val="variable"/><w:sig w:usb0="E4002EFF" w:usb1="C000247B" w:usb2="00000009" w:usb3="00000000" w:csb0="000001FF" w:csb1="00000000"/></w:font><w:font w:name="Times New Roman"><w:panose1 w:val="02020603050405020304"/><w:charset w:val="EE"/><w:family w:val="roman"/><w:pitch w:val="variable"/><w:sig w:usb0="E0002EFF" w:usb1="C000785B" w:usb2="00000009" w:usb3="00000000" w:csb0="000001FF" w:csb1="00000000"/></w:font><w:font w:name="Calibri Light"><w:panose1 w:val="020F0302020204030204"/><w:charset w:val="EE"/><w:family w:val="swiss"/><w:pitch w:val="variable"/><w:sig w:usb0="E4002EFF" w:usb1="C000247B" w:usb2="00000009" w:usb3="00000000" w:csb0="000001FF" w:csb1="00000000"/></w:font></w:fonts></pkg:xmlData></pkg:part><pkg:part pkg:name="/docProps/core.xml" pkg:contentType="application/vnd.openxmlformats-package.core-properties+xml" pkg:padding="256"><pkg:xmlData><cp:coreProperties xmlns:cp="http://schemas.openxmlformats.org/package/2006/metadata/core-properties" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:dcterms="http://purl.org/dc/terms/" xmlns:dcmitype="http://purl.org/dc/dcmitype/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><dc:title/><dc:subject/><dc:creator>Mateusz Szlecht</dc:creator><cp:keywords/><dc:description/><cp:lastModifiedBy>Mateusz Szlecht</cp:lastModifiedBy><cp:revision>2</cp:revision><dcterms:created xsi:type="dcterms:W3CDTF">2023-12-15T08:08:00Z</dcterms:created><dcterms:modified xsi:type="dcterms:W3CDTF">2023-12-15T08:08:00Z</dcterms:modified></cp:coreProperties></pkg:xmlData></pkg:part><pkg:part pkg:name="/docProps/app.xml" pkg:contentType="application/vnd.openxmlformats-officedocument.extended-properties+xml" pkg:padding="256"><pkg:xmlData><Properties xmlns="http://schemas.openxmlformats.org/officeDocument/2006/extended-properties" xmlns:vt="http://schemas.openxmlformats.org/officeDocument/2006/docPropsVTypes"><Template>Normal.dotm</Template><TotalTime>0</TotalTime><Pages>29</Pages><Words>3681</Words><Characters>22086</Characters><Application>Microsoft Office Word</Application><DocSecurity>0</DocSecurity><Lines>184</Lines><Paragraphs>51</Paragraphs><ScaleCrop>false</ScaleCrop><Company/><LinksUpToDate>false</LinksUpToDate><CharactersWithSpaces>25716</CharactersWithSpaces><SharedDoc>false</SharedDoc><HyperlinksChanged>false</HyperlinksChanged><AppVersion>16.0000</AppVersion></Properties></pkg:xmlData></pkg:part></pkg:package>