Archives
Trending
Support
Login
clear text
XML
Django
JavaScript
MATLAB
C
C++
C#
Python
SQL
Shell
Bash
Markdown
YAML
JSON
HTML
CSS
PHP
Java
Ruby
Go
Rust
Swift
Kotlin
Arduino
TypeScript
Perl
Autohotkey
Lua
SQF
R
Scala
Haskell
Groovy
Dart
Clojure
VB.NET
Objective-C
PowerShell
Bash
CoffeeScript
Verilog
using System; using System.Collections; using GameFramework.Data; using UnityEngine; namespace GameFramework.GamePhases { ///
/// Base class for game phases in the game framework. ///
public abstract class GamePhaseBase { ///
/// The game context data for this game phase, containing all necessary information about the game state. ///
protected GameContextData Context { get; private set; } ///
/// The current phase of the game. ///
protected GamePhase CurrentPhase { get; private set; } ///
/// The last player who took an action in the game, if applicable. ///
protected GamePlayer LastPlayer { get; private set; } ///
/// The card data for the optionally selected card in this phase, if applicable. ///
protected CardData SelectedCard { get; private set; } ///
/// Action to be invoked when the current phase is completed, passing the next phase to transition to
/// and the last player who took action, if applicable. ///
protected Action
OnPhaseComplete; ///
/// Initializes the game phase with the provided context and current phase, and optional last player
/// and/or selected card. Runs the phase logic in the next frame, and when complete, runs the End method. ///
///
The game context data for this game. ///
The current phase of the game. ///
The action to complete upon ending this phase. ///
An optional GamePlayer last player variable indicating who took an action in the game. ///
An optional CardData object of a selected card. public IEnumerator Begin( GameContextData context, GamePhase currentPhase, Action
onPhaseComplete, GamePlayer lastPlayer = GamePlayer.None, CardData selectedCard = null ) { Context = context; CurrentPhase = currentPhase; OnPhaseComplete = onPhaseComplete; LastPlayer = lastPlayer; SelectedCard = selectedCard; // Allow phase to run in the next frame yield return RunPhaseLogic(); End(CurrentPhase, LastPlayer); } ///
/// Runs the logic for the current game phase. This method should be overridden in derived classes to implement specific phase behavior. ///
protected abstract IEnumerator RunPhaseLogic(); ///
/// Sets the last player that took an action. ///
///
The last player who took an action. public void SetLastPlayer(GamePlayer player) { LastPlayer = player; } ///
/// Sets the current game phase property. ///
///
The new game phase to set. public void SetPhase(GamePhase phase) { //Debug.LogWarning($"Setting phase to {phase} from {CurrentPhase}"); CurrentPhase = phase; } ///
/// Attempts to set the active state of a GameObject based on the provided boolean value.
/// Does not call SetActive method if current state matches requested
state. ///
///
The Unity GameObject to call SetActive upon. ///
The active state to set. public void TrySetActiveState(GameObject gameObject, bool isActive) { if (gameObject.activeSelf != isActive) { gameObject.SetActive(isActive); } } ///
/// Ends the current game phase and fires the OnPhaseComplete action supplied in the Begin method. ///
///
The next game phase proposed by this phase ending. ///
An optional GamePlayer last player variable indicating who took an action in the game. private void End(GamePhase nextPhase, GamePlayer lastPlayer) { OnPhaseComplete?.Invoke(nextPhase, lastPlayer); } } }
Mark as private (unlisted)
for 30 minutes
for 6 hours
for 1 day
for 1 week
for 1 month
for 1 year
everlasting (like CCCP)