diff options
| author | realtradam <[email protected]> | 2022-01-22 19:45:54 -0500 |
|---|---|---|
| committer | realtradam <[email protected]> | 2022-01-22 19:45:54 -0500 |
| commit | 2a0220c3dbafaca3f1b711cb77d49bb29f0e0c2e (patch) | |
| tree | d1b1fb5ef7db062dcd93a189d01494cf46aa69e9 | |
| parent | 943bffc40953b95e9d07aeda0b4b87ac7be848fd (diff) | |
| download | orc-arena-of-time-2a0220c3dbafaca3f1b711cb77d49bb29f0e0c2e.tar.gz orc-arena-of-time-2a0220c3dbafaca3f1b711cb77d49bb29f0e0c2e.zip | |
working movement
| -rw-r--r-- | main.rb | 33 | ||||
| -rw-r--r-- | src/components/player.rb | 29 | ||||
| -rw-r--r-- | src/init.rb | 6 | ||||
| -rw-r--r-- | src/loop.rb | 18 | ||||
| -rw-r--r-- | src/systems/systems.rb | 85 |
5 files changed, 113 insertions, 58 deletions
@@ -1,30 +1,5 @@ -#Rl.init_window(900, 506, 'Da Game') -puts 'before window' -Rl.init_window(900, 675, 'Da Game') - -puts 'before require' -require './src/components/player.rb' -require './src/systems/systems.rb' -puts 'after require' - -#WHITE = Rl::Color.new(255,255,255,255) -#BLACK = Rl::Color.new(0,0,0,255) -#Lautrec = Rl::Texture.new('./assets/lancelot_.png') -#Lautrec_Source = Rl::Rectangle.new(0,0,24,24) -#Position = Rl::Rectangle.new(0,0,48,48) -#Origin = Rl::Vector2.new(0,0) - -#Rl.init_audio_device if Rl.platform == 'web' - -Rl.while_window_open do - - Rl.draw(clear_color: WHITE) do - #Rl.draw_texture_pro(texture: Lautrec, origin: Origin, source: Lautrec_Source, dest: Position) - #draw_texture_pro(texture:, source:, dest:, origin: Rl::Vector.new(0,0), rotation: 0, tint: Rl::Color.new(255,255,255,255)) - puts 'start stage' - FECS::Stage.call - puts 'end stage' - end -end - +require 'src/init.rb' +require 'src/components/player.rb' +require 'src/systems/systems.rb' +require 'src/loop.rb' diff --git a/src/components/player.rb b/src/components/player.rb index 1a6e9b6..3de1b7a 100644 --- a/src/components/player.rb +++ b/src/components/player.rb @@ -1,21 +1,34 @@ FECS::Cmp.new('Player') FECS::Cmp.new('Velocity', x: 0, y: 0) FECS::Cmp.new('Position', x: 0, y: 0) +FECS::Cmp.new('Movement', deceleration: 3, acceleration: 8, max_speed: 15) FECS::Cmp.new('Sprite', :texture, :origin, :source_rect, :dest_rect, - :rotation) + :rotation, + :tint) FECS::Cmp.new('Hp', value: 0) -@player = FECS::Ent.new(FECS::Cmp::Player.new, - FECS::Cmp::Position.new, - FECS::Cmp::Velocity.new, - FECS::Cmp::Sprite.new( - texture: Rl::Texture.new('./assets/lancelot_.png'), - source_rect: Rl::Rectangle.new(0,0,24,24), - dest_rect: Rl::Rectangle.new(0,0,48,48))) +@player = FECS::Ent.new( + FECS::Cmp::Player.new, + FECS::Cmp::Position.new, + FECS::Cmp::Velocity.new, + FECS::Cmp::Sprite.new( + texture: Rl::Texture.new('./assets/lancelot_.png'), + source_rect: Rl::Rectangle.new(0,0,24,24), + dest_rect: Rl::Rectangle.new(0,0,48,48), + origin: Rl::Vector2.new(0,0), + tint: Rl::Color.new(255,255,255,255), + rotation: 0 + ), + FECS::Cmp::Movement.new( + deceleration: 1.1, + acceleration: 1.5, + max_speed: 900, + ), +) diff --git a/src/init.rb b/src/init.rb new file mode 100644 index 0000000..595e10d --- /dev/null +++ b/src/init.rb @@ -0,0 +1,6 @@ +Rl.init_window(900, 675, 'Da Game') +Rl.init_audio_device if Rl.platform == 'web' + + +WHITE = Rl::Color.new(255,255,255,255) +BLACK = Rl::Color.new(0,0,0,255) diff --git a/src/loop.rb b/src/loop.rb new file mode 100644 index 0000000..dea40a4 --- /dev/null +++ b/src/loop.rb @@ -0,0 +1,18 @@ + + +#Lautrec = Rl::Texture.new('./assets/lancelot_.png') +#Lautrec_Source = Rl::Rectangle.new(0,0,24,24) +#Position = Rl::Rectangle.new(0,0,48,48) +#Origin = Rl::Vector2.new(0,0) + + +Rl.while_window_open do + + Rl.draw(clear_color: WHITE) do + #Rl.draw_texture_pro(texture: Lautrec, origin: Origin, source: Lautrec_Source, dest: Position) + #draw_texture_pro(texture:, source:, dest:, origin: Rl::Vector.new(0,0), rotation: 0, tint: Rl::Color.new(255,255,255,255)) + FECS::Stage.call + end +end + + diff --git a/src/systems/systems.rb b/src/systems/systems.rb index 6bcffa9..824856e 100644 --- a/src/systems/systems.rb +++ b/src/systems/systems.rb @@ -2,39 +2,82 @@ FECS::Stg.add(FECS::Scn.new('Play')) FECS::Scn::Play.add( FECS::Sys.new('PlayerInput') do - puts 'start player input' ent = FECS::Cmp::Player.first.entity - velocity_component = ent.component[FECS::Cmp::Velocity] - velocity_component.x = 0 - velocity_component.y = 0 - velocity_component.y -= 10 if Rl.key_down? 87 - velocity_component.y += 10 if Rl.key_down? 83 - velocity_component.x -= 10 if Rl.key_down? 65 - velocity_component.x += 10 if Rl.key_down? 68 - puts 'end player input' + velocity_cmp = ent.component[FECS::Cmp::Velocity] + #velocity_cmp.x = 0 + #velocity_cmp.y = 0 + movement_cmp = ent.component[FECS::Cmp::Movement] + if Rl.key_down? 87 # UP W + velocity_cmp.y += movement_cmp.acceleration * Rl.frame_time + velocity_cmp.y = [velocity_cmp.y, + (movement_cmp.max_speed + movement_cmp.deceleration) * Rl.frame_time].min + end + if Rl.key_down? 83 # DOWN S + velocity_cmp.y -= movement_cmp.acceleration * Rl.frame_time + velocity_cmp.y = [velocity_cmp.y, + (-movement_cmp.max_speed - movement_cmp.deceleration) * Rl.frame_time].max + end + if Rl.key_down? 65 # LEFT A + velocity_cmp.x += movement_cmp.acceleration * Rl.frame_time + velocity_cmp.x = [velocity_cmp.x, + (movement_cmp.max_speed + movement_cmp.deceleration) * Rl.frame_time].min + end + if Rl.key_down? 68 # RIGHT D + velocity_cmp.x -= movement_cmp.acceleration * Rl.frame_time + velocity_cmp.x = [velocity_cmp.x, + (-movement_cmp.max_speed - movement_cmp.deceleration) * Rl.frame_time].max + end + if velocity_cmp.x > (movement_cmp.deceleration * Rl.frame_time) + velocity_cmp.x -= movement_cmp.deceleration * Rl.frame_time + elsif velocity_cmp.x < (-movement_cmp.deceleration * Rl.frame_time) + velocity_cmp.x += movement_cmp.deceleration * Rl.frame_time + else + velocity_cmp.x = 0 + end + if velocity_cmp.y > (movement_cmp.deceleration * Rl.frame_time) + velocity_cmp.y -= movement_cmp.deceleration * Rl.frame_time + elsif velocity_cmp.y < (-movement_cmp.deceleration * Rl.frame_time) + velocity_cmp.y += movement_cmp.deceleration * Rl.frame_time + else + velocity_cmp.y = 0 + end end, FECS::Sys.new('Movement') do - FECS::Cmp::Velocity.each do |velocity_component| - position_component = velocity_component.entity.component[FECS::Cmp::Position] - position_component.x += velocity_component.x - position_component.y += velocity_component.y + FECS::Cmp::Velocity.each do |velocity_cmp| + ent = velocity_cmp.entity + position_component = ent.component[FECS::Cmp::Position] + movement_cmp = ent.component[FECS::Cmp::Movement] + + position_component.x += velocity_cmp.x + position_component.y += velocity_cmp.y end end, - FECS::Sys.new('TakePosition') do + FECS::Sys.new('ApplyPositionToSprite') do FECS::Cmp::Position.each do |position_cmp| sprite = position_cmp.entity.component[FECS::Cmp::Sprite] if sprite - sprite.dest_rect.x = position_cmp.x - sprite.dest_rect.y = position_cmp.y + sprite.origin.x = position_cmp.x + sprite.origin.y = position_cmp.y end end end, + FECS::Sys.new('ShowSpeed') do + player = FECS::Cmp::Player.first.entity + player_accel = player.component[FECS::Cmp::Velocity].x + movement = player.component[FECS::Cmp::Movement] + max_speed = (movement.max_speed + movement.deceleration) * Rl.frame_time + + Rl.draw_text(text: "x vel: #{"%.3f" % player_accel}", x: 500, y: 0, font_size: 30, color: BLACK) + Rl.draw_text(text: "x max: #{"%.3f" % max_speed}", x: 500, y: 30, font_size: 30, color: BLACK) + end, FECS::Sys.new('Render') do FECS::Cmp::Sprite.each do |sprite_cmp| - #Rl.draw_texture_pro(texture: sprite_cmp.texture, - # origin: sprite_cmp.origin_rect, - # source_rect: sprite_cmp.source_rect, - # dest_rect: sprite_cmp.dest_rect) + Rl.draw_texture_pro(texture: sprite_cmp.texture, + origin: sprite_cmp.origin, + source_rect: sprite_cmp.source_rect, + dest_rect: sprite_cmp.dest_rect, + tint: sprite_cmp.tint, + rotation: sprite_cmp.rotation) end end, ) @@ -42,6 +85,6 @@ FECS::Scn::Play.add( FelECS::Order.sort( FECS::Sys::PlayerInput, FECS::Sys::Movement, - FECS::Sys::TakePosition, + FECS::Sys::ApplyPositionToSprite, FECS::Sys::Render, ) |
