90 lines
3.3 KiB
C#
90 lines
3.3 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 ColorChoice = Celeste.Mod.AvaliSkin.AvaliSkinSettings.ColorChoice;
|
|
using ColorMode = Celeste.Mod.AvaliSkin.AvaliSkinSettings.ColorMode;
|
|
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(),
|
|
ColorMode = ColorMode.ExternalDash
|
|
};
|
|
}
|
|
|
|
protected override void Write(CelesteNetBinaryWriter writer) {
|
|
writer.Write(Config.Enabled);
|
|
if (Config.Enabled) {
|
|
// byte lengthRGB = Math.Min(ManualRGB.Count, 5);
|
|
// writer.Write((byte) ManualRGB.Count);
|
|
// foreach (var color in ManualRGB) {
|
|
// write.WriteNoA(color);
|
|
// }
|
|
|
|
// byte lengthPreset = Math.Min(ManualPreset.Count, 5);
|
|
// writer.Write((byte) ManualPreset.Count);
|
|
// foreach (var color in ManualPreset) {
|
|
// write.Write((byte) color);
|
|
// }
|
|
}
|
|
}
|
|
}
|
|
}
|