Added a discussion of the various data structures used by the DoInput()
regime, and by StarCon2Main. git-svn-id: svn://svn.code.sf.net/p/sc2/code/trunk@1296 8092fc87-c524-0410-9efc-e669fe64eaf9
This commit is contained in:
@@ -0,0 +1,126 @@
|
|||||||
|
Input system notes
|
||||||
|
|
||||||
|
Code that reads the input state defines a routine that goes through
|
||||||
|
the DoInput routine. This is handled in a pseudo-OOP style.
|
||||||
|
|
||||||
|
An "INPUT_STATE_DESC" has the following members:
|
||||||
|
|
||||||
|
BOOLEAN (*InputFunc) (PVOID pInputState);
|
||||||
|
COUNT MenuRepeatDelay;
|
||||||
|
|
||||||
|
Although a "PVOID", pInputState has to be safely castable to
|
||||||
|
INPUT_STATE_DESC. There are various "subclasses" that are used for
|
||||||
|
this purpose throughout the code. They are also pased to the first
|
||||||
|
argument of DoInput.
|
||||||
|
|
||||||
|
The InputFunc returns TRUE if it still will be keeping control next
|
||||||
|
frame.
|
||||||
|
|
||||||
|
MenuRepeatDelay is an "internal" variable for making keyrepeat work
|
||||||
|
right.
|
||||||
|
|
||||||
|
"Subclasses":
|
||||||
|
|
||||||
|
MENU_STATE - in starbase.h. The "pMenuState" global is usually the
|
||||||
|
element referenced. This is used by:
|
||||||
|
|
||||||
|
encount.c: DoSelectAction
|
||||||
|
gameopt.c: DoGameOptions, DoSettings, DoTextEntry, DoNaming,
|
||||||
|
DoQuitMenu, DoPickGame
|
||||||
|
outfit.c: DoOutfit
|
||||||
|
pickship.c: DoPickBattleShip
|
||||||
|
restart.c: DoRestart
|
||||||
|
shipyard.c: DoModifyShips, DoShipYard
|
||||||
|
starbase.c: DoStarBase
|
||||||
|
|
||||||
|
cargo.c: DoDiscardCargo
|
||||||
|
devices.c: DoManipulateDevices
|
||||||
|
lander.c: DoPlanetSide
|
||||||
|
pstarmap.c: DoMoveCursor, DoFlagshipCommands
|
||||||
|
roster.c: DoModifyRoster
|
||||||
|
scan.c: DoScan, PickPlanetSide
|
||||||
|
|
||||||
|
VIDEO_INPUT_STATE - in vidplayer.c. Used by TFB_DoVideoInput.
|
||||||
|
|
||||||
|
ENCOUNTER_STATE - in comm.c. Used by DoCommunication.
|
||||||
|
|
||||||
|
MELEE_STATE - in melee.h. Used by DoPickShip, DoLoadTeam, DoEdit, DoMelee.
|
||||||
|
|
||||||
|
The game logic itself that uses DoInput treats it as a stack of state
|
||||||
|
machines. The "current state" is in the InputFunc field of the
|
||||||
|
argument.
|
||||||
|
|
||||||
|
The state machines are (with the calls that initialize and allocate them):
|
||||||
|
|
||||||
|
InitCommunication: DoCommunication
|
||||||
|
DoMenuOptions, ExploreSolarSys: DoFlagshipCommands <-> DoDiscardCargo
|
||||||
|
<-> DoManipulateDevices
|
||||||
|
Roster: DoModifyRoster
|
||||||
|
DoMelee <-> DoEdit <-> DoLoadTeam <-> DoPickShip
|
||||||
|
VisitStarBase: DoStarBase <-> DoOutfit <-> DoInstallModule
|
||||||
|
<-> DoShipyard <-> DoModifyShips
|
||||||
|
DoStarMap: DoMoveCursor
|
||||||
|
GameOptions: DoGameOptions <-> DoNaming <-> DoSettings <-> DoQuitMenu
|
||||||
|
<-> DoPickGame
|
||||||
|
GetArmadaStarShip: DoPickBattleShip
|
||||||
|
StartGame: DoRestart
|
||||||
|
ScanSystem: DoScan <-> PickPlanetSide <-> DoPlanetSide
|
||||||
|
InitEncounter: DoSelectAction
|
||||||
|
TFB_VideoInput: TFB_DoVideoInput
|
||||||
|
|
||||||
|
These are called from the following points:
|
||||||
|
|
||||||
|
InitCommunication: Called by the outtakes, the starbase, and the gen*
|
||||||
|
files; generally anywhere where you need to
|
||||||
|
transfer over to a conversation sequence.
|
||||||
|
RaceCommunication () is the toplevel call for
|
||||||
|
starcon.c.
|
||||||
|
|
||||||
|
DoMenuOptions: Called by the postprocess operation for the sis_ship.
|
||||||
|
|
||||||
|
ExploreSolarSys: Called by Starcon2Main.
|
||||||
|
|
||||||
|
VisitStarBase: Called by Starcon2Main.
|
||||||
|
|
||||||
|
DoStarMap: Called internally by DoFlagshipCommands.
|
||||||
|
|
||||||
|
GameOptions: Called internally by DoOutfit, DoShipyard,
|
||||||
|
DoSelectAction, and DoFlagshipCommands. Basically
|
||||||
|
handles the GAME menu wherever it appears.
|
||||||
|
|
||||||
|
GetArmadaStarShip: Called internally by
|
||||||
|
GetEncounterStarShip. UninitShips calls
|
||||||
|
GetEncounterStarShip, apparently to do cleanup.
|
||||||
|
Everyone else calls GetNextStarShip. This is done
|
||||||
|
by the Battle() routine, and by the new_ship
|
||||||
|
function, which is assigned as a "death_func" for
|
||||||
|
normal ships, and a "preprocess_func" for dead
|
||||||
|
ships.
|
||||||
|
|
||||||
|
StartGame: Called by Starcon2Main.
|
||||||
|
|
||||||
|
ScanSystem: Called by DoFlagshipCommands
|
||||||
|
|
||||||
|
InitEncounter: Called by InitCommunication when the player has an option.
|
||||||
|
|
||||||
|
TFB_VideoInput: UQM's game logic will reach it by calling DoFMV.
|
||||||
|
|
||||||
|
Starcon2Main
|
||||||
|
------------
|
||||||
|
|
||||||
|
This is a loop for the game. Right now I just have a list of
|
||||||
|
top-level calls, and a list of checks made against
|
||||||
|
GLOBAL(CurrentActivity). The actual significance of these things
|
||||||
|
comes later.
|
||||||
|
|
||||||
|
Activities: CHECK_LOAD, START_ENCOUNTER, CHECK_ABORT,
|
||||||
|
IN_INTERPLANETARY, START_INTERPLANETARY, WON_LAST_BATTLE,
|
||||||
|
CHECK_RESTART, IN_HYPERSPACE
|
||||||
|
|
||||||
|
Game states: CHMMR_BOMB_STATE, GLOBAL_FLAGS_AND_DATA, KOHR_AH_KILLED_ALL
|
||||||
|
|
||||||
|
Functions: Logo(), StartGame(), VisitStarBase(), RaceCommunication(),
|
||||||
|
ExploreSolarSys(), Battle(). Note that Battle() here is
|
||||||
|
actually for hyperspace travel. Super Melee combat is
|
||||||
|
handled in DoMelee, and full-game combat is handled by
|
||||||
|
EncounterBattle, called by InitCommunication.
|
||||||
Reference in New Issue
Block a user