using Microsoft.Xna.Framework; using Terraria; using Terraria.ModLoader; namespace Decimation.Lib.Tiles { public abstract class DecimationTile : ModTile { public virtual bool Solid { get; set; } = false; public virtual bool SolidTop { get; set; } = false; public virtual bool TilesCanAttach { get; set; } = false; public virtual bool DisableSmartCursor { get; set; } = false; public virtual bool HasLight { get; } = false; public virtual float MineResistance { get; set; } = 1f; public virtual int DustType { get; } = 0; public virtual int? AnimationFrameCount { get; } = null; public virtual int AnimationFps { get; } = 5; public virtual int? AnimationFrameHeight { get; set; } public virtual string Name { get; } = null; public virtual int MinimumPickaxePower { get; set; } = 0; public abstract Color MapColor { get; } public abstract int TileItem { get; } public sealed override void SetDefaults() { Main.tileSolid[Type] = Solid; Main.tileSolidTop[Type] = SolidTop; Main.tileNoAttach[Type] = !TilesCanAttach; Main.tileLighted[Type] = HasLight; minPick = MinimumPickaxePower; mineResist = MineResistance; dustType = DustType; drop = TileItem; disableSmartCursor = DisableSmartCursor; if (Name == null) { AddMapEntry(MapColor); } else { ModTranslation translation = CreateMapEntryName(); translation.SetDefault(Name); AddMapEntry(MapColor, translation); } InitTile(); if (AnimationFrameHeight.HasValue) animationFrameHeight = AnimationFrameHeight.Value; } public override void NumDust(int i, int j, bool fail, ref int num) { num = fail ? 1 : 3; } public override void AnimateTile(ref int frame, ref int frameCounter) { if (!AnimationFrameCount.HasValue) return; frameCounter++; if (frameCounter > AnimationFps) { frameCounter = 0; frame++; if (frame >= AnimationFrameCount) frame = 0; } } protected abstract void InitTile(); } }