diff --git a/Assets/QuantumUser/Simulation/Battle/Qtn/Player/BattlePlayerInput.qtn b/Assets/QuantumUser/Simulation/Battle/Qtn/Player/BattlePlayerInput.qtn
index 2eb70bf17..dbe0da8e9 100644
--- a/Assets/QuantumUser/Simulation/Battle/Qtn/Player/BattlePlayerInput.qtn
+++ b/Assets/QuantumUser/Simulation/Battle/Qtn/Player/BattlePlayerInput.qtn
@@ -4,14 +4,10 @@ input
int DebugNumber;
BattleMovementInputType MovementInput;
bool MovementDirectionIsNormalized;
- BattleGridPosition MovementPositionTarget;
- FPVector2 MovementPositionMove;
- FPVector2 MovementDirection;
+ BattleGridPosition MovementGridPosition;
+ FPVector2 MovementVector;
bool RotationInput;
FP RotationValue;
- bool AbilityActivate;
- int PlayerCharacterNumber;
- bool GiveUpInput;
BattleSpecialInput Special;
}
diff --git a/Assets/QuantumUser/Simulation/Battle/Scripts/BattleDebugUtils.cs b/Assets/QuantumUser/Simulation/Battle/Scripts/BattleDebugUtils.cs
index b08b042e2..a2282b4ee 100644
--- a/Assets/QuantumUser/Simulation/Battle/Scripts/BattleDebugUtils.cs
+++ b/Assets/QuantumUser/Simulation/Battle/Scripts/BattleDebugUtils.cs
@@ -67,24 +67,6 @@ public static InputDebugInfo GenerateDebugInfo(Input* input)
inputDebugSummary += "Rotate";
inputNotEmpty = true;
}
- if (input->AbilityActivate != false)
- {
- if (inputDebugSummary != "") inputDebugSummary += ", ";
- inputDebugSummary += "Ability Activate";
- inputNotEmpty = true;
- }
- if (input->PlayerCharacterNumber > -1)
- {
- if (inputDebugSummary != "") inputDebugSummary += ", ";
- inputDebugSummary += "Character Swap";
- inputNotEmpty = true;
- }
- if (input->GiveUpInput != false)
- {
- if (inputDebugSummary != "") inputDebugSummary += ", ";
- inputDebugSummary += "Give Up";
- inputNotEmpty = true;
- }
if (inputNotEmpty)
{
@@ -95,24 +77,16 @@ public static InputDebugInfo GenerateDebugInfo(Input* input)
" MovementInput: {0},\n" +
" MovementDirectionIsNormalized: {1},\n" +
" MovementPositionTarget: {2},\n" +
- " MovementPositionMove: {3},\n" +
- " MovementDirection: {4},\n" +
- " RotationInput: {5},\n" +
- " RotationValue: {6},\n" +
- " AbilityActivate: {7},\n" +
- " PlayerCharacterNumber: {8},\n" +
- " GiveUpInput: {9}\n" +
+ " MovementVector: {3},\n" +
+ " RotationInput: {4},\n" +
+ " RotationValue: {5},\n" +
"}}",
input->MovementInput,
input->MovementDirectionIsNormalized,
- input->MovementPositionTarget.ConvertToString(),
- input->MovementPositionMove,
- input->MovementDirection,
+ input->MovementGridPosition.ConvertToString(),
+ input->MovementVector,
input->RotationInput,
- input->RotationValue,
- input->AbilityActivate,
- input->PlayerCharacterNumber,
- input->GiveUpInput
+ input->RotationValue
)
);
}
diff --git a/Assets/QuantumUser/Simulation/Battle/Scripts/Game/BattleCommands.cs b/Assets/QuantumUser/Simulation/Battle/Scripts/Game/BattleCommands.cs
new file mode 100644
index 000000000..e15667b6b
--- /dev/null
+++ b/Assets/QuantumUser/Simulation/Battle/Scripts/Game/BattleCommands.cs
@@ -0,0 +1,119 @@
+/// @file BattleCommands.cs
+///
+/// Contains @cref{Battle.QSimulation.Game,BattleCommand} class and all battle commands
+///
+/// See [{Custom Quantum Commands}](#page-concepts-commands) for more info.
+///
+
+// System usings
+using System.Runtime.CompilerServices;
+
+// Quantum usings
+using Quantum;
+using Photon.Deterministic;
+
+namespace Battle.QSimulation.Game
+{
+ ///
+ /// Abstract base class for all deterministic battle commands.
+ /// All new commands must be added to the enum.
+ ///
+ ///
+ /// See [{BattleCommand (base class)}](#page-concepts-commands-battle-qcommand) for more info.
+ public abstract class BattleCommand : DeterministicCommand
+ {
+ ///
+ /// Type of the command. None if no command.
+ ///
+ public enum Type
+ {
+ /// No command
+ None,
+ ///
+ GiveUp,
+ ///
+ ActivateAbility,
+ ///
+ SwapCharacter
+ }
+
+ public override void Serialize(BitStream stream) { }
+
+ public abstract Type BattleCommandType { get; }
+
+ ///
+ /// Fetches a command for a and returns its . The out parameter contains the command itself.
+ ///
+ ///
+ /// The current simulation frame.
+ /// Reference to the player whose command is fetched.
+ /// Contains the command, or null if there isn't one. (out param)
+ ///
+ ///
+ /// The of the command, or if no command was found.
+ ///
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
+ public static Type GetCommand(Frame f, PlayerRef playerRef, out BattleCommand commandData)
+ {
+ commandData = (BattleCommand)f.GetPlayerCommand(playerRef);
+ if (commandData == null) return Type.None;
+ return commandData.BattleCommandType;
+ }
+ }
+
+ ///
+ /// A deterministic command that triggers the ability activation for a specific player.
+ ///
+ ///
+ /// See [{Custom Quantum Commands}](#page-concepts-commands) for more info.
+ public class BattleCharacterAbilityQCommand : BattleCommand
+ {
+ ///
+ /// Gets the command Type associated with this command.
+ /// Always returns Type.ActivateAbility.
+ ///
+ public override Type BattleCommandType => Type.ActivateAbility;
+ }
+
+ ///
+ /// A deterministic command that triggers the character swapping logic for a specific player.
+ ///
+ ///
+ /// See [{Custom Quantum Commands}](#page-concepts-commands) for more info.
+ public class BattleCharacterSwapQCommand : BattleCommand
+ {
+ ///
+ /// Gets the command Type associated with this command.
+ /// Always returns Type.SwapCharacter.
+ ///
+ public override Type BattleCommandType => Type.SwapCharacter;
+
+ ///
+ /// The number of the character the player is attempting to swap to.
+ ///
+ public int CharacterNumber;
+
+ ///
+ /// Serializes the character number into the bitstream for network transmission.
+ ///
+ /// The bitstream to write to
+ public override void Serialize(BitStream stream)
+ {
+ stream.Serialize(ref CharacterNumber);
+ }
+ }
+
+ ///
+ /// A deterministic command that triggers the give up logic for a specific player.
+ ///
+ ///
+ /// See [{Custom Quantum Commands}](#page-concepts-commands) for more info.
+ public class BattleGiveUpQCommand : BattleCommand
+ {
+ ///
+ /// Gets the command Type associated with this command.
+ /// Always returns Type.GiveUp.
+ ///
+ public override Type BattleCommandType => Type.GiveUp;
+ }
+}
diff --git a/Assets/QuantumUser/Simulation/Battle/Scripts/Game/BattleCommands.cs.meta b/Assets/QuantumUser/Simulation/Battle/Scripts/Game/BattleCommands.cs.meta
new file mode 100644
index 000000000..9cb8edac0
--- /dev/null
+++ b/Assets/QuantumUser/Simulation/Battle/Scripts/Game/BattleCommands.cs.meta
@@ -0,0 +1,11 @@
+fileFormatVersion: 2
+guid: e2a770b1a1492384dba77cd0746538a4
+MonoImporter:
+ externalObjects: {}
+ serializedVersion: 2
+ defaultReferences: []
+ executionOrder: 0
+ icon: {instanceID: 0}
+ userData:
+ assetBundleName:
+ assetBundleVariant:
diff --git a/Assets/QuantumUser/Simulation/Battle/Scripts/Player/BattlePlayerBotController.cs b/Assets/QuantumUser/Simulation/Battle/Scripts/Player/BattlePlayerBotController.cs
index 76038fda9..067934558 100644
--- a/Assets/QuantumUser/Simulation/Battle/Scripts/Player/BattlePlayerBotController.cs
+++ b/Assets/QuantumUser/Simulation/Battle/Scripts/Player/BattlePlayerBotController.cs
@@ -167,14 +167,10 @@ public static void GetBotInput(Frame f, bool isInPlay, BattlePlayerDataQComponen
IsValid = true,
MovementInput = movementInput,
MovementDirectionIsNormalized = false,
- MovementPositionTarget = predictedGridPosition,
- MovementPositionMove = FPVector2.Zero,
- MovementDirection = FPVector2.Zero,
+ MovementGridPosition = predictedGridPosition,
+ MovementVector = FPVector2.Zero,
RotationInput = false,
- RotationValue = FP._0,
- PlayerCharacterNumber = -1,
- GiveUpInput = false,
- AbilityActivate = false
+ RotationValue = FP._0
};
}
}
diff --git a/Assets/QuantumUser/Simulation/Battle/Scripts/Player/BattlePlayerMovementController.cs b/Assets/QuantumUser/Simulation/Battle/Scripts/Player/BattlePlayerMovementController.cs
index bc3454885..c86a68064 100644
--- a/Assets/QuantumUser/Simulation/Battle/Scripts/Player/BattlePlayerMovementController.cs
+++ b/Assets/QuantumUser/Simulation/Battle/Scripts/Player/BattlePlayerMovementController.cs
@@ -93,13 +93,13 @@ public static void UpdateMovement(Frame f, BattlePlayerDataQComponent* playerDat
break;
case BattleMovementInputType.PositionTarget:
- ClampGridPosition(playerData, input->MovementPositionTarget, out playerData->TargetPosition);
+ ClampGridPosition(playerData, input->MovementGridPosition, out playerData->TargetPosition);
playerData->HasTargetPosition = true;
playerData->ViewPosition = playerData->TargetPosition;
break;
case BattleMovementInputType.PositionMove:
- positionNext = FPVector2.MoveTowards(transform->Position, input->MovementPositionMove, playerData->Stats.Speed * f.DeltaTime);
+ positionNext = FPVector2.MoveTowards(transform->Position, input->MovementVector, playerData->Stats.Speed * f.DeltaTime);
if (ClampAndSnapWorldPosition(playerData, positionNext, out FPVector2 clampedNext))
{
positionNext = clampedNext;
@@ -108,7 +108,7 @@ public static void UpdateMovement(Frame f, BattlePlayerDataQComponent* playerDat
break;
case BattleMovementInputType.Direction:
- FPVector2 movementDirection = input->MovementDirection * (input->MovementDirectionIsNormalized ? playerData->Stats.Speed : FP._1);
+ FPVector2 movementDirection = input->MovementVector * (input->MovementDirectionIsNormalized ? playerData->Stats.Speed : FP._1);
positionNext = transform->Position + FPVector2.ClampMagnitude(movementDirection, playerData->Stats.Speed) * f.DeltaTime;
if (ClampAndSnapWorldPosition(playerData, positionNext, out FPVector2 clampedPosition))
{
diff --git a/Assets/QuantumUser/Simulation/Battle/Scripts/Player/BattlePlayerQSystem.cs b/Assets/QuantumUser/Simulation/Battle/Scripts/Player/BattlePlayerQSystem.cs
index 2ddac4284..612cc519b 100644
--- a/Assets/QuantumUser/Simulation/Battle/Scripts/Player/BattlePlayerQSystem.cs
+++ b/Assets/QuantumUser/Simulation/Battle/Scripts/Player/BattlePlayerQSystem.cs
@@ -92,7 +92,9 @@ public static void OnProjectileHitPlayerCharacter(Frame f, BattleCollisionQSyste
BattleEmotionState.Joy => SoundEffectTypeCommon.HitCharacterJoy,
BattleEmotionState.Love => SoundEffectTypeCommon.HitCharacterLove,
BattleEmotionState.Playful => SoundEffectTypeCommon.HitCharacterPlayful,
- BattleEmotionState.Sadness => SoundEffectTypeCommon.HitCharacterSadness
+ BattleEmotionState.Sadness => SoundEffectTypeCommon.HitCharacterSadness,
+
+ _ => throw new System.NotImplementedException()
};
HandleSFXCommon(f, damagedPlayerData->Slot, soundEffectType, SoundEffectTarget.All);
}
@@ -194,7 +196,7 @@ public static void OnProjectileHitPlayerShield(Frame f, BattleCollisionQSystem.P
///
/// Update method has been split into subprocesses.
/// see @cref{BattlePlayerQSystem,GetInput}
- /// see @cref{BattlePlayerQSystem,HandleGiveUpInput}
+ /// see @cref{BattlePlayerQSystem,HandleGiveUp}
/// see @cref{BattlePlayerQSystem,HandleCharacterSwapping}
/// see @cref{BattlePlayerQSystem,HandleOutOfPlay}
/// see @cref{BattlePlayerQSystem,HandleInPlay}
@@ -224,10 +226,27 @@ public override void Update(Frame f)
playerTransform = playerEntity.GetTransform(f);
}
+ switch (BattleCommand.GetCommand(f, playerData->PlayerRef, out BattleCommand commandData))
+ {
+ case BattleCommand.Type.None:
+ break;
+
+ case BattleCommand.Type.GiveUp:
+ if (HandleGiveUp(f, playerHandle)) continue;
+ break;
+
+ case BattleCommand.Type.ActivateAbility:
+ playerData->AbilityActivateBufferSec = FrameTimer.FromSeconds(f, FP._0_50);
+ break;
+
+ case BattleCommand.Type.SwapCharacter:
+ BattleCharacterSwapQCommand swapCharacterData = (BattleCharacterSwapQCommand)commandData;
+ if (HandleCharacterSwapping(f, playerHandle, swapCharacterData.CharacterNumber)) continue;
+ break;
+ }
+
input = GetInput(f, playerHandle, playerData, &stackInputStorage);
- if (HandleGiveUpInput(f, input, playerHandle)) continue;
- if (HandleCharacterSwapping(f, input, playerHandle)) continue;
if (HandleOutOfPlay(f, playerHandle)) continue;
HandleInPlay(f, input, playerHandle, playerData, playerEntity, playerTransform);
@@ -327,16 +346,13 @@ private enum SoundEffectTarget
input = stackInputStorage;
*stackInputStorage = new Input
{
+ IsValid = true,
MovementInput = BattleMovementInputType.None,
MovementDirectionIsNormalized = false,
- MovementPositionTarget = new BattleGridPosition { Col = 0, Row = 0 },
- MovementPositionMove = FPVector2.Zero,
- MovementDirection = FPVector2.Zero,
+ MovementGridPosition = new BattleGridPosition { Col = 0, Row = 0 },
+ MovementVector = FPVector2.Zero,
RotationInput = false,
RotationValue = FP._0,
- PlayerCharacterNumber = -1,
- GiveUpInput = false,
- AbilityActivate = false
};
}
@@ -344,13 +360,15 @@ private enum SoundEffectTarget
}
///
- /// Private helper method for handling when a player gives up or abandons the match.
+ /// Private helper method for handling when a player wants to give up or has abandoned the match.
///
///
/// Used by HandleGiveUpInput and HandlePlayerAbandoned.
///
/// Current simulation frame.
/// Handle of the player.
+ ///
+ /// True if all players on a team have given up.
private static bool HandleGiveUpLogic(Frame f, BattlePlayerManager.PlayerHandle playerHandle)
{
BattlePlayerSlot slot = playerHandle.Slot;
@@ -455,21 +473,18 @@ private static void HandleSFXCharacter(Frame f, BattlePlayerSlot slot, SoundEffe
}
///
- /// Private helper method for handling player input for giving up during the game play.
- /// Subprocess of the Update method.
+ /// Private helper method for handling player give up command.
+ /// Subprocess of Update method.
///
///
/// Updates give up state and calls HandleGiveUpLogic method which handles the rest of the logic.
///
/// Current simulation frame.
- /// Pointer to the player's input data.
/// Handle of the player.
///
- /// True if the give up input was processed.
- private bool HandleGiveUpInput(Frame f, Input* input, BattlePlayerManager.PlayerHandle playerHandle)
+ /// True if all players on a team have given up.
+ private bool HandleGiveUp(Frame f, BattlePlayerManager.PlayerHandle playerHandle)
{
- if (!input->GiveUpInput) return false;
-
playerHandle.GiveUpState = !playerHandle.GiveUpState;
s_debugLogger.LogFormat(f, "({0}) Give up input received, new state: {1}", playerHandle.Slot, playerHandle.GiveUpState);
@@ -479,17 +494,16 @@ private bool HandleGiveUpInput(Frame f, Input* input, BattlePlayerManager.Player
///
/// Private helper method for handling character swapping.
- /// Subprocess of the Update method.
+ /// Subprocess of Update method.
///
///
/// Current simulation frame.
- /// Pointer to the player's input data.
/// Handle of the player.
///
- /// True if character swapped.
- private bool HandleCharacterSwapping(Frame f, Input* input, BattlePlayerManager.PlayerHandle playerHandle)
+ /// True if character was swapped.
+ private bool HandleCharacterSwapping(Frame f, BattlePlayerManager.PlayerHandle playerHandle, int playerCharacterNumber)
{
- if (input->PlayerCharacterNumber < 0) return false;
+ if (playerCharacterNumber == playerHandle.SelectedCharacterNumber) return false;
s_debugLogger.LogFormat(f, "({0}) Character swap input received", playerHandle.Slot);
@@ -499,10 +513,9 @@ private bool HandleCharacterSwapping(Frame f, Input* input, BattlePlayerManager.
return false;
}
- s_debugLogger.LogFormat(f, "({0}) Swapping to character number: {1}", playerHandle.Slot, input->PlayerCharacterNumber);
-
- BattlePlayerManager.SpawnPlayer(f, playerHandle.Slot, input->PlayerCharacterNumber);
+ s_debugLogger.LogFormat(f, "({0}) Swapping to character number: {1}", playerHandle.Slot, playerCharacterNumber);
+ BattlePlayerManager.SpawnPlayer(f, playerHandle.Slot, playerCharacterNumber);
return true;
}
@@ -567,11 +580,6 @@ private void HandleInPlay(Frame f, Input* input, BattlePlayerManager.PlayerHandl
bool updateMovement = true;
- if (input->AbilityActivate)
- {
- playerData->AbilityActivateBufferSec = FrameTimer.FromSeconds(f, FP._0_50);
- }
-
if (!playerData->AbilityCooldownSec.IsRunning(f) && playerData->AbilityActivateBufferSec.IsRunning(f))
{
AbilityActivate(f, playerData, playerTransform);
diff --git a/Assets/QuantumUser/Simulation/CommandSetup.User.cs b/Assets/QuantumUser/Simulation/CommandSetup.User.cs
index cdd0c1f05..6088f323e 100644
--- a/Assets/QuantumUser/Simulation/CommandSetup.User.cs
+++ b/Assets/QuantumUser/Simulation/CommandSetup.User.cs
@@ -1,14 +1,39 @@
-namespace Quantum
-{
- using System.Collections.Generic;
- using Photon.Deterministic;
+/// @file CommandSetup.User.cs
+///
+/// Contains @cref{Quantum,DeterministicCommandSetup} class contains all project-specific commands.
+///
+
+// System usings
+using System.Collections.Generic;
+
+// Quantum usings
+using Photon.Deterministic;
+// Battle QSimulation usings
+using Battle.QSimulation.Game;
+
+namespace Quantum
+{
+ ///
+ /// Contains all project-specific commands.
+ ///
public static partial class DeterministicCommandSetup
{
+ ///
+ /// Registers the game's custom instances with
+ /// the %Quantum command system. Called once during the simulation initialization.
+ /// @warning
+ /// This method should only be called by Quantum.
+ ///
+ ///
+ /// The command factory collection to register commands into
+ /// The runtime game configuration for the current session
+ /// The simulation configuration for the current session
static partial void AddCommandFactoriesUser(ICollection factories, RuntimeConfig gameConfig, SimulationConfig simulationConfig)
{
- // Add or remove commands to the collection.
- // factories.Add(new NavMeshAgentTestSystem.RunTest());
+ factories.Add(new BattleGiveUpQCommand());
+ factories.Add(new BattleCharacterSwapQCommand());
+ factories.Add(new BattleCharacterAbilityQCommand());
}
}
-}
\ No newline at end of file
+}
diff --git a/Assets/QuantumUser/Simulation/Generated/Quantum.CodeGen.Core.cs b/Assets/QuantumUser/Simulation/Generated/Quantum.CodeGen.Core.cs
index d7dca043a..64449761e 100644
--- a/Assets/QuantumUser/Simulation/Generated/Quantum.CodeGen.Core.cs
+++ b/Assets/QuantumUser/Simulation/Generated/Quantum.CodeGen.Core.cs
@@ -1144,33 +1144,25 @@ public static void Serialize(void* ptr, FrameSerializer serializer) {
}
[StructLayout(LayoutKind.Explicit)]
public unsafe partial struct Input {
- public const Int32 SIZE = 104;
+ public const Int32 SIZE = 80;
public const Int32 ALIGNMENT = 8;
- [FieldOffset(20)]
+ [FieldOffset(8)]
public QBoolean IsValid;
[FieldOffset(4)]
public Int32 DebugNumber;
[FieldOffset(0)]
public BattleMovementInputType MovementInput;
- [FieldOffset(24)]
+ [FieldOffset(12)]
public QBoolean MovementDirectionIsNormalized;
- [FieldOffset(32)]
- public BattleGridPosition MovementPositionTarget;
- [FieldOffset(64)]
- public FPVector2 MovementPositionMove;
- [FieldOffset(48)]
- public FPVector2 MovementDirection;
- [FieldOffset(28)]
- public QBoolean RotationInput;
+ [FieldOffset(20)]
+ public BattleGridPosition MovementGridPosition;
[FieldOffset(40)]
- public FP RotationValue;
- [FieldOffset(12)]
- public QBoolean AbilityActivate;
- [FieldOffset(8)]
- public Int32 PlayerCharacterNumber;
+ public FPVector2 MovementVector;
[FieldOffset(16)]
- public QBoolean GiveUpInput;
- [FieldOffset(80)]
+ public QBoolean RotationInput;
+ [FieldOffset(32)]
+ public FP RotationValue;
+ [FieldOffset(56)]
public BattleSpecialInput Special;
public override Int32 GetHashCode() {
unchecked {
@@ -1179,14 +1171,10 @@ public override Int32 GetHashCode() {
hash = hash * 31 + DebugNumber.GetHashCode();
hash = hash * 31 + (Int32)MovementInput;
hash = hash * 31 + MovementDirectionIsNormalized.GetHashCode();
- hash = hash * 31 + MovementPositionTarget.GetHashCode();
- hash = hash * 31 + MovementPositionMove.GetHashCode();
- hash = hash * 31 + MovementDirection.GetHashCode();
+ hash = hash * 31 + MovementGridPosition.GetHashCode();
+ hash = hash * 31 + MovementVector.GetHashCode();
hash = hash * 31 + RotationInput.GetHashCode();
hash = hash * 31 + RotationValue.GetHashCode();
- hash = hash * 31 + AbilityActivate.GetHashCode();
- hash = hash * 31 + PlayerCharacterNumber.GetHashCode();
- hash = hash * 31 + GiveUpInput.GetHashCode();
hash = hash * 31 + Special.GetHashCode();
return hash;
}
@@ -1208,22 +1196,18 @@ static partial void SerializeCodeGen(void* ptr, FrameSerializer serializer) {
var p = (Input*)ptr;
serializer.Stream.Serialize((Int32*)&p->MovementInput);
serializer.Stream.Serialize(&p->DebugNumber);
- serializer.Stream.Serialize(&p->PlayerCharacterNumber);
- QBoolean.Serialize(&p->AbilityActivate, serializer);
- QBoolean.Serialize(&p->GiveUpInput, serializer);
QBoolean.Serialize(&p->IsValid, serializer);
QBoolean.Serialize(&p->MovementDirectionIsNormalized, serializer);
QBoolean.Serialize(&p->RotationInput, serializer);
- Quantum.BattleGridPosition.Serialize(&p->MovementPositionTarget, serializer);
+ Quantum.BattleGridPosition.Serialize(&p->MovementGridPosition, serializer);
FP.Serialize(&p->RotationValue, serializer);
- FPVector2.Serialize(&p->MovementDirection, serializer);
- FPVector2.Serialize(&p->MovementPositionMove, serializer);
+ FPVector2.Serialize(&p->MovementVector, serializer);
Quantum.BattleSpecialInput.Serialize(&p->Special, serializer);
}
}
[StructLayout(LayoutKind.Explicit)]
public unsafe partial struct _globals_ {
- public const Int32 SIZE = 1192;
+ public const Int32 SIZE = 1048;
public const Int32 ALIGNMENT = 8;
[FieldOffset(0)]
public AssetRef