summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorrealtradam <[email protected]>2022-01-22 19:45:54 -0500
committerrealtradam <[email protected]>2022-01-22 19:45:54 -0500
commit2a0220c3dbafaca3f1b711cb77d49bb29f0e0c2e (patch)
treed1b1fb5ef7db062dcd93a189d01494cf46aa69e9
parent943bffc40953b95e9d07aeda0b4b87ac7be848fd (diff)
downloadorc-arena-of-time-2a0220c3dbafaca3f1b711cb77d49bb29f0e0c2e.tar.gz
orc-arena-of-time-2a0220c3dbafaca3f1b711cb77d49bb29f0e0c2e.zip
working movement
-rw-r--r--main.rb33
-rw-r--r--src/components/player.rb29
-rw-r--r--src/init.rb6
-rw-r--r--src/loop.rb18
-rw-r--r--src/systems/systems.rb85
5 files changed, 113 insertions, 58 deletions
diff --git a/main.rb b/main.rb
index 2f5b14e..b99686f 100644
--- a/main.rb
+++ b/main.rb
@@ -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,
)