diff --git a/FRBDK/Glue/PlatformerPlugin/CodeGenerators/EntityPlatformerAnimationCodeGenerator.cs b/FRBDK/Glue/PlatformerPlugin/CodeGenerators/EntityPlatformerAnimationCodeGenerator.cs index 7d2e3b664..e398f5203 100644 --- a/FRBDK/Glue/PlatformerPlugin/CodeGenerators/EntityPlatformerAnimationCodeGenerator.cs +++ b/FRBDK/Glue/PlatformerPlugin/CodeGenerators/EntityPlatformerAnimationCodeGenerator.cs @@ -96,6 +96,8 @@ public override ICodeBlock GenerateInitialize(ICodeBlock codeBlock, IElement ele variableAssignmentBlock.Line($"MaxXVelocityAbsolute={CodeParser.ConvertValueToCodeString(entry.MaxXVelocityAbsolute)} ,"); variableAssignmentBlock.Line($"MinYVelocity={CodeParser.ConvertValueToCodeString(entry.MinYVelocity)} ,"); variableAssignmentBlock.Line($"MaxYVelocity={CodeParser.ConvertValueToCodeString(entry.MaxYVelocity)} ,"); + variableAssignmentBlock.Line($"MinHorizontalInputAbsolute={CodeParser.ConvertValueToCodeString(entry.MinHorizontalInputAbsolute)} ,"); + variableAssignmentBlock.Line($"MaxHorizontalInputAbsolute={CodeParser.ConvertValueToCodeString(entry.MaxHorizontalInputAbsolute)} ,"); variableAssignmentBlock.Line($"AbsoluteXVelocityAnimationSpeedMultiplier={CodeParser.ConvertValueToCodeString(entry.AbsoluteXVelocityAnimationSpeedMultiplier)} ,"); variableAssignmentBlock.Line($"AbsoluteYVelocityAnimationSpeedMultiplier={CodeParser.ConvertValueToCodeString(entry.AbsoluteYVelocityAnimationSpeedMultiplier)} ,"); variableAssignmentBlock.Line($"MaxSpeedXRatioMultiplier={CodeParser.ConvertValueToCodeString(entry.MaxSpeedXRatioMultiplier)} ,"); diff --git a/FRBDK/Glue/PlatformerPlugin/CodeGenerators/IPlatformerCodeGenerator.cs b/FRBDK/Glue/PlatformerPlugin/CodeGenerators/IPlatformerCodeGenerator.cs index 81c726c8b..03b99cac8 100644 --- a/FRBDK/Glue/PlatformerPlugin/CodeGenerators/IPlatformerCodeGenerator.cs +++ b/FRBDK/Glue/PlatformerPlugin/CodeGenerators/IPlatformerCodeGenerator.cs @@ -54,6 +54,7 @@ public interface IPlatformer : FlatRedBall.Math.IPositionable string CurrentMovementName {{ get; }} float MaxAbsoluteXVelocity {{ get; }} float MaxAbsoluteYVelocity {{ get; }} + global::FlatRedBall.Input.I1DInput HorizontalInput {{get;}} }} }}"; return toReturn; diff --git a/FRBDK/Glue/PlatformerPlugin/CodeGenerators/PlatformerAnimationControllerGenerator.cs b/FRBDK/Glue/PlatformerPlugin/CodeGenerators/PlatformerAnimationControllerGenerator.cs index 4cb680c60..473e2c4cf 100644 --- a/FRBDK/Glue/PlatformerPlugin/CodeGenerators/PlatformerAnimationControllerGenerator.cs +++ b/FRBDK/Glue/PlatformerPlugin/CodeGenerators/PlatformerAnimationControllerGenerator.cs @@ -58,7 +58,9 @@ public enum AnimationSpeedAssignment ForceTo1, NoAssignment, BasedOnVelocityMultiplier, - BasedOnMaxSpeedRatioMultiplier + BasedOnMaxSpeedRatioMultiplier, + BasedOnHorizontalInputMultiplier + } public class PlatformerAnimationConfiguration @@ -75,6 +77,9 @@ public class PlatformerAnimationConfiguration public float? AbsoluteXVelocityAnimationSpeedMultiplier { get; set; } public float? AbsoluteYVelocityAnimationSpeedMultiplier { get; set; } + public float? MinHorizontalInputAbsolute { get; set; } + public float? MaxHorizontalInputAbsolute { get; set; } + public float? MaxSpeedXRatioMultiplier { get; set; } public float? MaxSpeedYRatioMultiplier { get; set; } @@ -139,6 +144,7 @@ public void AddLayer(PlatformerAnimationConfiguration configuration) } bool shouldSet = true; var absoluteXVelocity = System.Math.Abs(PlatformerEntity.XVelocity); + var absoluteInput = System.Math.Abs(PlatformerEntity.HorizontalInput.Value); var yVelocity = PlatformerEntity.YVelocity; if(shouldSet && !string.IsNullOrEmpty( configuration.MovementName)) { @@ -149,6 +155,8 @@ public void AddLayer(PlatformerAnimationConfiguration configuration) shouldSet = shouldSet && (yVelocity < configuration.MinYVelocity) == false; shouldSet = shouldSet && (absoluteXVelocity > configuration.MaxXVelocityAbsolute) == false; shouldSet = shouldSet && (yVelocity > configuration.MaxYVelocity) == false; + shouldSet = shouldSet && (absoluteInput < configuration.MinHorizontalInputAbsolute) == false; + shouldSet = shouldSet && (absoluteInput > configuration.MaxHorizontalInputAbsolute) == false; shouldSet = shouldSet && (configuration.OnGroundRequirement == null || PlatformerEntity.IsOnGround == configuration.OnGroundRequirement); @@ -220,6 +228,15 @@ public void AddLayer(PlatformerAnimationConfiguration configuration) } } break; + case AnimationSpeedAssignment.BasedOnHorizontalInputMultiplier: + { + var asSprite = this.AnimatedObject as FlatRedBall.Sprite; + if (asSprite != null) + { + asSprite.AnimationSpeed = PlatformerEntity.HorizontalInput.Value; + } + } + break; } diff --git a/FRBDK/Glue/PlatformerPlugin/Controllers/AnimationController.cs b/FRBDK/Glue/PlatformerPlugin/Controllers/AnimationController.cs index a3bef99aa..61d41c641 100644 --- a/FRBDK/Glue/PlatformerPlugin/Controllers/AnimationController.cs +++ b/FRBDK/Glue/PlatformerPlugin/Controllers/AnimationController.cs @@ -85,7 +85,10 @@ private static void InitializeInstanceMembers(DataUiGrid dataUiGrid, AnimationRo dataUiGrid.MoveMemberToCategory(nameof(AnimationRowViewModel.MaxXVelocityAbsolute), Localization.Texts.Velocity); dataUiGrid.MoveMemberToCategory(nameof(AnimationRowViewModel.MinYVelocity), Localization.Texts.Velocity); - dataUiGrid.MoveMemberToCategory(nameof(AnimationRowViewModel.MaxYVelocity),Localization.Texts.Velocity); + dataUiGrid.MoveMemberToCategory(nameof(AnimationRowViewModel.MaxYVelocity), Localization.Texts.Velocity); + + dataUiGrid.MoveMemberToCategory(nameof(AnimationRowViewModel.MinHorizontalInputAbsolute), "Input"); + dataUiGrid.MoveMemberToCategory(nameof(AnimationRowViewModel.MaxHorizontalInputAbsolute), "Input"); var velocityFirstGridLength = new GridLength(150); dataUiGrid.GetInstanceMember(nameof(AnimationRowViewModel.MinXVelocityAbsolute)).FirstGridLength = velocityFirstGridLength; diff --git a/FRBDK/Glue/PlatformerPlugin/SaveClasses/AllPlatformerAnimationValues.cs b/FRBDK/Glue/PlatformerPlugin/SaveClasses/AllPlatformerAnimationValues.cs index b4e88fe19..7c77ef086 100644 --- a/FRBDK/Glue/PlatformerPlugin/SaveClasses/AllPlatformerAnimationValues.cs +++ b/FRBDK/Glue/PlatformerPlugin/SaveClasses/AllPlatformerAnimationValues.cs @@ -9,9 +9,11 @@ public enum AnimationSpeedAssignment ForceTo1, NoAssignment, BasedOnVelocityMultiplier, - BasedOnMaxSpeedRatioMultiplier + BasedOnMaxSpeedRatioMultiplier, + BasedOnHorizontalInputMultiplier + } - + public class AllPlatformerAnimationValues { public List Values { get; set; } = new List(); @@ -29,6 +31,9 @@ public class IndividualPlatformerAnimationValues public float? MinYVelocity { get; set; } public float? MaxYVelocity { get; set; } + public float? MinHorizontalInputAbsolute { get; set; } + public float? MaxHorizontalInputAbsolute { get; set; } + public float? AbsoluteXVelocityAnimationSpeedMultiplier { get; set; } public float? AbsoluteYVelocityAnimationSpeedMultiplier { get; set; } diff --git a/FRBDK/Glue/PlatformerPlugin/ViewModels/AnimationRowViewModel.cs b/FRBDK/Glue/PlatformerPlugin/ViewModels/AnimationRowViewModel.cs index bdf69a495..31d9666fe 100644 --- a/FRBDK/Glue/PlatformerPlugin/ViewModels/AnimationRowViewModel.cs +++ b/FRBDK/Glue/PlatformerPlugin/ViewModels/AnimationRowViewModel.cs @@ -46,6 +46,17 @@ public float? MaxYVelocity set => Set(value); } + public float? MinHorizontalInputAbsolute + { + get => Get(); + set => Set(value); + } + public float? MaxHorizontalInputAbsolute + { + get => Get(); + set => Set(value); + } + public float? AbsoluteXVelocityAnimationSpeedMultiplier { get => Get(); @@ -148,6 +159,10 @@ public void ApplyTo(IndividualPlatformerAnimationValues model) model.MinYVelocity = MinYVelocity; model.MaxYVelocity = MaxYVelocity; + model.MinHorizontalInputAbsolute = MinHorizontalInputAbsolute; + model.MaxHorizontalInputAbsolute = MaxHorizontalInputAbsolute; + + model.AbsoluteXVelocityAnimationSpeedMultiplier = AbsoluteXVelocityAnimationSpeedMultiplier; model.AbsoluteYVelocityAnimationSpeedMultiplier = AbsoluteYVelocityAnimationSpeedMultiplier; @@ -176,6 +191,9 @@ public void SetFrom(IndividualPlatformerAnimationValues model) this.MinYVelocity = model.MinYVelocity; this.MaxYVelocity = model.MaxYVelocity; + this.MinHorizontalInputAbsolute = model.MinHorizontalInputAbsolute; + this.MaxHorizontalInputAbsolute = model.MaxHorizontalInputAbsolute; + this.AbsoluteXVelocityAnimationSpeedMultiplier = model.AbsoluteXVelocityAnimationSpeedMultiplier; this.AbsoluteYVelocityAnimationSpeedMultiplier = model.AbsoluteYVelocityAnimationSpeedMultiplier;