Conversation
Removes redundant type/field metadata resolution from object endpoint handlers.
Extends DynamicRemoteObject and CollectionHelpers with additional collection operations and remote LINQ support. Adds trace diagnostics to RemoteClient and fixes PrimitivesEncoder edge cases.
Extends EventHookProxy with disposal guards and improves TypeProxy interface binding.
Replaces row-oriented Dictionary<string, string> batch responses with a columnar layout where property names and types appear once in a schema, and values are stored as parallel arrays. Eliminates O(N*P) key repetition on the wire for large collections. Also adds HydrateForSerialization to batch-fetch properties before ToJSON() serialization, reducing N individual IPC calls to 1 batch call.
Adds CardAbility, MagicProperty, PlayDrawResult, and StateElementType enums. Moves PlayDrawResult from Types/ to Enums/ and removes the unused NamedValue type.
Simplifies Game, GameAction, GameCard, GamePlayer, GamePrompt, and GameZone wrappers. Expands GameCard with ability, counter, and association tracking. Updates CardAction and SelectFromListAction for new action types.
Introduces a state-diffing processor pipeline for tracking game state changes. Provides structured event callbacks for action finalization, card/player/zone changes, prompt correlation, and log message timing.
…pose GameProcessor events
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Adds an event-driven subsystem that tracks game state changes (card mutations, zone transfers, prompt correlation, log messages, combat) and surfaces them as strongly-typed events. This required
refactoring game models with new enums (CardAbility, MagicProperty, StateElementType), expanded GameCard/GamePlayer properties, and improved CardAction target tracking.
To support this, we also switched the internal batch IPC responses (/batch_members, /batch_collection) from row-oriented dictionaries to a columnar format, thus eliminating ~2.4x key repetition on the wire. Additionally, we added batch hydration for ToJSON() serialization, reducing N individual IPC calls to 1 batch call.
Below show two types of ways in which you can register to this new subsystem: either explicitly (constructing or registering your own processors to
GameProcessor.cs), or implicitly viaGame.csevents.Explicit processor registration (
GameProcessor.cs):Implicit processor registration (
Game.cs):