Repository navigation
Documentatie
DaanDuits edited this page May 21, 2025
·
7 revisions
namespace FX.Enumerationpublic enum EEffectTypeParticle, // Een effect gebaseerd op particles, zoals vonken of rook
Audio // Een geluidseffect, zoals een explosie of klikgeluidnamespace FX.Enumerationpublic enum ETimingStartWithPrevious, // Start tegelijkertijd met het vorige effect
StartAfterPrevious // Start nadat het vorige effect is afgelopennamespace FXpublic class Effect// Het moment waarop het effect moet starten (tegelijk of na een ander)
public ETiming timing;
// Het type effect (particle of audio)
public EEffectType effectType;
// De ParticleSystem die afgespeeld wordt bij dit effect
public ParticleSystem particleSystem;
// Het audiobestand dat afgespeeld wordt bij een audio-effect
public AudioClip audioClip;
// De AudioSource die het audiobestand afspeelt
public AudioSource audioSource;
// Tijd (in seconden) voordat het effect gestart wordt
[SerializeField] private float delay;
// Wordt aangeroepen wanneer het effect begint
public UnityEvent onEffectStart;
// Wordt aangeroepen wanneer het effect eindigt
public UnityEvent onEffectEnd;
// Timer die de vertraging voor het starten van het effect regelt
private CountdownTimer _delayTimer;
// Timer die de totale duur van het effect bijhoudt
private CountdownTimer _timer;// Geeft de lengte (duur) van het effect terug op basis van het type
public float Length { get; }// Initialiseert de timers en voegt events toe
public void Initialize();
// Start het effect met vertraging
public void Play();
// Stopt het effect direct, afhankelijk van het type
public void Stop();
// Wordt aangeroepen wanneer de delay-timer eindigt, en speelt het effect af
private void PlayEffect();namespace FXpublic class FXSystem : MonoBehaviour// De lijst van effecten die dit systeem beheert
[SerializeField] private List<Effect> effects;
// Speel automatisch bij het starten van het spelobject
[SerializeField] private bool playOnStart;// Speelt het volgende batch van effecten af
public void Play();
// Stopt alle actieve effecten
public void Stop();namespace Multiplayerpublic class GameData : NetworkBehaviour// Singleton-instantie van GameData
public static GameData instance;
// De speler-ID van de speler die momenteel aan de beurt is
public NetworkVariable<ulong> currentPlayerTurn = new();// Wordt aangeroepen wanneer dit object gespawned wordt via Netcode
public override void OnNetworkSpawn();
// Zet de speler die als eerste aan de beurt is (alleen op de server)
private void InitializePlayerTurn();
// Wisselt naar de volgende speler in de lijst (alleen via server RPC)
[Rpc(SendTo.Server)]
public void SwitchPlayerTurnRpc();namespace (global namespace)public class PlayerInputHandler : NetworkBehaviour// Wordt aangeroepen bij het voltooien van het laden van een scène (alleen voor de eigenaar)
[Rpc(SendTo.Owner)]
private void OnLoadCompletedRpc(ulong _clientId, string _sceneName, LoadSceneMode _loadSceneMode);
// Coroutine die de input van de speler na één frame inschakelt
private IEnumerator EnablePlayerInput(PlayerInput _playerInput);namespace PlayerGridpublic class GridCell// Constructor die de positie en wereldpositie van de cel instelt
public GridCell(Vector2Int _position, Vector3 _worldPosition);// De cell-positie binnen het grid (in grid-coördinaten)
public Vector2Int position;
// De wereldpositie van deze gridcel
public Vector3 worldPosition;
// Of deze cel al bezet is door een schip
public bool isTaken;namespace PlayerGridpublic class GridHandler : NetworkBehaviour// De singleton-instantie van GridHandler
public static GridHandler instance
// De DashboardHandler voor het beheren van UI
[SerializeField] private DashboardHandler _dashboardHandler;
// GameData voor het regelen van game events
[SerializeField] private GameData gameData;
// De grote van het grid (breedte en hoogte)
public const byte gridSize; // const waarde: 10
// Het maximaal aantal schepen die geplaatst mogen worden
private const byte _maxShips; // const waarde: 5
// Het maximaal aantal mijnen die geplaatst mogen worden
private const byte _maxMines; // const waarde: 2
// Het grid van cellen
private GridCell[,] _grid;
// De cell waar de muis op staat
private GridCell _current;
// Een lijst van alle schepen op het grid
private UniqueList<ShipBehaviour> _ships = new UniqueList<ShipBehaviour>();
// De lagen waar het grid zich op bevindt
[SerializeField] private LayerMask interactionLayers;// Een event dat wordt aangeroepen wanneer het schip moet controlleren of de positie correct is
public UnityEvent<bool> OnValidate { get; private set; }
// Een event dat wordt aangeroepen wanneer de muis naar een nieuwe cell beweegt
public UnityEvent<Vector3> OnMove { get; private set; }
// Een event dat wordt aangeroepen wanneer de muis boven het grid hangt
public UnityEvent<bool> OnHover { get; private set; }
// Een event dat wordt aangeroepen om aan te geven of het grid af is
public UnityEvent<bool> OnIsReady { get; private set; }
// Een event dat wordt aangeroepen wanneer er wordt aangevallen door een raket
public UnityEvent<GridCell> OnAttacked { get; private set; }
// Een event dat wordt aangeroepen wanneer er een mijn wordt geplaatst
public UnityEvent<GridCell> OnMineSet { get; private set; }
// Het schip dat de juiste events aangeroepen krijgt wanneer hij geplaatst moet worden
public ShipBehaviour Ship { private get; set;}// Zorg ervoor dat alle rotatie input wordt gebonden
private void InitializeInput();
// Creëer het grid met alle cellen
private void InitializeGrid();
// zet de cel waar de muis over hangt
private void MoveOnGrid();
// Is de positie waar het schip nu staat mogelijk
private bool IsValidPosition();
// Plaats het huidige schip op het grid
public void Place();
// Haal het gevraagde schip van het grid af
public void Clear(ShipBehaviour _requestedShip);
// Controlleer of de target cell een treffer of misser is
[Rpc(SendTo.NotMe)]
public void CheckTargetCellRpc(byte _targetCell);
// Is de cel op de positie geraakt
public bool Hit(Vector2Int _position);
// Mijn treffer of misser
public void MineCallback(Vector2Int _target, bool _hit);
// Plaats een mijn op de gegeven target op de andere speler
[Rpc(SendTo.NotMe)]
public void PlaceMineRpc(byte _targetCell);
// Zorg ervoor dat schepen niet meer verplaatst kunnen worden
public void LockGrid();
// Krijg het schip op de gegeven cel
public ShipBehaviour ShipFromCell(GridCell _cell);
// Krijg het schip op de gegeven positie op het grid
public ShipBehaviour ShipFromPosition(Vector2Int _position);
// Krijg de wereld positie van een grid positie
public Vector3 CellWorldPosition(Vector2Int _cellPosition);
// Mag er nog een mijn geplaatst worden
public bool MineAllowed();namespace PlayerGrid[System.Serializable]
public class GridShape// Alle cellen die samen deze vorm maken
public Vector2Int[] offsets;// Krijg de index van de gegeven waarde
public int this[Vector2Int offset] { get; }// Draai de vorm rechtsom
public void RotateClockwise();
// Draai de vorm linksom
public void RotateCounterClockwise();
// bevat de vorm deze cell
public bool ContainsOffset(Vector2Int _offset);namespace SceneManagementpublic class SceneLoader : NetworkBehaviour// De singleton-instantie van SceneLoader
public static SceneLoader instance;
// Laad de scene op start
public bool loadOnStart;
// De scene om te laden
public string sceneToLoad;
// Moet de scene op het netwerk geladen worden
public bool isNetworked;
// De scene om terug te laden als iets fout gaat
public string fallbackScene;
// De extra tijd die het duurt om te laden
public float loadDelay;// Laad de scene op het netwerk of lokaal
public void LoadScene(string _sceneName, bool _isNetworked);
// Laad de scene op het netwerk of lokaal met een vertraging
public void LoadScene(string _sceneName, bool _isNetworked, float _loadDelay);
// Laad de scene lokaal direct
public void LoadScene(string _scene);namespace ShipAttackers.Datapublic struct AttackerData// Constructor die de posities instelt
public AttackerData(Vector2Int _gridPosition, Vector3 _startPosition);// De positie van de attacker in grid-coördinaten
public Vector2Int GridPosition { get; private set; }
// De eind positie van de attacker in wereld-coördinaten
public Vector3 EndPosition { get; set; }
// De begin positie van de attacker in wereld-coördinaten
public Vector3 StartPosition { get; private set; }namespace ShipAttackers.Missilepublic class MissileAttackHandler : ShipAttackerHandler<MissileBehaviour>namespace ShipAttackers.Missilepublic class MissileBehaviour : ShipAttacker// De start positie van de raket
[SerializeField] private Vector3 startPosition;
// De afstand wanneer een treffer wordt geregristreerd
[SerializeField][Range(0f, 1f)] private float hitDistance;
// De boog van de raket
[SerializeField] private AnimationCurve heightCurve;
// De hoogte van de raket
[SerializeField] private float heightMultiplier;
// De snelheid van de raket
[SerializeField] private float speed;// Initialiseer de data van de raket
public override void Initialize(GridCell _cell);
// Beweeg de raket over de boog
private void Move();
// Draai de raket over de boog
private void Rotate();namespace ShipAttackers.Minepublic class NavalMineBehaviour : ShipAttacker// De begin hoogte van de mijn
[SerializeField] private float startHeight;
// De richting waar de mijn begint te controleren
[SerializeField] private ECompassDirection startDirection;
// De tijd die het duurt voor de mijn om naar boven te drijven
[SerializeField] private float floatCooldown;// Initialiseer de data van de mijn
public override void Initialize(GridCell _cell);
// Val een punt op het grid aan of ontmantel de mijn
private void DismantleOrExplode();namespace ShipAttackers.Minepublic class NavalMineHandler : ShipAttackerHandler<NavalMineBehaviour>// De DashboardHandler voor UI events
[SerializeField] private DashboardHandler dashboardHandler;// Voeg een mijn toe aan het grid
public void AddMine(GridCell _cell);
// Plaats alle mijnen in de wereld
public void PlaceMines();namespace ShipAttackerspublic abstract class ShipAttacker : MonoBehaviour// De FX die worden neergezet wanneer de attacker mist
[SerializeField] protected FXSystem missFxPrefab;
// De data met alle benodigde posities
protected AttackerData data;// De positie in grid-coördinaten die aangevallen wordt
public Vector2Int AttackPosition { get; set; }
// Het schip dat wordt aangevallen
public ShipBehaviour Ship { get; }// Initialiseer de data van de attacker
public virtual void Initialize(GridCell _cell);
// Genereer de mis effecten
protected void Miss();
// Val de positie aan
protected virtual bool Attack();namespace ShipAttackerspublic abstract class ShipAttackerHandler<T> : MonoBehaviour where T : ShipAttacker// De prefab van de attacker
[SerializeField] protected T attackerPrefab;// Creëert een nieuwe attacker
protected T SpawnAttacker();
// Val de gegeven cell aan
protected virtual void AttackCell(GridCell _cell);namespace Shipspublic enum EShipSchiedam,
VanAmstel,
VanSpeijk,
DeRuyter,
JohanDeWittnamespace Ships[RequireComponent(typeof(MeshRenderer), typeof(MeshFilter))]
public class PlacingIndicator : MonoBehaviour// De dikte van het frame
[SerializeField] private float thickness = 1;
// De breedte van het frame
[SerializeField] private float width = 1;
// De hoogte van het frame
[SerializeField] private float depth = 1;
// De material van het actieve en inactieve frame
[SerializeField] private Material active, inactive;// Zet de components
public void Initialize();
// Genereer de mesh van het frame
public void GenerateMesh();
// Zet het frame actief
public void SetActive();
// Zet het frame inactief
public void SetInactive();namespace Shipspublic class ShipBehaviour : MonoBehaviour// De vorm van het schip
public GridShape shape;
// Gevuurd waaneer het schip is geplaatst
public UnityEvent onPlace;
// Gevuurd wanneer het schip wordt ingedrukt
public UnityEvent onClick;
// Gevuurd wanneer het schip begint met bewegen
public UnityEvent onStartMove;
// Kan dit schip mijnen ontmantellen
public bool dismantleMines;
// De grid positie van dit schip
public Vector2Int position;
// De treffer effecten van dit schip
[SerializeField] private FXSystem[] effects;
// De plaats indicator van dit schip
[SerializeField] private PlacingIndicator indicator;
// De animator van dit schip
[SerializeField] private Animator animator;// Gevuurd wanneer het schip van het grid wordt gehaald
public UnityEvent<ShipBehaviour> OnClear { get; private set; } = new UnityEvent<ShipBehaviour>();
// Gevuurd wanneer het schip zinkt
public UnityEvent OnSink { get; private set; } = new UnityEvent();namespace Shipspublic class ShipPlacer : MonoBehaviour// De schepen die geplaatst kunnen worden
[SerializeField] private ShipBehaviour[] ships;// Word er een schip geplaatst
public bool IsPlacing { get; private set; } = false;
// Gevuurd wanneer het schip geplaatst is
public UnityEvent DonePlacing { get; private set; } = new UnityEvent();// Plaats een schip met het gegeven type
public void PlaceShip(EShip ship);namespace ShipSinkpublic class ShipSink : StateMachineBehaviour// Gevuurd wanneer het schip begint met zinken
public UnityEvent OnStartSink { get; private set; } = new UnityEvent();
// Gevuurd wanneer het schip stopt met zinken
public UnityEvent OnEndSink { get; private set; } = new UnityEvent();namespace UIHandlers[RequireComponent(typeof(UIDocument))]
public class DashboardHandler : NetworkBehaviour// Gevuurd wanneer de speler klaar is
public UnityEvent onReady;
// Gevuurd wannneer het spel begint
public UnityEvent onGameStart;
// De scene om te laden
[SerializeField] private string loadingScene;
// De Gridhandler voor aanval events
[SerializeField] private GridHandler _gridHandler;
// De ShipPlacer voor het plaatsen van schepen
[SerializeField] private ShipPlacer _shipPlacer;
// De code text
[SerializeField] private TMP_Text _sessionCodeText;
// De knop om de code te kopiëren
[SerializeField] private UnityEngine.UI.Button _copySessionCode;
// De ids van alle schepen
[SerializeField] private string[] shipIds;
// De knop om de sessie te verlaten
[SerializeField] private UnityEngine.UI.Button _leaveSessionButton;
// De groote van het grid (breedte en hoogte)
private const byte GridSize; // const waarde: GridHandler.gridSize
// Het maximaal aantal spelers
private const byte PlayerCount; // const waarde: 2// Zet de grid knop als een treffer
public void OnHitRpc(byte _targetCell);
// Zet de grid knop als een misser
public void OnMissRpc(byte _targetCell);namespace UIHandlers[RequireComponent(typeof(UIDocument))]
public class MenuHandler : MonoBehaviour// De scene om te laden
[SerializeField] private string loadingScene;
// De snel spelen knop widget
[SerializeField] private UnityEngine.UI.Button quickPlayButton;
// Het code veld widget
[SerializeField] private TMP_InputField playCodeInputField;
// De speel knop widget
[SerializeField] private UnityEngine.UI.Button playCodeButton;namespace Utilities.CompassDirectionspublic struct CompassDirections// De hoeveelhijd richtingen
public const byte Directions; // const waarde: 8// Krijg de vector van een richting
public static Vector2Int DirectionToVector(ECompassDirection direction);
// Krijg de richting van een vector
public static ECompassDirection VectorToDirection(Vector2Int direction);
// Draai de richting rechtsom
public static ECompassDirection RotateClockwise(ECompassDirection direction);
// Draai de richting rechtsom
public static Vector2Int RotateClockwiseVector2Int(ECompassDirection direction);
// Draai de richting linksom
public static ECompassDirection RotateCounterclockwise(ECompassDirection direction);
// Draai de vector linksom
public static Vector2Int RotateCounterclockwiseVector2Int(ECompassDirection direction);namespace Utilities.CompassDirectionspublic enum ECompassDirection : byteNorth,
NorthEast,
East,
SouthEast,
South,
SouthWest,
West,
NorthWestnamespace Utilities.Genericpublic class UniqueList<T>public UniqueList(IEqualityComparer<T> _comparer = null);// Krtijg de grootte van de lijst
public int Count { get; }
// Krijf/Zet een item in de lijst
public T this[int t] { get; set; }// Voeg een nieuw item toe als die nog niet in de list staat
public bool Add(T _item);
// Verwijder de item uit de lijst
public bool Remove(T _item);namespace Utilities.Timerpublic class CountdownTimer : Timer// Is de timer klaar
public bool IsFinished { get; }// Progres de timer met deltaTime
public override void Tick(float deltaTime);
// Reset de timer naar de originele tijd
public void Reset();
// Reset de timer naar de nieuwe tijd
public void Reset(float newTime);namespace Utilities.Timerpublic abstract class Timer// Creëer eem nieuwe timer met value als eind tijd
public Timer(float value);// De start tijd van de timer
protected float initialTime;
// De actie wanneer de timer start
public UnityAction onTimerStart = () => { };
// De actie wanneer de timer stopt
public UnityAction onTimerStop = () => { };// De totale tijd van de timer
protected float Time { get; set; }
// Is de timer nu aan het tellen
public bool IsRunning { get; protected set; }
// De voortgang van de timer
public float Progress { get; };// Start de timer
public void Start();
// Stop de timer
public void Stop();
// Hervat de timer
public void Resume();
// Pauzeer de timer
public void Pause();
// Een abstracte functie die wordt geroepen wanneer de timer voort gaat
public abstract void Tick(float deltaTime);namespace Utilities.Timerpublic class TimerHandler : MonoBehaviour// De singleton-instantie van de TimerHandler
public static TimerHandler instance;// De actie die in Update wordt aangeroepen
public UnityAction<float> onTick { get; }namespace Utilitiespublic struct CellUnpacker// Krijg de cels positie als grid-coördinaat
public static Vector2Int CellPosition(byte cell);
// Krijg de cels index in het dashboard
public static byte PackCell(Vector2Int position);