using ProtoBuf;

using System.Collections.Generic;
using MongoDB.Bson.Serialization.Attributes;
using Fantasy;
using Fantasy.Network.Interface;
using Fantasy.Serialize;
// ReSharper disable InconsistentNaming
// ReSharper disable RedundantUsingDirective
// ReSharper disable RedundantOverriddenMember
// ReSharper disable PartialTypeWithSinglePart
// ReSharper disable UnusedAutoPropertyAccessor.Global
// ReSharper disable MemberCanBePrivate.Global
// ReSharper disable CheckNamespace
#pragma warning disable CS8625 // Cannot convert null literal to non-nullable reference type.
#pragma warning disable CS8618

namespace Fantasy
{	
	[ProtoContract]
	public partial class Vector3Info : AMessage, IProto
	{
		public static Vector3Info Create(Scene scene)
		{
			return scene.MessagePoolComponent.Rent<Vector3Info>();
		}
		public override void Dispose()
		{
			x = default;
			y = default;
			z = default;
#if FANTASY_NET || FANTASY_UNITY
			GetScene().MessagePoolComponent.Return<Vector3Info>(this);
#endif
		}
		[ProtoMember(1)]
		public float x { get; set; }
		[ProtoMember(2)]
		public float y { get; set; }
		[ProtoMember(3)]
		public float z { get; set; }
	}
	[ProtoContract]
	public partial class Vector2Info : AMessage, IProto
	{
		public static Vector2Info Create(Scene scene)
		{
			return scene.MessagePoolComponent.Rent<Vector2Info>();
		}
		public override void Dispose()
		{
			x = default;
			y = default;
#if FANTASY_NET || FANTASY_UNITY
			GetScene().MessagePoolComponent.Return<Vector2Info>(this);
#endif
		}
		[ProtoMember(1)]
		public float x { get; set; }
		[ProtoMember(2)]
		public float y { get; set; }
	}
	[ProtoContract]
	public partial class QuaternionInfo : AMessage, IProto
	{
		public static QuaternionInfo Create(Scene scene)
		{
			return scene.MessagePoolComponent.Rent<QuaternionInfo>();
		}
		public override void Dispose()
		{
			x = default;
			y = default;
			z = default;
			w = default;
#if FANTASY_NET || FANTASY_UNITY
			GetScene().MessagePoolComponent.Return<QuaternionInfo>(this);
#endif
		}
		[ProtoMember(1)]
		public float x { get; set; }
		[ProtoMember(2)]
		public float y { get; set; }
		[ProtoMember(3)]
		public float z { get; set; }
		[ProtoMember(4)]
		public float w { get; set; }
	}
	[ProtoContract]
	public partial class UnitFishingInfo : AMessage, IProto
	{
		public static UnitFishingInfo Create(Scene scene)
		{
			return scene.MessagePoolComponent.Rent<UnitFishingInfo>();
		}
		public override void Dispose()
		{
			LineLength = default;
			ReelSpeed = default;
			OpenLight = default;
			RodSetting = default;
#if FANTASY_NET || FANTASY_UNITY
			GetScene().MessagePoolComponent.Return<UnitFishingInfo>(this);
#endif
		}
		[ProtoMember(1)]
		public float LineLength { get; set; }
		[ProtoMember(2)]
		public float ReelSpeed { get; set; }
		[ProtoMember(3)]
		public bool OpenLight { get; set; }
		[ProtoMember(4)]
		public int RodSetting { get; set; }
	}
	[ProtoContract]
	public partial class UnitStateInfo : AMessage, IProto
	{
		public static UnitStateInfo Create(Scene scene)
		{
			return scene.MessagePoolComponent.Rent<UnitStateInfo>();
		}
		public override void Dispose()
		{
			State = default;
			Args.Clear();
#if FANTASY_NET || FANTASY_UNITY
			GetScene().MessagePoolComponent.Return<UnitStateInfo>(this);
#endif
		}
		[ProtoMember(1)]
		public int State { get; set; }
		[ProtoMember(2)]
		public List<string> Args = new List<string>();
	}
	[ProtoContract]
	public partial class MapUnitInfo : AMessage, IProto
	{
		public static MapUnitInfo Create(Scene scene)
		{
			return scene.MessagePoolComponent.Rent<MapUnitInfo>();
		}
		public override void Dispose()
		{
			Id = default;
			RoleInfo = default;
			Position = default;
			Rotation = default;
			State = default;
			Gears = default;
			FishingInfo = default;
			KV.Clear();
#if FANTASY_NET || FANTASY_UNITY
			GetScene().MessagePoolComponent.Return<MapUnitInfo>(this);
#endif
		}
		[ProtoMember(1)]
		public long Id { get; set; }
		[ProtoMember(2)]
		public RoleSimpleInfo RoleInfo { get; set; }
		[ProtoMember(3)]
		public Vector3Info Position { get; set; }
		[ProtoMember(4)]
		public Vector3Info Rotation { get; set; }
		[ProtoMember(5)]
		public UnitStateInfo State { get; set; }
		[ProtoMember(6)]
		public GearInfo Gears { get; set; }
		[ProtoMember(7)]
		public UnitFishingInfo FishingInfo { get; set; }
		[ProtoMember(8)]
		public List<KeyValueInt32> KV = new List<KeyValueInt32>();
	}
}
