using Cielonos.MainGame.Characters; using UnityEngine; namespace Cielonos.MainGame { public class LinearDirectionMoveSubmodule : MoveSubmoduleBase { public Vector3 direction; public float speed; public float acceleration; public bool disableNegative; public LinearDirectionMoveSubmodule(AttackAreaBase attackArea, Vector3 direction, float speed, float acceleration, bool overrideRotation, bool disableNegative, bool stopWhenHit, float timeScaleCoefficient) : base(attackArea, stopWhenHit, timeScaleCoefficient) { this.direction = direction; this.speed = speed; this.acceleration = acceleration; this.disableNegative = disableNegative; this.timeScaleCoefficient = timeScaleCoefficient; if (overrideRotation) { attackArea.topParent.transform.rotation = Quaternion.LookRotation(direction); } } public override void Update() { speed += acceleration * (timeScaleCoefficient * attackArea.creator.selfTimeSm.DeltaTime); speed = Mathf.Max(0, speed); if ((disableNegative && speed < 0) || !canMove) { speed = 0; } float projectileSpeedMultiplier = attackArea.creator.attributeSm[CharacterAttribute.ProjectileSpeedMultiplier]; unscaledVelocity = direction * (speed * projectileSpeedMultiplier); scaledVelocity = unscaledVelocity * timeScaleCoefficient; attackArea.topParent.transform.position += scaledVelocity * attackArea.creator.selfTimeSm.DeltaTime; } } }