Code Monkey home page Code Monkey logo

bang-mini's Introduction

Murder logo

A real ECS framework!

License

Check out original author repository bang for more details.

How to use it?

CLASS: MyLuaComponent( IComponent )
    :MODEL {
		Field 'boolField' :boolean();
		Field 'intField' :int();
		Field 'floatField' :float();
		Field 'numberField' :number();
		Field 'stringField' :string();
		Field 'assetField' :asset();
		Field 'enumField' :enum( "SomethingEnum" );
		Field 'arrayField' :array( "number" );
		Field 'tableField' :table( "string", "number" );
	}

function MyLuaComponent:__init()
	self.intField = 0
end

Bang.registerComponent( MyLuaComponent )

CLASS: MyUpdateSystem( IStartupSystem, IUpdateSystem, IReactiveSystem )
	:META {
		watcher = WatchAttr( "MyLuaComponent" ),
		filters = {
			FilterAttr( {
				filter = ContextAccessorFilter.allOf,
				kind = ContextAccessorKind.readwrite,
				types = {
					MyLuaComponent
				}
			} )
		}
	}

function MyUpdateSystem:update( context )
	for entityId, e in pairs( context:getEntities() ) do
		print( '[MyUpdateSystem] update entity:', entityId )
		local var = e:getMyLua().intField
		local updated = e:getMyLua()
		updated.intField = var + 1
		e:setMyLua( updated )
	end
end

function MyUpdateSystem:onAdded( world, entities )
	print( 'detect MyLuaComponent added.' )
end

function MyUpdateSystem:onModified( world, entities )
	print( 'detect MyLuaComponent modified.' )
end

function MyUpdateSystem:onRemoved( world, entities )
	print( 'detect MyLuaComponent removed.' )
end

local world = World( {
	{ MyUpdateSystem, true },
} )

local e = world:addEntity( {
	MyLuaComponent()
} )

world:update()
print( 'intField = ', e:getMyLua().intField )

world:update()
print( 'intField = ', e:getMyLua().intField )

print( 'getMyLua ->', e:getMyLua() )

e:removeMyLua()
world:update()

bang-mini's People

Contributors

lihaochen910 avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.