use async_trait::async_trait;
pub mod accounting;
pub mod action;
pub mod chain_of_command;
pub mod combat;
pub mod contagion;
pub mod culture;
pub mod dungeon;
pub mod economy;
pub mod entropy;
pub mod faction;
pub mod generation;
pub mod holacracy;
pub mod inventory;
pub mod logistics;
pub mod loot;
pub mod macroeconomy;
pub mod market;
pub mod metrics;
pub mod modular_synthesis;
pub mod org_suite;
pub mod policy;
pub mod reputation;
pub mod research;
pub mod room_buff;
pub mod save_load;
pub mod social;
pub mod subjective_reality;
pub mod territory;
pub mod time;
pub mod worldmap;
pub use action::{
ActionConfig,
ActionPlugin,
ActionPoints,
};
pub use combat::{
BattleId,
BattleState,
CombatConfig,
CombatEndRequested,
CombatEndedEvent,
CombatHook,
CombatLogEntry,
CombatPlugin,
CombatResult,
CombatService,
CombatStartRequested,
CombatStartedEvent,
CombatState,
CombatSystem,
CombatTurnAdvanceRequested,
CombatTurnCompletedEvent,
Combatant,
DamageResult,
DefaultCombatHook,
};
pub use inventory::{
DefaultInventoryHook,
EntityId,
InventoryConfig,
InventoryError,
InventoryHook,
InventoryPlugin,
InventoryService,
InventoryState,
InventorySystem,
Item,
ItemAddRequested,
ItemAddedEvent,
ItemId,
ItemRemoveRequested,
ItemRemovedEvent,
ItemTransferRequested,
ItemTransferredEvent,
ItemUseRequested,
ItemUsedEvent,
};
pub use loot::{
DefaultLootHook,
DropConfig,
LootConfig,
LootGenerateRequested,
LootGeneratedEvent,
LootHook,
LootNotGeneratedEvent,
LootPlugin,
LootService,
LootSourceId,
LootSystem,
Rarity,
RarityRollRequested,
};
pub use dungeon::{
Connection,
ConnectionPattern,
ConnectionUnlockRequested,
ConnectionUnlockedEvent,
DefaultDungeonHook,
DungeonConfig,
DungeonHook,
DungeonPlugin,
DungeonService,
DungeonState,
DungeonSystem,
FloorAdvanceRequested,
FloorAdvancedEvent,
RoomEnteredEvent,
RoomId,
RoomMoveRequested,
};
pub use room_buff::{
ActiveBuff,
ActiveBuffs,
BuffAppliedEvent,
BuffApplyRequested,
BuffConfig,
BuffDuration,
BuffEffect,
BuffExpiredEvent,
BuffId,
BuffRemoveRequested,
BuffRemovedEvent,
BuffService,
BuffSystem,
BuffTickRequested,
DefaultRoomBuffHook,
RoomBuffDatabase,
RoomBuffHook,
RoomBuffPlugin,
};
pub use territory::{
ControlChanged,
DefaultTerritoryHook,
Developed,
Territories,
Territory,
TerritoryControlChangeRequested,
TerritoryControlChangedEvent,
TerritoryDevelopedEvent,
TerritoryDevelopmentRequested,
TerritoryEffects,
TerritoryEffectsUpdatedEvent,
TerritoryError,
TerritoryHook,
TerritoryId,
TerritoryPlugin,
TerritoryService,
TerritoryState,
TerritorySystem,
};
pub use faction::{
DefaultFactionHook,
Faction,
FactionError,
FactionHook,
FactionId,
FactionPlugin,
FactionState,
FactionSystem,
Factions,
Operation,
OperationCompletedEvent,
OperationFailedEvent,
OperationId,
OperationLaunchRequested,
OperationLaunchedEvent,
OperationResolveRequested,
OperationStatus,
Outcome,
};
pub use policy::{
AggregationStrategy,
DefaultPolicyHook,
Policies,
Policy,
PolicyActivateRequested,
PolicyActivatedEvent,
PolicyConfig,
PolicyCycleRequested,
PolicyDeactivateRequested,
PolicyDeactivatedEvent,
PolicyHook,
PolicyId,
PolicyPlugin,
PolicyState,
};
pub use reputation::{
DefaultReputationHook,
ReputationChangeRequested,
ReputationChangedEvent,
ReputationConfig,
ReputationEntry,
ReputationError,
ReputationHook,
ReputationPlugin,
ReputationService,
ReputationSetRequested,
ReputationState,
ReputationSystem,
ReputationThreshold,
ReputationThresholdCrossedEvent,
SubjectId,
};
pub use research::{
DefaultResearchHook,
ProgressModel,
ResearchCancelRequested,
ResearchCancelledEvent,
ResearchCompleteRequested,
ResearchCompletedEvent,
ResearchConfig,
ResearchError,
ResearchHook,
ResearchId,
ResearchPlugin,
ResearchProgressRequested,
ResearchProgressUpdatedEvent,
ResearchProject,
ResearchProjects,
ResearchQueueRequested,
ResearchQueuedEvent,
ResearchResult,
ResearchStartRequested,
ResearchStartedEvent,
ResearchState,
ResearchStatus,
ResearchSystem,
};
pub use metrics::{
AggregatedMetric,
AggregationType,
ClearMetricsRequested,
CreateSnapshotRequested,
DefineMetricRequested,
GenerateReportRequested,
MetricDefined,
MetricDefinition,
MetricId,
MetricRecorded,
MetricRemoved,
MetricReport,
MetricSnapshot,
MetricType,
MetricValue,
MetricsCleared,
MetricsConfig,
MetricsHook,
MetricsPlugin,
MetricsRegistry,
MetricsSystem,
NoOpMetricsHook,
RecordMetricRequested,
RemoveMetricRequested,
ReportGenerated,
SnapshotCreated,
};
pub use save_load::{
AutoSaveCompleted,
AutoSaveRequested,
DefaultSaveLoadHook,
DeleteSaveRequested,
GameLoaded,
GameSaved,
GetSaveMetadataRequested,
ListSavesRequested,
LoadGameRequested,
SaveDeleted,
SaveFormat,
SaveGameRequested,
SaveLoadConfig,
SaveLoadFailed,
SaveLoadHook,
SaveLoadPlugin,
SaveLoadSystem,
SaveMetadataRetrieved,
SavesListed,
};
pub use time::{
ActionConsumedEvent,
AdvanceTimeRequested,
BuiltInTimePlugin,
DayChanged,
GameTimer,
TimeConfig,
TurnBasedTimePlugin,
};
pub use worldmap::{
DefaultWorldMapHook,
Encounter,
EncounterId,
EncounterResolvedEvent,
EncounterTriggeredEvent,
EntityPosition,
EntityPositionChangedEvent,
EntityTeleportRequested,
Location,
LocationDiscoverRequested,
LocationDiscoveredEvent,
LocationId,
LocationType,
Position,
Route,
RouteId,
TerrainType,
Travel,
TravelCancelRequested,
TravelCancelledEvent,
TravelCompleted,
TravelCompletedEvent,
TravelError,
TravelEvent,
TravelId,
TravelPauseRequested,
TravelPausedEvent,
TravelProgressEvent,
TravelResumeRequested,
TravelResumedEvent,
TravelStartRequested,
TravelStartedEvent,
TravelStatus,
WorldMapConfig,
WorldMapHook,
WorldMapPlugin,
WorldMapRegistry,
WorldMapService,
WorldMapState,
WorldMapSystem,
};
pub use accounting::{
AccountingConfig,
AccountingHook,
AccountingPlugin,
AccountingService,
AccountingState,
AccountingSystem,
BudgetChannel,
BudgetLedger,
BudgetTransferRequested,
BudgetTransferredEvent,
DefaultAccountingHook,
SettlementCompletedEvent,
SettlementRequested,
};
pub use economy::{
ConversionRule,
ConversionRules,
Currency,
CurrencyDefinition,
CurrencyDefinitions,
CurrencyDeposited,
CurrencyExchangeFailed,
CurrencyExchangeRequested,
CurrencyExchanged,
CurrencyId,
CurrencyWithdrawn,
EconomyConfig,
EconomyError,
EconomyPlugin,
EconomyResult,
EconomyService,
EconomySystem,
ExchangeRate,
ExchangeRates,
FlowResourceGenerated,
RateType,
ResourceAddRequested,
ResourceAdded,
ResourceConsumeFailed,
ResourceConsumeRequested,
ResourceConsumed,
ResourceConversionFailed,
ResourceConversionRequested,
ResourceConverted,
ResourceDefinition,
ResourceDefinitions,
ResourceId,
ResourceInventory,
ResourceType,
Wallet,
};
pub use chain_of_command::{
AuthorityLevel,
ChainOfCommandConfig,
ChainOfCommandHook,
ChainOfCommandPlugin,
DefaultChainOfCommandHook,
HierarchyService,
HierarchyState,
HierarchySystem,
LoyaltyDecayProcessedEvent,
LoyaltyDecayRequested,
Member,
MemberAddRequested,
MemberAddedEvent,
MemberId,
MemberPromoteRequested,
MemberPromotedEvent,
MemberRemoveRequested,
MemberRemovedEvent,
Order,
OrderError,
OrderExecutedEvent,
OrderIssueRequested,
OrderOutcome,
OrderRefusedEvent,
OrderType,
OrganizationHierarchy,
Priority,
PromotionError,
PromotionFailedEvent,
RankDefinition,
RankDefinitions,
RankId,
};
pub use culture::{
Alignment,
AlignmentCheckRequested,
AlignmentCheckedEvent,
CultureConfig,
CultureEffect,
CultureError,
CultureHook,
CulturePlugin,
CultureService,
CultureState,
CultureSystem,
CultureTag,
CultureTagAddRequested,
CultureTagAddedEvent,
CultureTagRemoveRequested,
CultureTagRemovedEvent,
DefaultCultureHook,
FervorIncreasedEvent,
MemberBreakdownEvent,
MemberFanaticizedEvent,
OrganizationCulture,
PersonalityTrait,
StressAccumulatedEvent,
};
pub use market::{
DefaultMarketHook,
DemandSupplySetEvent,
DemandSupplySetRequested,
ItemRegisterRequested,
ItemRegisteredEvent,
MarketConfig,
MarketData,
MarketEvent,
MarketEventAppliedEvent,
MarketEventApplyRequested,
MarketEventType,
MarketHook,
MarketPlugin,
MarketService,
MarketState,
MarketSystem,
MarketTrend,
MarketTrendChangedEvent,
PriceChange,
PriceChangedEvent,
PriceUpdateRequested,
PricesUpdatedEvent,
};
pub use org_suite::{
ConditionContext,
FactionId as OrgSuiteFactionId,
FactionRegisterRequested as OrgSuiteFactionRegisterRequested,
FactionRegisteredEvent as OrgSuiteFactionRegisteredEvent,
OrgArchetype,
OrgConverter,
OrgSuiteConfig,
OrgSuiteError,
OrgSuiteState,
TransitionCondition,
TransitionFailedEvent,
TransitionHistory,
TransitionOccurredEvent,
TransitionRegistry,
TransitionRequested,
TransitionTrigger,
};
pub use modular_synthesis::{
ActiveSynthesis,
CategoryId,
DefaultSynthesisHook,
DiscoveryState,
Ingredient,
IngredientType,
ModularSynthesisPlugin,
Recipe,
RecipeRegistry,
ResultType,
SynthesisConfig,
SynthesisError,
SynthesisHook,
SynthesisId,
SynthesisOutcome,
SynthesisResult,
SynthesisService,
SynthesisState,
SynthesisStatus,
SynthesisSystem,
Timestamp,
};
use crate::builder::RuntimeResourceEntry;
use std::any::TypeId;
#[async_trait]
pub trait Plugin: Send + Sync {
fn name(&self) -> &'static str;
fn build(&self, builder: &mut dyn PluginBuilder);
fn dependencies(&self) -> Vec<&'static str> {
vec![]
}
async fn initialize(&mut self) {}
}
pub trait PluginBuilder {
fn register_entity(&mut self, name: &str, entity: Box<dyn crate::entity::Entity>);
fn register_service(&mut self, service: Box<dyn crate::service::Service>);
fn register_system(&mut self, system: Box<dyn crate::system::System>);
fn register_runtime_resource_boxed(
&mut self,
type_id: TypeId,
resource: Box<dyn RuntimeResourceEntry>,
);
fn register_asset(&mut self, name: &str, asset: Box<dyn std::any::Any + Send + Sync>);
fn resources_mut(&mut self) -> &mut crate::resources::Resources;
}
pub trait PluginBuilderExt: PluginBuilder {
fn register_resource<T: crate::resources::Resource>(&mut self, resource: T) {
self.resources_mut().register(resource);
}
fn register_runtime_state<T: 'static + Send + Sync>(&mut self, resource: T) {
self.register_runtime_resource_boxed(TypeId::of::<T>(), Box::new(resource));
}
}
impl<T: ?Sized + PluginBuilder> PluginBuilderExt for T {}