TerrariaのtModLoader過去からの変更対応
はじめに
tModLoaderがv0.10.1
時点で製作したModについて。現時点(2021/05/19)のv0.11.8.4
に対応するための変更点についてまとめる。
テクスチャ
次のように配置していたテクスチャを
My Games\Terraria\ModLoader\Mod Sources\TeraInfo\waku.png
次のように読込んでいた。
namespace Hoge { class TeraInfo : Mod { private Texture2D waku; public override void Load() { waku = GetTexture("waku"); : } } }
tModLoaderのWikiでは次のように説明がある。
Basic Autoload · tModLoader/tModLoader Wiki · GitHub
だが、これはどうもアイテムなんかと紐付ける方法なので、うまくいかない。
こういったときはサンプルを確認するのが手っ取り早い。
クラスとファイルが違うものを探していたら次のコードが参考に。
tModLoader/ExampleResourceBar.cs at master · tModLoader/tModLoader · GitHub
次のようにすればよい事がわかった。
waku = ModContent.GetTexture("TeraInfo/waku");
プレイヤーデータ
ビルドした際にエラーが出るのでわかる。
これはそのまま変更についてのガイドがあるので従う。
Update Migration Guide · tModLoader/tModLoader Wiki · GitHub
簡単に言えば、引数にmodのインスタンスを渡していたのを何も渡す必要がなくなっただけ。
player.GetModPlayer<TeraInfoPlayer>(mod); ↓ player.GetModPlayer<TeraInfoPlayer>();
Modの変更をtModLoader標準の設定で行えるようにする
以前は「Mod Settings Configurator」を使用していたが、現在はtModLoaderに設定変更できるUIが実装されている。
以下はNPCInfoの例。
using System.ComponentModel; using Terraria.ModLoader.Config; namespace NPCInfo { [Label("Config")] public class NPCInfoConfig : ModConfig { public override ConfigScope Mode => ConfigScope.ClientSide; [Label("Cheat mode")] [DefaultValue(false)] public bool isCheatMode; [Label("NPC Info ui position lock")] [DefaultValue(false)] public bool isUiLock; [Label("Display time of npc")] [DefaultValue(30)] public int timeOut; [Label("Display drop info")] [DefaultValue(true)] public bool isDisplayDropInfo = true; [Label("Display spawn npc value")] [DefaultValue(true)] public bool isDisplaySpawnValue = true; [Label("Display drop item value")] [DefaultValue(true)] public bool isDisplayDropItemValue = true; [Label("Animation")] [DefaultValue(true)] public bool isAnimation = false; [Label("Animation speed")] [DefaultValue(10)] public int animationSpeed = 10; public override void OnChanged() { Config.isCheatMode = isCheatMode; Config.isLock = isUiLock; Config.timeOut = timeOut; Config.isDisplayDropInfo = isDisplayDropInfo; Config.isDisplaySpawnValue = isDisplaySpawnValue; Config.isDisplayDropItemValue = isDisplayDropItemValue; Config.isAnimation = isAnimation; Config.animationSpeed = animationSpeed; } } }
とりあえず、以前に使用していた設定を使うためにOnChanged
で設定しなおしているが、その内直したい。
ModConfig
を継承したクラスで、public
なフィールドを作成すれば、型に合わせて適切なUIで表示される。
使用する際は次のようにする。というか基本的にconfigに限らず。ModContent.GetInstance<T>();
でインスタンス取得するという事かな。
ModContent.GetInstance<NPCInfoConfig>().isCheatMode