Added basic
This commit is contained in:
parent
24ff95287d
commit
265ad04473
11 changed files with 165 additions and 0 deletions
6
BeefProj.toml
Normal file
6
BeefProj.toml
Normal file
|
@ -0,0 +1,6 @@
|
|||
FileVersion = 1
|
||||
Dependencies = {corlib = "*", raylib-beef = "*", Theater-ECS = "*"}
|
||||
|
||||
[Project]
|
||||
Name = "Theater-ECS-Example"
|
||||
StartupObject = "Theater_ECS_Example.Program"
|
5
BeefSpace.toml
Normal file
5
BeefSpace.toml
Normal file
|
@ -0,0 +1,5 @@
|
|||
FileVersion = 1
|
||||
Projects = {Theater-ECS-Example = {Path = "."}, raylib-beef = {Path = "../../Program Files/BeefLang/BeefLibs/raylib-beef/raylib-beef"}, Theater-ECS = {Path = "../Theater-ECS"}}
|
||||
|
||||
[Workspace]
|
||||
StartupProject = "Theater-ECS-Example"
|
1
BeefSpace_Lock.toml
Normal file
1
BeefSpace_Lock.toml
Normal file
|
@ -0,0 +1 @@
|
|||
FileVersion = 1
|
BIN
img.png
Normal file
BIN
img.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 927 B |
BIN
img.png~
Normal file
BIN
img.png~
Normal file
Binary file not shown.
After Width: | Height: | Size: 753 B |
28
src/MovementSystem.bf
Normal file
28
src/MovementSystem.bf
Normal file
|
@ -0,0 +1,28 @@
|
|||
namespace Theater_ECS_Example;
|
||||
|
||||
using Theater_ECS;
|
||||
|
||||
class MovementSystem : System
|
||||
{
|
||||
public override void RegisterSystem(ECS ecs)
|
||||
{
|
||||
RegisterComponent<Position>(ecs);
|
||||
RegisterComponent<Velocity>(ecs);
|
||||
}
|
||||
|
||||
public override void Run(void* pos, void* vel)
|
||||
{
|
||||
var mPos = ((Position*)pos);
|
||||
|
||||
mPos.Update(
|
||||
((Velocity*)vel).x * RaylibBeef.Raylib.GetFrameTime(),
|
||||
((Velocity*)vel).y * RaylibBeef.Raylib.GetFrameTime()
|
||||
);
|
||||
|
||||
if(mPos.x > 1280 || mPos.x < 0)
|
||||
((Velocity*)vel).x *= -1;
|
||||
|
||||
if(mPos.y > 720 || mPos.y < 0)
|
||||
((Velocity*)vel).y *= -1;
|
||||
}
|
||||
}
|
15
src/Position.bf
Normal file
15
src/Position.bf
Normal file
|
@ -0,0 +1,15 @@
|
|||
namespace Theater_ECS_Example;
|
||||
|
||||
using System;
|
||||
|
||||
struct Position
|
||||
{
|
||||
public float x = (.)gRand.NextI32() % 1280;
|
||||
public float y = (.)gRand.NextI32() % 720;
|
||||
|
||||
public void Update(float a, float b) mut
|
||||
{
|
||||
x += a;
|
||||
y += b;
|
||||
}
|
||||
}
|
62
src/Program.bf
Normal file
62
src/Program.bf
Normal file
|
@ -0,0 +1,62 @@
|
|||
namespace Theater_ECS_Example;
|
||||
|
||||
using System;
|
||||
|
||||
using RaylibBeef;
|
||||
|
||||
using Theater_ECS;
|
||||
|
||||
class Program
|
||||
{
|
||||
public static void Main()
|
||||
{
|
||||
Raylib.InitWindow(1280, 720, "Theater-ECS-Example");
|
||||
|
||||
|
||||
ECS ecs = new .();
|
||||
defer delete ecs;
|
||||
|
||||
RendererSystem rendererSystem = new .();
|
||||
defer delete rendererSystem;
|
||||
rendererSystem.RegisterSystem(ecs);
|
||||
|
||||
MovementSystem movementSystem = new .();
|
||||
defer delete movementSystem;
|
||||
movementSystem.RegisterSystem(ecs);
|
||||
|
||||
uint64 entityCounter = 0;
|
||||
|
||||
for(int32 i < 50000)
|
||||
{
|
||||
entityCounter++;
|
||||
var entity = ecs.Entity_Create();
|
||||
ecs.[Friend]_compRegistry.Components[rendererSystem.[Friend]_Components[0]].Add(entity, &Position());
|
||||
ecs.[Friend]_compRegistry.Components[rendererSystem.[Friend]_Components[1]].Add(entity, &Sprite());
|
||||
ecs.[Friend]_compRegistry.Components[movementSystem.[Friend]_Components[1]].Add(entity, &Velocity());
|
||||
}
|
||||
|
||||
|
||||
|
||||
while(!Raylib.WindowShouldClose())
|
||||
{
|
||||
movementSystem.RunSystem(ecs);
|
||||
|
||||
if(Raylib.IsMouseButtonDown((.)MouseButton.MOUSE_BUTTON_LEFT))
|
||||
{
|
||||
entityCounter++;
|
||||
var entity = ecs.Entity_Create();
|
||||
ecs.[Friend]_compRegistry.Components[rendererSystem.[Friend]_Components[0]].Add(entity, &Position());
|
||||
ecs.[Friend]_compRegistry.Components[rendererSystem.[Friend]_Components[1]].Add(entity, &Sprite());
|
||||
ecs.[Friend]_compRegistry.Components[movementSystem.[Friend]_Components[1]].Add(entity, &Velocity());
|
||||
}
|
||||
|
||||
Raylib.BeginDrawing();
|
||||
Raylib.ClearBackground(Raylib.RAYWHITE);
|
||||
|
||||
rendererSystem.RunSystem(ecs);
|
||||
Raylib.DrawFPS(0,0);
|
||||
Raylib.DrawText(entityCounter.ToString(.. scope .()), 0, 20, 20, Raylib.BLACK);
|
||||
Raylib.EndDrawing();
|
||||
}
|
||||
}
|
||||
}
|
20
src/RendererSystem.bf
Normal file
20
src/RendererSystem.bf
Normal file
|
@ -0,0 +1,20 @@
|
|||
namespace Theater_ECS_Example;
|
||||
|
||||
using Theater_ECS;
|
||||
|
||||
using RaylibBeef;
|
||||
|
||||
class RendererSystem : System
|
||||
{
|
||||
public override void RegisterSystem(ECS ecs)
|
||||
{
|
||||
RegisterComponent<Position>(ecs);
|
||||
RegisterComponent<Sprite>(ecs);
|
||||
}
|
||||
|
||||
public override void Run(void* pos, void* sprite)
|
||||
{
|
||||
var toDraw = (Position*)pos;
|
||||
//Raylib.DrawTexture(((Sprite*)sprite).sprite, (.)toDraw.x, (.)toDraw.y, Raylib.WHITE);
|
||||
}
|
||||
}
|
19
src/Sprite.bf
Normal file
19
src/Sprite.bf
Normal file
|
@ -0,0 +1,19 @@
|
|||
namespace Theater_ECS_Example;
|
||||
|
||||
using System;
|
||||
|
||||
using RaylibBeef;
|
||||
|
||||
struct Sprite
|
||||
{
|
||||
private static Texture2D? _texture = null;
|
||||
|
||||
public Texture2D sprite;
|
||||
|
||||
public this()
|
||||
{
|
||||
if(_texture == null)
|
||||
_texture = Raylib.LoadTexture("img.png");
|
||||
sprite = (.)_texture;
|
||||
}
|
||||
}
|
9
src/Velocity.bf
Normal file
9
src/Velocity.bf
Normal file
|
@ -0,0 +1,9 @@
|
|||
namespace Theater_ECS_Example;
|
||||
|
||||
using System;
|
||||
|
||||
struct Velocity
|
||||
{
|
||||
public float x = (.)gRand.NextI32() % 30;
|
||||
public float y = (.)gRand.NextI32() % 30;
|
||||
}
|
Loading…
Add table
Reference in a new issue