52 lines
1.8 KiB
C#
52 lines
1.8 KiB
C#
using System;
|
|
using System.ComponentModel;
|
|
using System.Linq;
|
|
using System.Xml.Linq;
|
|
using Barotrauma.Networking;
|
|
|
|
namespace Barotrauma.Items.Components
|
|
{
|
|
internal partial class Growable
|
|
{
|
|
partial void LoadVines(XElement element)
|
|
{
|
|
foreach (XElement subElement in element.Elements())
|
|
{
|
|
switch (subElement.Name.ToString().ToLowerInvariant())
|
|
{
|
|
case "flowersprite":
|
|
flowerVariants++;
|
|
break;
|
|
case "leafsprite":
|
|
leafVariants++;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
public void ServerWrite(IWriteMessage msg, Client c, object[] extraData = null)
|
|
{
|
|
msg.WriteRangedSingle(Health, 0f, (float) MaxHealth, 8);
|
|
if (extraData != null && extraData.Length >= 3 && extraData[2] is int offset)
|
|
{
|
|
int amountToSend = Math.Min(Vines.Count - offset, VineChunkSize);
|
|
msg.WriteRangedInteger(offset, -1, MaximumVines);
|
|
msg.WriteRangedInteger(amountToSend, 0, VineChunkSize);
|
|
for (int i = offset; i < offset + amountToSend; i++)
|
|
{
|
|
VineTile vine = Vines[i];
|
|
var (x, y) = vine.Position;
|
|
msg.WriteRangedInteger((byte) vine.Type, 0b0000, 0b1111);
|
|
msg.WriteRangedInteger(vine.FlowerConfig.Serialize(), 0, 0xFFF);
|
|
msg.WriteRangedInteger(vine.LeafConfig.Serialize(), 0, 0xFFF);
|
|
msg.Write((byte) (x / VineTile.Size));
|
|
msg.Write((byte) (y / VineTile.Size));
|
|
}
|
|
}
|
|
else
|
|
{
|
|
msg.WriteRangedInteger(-1, -1, MaximumVines);
|
|
}
|
|
}
|
|
}
|
|
} |