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.