rabidus-test/Assets/SCSM/SciFiShipController/Scripts/AI/LocationData.cs

142 lines
4.8 KiB
C#
Raw Permalink Normal View History

2023-07-24 16:38:13 +03:00
// Sci-Fi Ship Controller. Copyright (c) 2018-2023 SCSM Pty Ltd. All rights reserved.
using System.Collections.Generic;
using UnityEngine;
namespace SciFiShipController
{
/// <summary>
/// Class to store location data. Should not include any location
/// manupulation code. Typically this would be in SSManager or
/// in a user-defined class. See also
/// SSCManager.AppendLocation(..)
/// </summary>
[System.Serializable]
public class LocationData
{
#region Public variables
// IMPORTANT When changing this section update:
// SetClassDefaults() and LocationData(LocationData locationData) clone constructor
/// <summary>
/// A user-defined optional name for the location e.g. Enemy Base
/// </summary>
public string name;
/// <summary>
/// The position in worldspace of the location
/// </summary>
public Vector3 position;
/// <summary>
/// The initial or starting position of Location. Used for moveable
/// Paths with ShipDockingStations at runtime.
/// </summary>
[System.NonSerialized] public Vector3 initialPosition;
/// <summary>
/// Unique identifier of the location
/// </summary>
public int guidHash;
/// <summary>
/// Whether the location is shown as expanded in the inspector window of the editor.
/// </summary>
public bool showInEditor;
/// <summary>
/// Whether the location is shown as selected in the scene view of the editor.
/// </summary>
public bool selectedInSceneView;
/// <summary>
/// Whether the gizmos for this location are shown in the scene view of the editor
/// </summary>
public bool showGizmosInSceneView;
/// <summary>
/// [INTERNAL USE ONLY] Indicates the location is not a member of the SSCManager
/// locationDataList. This can occur when an empty slot is created in a Path.
/// </summary>
public bool isUnassigned;
/// <summary>
/// The faction or alliance the Location belongs to. This can be used to identify if a Location is friend or foe.
/// Default (neutral) is 0
/// </summary>
public int factionId;
/// <summary>
/// The relative size of the blip for this Location on the Radar mini-map
/// </summary>
[Range(1,5)] public byte radarBlipSize;
/// <summary>
/// [INTERNAL USE ONLY] Instead, call sscManager.EnableRadar(..) or DisableRadar(..).
/// </summary>
public bool isRadarEnabled;
/// <summary>
/// [READONLY] The number used by the SSCRadar system to identify this Location at a point in time.
/// This should not be stored across frames and is updated as required by the system.
/// </summary>
public int RadarId { get { return radarItemIndex; } }
#endregion
#region Private variables
internal int radarItemIndex;
/// <summary>
/// [INTERNAL ONLY]
/// Use with sscManager.AddLocation(gameObject)
/// and sscManager.GetLocationByGameObjectID(id)
/// </summary>
internal int gameObjectInstanceId;
#endregion
#region Class Constructors
public LocationData()
{
SetClassDefaults();
}
// Copy constuctor
public LocationData(LocationData locationData)
{
if (locationData == null) { SetClassDefaults(); }
else
{
name = locationData.name;
position = locationData.position;
guidHash = locationData.guidHash;
showInEditor = locationData.showInEditor;
selectedInSceneView = locationData.selectedInSceneView;
showGizmosInSceneView = locationData.showGizmosInSceneView;
isUnassigned = locationData.isUnassigned;
isRadarEnabled = locationData.isRadarEnabled;
factionId = locationData.factionId;
radarBlipSize = locationData.radarBlipSize;
}
}
#endregion
#region Initialisation
private void SetClassDefaults()
{
name = string.Empty;
// Get a unique GUID then convert it to a hash for efficient non-GC access.
guidHash = SSCMath.GetHashCodeFromGuid();
position = Vector3.zero;
showInEditor = true;
selectedInSceneView = false;
showGizmosInSceneView = true;
isUnassigned = false;
isRadarEnabled = false;
radarItemIndex = -1;
factionId = 0;
radarBlipSize = 1;
gameObjectInstanceId = 0;
}
#endregion
}
}