Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save guerro323/95ba0d4e18d71a5fbb4005b137661ca8 to your computer and use it in GitHub Desktop.
Save guerro323/95ba0d4e18d71a5fbb4005b137661ca8 to your computer and use it in GitHub Desktop.
namespace PataponGameHost.Systems
{
public struct Character
{
}
[RestrictToApplication(typeof(GameSimulationThreadingHost))]
public class MoveCharacterSystem : AppSystem
{
private GameInputThreadingClient client;
private EntitySet characterSet;
private System system;
protected override void OnInit()
{
base.OnInit();
client = new GameInputThreadingClient();
characterSet = World.Mgr.GetEntities()
.With<Character>()
.With<Vector3>()
.AsSet();
system = new System(characterSet);
for (var i = 0; i != 1_000_000; i++)
{
var ch = World.Mgr.CreateEntity();
ch.Set(new Character());
ch.Set(new Vector3());
}
}
protected override void OnUpdate()
{
base.OnUpdate();
var moveVector = new Vector2();
using (client.SynchronizeThread())
{
var openTkBackend = client.Listener.worldCollection.GetOrCreate<OpenTkInputBackend>();
if (openTkBackend.IsKeyDown(Key.Left))
moveVector.X -= 1;
if (openTkBackend.IsKeyDown(Key.Right))
moveVector.X += 1;
if (openTkBackend.IsKeyDown(Key.Down))
moveVector.Y -= 1;
if (openTkBackend.IsKeyDown(Key.Up))
moveVector.Y += 1;
}
var dt = World.Mgr.Get<WorldTime>()[0].Delta;
moveVector = Vector2.Normalize(moveVector) * dt;
if (float.IsNaN(moveVector.X))
moveVector = default;
system.Update(new Vector3(moveVector, 0));
}
private class System : AEntitySystem<Vector3>
{
public System(EntitySet set) : base(set, new DefaultParallelRunner(Environment.ProcessorCount / 4))
{
}
protected override void Update(Vector3 state, in Entity entity)
{
entity.Get<Vector3>() += state;
}
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment