Collector & Generator
Base Collector
The purpose of any IBaseCollectorEntity
is to produce an amount of ICurrency
at a set interval. The IBaseCollectorEntity
class houses all the common functionality between generators
and collectors
, such as Duration
, PayoutAmount
, and purchase/collect behaviours.
Collector
The ICollectorEntity
is designed to be a unique gameplay mechanic that can be purchased and allows players to collect non-game currency after a pre-set duration has elapsed manually.
Generator
The IGeneratorEntity
is an essential concept of IdleKit. It enables the player to purchase, collect from, and automate the generators
so they can start generating currencies
, which allows further purchases (upgrades) of generator units and progression through the game (stages).
A key difference between generators
and collectors
is that generators
can be automated to generate currency even while the player is offline, while players must manually collect from collectors
. Generators
also have unit targets.
Relationship
Below denotes the relationship between IBaseCollectorEntity
with ICollectorEntity
and IGeneratorEntity
, along with short descriptions of each component and how they work with one another.
IBaseCollectorEntity
The IBaseCollectorEntity
contains the shared fields for ICollectorEntity
and IGeneratorEntity
. It includes references to an associated saved
data object" that persists its state and a static
data object" that contains all its settings.
Note
For more information on IEntity
, please visit the Understanding Entities page.
IGeneratorEntity
The IGeneratorEntity
is an IEntity
that represents a currency generator in a specific IStage
. It is a self-contained controller that handles all logic of the particular Generator. In addition to fields in IBaseCollectorEntity
, it contains references to an associated IGeneratorUnitTargetSequence
and functionality related to its automation.
ICollectorEntity
The ICollectorEntity
is an IEntity
that represents a currency collector in a specific IContent
. It is a self-contained controller that handles all logic of the particular collector.
IBaseCollectorEntityData
The IBaseCollectorEntityData
is the IEntityData
associated with the IBaseCollectorEntity
. It holds references to the IBaseCollectorData
and IBaseCollectorBalanceData
for this base collector entity.
IGeneratorEntityData
The IGeneratorEntityData
also contains an additional reference to an associated IGeneratorUnitTargetSequenceData
. This data varies per stage.
ICollectorEntityData
Each ICollectorEntityData
has a unique ICollectorData
and ICollectorBalanceData
pairing since Collectors persist within an IContent
and do not change between Stages.
IBaseCollectorEntitySavedData
The IBaseCollectorEntitySavedData
is the ISavedData
associated with the IBaseCollectorEntity
that stores all of its persisting save states, such as the purchase state and production state.
IGeneratorEntitySavedData
The IGeneratorEntitySavedData
stores additional save state information, such as the generator unit count and automation state.
IBaseCollectorData
The IBaseCollectorData
is one of the static data objects referenced in the IBaseCollectorEntityData
. This data does not vary on a per-stage basis; as a result, the id within this data is often the name a generator is referred to by. The id
is referenced in entities such as Goals
or PlotPoints
.
Tip
generator-05
means the IGeneratorEntity
that has the IGeneratorData
with id generator-05
.
IBaseCollectorBalanceData
The IBaseCollectorBalanceData
is the static data object that contains all balance values for an IBaseCollectorEntity
, such as payout, duration, and upgrade requirements.
IGeneratorBalanceData
The IGeneratorBalanceData
contains stage-specific balance values for the Generator, such as automation requirements and unit costs. This data varies per stage.
IGeneratorUnitTargetSequence
, IGeneratorUnitTargetSequenceData
, and IGeneratorUnitTargetData
These static data are specific to Generators
. The IGeneratorUnitTargetSequence
contains a collection of IGeneratorUnitTargetData
referenced by the IGeneratorUnitTargetSequenceData
. The player can reach unit targets
by purchasing a certain number of generator units (customers). There is usually an associated reward
that would be granted when reaching a target
.
Generator States
The runtime of the IBaseCollectorEntity
controller consists of various generator states
that contain different sets of behaviours. They follow a State Pattern where each State implements the behaviour specific to that state (see https://en.wikipedia.org/wiki/State_pattern). When the IBaseCollectorEntity
is initialized, it is set to a particular state depending on the information persisting in the IBaseCollectorEntitySavedData
.
Throughout gameplay, the IBaseCollectorEntity
would potentially move into a different state based on the player's actions. Currently, the following states
are available in IdleKit.
IAutoCollectState
The IGeneratorEntity
is in the AutoCollectState
when it is automated. In this state, ICurrency
would produce and collect currency automatically without user inputs. The IGeneratorEntity
must be automated to be in this state. An ICollectorEntity
will never enter this state since it cannot be automated.
IProduceState
The IBaseCollectorEntity
is in the ProduceState
when it is in the process of producing ICurrency
for the player to collect. The IBaseCollectorEntity
must be purchased, and the collection of the output currencies
is not available yet.
IWaitToBuyState
This is the default IBaseCollectorEntity
state before any user interaction. It stays dormant and does not produce until it is purchased. Once it is purchased, it would move to the ProduceState
.
IWaitToCollectState
The IBaseCollectorEntity
moves to this state from the ProduceState
when the output currency
generation is completed and available for the player to collect. After it is collected, the IBaseCollectorEntity
moves to the ProduceState
again.
Collector States
When a Collector is purchased, it enters the WaitToCollectState
if CanCollectOnBuy
is true and ProduceState
if false. Collectors cannot be automated, so they will never enter the AutoCollectState
.
Generator States
When a Generator is purchased, it always enters the IProduceState
.
Shared Actions
During runtime, the IBaseCollectorEntity
controller uses actions
and state actions
to communicate with the rest of IdleKit. There are derived implementations for all Base Collector
actions
and state actions
, so other components can listen to the Generator/Collector specific Actions
or the generic shared Base Collector
actions
.
There are also additional state actions
and state actions
specific to Generators
, such as AutomateGeneratorStateAction
or GeneratorUnitTargetHitStateAction
.
Note
For more information on the Actions
system, please refer to the Understanding Actions page.