diff --git a/demos/source/app.d b/demos/source/app.d index 5879daf..08c154c 100644 --- a/demos/source/app.d +++ b/demos/source/app.d @@ -125,11 +125,11 @@ struct Launcher foreach(ref system; manager.systems) { - if(system.id != CountSystem.system_id && system.id != CleanSystem.system_id)system.disable(); + if(system.id != becsID!CountSystem && system.id != becsID!CleanSystem)system.disable(); } - /*launcher.manager.getSystem(CountSystem.system_id).enable(); - launcher.manager.getSystem(CleanSystem.system_id).enable();//*/ + /*launcher.manager.getSystem(becsID!CountSystem).enable(); + launcher.manager.getSystem(becsID!CleanSystem).enable();//*/ if(callbacks.register)callbacks.register(); if(callbacks.initialize)callbacks.initialize(); diff --git a/demos/source/demos/brick_breaker.d b/demos/source/demos/brick_breaker.d index a170076..3540449 100644 --- a/demos/source/demos/brick_breaker.d +++ b/demos/source/demos/brick_breaker.d @@ -372,9 +372,9 @@ void brickBreakerStart() draw_system.default_data.material_id = 0; EntityTemplate* brick_tmpl = launcher.manager.allocateTemplate( - [CLocation.component_id, CScale.component_id, CColor.component_id, - CTexCoordsIndex.component_id, CBVH.component_id, CHitPoints.component_id, - CAABB.component_id, CStatic.component_id].staticArray + [becsID!CLocation, becsID!CScale, becsID!CColor, + becsID!CTexCoordsIndex, becsID!CBVH, becsID!CHitPoints, + becsID!CAABB, becsID!CStatic].staticArray ); brick_tmpl.getComponent!CTexCoordsIndex().value = TexCoordsManager.instance.getCoordIndex(vec4(304,40,16,8)*px); brick_tmpl.getComponent!CColor().value = 0x80206020; @@ -387,10 +387,10 @@ void brickBreakerStart() big_brick_tmpl.getComponent!CScale().value = vec2(16,16); EntityTemplate* paddle_tmpl = launcher.manager.allocateTemplate( - [CLocation.component_id, CScale.component_id, CInput.component_id, - CTexCoordsIndex.component_id, CPaddle.component_id, CVelocity.component_id, - CDamping.component_id, CVelocityFactor.component_id, CBVH.component_id, - CAABB.component_id].staticArray + [becsID!CLocation, becsID!CScale, becsID!CInput, + becsID!CTexCoordsIndex, becsID!CPaddle, becsID!CVelocity, + becsID!CDamping, becsID!CVelocityFactor, becsID!CBVH, + becsID!CAABB].staticArray ); paddle_tmpl.getComponent!CTexCoordsIndex().value = TexCoordsManager.instance.getCoordIndex(vec4(272,48,64,10)*px); paddle_tmpl.getComponent!CScale().value = vec2(64,10); @@ -398,8 +398,8 @@ void brickBreakerStart() paddle_tmpl.getComponent!CVelocityFactor().value = vec2(1,0); EntityTemplate* ball_tmpl = launcher.manager.allocateTemplate( - [CLocation.component_id, CScale.component_id, //CDamping.component_id, - CTexCoordsIndex.component_id, CBall.component_id, CVelocity.component_id].staticArray + [becsID!CLocation, becsID!CScale, //becsID!CDamping, + becsID!CTexCoordsIndex, becsID!CBall, becsID!CVelocity].staticArray ); ball_tmpl.getComponent!CTexCoordsIndex().value = TexCoordsManager.instance.getCoordIndex(vec4(304,32,8,8)*px); ball_tmpl.getComponent!CScale().value = vec2(8,8); @@ -419,12 +419,12 @@ void brickBreakerStart() launcher.gui_manager.addComponent(CBVH(), "BVH"); launcher.gui_manager.addComponent(CAABB(), "AABB"); - launcher.gui_manager.addSystem(MoveSystem.system_id, "Move System"); - launcher.gui_manager.addSystem(EdgeCollisionSystem.system_id, "Edge Collision System"); - launcher.gui_manager.addSystem(BallCollisionSystem.system_id, "Ball Collision System"); - launcher.gui_manager.addSystem(InputMovementSystem.system_id, "Input Movement System"); - launcher.gui_manager.addSystem(DampingSystem.system_id, "Damping System"); - launcher.gui_manager.addSystem(DamageSystem.system_id, "Damage System"); + launcher.gui_manager.addSystem(becsID!MoveSystem, "Move System"); + launcher.gui_manager.addSystem(becsID!EdgeCollisionSystem, "Edge Collision System"); + launcher.gui_manager.addSystem(becsID!BallCollisionSystem, "Ball Collision System"); + launcher.gui_manager.addSystem(becsID!InputMovementSystem, "Input Movement System"); + launcher.gui_manager.addSystem(becsID!DampingSystem, "Damping System"); + launcher.gui_manager.addSystem(becsID!DamageSystem, "Damage System"); launcher.gui_manager.addTemplate(brick_tmpl, "Brick"); launcher.gui_manager.addTemplate(big_brick_tmpl, "Big Brick"); diff --git a/demos/source/demos/particles.d b/demos/source/demos/particles.d index ec64774..b976308 100644 --- a/demos/source/demos/particles.d +++ b/demos/source/demos/particles.d @@ -494,13 +494,13 @@ void particlesStart() draw_system.default_data.material_id = 2; draw_system.default_data.texture = particles_demo.texture; - launcher.gui_manager.addSystem(MoveSystem.system_id,"Move System"); - launcher.gui_manager.addSystem(DrawSystem.system_id,"Draw System"); - launcher.gui_manager.addSystem(PlayAreaSystem.system_id,"Play Area System"); - launcher.gui_manager.addSystem(AttractSystem.system_id,"Attract System"); - launcher.gui_manager.addSystem(MouseAttractSystem.system_id,"Mouse Attract System"); - launcher.gui_manager.addSystem(DampingSystem.system_id,"Damping System"); - launcher.gui_manager.addSystem(ParticleLifeSystem.system_id,"Particle Life System"); + launcher.gui_manager.addSystem(becsID!MoveSystem,"Move System"); + launcher.gui_manager.addSystem(becsID!DrawSystem,"Draw System"); + launcher.gui_manager.addSystem(becsID!PlayAreaSystem,"Play Area System"); + launcher.gui_manager.addSystem(becsID!AttractSystem,"Attract System"); + launcher.gui_manager.addSystem(becsID!MouseAttractSystem,"Mouse Attract System"); + launcher.gui_manager.addSystem(becsID!DampingSystem,"Damping System"); + launcher.gui_manager.addSystem(becsID!ParticleLifeSystem,"Particle Life System"); // launcher.gui_manager.addComponent(CColor(),"Color (white)"); // launcher.gui_manager.addComponent(CColor(0xFF101540),"Color (red)"); @@ -516,7 +516,7 @@ void particlesStart() launcher.gui_manager.addComponent(CGravity(),"Gravity"); EntityTemplate* tmpl; - EntityTemplate* base_tmpl = launcher.manager.allocateTemplate([CTexCoords.component_id, CLocation.component_id, CColor.component_id, CVelocity.component_id, CDamping.component_id, CScale.component_id, CMaterialIndex.component_id].staticArray); + EntityTemplate* base_tmpl = launcher.manager.allocateTemplate([becsID!CTexCoords, becsID!CLocation, becsID!CColor, becsID!CVelocity, becsID!CDamping, becsID!CScale, becsID!CMaterialIndex].staticArray); base_tmpl.getComponent!CColor().value = 0xFF251010; base_tmpl.getComponent!CScale().value = vec2(2); base_tmpl.getComponent!CTexCoords().value = vec4(246,64,2,2)*px; @@ -531,15 +531,15 @@ void particlesStart() // tmpl = launcher.manager.allocateTemplate(base_tmpl); // tmpl.getComponent!CColor().value = 0xFF101540; // launcher.gui_manager.addTemplate(tmpl,"Particle (red)"); - // tmpl = launcher.manager.allocateTemplate(tmpl, [CDamping.component_id].staticArray); + // tmpl = launcher.manager.allocateTemplate(tmpl, [becsID!CDamping].staticArray); // launcher.gui_manager.addTemplate(tmpl,"Particle (damping)"); // tmpl = launcher.manager.allocateTemplate(tmpl); // tmpl.getComponent!CDamping().power = 4; // launcher.gui_manager.addTemplate(tmpl,"Particle (damping!)"); - tmpl = launcher.manager.allocateTemplate([CAttractor.component_id, CLocation.component_id, CForceRange.component_id, CScale.component_id].staticArray); + tmpl = launcher.manager.allocateTemplate([becsID!CAttractor, becsID!CLocation, becsID!CForceRange, becsID!CScale].staticArray); tmpl.getComponent!CScale().value = vec2(4); launcher.gui_manager.addTemplate(tmpl,"Attractor"); - tmpl = launcher.manager.allocateTemplate(tmpl, [CVortex.component_id].staticArray); + tmpl = launcher.manager.allocateTemplate(tmpl, [becsID!CVortex].staticArray); launcher.gui_manager.addTemplate(tmpl,"Vortex"); // tmpl = launcher.manager.allocateTemplate(tmpl); // tmpl.getComponent!CVortex().strength = -0.6; diff --git a/demos/source/demos/sandbox.d b/demos/source/demos/sandbox.d index 925ebb2..e7abb06 100644 --- a/demos/source/demos/sandbox.d +++ b/demos/source/demos/sandbox.d @@ -2,6 +2,8 @@ module demos.sandbox; import bindbc.sdl; +import bubel.ecs.core; + import demos.simple; import demos.snake; import demos.space_invaders; @@ -37,8 +39,8 @@ void sandboxStart() draw_system.default_data.texture = particles_demo.texture; draw_system.default_data.color = 0x80808080; - launcher.manager.getSystem(MouseAttractSystem.system_id).disable(); - launcher.manager.getSystem(demos.simple.MoveSystem.system_id).disable(); + launcher.manager.getSystem(becsID!MouseAttractSystem).disable(); + launcher.manager.getSystem(becsID!(demos.simple.MoveSystem)).disable(); } diff --git a/demos/source/demos/simple.d b/demos/source/demos/simple.d index ecccc12..7a8357a 100644 --- a/demos/source/demos/simple.d +++ b/demos/source/demos/simple.d @@ -134,10 +134,10 @@ void simpleStart() draw_system.default_data.size = vec2(16,16); draw_system.default_data.coords = vec4(0,48,16,16)*px;//vec4(0,0,1,1); - launcher.gui_manager.addSystem(MoveSystem.system_id,"Move Up System"); - launcher.gui_manager.addSystem(DrawSystem.system_id,"Draw System"); + launcher.gui_manager.addSystem(becsID!MoveSystem,"Move Up System"); + launcher.gui_manager.addSystem(becsID!DrawSystem,"Draw System"); - simple.tmpl = launcher.manager.allocateTemplate([CLocation.component_id, CDrawDefault.component_id].staticArray); + simple.tmpl = launcher.manager.allocateTemplate([becsID!CLocation, becsID!CDrawDefault].staticArray); //*simple.tmpl.getComponent!CTexCoordsIndex = TexCoordsManager.instance.getCoordIndex(vec4(0,48,16,16)*px); //CLocation* loc_comp = simple.tmpl.getComponent!CLocation; @@ -153,8 +153,8 @@ void simpleStart() void simpleEnd() { - launcher.manager.getSystem(MoveSystem.system_id).disable(); - launcher.manager.getSystem(DrawSystem.system_id).disable(); + launcher.manager.getSystem(becsID!MoveSystem).disable(); + launcher.manager.getSystem(becsID!DrawSystem).disable(); simple.texture.destroy(); diff --git a/demos/source/demos/snake.d b/demos/source/demos/snake.d index 865ab75..7591978 100644 --- a/demos/source/demos/snake.d +++ b/demos/source/demos/snake.d @@ -903,26 +903,26 @@ void snakeStart() //launcher.gui_manager.addComponent(CAnimation(),"Movement"); launcher.gui_manager.addComponent(CILocation(),"Int Location"); - launcher.gui_manager.addSystem(MoveSystem.system_id,"Move System"); - launcher.gui_manager.addSystem(InputSystem.system_id,"Input System"); - launcher.gui_manager.addSystem(FixSnakeDirectionSystem.system_id,"Fix Direction System"); - launcher.gui_manager.addSystem(AnimationRenderSystem.system_id,"Animation Render System"); - launcher.gui_manager.addSystem(AnimationSystem.system_id,"Animation System"); - launcher.gui_manager.addSystem(ParticleSystem.system_id,"Particle Life System"); - launcher.gui_manager.addSystem(ParticleMovementSystem.system_id,"Particle Movement System"); - launcher.gui_manager.addSystem(DrawAppleSystem.system_id,"Draw Apple System"); - launcher.gui_manager.addSystem(DrawSnakeSystem.system_id,"Draw Snake System"); + launcher.gui_manager.addSystem(becsID!MoveSystem,"Move System"); + launcher.gui_manager.addSystem(becsID!InputSystem,"Input System"); + launcher.gui_manager.addSystem(becsID!FixSnakeDirectionSystem,"Fix Direction System"); + launcher.gui_manager.addSystem(becsID!AnimationRenderSystem,"Animation Render System"); + launcher.gui_manager.addSystem(becsID!AnimationSystem,"Animation System"); + launcher.gui_manager.addSystem(becsID!ParticleSystem,"Particle Life System"); + launcher.gui_manager.addSystem(becsID!ParticleMovementSystem,"Particle Movement System"); + launcher.gui_manager.addSystem(becsID!DrawAppleSystem,"Draw Apple System"); + launcher.gui_manager.addSystem(becsID!DrawSnakeSystem,"Draw Snake System"); snake.snake_destroy_particle_frames = Mallocator.makeArray([vec4(64,144,16,16)*px,vec4(80,144,16,16)*px,vec4(96,144,16,16)*px,vec4(112,144,16,16)*px].staticArray); { - ushort[5] components = [CILocation.component_id, CSnake.component_id, CMovement.component_id, CInput.component_id, CLocation.component_id]; + ushort[5] components = [becsID!CILocation, becsID!CSnake, becsID!CMovement, becsID!CInput, becsID!CLocation]; snake.snake_tmpl = launcher.manager.allocateTemplate(components); launcher.manager.addEntity(snake.snake_tmpl,[CILocation(ivec2(2,2)).ref_].staticArray); } { - snake.snake_destroy_particle = launcher.manager.allocateTemplate([CLocation.component_id, CParticle.component_id, CParticleVector.component_id, CAnimation.component_id, CLocation.component_id].staticArray); + snake.snake_destroy_particle = launcher.manager.allocateTemplate([becsID!CLocation, becsID!CParticle, becsID!CParticleVector, becsID!CAnimation, becsID!CLocation].staticArray); CAnimation* canim = snake.snake_destroy_particle.getComponent!CAnimation; canim.frames = snake.snake_destroy_particle_frames; CParticle* particle = snake.snake_destroy_particle.getComponent!CParticle; @@ -930,7 +930,7 @@ void snakeStart() } { - ushort[3] components = [CILocation.component_id, CApple.component_id, CLocation.component_id]; + ushort[3] components = [becsID!CILocation, becsID!CApple, becsID!CLocation]; snake.apple_tmpl = launcher.manager.allocateTemplate(components); snake.addApple(); } diff --git a/demos/source/demos/space_invaders.d b/demos/source/demos/space_invaders.d index ece3c2b..67332f8 100644 --- a/demos/source/demos/space_invaders.d +++ b/demos/source/demos/space_invaders.d @@ -542,8 +542,8 @@ struct ShipWeaponSystem void create() { - laser1_tmpl = launcher.manager.allocateTemplate([CWeapon.component_id, CLocation.component_id, CShootDirection.component_id, CTargetParent.component_id, CGuild.component_id, CVelocity.component_id].staticArray); - main_weapon_tmpl = launcher.manager.allocateTemplate([CLocation.component_id, CShootDirection.component_id, CTargetParent.component_id, CGuild.component_id, CVelocity.component_id].staticArray); + laser1_tmpl = launcher.manager.allocateTemplate([becsID!CWeapon, becsID!CLocation, becsID!CShootDirection, becsID!CTargetParent, becsID!CGuild, becsID!CVelocity].staticArray); + main_weapon_tmpl = launcher.manager.allocateTemplate([becsID!CLocation, becsID!CShootDirection, becsID!CTargetParent, becsID!CGuild, becsID!CVelocity].staticArray); *laser1_tmpl.getComponent!CWeapon = CWeapon(0,CWeapon.Type.laser,3); laser1_tmpl.getComponent!CTargetParent().rel_pos = vec2(10,13); main_weapon_tmpl.getComponent!CTargetParent().rel_pos = vec2(0,4); @@ -585,11 +585,11 @@ struct ShipWeaponSystem void create() { weapon_tmpl = launcher.manager.allocateTemplate( - [CWeapon.component_id, CLocation.component_id, CShootDirection.component_id, - CTargetParent.component_id, CGuild.component_id, CVelocity.component_id, - CAutoShoot.component_id, CTarget.component_id, CTargetPlayerShip.component_id, - CRotation.component_id, CScale.component_id, CTexCoords.component_id, - CDepth.component_id, CWeaponLocation.component_id].staticArray); + [becsID!CWeapon, becsID!CLocation, becsID!CShootDirection, + becsID!CTargetParent, becsID!CGuild, becsID!CVelocity, + becsID!CAutoShoot, becsID!CTarget, becsID!CTargetPlayerShip, + becsID!CRotation, becsID!CScale, becsID!CTexCoords, + becsID!CDepth, becsID!CWeaponLocation].staticArray); *weapon_tmpl.getComponent!CWeapon = CWeapon(0,CWeapon.Type.laser,3); weapon_tmpl.getComponent!CTargetParent().rel_pos = vec2(0,0); weapon_tmpl.getComponent!CGuild().guild = 1; @@ -601,8 +601,8 @@ struct ShipWeaponSystem weapon_tmpl.getComponent!CWeaponLocation().rel_pos = vec2(0,12); top_tmpl = launcher.manager.allocateTemplate( - [CLocation.component_id, CTargetParent.component_id, CScale.component_id, - CTexCoords.component_id, CDepth.component_id].staticArray); + [becsID!CLocation, becsID!CTargetParent, becsID!CScale, + becsID!CTexCoords, becsID!CDepth].staticArray); top_tmpl.getComponent!CTargetParent().rel_pos = vec2(0,1); top_tmpl.getComponent!CScale().value = vec2(10,11); top_tmpl.getComponent!CDepth().value = -2; @@ -645,11 +645,11 @@ struct ShipWeaponSystem void create() { tower1_tmpl = launcher.manager.allocateTemplate( - [CColor.component_id, CHitMark.component_id, CHitPoints.component_id, CLocation.component_id, - CTexCoords.component_id, CScale.component_id, CEnemy.component_id, - CShootGrid.component_id, CGuild.component_id, CInit.component_id, - CChildren.component_id, CDepth.component_id, CTargetParent.component_id, - CSpawnUponDeath.component_id, CShootWaveUponDeath.component_id, CShootGridMask.component_id].staticArray + [becsID!CColor, becsID!CHitMark, becsID!CHitPoints, becsID!CLocation, + becsID!CTexCoords, becsID!CScale, becsID!CEnemy, + becsID!CShootGrid, becsID!CGuild, becsID!CInit, + becsID!CChildren, becsID!CDepth, becsID!CTargetParent, + becsID!CSpawnUponDeath, becsID!CShootWaveUponDeath, becsID!CShootGridMask].staticArray ); /*CTexCoords* tex_comp = tower1_tmpl.getComponent!CTexCoords; @@ -696,8 +696,8 @@ struct ShipWeaponSystem ship.create(); tower.create(); boss.create(); - /*ship.laser1_tmpl = launcher.manager.allocateTemplate([CWeapon.component_id, CLocation.component_id, CShootDirection.component_id, CTargetParent.component_id, CGuild.component_id, CVelocity.component_id].staticArray); - ship.main_weapon_tmpl = launcher.manager.allocateTemplate([CLocation.component_id, CShootDirection.component_id, CTargetParent.component_id, CGuild.component_id, CVelocity.component_id].staticArray); + /*ship.laser1_tmpl = launcher.manager.allocateTemplate([becsID!CWeapon, becsID!CLocation, becsID!CShootDirection, becsID!CTargetParent, becsID!CGuild, becsID!CVelocity].staticArray); + ship.main_weapon_tmpl = launcher.manager.allocateTemplate([becsID!CLocation, becsID!CShootDirection, becsID!CTargetParent, becsID!CGuild, becsID!CVelocity].staticArray); *ship.laser1_tmpl.getComponent!CWeapon = CWeapon(3,0.0); ship.laser1_tmpl.getComponent!CTargetParent().rel_pos = vec2(10,13); ship.main_weapon_tmpl.getComponent!CTargetParent().rel_pos = vec2(0,4); @@ -958,8 +958,8 @@ struct ShootingSystem void onCreate() { /*bullet_tmpl[0] = launcher.manager.allocateTemplate( - [CLocation.component_id, CTexCoords.component_id, CVelocity.component_id, - CScale.component_id, CBullet.component_id, CGuild.component_id].staticArray + [becsID!CLocation, becsID!CTexCoords, becsID!CVelocity, + becsID!CScale, becsID!CBullet, becsID!CGuild].staticArray ); bullet_tmpl[0].getComponent!CTexCoords().value = vec4(0,24,2,8)*px; bullet_tmpl[0].getComponent!CScale().value = vec2(2,8); @@ -977,9 +977,9 @@ struct ShootingSystem fire_tmpl = launcher.manager.allocateTemplate( - [CLocation.component_id, CTexCoords.component_id, CScale.component_id, - CAnimation.component_id, CParticle.component_id, CRotation.component_id, - CVelocity.component_id, CDamping.component_id].staticArray + [becsID!CLocation, becsID!CTexCoords, becsID!CScale, + becsID!CAnimation, becsID!CParticle, becsID!CRotation, + becsID!CVelocity, becsID!CDamping].staticArray ); fire_tmpl.getComponent!CTexCoords().value = vec4(96,64,8,16)*px; @@ -1174,9 +1174,9 @@ struct ParticleEmittingSystem void onCreate() { templates[0] = launcher.manager.allocateTemplate( - [CLocation.component_id, CTexCoords.component_id, CScale.component_id, - CAnimation.component_id, CParticle.component_id, CRotation.component_id, - CVelocity.component_id, CDamping.component_id, CDepth.component_id].staticArray); + [becsID!CLocation, becsID!CTexCoords, becsID!CScale, + becsID!CAnimation, becsID!CParticle, becsID!CRotation, + becsID!CVelocity, becsID!CDamping, becsID!CDepth].staticArray); *templates[0].getComponent!CAnimation() = CAnimation(flashes,0,2); *templates[0].getComponent!CParticle() = CParticle(350); //*templates[0].getComponent!CDepth() = CDepth(-3); @@ -1242,7 +1242,7 @@ struct UpgradeCollisionSystem if(space_invaders.shoot_grid.test(id, data.location[i], cast(ubyte)(0xFF))) { Entity* entity = launcher.manager.getEntity(id); - if(entity && entity.hasComponent(CShip.component_id)) + if(entity && entity.hasComponent(becsID!CShip)) { launcher.manager.sendEvent(id, EUpgrade()); launcher.manager.removeEntity(data.entity[i].id); @@ -1471,17 +1471,17 @@ struct HitPointsSystem void onCreate() { upgrade_tmpl = launcher.manager.allocateTemplate( - [CVelocity.component_id, CLocation.component_id, CTexCoords.component_id, - CScale.component_id, CUpgrade.component_id, CAnimation.component_id, - CAnimationLooped.component_id].staticArray); + [becsID!CVelocity, becsID!CLocation, becsID!CTexCoords, + becsID!CScale, becsID!CUpgrade, becsID!CAnimation, + becsID!CAnimationLooped].staticArray); //tex_comp.tex = space_invaders.texture;//ship_tex; upgrade_tmpl.getComponent!CTexCoords().value = vec4(0*px,32*px,16*px,16*px); *upgrade_tmpl.getComponent!CAnimation = CAnimation(upgrade_laser_frames, 0, 1); upgrade_tmpl.getComponent!CVelocity().value = vec2(0,-0.05); explosion_tmpl = launcher.manager.allocateTemplate( - [CDepth.component_id, CParticle.component_id, CLocation.component_id, - CTexCoords.component_id, CScale.component_id, CAnimation.component_id].staticArray); + [becsID!CDepth, becsID!CParticle, becsID!CLocation, + becsID!CTexCoords, becsID!CScale, becsID!CAnimation].staticArray); //explosion_tmpl.getComponent!(CTexCoords).tex = space_invaders.texture; *explosion_tmpl.getComponent!CAnimation = CAnimation(explosion_laser_frames, 0, 1.333); explosion_tmpl.getComponent!(CParticle).life = 600; @@ -1627,8 +1627,8 @@ struct PartsDestroySystem { flashes_emitter = launcher.manager.allocateTemplate( [ - CVelocity.component_id, CLocation.component_id, CParticleEmitter.component_id, - CParticleEmitterTime.component_id, CTargetParent.component_id, CDepth.component_id + becsID!CVelocity, becsID!CLocation, becsID!CParticleEmitter, + becsID!CParticleEmitterTime, becsID!CTargetParent, becsID!CDepth ].staticArray); *flashes_emitter.getComponent!CParticleEmitter() = CParticleEmitter(vec2(0,0), vec2(800,1600), 0); } @@ -1992,8 +1992,8 @@ struct CShipIterator { flashes_emitter = launcher.manager.allocateTemplate( [ - CVelocity.component_id, CLocation.component_id, CParticleEmitter.component_id, - CParticleEmitterTime.component_id, CTargetParent.component_id + becsID!CVelocity, becsID!CLocation, becsID!CParticleEmitter, + becsID!CParticleEmitterTime, becsID!CTargetParent ].staticArray); *flashes_emitter.getComponent!CParticleEmitter() = CParticleEmitter(vec2(0,0), vec2(400,400), 0); } @@ -2185,43 +2185,43 @@ void spaceInvadersStart() //launcher.gui_manager.addComponent(CSpawnUponDeath(),"Spawn Upon Death"); launcher.gui_manager.addComponent(CShootWaveUponDeath(CWeapon.Type.canon),"Wave Upon Death"); - launcher.gui_manager.addSystem(DrawSystem.system_id,"Draw System"); - launcher.gui_manager.addSystem(InputMovementSystem.system_id,"Input Movement"); - launcher.gui_manager.addSystem(ShootingSystem.system_id,"Shooting System"); - //launcher.gui_manager.addSystem(MovementSystem.system_id,"Movement System"); - launcher.gui_manager.addSystem(MoveSystem.system_id,"Move System"); - launcher.gui_manager.addSystem(ClampPositionSystem.system_id,"Clamp Position System"); - launcher.gui_manager.addSystem(ChangeDirectionSystem.system_id,"Change Direction System"); - launcher.gui_manager.addSystem(BulletsCollisionSystem.system_id,"Bullets Collision System"); - launcher.gui_manager.addSystem(ShootGridManager.system_id,"Shoot Grid Manager"); - launcher.gui_manager.addSystem(ShootGridCleaner.system_id,"Shoot Grid Cleaner"); - launcher.gui_manager.addSystem(HitPointsSystem.system_id,"Hit Points System"); - launcher.gui_manager.addSystem(HitMarkingSystem.system_id,"Hit Marking System"); - launcher.gui_manager.addSystem(UpgradeCollisionSystem.system_id,"Upgrade Collision System"); - launcher.gui_manager.addSystem(UpgradeSystem.system_id,"Upgrade System"); - launcher.gui_manager.addSystem(ParticleSystem.system_id,"Particle System"); - launcher.gui_manager.addSystem(AnimationSystem.system_id,"Animation System"); - launcher.gui_manager.addSystem(DampingSystem.system_id,"Damping System"); - launcher.gui_manager.addSystem(MoveToParentTargetSystem.system_id,"Move To Target System"); - launcher.gui_manager.addSystem(ParentOwnerSystem.system_id,"Parent Owner System"); - launcher.gui_manager.addSystem(ShipWeaponSystem.system_id,"Ship Weapon System"); - launcher.gui_manager.addSystem(ParticleEmittingSystem.system_id,"Particle Emitting System"); - launcher.gui_manager.addSystem(RotateToTargetSystem.system_id,"Rotate To Target System"); - launcher.gui_manager.addSystem(ShipTargetSystem.system_id,"Ship Target System"); - launcher.gui_manager.addSystem(PartsDestroySystem.system_id,"Parts Destroy System"); - launcher.gui_manager.addSystem(ChildDestroySystem.system_id,"Child Destroy System"); - launcher.gui_manager.addSystem(ShootWaveSystem.system_id,"Shoot Wave System"); - //launcher.gui_manager.addSystem(SpawnUponDeathSystem.system_id,"Child Destroy System"); + launcher.gui_manager.addSystem(becsID!DrawSystem,"Draw System"); + launcher.gui_manager.addSystem(becsID!InputMovementSystem,"Input Movement"); + launcher.gui_manager.addSystem(becsID!ShootingSystem,"Shooting System"); + //launcher.gui_manager.addSystem(becsID!MovementSystem,"Movement System"); + launcher.gui_manager.addSystem(becsID!MoveSystem,"Move System"); + launcher.gui_manager.addSystem(becsID!ClampPositionSystem,"Clamp Position System"); + launcher.gui_manager.addSystem(becsID!ChangeDirectionSystem,"Change Direction System"); + launcher.gui_manager.addSystem(becsID!BulletsCollisionSystem,"Bullets Collision System"); + launcher.gui_manager.addSystem(becsID!ShootGridManager,"Shoot Grid Manager"); + launcher.gui_manager.addSystem(becsID!ShootGridCleaner,"Shoot Grid Cleaner"); + launcher.gui_manager.addSystem(becsID!HitPointsSystem,"Hit Points System"); + launcher.gui_manager.addSystem(becsID!HitMarkingSystem,"Hit Marking System"); + launcher.gui_manager.addSystem(becsID!UpgradeCollisionSystem,"Upgrade Collision System"); + launcher.gui_manager.addSystem(becsID!UpgradeSystem,"Upgrade System"); + launcher.gui_manager.addSystem(becsID!ParticleSystem,"Particle System"); + launcher.gui_manager.addSystem(becsID!AnimationSystem,"Animation System"); + launcher.gui_manager.addSystem(becsID!DampingSystem,"Damping System"); + launcher.gui_manager.addSystem(becsID!MoveToParentTargetSystem,"Move To Target System"); + launcher.gui_manager.addSystem(becsID!ParentOwnerSystem,"Parent Owner System"); + launcher.gui_manager.addSystem(becsID!ShipWeaponSystem,"Ship Weapon System"); + launcher.gui_manager.addSystem(becsID!ParticleEmittingSystem,"Particle Emitting System"); + launcher.gui_manager.addSystem(becsID!RotateToTargetSystem,"Rotate To Target System"); + launcher.gui_manager.addSystem(becsID!ShipTargetSystem,"Ship Target System"); + launcher.gui_manager.addSystem(becsID!PartsDestroySystem,"Parts Destroy System"); + launcher.gui_manager.addSystem(becsID!ChildDestroySystem,"Child Destroy System"); + launcher.gui_manager.addSystem(becsID!ShootWaveSystem,"Shoot Wave System"); + //launcher.gui_manager.addSystem(becsID!SpawnUponDeathSystem,"Child Destroy System"); - //launcher.manager.getSystem(CleanSystem.system_id).disable(); + //launcher.manager.getSystem(becsID!CleanSystem).disable(); { space_invaders.ship_tmpl = launcher.manager.allocateTemplate( - [CVelocity.component_id, CColor.component_id, CHitMark.component_id, CHitPoints.component_id, - CLocation.component_id, CTexCoords.component_id, CInput.component_id, - CShip.component_id, CScale.component_id, CColliderScale.component_id, - CShootDirection.component_id, CShootGrid.component_id, CGuild.component_id, - CDamping.component_id, CChildren.component_id, CInit.component_id, - CShootGridMask.component_id, CVelocityFactor.component_id].staticArray + [becsID!CVelocity, becsID!CColor, becsID!CHitMark, becsID!CHitPoints, + becsID!CLocation, becsID!CTexCoords, becsID!CInput, + becsID!CShip, becsID!CScale, becsID!CColliderScale, + becsID!CShootDirection, becsID!CShootGrid, becsID!CGuild, + becsID!CDamping, becsID!CChildren, becsID!CInit, + becsID!CShootGridMask, becsID!CVelocityFactor].staticArray ); space_invaders.ship_tmpl.getComponent!CTexCoords().value = vec4(0,80,48,32)*px; space_invaders.ship_tmpl.getComponent!CScale().value = vec2(48,32); @@ -2235,7 +2235,7 @@ void spaceInvadersStart() } { - ushort[6] components = [CLocation.component_id, CTexCoords.component_id, CVelocity.component_id, CScale.component_id, CBullet.component_id, CGuild.component_id]; + ushort[6] components = [becsID!CLocation, becsID!CTexCoords, becsID!CVelocity, becsID!CScale, becsID!CBullet, becsID!CGuild]; space_invaders.laser_tmpl = launcher.manager.allocateTemplate(components); space_invaders.laser_tmpl.getComponent!CTexCoords().value = vec4(0,24,2,8)*px; @@ -2253,11 +2253,11 @@ void spaceInvadersStart() { boss_tmpl = launcher.manager.allocateTemplate( - [CColor.component_id, CHitMark.component_id, CParts.component_id, CLocation.component_id, - CTexCoords.component_id, CScale.component_id, CEnemy.component_id, - CBoss.component_id, CGuild.component_id, CInit.component_id, - CChildren.component_id, CSideMove.component_id, CVelocity.component_id, - CDepth.component_id].staticArray + [becsID!CColor, becsID!CHitMark, becsID!CParts, becsID!CLocation, + becsID!CTexCoords, becsID!CScale, becsID!CEnemy, + becsID!CBoss, becsID!CGuild, becsID!CInit, + becsID!CChildren, becsID!CSideMove, becsID!CVelocity, + becsID!CDepth].staticArray ); //CTexture* tex_comp = boss_tmpl.getComponent!CTexture; @@ -2276,10 +2276,10 @@ void spaceInvadersStart() { tower_tmpl = launcher.manager.allocateTemplate( - [CColor.component_id, CHitMark.component_id, CHitPoints.component_id, CLocation.component_id, - CTexCoords.component_id, CScale.component_id, CEnemy.component_id, - CShootGrid.component_id, CGuild.component_id, CInit.component_id, - CChildren.component_id, CShootGridMask.component_id].staticArray + [becsID!CColor, becsID!CHitMark, becsID!CHitPoints, becsID!CLocation, + becsID!CTexCoords, becsID!CScale, becsID!CEnemy, + becsID!CShootGrid, becsID!CGuild, becsID!CInit, + becsID!CChildren, becsID!CShootGridMask].staticArray ); tower_tmpl.getComponent!CTexCoords().value = vec4(96,96,16,16)*px; @@ -2290,11 +2290,11 @@ void spaceInvadersStart() { space_invaders.enemy_tmpl = launcher.manager.allocateTemplate( - [CWeaponLocation.component_id, CColor.component_id, CHitMark.component_id, CHitPoints.component_id, - CVelocity.component_id, CAutoShoot.component_id, CLocation.component_id, - CTexCoords.component_id, CScale.component_id, CWeapon.component_id, - CEnemy.component_id, CShootDirection.component_id, CShootGrid.component_id, - CGuild.component_id, CShootGridMask.component_id].staticArray + [becsID!CWeaponLocation, becsID!CColor, becsID!CHitMark, becsID!CHitPoints, + becsID!CVelocity, becsID!CAutoShoot, becsID!CLocation, + becsID!CTexCoords, becsID!CScale, becsID!CWeapon, + becsID!CEnemy, becsID!CShootDirection, becsID!CShootGrid, + becsID!CGuild, becsID!CShootGridMask].staticArray ); space_invaders.enemy_tmpl.getComponent!CTexCoords().value = vec4(32,32,16,16)*px; @@ -2329,7 +2329,7 @@ void spaceInvadersStart() EntityTemplate* upgrade_tmpl; { - upgrade_tmpl = launcher.manager.allocateTemplate([CVelocity.component_id, CLocation.component_id, CTexCoords.component_id, CScale.component_id, CUpgrade.component_id, CAnimationLooped.component_id, CAnimation.component_id].staticArray); + upgrade_tmpl = launcher.manager.allocateTemplate([becsID!CVelocity, becsID!CLocation, becsID!CTexCoords, becsID!CScale, becsID!CUpgrade, becsID!CAnimationLooped, becsID!CAnimation].staticArray); upgrade_tmpl.getComponent!CTexCoords().value = vec4(0,32,16,16)*px; upgrade_tmpl.getComponent!CVelocity().value = vec2(0,-0.05); *upgrade_tmpl.getComponent!CAnimation = CAnimation(HitPointsSystem.upgrade_laser_frames, 0, 0.75); @@ -2341,8 +2341,8 @@ void spaceInvadersStart() grouped_tmpl = launcher.manager.allocateTemplate(grouped_id); space_invaders.bullet_tmpl[0] = launcher.manager.allocateTemplate( - [CLocation.component_id, CTexCoords.component_id, CVelocity.component_id, - CScale.component_id, CBullet.component_id, CGuild.component_id].staticArray + [becsID!CLocation, becsID!CTexCoords, becsID!CVelocity, + becsID!CScale, becsID!CBullet, becsID!CGuild].staticArray ); space_invaders.bullet_tmpl[0].getComponent!CTexCoords().value = vec4(0,24,2,8)*px; space_invaders.bullet_tmpl[0].getComponent!CScale().value = vec2(2,8); @@ -2372,12 +2372,12 @@ void spaceInvadersStart() void spaceInvadersEnd() { - /*launcher.manager.getSystem(DrawSystem.system_id).disable(); - launcher.manager.getSystem(InputMovementSystem.system_id).disable(); - launcher.manager.getSystem(ShootingSystem.system_id).disable(); - launcher.manager.getSystem(MovementSystem.system_id).disable(); - launcher.manager.getSystem(ClampPositionSystem.system_id).disable(); - launcher.manager.getSystem(ShootGridCleaner.system_id).disable();*/ + /*launcher.manager.getSystem(becsID!DrawSystem).disable(); + launcher.manager.getSystem(becsID!InputMovementSystem).disable(); + launcher.manager.getSystem(becsID!ShootingSystem).disable(); + launcher.manager.getSystem(becsID!MovementSystem).disable(); + launcher.manager.getSystem(becsID!ClampPositionSystem).disable(); + launcher.manager.getSystem(becsID!ShootGridCleaner).disable();*/ //launcher.manager.freeTemplate(space_invaders.enemy_tmpl); Mallocator.dispose(space_invaders); @@ -2401,13 +2401,13 @@ bool spaceInvadersLoop() { if(igCheckbox("Move system",&simple.move_system)) { - if(simple.move_system)launcher.manager.getSystem(MoveSystem.system_id).enable(); - else launcher.manager.getSystem(MoveSystem.system_id).disable(); + if(simple.move_system)launcher.manager.getSystem(becsID!MoveSystem).enable(); + else launcher.manager.getSystem(becsID!MoveSystem).disable(); } if(igCheckbox("Draw system",&simple.draw_system)) { - if(simple.draw_system)launcher.manager.getSystem(DrawSystem.system_id).enable(); - else launcher.manager.getSystem(DrawSystem.system_id).disable(); + if(simple.draw_system)launcher.manager.getSystem(becsID!DrawSystem).enable(); + else launcher.manager.getSystem(becsID!DrawSystem).disable(); } igPushButtonRepeat(true); igColumns(3,null,0); @@ -2429,11 +2429,11 @@ bool spaceInvadersLoop() igColumns(1,null,0); if(igButton("Clear",ImVec2(-1,0))) { - launcher.manager.getSystem(CleanSystem.system_id).enable(); + launcher.manager.getSystem(becsID!CleanSystem).enable(); launcher.manager.begin(); launcher.manager.update(); launcher.manager.end(); - launcher.manager.getSystem(CleanSystem.system_id).disable(); + launcher.manager.getSystem(becsID!CleanSystem).disable(); } } igEnd(); diff --git a/demos/source/gui/manager.d b/demos/source/gui/manager.d index c7be12f..b172ffc 100644 --- a/demos/source/gui/manager.d +++ b/demos/source/gui/manager.d @@ -119,26 +119,25 @@ struct GUIManager // void addComponent(ComponentRef comp, const (char)* name) // { - // uint size = EntityManager.instance.components[comp.component_id].size; + // uint size = EntityManager.instance.components[becsID(comp)].size; // void* data = malloc(size); // memcpy(data, comp.ptr, size); - // components.add(ComponentGUI(name, data, comp.component_id)); + // components.add(ComponentGUI(name, data, becsID(comp))); // } void addComponent(T)(T comp, const (char)* name) { - static assert(hasStaticMember!(T,"component_id")); - uint size = EntityManager.instance.components[comp.component_id].size; + uint size = EntityManager.instance.components[becsID(comp)].size; void* data = malloc(size); memcpy(data, &comp, size); - components.add(ComponentGUI(name, data, comp.component_id)); + components.add(ComponentGUI(name, data, becsID(comp))); - if(edit_components.length <= comp.component_id) + if(edit_components.length <= becsID(comp)) { - edit_components.length = comp.component_id+1;//.extend(comp.component_id + 1); + edit_components.length = becsID(comp)+1;//.extend(becsID(comp) + 1); } - //edit_components[comp.component_id] = ComponentEditGUI(name); - if(edit_components[comp.component_id].variables)return; + //edit_components[becsID(comp)] = ComponentEditGUI(name); + if(edit_components[becsID(comp)].variables)return; ComponentEditGUI comp_edit; comp_edit.name = T.stringof; //enum fields = __traits(allMembers, T); @@ -246,7 +245,7 @@ struct GUIManager } } } - edit_components[comp.component_id] = comp_edit; + edit_components[becsID(comp)] = comp_edit; } void gui() diff --git a/source/bubel/ecs/core.d b/source/bubel/ecs/core.d index c032d21..eceacf8 100644 --- a/source/bubel/ecs/core.d +++ b/source/bubel/ecs/core.d @@ -1,6 +1,6 @@ /************************************************************************************************************************ -This module contain main templates for user. -There are three structure templates (mixins) which should be added on top of structure: +This module contain main helper templates for user. +There are three structure templates (mixins) which can be added on top of structure: $(LIST * System: make system structure * Component: make component structure @@ -46,6 +46,26 @@ Struct System1 } --- +Templates ReadOnlyDependencies nad WritableDependencies are used to create list of dependencies for System. +Writable dependencies are bloking parallel execution of system which has same dependency (as writable or readonly). +This dependencies works same as Component dependencies but can be used for creating external dependencies (e.g. dependency on spatial partitioning tree access). + +--- +enum ExternalDependency1 = "ExternalDependency1"; + +Struct System1 +{ + mixin!ECS.System; + + struct EntitiesData + { + ... //used components + } + + ReadOnlyDependencies!(ExternalDependency1); +} +--- + Copyright: Copyright © 2018-2019, Dawid Masiukiewicz, Michał Masiukiewicz License: BSD 3-clause, see LICENSE file in project root folder. */ @@ -53,6 +73,7 @@ module bubel.ecs.core; public import bubel.ecs.manager; public import bubel.ecs.entity; +public import bubel.ecs.traits : becsID; /************************************************************************************************************************ Main struct used as namespace for templates. @@ -60,33 +81,30 @@ Main struct used as namespace for templates. static struct ECS { /************************************************************************************************************************ - Mark structure as System. Should be added on top of structure (before any data). + Set default system parameters (number of parallel jobs) */ mixin template System(uint jobs_count = 32) { - __gshared ushort system_id = ushort.max; - uint __ecs_jobs_count = jobs_count; + __gshared uint __becs_jobs_count = jobs_count; } /************************************************************************************************************************ - Mark structure as Component. Should be added on top of structure (before any data). + Mark structure as Component */ mixin template Component() { - __gshared ushort component_id = ushort.max; - ComponentRef ref_() @nogc nothrow return { - return ComponentRef(&this, component_id); + return ComponentRef(&this, becsID!(typeof(this))); } } /************************************************************************************************************************ - Mark structure as Event. Should be added on top of structure (before any data). + Mark structure as Event */ mixin template Event() { - __gshared ushort event_id = ushort.max; + } /************************************************************************************************************************ diff --git a/source/bubel/ecs/entity.d b/source/bubel/ecs/entity.d index 72131b5..11c5edc 100644 --- a/source/bubel/ecs/entity.d +++ b/source/bubel/ecs/entity.d @@ -8,6 +8,7 @@ module bubel.ecs.entity; import bubel.ecs.system; import bubel.ecs.manager; +public import bubel.ecs.traits : becsID; /************************************************************************************************************************ Entity ID structure. Used as reference to Entity. Pointer to entity should be ever used to store entity reference! @@ -40,7 +41,7 @@ struct Entity return null; return cast(T*)(cast(void*)block + info.deltas[T.component_id] + block.entityIndex(&this) * T.sizeof);*/ - return cast(T*)getComponent(T.component_id); + return cast(T*)getComponent(becsID!T); } void* getComponent(ushort component_id) const @@ -81,7 +82,7 @@ struct EntityMeta if (T.component_id >= info.deltas.length || info.deltas[T.component_id] == 0) return null; return cast(T*)(cast(void*)block + info.deltas[T.component_id] + index * T.sizeof);*/ - return cast(T*)getComponent(T.component_id); + return cast(T*)getComponent(becsID!T); } void* getComponent(ushort component_id) const @@ -125,8 +126,8 @@ export struct EntityTemplate */ T* getComponent(T)() nothrow @nogc { - if(T.component_id >= info.tmpl_deltas.length || info.tmpl_deltas[T.component_id] == ushort.max)return null; - return cast(T*)(entity_data.ptr + info.tmpl_deltas[T.component_id]); + if(becsID!T >= info.tmpl_deltas.length || info.tmpl_deltas[becsID!T] == ushort.max)return null; + return cast(T*)(entity_data.ptr + info.tmpl_deltas[becsID!T]); } /************************************************************************************************************************ diff --git a/source/bubel/ecs/events.d b/source/bubel/ecs/events.d index 64e0c79..7cb0d0c 100644 --- a/source/bubel/ecs/events.d +++ b/source/bubel/ecs/events.d @@ -4,6 +4,7 @@ import bubel.ecs.block_allocator; import bubel.ecs.entity; import bubel.ecs.manager; import bubel.ecs.std; +import bubel.ecs.traits : becsID; import std.algorithm.comparison : max; @@ -32,7 +33,7 @@ package struct EventManager { uint block_id = current_index + thread_id; - EventData* data = &events[Ev.event_id]; + EventData* data = &events[becsID!Ev]; EventBlock* block = data.blocks[block_id]; //EntityManager.EventInfo* info = &manager.events[Ev.event_id]; //event.entity_id = id; diff --git a/source/bubel/ecs/manager.d b/source/bubel/ecs/manager.d index e82add3..6afdca9 100644 --- a/source/bubel/ecs/manager.d +++ b/source/bubel/ecs/manager.d @@ -367,10 +367,10 @@ export struct EntityManager System system; system.m_pass = pass; - static if (!(hasMember!(Sys, "system_id")) || !is(typeof(Sys.system_id) == ushort)) - { - static assert(0, "Add \"mixin ECS.System;\" in top of system structure;"); - } + // static if (!(hasMember!(Sys, "system_id")) || !is(typeof(Sys.system_id) == ushort)) + // { + // static assert(0, "Add \"mixin ECS.System;\" in top of system structure;"); + // } static if (!(hasMember!(Sys, "EntitiesData"))) { @@ -408,7 +408,7 @@ export struct EntityManager ~ "\" due to non existing event \"" ~ EventName ~ "\"."); callers[i].callback = cast(void*)&callEventHandler!(EventParamType); - callers[i].id = EventParamType.event_id; + callers[i].id = becsID!EventParamType; i++; } } @@ -1153,8 +1153,8 @@ export struct EntityManager system.m_priority = priority; //(cast(Sys*) system.m_system_pointer).__ecsInitialize(); //system.jobs = (cast(Sys*) system.m_system_pointer)._ecs_jobs; - system.jobs = Mallocator.makeArray!(Job)((cast(Sys*) system.m_system_pointer) - .__ecs_jobs_count); + static if(__traits(hasMember, Sys ,"__becs_jobs_count"))system.jobs = Mallocator.makeArray!(Job)(Sys.__becs_jobs_count); + else system.jobs = Mallocator.makeArray!(Job)(32); static if (OnUpdateOverloadNum != -1) { @@ -1222,7 +1222,7 @@ export struct EntityManager systems[$ - 1].enable(); } - Sys.system_id = system.id; + becsID!Sys = system.id; } /************************************************************************************************************************ @@ -1240,9 +1240,9 @@ export struct EntityManager */ Sys* getSystem(Sys)() nothrow @nogc { - if (Sys.system_id >= systems.length) + if (becsID!Sys >= systems.length) return null; - return cast(Sys*) systems[Sys.system_id].m_system_pointer; + return cast(Sys*) systems[becsID!Sys].m_system_pointer; } export ushort registerPass(const(char)[] name) @@ -1272,10 +1272,10 @@ export struct EntityManager enum ComponentName = fullName!Comp; // enum ComponentName = Comp.stringof; - static if (!(hasMember!(Comp, "component_id")) || !is(typeof(Comp.component_id) == ushort)) - { - static assert(0, "Add \"mixin ECS.Component;\" in top of component structure;"); - } + // static if (!(hasMember!(Comp, "component_id")) || !is(typeof(Comp.component_id) == ushort)) + // { + // static assert(0, "Add \"mixin ECS.Component;\" in top of component structure;"); + // } static if (hasMember!(Comp, "onDestroy") && isFunction!(Comp.onDestroy) && is(ReturnType!(Comp.onDestroy) == void) @@ -1311,7 +1311,7 @@ export struct EntityManager ushort comp_id = components_map.get(cast(char[]) ComponentName, ushort.max); if (comp_id < components.length) { - Comp.component_id = comp_id; + becsID!Comp = comp_id; if (components[comp_id].init_data) Mallocator.dispose(components[comp_id].init_data); components[comp_id] = info; @@ -1319,7 +1319,7 @@ export struct EntityManager else { components.add(info); - Comp.component_id = cast(ushort)(components.length - 1); + becsID!Comp = cast(ushort)(components.length - 1); char[] name = Mallocator.makeArray(cast(char[]) ComponentName); components_map.add(name, cast(ushort)(components.length - 1)); } @@ -1329,10 +1329,10 @@ export struct EntityManager { EventInfo info; - static if (!(hasMember!(Ev, "event_id")) || !is(typeof(Ev.event_id) == ushort)) - { - static assert(0, "Add \"mixin ECS.Event;\" in top of event structure;"); - } + // static if (!(hasMember!(Ev, "event_id")) || !is(typeof(Ev.event_id) == ushort)) + // { + // static assert(0, "Add \"mixin ECS.Event;\" in top of event structure;"); + // } static if (hasMember!(Ev, "onDestroy") && isFunction!(Ev.onDestroy) && is(ReturnType!(Ev.onDestroy) == void) && Parameters!(Ev.onDestroy).length == 0) @@ -1352,12 +1352,12 @@ export struct EntityManager ushort event_id = events_map.get(fullName!Ev, ushort.max); if (event_id < events.length) { - Ev.event_id = event_id; + becsID!Ev = event_id; } else { events.add(info); - Ev.event_id = cast(ushort)(events.length - 1); + becsID!Ev = cast(ushort)(events.length - 1); // events_map.add(Ev.stringof, cast(ushort)(events.length - 1)); events_map.add(fullName!Ev, cast(ushort)(events.length - 1)); } @@ -1376,9 +1376,9 @@ export struct EntityManager // static assert(is(SetFunctionAttributes!(T, functionLinkage!(s.onUpdate), // functionAttributes!(s.onUpdate)) == typeof(&s.onUpdate)), // "Function must match system update function."); FIXME: It's lead to crash on android build - static assert(__traits(hasMember, Sys, "system_id"), "Sys must be system type."); + // static assert(__traits(hasMember, Sys, "system_id"), "Sys must be system type."); - System* system = getSystem(Sys.system_id); + System* system = getSystem(becsID!Sys); assert(system != null, "System must be registered in EntityManager before any funcion can be called."); if (!system.m_any_system_caller) @@ -2265,7 +2265,7 @@ export struct EntityManager ushort[num] del_ids; static foreach (i, comp; Components) { - del_ids[i] = comp.component_id; + del_ids[i] = becsID!comp; } removeComponents(entity_id, del_ids); diff --git a/source/bubel/ecs/traits.d b/source/bubel/ecs/traits.d index 8214b01..3af4b86 100644 --- a/source/bubel/ecs/traits.d +++ b/source/bubel/ecs/traits.d @@ -2,6 +2,24 @@ module bubel.ecs.traits; import std.traits; +/************************************************************************************************************************ + Return Component/System/Event unique ID +*/ +ref ushort becsID(T)() +{ + __gshared ushort id = ushort.max; + return id; +} + +/************************************************************************************************************************ + Return Component/System/Event unique ID +*/ +ref ushort becsID(T)(T obj) +{ + static if(isPointer!T)return becsID!(PointerTarget!T); + else return becsID!T; +} + bool isForeachDelegateWithTypes(DG, Types...)() { return is(DG == delegate) && is(ReturnType!DG == int) && is(Parameters!DG == Types); diff --git a/tests/access_perf.d b/tests/access_perf.d index 36da0c0..b1b16bf 100644 --- a/tests/access_perf.d +++ b/tests/access_perf.d @@ -65,7 +65,7 @@ void beforeEveryTest() gEM.endRegister(); - tmpl = gEM.allocateTemplate([CLong.component_id, CInt.component_id, CUInt.component_id, CBig.component_id].staticArray); + tmpl = gEM.allocateTemplate([becsID!CLong, becsID!CInt, becsID!CUInt, becsID!CBig].staticArray); foreach(i; 0 .. 100_000)gEM.addEntity(tmpl); } diff --git a/tests/basic.d b/tests/basic.d index bcea918..026fe20 100644 --- a/tests/basic.d +++ b/tests/basic.d @@ -115,7 +115,7 @@ struct EmptySystem void beforeEveryTest() { - CUnregistered.component_id = ushort.max; + becsID!CUnregistered = ushort.max; gEM.initialize(0); gEM.beginRegister(); @@ -138,18 +138,18 @@ void afterEveryTest() @("EntityMeta") unittest { - EntityTemplate* tmpl_ = gEM.allocateTemplate([CInt.component_id, CFloat.component_id, CFlag.component_id].staticArray); + EntityTemplate* tmpl_ = gEM.allocateTemplate([becsID!CInt, becsID!CFloat, becsID!CFlag].staticArray); scope(exit)gEM.freeTemplate(tmpl_); Entity* entity = gEM.addEntity(tmpl_); EntityMeta meta = entity.getMeta(); - assert(meta.hasComponent(CInt.component_id)); + assert(meta.hasComponent(becsID!CInt)); assert(meta.getComponent!CInt); - assert(meta.hasComponent(CFloat.component_id)); + assert(meta.hasComponent(becsID!CFloat)); assert(meta.getComponent!CFloat); assert(!meta.getComponent!CLong); - assert(!meta.hasComponent(CLong.component_id)); + assert(!meta.hasComponent(becsID!CLong)); assert(!meta.getComponent!CUnregistered); - assert(!meta.hasComponent(CUnregistered.component_id)); + assert(!meta.hasComponent(becsID!CUnregistered)); assert(*meta.getComponent!CInt == 1); assert(*meta.getComponent!CFloat == 2.0); } @@ -157,7 +157,7 @@ unittest @("AddEntity") unittest { - EntityTemplate* tmpl_ = gEM.allocateTemplate([CInt.component_id, CFloat.component_id, CFlag.component_id].staticArray); + EntityTemplate* tmpl_ = gEM.allocateTemplate([becsID!CInt, becsID!CFloat, becsID!CFlag].staticArray); scope(exit)gEM.freeTemplate(tmpl_); assert(tmpl_.info.components.length == 3); assert(tmpl_.info.size == (CInt.sizeof + CFloat.sizeof + EntityID.sizeof)); @@ -187,8 +187,8 @@ unittest //Entity* entity3 = gEM.addEntity(tmpl_, [cint.ref_, clong.ref_].staticArray); Entity* entity3 = gEM.addEntity(tmpl_, [CInt(10).ref_, CLong().ref_, CFlag().ref_].staticArray); EntityID id = entity3.id; - assert(entity3.hasComponent(CInt.component_id)); - assert(entity3.hasComponent(CFloat.component_id)); + assert(entity3.hasComponent(becsID!CInt)); + assert(entity3.hasComponent(becsID!CFloat)); assert(*entity3.getComponent!CInt == 10); assert(*entity3.getComponent!CFloat == 2.0); @@ -203,7 +203,7 @@ unittest assert(*entity3.getComponent!CFloat == 2.0); assert(*entity3.getComponent!CShort == 2); - gEM.removeComponents(entity3.id, [CFlag().component_id,CShort(2).component_id].staticArray); + gEM.removeComponents(entity3.id, [becsID!CFlag,becsID!CShort].staticArray); gEM.commit(); entity3 = gEM.getEntity(id); assert(entity3.getComponent!CInt); @@ -214,7 +214,7 @@ unittest assert(*entity3.getComponent!CFloat == 2.0); gEM.addComponents(entity3.id, [CFlag().ref_,CShort(2).ref_].staticArray); - gEM.removeComponents(entity3.id, [CUnregistered.component_id].staticArray); + gEM.removeComponents(entity3.id, [becsID!CUnregistered].staticArray); gEM.commit(); entity3 = gEM.getEntity(id); assert(entity3.getComponent!CInt); @@ -237,7 +237,7 @@ unittest assert(entity3.getComponent!CUnregistered); assert(*entity3.getComponent!CUnregistered == 4); - gEM.removeComponents(entity3.id, [CUnregistered.component_id].staticArray); + gEM.removeComponents(entity3.id, [becsID!CUnregistered].staticArray); gEM.commit(); entity3 = gEM.getEntity(id); assert(!entity3.getComponent!CUnregistered); @@ -249,9 +249,9 @@ unittest unittest { //basic template allocation - ushort[2] ids = [CInt.component_id, CFloat.component_id]; + ushort[2] ids = [becsID!CInt, becsID!CFloat]; EntityTemplate* tmpl_ = gEM.allocateTemplate(ids); - EntityTemplate* tmpl_d = gEM.allocateTemplate([CFloat.component_id, CInt.component_id, CFloat.component_id].staticArray); + EntityTemplate* tmpl_d = gEM.allocateTemplate([becsID!CFloat, becsID!CInt, becsID!CFloat].staticArray); EntityTemplate* tmpl_cp = gEM.allocateTemplate(tmpl_); assert(tmpl_d.info == tmpl_.info); assert(tmpl_cp.info == tmpl_cp.info); @@ -270,7 +270,7 @@ unittest *tmpl_.getComponent!CFloat = 5.0; //allocate template from template with additional components - ushort[2] ids2 = [CDouble.component_id,CFlag.component_id]; + ushort[2] ids2 = [becsID!CDouble,becsID!CFlag]; EntityTemplate* tmpl_2 = gEM.allocateTemplate(tmpl_, ids2); assert(tmpl_2.info.components.length == 4); assert(tmpl_2.getComponent!CInt); @@ -315,7 +315,7 @@ unittest assert(*tmpl_4.getComponent!CDouble == 3.0); //allocate template from template with three additional component - ushort[3] ids3 = [CDouble.component_id, CLong.component_id, CShort.component_id]; + ushort[3] ids3 = [becsID!CDouble, becsID!CLong, becsID!CShort]; EntityTemplate* tmpl_5 = gEM.allocateTemplate(tmpl_2, ids3); assert(tmpl_5.info.components.length == 6); assert(tmpl_5.getComponent!CInt); @@ -330,7 +330,7 @@ unittest assert(*tmpl_5.getComponent!CShort == 12); //allocate template from template without one component - ushort[1] rem_ids = [CFloat.component_id]; + ushort[1] rem_ids = [becsID!CFloat]; EntityTemplate* tmpl_6 = gEM.allocateTemplate(tmpl_, null, rem_ids); assert(tmpl_6.info.components.length == 1); assert(tmpl_6.getComponent!CInt); @@ -361,8 +361,8 @@ unittest unittest { //basic template allocation - ushort[2] ids = [CFloat.component_id, CInt.component_id]; - ushort[2] ids2 = [CInt.component_id, CFloat.component_id]; + ushort[2] ids = [becsID!CFloat, becsID!CInt]; + ushort[2] ids2 = [becsID!CInt, becsID!CFloat]; EntityTemplate* tmpl_ = gEM.allocateTemplate(ids); EntityTemplate* tmpl_2 = gEM.allocateTemplate(ids2); assert(tmpl_.info.components.length == 2); @@ -403,9 +403,9 @@ unittest assert(system !is null); assert(system.count == 0); - System* ecs_system = gEM.getSystem(EmptySystem.system_id); + System* ecs_system = gEM.getSystem(becsID!EmptySystem); assert(ecs_system !is null); - assert(ecs_system.id == EmptySystem.system_id); + assert(ecs_system.id == becsID!EmptySystem); assert(ecs_system.name == "tests.basic.EmptySystem"); gEM.begin(); @@ -507,7 +507,7 @@ unittest //FIXME: currently destroy is only called with Manager.destory which is bug, but there is no workaround for this by now //assert(destroy == 1); - System* ecs_system = gEM.getSystem(system.system_id); + System* ecs_system = gEM.getSystem(system.becsID); ecs_system.enable(); assert(system.enable == 1); @@ -518,7 +518,7 @@ unittest assert(system.disable == 1); - ushort[2] ids = [CLong.component_id,CFloat.component_id]; + ushort[2] ids = [becsID!CLong,becsID!CFloat]; EntityTemplate* tmpl = gEM.allocateTemplate(ids); scope (exit) gEM.freeTemplate(tmpl); gEM.addEntity(tmpl); @@ -532,7 +532,7 @@ unittest gEM.end(); assert(system.end == 1); - ushort[2] ids2 = [CLong.component_id, CInt.component_id]; + ushort[2] ids2 = [becsID!CLong, becsID!CInt]; EntityTemplate* tmpl2 = gEM.allocateTemplate(ids2); scope (exit) gEM.freeTemplate(tmpl2); gEM.addEntity(tmpl2); @@ -547,7 +547,7 @@ unittest gEM.end(); assert(system.end == 2); - ushort[2] ids3 = [CLong.component_id, CShort.component_id]; + ushort[2] ids3 = [becsID!CLong, becsID!CShort]; EntityTemplate* tmpl3 = gEM.allocateTemplate(ids3); scope (exit) gEM.freeTemplate(tmpl3); gEM.addEntity(tmpl3); @@ -606,13 +606,13 @@ unittest assert(system !is null); assert(system.updates_count == 0); - System* ecs_system = gEM.getSystem(LongAddSystem.system_id); + System* ecs_system = gEM.getSystem(becsID!LongAddSystem); assert(ecs_system !is null); - assert(ecs_system.id == LongAddSystem.system_id); + assert(ecs_system.id == becsID!LongAddSystem); assert(ecs_system.priority == -1); assert(ecs_system.name == "tests.basic.LongAddSystem"); - ushort[1] ids = [CLong.component_id]; + ushort[1] ids = [becsID!CLong]; EntityTemplate* tmpl = gEM.allocateTemplate(ids); scope (exit) gEM.freeTemplate(tmpl); gEM.addEntity(tmpl); @@ -762,19 +762,19 @@ unittest assert(system.remove == 0); assert(system.change == 0); - EntityTemplate* tmpl = gEM.allocateTemplate([CLong.component_id,CFloat.component_id].staticArray); + EntityTemplate* tmpl = gEM.allocateTemplate([becsID!CLong,becsID!CFloat].staticArray); scope (exit) gEM.freeTemplate(tmpl); EntityID id0 = gEM.addEntity(tmpl).id; gEM.commit(); assert(system.add == 1); - EntityTemplate* tmpl2 = gEM.allocateTemplate([CLong.component_id, CInt.component_id].staticArray); + EntityTemplate* tmpl2 = gEM.allocateTemplate([becsID!CLong, becsID!CInt].staticArray); scope (exit) gEM.freeTemplate(tmpl2); EntityID id1 = gEM.addEntity(tmpl2).id; gEM.commit(); assert(system.add == 2); - EntityTemplate* tmpl3 = gEM.allocateTemplate([CLong.component_id, CShort.component_id].staticArray); + EntityTemplate* tmpl3 = gEM.allocateTemplate([becsID!CLong, becsID!CShort].staticArray); scope (exit) gEM.freeTemplate(tmpl3); EntityID id2 = gEM.addEntity(tmpl3).id; gEM.commit(); @@ -783,19 +783,19 @@ unittest gEM.beginRegister(); gEM.endRegister(); - gEM.removeComponents(id0, [CFloat.component_id].staticArray); + gEM.removeComponents(id0, [becsID!CFloat].staticArray); gEM.commit(); assert(system.add == 2); assert(system.remove == 0); assert(system.change == 0); - gEM.removeComponents(id1, [CInt.component_id].staticArray); + gEM.removeComponents(id1, [becsID!CInt].staticArray); gEM.commit(); assert(system.add == 2); assert(system.remove == 0); assert(system.change == 1); - gEM.removeComponents(id2, [CShort.component_id].staticArray); + gEM.removeComponents(id2, [becsID!CShort].staticArray); gEM.commit(); assert(system.add == 3); assert(system.remove == 0); @@ -894,7 +894,7 @@ unittest } assert(gEM.getSystem!TestSystem is null); - assert(gEM.getSystem(TestSystem.system_id) is null); + assert(gEM.getSystem(becsID!TestSystem) is null); } @("MultithreadedUpdate") @@ -966,10 +966,10 @@ unittest TestSystem* system = gEM.getSystem!TestSystem; TestEmptySystem* empty_system = gEM.getSystem!TestEmptySystem; - ushort[2] ids = [CLong.component_id,CFloat.component_id]; + ushort[2] ids = [becsID!CLong,becsID!CFloat]; EntityTemplate* tmpl = gEM.allocateTemplate(ids); scope (exit) gEM.freeTemplate(tmpl); - EntityTemplate* tmpl2 = gEM.allocateTemplate([CLong.component_id,CInt.component_id,CShort.component_id,CFloat.component_id].staticArray); + EntityTemplate* tmpl2 = gEM.allocateTemplate([becsID!CLong,becsID!CInt,becsID!CShort,becsID!CFloat].staticArray); scope (exit) gEM.freeTemplate(tmpl2); gEM.begin(); @@ -1064,7 +1064,7 @@ unittest @("AddRemoveEntities") unittest { - ushort[3] ids = [CLong.component_id,CFloat.component_id,CShort.component_id]; + ushort[3] ids = [becsID!CLong,becsID!CFloat,becsID!CShort]; EntityTemplate* tmpl = gEM.allocateTemplate(ids); scope (exit) gEM.freeTemplate(tmpl); @@ -1094,7 +1094,7 @@ unittest gEM.endRegister(); - ushort[1] ids = [CLong.component_id]; + ushort[1] ids = [becsID!CLong]; EntityTemplate* tmpl = gEM.allocateTemplate(ids); scope (exit) gEM.freeTemplate(tmpl); @@ -1123,7 +1123,7 @@ unittest assert(*entity.getComponent!CShort == 15); assert(*entity.getComponent!CFloat == 13); - ushort[3] ids2 = [CFloat.component_id, CLong.component_id, CUnregistered.component_id]; + ushort[3] ids2 = [becsID!CFloat, becsID!CLong, becsID!CUnregistered]; gEM.removeComponents(id, ids2); gEM.commit(); @@ -1166,12 +1166,12 @@ unittest { struct ETest { - mixin ECS.Event; + // mixin ECS.Event; } struct ETest2 { - mixin ECS.Event; + // mixin ECS.Event; void onDestroy() { @@ -1258,10 +1258,10 @@ unittest gEM.endRegister(); - ushort[1] ids = [CLong.component_id]; + ushort[1] ids = [becsID!CLong]; EntityTemplate* tmpl = gEM.allocateTemplate(ids); scope (exit) gEM.freeTemplate(tmpl); - ushort[1] ids2 = [CShort.component_id]; + ushort[1] ids2 = [becsID!CShort]; EntityTemplate* tmpl2 = gEM.allocateTemplate(ids2); scope (exit) gEM.freeTemplate(tmpl2); @@ -1353,11 +1353,11 @@ unittest gEM.endRegister(); - EntityTemplate* tmpl = gEM.allocateTemplate([CInt.component_id].staticArray); + EntityTemplate* tmpl = gEM.allocateTemplate([becsID!CInt].staticArray); scope (exit) gEM.freeTemplate(tmpl); EntityID id1 = gEM.addEntity(tmpl).id; - EntityTemplate* tmpl2 = gEM.allocateTemplate([CInt.component_id, CLong.component_id].staticArray); + EntityTemplate* tmpl2 = gEM.allocateTemplate([becsID!CInt, becsID!CLong].staticArray); scope (exit) gEM.freeTemplate(tmpl2); EntityID id2 = gEM.addEntity(tmpl2).id; @@ -1476,22 +1476,22 @@ unittest const (EntityManager.UpdatePass)* pass = gEM.getPass("update"); assert(pass != null); assert(pass.system_callers.length == 5); - assert(pass.system_callers[0].system_id == TestSystem.system_id); - assert(pass.system_callers[1].system_id == TestSystem2.system_id); - assert(pass.system_callers[2].system_id == TestSystem3.system_id); - assert(pass.system_callers[3].system_id == TestSystem4.system_id); - assert(pass.system_callers[4].system_id == TestSystem5.system_id); + assert(pass.system_callers[0].system_id == becsID!TestSystem); + assert(pass.system_callers[1].system_id == becsID!TestSystem2); + assert(pass.system_callers[2].system_id == becsID!TestSystem3); + assert(pass.system_callers[3].system_id == becsID!TestSystem4); + assert(pass.system_callers[4].system_id == becsID!TestSystem5); assert(pass.system_callers[0].dependencies.length == 0); assert(pass.system_callers[1].dependencies.length == 1); assert(pass.system_callers[2].dependencies.length == 1); assert(pass.system_callers[3].dependencies.length == 3); assert(pass.system_callers[4].dependencies.length == 1); - assert(pass.system_callers[1].dependencies[0].system_id == TestSystem.system_id); - assert(pass.system_callers[2].dependencies[0].system_id == TestSystem2.system_id); - assert(pass.system_callers[3].dependencies[0].system_id == TestSystem.system_id); - assert(pass.system_callers[3].dependencies[1].system_id == TestSystem2.system_id); - assert(pass.system_callers[3].dependencies[2].system_id == TestSystem3.system_id); - assert(pass.system_callers[4].dependencies[0].system_id == TestSystem4.system_id); + assert(pass.system_callers[1].dependencies[0].system_id == becsID!TestSystem); + assert(pass.system_callers[2].dependencies[0].system_id == becsID!TestSystem2); + assert(pass.system_callers[3].dependencies[0].system_id == becsID!TestSystem); + assert(pass.system_callers[3].dependencies[1].system_id == becsID!TestSystem2); + assert(pass.system_callers[3].dependencies[2].system_id == becsID!TestSystem3); + assert(pass.system_callers[4].dependencies[0].system_id == becsID!TestSystem4); } @("ExternalSystemDependencies") @@ -1603,23 +1603,23 @@ unittest const (EntityManager.UpdatePass)* pass = gEM.getPass("update"); assert(pass != null); assert(pass.system_callers.length == 5); - assert(pass.system_callers[0].system_id == TestSystem.system_id); - assert(pass.system_callers[1].system_id == TestSystem2.system_id); - assert(pass.system_callers[2].system_id == TestSystem3.system_id); - assert(pass.system_callers[3].system_id == TestSystem4.system_id); - assert(pass.system_callers[4].system_id == TestSystem5.system_id); + assert(pass.system_callers[0].system_id == becsID!TestSystem); + assert(pass.system_callers[1].system_id == becsID!TestSystem2); + assert(pass.system_callers[2].system_id == becsID!TestSystem3); + assert(pass.system_callers[3].system_id == becsID!TestSystem4); + assert(pass.system_callers[4].system_id == becsID!TestSystem5); assert(pass.system_callers[0].dependencies.length == 0); assert(pass.system_callers[1].dependencies.length == 1); assert(pass.system_callers[2].dependencies.length == 1); assert(pass.system_callers[3].dependencies.length == 3); assert(pass.system_callers[4].dependencies.length == 2); - assert(pass.system_callers[1].dependencies[0].system_id == TestSystem.system_id); - assert(pass.system_callers[2].dependencies[0].system_id == TestSystem2.system_id); - assert(pass.system_callers[3].dependencies[0].system_id == TestSystem.system_id); - assert(pass.system_callers[3].dependencies[1].system_id == TestSystem2.system_id); - assert(pass.system_callers[3].dependencies[2].system_id == TestSystem3.system_id); - assert(pass.system_callers[4].dependencies[0].system_id == TestSystem2.system_id); - assert(pass.system_callers[4].dependencies[1].system_id == TestSystem4.system_id); + assert(pass.system_callers[1].dependencies[0].system_id == becsID!TestSystem); + assert(pass.system_callers[2].dependencies[0].system_id == becsID!TestSystem2); + assert(pass.system_callers[3].dependencies[0].system_id == becsID!TestSystem); + assert(pass.system_callers[3].dependencies[1].system_id == becsID!TestSystem2); + assert(pass.system_callers[3].dependencies[2].system_id == becsID!TestSystem3); + assert(pass.system_callers[4].dependencies[0].system_id == becsID!TestSystem2); + assert(pass.system_callers[4].dependencies[1].system_id == becsID!TestSystem4); } @@ -1641,11 +1641,11 @@ unittest bool filterEntity(EntityManager.EntityInfo* info) { - if(!info.hasComponent(CInt.component_id))return false; + if(!info.hasComponent(becsID!CInt))return false; int one_from = 0; - if(info.hasComponent(CLong.component_id))one_from++; - if(info.hasComponent(CFloat.component_id))one_from++; - if(info.hasComponent(CDouble.component_id))one_from++; + if(info.hasComponent(becsID!CLong))one_from++; + if(info.hasComponent(becsID!CFloat))one_from++; + if(info.hasComponent(becsID!CDouble))one_from++; if(one_from == 1)return true; return false; } @@ -1673,8 +1673,8 @@ unittest bool filterEntity(EntityManager.EntityInfo* info) { - if(info.hasComponent(CInt.component_id) && info.hasComponent(CFloat.component_id) && !info.hasComponent(CLong.component_id) && !info.hasComponent(CDouble.component_id))return true; - if(info.hasComponent(CLong.component_id) && info.hasComponent(CDouble.component_id) && !info.hasComponent(CInt.component_id) && !info.hasComponent(CFloat.component_id))return true; + if(info.hasComponent(becsID!CInt) && info.hasComponent(becsID!CFloat) && !info.hasComponent(becsID!CLong) && !info.hasComponent(becsID!CDouble))return true; + if(info.hasComponent(becsID!CLong) && info.hasComponent(becsID!CDouble) && !info.hasComponent(becsID!CInt) && !info.hasComponent(becsID!CFloat))return true; return false; } @@ -1694,17 +1694,17 @@ unittest gEM.endRegister(); - EntityTemplate* tmpl_ = gEM.allocateTemplate([CInt.component_id, CLong.component_id, CFloat.component_id, CDouble.component_id].staticArray); + EntityTemplate* tmpl_ = gEM.allocateTemplate([becsID!CInt, becsID!CLong, becsID!CFloat, becsID!CDouble].staticArray); scope(exit)gEM.freeTemplate(tmpl_); - EntityTemplate* tmpl_2 = gEM.allocateTemplate([CInt.component_id, CFloat.component_id].staticArray); + EntityTemplate* tmpl_2 = gEM.allocateTemplate([becsID!CInt, becsID!CFloat].staticArray); scope(exit)gEM.freeTemplate(tmpl_2); - EntityTemplate* tmpl_3 = gEM.allocateTemplate([CLong.component_id, CDouble.component_id].staticArray); + EntityTemplate* tmpl_3 = gEM.allocateTemplate([becsID!CLong, becsID!CDouble].staticArray); scope(exit)gEM.freeTemplate(tmpl_3); - EntityTemplate* tmpl_4 = gEM.allocateTemplate([CInt.component_id, CLong.component_id, CDouble.component_id].staticArray); + EntityTemplate* tmpl_4 = gEM.allocateTemplate([becsID!CInt, becsID!CLong, becsID!CDouble].staticArray); scope(exit)gEM.freeTemplate(tmpl_4); - EntityTemplate* tmpl_5 = gEM.allocateTemplate([CInt.component_id, CDouble.component_id].staticArray); + EntityTemplate* tmpl_5 = gEM.allocateTemplate([becsID!CInt, becsID!CDouble].staticArray); scope(exit)gEM.freeTemplate(tmpl_5); - EntityTemplate* tmpl_6 = gEM.allocateTemplate([CDouble.component_id].staticArray); + EntityTemplate* tmpl_6 = gEM.allocateTemplate([becsID!CDouble].staticArray); scope(exit)gEM.freeTemplate(tmpl_6); gEM.addEntity(tmpl_); diff --git a/tests/bugs.d b/tests/bugs.d index 4c4153a..25f2ad1 100644 --- a/tests/bugs.d +++ b/tests/bugs.d @@ -21,14 +21,14 @@ unittest { struct Event1 { - mixin ECS.Event; + // mixin ECS.Event; EntityID id; } struct Event2 { - mixin ECS.Event; + // mixin ECS.Event; } struct System1 @@ -45,7 +45,7 @@ unittest void onCreate() { - tmpl = gEM.allocateTemplate([CInt.component_id, CLong.component_id].staticArray); + tmpl = gEM.allocateTemplate([becsID!CInt, becsID!CLong].staticArray); } void onDestroy() @@ -118,7 +118,7 @@ unittest gEM.endRegister(); - EntityTemplate* tmpl = gEM.allocateTemplate([CInt.component_id, CLong.component_id].staticArray); + EntityTemplate* tmpl = gEM.allocateTemplate([becsID!CInt, becsID!CLong].staticArray); EntityID id = gEM.addEntity(tmpl,[CLong(10).ref_, CInt(6).ref_].staticArray).id; EntityID id2 = gEM.addEntity(tmpl,[CInt(4).ref_].staticArray).id; gEM.freeTemplate(tmpl); @@ -126,13 +126,13 @@ unittest gEM.sendEvent(id2, Event1(id)); - gEM.getSystem(System2.system_id).disable(); + gEM.getSystem(becsID!System2).disable(); gEM.begin(); gEM.update(); gEM.end(); - gEM.getSystem(System2.system_id).enable(); + gEM.getSystem(becsID!System2).enable(); gEM.begin(); gEM.update(); diff --git a/tests/perf.d b/tests/perf.d index b6a2692..cc6be94 100644 --- a/tests/perf.d +++ b/tests/perf.d @@ -86,22 +86,22 @@ void afterEveryTest() void smallTmpl() { - tmpl = gEM.allocateTemplate([CShort.component_id].staticArray); + tmpl = gEM.allocateTemplate([becsID!CShort].staticArray); } void bigTmpl() { - tmpl = gEM.allocateTemplate([CBig.component_id].staticArray); + tmpl = gEM.allocateTemplate([becsID!CBig].staticArray); } void multiSmallTmpl() { - tmpl = gEM.allocateTemplate([CShort.component_id, CLong.component_id, CInt.component_id, CUInt.component_id].staticArray); + tmpl = gEM.allocateTemplate([becsID!CShort, becsID!CLong, becsID!CInt, becsID!CUInt].staticArray); } void multiBigTmpl() { - tmpl = gEM.allocateTemplate([CLong.component_id, CInt.component_id, CUInt.component_id, CBig.component_id].staticArray); + tmpl = gEM.allocateTemplate([becsID!CLong, becsID!CInt, becsID!CUInt, becsID!CBig].staticArray); } @("AddEntities100k1comp2b") @(before, &smallTmpl) @@ -138,25 +138,25 @@ void allocDealloc100k() void smallTmplPreAlloc() { - tmpl = gEM.allocateTemplate([CShort.component_id].staticArray); + tmpl = gEM.allocateTemplate([becsID!CShort].staticArray); allocDealloc100k(); } void bigTmplPreAlloc() { - tmpl = gEM.allocateTemplate([CBig.component_id].staticArray); + tmpl = gEM.allocateTemplate([becsID!CBig].staticArray); allocDealloc100k(); } void multiSmallTmplPreAlloc() { - tmpl = gEM.allocateTemplate([CShort.component_id, CLong.component_id, CInt.component_id, CUInt.component_id].staticArray); + tmpl = gEM.allocateTemplate([becsID!CShort, becsID!CLong, becsID!CInt, becsID!CUInt].staticArray); allocDealloc100k(); } void multiBigTmplPreAlloc() { - tmpl = gEM.allocateTemplate([CLong.component_id, CInt.component_id, CUInt.component_id, CBig.component_id].staticArray); + tmpl = gEM.allocateTemplate([becsID!CLong, becsID!CInt, becsID!CUInt, becsID!CBig].staticArray); allocDealloc100k(); }