/// <summary> /// Swaps the BattleIndex and BattlePosition of two BattleEntities. /// <para>This is intended for BattleEntities of the same EntityType. /// Swapping BattleEntities of different EntityTypes may produce undesirable behavior.</para> /// </summary> /// <param name="firstEntity">The first BattleEntity to swap.</param> /// <param name="secondEntity">The second BattleEntity to swap.</param> /// <param name="preserveHeight">Whether to preserve the height of each BattleEntity or not. /// If true, BattleEntities will only swap X values of their BattlePositions.</param> public static void SwapEntityBattlePosAndIndex(BattleEntity firstEntity, BattleEntity secondEntity, bool preserveHeight) { //Store values Vector2 firstBattlePosition = firstEntity.BattlePosition; Vector2 secondBattlePosition = secondEntity.BattlePosition; int firstBattleIndex = firstEntity.BattleIndex; int secondBattleIndex = secondEntity.BattleIndex; //Swap positions //If we preserve height, use the BattleEntity's own Y if (preserveHeight == true) { firstEntity.SetBattlePosition(new Vector2(secondBattlePosition.X, firstBattlePosition.Y)); secondEntity.SetBattlePosition(new Vector2(firstBattlePosition.X, secondBattlePosition.Y)); } else { firstEntity.SetBattlePosition(secondBattlePosition); secondEntity.SetBattlePosition(firstBattlePosition); } //Swap BattleIndex; the lists will be automatically sorted firstEntity.SetBattleIndex(secondBattleIndex, true); secondEntity.SetBattleIndex(firstBattleIndex, true); }
protected override void OnEnd() { base.OnEnd(); Entity.SetBattlePosition(GroundedPos); Entity.Position = GroundedPos; if (Entity.IsDead == false) { Entity.AnimManager.PlayAnimation(Entity.GetIdleAnim()); } ElapsedTime = 0f; StartPos = GroundedPos = Vector2.Zero; HurtAnim = null; Entity = null; }