199 lines
6.2 KiB
C#
199 lines
6.2 KiB
C#
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using UnityEngine;
|
|
|
|
// Sci-Fi Ship Controller. Copyright (c) 2018-2023 SCSM Pty Ltd. All rights reserved.
|
|
namespace SciFiShipController
|
|
{
|
|
[System.Serializable]
|
|
public class Squadron
|
|
{
|
|
#region Enumerations
|
|
|
|
/// <summary>
|
|
/// The Tactical shape of the formation
|
|
/// </summary>
|
|
public enum TacticalFormation
|
|
{
|
|
Vic = 0,
|
|
Wedge = 1,
|
|
Line = 2,
|
|
Column = 3,
|
|
StaggeredColumn = 4,
|
|
LeftEchelon = 5,
|
|
RightEchelon = 6
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region Public variables
|
|
|
|
// IMPORTANT - when changing this section also update SetClassDefault()
|
|
// Also update ClassName(ClassName className) Clone Constructor (if there is one)
|
|
|
|
/// <summary>
|
|
/// By default the squadronId is set to -1 to denote that it hasn't been set.
|
|
/// We "could" give it some hashed name to begin with in an attempt to create
|
|
/// unique names. We don't want to create a GUID because strings aren't useable in DOTS.
|
|
/// </summary>
|
|
public int squadronId;
|
|
public string squadronName;
|
|
|
|
// To be converted to int for DOTS
|
|
public TacticalFormation tacticalFormation;
|
|
|
|
/// <summary>
|
|
/// The prefab of the ship that will be instantiated
|
|
/// for squadron members. See also ShipSpawner.cs
|
|
/// </summary>
|
|
public GameObject shipPrefab;
|
|
|
|
/// <summary>
|
|
/// An optional reference to a player ship from the scene that can be placed
|
|
/// within a squadron. The player must already exist. If it doesn't,
|
|
/// a shipPrefab will be instantiated in its place.
|
|
/// See also ShipSpawner.cs
|
|
/// </summary>
|
|
public GameObject playerShip;
|
|
|
|
/// <summary>
|
|
/// The default TargetOffset for a camera following the ship
|
|
/// </summary>
|
|
public Vector3 cameraTargetOffset;
|
|
|
|
/// <summary>
|
|
/// The faction or alliance the squadron belongs to. This can be used to identify
|
|
/// if a squadron is friend or foe.
|
|
/// </summary>
|
|
public int factionId;
|
|
|
|
/// <summary>
|
|
/// The current members of this squadron. Stores the
|
|
/// shipId for each member which is a session-only
|
|
/// transform InstanceID.
|
|
/// </summary>
|
|
[System.NonSerialized] public List<int> shipList;
|
|
|
|
/// <summary>
|
|
/// Central "front" position of the squadron in worldspace
|
|
/// </summary>
|
|
public Vector3 anchorPosition;
|
|
|
|
/// <summary>
|
|
/// The direction the squadron is facing
|
|
/// </summary>
|
|
public Vector3 fwdDirection;
|
|
|
|
/// <summary>
|
|
/// The distance apart (centre to centre) ships should be spaced on the x-axis
|
|
/// </summary>
|
|
public float offsetX;
|
|
|
|
/// <summary>
|
|
/// The distance apart (centre to centre) ships should be spaced on the y-axis (up)
|
|
/// </summary>
|
|
public float offsetY;
|
|
|
|
/// <summary>
|
|
/// The distance apart (centre to centre) ships should be spaced on the z-axis
|
|
/// </summary>
|
|
public float offsetZ;
|
|
|
|
/// <summary>
|
|
/// (Max) Number of rows of ships on the x-axis. This will depend on the tactical formation type
|
|
/// </summary>
|
|
public int rowsX;
|
|
|
|
/// <summary>
|
|
/// (Max) Number of rows of ships on the y-axis. This will depend on the tactical formation type
|
|
/// This is used for 3-dimensional formations. Default is 1.
|
|
/// </summary>
|
|
public int rowsY;
|
|
|
|
/// <summary>
|
|
/// (Max) Number of rows of ships on the z-axis. This will depend on the tactical formation type
|
|
/// </summary>
|
|
public int rowsZ;
|
|
|
|
/// <summary>
|
|
/// Whether the squadron is shown as expanded in the inspector window of the editor.
|
|
/// </summary>
|
|
public bool showInEditor;
|
|
|
|
#endregion
|
|
|
|
#region Private variables
|
|
|
|
#endregion
|
|
|
|
#region Constructors
|
|
|
|
// Class constructor
|
|
public Squadron()
|
|
{
|
|
SetClassDefaults();
|
|
}
|
|
|
|
// Copy constructor
|
|
public Squadron(Squadron squadron)
|
|
{
|
|
if (squadron == null) { SetClassDefaults(); }
|
|
else
|
|
{
|
|
squadronId = squadron.squadronId;
|
|
squadronName = squadron.squadronName;
|
|
tacticalFormation = squadron.tacticalFormation;
|
|
shipPrefab = squadron.shipPrefab;
|
|
playerShip = squadron.playerShip;
|
|
cameraTargetOffset = squadron.cameraTargetOffset;
|
|
|
|
// As this is a list of value types, don't need to do a deep copy
|
|
if (squadron.shipList == null) { shipList = new List<int>(5); }
|
|
else { shipList = new List<int>(squadron.shipList); }
|
|
|
|
anchorPosition = squadron.anchorPosition;
|
|
fwdDirection = squadron.fwdDirection;
|
|
offsetX = squadron.offsetX;
|
|
offsetY = squadron.offsetY;
|
|
offsetZ = squadron.offsetZ;
|
|
|
|
rowsX = squadron.rowsX;
|
|
rowsY = squadron.rowsY;
|
|
rowsZ = squadron.rowsZ;
|
|
|
|
factionId = squadron.factionId;
|
|
showInEditor = squadron.showInEditor;
|
|
}
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region Private Methods
|
|
|
|
private void SetClassDefaults()
|
|
{
|
|
squadronId = -1; // NOT SET
|
|
squadronName = "no name";
|
|
tacticalFormation = TacticalFormation.Vic;
|
|
shipPrefab = null;
|
|
playerShip = null;
|
|
cameraTargetOffset = new Vector3(0f, 2f, -10f);
|
|
shipList = new List<int>(5);
|
|
anchorPosition = Vector3.zero;
|
|
fwdDirection = Vector3.forward;
|
|
offsetX = 50f;
|
|
offsetY = 100f;
|
|
offsetZ = 50f;
|
|
rowsX = 3;
|
|
rowsY = 1;
|
|
rowsZ = 3;
|
|
|
|
// By default, all Squadrons on the same faction/side/alliance.
|
|
factionId = 0;
|
|
|
|
showInEditor = true;
|
|
}
|
|
|
|
#endregion
|
|
}
|
|
} |