Project Structure¶
Understanding the Evoker Engine project structure will help you navigate the codebase and organize your own projects.
Repository Structure¶
Evoker-Engine/
├── EvokerEngine.Core/ # Core engine library
├── EvokerEngine.Demo/ # Example application
├── EvokerEngine.Tests/ # Unit tests
├── docs/ # Documentation source
├── .github/ # GitHub workflows
├── README.md
├── mkdocs.yml # Documentation configuration
└── EvokerEngine.sln # Solution file
EvokerEngine.Core Structure¶
The core library is organized into namespaces:
EvokerEngine.Core/
├── Core/ # Application framework
│ ├── Application.cs # Main application class
│ ├── Layer.cs # Layer base class
│ ├── LayerStack.cs # Layer management
│ ├── Logger.cs # Logging system
│ ├── Time.cs # Time management
│ └── Platform.cs # Platform utilities
├── Graphics/ # Rendering system
│ ├── VulkanContext.cs # Vulkan initialization
│ └── VulkanSwapchain.cs # Swapchain management
├── Input/ # Input handling
│ ├── Input.cs # Keyboard/mouse input
│ └── GamepadInput.cs # Gamepad support
├── Events/ # Event system
│ └── Event.cs # Event definitions
├── ECS/ # Entity Component System
│ ├── Entity.cs # Entity definition
│ ├── Component.cs # Component base
│ ├── Components.cs # Built-in components
│ └── ECSRegistry.cs # ECS management
├── Scene/ # Scene management
│ ├── Scene.cs # Scene definition
│ └── Camera.cs # Camera system
├── Resources/ # Resource management
│ └── ResourceManager.cs # Resource loading
├── Inventory/ # Inventory system
│ ├── Item.cs # Item definitions
│ ├── ItemStack.cs # Stackable items
│ └── Inventory.cs # Inventory management
├── Blocks/ # Block system
│ ├── Block.cs # Block base class
│ └── BlockRegistry.cs # Block registration
├── Crafting/ # Crafting system
│ ├── Recipe.cs # Recipe types
│ └── RecipeRegistry.cs # Recipe management
├── Modding/ # Modding support
│ ├── Mod.cs # Mod base class
│ ├── ModLoader.cs # Mod loading
│ └── ModAPI.cs # Helper API
└── World/ # World/dimension system
├── Dimension.cs # Dimension class
└── DimensionRegistry.cs # Dimension management
Your Game Project Structure¶
Recommended structure for your game:
MyGame/
├── Content/ # Game assets
│ ├── Textures/
│ ├── Models/
│ ├── Shaders/
│ └── Audio/
├── Layers/ # Game layers
│ ├── GameLayer.cs
│ ├── UILayer.cs
│ └── MenuLayer.cs
├── Entities/ # Game entities
│ ├── Player.cs
│ ├── Enemy.cs
│ └── Items/
├── Systems/ # Game systems
│ ├── CombatSystem.cs
│ └── QuestSystem.cs
├── Mods/ # Mod DLLs
│ └── ExampleMod.dll
└── Program.cs # Entry point
Key Files¶
Application Entry Point¶
Program.cs - Your game's main entry point:
using EvokerEngine.Core;
var app = new Application("My Game", 1280, 720);
app.PushLayer(new GameLayer());
app.Run();
Layer Files¶
Organize game logic into layers:
// Layers/GameLayer.cs
public class GameLayer : Layer
{
public override void OnAttach() { }
public override void OnUpdate(float dt) { }
public override void OnRender() { }
}
Project File¶
.csproj - Project configuration:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net9.0</TargetFramework>
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\EvokerEngine.Core\EvokerEngine.Core.csproj" />
</ItemGroup>
</Project>