using System; using BumpCombat.Defense; using BumpCombat.Enemies; using BumpCombat.Player; using UnityEngine; namespace BumpCombat.Constants { [Serializable] public sealed class ComparisonSpriteFrames { public Sprite[] Idle = Array.Empty(); public Sprite[] Walk = Array.Empty(); public Sprite[] Attack = Array.Empty(); public Sprite[] Hurt = Array.Empty(); public Sprite[] Death = Array.Empty(); } [CreateAssetMenu(menuName = "BumpCombat/Constants/Defense 2.5D Comparison")] public sealed class Defense25DComparisonSettings : ScriptableObject { public const float SummonBodyPixelsPerUnit = 32f; public const float SlimeBodyCoreDiameterPixels = 11f; public const float GiantSlimeBodyCoreDiameterPixels = 22f; public const float LavaSlimeBodyCoreDiameterPixels = 13f; public static readonly Vector2 SlimeBodyCenterFromFootPixels = new(-1.5f, 7.5f); public static readonly Vector2 GiantSlimeBodyCenterFromFootPixels = new(-3f, 17f); public static readonly Vector2 LavaSlimeBodyCenterFromFootPixels = new(-2f, 8.5f); [Header("Independent comparison layout; not final balance")] public float GroundY; public Vector2 MapHalfExtents = new(10.5f, 5.5f); public Vector2 PlayerSpawn = new(-5f, -2f); public Vector2 TowerPosition = new(1f, 1.8f); public Vector2[] Route = { new(-9f, 0f), new(-4f, 0f), new(-2f, 2.4f), new(4f, 2.4f), new(9f, 0f) }; public Vector2[] SummonSlots = { new(-.6f, -.9f), new(.6f, -.9f) }; public DefenseTowerKind PortalImmunity = DefenseTowerKind.Direct; public float CameraPitch = 50f; public float CameraSize = 6.5f; [Range(.1f, 1f)] public float SouthBoundaryRenderHeightFraction = .4f; [Header("XZ footprints baked from existing prefab XY colliders")] public float PlayerRadius = .275f; public Vector2 PlayerColliderOffset = new(0f, -.075f); public float PlayerVisualScale = 1.25f; public float PlayerFootOffset = -7.5f / 32f * 1.25f; public float EnemyRadius = .275f; public Vector2 EnemyColliderOffset = new(0f, -.35f); public float EnemyVisualScale = 1.25f; public float EnemyFootOffset = -.4f; public float EnemyBodyCenterCorrectionPixels = 3f; public float SummonVisualScale = 1.1f; public float SummonFootOffset = -9f / 32f * 1.1f; public float ActorHeight = .85f; public float MovementSkin = .002f; public float ContactSensorMargin = .025f; // Unnamed, otherwise unused layers in the baseline project; no TagManager edits. public const int TerrainLayer = 9; public const int ActorLayer = 10; public const int TerrainMask = 1 << TerrainLayer; public const int ActorMask = 1 << ActorLayer; [Header("Existing definitions and art; originals are not edited")] public EnemyDefinition Enemy; public AnimationClip EnemyAttackClip; public ActiveArtifactDefinition Cyclone; public ComparisonSpriteFrames PlayerArt = new(); public ComparisonSpriteFrames EnemyArt = new(); public Material CutoutMaterial; public Material TransparentMaterial; public Material GroundMaterial; public Material WallMaterial; public Material PathMaterial; public Material ShadowMaterial; public Material BaseMaterial; public Material BoundaryMaterial; public Material HitBoundaryMaterial; } }