progames.core.engine package¶
Submodules¶
progames.core.engine.abc module¶
-
class
progames.core.engine.abc.Store¶ Bases:
collections.abc.Sized-
empty() → bool¶ check if the store is empty
-
pop(*args, **kwargs) → Item¶ get the first item
Returns: the first item
-
store(entity: Item, *args, **kwargs) → None¶ store item
Parameters: entity – item to store
-
-
class
progames.core.engine.abc.GameWorld¶ Bases:
object-
accept(command: progames.core.engine.messages.Command) → Iterable[progames.core.engine.messages.Event]¶ Parameters: command – command
-
rollback(command: progames.core.engine.messages.Command) → None¶ Parameters: command – the failed command which causes rollback
-
update() → None¶ Some game need update game world each frame
-
-
class
progames.core.engine.abc.Message¶ Bases:
object
progames.core.engine.concurrent module¶
-
progames.core.engine.concurrent.run(func, args=None, kwargs=None)¶ execute a function in default thread pool
Parameters: - func (function) – function to be executed
- args (tuple) – args
- kwargs (dict) – kwargs
Returns: None
progames.core.engine.messages module¶
-
class
progames.core.engine.messages.Command¶ Bases:
progames.core.engine.abc.Messagebase command
-
visit(world: progames.core.engine.abc.GameWorld) → Iterable[progames.core.engine.messages.Event]¶
-
-
class
progames.core.engine.messages.Event¶ Bases:
progames.core.engine.abc.Messagebase event
-
class
progames.core.engine.messages.GameEnded¶ Bases:
progames.core.engine.messages.Eventdefault event raise when game is ended
progames.core.engine.processors module¶
-
class
progames.core.engine.processors.Processor(game: progames.core.engine.GameWorld, store: progames.core.engine.Store, *args, **kwargs)¶ Bases:
objectProcess game and produce events
Notes
- Player’s input data will be processed and transform to commands.
- Each frame, game only consume 1 command from command store.
- Command is a visitor, travel around game world and produce events. These events will be collected and sent to listeners.
- Rollback is required to implement
-
command_store= None¶ command store
-
cps= 50¶ commands per seconds (max), 0 < cps
-
get_next_command() → typing.Optional[progames.core.engine.Command]¶ get command to process
:raise RuntimeWarning
-
handle(event: progames.core.engine.Event) → None¶ base handle event, don’t forget call: super().handle(event)
-
is_over() → bool¶ check if game is over
-
over= None¶ flag for checking if game is over
-
process_command() → None¶ process commands one by one
- Flows:
- pop 1 command from command store
- the command go through game world, make changes and produce events
- notify events to listeners (register)
- update game world
Raises: - RuntimeError – game must stop
- RuntimeWarning – game continue
-
start()¶ start processor
-
state= None¶
-
stop() → None¶ immediate stop game loop
progames.core.engine.producers module¶
progames.core.engine.stores module¶
-
class
progames.core.engine.stores.SimpleQueueStore¶ Bases:
progames.core.engine.abc.Store-
empty()¶ check if the store is empty
-
pop(*args, **kwargs)¶ get the first item
Returns: the first item
-
store(entity, *args, **kwargs)¶ store item
Parameters: entity – item to store
-
progames.core.engine.worlds module¶
-
class
progames.core.engine.worlds.AbstractGameWorld¶ Bases:
progames.core.engine.abc.GameWorld-
accept(command: progames.core.engine.messages.Command) → List[progames.core.engine.messages.Event]¶ Parameters: command – command
-
process(command: progames.core.engine.messages.Command) → List[progames.core.engine.messages.Event]¶ put your logic here
Parameters: command – the command
Returns: list of events
Raises: RuntimeError– game crashedRuntimeWarning– continue
-
rollback(command: progames.core.engine.messages.Command) → None¶ Parameters: command – the failed command which causes rollback
-
update() → None¶ Some game need update game world each frame
-
validate(command: progames.core.engine.messages.Command)¶ validate command
Raises: ValidationError– invalid command
-
Module contents¶
-
class
progames.core.engine.Command¶ Bases:
progames.core.engine.abc.Messagebase command
-
visit(world: progames.core.engine.abc.GameWorld) → Iterable[progames.core.engine.messages.Event]¶
-
-
class
progames.core.engine.Event¶ Bases:
progames.core.engine.abc.Messagebase event
-
class
progames.core.engine.GameEnded¶ Bases:
progames.core.engine.messages.Eventdefault event raise when game is ended
-
class
progames.core.engine.GameWorld¶ Bases:
object-
accept(command: progames.core.engine.messages.Command) → Iterable[progames.core.engine.messages.Event]¶ Parameters: command – command
-
rollback(command: progames.core.engine.messages.Command) → None¶ Parameters: command – the failed command which causes rollback
-
update() → None¶ Some game need update game world each frame
-
-
class
progames.core.engine.AbstractGameWorld¶ Bases:
progames.core.engine.abc.GameWorld-
accept(command: progames.core.engine.messages.Command) → List[progames.core.engine.messages.Event]¶ Parameters: command – command
-
process(command: progames.core.engine.messages.Command) → List[progames.core.engine.messages.Event]¶ put your logic here
Parameters: command – the command
Returns: list of events
Raises: RuntimeError– game crashedRuntimeWarning– continue
-
rollback(command: progames.core.engine.messages.Command) → None¶ Parameters: command – the failed command which causes rollback
-
update() → None¶ Some game need update game world each frame
-
validate(command: progames.core.engine.messages.Command)¶ validate command
Raises: ValidationError– invalid command
-
-
class
progames.core.engine.Producer(store: progames.core.engine.abc.Store, generator: collections.abc.AsyncGenerator)¶ Bases:
object-
produce_async()¶
-
start()¶ listen to inputs
-
-
class
progames.core.engine.Processor(game: progames.core.engine.GameWorld, store: progames.core.engine.Store, *args, **kwargs)¶ Bases:
objectProcess game and produce events
Notes
- Player’s input data will be processed and transform to commands.
- Each frame, game only consume 1 command from command store.
- Command is a visitor, travel around game world and produce events. These events will be collected and sent to listeners.
- Rollback is required to implement
-
command_store= None¶ command store
-
cps= 50¶ commands per seconds (max), 0 < cps
-
get_next_command() → typing.Optional[progames.core.engine.Command]¶ get command to process
:raise RuntimeWarning
-
handle(event: progames.core.engine.Event) → None¶ base handle event, don’t forget call: super().handle(event)
-
is_over() → bool¶ check if game is over
-
over= None¶ flag for checking if game is over
-
process_command() → None¶ process commands one by one
- Flows:
- pop 1 command from command store
- the command go through game world, make changes and produce events
- notify events to listeners (register)
- update game world
Raises: - RuntimeError – game must stop
- RuntimeWarning – game continue
-
start()¶ start processor
-
state= None¶
-
stop() → None¶ immediate stop game loop
-
class
progames.core.engine.SimpleQueueStore¶ Bases:
progames.core.engine.abc.Store-
empty()¶ check if the store is empty
-
pop(*args, **kwargs)¶ get the first item
Returns: the first item
-
store(entity, *args, **kwargs)¶ store item
Parameters: entity – item to store
-