├── .github └── workflows │ └── gh-pages.yml ├── .gitignore ├── Config ├── DefaultEditor.ini ├── DefaultEditorSettings.ini ├── DefaultEngine.ini ├── DefaultGame.ini └── DefaultInput.ini ├── Content ├── Boids │ ├── Actors │ │ ├── BP_Boid.uasset │ │ └── BP_Food.uasset │ ├── BP_BoidsGameMode.uasset │ ├── DA_BoidsSystemsPipeline.uasset │ ├── Data │ │ ├── D_BoidsSettings.uasset │ │ └── D_SystemsRunCriteria.uasset │ ├── Maps │ │ ├── BoidsMap.umap │ │ └── BoidsMap_BuiltData.uasset │ ├── Materials │ │ ├── M_Boid.uasset │ │ └── M_Food.uasset │ └── UI │ │ ├── WBP_BoidsInterface.uasset │ │ ├── WBP_BoidsOptions.uasset │ │ └── WBP_BoidsRunCriteria.uasset ├── Life │ ├── Actors │ │ ├── Animals │ │ │ ├── BP_Animal_Chicken.uasset │ │ │ ├── BP_Animal_Cow.uasset │ │ │ ├── BP_Animal_Goose.uasset │ │ │ ├── BP_Animal_Sheep.uasset │ │ │ └── BP_Animal_Turtle.uasset │ │ ├── BP_Animal.uasset │ │ ├── BP_Cursor.uasset │ │ ├── BP_God.uasset │ │ ├── BP_Human.uasset │ │ ├── BP_Tree.uasset │ │ ├── Foliage │ │ │ ├── FBP_Tree_Conifer.uasset │ │ │ ├── FBP_Tree_Regular.uasset │ │ │ ├── FBP_Tree_Small.uasset │ │ │ └── FBP_Tree_Strong.uasset │ │ └── Trees │ │ │ ├── BP_Tree_COnifer.uasset │ │ │ ├── BP_Tree_Regular.uasset │ │ │ ├── BP_Tree_Small.uasset │ │ │ └── BP_Tree_Strong.uasset │ ├── BP_LifeGameMode.uasset │ ├── DA_LifeSystemsPipeline.uasset │ ├── Data │ │ ├── AI │ │ │ ├── Considerations │ │ │ │ ├── D_AttackAnimalPossibility.uasset │ │ │ │ ├── D_DistanceToAnimal.uasset │ │ │ │ ├── D_DistanceToHuman.uasset │ │ │ │ ├── D_FollowAnimalPossibility.uasset │ │ │ │ ├── D_Hunger.uasset │ │ │ │ ├── D_Idle.uasset │ │ │ │ └── D_Wander.uasset │ │ │ ├── Curves │ │ │ │ ├── C_AnimalInAttackRange.uasset │ │ │ │ ├── C_Boolean.uasset │ │ │ │ └── C_DistanceToAnimal.uasset │ │ │ ├── D_AnimalBehavior.uasset │ │ │ ├── D_HumanBehavior.uasset │ │ │ ├── Perceptions │ │ │ │ ├── D_AnimalsInRangePerception.uasset │ │ │ │ ├── D_FindNearestAnimalPerception.uasset │ │ │ │ ├── D_FindNearestHuman.uasset │ │ │ │ └── D_HumansInRangePerception.uasset │ │ │ └── Tasks │ │ │ │ ├── D_AttackAnimalTask.uasset │ │ │ │ ├── D_FollowAnimalTask.uasset │ │ │ │ ├── D_IdleTask.uasset │ │ │ │ └── D_WanderTask.uasset │ │ ├── Aging │ │ │ ├── C_AnimalSaturation.uasset │ │ │ ├── C_AnimalScale.uasset │ │ │ ├── C_HumanSaturation.uasset │ │ │ ├── C_HumanScale.uasset │ │ │ ├── C_TreeSaturation.uasset │ │ │ └── C_TreeScale.uasset │ │ ├── C_CameraZoomAngle.uasset │ │ ├── C_CameraZoomDistance.uasset │ │ ├── D_LifeDebugSystems.uasset │ │ └── D_LifeSettings.uasset │ ├── Flipbooks │ │ ├── SP_Npc_Down.uasset │ │ ├── SP_Npc_Left.uasset │ │ ├── SP_Npc_Right.uasset │ │ └── SP_Npc_Up.uasset │ ├── Maps │ │ ├── LifeMap.umap │ │ ├── LifeMap_BuiltData.uasset │ │ └── LifeMap_sharedassets │ │ │ ├── Grass_LayerInfo.uasset │ │ │ ├── Rock_LayerInfo.uasset │ │ │ └── Sand_LayerInfo.uasset │ ├── Materials │ │ ├── MF_LandscapeCoord.uasset │ │ ├── MF_LandscapeHeight.uasset │ │ ├── MF_MaxWeightValue.uasset │ │ ├── M_Cursor.uasset │ │ ├── M_Landscape.uasset │ │ ├── M_Sprite.uasset │ │ ├── M_SpriteClearVision.uasset │ │ └── M_Water.uasset │ ├── Sprites │ │ ├── SP_Animal0.uasset │ │ ├── SP_Animal1.uasset │ │ ├── SP_Animal2.uasset │ │ ├── SP_Animal3.uasset │ │ ├── SP_Animal4.uasset │ │ ├── SP_Animal5.uasset │ │ ├── SP_Npc_Down0.uasset │ │ ├── SP_Npc_Down1.uasset │ │ ├── SP_Npc_Down2.uasset │ │ ├── SP_Npc_Down3.uasset │ │ ├── SP_Npc_Left0.uasset │ │ ├── SP_Npc_Left1.uasset │ │ ├── SP_Npc_Left2.uasset │ │ ├── SP_Npc_Left3.uasset │ │ ├── SP_Npc_Right0.uasset │ │ ├── SP_Npc_Right1.uasset │ │ ├── SP_Npc_Right2.uasset │ │ ├── SP_Npc_Right3.uasset │ │ ├── SP_Npc_Up0.uasset │ │ ├── SP_Npc_Up1.uasset │ │ ├── SP_Npc_Up2.uasset │ │ ├── SP_Npc_Up3.uasset │ │ ├── SP_Tree0.uasset │ │ ├── SP_Tree1.uasset │ │ ├── SP_Tree2.uasset │ │ └── SP_Tree3.uasset │ ├── Textures │ │ ├── Grass.uasset │ │ ├── MAS-Characters-P8.uasset │ │ ├── Rock.uasset │ │ ├── Sand.uasset │ │ ├── Snow.uasset │ │ ├── Tree0.uasset │ │ ├── Tree1.uasset │ │ ├── Tree2.uasset │ │ ├── Tree3.uasset │ │ └── Water.uasset │ └── UI │ │ ├── WBP_GodsInterface.uasset │ │ ├── WBP_LifeOptions.uasset │ │ ├── WBP_LifeStats.uasset │ │ └── WBP_SpawnerIconButton.uasset ├── Multiplayer │ ├── Actors │ │ ├── BP_MultiplayerPawn.uasset │ │ └── BP_MultiplayerRocket.uasset │ ├── BP_MultiplayerGameMode.uasset │ ├── BP_MultiplayerGameState.uasset │ ├── BP_MultiplayerMenuMode.uasset │ ├── DA_MultiplayerClientSystemsPipeline.uasset │ ├── DA_MultiplayerServerSystemsPipeline.uasset │ ├── Data │ │ └── D_MultiplayerCommands.uasset │ ├── Maps │ │ ├── MultiplayerGameMap.umap │ │ ├── MultiplayerGameMap_BuiltData.uasset │ │ └── MultiplayerMenuMap.umap │ ├── Materials │ │ ├── M_MultiPlayer.uasset │ │ └── M_Rocket.uasset │ └── UI │ │ ├── WBP_MultiplayerGameInterface.uasset │ │ ├── WBP_MultiplayerLobby.uasset │ │ ├── WBP_MultiplayerMainMenu.uasset │ │ └── WBP_MultiplayerSessionButton.uasset ├── Shared │ ├── Actors │ │ └── BP_SpaceBounds.uasset │ ├── Maps │ │ └── GamesSelectionMap.umap │ └── UI │ │ ├── WBP_Checkbox.uasset │ │ ├── WBP_GameButton.uasset │ │ ├── WBP_GameSelectionMenu.uasset │ │ ├── WBP_ScalarParameter.uasset │ │ └── WBP_VariantParameter.uasset ├── SoundPropagation │ ├── BP_SoundPropagationGameMode.uasset │ ├── DA_SoundPropagationSystemsPipeline.uasset │ └── Maps │ │ ├── SoundPropagationMap.umap │ │ └── _GENERATED │ │ └── PatrykBudzynski │ │ └── CubeGridToolOutput_30B3D930.uasset └── Tutorial │ ├── Actors │ └── BP_Npc.uasset │ ├── BP_TutorialGameMode.uasset │ ├── Components │ └── BP_OffsetComponent.uasset │ ├── DA_TutorialSystemsPipeline.uasset │ ├── Data │ └── DA_SpatialPartitioningSettings.uasset │ ├── Maps │ ├── TutorialMap.umap │ └── TutorialMap_BuiltData.uasset │ ├── Materials │ └── M_Npc.uasset │ └── Systems │ ├── BP_ShakeSystem.uasset │ └── BP_ShakeSystemQuery.uasset ├── LICENSE ├── Platforms └── HoloLens │ └── Config │ └── HoloLensEngine.ini ├── Plugins ├── ReactiveSystems │ ├── .clang-format │ ├── LICENSE │ ├── ReactiveSystems.uplugin │ ├── Resources │ │ └── Icon128.png │ └── Source │ │ └── ReactiveSystems │ │ ├── Private │ │ ├── ReactiveSystems.cpp │ │ ├── Resources │ │ │ └── SystemsChangeDetection.cpp │ │ ├── Systems │ │ │ └── SystemsChangeDetectionSystem.cpp │ │ └── SystemsChangeDetectionBlueprintLibrary.cpp │ │ ├── Public │ │ ├── ReactiveSystems.h │ │ ├── Resources │ │ │ └── SystemsChangeDetection.h │ │ ├── Systems │ │ │ └── SystemsChangeDetectionSystem.h │ │ └── SystemsChangeDetectionBlueprintLibrary.h │ │ └── ReactiveSystems.Build.cs ├── Systems │ ├── .clang-format │ ├── Content │ │ └── SystemsMacros.uasset │ ├── Documentation │ │ ├── Assets │ │ │ ├── game_components_blueprint.png │ │ │ ├── game_components_cpp.png │ │ │ ├── game_level_mode.png │ │ │ ├── game_systems_blueprint.png │ │ │ ├── game_systems_cpp.png │ │ │ ├── systems_actor_components_a.png │ │ │ ├── systems_actor_components_b.png │ │ │ ├── systems_actor_components_c.png │ │ │ ├── systems_actor_create.png │ │ │ ├── systems_component_create.png │ │ │ ├── systems_component_properties.png │ │ │ ├── systems_pipeline.png │ │ │ ├── systems_pipeline_asset_resources.png │ │ │ ├── systems_pipeline_components.png │ │ │ ├── systems_pipeline_create_data_asset.png │ │ │ ├── systems_pipeline_create_query_object.png │ │ │ ├── systems_pipeline_create_scriptable_system.png │ │ │ ├── systems_pipeline_game_mode_a.png │ │ │ ├── systems_pipeline_game_mode_b.png │ │ │ ├── systems_pipeline_game_state_a.png │ │ │ ├── systems_pipeline_game_state_b.png │ │ │ ├── systems_pipeline_game_state_c.png │ │ │ ├── systems_pipeline_lambda_systems.png │ │ │ ├── systems_pipeline_query_object.png │ │ │ ├── systems_pipeline_system_query_a.png │ │ │ ├── systems_pipeline_system_query_b.png │ │ │ ├── systems_pipeline_system_query_c.png │ │ │ ├── systems_pipeline_systems.png │ │ │ ├── systems_pipeline_type_resources.png │ │ │ ├── systems_query_create.png │ │ │ ├── systems_query_properties.png │ │ │ ├── systems_system_create.png │ │ │ ├── systems_system_run_a.png │ │ │ ├── systems_system_run_b.png │ │ │ ├── systems_system_run_c.png │ │ │ └── systems_system_run_d.png │ │ ├── Book │ │ │ ├── architecture │ │ │ │ ├── channels.md │ │ │ │ ├── components.md │ │ │ │ ├── index.md │ │ │ │ ├── index.txt │ │ │ │ ├── iterators.md │ │ │ │ ├── pipelines.md │ │ │ │ ├── resources.md │ │ │ │ ├── subsystem.md │ │ │ │ ├── systems.md │ │ │ │ └── world.md │ │ │ ├── documentation.md │ │ │ ├── getting_started.md │ │ │ ├── index.md │ │ │ ├── index.txt │ │ │ ├── learning_materials │ │ │ │ ├── index.md │ │ │ │ ├── index.txt │ │ │ │ └── tutorial │ │ │ │ │ ├── index.md │ │ │ │ │ ├── index.txt │ │ │ │ │ ├── installation.md │ │ │ │ │ ├── setup_actor.md │ │ │ │ │ ├── setup_component.md │ │ │ │ │ ├── setup_game.md │ │ │ │ │ └── setup_system.md │ │ │ └── qna.md │ │ ├── Snippets.h │ │ └── UnrealDoc.toml │ ├── LICENSE │ ├── Resources │ │ └── Icon128.png │ ├── Source │ │ └── Systems │ │ │ ├── Private │ │ │ ├── ActorArchetypeLocation.cpp │ │ │ ├── ActorComponentsBucket.cpp │ │ │ ├── Archetype.cpp │ │ │ ├── ArchetypeSignature.cpp │ │ │ ├── ConsumedActorComponents.cpp │ │ │ ├── DynamicIterator.cpp │ │ │ ├── DynamicIterator │ │ │ │ ├── DynamicAllEvent.cpp │ │ │ │ ├── DynamicAnyEvent.cpp │ │ │ │ ├── DynamicChain.cpp │ │ │ │ ├── DynamicComparedByEvent.cpp │ │ │ │ ├── DynamicEnumerate.cpp │ │ │ │ ├── DynamicFIlter.cpp │ │ │ │ ├── DynamicFilterEvent.cpp │ │ │ │ ├── DynamicFilterMap.cpp │ │ │ │ ├── DynamicFilterMapEvent.cpp │ │ │ │ ├── DynamicFindEvent.cpp │ │ │ │ ├── DynamicFindMapEvent.cpp │ │ │ │ ├── DynamicForEachEvent.cpp │ │ │ │ ├── DynamicInspect.cpp │ │ │ │ ├── DynamicInspectEvent.cpp │ │ │ │ ├── DynamicMap.cpp │ │ │ │ ├── DynamicMapEvent.cpp │ │ │ │ ├── DynamicSkip.cpp │ │ │ │ ├── DynamicTake.cpp │ │ │ │ └── DynamicZip.cpp │ │ │ ├── Metronome.cpp │ │ │ ├── Query.cpp │ │ │ ├── System.cpp │ │ │ ├── Systems.cpp │ │ │ ├── SystemsActor.cpp │ │ │ ├── SystemsComponent.cpp │ │ │ ├── SystemsGameMode.cpp │ │ │ ├── SystemsGameState.cpp │ │ │ ├── SystemsPipeline.cpp │ │ │ ├── SystemsReflection.cpp │ │ │ ├── SystemsResourceLifeCycle.cpp │ │ │ ├── SystemsStatics.cpp │ │ │ ├── SystemsSubsystem.cpp │ │ │ └── SystemsWorld.cpp │ │ │ ├── Public │ │ │ ├── ActorArchetypeLocation.h │ │ │ ├── ActorComponentsBucket.h │ │ │ ├── Archetype.h │ │ │ ├── ArchetypeSignature.h │ │ │ ├── Constants.h │ │ │ ├── ConsumedActorComponents.h │ │ │ ├── DynamicIterator.h │ │ │ ├── DynamicIterator │ │ │ │ ├── DynamicAllEvent.h │ │ │ │ ├── DynamicAnyEvent.h │ │ │ │ ├── DynamicChain.h │ │ │ │ ├── DynamicComparedByEvent.h │ │ │ │ ├── DynamicEnumerate.h │ │ │ │ ├── DynamicFIlter.h │ │ │ │ ├── DynamicFIlterEvent.h │ │ │ │ ├── DynamicFilterMap.h │ │ │ │ ├── DynamicFilterMapEvent.h │ │ │ │ ├── DynamicFindEvent.h │ │ │ │ ├── DynamicFindMapEvent.h │ │ │ │ ├── DynamicForEachEvent.h │ │ │ │ ├── DynamicInspect.h │ │ │ │ ├── DynamicInspectEvent.h │ │ │ │ ├── DynamicMap.h │ │ │ │ ├── DynamicMapEvent.h │ │ │ │ ├── DynamicSkip.h │ │ │ │ ├── DynamicTake.h │ │ │ │ └── DynamicZip.h │ │ │ ├── Iterator.h │ │ │ ├── Iterator │ │ │ │ ├── Adapt.h │ │ │ │ ├── AdaptDecl.h │ │ │ │ ├── Cast.h │ │ │ │ ├── CastDecl.h │ │ │ │ ├── Chain.h │ │ │ │ ├── ChainDecl.h │ │ │ │ ├── Collectors.h │ │ │ │ ├── Consumers.h │ │ │ │ ├── Converters.h │ │ │ │ ├── ConvertersDecl.h │ │ │ │ ├── Enumerate.h │ │ │ │ ├── EnumerateDecl.h │ │ │ │ ├── Filter.h │ │ │ │ ├── FilterDecl.h │ │ │ │ ├── FilterMap.h │ │ │ │ ├── FilterMapDecl.h │ │ │ │ ├── Flatten.h │ │ │ │ ├── FlattenDecl.h │ │ │ │ ├── Generate.h │ │ │ │ ├── GenerateDecl.h │ │ │ │ ├── Inspect.h │ │ │ │ ├── InspectDecl.h │ │ │ │ ├── Macros.h │ │ │ │ ├── Map.h │ │ │ │ ├── MapDecl.h │ │ │ │ ├── Once.h │ │ │ │ ├── OnceDecl.h │ │ │ │ ├── Range.h │ │ │ │ ├── RangeDecl.h │ │ │ │ ├── Repeat.h │ │ │ │ ├── RepeatDecl.h │ │ │ │ ├── SizeHint.h │ │ │ │ ├── Skip.h │ │ │ │ ├── SkipDecl.h │ │ │ │ ├── Std.h │ │ │ │ ├── StdDecl.h │ │ │ │ ├── Take.h │ │ │ │ ├── TakeDecl.h │ │ │ │ ├── Views.h │ │ │ │ ├── ViewsDecl.h │ │ │ │ ├── Zip.h │ │ │ │ └── ZipDecl.h │ │ │ ├── Metronome.h │ │ │ ├── Query.h │ │ │ ├── Result.h │ │ │ ├── SharedChannel.h │ │ │ ├── System.h │ │ │ ├── Systems.h │ │ │ ├── SystemsActor.h │ │ │ ├── SystemsComponent.h │ │ │ ├── SystemsGameMode.h │ │ │ ├── SystemsGameState.h │ │ │ ├── SystemsPipeline.h │ │ │ ├── SystemsReflection.h │ │ │ ├── SystemsResourceLifeCycle.h │ │ │ ├── SystemsStatics.h │ │ │ ├── SystemsSubsystem.h │ │ │ └── SystemsWorld.h │ │ │ └── Systems.Build.cs │ └── Systems.uplugin ├── SystemsQueryDebugger │ ├── .clang-format │ ├── Content │ │ ├── EWBP_SystemsQueryDebugger.uasset │ │ ├── WBP_SystemsQueryActor.uasset │ │ └── WBP_SystemsQueryComponent.uasset │ ├── LICENSE │ ├── Resources │ │ ├── ButtonIcon_40x.png │ │ └── Icon128.png │ ├── Source │ │ └── SystemsQueryDebugger │ │ │ ├── Private │ │ │ ├── SystemsQueryDebugger.cpp │ │ │ ├── WidgetSystemsQueryActor.cpp │ │ │ ├── WidgetSystemsQueryComponent.cpp │ │ │ └── WidgetSystemsQueryDebugger.cpp │ │ │ ├── Public │ │ │ ├── SystemsQueryDebugger.h │ │ │ ├── WidgetSystemsQueryActor.h │ │ │ ├── WidgetSystemsQueryComponent.h │ │ │ └── WidgetSystemsQueryDebugger.h │ │ │ └── SystemsQueryDebugger.Build.cs │ └── SystemsQueryDebugger.uplugin ├── SystemsSpatialQuery │ ├── .clang-format │ ├── LICENSE │ ├── Resources │ │ └── Icon128.png │ ├── Source │ │ ├── SystemsSpatialQuery │ │ │ ├── Private │ │ │ │ ├── Actors │ │ │ │ │ └── ASceneVoxelVolume.cpp │ │ │ │ ├── Components │ │ │ │ │ ├── DebugSpatialQueryEpicenterComponent.cpp │ │ │ │ │ └── SpatialComponent.cpp │ │ │ │ ├── Resources │ │ │ │ │ ├── SpatialDiscretization.cpp │ │ │ │ │ ├── SpatialGraph.cpp │ │ │ │ │ ├── SpatialInformation.cpp │ │ │ │ │ └── SpatialPartitioning.cpp │ │ │ │ ├── SpatialPartitioningBlueprintLibrary.cpp │ │ │ │ ├── Systems │ │ │ │ │ ├── DebugSpatialDiscretizationSystem.cpp │ │ │ │ │ ├── DebugSpatialGraphSystem.cpp │ │ │ │ │ ├── DebugSpatialInformationSystem.cpp │ │ │ │ │ ├── SpatialGraphSystem.cpp │ │ │ │ │ ├── SpatialInformationSystem.cpp │ │ │ │ │ └── SpatialPartitioningSystem.cpp │ │ │ │ ├── SystemsSpatialQuery.cpp │ │ │ │ └── Utils │ │ │ │ │ └── SceneVoxelTree.cpp │ │ │ ├── Public │ │ │ │ ├── Actors │ │ │ │ │ └── ASceneVoxelVolume.h │ │ │ │ ├── Components │ │ │ │ │ ├── DebugSpatialQueryEpicenterComponent.h │ │ │ │ │ └── SpatialComponent.h │ │ │ │ ├── Resources │ │ │ │ │ ├── SpatialDiscretization.h │ │ │ │ │ ├── SpatialGraph.h │ │ │ │ │ ├── SpatialInformation.h │ │ │ │ │ └── SpatialPartitioning.h │ │ │ │ ├── SpatialPartitioningBlueprintLibrary.h │ │ │ │ ├── Systems │ │ │ │ │ ├── DebugSpatialDiscretizationSystem.h │ │ │ │ │ ├── DebugSpatialGraphSystem.h │ │ │ │ │ ├── DebugSpatialInformationSystem.h │ │ │ │ │ ├── SpatialGraphSystem.h │ │ │ │ │ ├── SpatialInformationSystem.h │ │ │ │ │ └── SpatialPartitioningSystem.h │ │ │ │ ├── SystemsSpatialQuery.h │ │ │ │ └── Utils │ │ │ │ │ └── SceneVoxelTree.h │ │ │ └── SystemsSpatialQuery.Build.cs │ │ └── SystemsSpatialQueryEditor │ │ │ ├── Private │ │ │ └── SystemsSpatialQueryEditor.cpp │ │ │ ├── Public │ │ │ └── SystemsSpatialQueryEditor.h │ │ │ └── SystemsSpatialQueryEditor.Build.cs │ └── SystemsSpatialQuery.uplugin └── SystemsUnitTests │ ├── .clang-format │ ├── LICENSE │ ├── Resources │ └── Icon128.png │ ├── Source │ └── SystemsUnitTests │ │ ├── Private │ │ ├── MockActorBuilder.cpp │ │ ├── SystemsUnitTest.cpp │ │ └── SystemsUnitTests.cpp │ │ ├── Public │ │ ├── MockActorBuilder.h │ │ ├── SystemsUnitTest.h │ │ └── SystemsUnitTests.h │ │ └── SystemsUnitTests.Build.cs │ └── SystemsUnitTests.uplugin ├── README.md ├── Scripts ├── bake-docs.ps1 ├── cleanup.ps1 ├── format.ps1 └── package-plugins.ps1 ├── Source ├── Boids │ ├── .clang-format │ ├── Boids.Build.cs │ ├── Boids.cpp │ ├── Boids.h │ ├── Components │ │ ├── BoidComponent.cpp │ │ ├── BoidComponent.h │ │ ├── ColorComponent.cpp │ │ ├── ColorComponent.h │ │ ├── ImpulseComponent.cpp │ │ ├── ImpulseComponent.h │ │ ├── ObstacleComponent.cpp │ │ ├── ObstacleComponent.h │ │ ├── RadiusComponent.cpp │ │ └── RadiusComponent.h │ ├── Resources │ │ ├── BoidsSettings.cpp │ │ ├── BoidsSettings.h │ │ ├── BoidsSystemsRunCriteria.cpp │ │ ├── BoidsSystemsRunCriteria.h │ │ ├── GameEvents.cpp │ │ └── GameEvents.h │ ├── Systems │ │ ├── OneShot │ │ │ ├── SpawnFoodSystem.cpp │ │ │ └── SpawnFoodSystem.h │ │ └── Persistent │ │ │ ├── BoidsAlignmentSystem.cpp │ │ │ ├── BoidsAlignmentSystem.h │ │ │ ├── BoidsApplyImpulseSystem.cpp │ │ │ ├── BoidsApplyImpulseSystem.h │ │ │ ├── BoidsCohesionSystem.cpp │ │ │ ├── BoidsCohesionSystem.h │ │ │ ├── BoidsDebugDrawSystem.cpp │ │ │ ├── BoidsDebugDrawSystem.h │ │ │ ├── BoidsEatSystem.cpp │ │ │ ├── BoidsEatSystem.h │ │ │ ├── BoidsFaceDirectionSystem.cpp │ │ │ ├── BoidsFaceDirectionSystem.h │ │ │ ├── BoidsHungerSystem.cpp │ │ │ ├── BoidsHungerSystem.h │ │ │ ├── BoidsHuntSystem.cpp │ │ │ ├── BoidsHuntSystem.h │ │ │ ├── BoidsKeepInSpaceBoundsSystem.cpp │ │ │ ├── BoidsKeepInSpaceBoundsSystem.h │ │ │ ├── BoidsLimitVelocitySystem.cpp │ │ │ ├── BoidsLimitVelocitySystem.h │ │ │ ├── BoidsMovementSystem.cpp │ │ │ ├── BoidsMovementSystem.h │ │ │ ├── BoidsPopulationControlSystem.cpp │ │ │ ├── BoidsPopulationControlSystem.h │ │ │ ├── BoidsProximityColorSystem.cpp │ │ │ ├── BoidsProximityColorSystem.h │ │ │ ├── BoidsSeparationSystem.cpp │ │ │ └── BoidsSeparationSystem.h │ ├── Tests │ │ └── BoidsLimitVelocityTest.cpp │ └── UI │ │ ├── WidgetBoidsInterface.cpp │ │ ├── WidgetBoidsInterface.h │ │ ├── WidgetBoidsOptions.cpp │ │ ├── WidgetBoidsOptions.h │ │ ├── WidgetRunCriteria.cpp │ │ └── WidgetRunCriteria.h ├── Life │ ├── .clang-format │ ├── AI │ │ ├── Considerations │ │ │ ├── UtilityAiConstConsideration.cpp │ │ │ ├── UtilityAiConstConsideration.h │ │ │ ├── UtilityAiDistanceToConsideration.cpp │ │ │ ├── UtilityAiDistanceToConsideration.h │ │ │ ├── UtilityAiHungerConsideration.cpp │ │ │ ├── UtilityAiHungerConsideration.h │ │ │ ├── UtilityAiMaxConsideration.cpp │ │ │ ├── UtilityAiMaxConsideration.h │ │ │ ├── UtilityAiMinConsideration.cpp │ │ │ ├── UtilityAiMinConsideration.h │ │ │ ├── UtilityAiPersonalityConsideration.cpp │ │ │ ├── UtilityAiPersonalityConsideration.h │ │ │ ├── UtilityAiProductConsideration.cpp │ │ │ ├── UtilityAiProductConsideration.h │ │ │ ├── UtilityAiSumConsideration.cpp │ │ │ └── UtilityAiSumConsideration.h │ │ ├── Perceptions │ │ │ ├── UtilityAiActorsInRangePerception.cpp │ │ │ ├── UtilityAiActorsInRangePerception.h │ │ │ ├── UtilityAiFindNearestActorPerception.cpp │ │ │ └── UtilityAiFindNearestActorPerception.h │ │ ├── Reasoner │ │ │ ├── UtilityAiBehavior.cpp │ │ │ ├── UtilityAiBehavior.h │ │ │ ├── UtilityAiConsideration.cpp │ │ │ ├── UtilityAiConsideration.h │ │ │ ├── UtilityAiMemory.cpp │ │ │ ├── UtilityAiMemory.h │ │ │ ├── UtilityAiPerception.cpp │ │ │ ├── UtilityAiPerception.h │ │ │ ├── UtilityAiReasoner.cpp │ │ │ ├── UtilityAiReasoner.h │ │ │ ├── UtilityAiTask.cpp │ │ │ └── UtilityAiTask.h │ │ └── Tasks │ │ │ ├── UtilityAiAttackTask.cpp │ │ │ ├── UtilityAiAttackTask.h │ │ │ ├── UtilityAiFollowTask.cpp │ │ │ ├── UtilityAiFollowTask.h │ │ │ ├── UtilityAiWanderTask.cpp │ │ │ └── UtilityAiWanderTask.h │ ├── Components │ │ ├── AgeComponent.cpp │ │ ├── AgeComponent.h │ │ ├── AiComponent.cpp │ │ ├── AiComponent.h │ │ ├── AnimalComponent.cpp │ │ ├── AnimalComponent.h │ │ ├── CameraRelationComponent.cpp │ │ ├── CameraRelationComponent.h │ │ ├── ClearRangeComponent.cpp │ │ ├── ClearRangeComponent.h │ │ ├── ClearRangeEmitterComponent.cpp │ │ ├── ClearRangeEmitterComponent.h │ │ ├── ClearRangeReceiverComponent.cpp │ │ ├── ClearRangeReceiverComponent.h │ │ ├── CursorComponent.cpp │ │ ├── CursorComponent.h │ │ ├── FaceCameraComponent.cpp │ │ ├── FaceCameraComponent.h │ │ ├── FlatMovementComponent.cpp │ │ ├── FlatMovementComponent.h │ │ ├── FlipbookBlendSpaceComponent.cpp │ │ ├── FlipbookBlendSpaceComponent.h │ │ ├── FlipbookProxyComponent.cpp │ │ ├── FlipbookProxyComponent.h │ │ ├── FollowPathComponent.cpp │ │ ├── FollowPathComponent.h │ │ ├── GodComponent.cpp │ │ ├── GodComponent.h │ │ ├── HealthComponent.cpp │ │ ├── HealthComponent.h │ │ ├── HouseComponent.cpp │ │ ├── HouseComponent.h │ │ ├── HumanComponent.cpp │ │ ├── HumanComponent.h │ │ ├── IronComponent.cpp │ │ ├── IronComponent.h │ │ ├── PersonalityComponent.cpp │ │ ├── PersonalityComponent.h │ │ ├── SpeciesComponent.cpp │ │ ├── SpeciesComponent.h │ │ ├── SpriteProxyComponent.cpp │ │ ├── SpriteProxyComponent.h │ │ ├── StaminaComponent.cpp │ │ ├── StaminaComponent.h │ │ ├── StrengthComponent.cpp │ │ ├── StrengthComponent.h │ │ ├── WaterComponent.cpp │ │ ├── WaterComponent.h │ │ ├── WoodComponent.cpp │ │ └── WoodComponent.h │ ├── Life.Build.cs │ ├── Life.cpp │ ├── Life.h │ ├── Resources │ │ ├── LifeDebugSystems.cpp │ │ ├── LifeDebugSystems.h │ │ ├── LifeSettings.cpp │ │ ├── LifeSettings.h │ │ ├── LifeSpawner.cpp │ │ └── LifeSpawner.h │ ├── Systems │ │ ├── OneShot │ │ │ ├── HumansClearVisionSystem.cpp │ │ │ └── HumansClearVisionSystem.h │ │ └── Persistent │ │ │ ├── AgingSystem.cpp │ │ │ ├── AgingSystem.h │ │ │ ├── AiSystem.cpp │ │ │ ├── AiSystem.h │ │ │ ├── ApplyAgeToSpriteSystem.cpp │ │ │ ├── ApplyAgeToSpriteSystem.h │ │ │ ├── ApplyBlendSpaceFlipbookSystem.cpp │ │ │ ├── ApplyBlendSpaceFlipbookSystem.h │ │ │ ├── ApplyCursorToWorldSystem.cpp │ │ │ ├── ApplyCursorToWorldSystem.h │ │ │ ├── CameraRelationSystem.cpp │ │ │ ├── CameraRelationSystem.h │ │ │ ├── ClearVisionSystem.cpp │ │ │ ├── ClearVisionSystem.h │ │ │ ├── DebugFollowPathSystem.cpp │ │ │ ├── DebugFollowPathSystem.h │ │ │ ├── FaceCameraSystem.cpp │ │ │ ├── FaceCameraSystem.h │ │ │ ├── FlatMovementSystem.cpp │ │ │ ├── FlatMovementSystem.h │ │ │ ├── FollowPathSystem.cpp │ │ │ ├── FollowPathSystem.h │ │ │ ├── HungerSystem.cpp │ │ │ ├── HungerSystem.h │ │ │ ├── MoveCameraSystem.cpp │ │ │ ├── MoveCameraSystem.h │ │ │ ├── RotateCameraSystem.cpp │ │ │ ├── RotateCameraSystem.h │ │ │ ├── SpawnSystem.cpp │ │ │ ├── SpawnSystem.h │ │ │ ├── WaterSystem.cpp │ │ │ ├── WaterSystem.h │ │ │ ├── ZoomCameraSystem.cpp │ │ │ └── ZoomCameraSystem.h │ └── UI │ │ ├── WIdgetLifeOptions.h │ │ ├── WidgetGodsInterface.cpp │ │ ├── WidgetGodsInterface.h │ │ ├── WidgetLifeOptions.cpp │ │ ├── WidgetLifeStats.cpp │ │ ├── WidgetLifeStats.h │ │ ├── WidgetSpawnerIconButton.cpp │ │ └── WidgetSpawnerIconButton.h ├── Multiplayer │ ├── .clang-format │ ├── Actors │ │ ├── MultiPlayerController.cpp │ │ └── MultiPlayerController.h │ ├── Components │ │ ├── MultiPlayerComponent.cpp │ │ ├── MultiPlayerComponent.h │ │ ├── MultiplayerCorrectTransformComponent.cpp │ │ ├── MultiplayerCorrectTransformComponent.h │ │ ├── MultiplayerHitComponent.cpp │ │ ├── MultiplayerHitComponent.h │ │ ├── MultiplayerInputComponent.cpp │ │ ├── MultiplayerInputComponent.h │ │ ├── MultiplayerLocalControlComponent.cpp │ │ ├── MultiplayerLocalControlComponent.h │ │ ├── MultiplayerRocketComponent.cpp │ │ ├── MultiplayerRocketComponent.h │ │ ├── MultiplayerSpawnRocketComponent.cpp │ │ └── MultiplayerSpawnRocketComponent.h │ ├── Constants.h │ ├── Multiplayer.Build.cs │ ├── Multiplayer.cpp │ ├── Multiplayer.h │ ├── MultiplayerGameMode.cpp │ ├── MultiplayerGameMode.h │ ├── MultiplayerGameState.cpp │ ├── MultiplayerGameState.h │ ├── Resources │ │ ├── MultiPlayerInput.cpp │ │ ├── MultiPlayerInput.h │ │ ├── MultiplayerCommands.cpp │ │ └── MultiplayerCommands.h │ ├── Systems │ │ └── Persistent │ │ │ ├── MultiplayerApplyInputSystem.cpp │ │ │ ├── MultiplayerApplyInputSystem.h │ │ │ ├── MultiplayerCorrectTransformSystem.cpp │ │ │ ├── MultiplayerCorrectTransformSystem.h │ │ │ ├── MultiplayerKillActorsSystem.cpp │ │ │ ├── MultiplayerKillActorsSystem.h │ │ │ ├── MultiplayerMovementSystem.cpp │ │ │ ├── MultiplayerMovementSystem.h │ │ │ ├── MultiplayerRocketsLifetimeSystem.cpp │ │ │ ├── MultiplayerRocketsLifetimeSystem.h │ │ │ ├── MultiplayerSpawnRocketSystem.cpp │ │ │ └── MultiplayerSpawnRocketSystem.h │ └── UI │ │ ├── WidgetMultiplayerGameInterface.cpp │ │ ├── WidgetMultiplayerGameInterface.h │ │ ├── WidgetMultiplayerLobby.cpp │ │ ├── WidgetMultiplayerLobby.h │ │ ├── WidgetMultiplayerMainMenu.cpp │ │ ├── WidgetMultiplayerMainMenu.h │ │ ├── WidgetMultiplayerSessionButton.cpp │ │ └── WidgetMultiplayerSessionButton.h ├── Shared │ ├── .clang-format │ ├── Components │ │ ├── FoodComponent.cpp │ │ ├── FoodComponent.h │ │ ├── HungerComponent.cpp │ │ ├── HungerComponent.h │ │ ├── SpaceBoundsComponent.cpp │ │ ├── SpaceBoundsComponent.h │ │ ├── SpeedComponent.cpp │ │ ├── SpeedComponent.h │ │ ├── VelocityComponent.cpp │ │ └── VelocityComponent.h │ ├── Shared.Build.cs │ ├── Shared.cpp │ ├── Shared.h │ ├── TestIterator.cpp │ ├── TestIterators.h │ ├── UI │ │ ├── WidgetCheckbox.cpp │ │ ├── WidgetCheckbox.h │ │ ├── WidgetGameButton.cpp │ │ ├── WidgetGameButton.h │ │ ├── WidgetGameSelectionMenu.cpp │ │ ├── WidgetGameSelectionMenu.h │ │ ├── WidgetScalarParameter.cpp │ │ ├── WidgetScalarParameter.h │ │ ├── WidgetVariantParameter.cpp │ │ └── WidgetVariantParameter.h │ ├── Utils.cpp │ └── Utils.h ├── Systems_Workspace.Target.cs ├── Systems_WorkspaceEditor.Target.cs └── Tutorial │ ├── .clang-format │ ├── Components │ ├── TutorialHighlightComponent.cpp │ ├── TutorialHighlightComponent.h │ ├── TutorialMovementComponent.cpp │ ├── TutorialMovementComponent.h │ ├── TutorialNpcComponent.cpp │ ├── TutorialNpcComponent.h │ ├── TutorialSelectedComponent.cpp │ ├── TutorialSelectedComponent.h │ ├── TutorialTargetComponent.cpp │ └── TutorialTargetComponent.h │ ├── Resources │ ├── TutorialPath.cpp │ └── TutorialPath.h │ ├── Systems │ ├── OneShot │ │ ├── TutorialApplyPathToHighlightSystem.cpp │ │ ├── TutorialApplyPathToHighlightSystem.h │ │ ├── TutorialApplySelectionToHighlightSystem.cpp │ │ └── TutorialApplySelectionToHighlightSystem.h │ └── Persistent │ │ ├── TutorialFindPathSystem.cpp │ │ ├── TutorialFindPathSystem.h │ │ ├── TutorialGoToSystem.cpp │ │ ├── TutorialGoToSystem.h │ │ ├── TutorialImpactSystem.cpp │ │ ├── TutorialImpactSystem.h │ │ ├── TutorialMoveTowardsTargetSystem.cpp │ │ ├── TutorialMoveTowardsTargetSystem.h │ │ ├── TutorialMovementSystem.cpp │ │ ├── TutorialMovementSystem.h │ │ ├── TutorialSelectActorsSystem.cpp │ │ └── TutorialSelectActorsSystem.h │ ├── Tutorial.Build.cs │ ├── Tutorial.cpp │ ├── Tutorial.h │ ├── TutorialGameMode.cpp │ └── TutorialGameMode.h └── Systems_Workspace.uproject /.gitignore: -------------------------------------------------------------------------------- 1 | .vscode 2 | .ignore 3 | .vs 4 | .idea 5 | Binaries 6 | DerivedDataCache 7 | Intermediate 8 | Distribution 9 | Saved 10 | Script 11 | Documentation/Distribution 12 | Content/Collections 13 | Content/Developers 14 | Plugins/Developer 15 | *.code-workspace 16 | *.pdb 17 | *.patch_*.* 18 | *.sln 19 | *.vsconfig 20 | -------------------------------------------------------------------------------- /Config/DefaultEditor.ini: -------------------------------------------------------------------------------- 1 | [EditoronlyBP] 2 | bAllowClassAndBlueprintPinMatching=true 3 | bReplaceBlueprintWithClass= true 4 | bDontLoadBlueprintOutsideEditor= true 5 | bBlueprintIsNotBlueprintType= true -------------------------------------------------------------------------------- /Config/DefaultEditorSettings.ini: -------------------------------------------------------------------------------- 1 | [/Script/SourceCodeAccess.SourceCodeAccessSettings] 2 | PreferredAccessor=VisualStudioCode 3 | 4 | -------------------------------------------------------------------------------- /Config/DefaultGame.ini: -------------------------------------------------------------------------------- 1 | [/Script/EngineSettings.GeneralProjectSettings] 2 | ProjectID=FE8082DE4AE971E97ED8EE821E49CD33 3 | ProjectName=Systems Workspace 4 | -------------------------------------------------------------------------------- /Content/Boids/Actors/BP_Boid.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Content/Boids/Actors/BP_Boid.uasset -------------------------------------------------------------------------------- /Content/Boids/Actors/BP_Food.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Content/Boids/Actors/BP_Food.uasset -------------------------------------------------------------------------------- /Content/Boids/BP_BoidsGameMode.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Content/Boids/BP_BoidsGameMode.uasset -------------------------------------------------------------------------------- /Content/Boids/DA_BoidsSystemsPipeline.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Content/Boids/DA_BoidsSystemsPipeline.uasset -------------------------------------------------------------------------------- /Content/Boids/Data/D_BoidsSettings.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Content/Boids/Data/D_BoidsSettings.uasset -------------------------------------------------------------------------------- /Content/Boids/Data/D_SystemsRunCriteria.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Content/Boids/Data/D_SystemsRunCriteria.uasset -------------------------------------------------------------------------------- /Content/Boids/Maps/BoidsMap.umap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Content/Boids/Maps/BoidsMap.umap -------------------------------------------------------------------------------- /Content/Boids/Maps/BoidsMap_BuiltData.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Content/Boids/Maps/BoidsMap_BuiltData.uasset -------------------------------------------------------------------------------- /Content/Boids/Materials/M_Boid.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Content/Boids/Materials/M_Boid.uasset -------------------------------------------------------------------------------- /Content/Boids/Materials/M_Food.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Content/Boids/Materials/M_Food.uasset -------------------------------------------------------------------------------- /Content/Boids/UI/WBP_BoidsInterface.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Content/Boids/UI/WBP_BoidsInterface.uasset -------------------------------------------------------------------------------- /Content/Boids/UI/WBP_BoidsOptions.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Content/Boids/UI/WBP_BoidsOptions.uasset -------------------------------------------------------------------------------- /Content/Boids/UI/WBP_BoidsRunCriteria.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Content/Boids/UI/WBP_BoidsRunCriteria.uasset -------------------------------------------------------------------------------- /Content/Life/Actors/Animals/BP_Animal_Chicken.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Content/Life/Actors/Animals/BP_Animal_Chicken.uasset -------------------------------------------------------------------------------- /Content/Life/Actors/Animals/BP_Animal_Cow.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Content/Life/Actors/Animals/BP_Animal_Cow.uasset -------------------------------------------------------------------------------- /Content/Life/Actors/Animals/BP_Animal_Goose.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Content/Life/Actors/Animals/BP_Animal_Goose.uasset -------------------------------------------------------------------------------- /Content/Life/Actors/Animals/BP_Animal_Sheep.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Content/Life/Actors/Animals/BP_Animal_Sheep.uasset -------------------------------------------------------------------------------- /Content/Life/Actors/Animals/BP_Animal_Turtle.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Content/Life/Actors/Animals/BP_Animal_Turtle.uasset -------------------------------------------------------------------------------- /Content/Life/Actors/BP_Animal.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Content/Life/Actors/BP_Animal.uasset -------------------------------------------------------------------------------- /Content/Life/Actors/BP_Cursor.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Content/Life/Actors/BP_Cursor.uasset -------------------------------------------------------------------------------- /Content/Life/Actors/BP_God.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Content/Life/Actors/BP_God.uasset -------------------------------------------------------------------------------- /Content/Life/Actors/BP_Human.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Content/Life/Actors/BP_Human.uasset -------------------------------------------------------------------------------- /Content/Life/Actors/BP_Tree.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Content/Life/Actors/BP_Tree.uasset -------------------------------------------------------------------------------- /Content/Life/Actors/Foliage/FBP_Tree_Conifer.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Content/Life/Actors/Foliage/FBP_Tree_Conifer.uasset -------------------------------------------------------------------------------- /Content/Life/Actors/Foliage/FBP_Tree_Regular.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Content/Life/Actors/Foliage/FBP_Tree_Regular.uasset -------------------------------------------------------------------------------- /Content/Life/Actors/Foliage/FBP_Tree_Small.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Content/Life/Actors/Foliage/FBP_Tree_Small.uasset -------------------------------------------------------------------------------- /Content/Life/Actors/Foliage/FBP_Tree_Strong.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Content/Life/Actors/Foliage/FBP_Tree_Strong.uasset -------------------------------------------------------------------------------- /Content/Life/Actors/Trees/BP_Tree_COnifer.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Content/Life/Actors/Trees/BP_Tree_COnifer.uasset -------------------------------------------------------------------------------- /Content/Life/Actors/Trees/BP_Tree_Regular.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Content/Life/Actors/Trees/BP_Tree_Regular.uasset -------------------------------------------------------------------------------- /Content/Life/Actors/Trees/BP_Tree_Small.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Content/Life/Actors/Trees/BP_Tree_Small.uasset -------------------------------------------------------------------------------- /Content/Life/Actors/Trees/BP_Tree_Strong.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Content/Life/Actors/Trees/BP_Tree_Strong.uasset -------------------------------------------------------------------------------- /Content/Life/BP_LifeGameMode.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Content/Life/BP_LifeGameMode.uasset -------------------------------------------------------------------------------- /Content/Life/DA_LifeSystemsPipeline.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Content/Life/DA_LifeSystemsPipeline.uasset -------------------------------------------------------------------------------- /Content/Life/Data/AI/Considerations/D_AttackAnimalPossibility.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Content/Life/Data/AI/Considerations/D_AttackAnimalPossibility.uasset -------------------------------------------------------------------------------- /Content/Life/Data/AI/Considerations/D_DistanceToAnimal.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Content/Life/Data/AI/Considerations/D_DistanceToAnimal.uasset -------------------------------------------------------------------------------- /Content/Life/Data/AI/Considerations/D_DistanceToHuman.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Content/Life/Data/AI/Considerations/D_DistanceToHuman.uasset -------------------------------------------------------------------------------- /Content/Life/Data/AI/Considerations/D_FollowAnimalPossibility.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Content/Life/Data/AI/Considerations/D_FollowAnimalPossibility.uasset -------------------------------------------------------------------------------- /Content/Life/Data/AI/Considerations/D_Hunger.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Content/Life/Data/AI/Considerations/D_Hunger.uasset -------------------------------------------------------------------------------- /Content/Life/Data/AI/Considerations/D_Idle.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Content/Life/Data/AI/Considerations/D_Idle.uasset -------------------------------------------------------------------------------- /Content/Life/Data/AI/Considerations/D_Wander.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Content/Life/Data/AI/Considerations/D_Wander.uasset -------------------------------------------------------------------------------- /Content/Life/Data/AI/Curves/C_AnimalInAttackRange.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Content/Life/Data/AI/Curves/C_AnimalInAttackRange.uasset -------------------------------------------------------------------------------- /Content/Life/Data/AI/Curves/C_Boolean.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Content/Life/Data/AI/Curves/C_Boolean.uasset -------------------------------------------------------------------------------- /Content/Life/Data/AI/Curves/C_DistanceToAnimal.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Content/Life/Data/AI/Curves/C_DistanceToAnimal.uasset -------------------------------------------------------------------------------- /Content/Life/Data/AI/D_AnimalBehavior.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Content/Life/Data/AI/D_AnimalBehavior.uasset -------------------------------------------------------------------------------- /Content/Life/Data/AI/D_HumanBehavior.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Content/Life/Data/AI/D_HumanBehavior.uasset -------------------------------------------------------------------------------- /Content/Life/Data/AI/Perceptions/D_AnimalsInRangePerception.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Content/Life/Data/AI/Perceptions/D_AnimalsInRangePerception.uasset -------------------------------------------------------------------------------- /Content/Life/Data/AI/Perceptions/D_FindNearestAnimalPerception.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Content/Life/Data/AI/Perceptions/D_FindNearestAnimalPerception.uasset -------------------------------------------------------------------------------- /Content/Life/Data/AI/Perceptions/D_FindNearestHuman.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Content/Life/Data/AI/Perceptions/D_FindNearestHuman.uasset -------------------------------------------------------------------------------- /Content/Life/Data/AI/Perceptions/D_HumansInRangePerception.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Content/Life/Data/AI/Perceptions/D_HumansInRangePerception.uasset -------------------------------------------------------------------------------- /Content/Life/Data/AI/Tasks/D_AttackAnimalTask.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Content/Life/Data/AI/Tasks/D_AttackAnimalTask.uasset -------------------------------------------------------------------------------- /Content/Life/Data/AI/Tasks/D_FollowAnimalTask.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Content/Life/Data/AI/Tasks/D_FollowAnimalTask.uasset -------------------------------------------------------------------------------- /Content/Life/Data/AI/Tasks/D_IdleTask.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Content/Life/Data/AI/Tasks/D_IdleTask.uasset -------------------------------------------------------------------------------- /Content/Life/Data/AI/Tasks/D_WanderTask.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Content/Life/Data/AI/Tasks/D_WanderTask.uasset -------------------------------------------------------------------------------- /Content/Life/Data/Aging/C_AnimalSaturation.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Content/Life/Data/Aging/C_AnimalSaturation.uasset -------------------------------------------------------------------------------- /Content/Life/Data/Aging/C_AnimalScale.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Content/Life/Data/Aging/C_AnimalScale.uasset -------------------------------------------------------------------------------- /Content/Life/Data/Aging/C_HumanSaturation.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Content/Life/Data/Aging/C_HumanSaturation.uasset -------------------------------------------------------------------------------- /Content/Life/Data/Aging/C_HumanScale.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Content/Life/Data/Aging/C_HumanScale.uasset -------------------------------------------------------------------------------- /Content/Life/Data/Aging/C_TreeSaturation.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Content/Life/Data/Aging/C_TreeSaturation.uasset -------------------------------------------------------------------------------- /Content/Life/Data/Aging/C_TreeScale.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Content/Life/Data/Aging/C_TreeScale.uasset -------------------------------------------------------------------------------- /Content/Life/Data/C_CameraZoomAngle.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Content/Life/Data/C_CameraZoomAngle.uasset -------------------------------------------------------------------------------- /Content/Life/Data/C_CameraZoomDistance.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Content/Life/Data/C_CameraZoomDistance.uasset -------------------------------------------------------------------------------- /Content/Life/Data/D_LifeDebugSystems.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Content/Life/Data/D_LifeDebugSystems.uasset -------------------------------------------------------------------------------- /Content/Life/Data/D_LifeSettings.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Content/Life/Data/D_LifeSettings.uasset -------------------------------------------------------------------------------- /Content/Life/Flipbooks/SP_Npc_Down.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Content/Life/Flipbooks/SP_Npc_Down.uasset -------------------------------------------------------------------------------- /Content/Life/Flipbooks/SP_Npc_Left.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Content/Life/Flipbooks/SP_Npc_Left.uasset -------------------------------------------------------------------------------- /Content/Life/Flipbooks/SP_Npc_Right.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Content/Life/Flipbooks/SP_Npc_Right.uasset -------------------------------------------------------------------------------- /Content/Life/Flipbooks/SP_Npc_Up.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Content/Life/Flipbooks/SP_Npc_Up.uasset -------------------------------------------------------------------------------- /Content/Life/Maps/LifeMap.umap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Content/Life/Maps/LifeMap.umap -------------------------------------------------------------------------------- /Content/Life/Maps/LifeMap_BuiltData.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Content/Life/Maps/LifeMap_BuiltData.uasset -------------------------------------------------------------------------------- /Content/Life/Maps/LifeMap_sharedassets/Grass_LayerInfo.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Content/Life/Maps/LifeMap_sharedassets/Grass_LayerInfo.uasset -------------------------------------------------------------------------------- /Content/Life/Maps/LifeMap_sharedassets/Rock_LayerInfo.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Content/Life/Maps/LifeMap_sharedassets/Rock_LayerInfo.uasset -------------------------------------------------------------------------------- /Content/Life/Maps/LifeMap_sharedassets/Sand_LayerInfo.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Content/Life/Maps/LifeMap_sharedassets/Sand_LayerInfo.uasset -------------------------------------------------------------------------------- /Content/Life/Materials/MF_LandscapeCoord.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Content/Life/Materials/MF_LandscapeCoord.uasset -------------------------------------------------------------------------------- /Content/Life/Materials/MF_LandscapeHeight.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Content/Life/Materials/MF_LandscapeHeight.uasset -------------------------------------------------------------------------------- /Content/Life/Materials/MF_MaxWeightValue.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Content/Life/Materials/MF_MaxWeightValue.uasset -------------------------------------------------------------------------------- /Content/Life/Materials/M_Cursor.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Content/Life/Materials/M_Cursor.uasset -------------------------------------------------------------------------------- /Content/Life/Materials/M_Landscape.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Content/Life/Materials/M_Landscape.uasset -------------------------------------------------------------------------------- /Content/Life/Materials/M_Sprite.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Content/Life/Materials/M_Sprite.uasset -------------------------------------------------------------------------------- /Content/Life/Materials/M_SpriteClearVision.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Content/Life/Materials/M_SpriteClearVision.uasset -------------------------------------------------------------------------------- /Content/Life/Materials/M_Water.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Content/Life/Materials/M_Water.uasset -------------------------------------------------------------------------------- /Content/Life/Sprites/SP_Animal0.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Content/Life/Sprites/SP_Animal0.uasset -------------------------------------------------------------------------------- /Content/Life/Sprites/SP_Animal1.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Content/Life/Sprites/SP_Animal1.uasset -------------------------------------------------------------------------------- /Content/Life/Sprites/SP_Animal2.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Content/Life/Sprites/SP_Animal2.uasset -------------------------------------------------------------------------------- /Content/Life/Sprites/SP_Animal3.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Content/Life/Sprites/SP_Animal3.uasset -------------------------------------------------------------------------------- /Content/Life/Sprites/SP_Animal4.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Content/Life/Sprites/SP_Animal4.uasset -------------------------------------------------------------------------------- /Content/Life/Sprites/SP_Animal5.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Content/Life/Sprites/SP_Animal5.uasset -------------------------------------------------------------------------------- /Content/Life/Sprites/SP_Npc_Down0.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Content/Life/Sprites/SP_Npc_Down0.uasset -------------------------------------------------------------------------------- /Content/Life/Sprites/SP_Npc_Down1.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Content/Life/Sprites/SP_Npc_Down1.uasset -------------------------------------------------------------------------------- /Content/Life/Sprites/SP_Npc_Down2.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Content/Life/Sprites/SP_Npc_Down2.uasset -------------------------------------------------------------------------------- /Content/Life/Sprites/SP_Npc_Down3.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Content/Life/Sprites/SP_Npc_Down3.uasset -------------------------------------------------------------------------------- /Content/Life/Sprites/SP_Npc_Left0.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Content/Life/Sprites/SP_Npc_Left0.uasset -------------------------------------------------------------------------------- /Content/Life/Sprites/SP_Npc_Left1.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Content/Life/Sprites/SP_Npc_Left1.uasset -------------------------------------------------------------------------------- /Content/Life/Sprites/SP_Npc_Left2.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Content/Life/Sprites/SP_Npc_Left2.uasset -------------------------------------------------------------------------------- /Content/Life/Sprites/SP_Npc_Left3.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Content/Life/Sprites/SP_Npc_Left3.uasset -------------------------------------------------------------------------------- /Content/Life/Sprites/SP_Npc_Right0.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Content/Life/Sprites/SP_Npc_Right0.uasset -------------------------------------------------------------------------------- /Content/Life/Sprites/SP_Npc_Right1.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Content/Life/Sprites/SP_Npc_Right1.uasset -------------------------------------------------------------------------------- /Content/Life/Sprites/SP_Npc_Right2.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Content/Life/Sprites/SP_Npc_Right2.uasset -------------------------------------------------------------------------------- /Content/Life/Sprites/SP_Npc_Right3.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Content/Life/Sprites/SP_Npc_Right3.uasset -------------------------------------------------------------------------------- /Content/Life/Sprites/SP_Npc_Up0.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Content/Life/Sprites/SP_Npc_Up0.uasset -------------------------------------------------------------------------------- /Content/Life/Sprites/SP_Npc_Up1.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Content/Life/Sprites/SP_Npc_Up1.uasset -------------------------------------------------------------------------------- /Content/Life/Sprites/SP_Npc_Up2.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Content/Life/Sprites/SP_Npc_Up2.uasset -------------------------------------------------------------------------------- /Content/Life/Sprites/SP_Npc_Up3.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Content/Life/Sprites/SP_Npc_Up3.uasset -------------------------------------------------------------------------------- /Content/Life/Sprites/SP_Tree0.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Content/Life/Sprites/SP_Tree0.uasset -------------------------------------------------------------------------------- /Content/Life/Sprites/SP_Tree1.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Content/Life/Sprites/SP_Tree1.uasset -------------------------------------------------------------------------------- /Content/Life/Sprites/SP_Tree2.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Content/Life/Sprites/SP_Tree2.uasset -------------------------------------------------------------------------------- /Content/Life/Sprites/SP_Tree3.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Content/Life/Sprites/SP_Tree3.uasset -------------------------------------------------------------------------------- /Content/Life/Textures/Grass.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Content/Life/Textures/Grass.uasset -------------------------------------------------------------------------------- /Content/Life/Textures/MAS-Characters-P8.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Content/Life/Textures/MAS-Characters-P8.uasset -------------------------------------------------------------------------------- /Content/Life/Textures/Rock.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Content/Life/Textures/Rock.uasset -------------------------------------------------------------------------------- /Content/Life/Textures/Sand.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Content/Life/Textures/Sand.uasset -------------------------------------------------------------------------------- /Content/Life/Textures/Snow.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Content/Life/Textures/Snow.uasset -------------------------------------------------------------------------------- /Content/Life/Textures/Tree0.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Content/Life/Textures/Tree0.uasset -------------------------------------------------------------------------------- /Content/Life/Textures/Tree1.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Content/Life/Textures/Tree1.uasset -------------------------------------------------------------------------------- /Content/Life/Textures/Tree2.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Content/Life/Textures/Tree2.uasset -------------------------------------------------------------------------------- /Content/Life/Textures/Tree3.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Content/Life/Textures/Tree3.uasset -------------------------------------------------------------------------------- /Content/Life/Textures/Water.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Content/Life/Textures/Water.uasset -------------------------------------------------------------------------------- /Content/Life/UI/WBP_GodsInterface.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Content/Life/UI/WBP_GodsInterface.uasset -------------------------------------------------------------------------------- /Content/Life/UI/WBP_LifeOptions.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Content/Life/UI/WBP_LifeOptions.uasset -------------------------------------------------------------------------------- /Content/Life/UI/WBP_LifeStats.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Content/Life/UI/WBP_LifeStats.uasset -------------------------------------------------------------------------------- /Content/Life/UI/WBP_SpawnerIconButton.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Content/Life/UI/WBP_SpawnerIconButton.uasset -------------------------------------------------------------------------------- /Content/Multiplayer/Actors/BP_MultiplayerPawn.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Content/Multiplayer/Actors/BP_MultiplayerPawn.uasset -------------------------------------------------------------------------------- /Content/Multiplayer/Actors/BP_MultiplayerRocket.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Content/Multiplayer/Actors/BP_MultiplayerRocket.uasset -------------------------------------------------------------------------------- /Content/Multiplayer/BP_MultiplayerGameMode.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Content/Multiplayer/BP_MultiplayerGameMode.uasset -------------------------------------------------------------------------------- /Content/Multiplayer/BP_MultiplayerGameState.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Content/Multiplayer/BP_MultiplayerGameState.uasset -------------------------------------------------------------------------------- /Content/Multiplayer/BP_MultiplayerMenuMode.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Content/Multiplayer/BP_MultiplayerMenuMode.uasset -------------------------------------------------------------------------------- /Content/Multiplayer/DA_MultiplayerClientSystemsPipeline.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Content/Multiplayer/DA_MultiplayerClientSystemsPipeline.uasset -------------------------------------------------------------------------------- /Content/Multiplayer/DA_MultiplayerServerSystemsPipeline.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Content/Multiplayer/DA_MultiplayerServerSystemsPipeline.uasset -------------------------------------------------------------------------------- /Content/Multiplayer/Data/D_MultiplayerCommands.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Content/Multiplayer/Data/D_MultiplayerCommands.uasset -------------------------------------------------------------------------------- /Content/Multiplayer/Maps/MultiplayerGameMap.umap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Content/Multiplayer/Maps/MultiplayerGameMap.umap -------------------------------------------------------------------------------- /Content/Multiplayer/Maps/MultiplayerGameMap_BuiltData.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Content/Multiplayer/Maps/MultiplayerGameMap_BuiltData.uasset -------------------------------------------------------------------------------- /Content/Multiplayer/Maps/MultiplayerMenuMap.umap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Content/Multiplayer/Maps/MultiplayerMenuMap.umap -------------------------------------------------------------------------------- /Content/Multiplayer/Materials/M_MultiPlayer.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Content/Multiplayer/Materials/M_MultiPlayer.uasset -------------------------------------------------------------------------------- /Content/Multiplayer/Materials/M_Rocket.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Content/Multiplayer/Materials/M_Rocket.uasset -------------------------------------------------------------------------------- /Content/Multiplayer/UI/WBP_MultiplayerGameInterface.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Content/Multiplayer/UI/WBP_MultiplayerGameInterface.uasset -------------------------------------------------------------------------------- /Content/Multiplayer/UI/WBP_MultiplayerLobby.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Content/Multiplayer/UI/WBP_MultiplayerLobby.uasset -------------------------------------------------------------------------------- /Content/Multiplayer/UI/WBP_MultiplayerMainMenu.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Content/Multiplayer/UI/WBP_MultiplayerMainMenu.uasset -------------------------------------------------------------------------------- /Content/Multiplayer/UI/WBP_MultiplayerSessionButton.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Content/Multiplayer/UI/WBP_MultiplayerSessionButton.uasset -------------------------------------------------------------------------------- /Content/Shared/Actors/BP_SpaceBounds.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Content/Shared/Actors/BP_SpaceBounds.uasset -------------------------------------------------------------------------------- /Content/Shared/Maps/GamesSelectionMap.umap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Content/Shared/Maps/GamesSelectionMap.umap -------------------------------------------------------------------------------- /Content/Shared/UI/WBP_Checkbox.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Content/Shared/UI/WBP_Checkbox.uasset -------------------------------------------------------------------------------- /Content/Shared/UI/WBP_GameButton.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Content/Shared/UI/WBP_GameButton.uasset -------------------------------------------------------------------------------- /Content/Shared/UI/WBP_GameSelectionMenu.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Content/Shared/UI/WBP_GameSelectionMenu.uasset -------------------------------------------------------------------------------- /Content/Shared/UI/WBP_ScalarParameter.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Content/Shared/UI/WBP_ScalarParameter.uasset -------------------------------------------------------------------------------- /Content/Shared/UI/WBP_VariantParameter.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Content/Shared/UI/WBP_VariantParameter.uasset -------------------------------------------------------------------------------- /Content/SoundPropagation/BP_SoundPropagationGameMode.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Content/SoundPropagation/BP_SoundPropagationGameMode.uasset -------------------------------------------------------------------------------- /Content/SoundPropagation/DA_SoundPropagationSystemsPipeline.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Content/SoundPropagation/DA_SoundPropagationSystemsPipeline.uasset -------------------------------------------------------------------------------- /Content/SoundPropagation/Maps/SoundPropagationMap.umap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Content/SoundPropagation/Maps/SoundPropagationMap.umap -------------------------------------------------------------------------------- /Content/SoundPropagation/Maps/_GENERATED/PatrykBudzynski/CubeGridToolOutput_30B3D930.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Content/SoundPropagation/Maps/_GENERATED/PatrykBudzynski/CubeGridToolOutput_30B3D930.uasset -------------------------------------------------------------------------------- /Content/Tutorial/Actors/BP_Npc.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Content/Tutorial/Actors/BP_Npc.uasset -------------------------------------------------------------------------------- /Content/Tutorial/BP_TutorialGameMode.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Content/Tutorial/BP_TutorialGameMode.uasset -------------------------------------------------------------------------------- /Content/Tutorial/Components/BP_OffsetComponent.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Content/Tutorial/Components/BP_OffsetComponent.uasset -------------------------------------------------------------------------------- /Content/Tutorial/DA_TutorialSystemsPipeline.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Content/Tutorial/DA_TutorialSystemsPipeline.uasset -------------------------------------------------------------------------------- /Content/Tutorial/Data/DA_SpatialPartitioningSettings.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Content/Tutorial/Data/DA_SpatialPartitioningSettings.uasset -------------------------------------------------------------------------------- /Content/Tutorial/Maps/TutorialMap.umap: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Content/Tutorial/Maps/TutorialMap.umap -------------------------------------------------------------------------------- /Content/Tutorial/Maps/TutorialMap_BuiltData.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Content/Tutorial/Maps/TutorialMap_BuiltData.uasset -------------------------------------------------------------------------------- /Content/Tutorial/Materials/M_Npc.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Content/Tutorial/Materials/M_Npc.uasset -------------------------------------------------------------------------------- /Content/Tutorial/Systems/BP_ShakeSystem.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Content/Tutorial/Systems/BP_ShakeSystem.uasset -------------------------------------------------------------------------------- /Content/Tutorial/Systems/BP_ShakeSystemQuery.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Content/Tutorial/Systems/BP_ShakeSystemQuery.uasset -------------------------------------------------------------------------------- /Plugins/ReactiveSystems/Resources/Icon128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Plugins/ReactiveSystems/Resources/Icon128.png -------------------------------------------------------------------------------- /Plugins/ReactiveSystems/Source/ReactiveSystems/Private/ReactiveSystems.cpp: -------------------------------------------------------------------------------- 1 | #include "ReactiveSystems/Public/ReactiveSystems.h" 2 | 3 | #include "ReactiveSystems/Public/Systems/SystemsChangeDetectionSystem.h" 4 | #include "Systems/Public/SystemsReflection.h" 5 | 6 | #define LOCTEXT_NAMESPACE "FReactiveSystemsModule" 7 | #define SYSTEMS_NAMESPACE "ReactiveSystems" 8 | 9 | void FReactiveSystemsModule::StartupModule() 10 | { 11 | REGISTER_SYSTEM_FUNCTION(SystemsChangeDetectionSystem); 12 | } 13 | 14 | void FReactiveSystemsModule::ShutdownModule() 15 | { 16 | UNREGISTER_SYSTEM_FUNCTION(SystemsChangeDetectionSystem); 17 | } 18 | 19 | #undef LOCTEXT_NAMESPACE 20 | #undef SYSTEMS_NAMESPACE 21 | 22 | IMPLEMENT_MODULE(FReactiveSystemsModule, ReactiveSystems) -------------------------------------------------------------------------------- /Plugins/ReactiveSystems/Source/ReactiveSystems/Private/Systems/SystemsChangeDetectionSystem.cpp: -------------------------------------------------------------------------------- 1 | #include "ReactiveSystems/Public/Systems/SystemsChangeDetectionSystem.h" 2 | 3 | #include "ReactiveSystems/Public/Resources/SystemsChangeDetection.h" 4 | #include "Systems/Public/SystemsWorld.h" 5 | 6 | void SystemsChangeDetectionSystem(USystemsWorld& Systems) 7 | { 8 | auto* ChangeDetection = Systems.Resource(); 9 | if (IsValid(ChangeDetection)) 10 | { 11 | const auto Signature = FSystemsChangeSignature( 12 | Systems.LastChangedComponents(), Systems.LastChangedResources()); 13 | ChangeDetection->BroadcastChanges(Signature, Systems); 14 | } 15 | } -------------------------------------------------------------------------------- /Plugins/ReactiveSystems/Source/ReactiveSystems/Private/SystemsChangeDetectionBlueprintLibrary.cpp: -------------------------------------------------------------------------------- 1 | #include "ReactiveSystems/Public/SystemsChangeDetectionBlueprintLibrary.h" 2 | 3 | #include "ReactiveSystems/Public/Resources/SystemsChangeDetection.h" 4 | #include "Systems/Public/SystemsWorld.h" 5 | 6 | FSystemsChangeSignature 7 | USystemsChangeDetectionBlueprintLibrary::NewChangeSignature( 8 | const USystemsWorld* Systems, 9 | const TArray& Components, 10 | const TArray& Resources) 11 | { 12 | FSystemsChangeSignature Result = {}; 13 | for (const auto* Type : Components) 14 | { 15 | if (IsValid(Type)) 16 | { 17 | Result.ComponentRaw(Type, Systems); 18 | } 19 | } 20 | for (const auto* Type : Resources) 21 | { 22 | if (IsValid(Type)) 23 | { 24 | Result.ResourceRaw(Type); 25 | } 26 | } 27 | return Result; 28 | } -------------------------------------------------------------------------------- /Plugins/ReactiveSystems/Source/ReactiveSystems/Public/ReactiveSystems.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "CoreMinimal.h" 4 | 5 | #include "Modules/ModuleManager.h" 6 | 7 | class FReactiveSystemsModule : public IModuleInterface 8 | { 9 | public: 10 | virtual void StartupModule() override; 11 | 12 | virtual void ShutdownModule() override; 13 | }; 14 | -------------------------------------------------------------------------------- /Plugins/ReactiveSystems/Source/ReactiveSystems/Public/Systems/SystemsChangeDetectionSystem.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "CoreMinimal.h" 4 | 5 | class USystemsWorld; 6 | 7 | void REACTIVESYSTEMS_API SystemsChangeDetectionSystem(USystemsWorld& Systems); 8 | -------------------------------------------------------------------------------- /Plugins/ReactiveSystems/Source/ReactiveSystems/Public/SystemsChangeDetectionBlueprintLibrary.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "CoreMinimal.h" 4 | 5 | #include "Kismet/BlueprintFunctionLibrary.h" 6 | 7 | #include "SystemsChangeDetectionBlueprintLibrary.generated.h" 8 | 9 | class USystemsWorld; 10 | struct FSystemsChangeSignature; 11 | 12 | UCLASS() 13 | class REACTIVESYSTEMS_API USystemsChangeDetectionBlueprintLibrary 14 | : public UBlueprintFunctionLibrary 15 | { 16 | GENERATED_BODY() 17 | 18 | public: 19 | UFUNCTION(BlueprintPure, 20 | Meta = (AutoCreateRefTerm = "Components,Resources")) 21 | static FSystemsChangeSignature NewChangeSignature( 22 | const USystemsWorld* Systems, 23 | const TArray& Components, 24 | const TArray& Resources); 25 | }; -------------------------------------------------------------------------------- /Plugins/Systems/Content/SystemsMacros.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Plugins/Systems/Content/SystemsMacros.uasset -------------------------------------------------------------------------------- /Plugins/Systems/Documentation/Assets/game_components_blueprint.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Plugins/Systems/Documentation/Assets/game_components_blueprint.png -------------------------------------------------------------------------------- /Plugins/Systems/Documentation/Assets/game_components_cpp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Plugins/Systems/Documentation/Assets/game_components_cpp.png -------------------------------------------------------------------------------- /Plugins/Systems/Documentation/Assets/game_level_mode.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Plugins/Systems/Documentation/Assets/game_level_mode.png -------------------------------------------------------------------------------- /Plugins/Systems/Documentation/Assets/game_systems_blueprint.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Plugins/Systems/Documentation/Assets/game_systems_blueprint.png -------------------------------------------------------------------------------- /Plugins/Systems/Documentation/Assets/game_systems_cpp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Plugins/Systems/Documentation/Assets/game_systems_cpp.png -------------------------------------------------------------------------------- /Plugins/Systems/Documentation/Assets/systems_actor_components_a.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Plugins/Systems/Documentation/Assets/systems_actor_components_a.png -------------------------------------------------------------------------------- /Plugins/Systems/Documentation/Assets/systems_actor_components_b.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Plugins/Systems/Documentation/Assets/systems_actor_components_b.png -------------------------------------------------------------------------------- /Plugins/Systems/Documentation/Assets/systems_actor_components_c.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Plugins/Systems/Documentation/Assets/systems_actor_components_c.png -------------------------------------------------------------------------------- /Plugins/Systems/Documentation/Assets/systems_actor_create.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Plugins/Systems/Documentation/Assets/systems_actor_create.png -------------------------------------------------------------------------------- /Plugins/Systems/Documentation/Assets/systems_component_create.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Plugins/Systems/Documentation/Assets/systems_component_create.png -------------------------------------------------------------------------------- /Plugins/Systems/Documentation/Assets/systems_component_properties.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Plugins/Systems/Documentation/Assets/systems_component_properties.png -------------------------------------------------------------------------------- /Plugins/Systems/Documentation/Assets/systems_pipeline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Plugins/Systems/Documentation/Assets/systems_pipeline.png -------------------------------------------------------------------------------- /Plugins/Systems/Documentation/Assets/systems_pipeline_asset_resources.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Plugins/Systems/Documentation/Assets/systems_pipeline_asset_resources.png -------------------------------------------------------------------------------- /Plugins/Systems/Documentation/Assets/systems_pipeline_components.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Plugins/Systems/Documentation/Assets/systems_pipeline_components.png -------------------------------------------------------------------------------- /Plugins/Systems/Documentation/Assets/systems_pipeline_create_data_asset.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Plugins/Systems/Documentation/Assets/systems_pipeline_create_data_asset.png -------------------------------------------------------------------------------- /Plugins/Systems/Documentation/Assets/systems_pipeline_create_query_object.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Plugins/Systems/Documentation/Assets/systems_pipeline_create_query_object.png -------------------------------------------------------------------------------- /Plugins/Systems/Documentation/Assets/systems_pipeline_create_scriptable_system.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Plugins/Systems/Documentation/Assets/systems_pipeline_create_scriptable_system.png -------------------------------------------------------------------------------- /Plugins/Systems/Documentation/Assets/systems_pipeline_game_mode_a.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Plugins/Systems/Documentation/Assets/systems_pipeline_game_mode_a.png -------------------------------------------------------------------------------- /Plugins/Systems/Documentation/Assets/systems_pipeline_game_mode_b.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Plugins/Systems/Documentation/Assets/systems_pipeline_game_mode_b.png -------------------------------------------------------------------------------- /Plugins/Systems/Documentation/Assets/systems_pipeline_game_state_a.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Plugins/Systems/Documentation/Assets/systems_pipeline_game_state_a.png -------------------------------------------------------------------------------- /Plugins/Systems/Documentation/Assets/systems_pipeline_game_state_b.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Plugins/Systems/Documentation/Assets/systems_pipeline_game_state_b.png -------------------------------------------------------------------------------- /Plugins/Systems/Documentation/Assets/systems_pipeline_game_state_c.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Plugins/Systems/Documentation/Assets/systems_pipeline_game_state_c.png -------------------------------------------------------------------------------- /Plugins/Systems/Documentation/Assets/systems_pipeline_lambda_systems.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Plugins/Systems/Documentation/Assets/systems_pipeline_lambda_systems.png -------------------------------------------------------------------------------- /Plugins/Systems/Documentation/Assets/systems_pipeline_query_object.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Plugins/Systems/Documentation/Assets/systems_pipeline_query_object.png -------------------------------------------------------------------------------- /Plugins/Systems/Documentation/Assets/systems_pipeline_system_query_a.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Plugins/Systems/Documentation/Assets/systems_pipeline_system_query_a.png -------------------------------------------------------------------------------- /Plugins/Systems/Documentation/Assets/systems_pipeline_system_query_b.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Plugins/Systems/Documentation/Assets/systems_pipeline_system_query_b.png -------------------------------------------------------------------------------- /Plugins/Systems/Documentation/Assets/systems_pipeline_system_query_c.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Plugins/Systems/Documentation/Assets/systems_pipeline_system_query_c.png -------------------------------------------------------------------------------- /Plugins/Systems/Documentation/Assets/systems_pipeline_systems.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Plugins/Systems/Documentation/Assets/systems_pipeline_systems.png -------------------------------------------------------------------------------- /Plugins/Systems/Documentation/Assets/systems_pipeline_type_resources.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Plugins/Systems/Documentation/Assets/systems_pipeline_type_resources.png -------------------------------------------------------------------------------- /Plugins/Systems/Documentation/Assets/systems_query_create.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Plugins/Systems/Documentation/Assets/systems_query_create.png -------------------------------------------------------------------------------- /Plugins/Systems/Documentation/Assets/systems_query_properties.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Plugins/Systems/Documentation/Assets/systems_query_properties.png -------------------------------------------------------------------------------- /Plugins/Systems/Documentation/Assets/systems_system_create.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Plugins/Systems/Documentation/Assets/systems_system_create.png -------------------------------------------------------------------------------- /Plugins/Systems/Documentation/Assets/systems_system_run_a.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Plugins/Systems/Documentation/Assets/systems_system_run_a.png -------------------------------------------------------------------------------- /Plugins/Systems/Documentation/Assets/systems_system_run_b.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Plugins/Systems/Documentation/Assets/systems_system_run_b.png -------------------------------------------------------------------------------- /Plugins/Systems/Documentation/Assets/systems_system_run_c.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Plugins/Systems/Documentation/Assets/systems_system_run_c.png -------------------------------------------------------------------------------- /Plugins/Systems/Documentation/Assets/systems_system_run_d.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Plugins/Systems/Documentation/Assets/systems_system_run_d.png -------------------------------------------------------------------------------- /Plugins/Systems/Documentation/Book/architecture/index.txt: -------------------------------------------------------------------------------- 1 | world.md 2 | systems.md 3 | components.md 4 | resources.md 5 | subsystem.md 6 | pipelines.md 7 | iterators.md 8 | channels.md 9 | -------------------------------------------------------------------------------- /Plugins/Systems/Documentation/Book/index.md: -------------------------------------------------------------------------------- 1 | # Book 2 | 3 | This book covers explanation of Systems Architecture, as well as provides learning materials 4 | such as guidelines with best practices to keep your project healthy and your sanity in check, 5 | it also provides tutorial showing step-by-step how to use Systems Architecture in your game. 6 | -------------------------------------------------------------------------------- /Plugins/Systems/Documentation/Book/index.txt: -------------------------------------------------------------------------------- 1 | getting_started.md 2 | architecture: Architecture 3 | learning_materials: Learning materials 4 | faq.md 5 | -------------------------------------------------------------------------------- /Plugins/Systems/Documentation/Book/learning_materials/index.md: -------------------------------------------------------------------------------- 1 | # Learning materials 2 | 3 | List of learning materials that showcase common and special case usage of Systems Architecture. 4 | -------------------------------------------------------------------------------- /Plugins/Systems/Documentation/Book/learning_materials/index.txt: -------------------------------------------------------------------------------- 1 | tutorial: Tutorial 2 | -------------------------------------------------------------------------------- /Plugins/Systems/Documentation/Book/learning_materials/tutorial/index.md: -------------------------------------------------------------------------------- 1 | # Tutorial 2 | 3 | Here we will showcase step-by-step process of basic usage of Systems 4 | Architecture - both for C++ and Blueprint usage scenarios. 5 | -------------------------------------------------------------------------------- /Plugins/Systems/Documentation/Book/learning_materials/tutorial/index.txt: -------------------------------------------------------------------------------- 1 | installation.md 2 | setup_component.md 3 | setup_actor.md 4 | setup_system.md 5 | setup_game.md 6 | -------------------------------------------------------------------------------- /Plugins/Systems/Documentation/Book/learning_materials/tutorial/installation.md: -------------------------------------------------------------------------------- 1 | # Installation 2 | 3 | Until plugin gets accepted to Unreal Engine Marketplace, we need to install plugin 4 | from GitHub. 5 | 6 | 1. Download plugin from [GitHub Release page](https://github.com/PsichiX/Unreal-Systems-Architecture/releases) 7 | (core plugin is in `Systems-Architecture.zip` archive file). 8 | 9 | 1. Make sure project folder structure contains `Plugins` folder in its root (next 10 | to `Content` and `Source` folders), then unzip its content into `Plugins` folder. 11 | 12 | 1. Launch editor and confirm plugin is properly added by trying to create new data asset 13 | of [`class: USystemsPipeline`]() type: 14 | 15 | ![Create pipeline data asset](../../../assets/systems_pipeline_create_data_asset.png) 16 | -------------------------------------------------------------------------------- /Plugins/Systems/Documentation/Book/qna.md: -------------------------------------------------------------------------------- 1 | # Q&A 2 | 3 | Here are gonna land questions that not necessarly deserve a full chapter in the book, 4 | but are still common and important to answer. 5 | -------------------------------------------------------------------------------- /Plugins/Systems/Documentation/UnrealDoc.toml: -------------------------------------------------------------------------------- 1 | input_dirs = [ 2 | "../Source/Systems/Public", 3 | "./Snippets.h", 4 | "./Book" 5 | ] 6 | output_dir = "./Distribution" 7 | backend = "MdBook" 8 | 9 | [backend_mdbook] 10 | title = "Systems - Modular and scalable game architecture for orthogonal game logic" 11 | build = true 12 | cleanup = true 13 | # header = "header.md" 14 | # footer = "footer.md" 15 | assets = "Assets/" 16 | -------------------------------------------------------------------------------- /Plugins/Systems/Resources/Icon128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Plugins/Systems/Resources/Icon128.png -------------------------------------------------------------------------------- /Plugins/Systems/Source/Systems/Private/ActorArchetypeLocation.cpp: -------------------------------------------------------------------------------- 1 | #include "Systems/Public/ActorArchetypeLocation.h" -------------------------------------------------------------------------------- /Plugins/Systems/Source/Systems/Private/ConsumedActorComponents.cpp: -------------------------------------------------------------------------------- 1 | #include "Systems/Public/ConsumedActorComponents.h" -------------------------------------------------------------------------------- /Plugins/Systems/Source/Systems/Private/DynamicIterator/DynamicAllEvent.cpp: -------------------------------------------------------------------------------- 1 | #include "Systems/Public/DynamicIterator/DynamicAllEvent.h" 2 | -------------------------------------------------------------------------------- /Plugins/Systems/Source/Systems/Private/DynamicIterator/DynamicAnyEvent.cpp: -------------------------------------------------------------------------------- 1 | #include "Systems/Public/DynamicIterator/DynamicAnyEvent.h" 2 | -------------------------------------------------------------------------------- /Plugins/Systems/Source/Systems/Private/DynamicIterator/DynamicChain.cpp: -------------------------------------------------------------------------------- 1 | #include "Systems/Public/DynamicIterator/DynamicChain.h" 2 | 3 | UObject* UDynamicChain::Next() 4 | { 5 | if (IsValid(this->InnerA) == false || IsValid(this->InnerB) == false) 6 | { 7 | return nullptr; 8 | } 9 | auto* Value = this->InnerA->Next(); 10 | if (IsValid(Value)) 11 | { 12 | return Value; 13 | } 14 | return this->InnerB->Next(); 15 | } 16 | 17 | int UDynamicChain::EstimateSizeLeft() const 18 | { 19 | return IsValid(this->InnerA) && IsValid(this->InnerB) 20 | ? this->InnerA->EstimateSizeLeft() + this->InnerB->EstimateSizeLeft() 21 | : 0; 22 | } 23 | -------------------------------------------------------------------------------- /Plugins/Systems/Source/Systems/Private/DynamicIterator/DynamicComparedByEvent.cpp: -------------------------------------------------------------------------------- 1 | #include "Systems/Public/DynamicIterator/DynamicComparedByEvent.h" 2 | -------------------------------------------------------------------------------- /Plugins/Systems/Source/Systems/Private/DynamicIterator/DynamicEnumerate.cpp: -------------------------------------------------------------------------------- 1 | #include "Systems/Public/DynamicIterator/DynamicEnumerate.h" 2 | 3 | UObject* UDynamicEnumerate::Next() 4 | { 5 | if (IsValid(this->Inner) == false) 6 | { 7 | return nullptr; 8 | } 9 | auto* Value = this->Inner->Next(); 10 | if (IsValid(Value)) 11 | { 12 | auto* Result = NewObject(); 13 | Result->Index = this->Index++; 14 | Result->Value = Value; 15 | return Value; 16 | } 17 | return nullptr; 18 | } 19 | 20 | int UDynamicEnumerate::EstimateSizeLeft() const 21 | { 22 | return IsValid(this->Inner) ? this->Inner->EstimateSizeLeft() : 0; 23 | } 24 | -------------------------------------------------------------------------------- /Plugins/Systems/Source/Systems/Private/DynamicIterator/DynamicFIlter.cpp: -------------------------------------------------------------------------------- 1 | #include "Systems/Public/DynamicIterator/DynamicFilter.h" 2 | 3 | UObject* UDynamicFilter::Next() 4 | { 5 | if (IsValid(this->Inner) == false) 6 | { 7 | return nullptr; 8 | } 9 | auto* Output = NewObject(this); 10 | while (true) 11 | { 12 | auto* Input = this->Inner->Next(); 13 | if (IsValid(Input) == false) 14 | { 15 | break; 16 | } 17 | Output->Value = false; 18 | this->Event.ExecuteIfBound(Input, Output); 19 | if (Output->Value) 20 | { 21 | return Input; 22 | } 23 | } 24 | return nullptr; 25 | } 26 | 27 | int UDynamicFilter::EstimateSizeLeft() const 28 | { 29 | return IsValid(this->Inner) ? this->Inner->EstimateSizeLeft() : 0; 30 | } 31 | -------------------------------------------------------------------------------- /Plugins/Systems/Source/Systems/Private/DynamicIterator/DynamicFilterEvent.cpp: -------------------------------------------------------------------------------- 1 | #include "Systems/Public/DynamicIterator/DynamicFilterEvent.h" 2 | -------------------------------------------------------------------------------- /Plugins/Systems/Source/Systems/Private/DynamicIterator/DynamicFilterMap.cpp: -------------------------------------------------------------------------------- 1 | #include "Systems/Public/DynamicIterator/DynamicFilterMap.h" 2 | 3 | UObject* UDynamicFilterMap::Next() 4 | { 5 | if (IsValid(this->Inner) == false) 6 | { 7 | return nullptr; 8 | } 9 | auto* Output = NewObject(this); 10 | while (true) 11 | { 12 | auto* Input = this->Inner->Next(); 13 | if (IsValid(Input) == false) 14 | { 15 | break; 16 | } 17 | Output->Value = nullptr; 18 | this->Event.ExecuteIfBound(Input, Output); 19 | if (IsValid(Output->Value)) 20 | { 21 | return Output->Value; 22 | } 23 | } 24 | return nullptr; 25 | } 26 | 27 | int UDynamicFilterMap::EstimateSizeLeft() const 28 | { 29 | return IsValid(this->Inner) ? this->Inner->EstimateSizeLeft() : 0; 30 | } 31 | -------------------------------------------------------------------------------- /Plugins/Systems/Source/Systems/Private/DynamicIterator/DynamicFilterMapEvent.cpp: -------------------------------------------------------------------------------- 1 | #include "Systems/Public/DynamicIterator/DynamicFilterMapEvent.h" 2 | -------------------------------------------------------------------------------- /Plugins/Systems/Source/Systems/Private/DynamicIterator/DynamicFindEvent.cpp: -------------------------------------------------------------------------------- 1 | #include "Systems/Public/DynamicIterator/DynamicFindEvent.h" 2 | -------------------------------------------------------------------------------- /Plugins/Systems/Source/Systems/Private/DynamicIterator/DynamicFindMapEvent.cpp: -------------------------------------------------------------------------------- 1 | #include "Systems/Public/DynamicIterator/DynamicFindMapEvent.h" 2 | -------------------------------------------------------------------------------- /Plugins/Systems/Source/Systems/Private/DynamicIterator/DynamicForEachEvent.cpp: -------------------------------------------------------------------------------- 1 | #include "Systems/Public/DynamicIterator/DynamicForEachEvent.h" 2 | -------------------------------------------------------------------------------- /Plugins/Systems/Source/Systems/Private/DynamicIterator/DynamicInspect.cpp: -------------------------------------------------------------------------------- 1 | #include "Systems/Public/DynamicIterator/DynamicInspect.h" 2 | 3 | UObject* UDynamicInspect::Next() 4 | { 5 | if (IsValid(this->Inner) == false) 6 | { 7 | return nullptr; 8 | } 9 | auto* Input = this->Inner->Next(); 10 | if (IsValid(Input)) 11 | { 12 | this->Event.ExecuteIfBound(Input); 13 | return Input; 14 | } 15 | return nullptr; 16 | } 17 | 18 | int UDynamicInspect::EstimateSizeLeft() const 19 | { 20 | return IsValid(this->Inner) ? this->Inner->EstimateSizeLeft() : 0; 21 | } 22 | -------------------------------------------------------------------------------- /Plugins/Systems/Source/Systems/Private/DynamicIterator/DynamicInspectEvent.cpp: -------------------------------------------------------------------------------- 1 | #include "Systems/Public/DynamicIterator/DynamicInspectEvent.h" 2 | -------------------------------------------------------------------------------- /Plugins/Systems/Source/Systems/Private/DynamicIterator/DynamicMap.cpp: -------------------------------------------------------------------------------- 1 | #include "Systems/Public/DynamicIterator/DynamicMap.h" 2 | 3 | UObject* UDynamicMap::Next() 4 | { 5 | if (IsValid(this->Inner) == false) 6 | { 7 | return nullptr; 8 | } 9 | auto* Input = this->Inner->Next(); 10 | if (IsValid(Input)) 11 | { 12 | auto* Output = NewObject(this); 13 | this->Event.ExecuteIfBound(Input, Output); 14 | if (IsValid(Output->Value)) 15 | { 16 | return Input; 17 | } 18 | } 19 | return nullptr; 20 | } 21 | 22 | int UDynamicMap::EstimateSizeLeft() const 23 | { 24 | return IsValid(this->Inner) ? this->Inner->EstimateSizeLeft() : 0; 25 | } 26 | -------------------------------------------------------------------------------- /Plugins/Systems/Source/Systems/Private/DynamicIterator/DynamicMapEvent.cpp: -------------------------------------------------------------------------------- 1 | #include "Systems/Public/DynamicIterator/DynamicMapEvent.h" 2 | -------------------------------------------------------------------------------- /Plugins/Systems/Source/Systems/Private/DynamicIterator/DynamicSkip.cpp: -------------------------------------------------------------------------------- 1 | #include "Systems/Public/DynamicIterator/DynamicSkip.h" 2 | 3 | UObject* UDynamicSkip::Next() 4 | { 5 | if (IsValid(this->Inner) == false) 6 | { 7 | return nullptr; 8 | } 9 | while (this->Num > 0) 10 | { 11 | --this->Num; 12 | this->Inner->Next(); 13 | } 14 | return this->Inner->Next(); 15 | } 16 | 17 | int UDynamicSkip::EstimateSizeLeft() const 18 | { 19 | return IsValid(this->Inner) ? FMath::Max(this->Inner->EstimateSizeLeft() - this->Num, 0) : 0; 20 | } 21 | -------------------------------------------------------------------------------- /Plugins/Systems/Source/Systems/Private/DynamicIterator/DynamicTake.cpp: -------------------------------------------------------------------------------- 1 | #include "Systems/Public/DynamicIterator/DynamicTake.h" 2 | 3 | UObject* UDynamicTake::Next() 4 | { 5 | if (IsValid(this->Inner) == false) 6 | { 7 | return nullptr; 8 | } 9 | if (this->Num > 0) 10 | { 11 | auto* Value = this->Inner->Next(); 12 | if (IsValid(Value)) 13 | { 14 | --this->Num; 15 | return Value; 16 | } 17 | } 18 | return nullptr; 19 | } 20 | 21 | int UDynamicTake::EstimateSizeLeft() const 22 | { 23 | return IsValid(this->Inner) ? FMath::Min(this->Inner->EstimateSizeLeft(), this->Num) : 0; 24 | } 25 | -------------------------------------------------------------------------------- /Plugins/Systems/Source/Systems/Private/DynamicIterator/DynamicZip.cpp: -------------------------------------------------------------------------------- 1 | #include "Systems/Public/DynamicIterator/DynamicZip.h" 2 | 3 | UObject* UDynamicZip::Next() 4 | { 5 | if (IsValid(this->InnerA) == false || IsValid(this->InnerB) == false) 6 | { 7 | return nullptr; 8 | } 9 | auto* First = this->InnerA->Next(); 10 | auto* Second = this->InnerB->Next(); 11 | if (IsValid(First) && IsValid(Second)) 12 | { 13 | auto* Value = NewObject(this); 14 | Value->First = First; 15 | Value->Second = Second; 16 | return Value; 17 | } 18 | return nullptr; 19 | } 20 | 21 | int UDynamicZip::EstimateSizeLeft() const 22 | { 23 | return IsValid(this->InnerA) && IsValid(this->InnerB) 24 | ? FMath::Min(this->InnerA->EstimateSizeLeft(), this->InnerB->EstimateSizeLeft()) 25 | : 0; 26 | } 27 | -------------------------------------------------------------------------------- /Plugins/Systems/Source/Systems/Private/Metronome.cpp: -------------------------------------------------------------------------------- 1 | #include "Systems/Public/Metronome.h" 2 | 3 | void FMetronome::Randomize() 4 | { 5 | this->Accumulator = FMath::RandRange(0.0f, this->Limit); 6 | } 7 | 8 | void FMetronome::Progress(float DeltaTime) 9 | { 10 | this->Accumulator += DeltaTime; 11 | if (this->Accumulator >= this->Limit) 12 | { 13 | this->Accumulator -= this->Limit; 14 | this->bTicked = true; 15 | } 16 | } 17 | 18 | bool FMetronome::ConsumeTicked() 19 | { 20 | const auto Result = this->bTicked; 21 | this->bTicked = false; 22 | return Result; 23 | } 24 | -------------------------------------------------------------------------------- /Plugins/Systems/Source/Systems/Private/Systems.cpp: -------------------------------------------------------------------------------- 1 | #include "Systems/Public/Systems.h" 2 | 3 | #define LOCTEXT_NAMESPACE "FSystemsModule" 4 | 5 | void FSystemsModule::StartupModule() 6 | { 7 | } 8 | 9 | void FSystemsModule::ShutdownModule() 10 | { 11 | } 12 | 13 | #undef LOCTEXT_NAMESPACE 14 | 15 | IMPLEMENT_MODULE(FSystemsModule, Systems) -------------------------------------------------------------------------------- /Plugins/Systems/Source/Systems/Private/SystemsGameMode.cpp: -------------------------------------------------------------------------------- 1 | #include "Systems/Public/SystemsGameMode.h" 2 | 3 | #include "Systems/Public/SystemsPipeline.h" 4 | 5 | void ASystemsGameMode::InitGame(const FString& MapName, const FString& Options, FString& ErrorMessage) 6 | { 7 | Super::InitGame(MapName, Options, ErrorMessage); 8 | 9 | const auto NetMode = GetWorld()->GetNetMode(); 10 | if (NetMode < NM_Client && this->SystemsPipeline) 11 | { 12 | this->SystemsPipeline->Install(GetWorld()); 13 | } 14 | } 15 | 16 | void ASystemsGameMode::EndPlay(const EEndPlayReason::Type EndPlayReason) 17 | { 18 | Super::EndPlay(EndPlayReason); 19 | 20 | const auto NetMode = GetWorld()->GetNetMode(); 21 | if (NetMode < NM_Client && this->SystemsPipeline) 22 | { 23 | this->SystemsPipeline->Uninstall(GetWorld()); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /Plugins/Systems/Source/Systems/Private/SystemsGameState.cpp: -------------------------------------------------------------------------------- 1 | #include "Systems/Public/SystemsGameState.h" 2 | 3 | #include "Systems/Public/SystemsPipeline.h" 4 | 5 | void ASystemsGameState::PostInitializeComponents() 6 | { 7 | Super::PostInitializeComponents(); 8 | 9 | const auto NetMode = GetWorld()->GetNetMode(); 10 | if (NetMode == NM_Client && this->SystemsPipeline) 11 | { 12 | this->SystemsPipeline->Install(GetWorld()); 13 | } 14 | } 15 | 16 | void ASystemsGameState::EndPlay(const EEndPlayReason::Type EndPlayReason) 17 | { 18 | Super::EndPlay(EndPlayReason); 19 | 20 | const auto NetMode = GetWorld()->GetNetMode(); 21 | if (NetMode == NM_Client && this->SystemsPipeline) 22 | { 23 | this->SystemsPipeline->Uninstall(GetWorld()); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /Plugins/Systems/Source/Systems/Private/SystemsResourceLifeCycle.cpp: -------------------------------------------------------------------------------- 1 | #include "SystemsResourceLifeCycle.h" 2 | -------------------------------------------------------------------------------- /Plugins/Systems/Source/Systems/Public/ActorArchetypeLocation.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "CoreMinimal.h" 4 | 5 | #include "Systems/Public/ArchetypeSignature.h" 6 | 7 | #include "ActorArchetypeLocation.generated.h" 8 | 9 | USTRUCT() 10 | struct SYSTEMS_API FActorArchetypeLocation 11 | { 12 | GENERATED_BODY(); 13 | 14 | UPROPERTY() 15 | FArchetypeSignature Signature = {}; 16 | 17 | UPROPERTY() 18 | uint32 Index = 0; 19 | }; 20 | -------------------------------------------------------------------------------- /Plugins/Systems/Source/Systems/Public/Constants.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "CoreMinimal.h" 4 | 5 | //// [ignore] 6 | #ifdef OVERRIDE_SYSTEMS_ARCHETYPE_BUCKETS_COUNT 7 | const uint32 SYSTEMS_ARCHETYPE_BUCKETS_COUNT = OVERRIDE_SYSTEMS_ARCHETYPE_BUCKETS_COUNT; 8 | #else 9 | const uint32 SYSTEMS_ARCHETYPE_BUCKETS_COUNT = 8; 10 | #endif 11 | const uint32 SYSTEMS_COMPONENTS_COUNT = 32 * SYSTEMS_ARCHETYPE_BUCKETS_COUNT; 12 | //// [/ignore] 13 | -------------------------------------------------------------------------------- /Plugins/Systems/Source/Systems/Public/ConsumedActorComponents.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "CoreMinimal.h" 4 | 5 | #include "Systems/Public/ArchetypeSignature.h" 6 | 7 | #include "ConsumedActorComponents.generated.h" 8 | 9 | class UActorComponent; 10 | 11 | USTRUCT() 12 | struct SYSTEMS_API FConsumedActorComponents 13 | { 14 | GENERATED_BODY(); 15 | 16 | UPROPERTY() 17 | FArchetypeSignature Signature = {}; 18 | 19 | UPROPERTY() 20 | TArray Components = {}; 21 | }; 22 | -------------------------------------------------------------------------------- /Plugins/Systems/Source/Systems/Public/DynamicIterator/DynamicAllEvent.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "CoreMinimal.h" 4 | 5 | #include "DynamicAllEvent.generated.h" 6 | 7 | UCLASS() 8 | class SYSTEMS_API UDynamicAllOutput : public UObject 9 | { 10 | GENERATED_BODY() 11 | 12 | public: 13 | UPROPERTY(BlueprintReadWrite) 14 | bool Value = false; 15 | }; 16 | 17 | UDELEGATE(BlueprintType) 18 | DECLARE_DYNAMIC_DELEGATE_TwoParams(FDynamicAllEvent, UObject*, Input, UDynamicAllOutput*, Output); 19 | -------------------------------------------------------------------------------- /Plugins/Systems/Source/Systems/Public/DynamicIterator/DynamicAnyEvent.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "CoreMinimal.h" 4 | 5 | #include "DynamicAnyEvent.generated.h" 6 | 7 | UCLASS() 8 | class SYSTEMS_API UDynamicAnyOutput : public UObject 9 | { 10 | GENERATED_BODY() 11 | 12 | public: 13 | UPROPERTY(BlueprintReadWrite) 14 | bool Value = false; 15 | }; 16 | 17 | UDELEGATE(BlueprintType) 18 | DECLARE_DYNAMIC_DELEGATE_TwoParams(FDynamicAnyEvent, UObject*, Input, UDynamicAnyOutput*, Output); 19 | -------------------------------------------------------------------------------- /Plugins/Systems/Source/Systems/Public/DynamicIterator/DynamicChain.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "CoreMinimal.h" 4 | 5 | #include "Systems/Public/DynamicIterator.h" 6 | 7 | #include "DynamicChain.generated.h" 8 | 9 | UCLASS(BlueprintType) 10 | class SYSTEMS_API UDynamicChain : public UDynamicIterator 11 | { 12 | GENERATED_BODY() 13 | 14 | public: 15 | virtual UObject* Next() override; 16 | 17 | virtual int EstimateSizeLeft() const override; 18 | 19 | UPROPERTY(BlueprintReadWrite) 20 | UDynamicIterator* InnerA = nullptr; 21 | 22 | UPROPERTY(BlueprintReadWrite) 23 | UDynamicIterator* InnerB = nullptr; 24 | }; 25 | -------------------------------------------------------------------------------- /Plugins/Systems/Source/Systems/Public/DynamicIterator/DynamicComparedByEvent.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "CoreMinimal.h" 4 | 5 | #include "DynamicComparedByEvent.generated.h" 6 | 7 | UCLASS() 8 | class SYSTEMS_API UDynamicComparedByOutput : public UObject 9 | { 10 | GENERATED_BODY() 11 | 12 | public: 13 | UPROPERTY(BlueprintReadWrite) 14 | bool Value = false; 15 | }; 16 | 17 | UDELEGATE(BlueprintType) 18 | DECLARE_DYNAMIC_DELEGATE_ThreeParams(FDynamicComparedByEvent, 19 | UObject*, 20 | InputA, 21 | UObject*, 22 | InputB, 23 | UDynamicComparedByOutput*, 24 | Output); 25 | -------------------------------------------------------------------------------- /Plugins/Systems/Source/Systems/Public/DynamicIterator/DynamicFIlter.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "CoreMinimal.h" 4 | 5 | #include "Systems/Public/DynamicIterator.h" 6 | #include "Systems/Public/DynamicIterator/DynamicFilterEvent.h" 7 | 8 | #include "DynamicFilter.generated.h" 9 | 10 | UCLASS(BlueprintType) 11 | class SYSTEMS_API UDynamicFilter : public UDynamicIterator 12 | { 13 | GENERATED_BODY() 14 | 15 | public: 16 | virtual UObject* Next() override; 17 | 18 | virtual int EstimateSizeLeft() const override; 19 | 20 | UPROPERTY(BlueprintReadWrite) 21 | UDynamicIterator* Inner = nullptr; 22 | 23 | UPROPERTY(BlueprintReadWrite) 24 | FDynamicFilterEvent Event = {}; 25 | }; 26 | -------------------------------------------------------------------------------- /Plugins/Systems/Source/Systems/Public/DynamicIterator/DynamicFIlterEvent.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "CoreMinimal.h" 4 | 5 | #include "DynamicFilterEvent.generated.h" 6 | 7 | UCLASS() 8 | class SYSTEMS_API UDynamicFilterOutput : public UObject 9 | { 10 | GENERATED_BODY() 11 | 12 | public: 13 | UPROPERTY(BlueprintReadWrite) 14 | bool Value = false; 15 | }; 16 | 17 | UDELEGATE(BlueprintType) 18 | DECLARE_DYNAMIC_DELEGATE_TwoParams(FDynamicFilterEvent, UObject*, Input, UDynamicFilterOutput*, Output); 19 | -------------------------------------------------------------------------------- /Plugins/Systems/Source/Systems/Public/DynamicIterator/DynamicFilterMap.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "CoreMinimal.h" 4 | 5 | #include "Systems/Public/DynamicIterator.h" 6 | #include "Systems/Public/DynamicIterator/DynamicFilterMapEvent.h" 7 | 8 | #include "DynamicFilterMap.generated.h" 9 | 10 | UCLASS(BlueprintType) 11 | class SYSTEMS_API UDynamicFilterMap : public UDynamicIterator 12 | { 13 | GENERATED_BODY() 14 | 15 | public: 16 | virtual UObject* Next() override; 17 | 18 | virtual int EstimateSizeLeft() const override; 19 | 20 | UPROPERTY(BlueprintReadWrite) 21 | UDynamicIterator* Inner = nullptr; 22 | 23 | UPROPERTY(BlueprintReadWrite) 24 | FDynamicFilterMapEvent Event = {}; 25 | }; 26 | -------------------------------------------------------------------------------- /Plugins/Systems/Source/Systems/Public/DynamicIterator/DynamicFilterMapEvent.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "CoreMinimal.h" 4 | 5 | #include "DynamicFilterMapEvent.generated.h" 6 | 7 | UCLASS() 8 | class SYSTEMS_API UDynamicFilterMapOutput : public UObject 9 | { 10 | GENERATED_BODY() 11 | 12 | public: 13 | UPROPERTY(BlueprintReadWrite) 14 | UObject* Value = nullptr; 15 | }; 16 | 17 | UDELEGATE(BlueprintType) 18 | DECLARE_DYNAMIC_DELEGATE_TwoParams(FDynamicFilterMapEvent, UObject*, Input, UDynamicFilterMapOutput*, Output); 19 | -------------------------------------------------------------------------------- /Plugins/Systems/Source/Systems/Public/DynamicIterator/DynamicFindEvent.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "CoreMinimal.h" 4 | 5 | #include "DynamicFindEvent.generated.h" 6 | 7 | UCLASS() 8 | class SYSTEMS_API UDynamicFindOutput : public UObject 9 | { 10 | GENERATED_BODY() 11 | 12 | public: 13 | UPROPERTY(BlueprintReadWrite) 14 | bool Value = false; 15 | }; 16 | 17 | UDELEGATE(BlueprintType) 18 | DECLARE_DYNAMIC_DELEGATE_TwoParams(FDynamicFindEvent, UObject*, Input, UDynamicFindOutput*, Output); 19 | -------------------------------------------------------------------------------- /Plugins/Systems/Source/Systems/Public/DynamicIterator/DynamicFindMapEvent.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "CoreMinimal.h" 4 | 5 | #include "DynamicFindMapEvent.generated.h" 6 | 7 | UCLASS() 8 | class SYSTEMS_API UDynamicFindMapOutput : public UObject 9 | { 10 | GENERATED_BODY() 11 | 12 | public: 13 | UPROPERTY(BlueprintReadWrite) 14 | UObject* Value = nullptr; 15 | }; 16 | 17 | UDELEGATE(BlueprintType) 18 | DECLARE_DYNAMIC_DELEGATE_TwoParams(FDynamicFindMapEvent, UObject*, Input, UDynamicFindMapOutput*, Output); 19 | -------------------------------------------------------------------------------- /Plugins/Systems/Source/Systems/Public/DynamicIterator/DynamicForEachEvent.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "CoreMinimal.h" 4 | 5 | #include "DynamicForEachEvent.generated.h" 6 | 7 | UDELEGATE(BlueprintType) 8 | DECLARE_DYNAMIC_DELEGATE_OneParam(FDynamicForEachEvent, UObject*, Input); 9 | -------------------------------------------------------------------------------- /Plugins/Systems/Source/Systems/Public/DynamicIterator/DynamicInspect.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "CoreMinimal.h" 4 | 5 | #include "Systems/Public/DynamicIterator.h" 6 | #include "Systems/Public/DynamicIterator/DynamicInspectEvent.h" 7 | 8 | #include "DynamicInspect.generated.h" 9 | 10 | UCLASS(BlueprintType) 11 | class SYSTEMS_API UDynamicInspect : public UDynamicIterator 12 | { 13 | GENERATED_BODY() 14 | 15 | public: 16 | virtual UObject* Next() override; 17 | 18 | virtual int EstimateSizeLeft() const override; 19 | 20 | UPROPERTY(BlueprintReadWrite) 21 | UDynamicIterator* Inner = nullptr; 22 | 23 | UPROPERTY(BlueprintReadWrite) 24 | FDynamicInspectEvent Event = {}; 25 | }; 26 | -------------------------------------------------------------------------------- /Plugins/Systems/Source/Systems/Public/DynamicIterator/DynamicInspectEvent.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "CoreMinimal.h" 4 | 5 | #include "DynamicInspectEvent.generated.h" 6 | 7 | UDELEGATE(BlueprintType) 8 | DECLARE_DYNAMIC_DELEGATE_OneParam(FDynamicInspectEvent, UObject*, Input); 9 | -------------------------------------------------------------------------------- /Plugins/Systems/Source/Systems/Public/DynamicIterator/DynamicMap.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "CoreMinimal.h" 4 | 5 | #include "Systems/Public/DynamicIterator.h" 6 | #include "Systems/Public/DynamicIterator/DynamicMapEvent.h" 7 | 8 | #include "DynamicMap.generated.h" 9 | 10 | UCLASS(BlueprintType) 11 | class SYSTEMS_API UDynamicMap : public UDynamicIterator 12 | { 13 | GENERATED_BODY() 14 | 15 | public: 16 | virtual UObject* Next() override; 17 | 18 | virtual int EstimateSizeLeft() const override; 19 | 20 | UPROPERTY(BlueprintReadWrite) 21 | UDynamicIterator* Inner = nullptr; 22 | 23 | UPROPERTY(BlueprintReadWrite) 24 | FDynamicMapEvent Event = {}; 25 | }; 26 | -------------------------------------------------------------------------------- /Plugins/Systems/Source/Systems/Public/DynamicIterator/DynamicMapEvent.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "CoreMinimal.h" 4 | 5 | #include "DynamicMapEvent.generated.h" 6 | 7 | UCLASS() 8 | class SYSTEMS_API UDynamicMapOutput : public UObject 9 | { 10 | GENERATED_BODY() 11 | 12 | public: 13 | UPROPERTY(BlueprintReadWrite) 14 | UObject* Value = nullptr; 15 | }; 16 | 17 | UDELEGATE(BlueprintType) 18 | DECLARE_DYNAMIC_DELEGATE_TwoParams(FDynamicMapEvent, UObject*, Input, UDynamicMapOutput*, Output); 19 | -------------------------------------------------------------------------------- /Plugins/Systems/Source/Systems/Public/DynamicIterator/DynamicSkip.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "CoreMinimal.h" 4 | 5 | #include "Systems/Public/DynamicIterator.h" 6 | 7 | #include "DynamicSkip.generated.h" 8 | 9 | UCLASS(BlueprintType) 10 | class SYSTEMS_API UDynamicSkip : public UDynamicIterator 11 | { 12 | GENERATED_BODY() 13 | 14 | public: 15 | virtual UObject* Next() override; 16 | 17 | virtual int EstimateSizeLeft() const override; 18 | 19 | UPROPERTY(BlueprintReadWrite) 20 | UDynamicIterator* Inner = nullptr; 21 | 22 | UPROPERTY(BlueprintReadWrite) 23 | int Num = 0; 24 | }; 25 | -------------------------------------------------------------------------------- /Plugins/Systems/Source/Systems/Public/DynamicIterator/DynamicTake.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "CoreMinimal.h" 4 | 5 | #include "Systems/Public/DynamicIterator.h" 6 | 7 | #include "DynamicTake.generated.h" 8 | 9 | UCLASS(BlueprintType) 10 | class SYSTEMS_API UDynamicTake : public UDynamicIterator 11 | { 12 | GENERATED_BODY() 13 | 14 | public: 15 | virtual UObject* Next() override; 16 | 17 | virtual int EstimateSizeLeft() const override; 18 | 19 | UPROPERTY(BlueprintReadWrite) 20 | UDynamicIterator* Inner = nullptr; 21 | 22 | UPROPERTY(BlueprintReadWrite) 23 | int Num = 0; 24 | }; 25 | -------------------------------------------------------------------------------- /Plugins/Systems/Source/Systems/Public/Iterator.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "Systems/Public/Iterator/Collectors.h" 4 | #include "Systems/Public/Iterator/Consumers.h" 5 | #include "Systems/Public/Iterator/Converters.h" 6 | -------------------------------------------------------------------------------- /Plugins/Systems/Source/Systems/Public/Iterator/AdaptDecl.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | template 4 | struct TIterAdapt; 5 | -------------------------------------------------------------------------------- /Plugins/Systems/Source/Systems/Public/Iterator/CastDecl.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | template 4 | struct TIterCast; 5 | -------------------------------------------------------------------------------- /Plugins/Systems/Source/Systems/Public/Iterator/ChainDecl.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | template 4 | struct TIterChain; 5 | -------------------------------------------------------------------------------- /Plugins/Systems/Source/Systems/Public/Iterator/EnumerateDecl.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | template 4 | struct TIterEnumerate; 5 | -------------------------------------------------------------------------------- /Plugins/Systems/Source/Systems/Public/Iterator/FilterDecl.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | template 4 | struct TIterFilter; 5 | -------------------------------------------------------------------------------- /Plugins/Systems/Source/Systems/Public/Iterator/FilterMapDecl.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | template 4 | struct TIterFilterMap; 5 | -------------------------------------------------------------------------------- /Plugins/Systems/Source/Systems/Public/Iterator/FlattenDecl.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | template 4 | struct TIterFlatten; 5 | -------------------------------------------------------------------------------- /Plugins/Systems/Source/Systems/Public/Iterator/GenerateDecl.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | template 4 | struct TIterGenerate; 5 | -------------------------------------------------------------------------------- /Plugins/Systems/Source/Systems/Public/Iterator/InspectDecl.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | template 4 | struct TIterInspect; 5 | -------------------------------------------------------------------------------- /Plugins/Systems/Source/Systems/Public/Iterator/MapDecl.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | template 4 | struct TIterMap; 5 | -------------------------------------------------------------------------------- /Plugins/Systems/Source/Systems/Public/Iterator/OnceDecl.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | template 4 | struct TIterOnce; 5 | -------------------------------------------------------------------------------- /Plugins/Systems/Source/Systems/Public/Iterator/RangeDecl.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | template 4 | struct TIterRange; 5 | -------------------------------------------------------------------------------- /Plugins/Systems/Source/Systems/Public/Iterator/RepeatDecl.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | template 4 | struct TIterRepeat; 5 | -------------------------------------------------------------------------------- /Plugins/Systems/Source/Systems/Public/Iterator/SizeHint.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "CoreMinimal.h" 4 | 5 | /// Hint about minimum and optionally maximum number of items iterator can 6 | /// yield. 7 | /// 8 | /// See [`struct: TQuery::SizeHint`](). 9 | /// 10 | /// # Example 11 | /// ```snippet 12 | /// query_size_hint 13 | /// ``` 14 | struct IterSizeHint 15 | { 16 | /// Minimum number of items iterator can yield. 17 | uint32 Minimum = 0; 18 | /// Maximum number of items iterator can yield. 19 | TOptional Maximum = {}; 20 | }; 21 | -------------------------------------------------------------------------------- /Plugins/Systems/Source/Systems/Public/Iterator/SkipDecl.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | template 4 | struct TIterSkip; 5 | -------------------------------------------------------------------------------- /Plugins/Systems/Source/Systems/Public/Iterator/StdDecl.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | template 4 | struct TIterStd; 5 | 6 | template 7 | struct TIterStdConst; 8 | 9 | template < 10 | //// [ignore] 11 | const int N, 12 | //// [/ignore] 13 | typename T> 14 | struct TIterArray; 15 | -------------------------------------------------------------------------------- /Plugins/Systems/Source/Systems/Public/Iterator/TakeDecl.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | template 4 | struct TIterTake; 5 | -------------------------------------------------------------------------------- /Plugins/Systems/Source/Systems/Public/Iterator/ViewsDecl.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "CoreMinimal.h" 4 | 5 | template 6 | struct TIterViews; 7 | -------------------------------------------------------------------------------- /Plugins/Systems/Source/Systems/Public/Iterator/ZipDecl.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | template 4 | struct TIterZip; 5 | -------------------------------------------------------------------------------- /Plugins/Systems/Source/Systems/Public/Systems.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "CoreMinimal.h" 4 | 5 | #include "Modules/ModuleManager.h" 6 | 7 | class FSystemsModule : public IModuleInterface 8 | { 9 | public: 10 | virtual void StartupModule() override; 11 | 12 | virtual void ShutdownModule() override; 13 | }; 14 | -------------------------------------------------------------------------------- /Plugins/Systems/Source/Systems/Public/SystemsGameState.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "CoreMinimal.h" 4 | 5 | #include "GameFramework/GameStateBase.h" 6 | 7 | #include "SystemsGameState.generated.h" 8 | 9 | class USystemsPipeline; 10 | 11 | /// Base class for game state that has to install [`class: USystemsPipeline`](). 12 | /// 13 | /// # Note 14 | /// > Given pipeline will be installed only on client. 15 | UCLASS() 16 | class SYSTEMS_API ASystemsGameState : public AGameStateBase 17 | { 18 | GENERATED_BODY() 19 | 20 | protected: 21 | virtual void PostInitializeComponents() override; 22 | 23 | virtual void EndPlay(const EEndPlayReason::Type EndPlayReason) override; 24 | 25 | private: 26 | /// Systems pipeline to install. 27 | UPROPERTY(EditAnywhere) 28 | TObjectPtr SystemsPipeline = {}; 29 | }; 30 | -------------------------------------------------------------------------------- /Plugins/Systems/Source/Systems/Public/SystemsResourceLifeCycle.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "CoreMinimal.h" 4 | 5 | #include "UObject/Interface.h" 6 | 7 | #include "SystemsResourceLifeCycle.generated.h" 8 | 9 | class SYSTEMS_API USystemsWorld; 10 | 11 | UINTERFACE() 12 | class USystemsResourceLifeCycle : public UInterface 13 | { 14 | GENERATED_BODY() 15 | }; 16 | 17 | class SYSTEMS_API ISystemsResourceLifeCycle 18 | { 19 | GENERATED_BODY() 20 | 21 | public: 22 | virtual void OnInit(USystemsWorld& Systems) 23 | { 24 | } 25 | 26 | virtual void OnCleanup(USystemsWorld& Systems) 27 | { 28 | } 29 | }; 30 | -------------------------------------------------------------------------------- /Plugins/Systems/Systems.uplugin: -------------------------------------------------------------------------------- 1 | { 2 | "FileVersion": 3, 3 | "Version": 1, 4 | "VersionName": "1.3", 5 | "FriendlyName": "Systems Architecture", 6 | "Description": "Highly ergonomic and modular game development architecture", 7 | "Category": "Framework", 8 | "CreatedBy": "Patryk \"PsichiX\" Budzynski", 9 | "CreatedByURL": "https://github.com/PsichiX", 10 | "DocsURL": "https://github.com/PsichiX/Unreal-Systems-Architecture", 11 | "MarketplaceURL": "", 12 | "SupportURL": "https://github.com/PsichiX/Unreal-Systems-Architecture/issues", 13 | "CanContainContent": true, 14 | "IsBetaVersion": true, 15 | "IsExperimentalVersion": false, 16 | "Installed": false, 17 | "Modules": [ 18 | { 19 | "Name": "Systems", 20 | "Type": "Runtime", 21 | "LoadingPhase": "Default" 22 | } 23 | ] 24 | } -------------------------------------------------------------------------------- /Plugins/SystemsQueryDebugger/Content/EWBP_SystemsQueryDebugger.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Plugins/SystemsQueryDebugger/Content/EWBP_SystemsQueryDebugger.uasset -------------------------------------------------------------------------------- /Plugins/SystemsQueryDebugger/Content/WBP_SystemsQueryActor.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Plugins/SystemsQueryDebugger/Content/WBP_SystemsQueryActor.uasset -------------------------------------------------------------------------------- /Plugins/SystemsQueryDebugger/Content/WBP_SystemsQueryComponent.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Plugins/SystemsQueryDebugger/Content/WBP_SystemsQueryComponent.uasset -------------------------------------------------------------------------------- /Plugins/SystemsQueryDebugger/Resources/ButtonIcon_40x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Plugins/SystemsQueryDebugger/Resources/ButtonIcon_40x.png -------------------------------------------------------------------------------- /Plugins/SystemsQueryDebugger/Resources/Icon128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Plugins/SystemsQueryDebugger/Resources/Icon128.png -------------------------------------------------------------------------------- /Plugins/SystemsQueryDebugger/Source/SystemsQueryDebugger/Public/SystemsQueryDebugger.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "CoreMinimal.h" 4 | 5 | #include "Modules/ModuleManager.h" 6 | 7 | class FSystemsQueryDebuggerModule : public IModuleInterface 8 | { 9 | public: 10 | virtual void StartupModule() override; 11 | 12 | virtual void ShutdownModule() override; 13 | 14 | private: 15 | void RegisterMenus(); 16 | }; 17 | -------------------------------------------------------------------------------- /Plugins/SystemsSpatialQuery/Resources/Icon128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Plugins/SystemsSpatialQuery/Resources/Icon128.png -------------------------------------------------------------------------------- /Plugins/SystemsSpatialQuery/Source/SystemsSpatialQuery/Private/Components/DebugSpatialQueryEpicenterComponent.cpp: -------------------------------------------------------------------------------- 1 | #include "SystemsSpatialQuery/Public/Components/DebugSpatialQueryEpicenterComponent.h" 2 | -------------------------------------------------------------------------------- /Plugins/SystemsSpatialQuery/Source/SystemsSpatialQuery/Private/Components/SpatialComponent.cpp: -------------------------------------------------------------------------------- 1 | #include "SystemsSpatialQuery/Public/Components/SpatialComponent.h" 2 | -------------------------------------------------------------------------------- /Plugins/SystemsSpatialQuery/Source/SystemsSpatialQuery/Public/Components/SpatialComponent.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "CoreMinimal.h" 4 | 5 | #include "Systems/Public/SystemsComponent.h" 6 | 7 | #include "SpatialComponent.generated.h" 8 | 9 | class USystemsWorld; 10 | 11 | /// Component that marks actor for spatial partitioning. 12 | UCLASS(BlueprintType, Blueprintable, Meta = (BlueprintSpawnableComponent)) 13 | class SYSTEMSSPATIALQUERY_API USpatialComponent : public USystemsActorComponent 14 | { 15 | GENERATED_BODY() 16 | }; 17 | -------------------------------------------------------------------------------- /Plugins/SystemsSpatialQuery/Source/SystemsSpatialQuery/Public/Systems/DebugSpatialDiscretizationSystem.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "CoreMinimal.h" 4 | 5 | #include "Systems/Public/System.h" 6 | 7 | #include "DebugSpatialDiscretizationSystem.generated.h" 8 | 9 | class USpatialDiscretization; 10 | 11 | UCLASS(BlueprintType) 12 | class SYSTEMSSPATIALQUERY_API UDebugSpatialDiscretizationSystem : public USystem 13 | { 14 | GENERATED_BODY() 15 | 16 | public: 17 | virtual void Run(USystemsWorld& Systems) override; 18 | 19 | private: 20 | UPROPERTY(EditAnywhere) 21 | FColor TrianglesColor = FColor::Yellow.WithAlpha(10); 22 | 23 | UPROPERTY(EditAnywhere) 24 | TSubclassOf ResourceType = {}; 25 | }; -------------------------------------------------------------------------------- /Plugins/SystemsSpatialQuery/Source/SystemsSpatialQuery/Public/Systems/SpatialPartitioningSystem.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "CoreMinimal.h" 4 | 5 | class USystemsWorld; 6 | 7 | void SYSTEMSSPATIALQUERY_API SpatialPartitioningSystem(USystemsWorld& Systems); 8 | 9 | void SYSTEMSSPATIALQUERY_API DebugSpatialPartitioningSystem(USystemsWorld& Systems); 10 | -------------------------------------------------------------------------------- /Plugins/SystemsSpatialQuery/Source/SystemsSpatialQuery/Public/SystemsSpatialQuery.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "CoreMinimal.h" 4 | 5 | #include "Modules/ModuleManager.h" 6 | 7 | class FSystemsSpatialQueryModule : public IModuleInterface 8 | { 9 | public: 10 | virtual void StartupModule() override; 11 | virtual void ShutdownModule() override; 12 | }; 13 | -------------------------------------------------------------------------------- /Plugins/SystemsSpatialQuery/Source/SystemsSpatialQueryEditor/Private/SystemsSpatialQueryEditor.cpp: -------------------------------------------------------------------------------- 1 | #include "SystemsSpatialQueryEditor/Public/SystemsSpatialQueryEditor.h" 2 | 3 | #define LOCTEXT_NAMESPACE "FSystemsSpatialQueryEditorModule" 4 | 5 | void FSystemsSpatialQueryEditorModule::StartupModule() 6 | { 7 | } 8 | 9 | void FSystemsSpatialQueryEditorModule::ShutdownModule() 10 | { 11 | } 12 | 13 | #undef LOCTEXT_NAMESPACE 14 | 15 | IMPLEMENT_MODULE(FSystemsSpatialQueryEditorModule, SystemsSpatialQueryEditor) -------------------------------------------------------------------------------- /Plugins/SystemsSpatialQuery/Source/SystemsSpatialQueryEditor/Public/SystemsSpatialQueryEditor.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "CoreMinimal.h" 4 | 5 | #include "Modules/ModuleManager.h" 6 | 7 | class FSystemsSpatialQueryEditorModule : public IModuleInterface 8 | { 9 | public: 10 | virtual void StartupModule() override; 11 | virtual void ShutdownModule() override; 12 | }; 13 | -------------------------------------------------------------------------------- /Plugins/SystemsUnitTests/Resources/Icon128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/PsichiX/Unreal-Systems-Architecture/1d5093e9aaf91b89d8157454bcc87c4e6de5d055/Plugins/SystemsUnitTests/Resources/Icon128.png -------------------------------------------------------------------------------- /Plugins/SystemsUnitTests/Source/SystemsUnitTests/Private/SystemsUnitTests.cpp: -------------------------------------------------------------------------------- 1 | #include "SystemsUnitTests.h" 2 | 3 | #define LOCTEXT_NAMESPACE "FSystemsUnitTestsModule" 4 | 5 | void FSystemsUnitTestsModule::StartupModule() 6 | { 7 | } 8 | 9 | void FSystemsUnitTestsModule::ShutdownModule() 10 | { 11 | } 12 | 13 | #undef LOCTEXT_NAMESPACE 14 | 15 | IMPLEMENT_MODULE(FSystemsUnitTestsModule, SystemsUnitTests) -------------------------------------------------------------------------------- /Plugins/SystemsUnitTests/Source/SystemsUnitTests/Public/SystemsUnitTests.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "CoreMinimal.h" 4 | 5 | #include "Modules/ModuleManager.h" 6 | 7 | class FSystemsUnitTestsModule : public IModuleInterface 8 | { 9 | public: 10 | virtual void StartupModule() override; 11 | virtual void ShutdownModule() override; 12 | }; 13 | -------------------------------------------------------------------------------- /Scripts/bake-docs.ps1: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env powershell 2 | 3 | param ( 4 | [switch]$serve = $false 5 | ) 6 | 7 | unreal-doc -i "$PSScriptRoot/../Plugins/Systems/Documentation/UnrealDoc.toml" 8 | 9 | if ($serve) 10 | { 11 | mdbook serve -o "$PSScriptRoot/../Plugins/Systems/Documentation/Distribution" 12 | } 13 | -------------------------------------------------------------------------------- /Scripts/cleanup.ps1: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env powershell 2 | 3 | Get-ChildItem "$PSScriptRoot/.." -Recurse -Include Binaries, Intermediate | ForEach-Object { 4 | Remove-Item "$_" -Recurse -Force 5 | Write-Output "Deleted: $_" 6 | } -------------------------------------------------------------------------------- /Scripts/format.ps1: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env powershell 2 | 3 | function Format-Sources 4 | { 5 | param ( 6 | [string]$path 7 | ) 8 | 9 | Get-ChildItem "$path" -Recurse -Include *.h, *.cpp | ForEach-Object { 10 | Write-Output "- $_" 11 | clang-format -i "$_" 12 | } 13 | Write-Output "" 14 | } 15 | 16 | Format-Sources -path "$PSScriptRoot/../Source" 17 | Format-Sources -path "$PSScriptRoot/../Plugins/Systems/Source" 18 | Format-Sources -path "$PSScriptRoot/../Plugins/Systems/Documentation" 19 | Format-Sources -path "$PSScriptRoot/../Plugins/SystemsQueryDebugger/Source" 20 | Format-Sources -path "$PSScriptRoot/../Plugins/SystemsUnitTests/Source" 21 | Format-Sources -path "$PSScriptRoot/../Plugins/SystemsSpatialQuery/Source" 22 | Format-Sources -path "$PSScriptRoot/../Plugins/ReactiveSystems/Source" 23 | -------------------------------------------------------------------------------- /Source/Boids/Boids.Build.cs: -------------------------------------------------------------------------------- 1 | using UnrealBuildTool; 2 | 3 | public class Boids : ModuleRules 4 | { 5 | public Boids(ReadOnlyTargetRules Target) : base(Target) 6 | { 7 | PCHUsage = PCHUsageMode.UseExplicitOrSharedPCHs; 8 | bUseUnity = false; 9 | IncludeOrderVersion = EngineIncludeOrderVersion.Latest; 10 | 11 | PublicDependencyModuleNames.AddRange(new string[] { 12 | "Core", 13 | "CoreUObject", 14 | "Engine", 15 | "InputCore", 16 | "Slate", 17 | "SlateCore", 18 | "UMG", 19 | "Systems", 20 | "ReactiveSystems", 21 | "SystemsUnitTests", 22 | "Shared", 23 | }); 24 | 25 | // PrivateDependencyModuleNames.AddRange(new string[] {}); 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /Source/Boids/Boids.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "CoreMinimal.h" 4 | 5 | #include "Modules/ModuleManager.h" 6 | 7 | class FBoidsModule : public IModuleInterface 8 | { 9 | public: 10 | virtual void StartupModule() override; 11 | 12 | virtual void ShutdownModule() override; 13 | }; 14 | -------------------------------------------------------------------------------- /Source/Boids/Components/BoidComponent.cpp: -------------------------------------------------------------------------------- 1 | #include "Boids/Components/BoidComponent.h" 2 | -------------------------------------------------------------------------------- /Source/Boids/Components/BoidComponent.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "CoreMinimal.h" 4 | 5 | #include "Systems/Public/SystemsComponent.h" 6 | 7 | #include "BoidComponent.generated.h" 8 | 9 | UCLASS(BlueprintType, Blueprintable, Meta = (BlueprintSpawnableComponent)) 10 | class BOIDS_API UBoidComponent : public USystemsActorComponent 11 | { 12 | GENERATED_BODY() 13 | }; 14 | -------------------------------------------------------------------------------- /Source/Boids/Components/ColorComponent.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "CoreMinimal.h" 4 | 5 | #include "Systems/Public/SystemsComponent.h" 6 | 7 | #include "ColorComponent.generated.h" 8 | 9 | UCLASS(BlueprintType, Blueprintable, Meta = (BlueprintSpawnableComponent)) 10 | class BOIDS_API UColorComponent : public USystemsActorComponent 11 | { 12 | GENERATED_BODY() 13 | 14 | public: 15 | UFUNCTION() 16 | void ApplyColor(const FLinearColor Color); 17 | 18 | UFUNCTION() 19 | void ApplyDefaultColor(); 20 | 21 | UPROPERTY(EditAnywhere) 22 | FLinearColor DefaultColor = FLinearColor::White; 23 | 24 | private: 25 | virtual void BeginPlay() override; 26 | 27 | UPROPERTY(EditAnywhere) 28 | UMaterialInterface* MaterialInterface = nullptr; 29 | 30 | UPROPERTY() 31 | UMaterialInstanceDynamic* CachedInstance = nullptr; 32 | }; 33 | -------------------------------------------------------------------------------- /Source/Boids/Components/ImpulseComponent.cpp: -------------------------------------------------------------------------------- 1 | #include "Boids/Components/ImpulseComponent.h" 2 | -------------------------------------------------------------------------------- /Source/Boids/Components/ImpulseComponent.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "CoreMinimal.h" 4 | 5 | #include "Systems/Public/SystemsComponent.h" 6 | 7 | #include "ImpulseComponent.generated.h" 8 | 9 | UCLASS(BlueprintType, Blueprintable, Meta = (BlueprintSpawnableComponent)) 10 | class BOIDS_API UImpulseComponent : public USystemsActorComponent 11 | { 12 | GENERATED_BODY() 13 | 14 | public: 15 | UPROPERTY() 16 | FVector Value = FVector(0); 17 | }; 18 | -------------------------------------------------------------------------------- /Source/Boids/Components/ObstacleComponent.cpp: -------------------------------------------------------------------------------- 1 | #include "Boids/Components/ObstacleComponent.h" 2 | -------------------------------------------------------------------------------- /Source/Boids/Components/ObstacleComponent.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "CoreMinimal.h" 4 | 5 | #include "Systems/Public/SystemsComponent.h" 6 | 7 | #include "ObstacleComponent.generated.h" 8 | 9 | UCLASS(BlueprintType, Blueprintable, Meta = (BlueprintSpawnableComponent)) 10 | class BOIDS_API UObstacleComponent : public USystemsActorComponent 11 | { 12 | GENERATED_BODY() 13 | 14 | public: 15 | UPROPERTY(EditAnywhere) 16 | float AvoidanceWeight = 1; 17 | }; 18 | -------------------------------------------------------------------------------- /Source/Boids/Components/RadiusComponent.cpp: -------------------------------------------------------------------------------- 1 | #include "Boids/Components/RadiusComponent.h" 2 | -------------------------------------------------------------------------------- /Source/Boids/Components/RadiusComponent.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "CoreMinimal.h" 4 | 5 | #include "Systems/Public/SystemsComponent.h" 6 | 7 | #include "RadiusComponent.generated.h" 8 | 9 | UCLASS(BlueprintType, Blueprintable, Meta = (BlueprintSpawnableComponent)) 10 | class BOIDS_API URadiusComponent : public USystemsActorComponent 11 | { 12 | GENERATED_BODY() 13 | 14 | public: 15 | UPROPERTY(editAnywhere) 16 | float Value = 1; 17 | }; 18 | -------------------------------------------------------------------------------- /Source/Boids/Resources/BoidsSettings.cpp: -------------------------------------------------------------------------------- 1 | #include "Boids/Resources/BoidsSettings.h" 2 | -------------------------------------------------------------------------------- /Source/Boids/Resources/BoidsSystemsRunCriteria.cpp: -------------------------------------------------------------------------------- 1 | #include "Boids/Resources/BoidsSystemsRunCriteria.h" 2 | -------------------------------------------------------------------------------- /Source/Boids/Resources/GameEvents.cpp: -------------------------------------------------------------------------------- 1 | #include "Boids/Resources/GameEvents.h" 2 | -------------------------------------------------------------------------------- /Source/Boids/Resources/GameEvents.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "CoreMinimal.h" 4 | 5 | #include "Systems/Public/SharedChannel.h" 6 | 7 | #include "GameEvents.generated.h" 8 | 9 | USTRUCT() 10 | struct FMovementStep 11 | { 12 | GENERATED_BODY() 13 | }; 14 | 15 | UCLASS(BlueprintType) 16 | class BOIDS_API UGameEvents : public UObject 17 | { 18 | GENERATED_BODY() 19 | 20 | public: 21 | TSenderChannel MovementStep = {}; 22 | }; 23 | -------------------------------------------------------------------------------- /Source/Boids/Systems/OneShot/SpawnFoodSystem.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "CoreMinimal.h" 4 | 5 | class USystemsWorld; 6 | 7 | UFUNCTION() 8 | void SpawnFoodSystem(USystemsWorld& Systems, uint32 Amount = 1); 9 | -------------------------------------------------------------------------------- /Source/Boids/Systems/Persistent/BoidsAlignmentSystem.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "CoreMinimal.h" 4 | 5 | class USystemsWorld; 6 | 7 | UFUNCTION() 8 | void BoidsAlignmentSystem(USystemsWorld& Systems); 9 | -------------------------------------------------------------------------------- /Source/Boids/Systems/Persistent/BoidsApplyImpulseSystem.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "CoreMinimal.h" 4 | 5 | class USystemsWorld; 6 | 7 | UFUNCTION() 8 | void BoidsApplyImpulseSystem(USystemsWorld& Systems); 9 | -------------------------------------------------------------------------------- /Source/Boids/Systems/Persistent/BoidsCohesionSystem.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "CoreMinimal.h" 4 | 5 | class USystemsWorld; 6 | 7 | UFUNCTION() 8 | void BoidsCohesionSystem(USystemsWorld& Systems); 9 | -------------------------------------------------------------------------------- /Source/Boids/Systems/Persistent/BoidsDebugDrawSystem.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "CoreMinimal.h" 4 | 5 | class USystemsWorld; 6 | 7 | UFUNCTION() 8 | void BoidsDebugDrawSystem(USystemsWorld& Systems); 9 | -------------------------------------------------------------------------------- /Source/Boids/Systems/Persistent/BoidsEatSystem.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "CoreMinimal.h" 4 | 5 | class USystemsWorld; 6 | 7 | UFUNCTION() 8 | void BoidsEatSystem(USystemsWorld& Systems); 9 | -------------------------------------------------------------------------------- /Source/Boids/Systems/Persistent/BoidsFaceDirectionSystem.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "CoreMinimal.h" 4 | 5 | class USystemsWorld; 6 | 7 | UFUNCTION() 8 | void BoidsFaceDirectionSystem(USystemsWorld& Systems); 9 | -------------------------------------------------------------------------------- /Source/Boids/Systems/Persistent/BoidsHungerSystem.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "CoreMinimal.h" 4 | 5 | class USystemsWorld; 6 | 7 | UFUNCTION() 8 | void BoidsHungerSystem(USystemsWorld& Systems); 9 | -------------------------------------------------------------------------------- /Source/Boids/Systems/Persistent/BoidsHuntSystem.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "CoreMinimal.h" 4 | 5 | class USystemsWorld; 6 | 7 | UFUNCTION() 8 | void BoidsHuntSystem(USystemsWorld& Systems); 9 | -------------------------------------------------------------------------------- /Source/Boids/Systems/Persistent/BoidsKeepInSpaceBoundsSystem.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "CoreMinimal.h" 4 | 5 | class USystemsWorld; 6 | 7 | UFUNCTION() 8 | void BoidsKeepInSpaceBoundsSystem(USystemsWorld& Systems); 9 | -------------------------------------------------------------------------------- /Source/Boids/Systems/Persistent/BoidsLimitVelocitySystem.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "CoreMinimal.h" 4 | 5 | class USystemsWorld; 6 | 7 | UFUNCTION() 8 | void BoidsLimitVelocitySystem(USystemsWorld& Systems); 9 | -------------------------------------------------------------------------------- /Source/Boids/Systems/Persistent/BoidsMovementSystem.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "CoreMinimal.h" 4 | 5 | #include "Systems/Public/SharedChannel.h" 6 | #include "Systems/Public/System.h" 7 | 8 | #include "Boids/Resources/GameEvents.h" 9 | 10 | #include "BoidsMovementSystem.generated.h" 11 | 12 | class USystemsWorld; 13 | 14 | UCLASS() 15 | class BOIDS_API UBoidsMovementSystem : public USystem 16 | { 17 | GENERATED_BODY() 18 | 19 | public: 20 | virtual void Init(USystemsWorld& Systems) override; 21 | 22 | virtual void Run(USystemsWorld& Systems) override; 23 | 24 | private: 25 | TReceiverChannel MovementStep = {}; 26 | }; -------------------------------------------------------------------------------- /Source/Boids/Systems/Persistent/BoidsPopulationControlSystem.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "CoreMinimal.h" 4 | 5 | class USystemsWorld; 6 | 7 | UFUNCTION() 8 | void BoidsPopulationControlSystem(USystemsWorld& Systems); -------------------------------------------------------------------------------- /Source/Boids/Systems/Persistent/BoidsProximityColorSystem.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "CoreMinimal.h" 4 | 5 | class USystemsWorld; 6 | 7 | UFUNCTION() 8 | void BoidsProximityColorSystem(USystemsWorld& Systems); 9 | -------------------------------------------------------------------------------- /Source/Boids/Systems/Persistent/BoidsSeparationSystem.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "CoreMinimal.h" 4 | 5 | class USystemsWorld; 6 | 7 | UFUNCTION() 8 | void BoidsSeparationSystem(USystemsWorld& Systems); 9 | -------------------------------------------------------------------------------- /Source/Boids/UI/WidgetBoidsInterface.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "CoreMinimal.h" 4 | 5 | #include "Blueprint/UserWidget.h" 6 | 7 | #include "WidgetBoidsInterface.generated.h" 8 | 9 | class UButton; 10 | 11 | UCLASS() 12 | class BOIDS_API UWidgetBoidsInterface : public UUserWidget 13 | { 14 | GENERATED_BODY() 15 | 16 | private: 17 | virtual void NativeConstruct() override; 18 | 19 | virtual void NativeDestruct() override; 20 | 21 | UFUNCTION() 22 | void OnMovementStepAction(); 23 | 24 | UFUNCTION() 25 | void OnSpawnFoodAction(); 26 | 27 | UPROPERTY(Meta = (BindWidget)) 28 | UButton* MovementStep = nullptr; 29 | 30 | UPROPERTY(Meta = (BindWidget)) 31 | UButton* SpawnFood = nullptr; 32 | }; 33 | -------------------------------------------------------------------------------- /Source/Life/AI/Considerations/UtilityAiConstConsideration.cpp: -------------------------------------------------------------------------------- 1 | #include "Life/AI/Considerations/UtilityAiConstConsideration.h" 2 | -------------------------------------------------------------------------------- /Source/Life/AI/Considerations/UtilityAiConstConsideration.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "CoreMinimal.h" 4 | 5 | #include "Life/AI/Reasoner/UtilityAiConsideration.h" 6 | 7 | #include "UtilityAiConstConsideration.generated.h" 8 | 9 | UCLASS(BlueprintType, Blueprintable) 10 | class LIFE_API UUtilityAiConstConsideration : public UUtilityAiConsideration 11 | { 12 | GENERATED_BODY() 13 | 14 | public: 15 | virtual float Score(AActor* Actor, USystemsWorld& Systems, FUtilityAiMemory& Memory) override 16 | { 17 | return this->Value; 18 | } 19 | 20 | UPROPERTY(EditAnywhere) 21 | float Value = 0; 22 | }; 23 | -------------------------------------------------------------------------------- /Source/Life/AI/Considerations/UtilityAiDistanceToConsideration.cpp: -------------------------------------------------------------------------------- 1 | #include "Life/AI/Considerations/UtilityAiDistanceToConsideration.h" 2 | 3 | #include "Systems/Public/SystemsWorld.h" 4 | 5 | #include "Life/AI/Reasoner/UtilityAiMemory.h" 6 | #include "Life/Components/AnimalComponent.h" 7 | 8 | float UUtilityAiDistanceToConsideration::Score(AActor* Actor, 9 | USystemsWorld& Systems, 10 | FUtilityAiMemory& Memory) 11 | { 12 | const auto Position = Actor->GetActorLocation(); 13 | const auto* OtherActor = Memory.Access(this->ActorMemoryProperty).CastObject(); 14 | 15 | if (IsValid(OtherActor)) 16 | { 17 | const auto OtherPosition = OtherActor->GetActorLocation(); 18 | return FVector::Distance(Position, OtherPosition); 19 | } 20 | return INFINITY; 21 | } 22 | -------------------------------------------------------------------------------- /Source/Life/AI/Considerations/UtilityAiDistanceToConsideration.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "CoreMinimal.h" 4 | 5 | #include "Life/AI/Reasoner/UtilityAiConsideration.h" 6 | 7 | #include "UtilityAiDistanceToConsideration.generated.h" 8 | 9 | UCLASS(BlueprintType, Blueprintable) 10 | class LIFE_API UUtilityAiDistanceToConsideration : public UUtilityAiConsideration 11 | { 12 | GENERATED_BODY() 13 | 14 | public: 15 | virtual float Score(AActor* Actor, USystemsWorld& Systems, FUtilityAiMemory& Memory) override; 16 | 17 | UPROPERTY(EditAnywhere) 18 | FName ActorMemoryProperty = FName(); 19 | }; 20 | -------------------------------------------------------------------------------- /Source/Life/AI/Considerations/UtilityAiHungerConsideration.cpp: -------------------------------------------------------------------------------- 1 | #include "Life/AI/Considerations/UtilityAiHungerConsideration.h" 2 | 3 | #include "Shared/Components/HungerComponent.h" 4 | #include "Systems/Public/SystemsWorld.h" 5 | 6 | float UUtilityAiHungerConsideration::Score(AActor* Actor, 7 | USystemsWorld& Systems, 8 | FUtilityAiMemory& Memory) 9 | { 10 | const auto* Hunger = Systems.Component(Actor); 11 | return IsValid(Hunger) ? Hunger->Value - this->Threshold : 0; 12 | } 13 | -------------------------------------------------------------------------------- /Source/Life/AI/Considerations/UtilityAiHungerConsideration.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "CoreMinimal.h" 4 | 5 | #include "Life/AI/Reasoner/UtilityAiConsideration.h" 6 | 7 | #include "UtilityAiHungerConsideration.generated.h" 8 | 9 | UCLASS(BlueprintType, Blueprintable) 10 | class LIFE_API UUtilityAiHungerConsideration : public UUtilityAiConsideration 11 | { 12 | GENERATED_BODY() 13 | 14 | public: 15 | virtual float Score(AActor* Actor, USystemsWorld& Systems, FUtilityAiMemory& Memory) override; 16 | 17 | UPROPERTY(EditAnywhere) 18 | float Threshold = 0; 19 | }; 20 | -------------------------------------------------------------------------------- /Source/Life/AI/Considerations/UtilityAiMaxConsideration.cpp: -------------------------------------------------------------------------------- 1 | #include "Life/AI/Considerations/UtilityAiMaxConsideration.h" 2 | 3 | #include "Systems/Public/Iterator.h" 4 | 5 | float UUtilityAiMaxConsideration::Score(AActor* Actor, 6 | USystemsWorld& Systems, 7 | FUtilityAiMemory& Memory) 8 | { 9 | return IterStd(this->Considerations) 10 | .Fold(-INFINITY, 11 | [&](const auto Accum, auto& Consideration) 12 | { 13 | const auto Score = Consideration.Score(Actor, Systems, Memory); 14 | return FMath::Max(Accum, Score); 15 | }); 16 | } 17 | -------------------------------------------------------------------------------- /Source/Life/AI/Considerations/UtilityAiMaxConsideration.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "CoreMinimal.h" 4 | 5 | #include "Life/AI/Reasoner/UtilityAiConsideration.h" 6 | 7 | #include "UtilityAiMaxConsideration.generated.h" 8 | 9 | UCLASS(BlueprintType, Blueprintable) 10 | class LIFE_API UUtilityAiMaxConsideration : public UUtilityAiConsideration 11 | { 12 | GENERATED_BODY() 13 | 14 | public: 15 | virtual float Score(AActor* Actor, USystemsWorld& Systems, FUtilityAiMemory& Memory) override; 16 | 17 | UPROPERTY(EditAnywhere) 18 | TArray Considerations = {}; 19 | }; 20 | -------------------------------------------------------------------------------- /Source/Life/AI/Considerations/UtilityAiMinConsideration.cpp: -------------------------------------------------------------------------------- 1 | #include "Life/AI/Considerations/UtilityAiMinConsideration.h" 2 | 3 | #include "Systems/Public/Iterator.h" 4 | 5 | float UUtilityAiMinConsideration::Score(AActor* Actor, 6 | USystemsWorld& Systems, 7 | FUtilityAiMemory& Memory) 8 | { 9 | return IterStd(this->Considerations) 10 | .Fold(INFINITY, 11 | [&](const auto Accum, auto& Consideration) 12 | { 13 | const auto Score = Consideration.Score(Actor, Systems, Memory); 14 | return FMath::Min(Accum, Score); 15 | }); 16 | } 17 | -------------------------------------------------------------------------------- /Source/Life/AI/Considerations/UtilityAiMinConsideration.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "CoreMinimal.h" 4 | 5 | #include "Life/AI/Reasoner/UtilityAiConsideration.h" 6 | 7 | #include "UtilityAiMinConsideration.generated.h" 8 | 9 | UCLASS(BlueprintType, Blueprintable) 10 | class LIFE_API UUtilityAiMinConsideration : public UUtilityAiConsideration 11 | { 12 | GENERATED_BODY() 13 | 14 | public: 15 | virtual float Score(AActor* Actor, USystemsWorld& Systems, FUtilityAiMemory& Memory) override; 16 | 17 | UPROPERTY(EditAnywhere) 18 | TArray Considerations = {}; 19 | }; 20 | -------------------------------------------------------------------------------- /Source/Life/AI/Considerations/UtilityAiPersonalityConsideration.cpp: -------------------------------------------------------------------------------- 1 | #include "Life/AI/Considerations/UtilityAiPersonalityConsideration.h" 2 | 3 | #include "Systems/Public/SystemsWorld.h" 4 | 5 | float UUtilityAiPersonalityConsideration::Score(AActor* Actor, 6 | USystemsWorld& Systems, 7 | FUtilityAiMemory& Memory) 8 | { 9 | const auto* Personality = Systems.Component(Actor); 10 | return IsValid(Personality) ? Personality->Scales.Get(this->Kind) - TargetValue : 0; 11 | } 12 | -------------------------------------------------------------------------------- /Source/Life/AI/Considerations/UtilityAiPersonalityConsideration.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "CoreMinimal.h" 4 | 5 | #include "Life/AI/Reasoner/UtilityAiConsideration.h" 6 | #include "Life/Components/PersonalityComponent.h" 7 | 8 | #include "UtilityAiPersonalityConsideration.generated.h" 9 | 10 | UCLASS(BlueprintType, Blueprintable) 11 | class LIFE_API UUtilityAiPersonalityConsideration : public UUtilityAiConsideration 12 | { 13 | GENERATED_BODY() 14 | 15 | public: 16 | virtual float Score(AActor* Actor, USystemsWorld& Systems, FUtilityAiMemory& Memory) override; 17 | 18 | UPROPERTY(EditAnywhere) 19 | EPersonalityKind Kind = EPersonalityKind::Conscientiousness; 20 | 21 | UPROPERTY(EditAnywhere) 22 | float TargetValue = 0; 23 | }; 24 | -------------------------------------------------------------------------------- /Source/Life/AI/Considerations/UtilityAiProductConsideration.cpp: -------------------------------------------------------------------------------- 1 | #include "Life/AI/Considerations/UtilityAiProductConsideration.h" 2 | 3 | #include "Systems/Public/Iterator.h" 4 | 5 | float UUtilityAiProductConsideration::Score(AActor* Actor, 6 | USystemsWorld& Systems, 7 | FUtilityAiMemory& Memory) 8 | { 9 | if (this->Considerations.Num() <= 0) 10 | { 11 | return 0; 12 | } 13 | 14 | return IterStd(this->Considerations) 15 | .Fold(1, 16 | [&](const auto Accum, auto& Consideration) 17 | { 18 | const auto Score = Consideration.Score(Actor, Systems, Memory); 19 | return Accum * Score; 20 | }); 21 | } 22 | -------------------------------------------------------------------------------- /Source/Life/AI/Considerations/UtilityAiProductConsideration.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "CoreMinimal.h" 4 | 5 | #include "Life/AI/Reasoner/UtilityAiConsideration.h" 6 | 7 | #include "UtilityAiProductConsideration.generated.h" 8 | 9 | UCLASS(BlueprintType, Blueprintable) 10 | class LIFE_API UUtilityAiProductConsideration : public UUtilityAiConsideration 11 | { 12 | GENERATED_BODY() 13 | 14 | public: 15 | virtual float Score(AActor* Actor, USystemsWorld& Systems, FUtilityAiMemory& Memory) override; 16 | 17 | UPROPERTY(EditAnywhere) 18 | TArray Considerations = {}; 19 | }; 20 | -------------------------------------------------------------------------------- /Source/Life/AI/Considerations/UtilityAiSumConsideration.cpp: -------------------------------------------------------------------------------- 1 | #include "Life/AI/Considerations/UtilityAiSumConsideration.h" 2 | 3 | #include "Systems/Public/Iterator.h" 4 | 5 | float UUtilityAiSumConsideration::Score(AActor* Actor, 6 | USystemsWorld& Systems, 7 | FUtilityAiMemory& Memory) 8 | { 9 | return IterStd(this->Considerations) 10 | .Fold(0, 11 | [&](const auto Accum, auto& Consideration) 12 | { 13 | const auto Score = Consideration.Score(Actor, Systems, Memory); 14 | return Accum + Score; 15 | }); 16 | } 17 | -------------------------------------------------------------------------------- /Source/Life/AI/Considerations/UtilityAiSumConsideration.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "CoreMinimal.h" 4 | 5 | #include "Life/AI/Reasoner/UtilityAiConsideration.h" 6 | 7 | #include "UtilityAiSumConsideration.generated.h" 8 | 9 | UCLASS(BlueprintType, Blueprintable) 10 | class LIFE_API UUtilityAiSumConsideration : public UUtilityAiConsideration 11 | { 12 | GENERATED_BODY() 13 | 14 | public: 15 | virtual float Score(AActor* Actor, USystemsWorld& Systems, FUtilityAiMemory& Memory) override; 16 | 17 | UPROPERTY(EditAnywhere) 18 | TArray Considerations = {}; 19 | }; 20 | -------------------------------------------------------------------------------- /Source/Life/AI/Perceptions/UtilityAiFindNearestActorPerception.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "CoreMinimal.h" 4 | 5 | #include "Life/AI/Reasoner/UtilityAiPerception.h" 6 | 7 | #include "UtilityAiFindNearestActorPerception.generated.h" 8 | 9 | UCLASS(BlueprintType, Blueprintable) 10 | class LIFE_API UUtilityAiFindNearestActorPerception : public UUtilityAiPerception 11 | { 12 | GENERATED_BODY() 13 | 14 | public: 15 | virtual void Perceive(AActor* Actor, 16 | USystemsWorld& Systems, 17 | FUtilityAiMemory& Memory) const override; 18 | 19 | UPROPERTY(EditAnywhere) 20 | FName SourceMemoryProperty = FName(TEXT("ActorsInRange")); 21 | 22 | UPROPERTY(EditAnywhere) 23 | FName TargetMemoryProperty = FName(TEXT("NearestActor")); 24 | }; 25 | -------------------------------------------------------------------------------- /Source/Life/AI/Reasoner/UtilityAiBehavior.cpp: -------------------------------------------------------------------------------- 1 | #include "Life/AI/Reasoner/UtilityAiBehavior.h" 2 | 3 | #include "Life/AI/Reasoner/UtilityAiReasoner.h" 4 | #include "Life/AI/Reasoner/UtilityAiTask.h" 5 | 6 | TOptional FUtilityAiBehaviorState::Instantiate(UObject* Owner) const 7 | { 8 | auto NewConsideration = FUtilityAiMappedConsideration(this->Consideration); 9 | NewConsideration.Consideration = DuplicateObject(NewConsideration.Consideration, Owner); 10 | auto* NewTask = DuplicateObject(this->Task, Owner); 11 | if (IsValid(NewConsideration.Consideration) && IsValid(NewTask)) 12 | { 13 | return TOptional( 14 | FUtilityAiReasonerState(NewConsideration, NewTask, this->bActiveState)); 15 | } 16 | return TOptional(); 17 | } 18 | -------------------------------------------------------------------------------- /Source/Life/AI/Reasoner/UtilityAiConsideration.cpp: -------------------------------------------------------------------------------- 1 | #include "Life/AI/Reasoner/UtilityAiConsideration.h" 2 | 3 | #include "Life/AI/Reasoner/UtilityAiMemory.h" 4 | 5 | float FUtilityAiMappedConsideration::Score(AActor* Actor, 6 | USystemsWorld& Systems, 7 | FUtilityAiMemory& Memory) 8 | { 9 | const auto Value = 10 | IsValid(this->Consideration) ? this->Consideration->Score(Actor, Systems, Memory) : 0; 11 | const auto* Curve = this->ScoreMapping.GetRichCurveConst(); 12 | return Curve != nullptr && Curve->IsEmpty() == false ? Curve->Eval(Value) : Value; 13 | } 14 | -------------------------------------------------------------------------------- /Source/Life/AI/Reasoner/UtilityAiPerception.cpp: -------------------------------------------------------------------------------- 1 | #include "Life/AI/Reasoner/UtilityAiPerception.h" 2 | -------------------------------------------------------------------------------- /Source/Life/AI/Reasoner/UtilityAiPerception.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "CoreMinimal.h" 4 | 5 | #include "Engine/DataAsset.h" 6 | 7 | #include "UtilityAiPerception.generated.h" 8 | 9 | class USystemsWorld; 10 | struct FUtilityAiMemory; 11 | 12 | UCLASS(BlueprintType, Abstract) 13 | class LIFE_API UUtilityAiPerception : public UDataAsset 14 | { 15 | GENERATED_BODY() 16 | 17 | public: 18 | virtual void Perceive(AActor* Actor, USystemsWorld& Systems, FUtilityAiMemory& Memory) const 19 | { 20 | } 21 | }; -------------------------------------------------------------------------------- /Source/Life/AI/Tasks/UtilityAiAttackTask.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "CoreMinimal.h" 4 | 5 | #include "Life/AI/Reasoner/UtilityAiTask.h" 6 | 7 | #include "UtilityAiAttackTask.generated.h" 8 | 9 | UCLASS(BlueprintType, Blueprintable) 10 | class LIFE_API UUtilityAiAttackTask : public UUtilityAiTask 11 | { 12 | GENERATED_BODY() 13 | 14 | public: 15 | UPROPERTY(EditAnywhere) 16 | FName TargetMemoryProperty = FName(TEXT("NearestActor")); 17 | 18 | private: 19 | virtual bool OnEnter(AActor* Actor, 20 | USystemsWorld& Systems, 21 | FUtilityAiMemory& Memory, 22 | bool bChanged) override; 23 | }; 24 | -------------------------------------------------------------------------------- /Source/Life/AI/Tasks/UtilityAiFollowTask.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "CoreMinimal.h" 4 | 5 | #include "Life/AI/Reasoner/UtilityAiTask.h" 6 | 7 | #include "UtilityAiFollowTask.generated.h" 8 | 9 | UCLASS(BlueprintType, Blueprintable) 10 | class LIFE_API UUtilityAiFollowTask : public UUtilityAiTask 11 | { 12 | GENERATED_BODY() 13 | 14 | public: 15 | UPROPERTY(EditAnywhere) 16 | bool bTargetCanMove = false; 17 | 18 | UPROPERTY(EditAnywhere) 19 | FName TargetMemoryProperty = FName(TEXT("NearestActor")); 20 | 21 | private: 22 | virtual bool OnEnter(AActor* Actor, 23 | USystemsWorld& Systems, 24 | FUtilityAiMemory& Memory, 25 | bool bChanged) override; 26 | 27 | virtual void OnExit(AActor* Actor, USystemsWorld& Systems, FUtilityAiMemory& Memory) override; 28 | }; 29 | -------------------------------------------------------------------------------- /Source/Life/AI/Tasks/UtilityAiWanderTask.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "CoreMinimal.h" 4 | 5 | #include "Life/AI/Reasoner/UtilityAiTask.h" 6 | 7 | #include "UtilityAiWanderTask.generated.h" 8 | 9 | struct FutilityAiMemory; 10 | 11 | UCLASS(BlueprintType, Blueprintable) 12 | class LIFE_API UUtilityAiWanderTask : public UUtilityAiTask 13 | { 14 | GENERATED_BODY() 15 | 16 | public: 17 | UPROPERTY(EditAnywhere) 18 | float Range = 0; 19 | 20 | private: 21 | virtual bool OnEnter(AActor* Actor, 22 | USystemsWorld& Systems, 23 | FUtilityAiMemory& Memory, 24 | bool bChanged) override; 25 | 26 | virtual void OnExit(AActor* Actor, USystemsWorld& Systems, FUtilityAiMemory& Memory) override; 27 | }; 28 | -------------------------------------------------------------------------------- /Source/Life/Components/AgeComponent.cpp: -------------------------------------------------------------------------------- 1 | #include "Life/Components/AgeComponent.h" 2 | 3 | void UAgeComponent::BeginPlay() 4 | { 5 | Super::BeginPlay(); 6 | 7 | this->Value = FMath::RandRange(0.0f, this->RandomMax); 8 | this->ApplyToSpriteMetronome.Randomize(); 9 | } 10 | -------------------------------------------------------------------------------- /Source/Life/Components/AiComponent.cpp: -------------------------------------------------------------------------------- 1 | #include "Life/Components/AiComponent.h" 2 | 3 | void UAiComponent::BeginPlay() 4 | { 5 | Super::BeginPlay(); 6 | 7 | if (IsValid(this->Behavior)) 8 | { 9 | this->Reasoner = UUtilityAiReasoner::FromBehavior(this, this->Behavior); 10 | } 11 | } 12 | 13 | void UAiComponent::TryDecide(USystemsWorld& Systems, float Threshold, float DeltaTime) 14 | { 15 | if (IsValid(this->Reasoner)) 16 | { 17 | this->DecideAccum += DeltaTime; 18 | if (this->Reasoner->GetActiveState().IsNone() || this->DecideAccum >= Threshold) 19 | { 20 | this->Reasoner->Decide(GetOwner(), Systems); 21 | this->DecideAccum = 0; 22 | } 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /Source/Life/Components/AnimalComponent.cpp: -------------------------------------------------------------------------------- 1 | #include "Life/Components/AnimalComponent.h" 2 | -------------------------------------------------------------------------------- /Source/Life/Components/AnimalComponent.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "CoreMinimal.h" 4 | 5 | #include "Systems/Public/SystemsComponent.h" 6 | 7 | #include "AnimalComponent.generated.h" 8 | 9 | UCLASS(BlueprintType, Blueprintable, Meta = (BlueprintSpawnableComponent)) 10 | class LIFE_API UAnimalComponent : public USystemsActorComponent 11 | { 12 | GENERATED_BODY() 13 | }; 14 | -------------------------------------------------------------------------------- /Source/Life/Components/CameraRelationComponent.cpp: -------------------------------------------------------------------------------- 1 | #include "Life/Components/CameraRelationComponent.h" 2 | -------------------------------------------------------------------------------- /Source/Life/Components/CameraRelationComponent.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "CoreMinimal.h" 4 | 5 | #include "Systems/Public/SystemsComponent.h" 6 | 7 | #include "CameraRelationComponent.generated.h" 8 | 9 | UCLASS(BlueprintType, Blueprintable, Meta = (BlueprintSpawnableComponent)) 10 | class LIFE_API UCameraRelationComponent : public USystemsActorComponent 11 | { 12 | GENERATED_BODY() 13 | 14 | public: 15 | UPROPERTY() 16 | bool bIsVisible = false; 17 | 18 | UPROPERTY() 19 | float Distance = 0; 20 | 21 | UPROPERTY() 22 | FVector Difference = FVector(0); 23 | }; 24 | -------------------------------------------------------------------------------- /Source/Life/Components/ClearRangeComponent.cpp: -------------------------------------------------------------------------------- 1 | #include "Life/Components/ClearRangeComponent.h" 2 | -------------------------------------------------------------------------------- /Source/Life/Components/ClearRangeComponent.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "CoreMinimal.h" 4 | 5 | #include "Systems/Public/SystemsComponent.h" 6 | 7 | #include "ClearRangeComponent.generated.h" 8 | 9 | UCLASS(BlueprintType, Blueprintable, Meta = (BlueprintSpawnableComponent)) 10 | class LIFE_API UClearRangeComponent : public USystemsActorComponent 11 | { 12 | GENERATED_BODY() 13 | 14 | public: 15 | UPROPERTY(EditAnywhere) 16 | float RangeMin = 0; 17 | 18 | UPROPERTY(EditAnywhere) 19 | float RangeMax = 1000; 20 | 21 | UPROPERTY(EditAnywhere) 22 | bool bScreenSpace = false; 23 | }; 24 | -------------------------------------------------------------------------------- /Source/Life/Components/ClearRangeEmitterComponent.cpp: -------------------------------------------------------------------------------- 1 | #include "Life/Components/ClearRangeEmitterComponent.h" 2 | -------------------------------------------------------------------------------- /Source/Life/Components/ClearRangeEmitterComponent.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "CoreMinimal.h" 4 | 5 | #include "Systems/Public/SystemsComponent.h" 6 | 7 | #include "ClearRangeEmitterComponent.generated.h" 8 | 9 | UCLASS(BlueprintType, Blueprintable, Meta = (BlueprintSpawnableComponent)) 10 | class LIFE_API UClearRangeEmitterComponent : public USystemsSceneComponent 11 | { 12 | GENERATED_BODY() 13 | }; 14 | -------------------------------------------------------------------------------- /Source/Life/Components/ClearRangeReceiverComponent.cpp: -------------------------------------------------------------------------------- 1 | #include "Life/Components/ClearRangeReceiverComponent.h" 2 | -------------------------------------------------------------------------------- /Source/Life/Components/ClearRangeReceiverComponent.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "CoreMinimal.h" 4 | 5 | #include "Systems/Public/SystemsComponent.h" 6 | 7 | #include "ClearRangeReceiverComponent.generated.h" 8 | 9 | UCLASS(BlueprintType, Blueprintable, Meta = (BlueprintSpawnableComponent)) 10 | class LIFE_API UClearRangeReceiverComponent : public USystemsActorComponent 11 | { 12 | GENERATED_BODY() 13 | }; 14 | -------------------------------------------------------------------------------- /Source/Life/Components/CursorComponent.cpp: -------------------------------------------------------------------------------- 1 | #include "Life/Components/CursorComponent.h" 2 | -------------------------------------------------------------------------------- /Source/Life/Components/CursorComponent.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "CoreMinimal.h" 4 | 5 | #include "Systems/Public/SystemsComponent.h" 6 | 7 | #include "CursorComponent.generated.h" 8 | 9 | UCLASS(BlueprintType, Blueprintable, Meta = (BlueprintSpawnableComponent)) 10 | class LIFE_API UCursorComponent : public USystemsActorComponent 11 | { 12 | GENERATED_BODY() 13 | }; 14 | -------------------------------------------------------------------------------- /Source/Life/Components/FaceCameraComponent.cpp: -------------------------------------------------------------------------------- 1 | #include "Life/Components/FaceCameraComponent.h" 2 | 3 | void UFaceCameraComponent::BeginPlay() 4 | { 5 | Super::BeginPlay(); 6 | 7 | this->Metronome.Randomize(); 8 | } 9 | -------------------------------------------------------------------------------- /Source/Life/Components/FaceCameraComponent.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "CoreMinimal.h" 4 | 5 | #include "Systems/Public/Metronome.h" 6 | #include "Systems/Public/SystemsComponent.h" 7 | 8 | #include "FaceCameraComponent.generated.h" 9 | 10 | UCLASS(BlueprintType, Blueprintable, Meta = (BlueprintSpawnableComponent)) 11 | class LIFE_API UFaceCameraComponent : public USystemsActorComponent 12 | { 13 | GENERATED_BODY() 14 | 15 | public: 16 | virtual void BeginPlay() override; 17 | 18 | UPROPERTY(EditAnywhere) 19 | FMetronome Metronome = {}; 20 | }; 21 | -------------------------------------------------------------------------------- /Source/Life/Components/FlatMovementComponent.cpp: -------------------------------------------------------------------------------- 1 | #include "Life/Components/FlatMovementComponent.h" 2 | -------------------------------------------------------------------------------- /Source/Life/Components/FlatMovementComponent.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "CoreMinimal.h" 4 | 5 | #include "Systems/Public/SystemsComponent.h" 6 | 7 | #include "FlatMovementComponent.generated.h" 8 | 9 | UCLASS(BlueprintType, Blueprintable, Meta = (BlueprintSpawnableComponent)) 10 | class LIFE_API UFlatMovementComponent : public USystemsActorComponent 11 | { 12 | GENERATED_BODY() 13 | 14 | public: 15 | UPROPERTY() 16 | FVector2D Value = FVector2D(0); 17 | }; 18 | -------------------------------------------------------------------------------- /Source/Life/Components/FlipbookProxyComponent.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "CoreMinimal.h" 4 | 5 | #include "PaperFlipbookComponent.h" 6 | 7 | #include "FlipbookProxyComponent.generated.h" 8 | 9 | UCLASS(BlueprintType, Blueprintable, Meta = (BlueprintSpawnableComponent)) 10 | class LIFE_API UFlipbookProxyComponent : public UPaperFlipbookComponent 11 | { 12 | GENERATED_BODY() 13 | 14 | public: 15 | UFUNCTION() 16 | void ApplyVisibility(float Factor); 17 | 18 | UFUNCTION() 19 | void ApplyShiny(float Factor); 20 | 21 | UFUNCTION() 22 | void ApplySaturation(float Factor); 23 | 24 | protected: 25 | virtual void BeginPlay() override; 26 | 27 | virtual void EndPlay(const EEndPlayReason::Type EndPlayReason) override; 28 | }; 29 | -------------------------------------------------------------------------------- /Source/Life/Components/HealthComponent.cpp: -------------------------------------------------------------------------------- 1 | #include "Life/Components/HealthComponent.h" 2 | -------------------------------------------------------------------------------- /Source/Life/Components/HealthComponent.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "CoreMinimal.h" 4 | 5 | #include "Systems/Public/SystemsComponent.h" 6 | 7 | #include "HealthComponent.generated.h" 8 | 9 | UCLASS(BlueprintType, Blueprintable, Meta = (BlueprintSpawnableComponent)) 10 | class LIFE_API UHealthComponent : public USystemsActorComponent 11 | { 12 | GENERATED_BODY() 13 | 14 | public: 15 | UPROPERTY(EditAnywhere) 16 | float Value = 100; 17 | 18 | UPROPERTY(EditAnywhere) 19 | float Limit = 100; 20 | }; 21 | -------------------------------------------------------------------------------- /Source/Life/Components/HouseComponent.cpp: -------------------------------------------------------------------------------- 1 | #include "Life/Components/HouseComponent.h" 2 | -------------------------------------------------------------------------------- /Source/Life/Components/HouseComponent.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "CoreMinimal.h" 4 | 5 | #include "Systems/Public/SystemsComponent.h" 6 | 7 | #include "HouseComponent.generated.h" 8 | 9 | UCLASS(BlueprintType, Blueprintable, Meta = (BlueprintSpawnableComponent)) 10 | class LIFE_API UHouseComponent : public USystemsActorComponent 11 | { 12 | GENERATED_BODY() 13 | }; 14 | -------------------------------------------------------------------------------- /Source/Life/Components/HumanComponent.cpp: -------------------------------------------------------------------------------- 1 | #include "Life/Components/HumanComponent.h" 2 | -------------------------------------------------------------------------------- /Source/Life/Components/HumanComponent.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "CoreMinimal.h" 4 | 5 | #include "Systems/Public/SystemsComponent.h" 6 | 7 | #include "HumanComponent.generated.h" 8 | 9 | UCLASS(BlueprintType, Blueprintable, Meta = (BlueprintSpawnableComponent)) 10 | class LIFE_API UHumanComponent : public USystemsActorComponent 11 | { 12 | GENERATED_BODY() 13 | }; 14 | -------------------------------------------------------------------------------- /Source/Life/Components/IronComponent.cpp: -------------------------------------------------------------------------------- 1 | #include "Life/Components/IronComponent.h" 2 | -------------------------------------------------------------------------------- /Source/Life/Components/IronComponent.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "CoreMinimal.h" 4 | 5 | #include "Systems/Public/SystemsComponent.h" 6 | 7 | #include "IronComponent.generated.h" 8 | 9 | UCLASS(BlueprintType, Blueprintable, Meta = (BlueprintSpawnableComponent)) 10 | class LIFE_API UIronComponent : public USystemsActorComponent 11 | { 12 | GENERATED_BODY() 13 | }; 14 | -------------------------------------------------------------------------------- /Source/Life/Components/SpeciesComponent.cpp: -------------------------------------------------------------------------------- 1 | #include "Life/Components/SpeciesComponent.h" 2 | -------------------------------------------------------------------------------- /Source/Life/Components/SpriteProxyComponent.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "CoreMinimal.h" 4 | 5 | #include "PaperSpriteComponent.h" 6 | 7 | #include "SpriteProxyComponent.generated.h" 8 | 9 | UCLASS(BlueprintType, Blueprintable, Meta = (BlueprintSpawnableComponent)) 10 | class LIFE_API USpriteProxyComponent : public UPaperSpriteComponent 11 | { 12 | GENERATED_BODY() 13 | 14 | public: 15 | UFUNCTION() 16 | void ApplyVisibility(float Factor); 17 | 18 | UFUNCTION() 19 | void ApplyShiny(float Factor); 20 | 21 | UFUNCTION() 22 | void ApplySaturation(float Factor); 23 | 24 | protected: 25 | virtual void BeginPlay() override; 26 | 27 | virtual void EndPlay(const EEndPlayReason::Type EndPlayReason) override; 28 | }; 29 | -------------------------------------------------------------------------------- /Source/Life/Components/StaminaComponent.cpp: -------------------------------------------------------------------------------- 1 | #include "Life/Components/StaminaComponent.h" 2 | -------------------------------------------------------------------------------- /Source/Life/Components/StaminaComponent.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "CoreMinimal.h" 4 | 5 | #include "Systems/Public/SystemsComponent.h" 6 | 7 | #include "StaminaComponent.generated.h" 8 | 9 | UCLASS(BlueprintType, Blueprintable, Meta = (BlueprintSpawnableComponent)) 10 | class LIFE_API UStaminaComponent : public USystemsActorComponent 11 | { 12 | GENERATED_BODY() 13 | 14 | public: 15 | UPROPERTY(EditAnywhere) 16 | float Value = 100; 17 | 18 | UPROPERTY(EditAnywhere) 19 | float Limit = 100; 20 | }; 21 | -------------------------------------------------------------------------------- /Source/Life/Components/StrengthComponent.cpp: -------------------------------------------------------------------------------- 1 | #include "Life/Components/StrengthComponent.h" 2 | -------------------------------------------------------------------------------- /Source/Life/Components/StrengthComponent.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "CoreMinimal.h" 4 | 5 | #include "Systems/Public/SystemsComponent.h" 6 | 7 | #include "StrengthComponent.generated.h" 8 | 9 | UCLASS(BlueprintType, Blueprintable, Meta = (BlueprintSpawnableComponent)) 10 | class LIFE_API UStrengthComponent : public USystemsActorComponent 11 | { 12 | GENERATED_BODY() 13 | 14 | public: 15 | UPROPERTY(EditAnywhere) 16 | float Value = 100; 17 | 18 | UPROPERTY(EditAnywhere) 19 | float Limit = 100; 20 | }; 21 | -------------------------------------------------------------------------------- /Source/Life/Components/WaterComponent.cpp: -------------------------------------------------------------------------------- 1 | #include "Life/Components/WaterComponent.h" 2 | 3 | const FName TIME_PHASE_PARAM = FName(TEXT("TimePhase")); 4 | 5 | void UWaterComponent::ApplyToMaterial() 6 | { 7 | if (IsValid(CachedInstance)) 8 | { 9 | CachedInstance->SetScalarParameterValue(TIME_PHASE_PARAM, this->Time); 10 | } 11 | } 12 | 13 | void UWaterComponent::BeginPlay() 14 | { 15 | Super::BeginPlay(); 16 | 17 | auto* Mesh = GetOwner()->FindComponentByClass(); 18 | if (IsValid(Mesh)) 19 | { 20 | auto* MaterialInterface = Mesh->GetMaterial(0); 21 | if (IsValid(MaterialInterface)) 22 | { 23 | this->CachedInstance = UMaterialInstanceDynamic::Create(MaterialInterface, this); 24 | Mesh->SetMaterial(0, this->CachedInstance); 25 | } 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /Source/Life/Components/WaterComponent.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "CoreMinimal.h" 4 | 5 | #include "Systems/Public/SystemsComponent.h" 6 | 7 | #include "WaterComponent.generated.h" 8 | 9 | UCLASS(BlueprintType, Blueprintable, Meta = (BlueprintSpawnableComponent)) 10 | class LIFE_API UWaterComponent : public USystemsActorComponent 11 | { 12 | GENERATED_BODY() 13 | 14 | public: 15 | void ApplyToMaterial(); 16 | 17 | UPROPERTY() 18 | float Time = 0; 19 | 20 | private: 21 | virtual void BeginPlay() override; 22 | 23 | UPROPERTY() 24 | UMaterialInstanceDynamic* CachedInstance = nullptr; 25 | }; 26 | -------------------------------------------------------------------------------- /Source/Life/Components/WoodComponent.cpp: -------------------------------------------------------------------------------- 1 | #include "Life/Components/WoodComponent.h" 2 | -------------------------------------------------------------------------------- /Source/Life/Components/WoodComponent.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "CoreMinimal.h" 4 | 5 | #include "Systems/Public/SystemsComponent.h" 6 | 7 | #include "WoodComponent.generated.h" 8 | 9 | UCLASS(BlueprintType, Blueprintable, Meta = (BlueprintSpawnableComponent)) 10 | class LIFE_API UWoodComponent : public USystemsActorComponent 11 | { 12 | GENERATED_BODY() 13 | }; 14 | -------------------------------------------------------------------------------- /Source/Life/Life.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "CoreMinimal.h" 4 | 5 | #include "Modules/ModuleManager.h" 6 | 7 | class FLifeModule : public IModuleInterface 8 | { 9 | public: 10 | virtual void StartupModule() override; 11 | 12 | virtual void ShutdownModule() override; 13 | }; 14 | -------------------------------------------------------------------------------- /Source/Life/Resources/LifeDebugSystems.cpp: -------------------------------------------------------------------------------- 1 | #include "Life/Resources/LifeDebugSystems.h" 2 | -------------------------------------------------------------------------------- /Source/Life/Resources/LifeDebugSystems.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "CoreMinimal.h" 4 | 5 | #include "Engine/DataAsset.h" 6 | 7 | #include "LifeDebugSystems.generated.h" 8 | 9 | UCLASS(BlueprintType) 10 | class LIFE_API ULifeDebugSystems : public UDataAsset 11 | { 12 | GENERATED_BODY() 13 | 14 | public: 15 | UPROPERTY(EditAnywhere) 16 | bool bShowFollowPaths = false; 17 | }; -------------------------------------------------------------------------------- /Source/Life/Resources/LifeSettings.cpp: -------------------------------------------------------------------------------- 1 | #include "Life/Resources/LifeSettings.h" 2 | -------------------------------------------------------------------------------- /Source/Life/Resources/LifeSpawner.cpp: -------------------------------------------------------------------------------- 1 | #include "Life/Resources/LifeSpawner.h" 2 | 3 | bool ULifeSpawner::SpawnSelected(FVector Location) 4 | { 5 | return false; 6 | } 7 | -------------------------------------------------------------------------------- /Source/Life/Resources/LifeSpawner.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "CoreMinimal.h" 4 | 5 | #include "LifeSpawner.generated.h" 6 | 7 | UCLASS(BlueprintType) 8 | class LIFE_API ULifeSpawner : public UObject 9 | { 10 | GENERATED_BODY() 11 | 12 | public: 13 | UPROPERTY() 14 | UClass* SelectedToSpawn = nullptr; 15 | 16 | UFUNCTION() 17 | bool SpawnSelected(FVector Location); 18 | }; 19 | -------------------------------------------------------------------------------- /Source/Life/Systems/OneShot/HumansClearVisionSystem.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "CoreMinimal.h" 4 | 5 | class USystemsWorld; 6 | 7 | UFUNCTION() 8 | void HumansClearVisionSystem(USystemsWorld& Systems); 9 | -------------------------------------------------------------------------------- /Source/Life/Systems/Persistent/AgingSystem.cpp: -------------------------------------------------------------------------------- 1 | #include "Life/Systems/Persistent/AgingSystem.h" 2 | 3 | #include "Systems/Public/SystemsWorld.h" 4 | 5 | #include "Life/Components/AgeComponent.h" 6 | #include "Life/Resources/LifeSettings.h" 7 | 8 | void AgingSystem(USystemsWorld& Systems) 9 | { 10 | const auto* Settings = Systems.Resource(); 11 | if (IsValid(Settings) == false) 12 | { 13 | return; 14 | } 15 | 16 | const auto DeltaTime = Systems.GetWorld()->GetDeltaSeconds(); 17 | const auto TimePassed = Settings->TimeScale * DeltaTime; 18 | 19 | for (auto& QueryItem : Systems.Query()) 20 | { 21 | auto* Age = QueryItem.Get<1>(); 22 | Age->Value += TimePassed; 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /Source/Life/Systems/Persistent/AgingSystem.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "CoreMinimal.h" 4 | 5 | class USystemsWorld; 6 | 7 | UFUNCTION() 8 | void AgingSystem(USystemsWorld& Systems); 9 | -------------------------------------------------------------------------------- /Source/Life/Systems/Persistent/AiSystem.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "CoreMinimal.h" 4 | 5 | class USystemsWorld; 6 | 7 | UFUNCTION() 8 | void AiSystem(USystemsWorld& Systems); 9 | -------------------------------------------------------------------------------- /Source/Life/Systems/Persistent/ApplyAgeToSpriteSystem.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "CoreMinimal.h" 4 | 5 | class USystemsWorld; 6 | 7 | UFUNCTION() 8 | void ApplyAgeToSpriteSystem(USystemsWorld& Systems); 9 | -------------------------------------------------------------------------------- /Source/Life/Systems/Persistent/ApplyBlendSpaceFlipbookSystem.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "CoreMinimal.h" 4 | 5 | class USystemsWorld; 6 | 7 | UFUNCTION() 8 | void ApplyBlendSpaceFlipbookSystem(USystemsWorld& Systems); 9 | -------------------------------------------------------------------------------- /Source/Life/Systems/Persistent/ApplyCursorToWorldSystem.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "CoreMinimal.h" 4 | 5 | class USystemsWorld; 6 | 7 | UFUNCTION() 8 | void SpawnCursorSystem(USystemsWorld& Systems); 9 | 10 | UFUNCTION() 11 | void ApplyCursorToWorldSystem(USystemsWorld& Systems); 12 | -------------------------------------------------------------------------------- /Source/Life/Systems/Persistent/CameraRelationSystem.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "CoreMinimal.h" 4 | 5 | class USystemsWorld; 6 | 7 | UFUNCTION() 8 | void CameraRelationSystem(USystemsWorld& Systems); 9 | -------------------------------------------------------------------------------- /Source/Life/Systems/Persistent/ClearVisionSystem.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "CoreMinimal.h" 4 | 5 | class USystemsWorld; 6 | 7 | UFUNCTION() 8 | void ClearVisionSystem(USystemsWorld& Systems); 9 | -------------------------------------------------------------------------------- /Source/Life/Systems/Persistent/DebugFollowPathSystem.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "CoreMinimal.h" 4 | 5 | class USystemsWorld; 6 | 7 | UFUNCTION() 8 | void DebugFollowPathSystem(USystemsWorld& Systems); 9 | -------------------------------------------------------------------------------- /Source/Life/Systems/Persistent/FaceCameraSystem.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "CoreMinimal.h" 4 | 5 | class USystemsWorld; 6 | 7 | UFUNCTION() 8 | void FaceCameraSystem(USystemsWorld& Systems); 9 | -------------------------------------------------------------------------------- /Source/Life/Systems/Persistent/FlatMovementSystem.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "CoreMinimal.h" 4 | 5 | class USystemsWorld; 6 | 7 | UFUNCTION() 8 | void FlatMovementSystem(USystemsWorld& Systems); 9 | -------------------------------------------------------------------------------- /Source/Life/Systems/Persistent/FollowPathSystem.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "CoreMinimal.h" 4 | 5 | class USystemsWorld; 6 | 7 | UFUNCTION() 8 | void FollowPathSystem(USystemsWorld& Systems); 9 | -------------------------------------------------------------------------------- /Source/Life/Systems/Persistent/HungerSystem.cpp: -------------------------------------------------------------------------------- 1 | #include "Life/Systems/Persistent/HungerSystem.h" 2 | 3 | #include "Shared/Components/HungerComponent.h" 4 | #include "Systems/Public/SystemsWorld.h" 5 | 6 | #include "Life/Resources/LifeSettings.h" 7 | 8 | void HungerSystem(USystemsWorld& Systems) 9 | { 10 | const auto* Settings = Systems.Resource(); 11 | if (IsValid(Settings) == false) 12 | { 13 | return; 14 | } 15 | 16 | const auto DeltaTime = Systems.GetWorld()->GetDeltaSeconds(); 17 | const auto TimePassed = Settings->TimeScale * DeltaTime; 18 | 19 | for (auto& QueryItem : Systems.Query()) 20 | { 21 | auto* Hunger = QueryItem.Get<1>(); 22 | Hunger->Value += TimePassed; 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /Source/Life/Systems/Persistent/HungerSystem.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "CoreMinimal.h" 4 | 5 | class USystemsWorld; 6 | 7 | UFUNCTION() 8 | void HungerSystem(USystemsWorld& Systems); 9 | -------------------------------------------------------------------------------- /Source/Life/Systems/Persistent/MoveCameraSystem.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "CoreMinimal.h" 4 | 5 | class USystemsWorld; 6 | 7 | UFUNCTION() 8 | void MoveCameraSystem(USystemsWorld& Systems); 9 | -------------------------------------------------------------------------------- /Source/Life/Systems/Persistent/RotateCameraSystem.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "CoreMinimal.h" 4 | 5 | class USystemsWorld; 6 | 7 | UFUNCTION() 8 | void RotateCameraSystem(USystemsWorld& Systems); 9 | -------------------------------------------------------------------------------- /Source/Life/Systems/Persistent/SpawnSystem.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "CoreMinimal.h" 4 | 5 | class USystemsWorld; 6 | 7 | UFUNCTION() 8 | void SpawnSystem(USystemsWorld& Systems); 9 | -------------------------------------------------------------------------------- /Source/Life/Systems/Persistent/WaterSystem.cpp: -------------------------------------------------------------------------------- 1 | #include "Life/Systems/Persistent/WaterSystem.h" 2 | 3 | #include "Systems/Public/SystemsWorld.h" 4 | 5 | #include "Life/Components/WaterComponent.h" 6 | #include "Life/Resources/LifeSettings.h" 7 | 8 | void WaterSystem(USystemsWorld& Systems) 9 | { 10 | const auto* Settings = Systems.Resource(); 11 | if (IsValid(Settings) == false) 12 | { 13 | return; 14 | } 15 | 16 | const auto DeltaTime = Systems.GetWorld()->GetDeltaSeconds(); 17 | const auto TimePassed = Settings->TimeScale * DeltaTime; 18 | 19 | for (auto& QueryItem : Systems.Query()) 20 | { 21 | auto* Water = QueryItem.Get<1>(); 22 | 23 | Water->Time += TimePassed; 24 | Water->ApplyToMaterial(); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /Source/Life/Systems/Persistent/WaterSystem.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "CoreMinimal.h" 4 | 5 | class USystemsWorld; 6 | 7 | UFUNCTION() 8 | void WaterSystem(USystemsWorld& Systems); 9 | -------------------------------------------------------------------------------- /Source/Life/Systems/Persistent/ZoomCameraSystem.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "CoreMinimal.h" 4 | 5 | class USystemsWorld; 6 | 7 | UFUNCTION() 8 | void ZoomCameraSystem(USystemsWorld& Systems); 9 | -------------------------------------------------------------------------------- /Source/Life/UI/WidgetGodsInterface.cpp: -------------------------------------------------------------------------------- 1 | #include "Life/UI/WidgetGodsInterface.h" 2 | 3 | #include "Components/ListView.h" 4 | #include "ReactiveSystems/Public/Resources/SystemsChangeDetection.h" 5 | #include "Systems/Public/SystemsStatics.h" 6 | 7 | #include "Life/Resources/LifeSettings.h" 8 | 9 | void UWidgetGodsInterface::NativeConstruct() 10 | { 11 | Super::NativeConstruct(); 12 | 13 | const auto* Settings = USystemsStatics::GetResource(FName(), GetWorld()); 14 | if (IsValid(this->Spawnables) && IsValid(Settings) && Settings->Spawnables.Num() > 0) 15 | { 16 | auto Items = TArray(); 17 | Settings->Spawnables.GetKeys(Items); 18 | this->Spawnables->SetListItems(Items); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /Source/Life/UI/WidgetGodsInterface.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "CoreMinimal.h" 4 | 5 | #include "Blueprint/UserWidget.h" 6 | 7 | #include "WidgetGodsInterface.generated.h" 8 | 9 | class UListView; 10 | 11 | UCLASS() 12 | class LIFE_API UWidgetGodsInterface : public UUserWidget 13 | { 14 | GENERATED_BODY() 15 | 16 | private: 17 | virtual void NativeConstruct() override; 18 | 19 | UPROPERTY(Meta = (BindWidget)) 20 | UListView* Spawnables = nullptr; 21 | }; 22 | -------------------------------------------------------------------------------- /Source/Life/UI/WidgetLifeStats.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "CoreMinimal.h" 4 | 5 | #include "Blueprint/UserWidget.h" 6 | 7 | #include "WidgetLifeStats.generated.h" 8 | 9 | class USystemsWorld; 10 | class UTextBlock; 11 | 12 | UCLASS() 13 | class LIFE_API UWidgetLifeStats : public UUserWidget 14 | { 15 | GENERATED_BODY() 16 | 17 | private: 18 | virtual void NativeConstruct() override; 19 | 20 | virtual void NativeDestruct() override; 21 | 22 | void OnHumansChanged(USystemsWorld& Systems); 23 | 24 | void OnAnimalsChanged(USystemsWorld& Systems); 25 | 26 | UPROPERTY(Meta = (BindWidget)) 27 | UTextBlock* HumansCount = nullptr; 28 | 29 | UPROPERTY(Meta = (BindWidget)) 30 | UTextBlock* AnimalsCount = nullptr; 31 | }; 32 | -------------------------------------------------------------------------------- /Source/Multiplayer/Actors/MultiPlayerController.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "CoreMinimal.h" 4 | 5 | #include "GameFramework/PlayerController.h" 6 | 7 | #include "MultiPlayerController.generated.h" 8 | 9 | class USystemsWorld; 10 | 11 | UCLASS() 12 | class MULTIPLAYER_API AMultiPlayerController : public APlayerController 13 | { 14 | GENERATED_BODY() 15 | 16 | private: 17 | virtual void SetupInputComponent() override; 18 | 19 | UFUNCTION() 20 | void OnActionPressed(); 21 | 22 | UFUNCTION() 23 | void OnActionReleased(); 24 | 25 | UFUNCTION() 26 | void OnRelativeDirectionHorizontal(float Delta); 27 | 28 | UFUNCTION() 29 | void OnRelativeDirectionVertical(float Delta); 30 | 31 | UFUNCTION() 32 | void OnRelativeMovementHorizontal(float Delta); 33 | 34 | UFUNCTION() 35 | void OnRelativeMovementVertical(float Delta); 36 | }; 37 | -------------------------------------------------------------------------------- /Source/Multiplayer/Components/MultiPlayerComponent.cpp: -------------------------------------------------------------------------------- 1 | #include "Multiplayer/Components/MultiPlayerComponent.h" 2 | -------------------------------------------------------------------------------- /Source/Multiplayer/Components/MultiPlayerComponent.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "CoreMinimal.h" 4 | 5 | #include "Systems/Public/SystemsComponent.h" 6 | 7 | #include "MultiPlayerComponent.generated.h" 8 | 9 | UCLASS(BlueprintType, Blueprintable, Meta = (BlueprintSpawnableComponent)) 10 | class MULTIPLAYER_API UMultiPlayerComponent : public USystemsActorComponent 11 | { 12 | GENERATED_BODY() 13 | }; 14 | -------------------------------------------------------------------------------- /Source/Multiplayer/Components/MultiplayerCorrectTransformComponent.cpp: -------------------------------------------------------------------------------- 1 | #include "Multiplayer/Components/MultiplayerCorrectTransformComponent.h" 2 | 3 | UMultiplayerCorrectTransformComponent::UMultiplayerCorrectTransformComponent() 4 | { 5 | SetNetAddressable(); 6 | SetIsReplicatedByDefault(true); 7 | } 8 | 9 | void UMultiplayerCorrectTransformComponent::BeginPlay() 10 | { 11 | Super::BeginPlay(); 12 | 13 | this->Metronome.Randomize(); 14 | } 15 | 16 | void UMultiplayerCorrectTransformComponent::ClientUpdate_Implementation(FVector Position, 17 | FRotator Rotation) 18 | { 19 | if (IsValid(GetOwner())) 20 | { 21 | GetOwner()->SetActorLocation(Position); 22 | GetOwner()->SetActorRotation(Rotation); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /Source/Multiplayer/Components/MultiplayerCorrectTransformComponent.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "CoreMinimal.h" 4 | 5 | #include "Systems/Public/Metronome.h" 6 | #include "Systems/Public/SystemsComponent.h" 7 | 8 | #include "MultiplayerCorrectTransformComponent.generated.h" 9 | 10 | UCLASS(BlueprintType, Blueprintable, Meta = (BlueprintSpawnableComponent)) 11 | class MULTIPLAYER_API UMultiplayerCorrectTransformComponent : public USystemsActorComponent 12 | { 13 | GENERATED_BODY() 14 | 15 | public: 16 | UMultiplayerCorrectTransformComponent(); 17 | 18 | virtual void BeginPlay() override; 19 | 20 | UFUNCTION(Client, Unreliable) 21 | void ClientUpdate(FVector Position, FRotator Rotation); 22 | 23 | UPROPERTY(EditAnywhere) 24 | FMetronome Metronome = {}; 25 | }; 26 | -------------------------------------------------------------------------------- /Source/Multiplayer/Components/MultiplayerInputComponent.cpp: -------------------------------------------------------------------------------- 1 | #include "Multiplayer/Components/MultiplayerInputComponent.h" 2 | 3 | UMultiplayerInputComponent::UMultiplayerInputComponent() 4 | { 5 | SetNetAddressable(); 6 | SetIsReplicatedByDefault(true); 7 | } 8 | 9 | void UMultiplayerInputComponent::ServerUpdate_Implementation(FVector2D InRelativeMovement, 10 | FVector2D InRelativeLook) 11 | { 12 | this->RelativeMovement = InRelativeMovement; 13 | this->RelativeLook = InRelativeLook; 14 | } 15 | -------------------------------------------------------------------------------- /Source/Multiplayer/Components/MultiplayerInputComponent.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "CoreMinimal.h" 4 | 5 | #include "Systems/Public/SystemsComponent.h" 6 | 7 | #include "MultiplayerInputComponent.generated.h" 8 | 9 | UCLASS(BlueprintType, Blueprintable, Meta = (BlueprintSpawnableComponent)) 10 | class MULTIPLAYER_API UMultiplayerInputComponent : public USystemsActorComponent 11 | { 12 | GENERATED_BODY() 13 | 14 | public: 15 | UMultiplayerInputComponent(); 16 | 17 | UFUNCTION(Server, Reliable) 18 | void ServerUpdate(FVector2D InRelativeMovement, FVector2D InRelativeLook); 19 | 20 | UPROPERTY(VisibleAnywhere) 21 | FVector2D RelativeMovement = FVector2D(0); 22 | 23 | UPROPERTY(VisibleAnywhere) 24 | FVector2D RelativeLook = FVector2D(0); 25 | }; 26 | -------------------------------------------------------------------------------- /Source/Multiplayer/Components/MultiplayerLocalControlComponent.cpp: -------------------------------------------------------------------------------- 1 | #include "Multiplayer/Components/MultiplayerLocalControlComponent.h" 2 | 3 | bool UMultiplayerLocalControlComponent::CanBeRegisteredToSystemsWorld() const 4 | { 5 | const auto* Pawn = Cast(GetOwner()); 6 | return IsValid(Pawn) && Pawn->IsLocallyControlled(); 7 | } 8 | -------------------------------------------------------------------------------- /Source/Multiplayer/Components/MultiplayerLocalControlComponent.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "CoreMinimal.h" 4 | 5 | #include "Systems/Public/SystemsComponent.h" 6 | 7 | #include "MultiplayerLocalControlComponent.generated.h" 8 | 9 | UCLASS(BlueprintType, Blueprintable, Meta = (BlueprintSpawnableComponent)) 10 | class MULTIPLAYER_API UMultiplayerLocalControlComponent : public USystemsActorComponent 11 | { 12 | GENERATED_BODY() 13 | 14 | private: 15 | virtual bool CanBeRegisteredToSystemsWorld() const override; 16 | }; 17 | -------------------------------------------------------------------------------- /Source/Multiplayer/Components/MultiplayerRocketComponent.cpp: -------------------------------------------------------------------------------- 1 | #include "Multiplayer/Components/MultiplayerRocketComponent.h" 2 | -------------------------------------------------------------------------------- /Source/Multiplayer/Components/MultiplayerRocketComponent.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "CoreMinimal.h" 4 | 5 | #include "Systems/Public/SystemsComponent.h" 6 | 7 | #include "MultiplayerRocketComponent.generated.h" 8 | 9 | UCLASS(BlueprintType, Blueprintable, Meta = (BlueprintSpawnableComponent)) 10 | class MULTIPLAYER_API UMultiplayerRocketComponent : public USystemsActorComponent 11 | { 12 | GENERATED_BODY() 13 | 14 | public: 15 | UPROPERTY(EditAnywhere) 16 | float LifetimeLeft = 10; 17 | }; 18 | -------------------------------------------------------------------------------- /Source/Multiplayer/Components/MultiplayerSpawnRocketComponent.cpp: -------------------------------------------------------------------------------- 1 | #include "Multiplayer/Components/MultiplayerSpawnRocketComponent.h" 2 | 3 | #include "Systems/Public/SystemsStatics.h" 4 | 5 | #include "Multiplayer/Constants.h" 6 | #include "Multiplayer/Resources/MultiplayerCommands.h" 7 | 8 | UMultiplayerSpawnRocketComponent::UMultiplayerSpawnRocketComponent() 9 | { 10 | SetNetAddressable(); 11 | SetIsReplicatedByDefault(true); 12 | } 13 | 14 | void UMultiplayerSpawnRocketComponent::ServerExecute_Implementation() 15 | { 16 | auto* Commands = USystemsStatics::GetResource(FName(), GetWorld()); 17 | if (IsValid(GetOwner()) && IsValid(Commands) && this->Cooldown <= 0) 18 | { 19 | Commands->RocketsToSpawnForActors.Enqueue(GetOwner()); 20 | this->Cooldown = Commands->RocketCooldown; 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /Source/Multiplayer/Components/MultiplayerSpawnRocketComponent.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "CoreMinimal.h" 4 | 5 | #include "Systems/Public/SystemsComponent.h" 6 | 7 | #include "MultiplayerSpawnRocketComponent.generated.h" 8 | 9 | UCLASS(BlueprintType, Blueprintable, Meta = (BlueprintSpawnableComponent)) 10 | class MULTIPLAYER_API UMultiplayerSpawnRocketComponent : public USystemsActorComponent 11 | { 12 | GENERATED_BODY() 13 | 14 | public: 15 | UMultiplayerSpawnRocketComponent(); 16 | 17 | UFUNCTION(Server, Reliable) 18 | void ServerExecute(); 19 | 20 | UPROPERTY() 21 | float Cooldown = 0; 22 | }; 23 | -------------------------------------------------------------------------------- /Source/Multiplayer/Constants.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "CoreMinimal.h" 4 | 5 | const FName LEVEL_NAME = FName(TEXT("MultiplayerGameMap")); 6 | 7 | const FName ACTION_BINDING = FName(TEXT("Action")); 8 | const FName CAMERA_RELATIVE_DIRECTION_HORIZONTAL_BINDING = 9 | FName(TEXT("CameraRelativeDirectionHorizontal")); 10 | const FName CAMERA_RELATIVE_DIRECTION_VERTICAL_BINDING = 11 | FName(TEXT("CameraRelativeDirectionVertical")); 12 | const FName CAMERA_RELATIVE_MOVEMENT_HORIZONTAL_BINDING = 13 | FName(TEXT("CameraRelativeMovementHorizontal")); 14 | const FName CAMERA_RELATIVE_MOVEMENT_VERTICAL_BINDING = 15 | FName(TEXT("CameraRelativeMovementVertical")); 16 | -------------------------------------------------------------------------------- /Source/Multiplayer/Multiplayer.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "CoreMinimal.h" 4 | 5 | #include "Modules/ModuleManager.h" 6 | 7 | class FMultiplayerModule : public IModuleInterface 8 | { 9 | public: 10 | virtual void StartupModule() override; 11 | 12 | virtual void ShutdownModule() override; 13 | }; 14 | -------------------------------------------------------------------------------- /Source/Multiplayer/MultiplayerGameMode.cpp: -------------------------------------------------------------------------------- 1 | #include "Multiplayer/MultiplayerGameMode.h" 2 | 3 | #include "GameFramework/PlayerStart.h" 4 | #include "Kismet/GameplayStatics.h" 5 | 6 | void AMultiplayerGameMode::InitGame(const FString& MapName, 7 | const FString& Options, 8 | FString& ErrorMessage) 9 | { 10 | Super::InitGame(MapName, Options, ErrorMessage); 11 | 12 | UGameplayStatics::GetAllActorsOfClass( 13 | GetWorld(), APlayerStart::StaticClass(), this->PlayersSpawnPoints); 14 | } 15 | 16 | AActor* AMultiplayerGameMode::ChoosePlayerStart_Implementation(AController* Player) 17 | { 18 | if (this->PlayersSpawnPoints.Num() > 0) 19 | { 20 | return this->PlayersSpawnPoints.Pop(false); 21 | } 22 | return nullptr; 23 | } 24 | -------------------------------------------------------------------------------- /Source/Multiplayer/MultiplayerGameMode.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "CoreMinimal.h" 4 | 5 | #include "GameFramework/GameModeBase.h" 6 | #include "Systems/Public/SystemsGameMode.h" 7 | 8 | #include "MultiplayerGameMode.generated.h" 9 | 10 | UCLASS() 11 | class MULTIPLAYER_API AMultiplayerGameMode : public ASystemsGameMode 12 | { 13 | GENERATED_BODY() 14 | 15 | private: 16 | virtual void InitGame(const FString& MapName, 17 | const FString& Options, 18 | FString& ErrorMessage) override; 19 | 20 | virtual AActor* ChoosePlayerStart_Implementation(AController* Player) override; 21 | 22 | UPROPERTY() 23 | TArray PlayersSpawnPoints = {}; 24 | }; 25 | -------------------------------------------------------------------------------- /Source/Multiplayer/MultiplayerGameState.cpp: -------------------------------------------------------------------------------- 1 | #include "Multiplayer/MultiplayerGameState.h" 2 | 3 | void AMultiplayerGameState::BeginPlay() 4 | { 5 | Super::BeginPlay(); 6 | 7 | auto* PlayerController = GetWorld()->GetFirstPlayerController(); 8 | if (IsValid(PlayerController)) 9 | { 10 | PlayerController->SetInputMode(FInputModeGameOnly()); 11 | PlayerController->bShowMouseCursor = false; 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /Source/Multiplayer/MultiplayerGameState.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "CoreMinimal.h" 4 | 5 | #include "GameFramework/GameStateBase.h" 6 | #include "Systems/Public/SystemsGameState.h" 7 | 8 | #include "MultiplayerGameState.generated.h" 9 | 10 | UCLASS() 11 | class MULTIPLAYER_API AMultiplayerGameState : public ASystemsGameState 12 | { 13 | GENERATED_BODY() 14 | 15 | private: 16 | virtual void BeginPlay() override; 17 | }; 18 | -------------------------------------------------------------------------------- /Source/Multiplayer/Resources/MultiPlayerInput.cpp: -------------------------------------------------------------------------------- 1 | #include "Multiplayer/Resources/MultiPlayerInput.h" 2 | -------------------------------------------------------------------------------- /Source/Multiplayer/Resources/MultiPlayerInput.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "CoreMinimal.h" 4 | 5 | #include "MultiPlayerInput.generated.h" 6 | 7 | UCLASS(BlueprintType) 8 | class MULTIPLAYER_API UMultiPlayerInput : public UObject 9 | { 10 | GENERATED_BODY() 11 | 12 | public: 13 | UPROPERTY(VisibleAnywhere) 14 | bool bAction = false; 15 | 16 | UPROPERTY(VisibleAnywhere) 17 | FVector2D RelativeMovement = FVector2D(0); 18 | 19 | UPROPERTY(VisibleAnywhere) 20 | FVector2D RelativeLook = FVector2D(0); 21 | }; 22 | -------------------------------------------------------------------------------- /Source/Multiplayer/Resources/MultiplayerCommands.cpp: -------------------------------------------------------------------------------- 1 | #include "Multiplayer/Resources/MultiplayerCommands.h" 2 | -------------------------------------------------------------------------------- /Source/Multiplayer/Resources/MultiplayerCommands.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "CoreMinimal.h" 4 | 5 | #include "Engine/DataAsset.h" 6 | 7 | #include "MultiplayerCommands.generated.h" 8 | 9 | UCLASS(BlueprintType) 10 | class MULTIPLAYER_API UMultiplayerCommands : public UDataAsset 11 | { 12 | GENERATED_BODY() 13 | 14 | public: 15 | UPROPERTY(EditAnywhere) 16 | UClass* RocketClass = nullptr; 17 | 18 | UPROPERTY(EditAnywhere) 19 | float RocketInitialSpeed = 2000; 20 | 21 | UPROPERTY(EditAnywhere) 22 | float RocketCooldown = 1; 23 | 24 | TQueue RocketsToSpawnForActors = {}; 25 | 26 | TQueue RequestedActorsToKill = {}; 27 | }; -------------------------------------------------------------------------------- /Source/Multiplayer/Systems/Persistent/MultiplayerApplyInputSystem.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "CoreMinimal.h" 4 | 5 | class USystemsWorld; 6 | 7 | UFUNCTION() 8 | void MultiplayerServerApplyInputSystem(USystemsWorld& Systems); 9 | 10 | UFUNCTION() 11 | void MultiplayerClientApplyInputSystem(USystemsWorld& Systems); 12 | -------------------------------------------------------------------------------- /Source/Multiplayer/Systems/Persistent/MultiplayerKillActorsSystem.cpp: -------------------------------------------------------------------------------- 1 | #include "Multiplayer/Systems/Persistent/MultiplayerKillActorsSystem.h" 2 | 3 | #include "Systems/Public/SystemsWorld.h" 4 | 5 | #include "Multiplayer/Resources/MultiplayerCommands.h" 6 | 7 | void MultiplayerKillActorsSystem(USystemsWorld& Systems) 8 | { 9 | auto* Commands = Systems.Resource(); 10 | if (IsValid(Commands) == false) 11 | { 12 | return; 13 | } 14 | 15 | AActor* Actor = nullptr; 16 | while (Commands->RequestedActorsToKill.Dequeue(Actor)) 17 | { 18 | if (IsValid(Actor)) 19 | { 20 | Actor->Destroy(); 21 | } 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /Source/Multiplayer/Systems/Persistent/MultiplayerKillActorsSystem.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "CoreMinimal.h" 4 | 5 | class USystemsWorld; 6 | 7 | UFUNCTION() 8 | void MultiplayerKillActorsSystem(USystemsWorld& Systems); 9 | -------------------------------------------------------------------------------- /Source/Multiplayer/Systems/Persistent/MultiplayerMovementSystem.cpp: -------------------------------------------------------------------------------- 1 | #include "Multiplayer/Systems/Persistent/MultiplayerMovementSystem.h" 2 | 3 | #include "Shared/Components/VelocityComponent.h" 4 | #include "Systems/Public/SystemsWorld.h" 5 | 6 | void MultiplayerMovementSystem(USystemsWorld& Systems) 7 | { 8 | const auto DeltaTime = Systems.GetWorld()->GetDeltaSeconds(); 9 | 10 | for (auto& QueryItem : Systems.Query()) 11 | { 12 | auto* Actor = QueryItem.Get<0>(); 13 | const auto Velocity = QueryItem.Get<1>()->Value; 14 | const auto Position = Actor->GetActorLocation(); 15 | 16 | Actor->SetActorLocation(Position + Velocity * DeltaTime); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /Source/Multiplayer/Systems/Persistent/MultiplayerMovementSystem.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "CoreMinimal.h" 4 | 5 | class USystemsWorld; 6 | 7 | UFUNCTION() 8 | void MultiplayerMovementSystem(USystemsWorld& Systems); 9 | -------------------------------------------------------------------------------- /Source/Multiplayer/Systems/Persistent/MultiplayerRocketsLifetimeSystem.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "CoreMinimal.h" 4 | 5 | class USystemsWorld; 6 | 7 | UFUNCTION() 8 | void MultiplayerRocketsLifetimeSystem(USystemsWorld& Systems); 9 | -------------------------------------------------------------------------------- /Source/Multiplayer/Systems/Persistent/MultiplayerSpawnRocketSystem.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "CoreMinimal.h" 4 | 5 | class USystemsWorld; 6 | 7 | UFUNCTION() 8 | void MultiplayerSpawnRocketSystem(USystemsWorld& Systems); 9 | 10 | UFUNCTION() 11 | void MultiplayerSpawnRocketCooldownSystem(USystemsWorld& Systems); 12 | 13 | UFUNCTION() 14 | void MultiplayerExecuteRocketSpawnsSystem(USystemsWorld& Systems); 15 | -------------------------------------------------------------------------------- /Source/Multiplayer/UI/WidgetMultiplayerGameInterface.cpp: -------------------------------------------------------------------------------- 1 | #include "Multiplayer/UI/WidgetMultiplayerGameInterface.h" 2 | 3 | #include "Components/TextBlock.h" 4 | 5 | void UWidgetMultiplayerGameInterface::NativeConstruct() 6 | { 7 | Super::NativeConstruct(); 8 | 9 | if (IsValid(this->MultiplayerModeText)) 10 | { 11 | this->MultiplayerModeText->SetText(GetWorld()->GetNetMode() < NM_Client 12 | ? FText::AsCultureInvariant("IS SERVER") 13 | : FText::AsCultureInvariant("IS CLIENT")); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /Source/Multiplayer/UI/WidgetMultiplayerGameInterface.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "CoreMinimal.h" 4 | 5 | #include "Blueprint/UserWidget.h" 6 | 7 | #include "WidgetMultiplayerGameInterface.generated.h" 8 | 9 | class UTextBlock; 10 | 11 | UCLASS() 12 | class MULTIPLAYER_API UWidgetMultiplayerGameInterface : public UUserWidget 13 | { 14 | GENERATED_BODY() 15 | 16 | private: 17 | virtual void NativeConstruct() override; 18 | 19 | UPROPERTY(Meta = (BindWidget)) 20 | UTextBlock* MultiplayerModeText = nullptr; 21 | }; 22 | -------------------------------------------------------------------------------- /Source/Shared/Components/FoodComponent.cpp: -------------------------------------------------------------------------------- 1 | #include "Shared/Components/FoodComponent.h" 2 | -------------------------------------------------------------------------------- /Source/Shared/Components/FoodComponent.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "CoreMinimal.h" 4 | 5 | #include "Systems/Public/SystemsComponent.h" 6 | 7 | #include "FoodComponent.generated.h" 8 | 9 | UCLASS(BlueprintType, Blueprintable, Meta = (BlueprintSpawnableComponent)) 10 | class SHARED_API UFoodComponent : public USystemsActorComponent 11 | { 12 | GENERATED_BODY() 13 | 14 | public: 15 | UPROPERTY(EditAnywhere) 16 | float Amount = 1; 17 | }; 18 | -------------------------------------------------------------------------------- /Source/Shared/Components/HungerComponent.cpp: -------------------------------------------------------------------------------- 1 | #include "Shared/Components/HungerComponent.h" 2 | -------------------------------------------------------------------------------- /Source/Shared/Components/HungerComponent.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "CoreMinimal.h" 4 | 5 | #include "Systems/Public/SystemsComponent.h" 6 | 7 | #include "HungerComponent.generated.h" 8 | 9 | UCLASS(BlueprintType, Blueprintable, Meta = (BlueprintSpawnableComponent)) 10 | class SHARED_API UHungerComponent : public USystemsActorComponent 11 | { 12 | GENERATED_BODY() 13 | 14 | public: 15 | UPROPERTY(EditAnywhere) 16 | float Value = 0; 17 | }; 18 | -------------------------------------------------------------------------------- /Source/Shared/Components/SpaceBoundsComponent.cpp: -------------------------------------------------------------------------------- 1 | #include "Shared/Components/SpaceBoundsComponent.h" 2 | 3 | #include "Components/BoxComponent.h" 4 | 5 | void USpaceBoundsComponent::BeginPlay() 6 | { 7 | Super::BeginPlay(); 8 | 9 | const auto* Box = GetOwner()->FindComponentByClass(); 10 | if (IsValid(Box)) 11 | { 12 | this->Bounds = Box->CalcBounds(GetOwner()->GetActorTransform()); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /Source/Shared/Components/SpaceBoundsComponent.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "CoreMinimal.h" 4 | 5 | #include "Systems/Public/SystemsComponent.h" 6 | 7 | #include "SpaceBoundsComponent.generated.h" 8 | 9 | UCLASS(BlueprintType, Blueprintable, Meta = (BlueprintSpawnableComponent)) 10 | class SHARED_API USpaceBoundsComponent : public USystemsActorComponent 11 | { 12 | GENERATED_BODY() 13 | 14 | public: 15 | TOptional Bounds = {}; 16 | 17 | private: 18 | virtual void BeginPlay() override; 19 | }; 20 | -------------------------------------------------------------------------------- /Source/Shared/Components/SpeedComponent.cpp: -------------------------------------------------------------------------------- 1 | #include "Shared/Components/SpeedComponent.h" 2 | -------------------------------------------------------------------------------- /Source/Shared/Components/SpeedComponent.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "CoreMinimal.h" 4 | 5 | #include "Systems/Public/SystemsComponent.h" 6 | 7 | #include "SpeedComponent.generated.h" 8 | 9 | UCLASS(BlueprintType, Blueprintable, Meta = (BlueprintSpawnableComponent)) 10 | class SHARED_API USpeedComponent : public USystemsActorComponent 11 | { 12 | GENERATED_BODY() 13 | 14 | public: 15 | UPROPERTY(EditAnywhere, BlueprintReadWrite) 16 | float Value = 100; 17 | }; 18 | -------------------------------------------------------------------------------- /Source/Shared/Components/VelocityComponent.cpp: -------------------------------------------------------------------------------- 1 | #include "Shared/Components/VelocityComponent.h" 2 | 3 | #include "Net/UnrealNetwork.h" 4 | 5 | UVelocityComponent::UVelocityComponent() 6 | { 7 | SetNetAddressable(); 8 | SetIsReplicatedByDefault(true); 9 | } 10 | 11 | void UVelocityComponent::Randomize(float MinVelocity, float MaxVelocity) 12 | { 13 | const auto Size = FMath::RandRange(MinVelocity, MaxVelocity); 14 | this->Value = FMath::VRand().GetSafeNormal() * Size; 15 | } 16 | 17 | void UVelocityComponent::GetLifetimeReplicatedProps( 18 | TArray& OutLifetimeProps) const 19 | { 20 | Super::GetLifetimeReplicatedProps(OutLifetimeProps); 21 | 22 | DOREPLIFETIME(UVelocityComponent, Value); 23 | } 24 | -------------------------------------------------------------------------------- /Source/Shared/Components/VelocityComponent.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "CoreMinimal.h" 4 | 5 | #include "Systems/Public/SystemsComponent.h" 6 | 7 | #include "VelocityComponent.generated.h" 8 | 9 | UCLASS(BlueprintType, Blueprintable, Meta = (BlueprintSpawnableComponent)) 10 | class SHARED_API UVelocityComponent : public USystemsActorComponent 11 | { 12 | GENERATED_BODY() 13 | 14 | public: 15 | UVelocityComponent(); 16 | 17 | UFUNCTION() 18 | void Randomize(float MinVelocity, float MaxVelocity); 19 | 20 | UPROPERTY(VisibleAnywhere, Replicated) 21 | FVector Value = FVector(0); 22 | }; 23 | -------------------------------------------------------------------------------- /Source/Shared/Shared.Build.cs: -------------------------------------------------------------------------------- 1 | using UnrealBuildTool; 2 | 3 | public class Shared : ModuleRules 4 | { 5 | public Shared(ReadOnlyTargetRules Target) : base(Target) 6 | { 7 | PCHUsage = PCHUsageMode.UseExplicitOrSharedPCHs; 8 | bUseUnity = false; 9 | IncludeOrderVersion = EngineIncludeOrderVersion.Latest; 10 | 11 | PublicDependencyModuleNames.AddRange(new string[] { 12 | "Core", 13 | "CoreUObject", 14 | "Engine", 15 | "InputCore", 16 | "Slate", 17 | "SlateCore", 18 | "UMG", 19 | "Paper2D", 20 | "Systems", 21 | }); 22 | 23 | // PrivateDependencyModuleNames.AddRange(new string[] {}); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /Source/Shared/Shared.cpp: -------------------------------------------------------------------------------- 1 | #include "Shared.h" 2 | 3 | #include "TestIterators.h" 4 | 5 | #define LOCTEXT_NAMESPACE "FSharedModule" 6 | #define SYSTEMS_NAMESPACE "Shared" 7 | 8 | void FSharedModule::StartupModule() 9 | { 10 | TestIterators(); 11 | } 12 | 13 | #undef LOCTEXT_NAMESPACE 14 | #undef SYSTEMS_NAMESPACE 15 | 16 | IMPLEMENT_PRIMARY_GAME_MODULE(FSharedModule, Shared, "Systems_Workspace"); 17 | -------------------------------------------------------------------------------- /Source/Shared/Shared.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "CoreMinimal.h" 4 | 5 | #include "Modules/ModuleManager.h" 6 | 7 | class FSharedModule : public IModuleInterface 8 | { 9 | public: 10 | virtual void StartupModule() override; 11 | }; 12 | -------------------------------------------------------------------------------- /Source/Shared/TestIterators.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "CoreMinimal.h" 4 | 5 | #include "Systems/Public/Iterator.h" 6 | #include "Systems/Public/Iterator/SizeHint.h" 7 | 8 | template 9 | struct TIterOddAdapter 10 | { 11 | public: 12 | template 13 | TOptional Next(I& Iter) 14 | { 15 | Iter.Next(); 16 | return Iter.Next(); 17 | } 18 | 19 | template 20 | IterSizeHint SizeHint(const I& Iter) const 21 | { 22 | return Iter.SizeHint(); 23 | } 24 | }; 25 | 26 | void TestIterators(); 27 | -------------------------------------------------------------------------------- /Source/Shared/Utils.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "CoreMinimal.h" 4 | 5 | struct FSlateBrush; 6 | class UPaperSprite; 7 | 8 | bool SHARED_API IsInVisionSpace(FVector Position, 9 | FVector Direction, 10 | FVector ObservedPosition, 11 | float PerceptionRange, 12 | float VisibilityConeAngleDegrees); 13 | 14 | FSlateBrush SHARED_API MakeBrushFromSprite(UPaperSprite* Sprite); 15 | -------------------------------------------------------------------------------- /Source/Systems_Workspace.Target.cs: -------------------------------------------------------------------------------- 1 | using UnrealBuildTool; 2 | using System.Collections.Generic; 3 | 4 | public class Systems_WorkspaceTarget : TargetRules 5 | { 6 | public Systems_WorkspaceTarget(TargetInfo Target) : base(Target) 7 | { 8 | Type = TargetType.Game; 9 | DefaultBuildSettings = BuildSettingsVersion.V2; 10 | IncludeOrderVersion = EngineIncludeOrderVersion.Latest; 11 | 12 | ExtraModuleNames.Add("Boids"); 13 | ExtraModuleNames.Add("Life"); 14 | ExtraModuleNames.Add("Multiplayer"); 15 | ExtraModuleNames.Add("Tutorial"); 16 | ExtraModuleNames.Add("Shared"); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /Source/Systems_WorkspaceEditor.Target.cs: -------------------------------------------------------------------------------- 1 | using UnrealBuildTool; 2 | using System.Collections.Generic; 3 | 4 | public class Systems_WorkspaceEditorTarget : TargetRules 5 | { 6 | public Systems_WorkspaceEditorTarget(TargetInfo Target) : base(Target) 7 | { 8 | Type = TargetType.Editor; 9 | DefaultBuildSettings = BuildSettingsVersion.V2; 10 | IncludeOrderVersion = EngineIncludeOrderVersion.Latest; 11 | 12 | ExtraModuleNames.Add("Boids"); 13 | ExtraModuleNames.Add("Life"); 14 | ExtraModuleNames.Add("Multiplayer"); 15 | ExtraModuleNames.Add("Tutorial"); 16 | ExtraModuleNames.Add("Shared"); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /Source/Tutorial/Components/TutorialMovementComponent.cpp: -------------------------------------------------------------------------------- 1 | #include "Tutorial/Components/TutorialMovementComponent.h" 2 | -------------------------------------------------------------------------------- /Source/Tutorial/Components/TutorialMovementComponent.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "CoreMinimal.h" 4 | 5 | #include "Systems/Public/SystemsComponent.h" 6 | 7 | #include "TutorialMovementComponent.generated.h" 8 | 9 | UCLASS(BlueprintType, Blueprintable, Meta = (BlueprintSpawnableComponent)) 10 | class TUTORIAL_API UTutorialMovementComponent : public USystemsActorComponent 11 | { 12 | GENERATED_BODY() 13 | 14 | public: 15 | UPROPERTY(EditAnywhere, BlueprintReadWrite) 16 | FVector2D Value = FVector2D(0); 17 | }; 18 | -------------------------------------------------------------------------------- /Source/Tutorial/Components/TutorialNpcComponent.cpp: -------------------------------------------------------------------------------- 1 | #include "Tutorial/Components/TutorialNpcComponent.h" 2 | -------------------------------------------------------------------------------- /Source/Tutorial/Components/TutorialNpcComponent.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "CoreMinimal.h" 4 | 5 | #include "Systems/Public/SystemsComponent.h" 6 | 7 | #include "TutorialNpcComponent.generated.h" 8 | 9 | UCLASS(BlueprintType, Blueprintable, Meta = (BlueprintSpawnableComponent)) 10 | class TUTORIAL_API UTutorialNpcComponent : public USystemsActorComponent 11 | { 12 | GENERATED_BODY() 13 | }; 14 | -------------------------------------------------------------------------------- /Source/Tutorial/Components/TutorialSelectedComponent.cpp: -------------------------------------------------------------------------------- 1 | #include "Tutorial/Components/TutorialSelectedComponent.h" 2 | -------------------------------------------------------------------------------- /Source/Tutorial/Components/TutorialSelectedComponent.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "CoreMinimal.h" 4 | 5 | #include "Systems/Public/SystemsComponent.h" 6 | 7 | #include "TutorialSelectedComponent.generated.h" 8 | 9 | UCLASS(BlueprintType, Blueprintable, Meta = (BlueprintSpawnableComponent)) 10 | class TUTORIAL_API UTutorialSelectedComponent : public USystemsActorComponent 11 | { 12 | GENERATED_BODY() 13 | }; 14 | -------------------------------------------------------------------------------- /Source/Tutorial/Components/TutorialTargetComponent.cpp: -------------------------------------------------------------------------------- 1 | #include "Tutorial/Components/TutorialTargetComponent.h" 2 | 3 | void UTutorialTargetComponent::BeginPlay() 4 | { 5 | Super::BeginPlay(); 6 | 7 | this->Position = GetOwner()->GetActorLocation(); 8 | } 9 | -------------------------------------------------------------------------------- /Source/Tutorial/Components/TutorialTargetComponent.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "CoreMinimal.h" 4 | 5 | #include "Systems/Public/SystemsComponent.h" 6 | 7 | #include "TutorialTargetComponent.generated.h" 8 | 9 | UCLASS(BlueprintType, Blueprintable, Meta = (BlueprintSpawnableComponent)) 10 | class TUTORIAL_API UTutorialTargetComponent : public USystemsActorComponent 11 | { 12 | GENERATED_BODY() 13 | 14 | public: 15 | UPROPERTY(EditAnywhere) 16 | FVector Position = FVector(0); 17 | 18 | private: 19 | virtual void BeginPlay() override; 20 | }; 21 | -------------------------------------------------------------------------------- /Source/Tutorial/Resources/TutorialPath.cpp: -------------------------------------------------------------------------------- 1 | #include "Tutorial/Resources/TutorialPath.h" -------------------------------------------------------------------------------- /Source/Tutorial/Resources/TutorialPath.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "CoreMinimal.h" 4 | 5 | #include "TutorialPath.generated.h" 6 | 7 | UCLASS(BlueprintType) 8 | class TUTORIAL_API UTutorialPath : public UObject 9 | { 10 | GENERATED_BODY() 11 | 12 | public: 13 | UPROPERTY() 14 | TArray> Path = {}; 15 | }; -------------------------------------------------------------------------------- /Source/Tutorial/Systems/OneShot/TutorialApplyPathToHighlightSystem.cpp: -------------------------------------------------------------------------------- 1 | #include "Tutorial/Systems/OneShot/TutorialApplyPathToHighlightSystem.h" 2 | 3 | #include "Systems/Public/SystemsWorld.h" 4 | 5 | #include "Tutorial/Components/TutorialHighlightComponent.h" 6 | #include "Tutorial/Resources/TutorialPath.h" 7 | 8 | void TutorialApplyPathToHighlightSystem(USystemsWorld& Systems) 9 | { 10 | const auto* Path = Systems.Resource(); 11 | if (IsValid(Path) == false) 12 | { 13 | return; 14 | } 15 | 16 | for (auto& QueryItem : Systems.Query()) 17 | { 18 | auto* Actor = QueryItem.Get<0>(); 19 | auto* Highlight = QueryItem.Get<1>(); 20 | const auto bIsSelected = Path->Path.Contains(Actor); 21 | 22 | Highlight->ApplyHighlighted(bIsSelected); 23 | } 24 | } -------------------------------------------------------------------------------- /Source/Tutorial/Systems/OneShot/TutorialApplyPathToHighlightSystem.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "CoreMinimal.h" 4 | 5 | class USystemsWorld; 6 | 7 | void TutorialApplyPathToHighlightSystem(USystemsWorld& Systems); -------------------------------------------------------------------------------- /Source/Tutorial/Systems/OneShot/TutorialApplySelectionToHighlightSystem.cpp: -------------------------------------------------------------------------------- 1 | #include "Tutorial/Systems/OneShot/TutorialApplySelectionToHighlightSystem.h" 2 | 3 | #include "Systems/Public/SystemsWorld.h" 4 | 5 | #include "Tutorial/Components/TutorialHighlightComponent.h" 6 | #include "Tutorial/Components/TutorialSelectedComponent.h" 7 | 8 | void TutorialApplySelectionToHighlightSystem(USystemsWorld& Systems) 9 | { 10 | for (auto& QueryItem : Systems.Query()) 11 | { 12 | auto* Actor = QueryItem.Get<0>(); 13 | auto* Highlight = QueryItem.Get<1>(); 14 | const auto bIsSelected = IsValid(Systems.Component(Actor)); 15 | 16 | Highlight->ApplyHighlighted(bIsSelected); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /Source/Tutorial/Systems/OneShot/TutorialApplySelectionToHighlightSystem.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "CoreMinimal.h" 4 | 5 | class USystemsWorld; 6 | 7 | void TutorialApplySelectionToHighlightSystem(USystemsWorld& Systems); 8 | -------------------------------------------------------------------------------- /Source/Tutorial/Systems/Persistent/TutorialFindPathSystem.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "CoreMinimal.h" 4 | 5 | class USystemsWorld; 6 | 7 | UFUNCTION() 8 | void TutorialFindPathSystem(USystemsWorld& Systems); -------------------------------------------------------------------------------- /Source/Tutorial/Systems/Persistent/TutorialGoToSystem.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "CoreMinimal.h" 4 | 5 | class USystemsWorld; 6 | 7 | UFUNCTION() 8 | void TutorialGoToSystem(USystemsWorld& Systems); 9 | -------------------------------------------------------------------------------- /Source/Tutorial/Systems/Persistent/TutorialImpactSystem.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "CoreMinimal.h" 4 | 5 | #include "Systems/Public/System.h" 6 | 7 | #include "TutorialImpactSystem.generated.h" 8 | 9 | class USystemsWorld; 10 | 11 | UCLASS(BlueprintType) 12 | class TUTORIAL_API UTutorialImpactSystem : public USystem 13 | { 14 | GENERATED_BODY() 15 | 16 | public: 17 | virtual void Run(USystemsWorld& Systems) override; 18 | 19 | private: 20 | static void ClearImpact(USystemsWorld& Systems); 21 | 22 | void ApplyImpact(double Scale, 23 | const APlayerController* PlayerController, 24 | USystemsWorld& Systems) const; 25 | 26 | UPROPERTY(EditAnywhere) 27 | FName ImpactId = FName(TEXT("Impact")); 28 | 29 | UPROPERTY(EditAnywhere) 30 | double ImpactValue = 1000.0; 31 | }; -------------------------------------------------------------------------------- /Source/Tutorial/Systems/Persistent/TutorialMoveTowardsTargetSystem.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "CoreMinimal.h" 4 | 5 | class USystemsWorld; 6 | 7 | UFUNCTION() 8 | void TutorialMoveTowardsTargetSystem(USystemsWorld& Systems); 9 | -------------------------------------------------------------------------------- /Source/Tutorial/Systems/Persistent/TutorialMovementSystem.cpp: -------------------------------------------------------------------------------- 1 | #include "Tutorial/Systems/Persistent/TutorialMovementSystem.h" 2 | 3 | #include "Systems/Public/SystemsWorld.h" 4 | 5 | #include "Tutorial/Components/TutorialMovementComponent.h" 6 | 7 | void TutorialMovementSystem(USystemsWorld& Systems) 8 | { 9 | const auto DeltaTime = Systems.GetWorld()->GetDeltaSeconds(); 10 | 11 | for (auto& QueryItem : Systems.Query()) 12 | { 13 | auto* Actor = QueryItem.Get<0>(); 14 | auto* Movement = QueryItem.Get<1>(); 15 | const auto Position = Actor->GetActorLocation(); 16 | const auto Velocity = FVector(Movement->Value, 0) * DeltaTime; 17 | 18 | Actor->SetActorLocation(Position + Velocity); 19 | 20 | Movement->Value = FVector2D(0); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /Source/Tutorial/Systems/Persistent/TutorialMovementSystem.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "CoreMinimal.h" 4 | 5 | class USystemsWorld; 6 | 7 | UFUNCTION() 8 | void TutorialMovementSystem(USystemsWorld& Systems); 9 | -------------------------------------------------------------------------------- /Source/Tutorial/Systems/Persistent/TutorialSelectActorsSystem.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "CoreMinimal.h" 4 | 5 | class USystemsWorld; 6 | 7 | UFUNCTION() 8 | void TutorialSelectActorsSystem(USystemsWorld& Systems); 9 | -------------------------------------------------------------------------------- /Source/Tutorial/Tutorial.Build.cs: -------------------------------------------------------------------------------- 1 | using UnrealBuildTool; 2 | 3 | public class Tutorial : ModuleRules 4 | { 5 | public Tutorial(ReadOnlyTargetRules Target) : base(Target) 6 | { 7 | PCHUsage = PCHUsageMode.UseExplicitOrSharedPCHs; 8 | bUseUnity = false; 9 | IncludeOrderVersion = EngineIncludeOrderVersion.Latest; 10 | 11 | PublicDependencyModuleNames.AddRange(new string[] 12 | { 13 | "Core", 14 | "CoreUObject", 15 | "Engine", 16 | "InputCore", 17 | "Slate", 18 | "SlateCore", 19 | "UMG", 20 | "Systems", 21 | "SystemsSpatialQuery", 22 | "Shared", 23 | }); 24 | 25 | // PrivateDependencyModuleNames.AddRange(new string[] {}); 26 | } 27 | } -------------------------------------------------------------------------------- /Source/Tutorial/Tutorial.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "CoreMinimal.h" 4 | 5 | #include "Modules/ModuleManager.h" 6 | 7 | class FTutorialModule : public IModuleInterface 8 | { 9 | public: 10 | virtual void StartupModule() override; 11 | 12 | virtual void ShutdownModule() override; 13 | }; 14 | -------------------------------------------------------------------------------- /Source/Tutorial/TutorialGameMode.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include "CoreMinimal.h" 4 | 5 | #include "GameFramework/GameModeBase.h" 6 | #include "Systems/Public/SystemsGameMode.h" 7 | 8 | #include "TutorialGameMode.generated.h" 9 | 10 | UCLASS() 11 | class TUTORIAL_API ATutorialGameMode : public ASystemsGameMode 12 | { 13 | GENERATED_BODY() 14 | 15 | private: 16 | virtual void BeginPlay() override; 17 | }; 18 | --------------------------------------------------------------------------------