From bfc0da47e495e7d7e62910d8a95b3c115d01c65b Mon Sep 17 00:00:00 2001 From: Mergul Date: Fri, 22 May 2020 15:58:35 +0200 Subject: [PATCH] SpaceShip demo updage -Update sprites texture atlas -added support for separate collider and graphical scale -weapon now can be located on specific sprite relative position -SpaceShip has two lasers which are separate entities -added following parent system -added Boss -parent destroy children after being destroyed -added towers (Tower consist of 3 entities, parent take damage and one is weapon) - added targeting system which rotate entity to target --- demos/assets/textures/atlas.png | Bin 35204 -> 41948 bytes demos/source/demos/space_invaders.d | 869 ++++++++++++++++++++++++---- 2 files changed, 772 insertions(+), 97 deletions(-) diff --git a/demos/assets/textures/atlas.png b/demos/assets/textures/atlas.png index 1e269e513e42c5dc797f568af05816d2562995f0..a799eb7706feddc336f6f1e6e75f780dcbea5467 100644 GIT binary patch literal 41948 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 literal 35204 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

-U`yoWDlL!y69I7g$; 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 space_invaders.map_size.x) + { + if(data.side_move[i].group == -1) + { + if(data.velocity[i].x > 0)data.velocity[i].x = -data.velocity[i].x; + } + else + { + groups_directions[data.side_move[i].group] = Direction.left; + } + } + } + } else { foreach(i;0..data.length) @@ -1024,38 +1472,9 @@ INFO: Uniform block alig groups_directions[data.side_move[i].group] = Direction.left; } } - //if(data.locations[i].y < 0) data.locations[i].y = 0; - //else if(data.locations[i].y > space_invaders.map_size.y)data.locations[i].y = space_invaders.map_size.y; } } } - - /*void handleEvent(Entity* entity, EChangeDirection event) - { - CSideMove* side_move = entity.getComponent!CSideMove; - if(side_move && side_move.group != -1) - { - groups_directions[side_move.group] = event.direction; - return; - } - //Entity* entity = launcher.manager.getEntity(event.entity_id); - CVelocity* velocity = entity.getComponent!CVelocity; - final switch(event.direction) - { - case Direction.up: - if(velocity.value.y > 0)velocity.value.y = -velocity.value.y; - break; - case Direction.down: - if(velocity.value.y < 0)velocity.value.y = -velocity.value.y; - break; - case Direction.left: - if(velocity.value.x > 0)velocity.value.x = -velocity.value.x; - break; - case Direction.right: - if(velocity.value.x < 0)velocity.value.x = -velocity.value.x; - break; - } - }*/ } struct HitMarkingSystem @@ -1101,7 +1520,7 @@ struct HitPointsSystem { upgrade_tmpl = launcher.manager.allocateTemplate([CVelocity.component_id, CLocation.component_id, CTexture.component_id, CScale.component_id, CUpgrade.component_id, CAnimation.component_id, CAnimationLooped.component_id].staticArray); CTexture* tex_comp = upgrade_tmpl.getComponent!CTexture; - tex_comp.tex = space_invaders.texture;//ship_tex; + //tex_comp.tex = space_invaders.texture;//ship_tex; tex_comp.coords = vec4(0*px,32*px,16*px,16*px); *upgrade_tmpl.getComponent!CAnimation = CAnimation(upgrade_laser_frames, 0, 1); CVelocity* vel_comp = upgrade_tmpl.getComponent!CVelocity; @@ -1109,7 +1528,7 @@ struct HitPointsSystem upgrade_location = upgrade_tmpl.getComponent!CLocation; explosion_tmpl = launcher.manager.allocateTemplate([CDepth.component_id, CParticle.component_id, CLocation.component_id, CTexture.component_id, CScale.component_id, CAnimation.component_id].staticArray); - explosion_tmpl.getComponent!(CTexture).tex = space_invaders.texture; + //explosion_tmpl.getComponent!(CTexture).tex = space_invaders.texture; *explosion_tmpl.getComponent!CAnimation = CAnimation(explosion_laser_frames, 0, 1.333); explosion_tmpl.getComponent!(CParticle).life = 600; *explosion_tmpl.getComponent!CDepth = -1; @@ -1156,6 +1575,47 @@ struct HitPointsSystem } } +struct ChildDestroySystem +{ + mixin ECS.System; + + struct EntitiesData + { + CTargetPartent[] parent; + } + + void handleEvent(Entity* entity, EDeath event) + { + CTargetPartent* parent = entity.getComponent!CTargetPartent; + if(parent) + { + launcher.manager.sendEvent(parent.parent, EDestroyedChild(entity.id)); + } + } +} + +struct PartsDestroySystem +{ + mixin ECS.System; + + struct EntitiesData + { + CInit[] init; + CChildren[] children; + CParts[] parts; + } + + void handleEvent(Entity* entity, EDestroyedChild event) + { + CParts* parts = entity.getComponent!CParts; + parts.count--; + if(parts.count == 0) + { + launcher.manager.addComponents(entity.id, CHitPoints(100), CShootGrid()); + } + } +} + struct ClampPositionSystem { mixin ECS.System!32; @@ -1168,7 +1628,10 @@ struct ClampPositionSystem //components are treated as required by default CLocation[] locations; + @optional @readonly CColliderScale[] collider_scale; + @optional @readonly CScale[] scale; @optional const (CLaser)[] laser; + @optional const (CUpgrade)[] upgrade; //@optional CVelocity[] velocity; //@optional const (CSideMove)[] side_move; } @@ -1177,7 +1640,7 @@ struct ClampPositionSystem void onUpdate(EntitiesData data) { - if(data.laser) + if(data.laser || data.upgrade) { foreach(i;0..data.length) { @@ -1219,6 +1682,28 @@ struct ClampPositionSystem else if(data.locations[i].y > space_invaders.map_size.y)data.locations[i].y = space_invaders.map_size.y; } }*/ + else if(data.collider_scale) + { + foreach(i;0..data.length) + { + vec2 hscale = data.collider_scale[i] * 0.5; + if(data.locations[i].x - hscale.x < 0)data.locations[i].x = hscale.x; + else if(data.locations[i].x + hscale.x > space_invaders.map_size.x)data.locations[i].x = space_invaders.map_size.x - hscale.x; + if(data.locations[i].y - hscale.y < 0)data.locations[i].y = hscale.y; + else if(data.locations[i].y + hscale.y > space_invaders.map_size.y)data.locations[i].y = space_invaders.map_size.y - hscale.y; + } + } + else if(data.scale) + { + foreach(i;0..data.length) + { + vec2 hscale = data.scale[i] * 0.5; + if(data.locations[i].x - hscale.x < 0)data.locations[i].x = hscale.x; + else if(data.locations[i].x + hscale.x > space_invaders.map_size.x)data.locations[i].x = space_invaders.map_size.x - hscale.x; + if(data.locations[i].y - hscale.y < 0)data.locations[i].y = hscale.y; + else if(data.locations[i].y + hscale.y > space_invaders.map_size.y)data.locations[i].y = space_invaders.map_size.y - hscale.y; + } + } else { foreach(i;0..data.length) @@ -1317,7 +1802,116 @@ struct ParticleSystem } } +struct RotateToTargetSystem +{ + mixin ECS.System!32; + + struct EntitiesData + { + int length; + @readonly CTarget[] target; + @readonly CLocation[] location; + CRotation[] rotation; + } + + void onUpdate(EntitiesData data) + { + foreach(i;0..data.length) + { + Entity* target = launcher.manager.getEntity(data.target[i].target); + if(target) + { + CLocation* target_loc = target.getComponent!CLocation; + if(target_loc) + { + vec2 rel_pos = target_loc.value - data.location[i]; + float length = sqrtf(rel_pos.x*rel_pos.x + rel_pos.y*rel_pos.y); + if(rel_pos.x > 0)data.rotation[i] = acosf(rel_pos.y/length); + else data.rotation[i] = 2 * PI - acosf(rel_pos.y/length); + + } + } + //CLocation* target_loc = + //vec2 rel_pos = d + //data.rotation = 0; + } + } +} + +struct ShipTargetSystem +{ + mixin ECS.System!32; + + struct EntitiesData + { + int length; + @readonly CTargetPlayerShip[] target_player; + CTarget[] target; + } + + EntityID player_ship; + + void iterateShips(CShipIterator.EntitiesData data) + { + player_ship = data.entity[0].id; + } + + void onAddEntity(EntitiesData data) + { + foreach(i;0..data.length) + { + data.target[i].target = player_ship; + } + } + + bool onBegin() + { + Entity* ship = launcher.manager.getEntity(player_ship); + if(ship is null) + { + launcher.manager.callEntitiesFunction!CShipIterator(&iterateShips); + ship = launcher.manager.getEntity(player_ship); + if(ship is null)return false; + return true; + } + return false; + } + + void onUpdate(EntitiesData data) + { + foreach(i;0..data.length) + { + data.target[i].target = player_ship; + } + } +} + +struct CShipIterator +{ + mixin ECS.System!1; + + struct EntitiesData + { + @readonly Entity[] entity; + @readonly CShip[] ship; + } + + bool onBegin() + { + return false; + } + + void onUpdate(EntitiesData data) + { + + } +} + extern(C) float sqrtf(float x) @nogc nothrow @system; +extern(C) float acosf(float x) @nogc nothrow @system; +extern(C) float sinf(float x) @nogc nothrow @system; +extern(C) float cosf(float x) @nogc nothrow @system; +extern(C) float powf(float x, float y) @nogc nothrow @system; /** *System is responsible for movement of objects with CInput component. @@ -1455,11 +2049,23 @@ void spaceInvadersStart() launcher.manager.registerComponent!CRotation; launcher.manager.registerComponent!CAnimationLooped; launcher.manager.registerComponent!CDamping; + launcher.manager.registerComponent!CTargetPartent; + launcher.manager.registerComponent!CTarget; + launcher.manager.registerComponent!CTargetPlayerShip; + launcher.manager.registerComponent!CChildren; + launcher.manager.registerComponent!CWeaponLocation; + launcher.manager.registerComponent!CInit; + launcher.manager.registerComponent!CBoss; + launcher.manager.registerComponent!CParts; + launcher.manager.registerComponent!CColliderScale; + launcher.manager.registerComponent!CParticleEmitter; + launcher.manager.registerComponent!CParticleEmitterTime; launcher.manager.registerEvent!EChangeDirection; launcher.manager.registerEvent!EDamage; launcher.manager.registerEvent!EUpgrade; launcher.manager.registerEvent!EDeath; + launcher.manager.registerEvent!EDestroyedChild; //launcher.manager.registerSystem!MoveSystem(0); launcher.manager.registerSystem!DrawSystem(100); @@ -1478,7 +2084,16 @@ void spaceInvadersStart() launcher.manager.registerSystem!ParticleSystem(-100); launcher.manager.registerSystem!AnimationSystem(-100); launcher.manager.registerSystem!DampingSystem(-101); - + launcher.manager.registerSystem!MoveToParentTargetSystem(99); + launcher.manager.registerSystem!ParentOwnerSystem(-101); + launcher.manager.registerSystem!ShipWeaponSystem(-100); + + launcher.manager.registerSystem!RotateToTargetSystem(-100); + launcher.manager.registerSystem!ShipTargetSystem(-110); + launcher.manager.registerSystem!CShipIterator(-100); + launcher.manager.registerSystem!PartsDestroySystem(-80); + launcher.manager.registerSystem!ChildDestroySystem(-110); + launcher.manager.endRegister(); launcher.gui_manager.addSystem(DrawSystem.system_id,"Draw System"); @@ -1487,28 +2102,38 @@ void spaceInvadersStart() launcher.gui_manager.addSystem(MovementSystem.system_id,"Movement 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(LaserCollisionSystem.system_id,"Draw 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 Matking 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 System"); + launcher.gui_manager.addSystem(ShipWeaponSystem.system_id,"Ship Weapon System"); //launcher.manager.getSystem(CleanSystem.system_id).disable(); { space_invaders.ship_tmpl = launcher.manager.allocateTemplate( [CVelocity.component_id, CHitMark.component_id, CHitPoints.component_id, CLocation.component_id, CTexture.component_id, CInput.component_id, - CShip.component_id, CScale.component_id, CLaserWeapon.component_id, + CShip.component_id, CScale.component_id, CColliderScale.component_id, CShootDirection.component_id, CShootGrid.component_id, CGuild.component_id, - CDamping.component_id].staticArray + CDamping.component_id, CChildren.component_id, CInit.component_id].staticArray ); - - CScale* scale_comp = space_invaders.ship_tmpl.getComponent!CScale; - scale_comp.value = vec2(48,32); - CTexture* tex_comp = space_invaders.ship_tmpl.getComponent!CTexture; - tex_comp.tex = space_invaders.texture;//ship_tex; - tex_comp.coords = vec4(0*px,80*px,48*px,32*px); - CLocation* loc_comp = space_invaders.ship_tmpl.getComponent!CLocation; - loc_comp.value = vec2(64,64); - CLaserWeapon* weapon = space_invaders.ship_tmpl.getComponent!CLaserWeapon; - weapon.level = 3; + //CLaserWeapon* weapon = space_invaders.ship_tmpl.getComponent!CLaserWeapon; + //weapon.level = 3; + space_invaders.ship_tmpl.getComponent!CTexture().coords = vec4(0*px,80*px,48*px,32*px); + space_invaders.ship_tmpl.getComponent!CScale().value = vec2(48,32); + space_invaders.ship_tmpl.getComponent!CLocation().value = vec2(64,64); space_invaders.ship_tmpl.getComponent!CHitPoints().value = 1000; space_invaders.ship_tmpl.getComponent!CDamping().value = 7; + space_invaders.ship_tmpl.getComponent!CInit().type = CInit.Type.space_ship; + space_invaders.ship_tmpl.getComponent!CColliderScale().value = vec2(26,24); launcher.manager.addEntity(space_invaders.ship_tmpl); } @@ -1518,7 +2143,7 @@ void spaceInvadersStart() space_invaders.laser_tmpl = launcher.manager.allocateTemplate(components); CTexture* tex_comp = space_invaders.laser_tmpl.getComponent!CTexture; - tex_comp.tex = space_invaders.texture;//laser_tex; + //tex_comp.tex = 0;//space_invaders.texture;//laser_tex; tex_comp.coords = vec4(0*px,24*px,2*px,8*px); CScale* scale_comp = space_invaders.laser_tmpl.getComponent!CScale; scale_comp.value = vec2(2,8); @@ -1528,15 +2153,63 @@ void spaceInvadersStart() EntityTemplate* enemy_tmpl; EntityTemplate* grouped_tmpl; + EntityTemplate* tower_tmpl; + EntityTemplate* boss_tmpl; + //EntityTemplate* tower_weapon_tmpl; EntityID enemy_id; EntityID grouped_id; { - ushort[12] components = [CHitMark.component_id, CHitPoints.component_id, CVelocity.component_id, CAutoShoot.component_id, CLocation.component_id, CTexture.component_id, CScale.component_id, CLaserWeapon.component_id, CEnemy.component_id, CShootDirection.component_id, CShootGrid.component_id, CGuild.component_id]; - space_invaders.enemy_tmpl = launcher.manager.allocateTemplate(components); + boss_tmpl = launcher.manager.allocateTemplate( + [CHitMark.component_id, CParts.component_id, CLocation.component_id, + CTexture.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 + ); + + CTexture* tex_comp = boss_tmpl.getComponent!CTexture; + //tex_comp.tex = space_invaders.texture;//ship_tex; + tex_comp.coords = vec4(128*px,0*px,96*px,48*px); + CLocation* loc_comp = boss_tmpl.getComponent!CLocation; + loc_comp.value = vec2(64,space_invaders.map_size.y - 16); + boss_tmpl.getComponent!CGuild().guild = 1; + boss_tmpl.getComponent!CInit().type = CInit.Type.boss; + boss_tmpl.getComponent!CScale().value = vec2(96,48); + boss_tmpl.getComponent!CDepth().depth = -1; + boss_tmpl.getComponent!CParts().count = 4; + boss_tmpl.getComponent!CVelocity().value = vec2(0.05,0); + } + + { + tower_tmpl = launcher.manager.allocateTemplate( + [CHitMark.component_id, CHitPoints.component_id, CLocation.component_id, + CTexture.component_id, CScale.component_id, CEnemy.component_id, + CShootGrid.component_id, CGuild.component_id, CInit.component_id, + CChildren.component_id].staticArray + ); + + CTexture* tex_comp = tower_tmpl.getComponent!CTexture; + //tex_comp.tex = space_invaders.texture;//ship_tex; + tex_comp.coords = vec4(96*px,96*px,16*px,16*px); + CLocation* loc_comp = tower_tmpl.getComponent!CLocation; + loc_comp.value = vec2(64,space_invaders.map_size.y - 16); + tower_tmpl.getComponent!CGuild().guild = 1; + tower_tmpl.getComponent!CInit().type = CInit.Type.tower; + tower_tmpl.getComponent!CHitPoints().value = 10; + } + + { + space_invaders.enemy_tmpl = launcher.manager.allocateTemplate( + [CWeaponLocation.component_id, CHitMark.component_id, CHitPoints.component_id, + CVelocity.component_id, CAutoShoot.component_id, CLocation.component_id, + CTexture.component_id, CScale.component_id, CLaserWeapon.component_id, + CEnemy.component_id, CShootDirection.component_id, CShootGrid.component_id, + CGuild.component_id].staticArray + ); CTexture* tex_comp = space_invaders.enemy_tmpl.getComponent!CTexture; - tex_comp.tex = space_invaders.texture;//ship_tex; + //tex_comp.tex = space_invaders.texture;//ship_tex; tex_comp.coords = vec4(32*px,32*px,16*px,16*px); CLocation* loc_comp = space_invaders.enemy_tmpl.getComponent!CLocation; loc_comp.value = vec2(64,space_invaders.map_size.y - 16); @@ -1545,6 +2218,7 @@ void spaceInvadersStart() CVelocity* vel_comp = space_invaders.enemy_tmpl.getComponent!CVelocity; vel_comp.value = vec2(0.1,0); space_invaders.enemy_tmpl.getComponent!CGuild().guild = 1; + space_invaders.enemy_tmpl.getComponent!CWeaponLocation().rel_pos = vec2(0,-15); Entity* current_entity; @@ -1568,13 +2242,13 @@ void spaceInvadersStart() grouped_id = current_entity.id; //grouped_tmpl = launcher.manager.allocateTemplate(current_entity.id); } - + EntityTemplate* upgrade_tmpl; { upgrade_tmpl = launcher.manager.allocateTemplate([CVelocity.component_id, CLocation.component_id, CTexture.component_id, CScale.component_id, CUpgrade.component_id, CAnimationLooped.component_id, CAnimation.component_id].staticArray); CTexture* tex_comp = upgrade_tmpl.getComponent!CTexture; - tex_comp.tex = space_invaders.texture;//ship_tex; + //tex_comp.tex = space_invaders.texture;//ship_tex; tex_comp.coords = vec4(0*px,32*px,16*px,16*px); CVelocity* vel_comp = upgrade_tmpl.getComponent!CVelocity; vel_comp.value = vec2(0,-0.1); @@ -1586,22 +2260,23 @@ void spaceInvadersStart() enemy_tmpl = launcher.manager.allocateTemplate(enemy_id); grouped_tmpl = launcher.manager.allocateTemplate(grouped_id); - launcher.gui_manager.addTemplate(launcher.manager.allocateTemplate(space_invaders.ship_tmpl),"Ship"); launcher.gui_manager.addTemplate(enemy_tmpl,"Enemy"); launcher.gui_manager.addTemplate(grouped_tmpl,"Grouped enemy"); + launcher.gui_manager.addTemplate(launcher.manager.allocateTemplate(space_invaders.ship_tmpl),"Ship"); launcher.gui_manager.addTemplate(launcher.manager.allocateTemplate(space_invaders.laser_tmpl),"Laser"); launcher.gui_manager.addTemplate(upgrade_tmpl,"Upgrade"); - + launcher.gui_manager.addTemplate(tower_tmpl,"Tower"); + launcher.gui_manager.addTemplate(boss_tmpl,"Boss"); } void spaceInvadersEnd() { - launcher.manager.getSystem(DrawSystem.system_id).disable(); + /*launcher.manager.getSystem(DrawSystem.system_id).disable(); launcher.manager.getSystem(InputMovementSystem.system_id).disable(); launcher.manager.getSystem(LaserShootingSystem.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(ShootGridCleaner.system_id).disable();*/ //launcher.manager.freeTemplate(space_invaders.enemy_tmpl); Mallocator.dispose(space_invaders);