82 lines
2.9 KiB
C#
82 lines
2.9 KiB
C#
using Microsoft.Xna.Framework;
|
|
|
|
using Celeste.Mod.CelesteNet;
|
|
using Celeste.Mod.CelesteNet.Client;
|
|
using Celeste.Mod.CelesteNet.Client.Entities;
|
|
using Celeste.Mod.CelesteNet.DataTypes;
|
|
|
|
using DashColorMode = Celeste.Mod.AvaliSkin.AvaliSkinSettings.DashColorMode;
|
|
using SendReceive = Celeste.Mod.AvaliSkin.AvaliSkinSettings.SendReceive;
|
|
|
|
|
|
namespace Celeste.Mod.AvaliSkin {
|
|
public class CelesteNetAvaliComponent : CelesteNetGameComponent {
|
|
private static AvaliSkinSettings ModuleSettings => AvaliSkinModule.Settings;
|
|
public static CelesteNetAvaliComponent Instance;
|
|
|
|
private CelesteNetClientContext Ctx;
|
|
|
|
public CelesteNetAvaliComponent(CelesteNetClientContext context, Game game) : base(context, game) {
|
|
Instance = this;
|
|
Ctx = context;
|
|
}
|
|
|
|
public void Handle(CelesteNetConnection con, DataReady ready) {
|
|
SendAvaliSkin();
|
|
}
|
|
|
|
public void SendAvaliSkin() {
|
|
if (Ctx.Client != null && Ctx.Client.PlayerInfo != null) {
|
|
if (
|
|
ModuleSettings.CelesteNetSync == SendReceive.SendReceive
|
|
|| ModuleSettings.CelesteNetSync == SendReceive.Send
|
|
) {
|
|
Logger.Log(LogLevel.Info, "AvaliSkin", $"Sending updated DataPlayerAvaliSkin!");
|
|
AvaliConfig config = AvaliSkinModule.PlayerConfig;
|
|
Ctx.Client.Send(new DataPlayerAvaliSkin(Ctx.Client.PlayerInfo, config));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
public class DataPlayerAvaliSkin : DataType<DataPlayerAvaliSkin> {
|
|
public AvaliConfig Config;
|
|
public DataPlayerInfo Player;
|
|
|
|
static DataPlayerAvaliSkin() { DataID = "avaliskin_skinconfig"; }
|
|
public DataPlayerAvaliSkin() {}
|
|
public DataPlayerAvaliSkin(DataPlayerInfo player, AvaliConfig config) {
|
|
this.Player = player;
|
|
this.Config = config;
|
|
}
|
|
|
|
public override MetaType[] GenerateMeta(DataContext ctx) => new MetaType[] {
|
|
new MetaPlayerPrivateState(Player),
|
|
new MetaBoundRef(DataType<DataPlayerInfo>.DataID, Player?.ID ?? uint.MaxValue, true)
|
|
};
|
|
|
|
public override void FixupMeta(DataContext ctx) {
|
|
Player = Get<MetaPlayerPrivateState>(ctx);
|
|
Get<MetaBoundRef>(ctx).ID = Player?.ID ?? uint.MaxValue;
|
|
}
|
|
|
|
protected override void Read(CelesteNetBinaryReader reader) {
|
|
Config = new AvaliConfig {
|
|
Enabled = reader.ReadBoolean(),
|
|
DashColorMode = DashColorMode.ExternalDash,
|
|
LightBody = reader.ReadColorNoA(),
|
|
DarkBody = reader.ReadColorNoA(),
|
|
};
|
|
}
|
|
|
|
protected override void Write(CelesteNetBinaryWriter writer) {
|
|
writer.Write(Config.Enabled);
|
|
if (Config.Enabled) {
|
|
writer.WriteNoA(Config.LightBody);
|
|
writer.WriteNoA(Config.DarkBody);
|
|
}
|
|
}
|
|
}
|
|
}
|