summaryrefslogtreecommitdiff
path: root/source/game/ecs/GameWorld.cs
blob: 9ee516ec222184d1928ada1ee285c63e8e661c3d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
using System;
using System.Collections.Generic;
using Celesteia.Game.Components.Entity;
using Celesteia.Game.Planets;
using Celesteia.Game.Systems;
using Microsoft.Xna.Framework;
using MonoGame.Extended.Entities;
using MonoGame.Extended.Entities.Systems;

namespace Celesteia.Game.ECS {
    public class GameWorld : IDisposable {
        public ChunkMap ChunkMap { get; private set; }
        public GameWorld(ChunkMap map) => ChunkMap = map;

        public void Dispose() {
            _w.Dispose();
            ChunkMap = null;
        }

        private World _w;
        private WorldBuilder _builder;
        
        public WorldBuilder BeginBuilder() => _builder = new WorldBuilder();

        public WorldBuilder AddSystem(ISystem system) => _builder.AddSystem(system);

        public void EndBuilder() => _w = _builder.Build();

        public Entity CreateEntity() {
            Entity e = _w.CreateEntity();
            e.Attach(new GameWorldEntity(this, e.Id));
            
            return e;
        }
        
        public void DestroyEntity(int id) => _w.DestroyEntity(id);

        public void Update(GameTime gt) => _w.Update(gt);
        public void Draw(GameTime gt) => _w.Draw(gt);
    }
}