Skip to content

Game.Prefabs.WatercraftData

Assembly:
Assembly-CSharp (typical for game types; actual assembly may vary)

Namespace:
Game.Prefabs

Type:
struct WatercraftData : IComponentData, IQueryTypeParameter, ISerializable

Base:
- Unity.Entities.IComponentData
- IQueryTypeParameter
- Colossal.Serialization.Entities.ISerializable

Summary:
Data component describing watercraft characteristics used by the game's vehicle systems. Stores size/energy classification and basic kinematic parameters (speed, acceleration, braking, turning and angular acceleration). Implements ISerializable to control binary read/write order for save/load or network transfer.


Fields

  • public SizeClass m_SizeClass
    Enum describing the size classification of the watercraft (e.g., small/medium/large). Serialized as a single byte.

  • public EnergyTypes m_EnergyType
    Enum describing the energy/propulsion type (e.g., diesel, electric). Serialized as a single byte.

  • public float m_MaxSpeed
    Top speed of the watercraft (units consistent with the game's speed units). Serialized as a 32-bit float.

  • public float m_Acceleration
    Linear acceleration value. Serialized as a 32-bit float.

  • public float m_Braking
    Braking (deceleration) value. Serialized as a 32-bit float.

  • public float2 m_Turning
    Turning parameters stored as a float2 (Unity.Mathematics). Semantics depend on game usage (for example, could be min/max turning rates or lateral/rotational turning factors). Serialized as a float2.

  • public float m_AngularAcceleration
    Angular acceleration used for rotational dynamics. Serialized as a 32-bit float.

Properties

  • None (this struct exposes public fields; no C# properties present)

Constructors

  • public WatercraftData()
    Structs use the implicit parameterless constructor. Initialize individual fields directly or via an object initializer.

Methods

  • public void Serialize<TWriter>(TWriter writer) where TWriter : IWriter
    Writes the component fields to the provided writer in a fixed order:
  • m_SizeClass as byte
  • m_EnergyType as byte
  • m_MaxSpeed (float)
  • m_Acceleration (float)
  • m_Braking (float)
  • m_Turning (float2)
  • m_AngularAcceleration (float) This deterministic order must be matched by Deserialize.

  • public void Deserialize<TReader>(TReader reader) where TReader : IReader
    Reads fields from the provided reader in the same order as Serialize. Note:

  • The two enum values are read as bytes then cast back to their enum types.
  • The float/float2 fields are read by reference into the struct fields.
  • Ensure reader provides the expected types and that the read order matches Serialize exactly.

Usage Example

// Create and assign WatercraftData to an entity (Unity.Entities)
var data = new WatercraftData {
    m_SizeClass = SizeClass.Medium,
    m_EnergyType = EnergyTypes.Diesel,
    m_MaxSpeed = 12f,
    m_Acceleration = 3.5f,
    m_Braking = 2.0f,
    m_Turning = new float2(1.0f, 1.0f),
    m_AngularAcceleration = 0.5f
};

EntityManager em = World.DefaultGameObjectInjectionWorld.EntityManager;
if (!em.HasComponent<WatercraftData>(entity))
    em.AddComponentData(entity, data);
else
    em.SetComponentData(entity, data);

// Example: serializing/deserializing with a writer/reader (pseudo-code)
void SaveComponent<TWriter>(WatercraftData comp, TWriter writer) where TWriter : IWriter
{
    comp.Serialize(writer);
}

void LoadComponent<TReader>(ref WatercraftData comp, TReader reader) where TReader : IReader
{
    comp.Deserialize(reader);
}

Additional notes: - The struct is designed to be plain data (POD) for ECS usage; avoid heavy logic in it. - When implementing custom writers/readers, respect the exact field order and types to maintain compatibility with existing save formats.