summaryrefslogtreecommitdiffhomepage
path: root/run.rb
diff options
context:
space:
mode:
authorrealtradam <[email protected]>2021-04-25 04:25:57 -0400
committerrealtradam <[email protected]>2021-04-25 04:25:57 -0400
commit505a4735d519253c5f173f47fbe9691bc5d9ce93 (patch)
treea3b2600a87a4285e60165728f48a346a7b05dec3 /run.rb
parent93290fb327f4dac63ac201c4c21e13c60cae0eff (diff)
downloadruby2d-camera-505a4735d519253c5f173f47fbe9691bc5d9ce93.tar.gz
ruby2d-camera-505a4735d519253c5f173f47fbe9691bc5d9ce93.zip
.
Diffstat (limited to 'run.rb')
-rw-r--r--run.rb294
1 files changed, 152 insertions, 142 deletions
diff --git a/run.rb b/run.rb
index 5554748..3899c83 100644
--- a/run.rb
+++ b/run.rb
@@ -2,223 +2,233 @@
require 'ruby2d'
require_relative 'lib/camera/camera'
-
-#set width: 700, height: 300
+require_relative 'house'
+require_relative 'room'
Window.set(icon: './assets/blobcoolthink.png',
width: 1280,
- height: 720)
+ height: 720,
+ background: 'blue')
-@background = Image.new(
- 'assets/background.png',
- x: 0, y: 0,
- width: (1920 * 0.25), height: (1080 * 0.25),
- z: -1
-)
-Camera << @background
-@line = Line.new(x1: -40,
- y1: -50,
- x2: 60,
- y2: 70,
- width: 35,
- color: 'random')
-Camera << @line
-=begin
-@player = Quad.new(x1: 0,
- y1: 0,
- x2: 0,
- y2: 0 + 25,
- x3: 0 + 25,
- y3: 0 + 25,
- x4: 0 + 25,
- y4: 0,
- size: (10..50).to_a.sample,
- color: 'blue')
-@player = Square.new(x: 0,
- y: 0,
- size: 100,
- color: 'random')
-=end
-@player = Sprite.new('./assets/sprites/blobdance.png',
- x: 0,
- y: 0,
+
+@player = Sprite.new('./assets/sprites/mainblob-128.png',
+ x: 1920 / 1.1,
+ y: 1080 / 1.1,
width: 50,
height: 50,
clip_width: 128,
loop: true,
- time: 17)
-@sprite = Sprite.new('./assets/sprites/blobdance.png',
- x: 300,
- y: 300,
- width: 100,
- height: 100,
- clip_width: 128,
- loop: true,
- time: 17)
-Camera << @sprite
-@text = Text.new('Hello',
- x: 150, y: 150,
- size: 20)
-Camera << @text
-Camera << @player
+ time: 1,
+ z: 99,
+ animations: {
+ walk: 0...60,
+ stand: 60...61
+ })
+@shadow = Image.new(
+ 'assets/blobshadow.png',
+ width: 52,
+ height: 10,
+ z: 1
+)
+Camera << @shadow
[email protected] animation: :walk, loop: true
Camera << @player
Rectangle.new(
width: 350,
height: 135,
- color: 'navy'
+ color: 'navy',
+ z: 100
)
@ui_pos_cam = Text.new(
'pos: 0,0',
x: 10,
y: 10,
- color: 'teal'
+ color: 'teal',
+ z: 101
)
@ui_pos_ply = Text.new(
'pos: 0,0',
x: 10,
y: 40,
- color: 'teal'
+ color: 'teal',
+ z: 101
)
@ui_zoom = Text.new(
'zoom: 0',
x: 10,
y: 70,
- color: 'lime'
+ color: 'lime',
+ z: 101
)
@ui_rotation = Text.new(
'rotation: 0',
x: 10,
y: 100,
- color: 'lime'
+ color: 'lime',
+ z: 101
)
Rectangle.new(
x: (Window.width - 120),
width: 120,
height: 45,
- color: 'navy'
+ color: 'navy',
+ z: 100
)
@ui_fps = Text.new(
'fps: 60.00',
x: (Window.width - 110),
y: 10,
- color: 'teal'
+ color: 'teal',
+ z: 101
)
# How fast the player can move
-@speed = 10
+@speed = 5
# Initializing
-@x_move = 0
-@y_move = 0
-@cam_x_move = 0
-@cam_y_move = 0
-@is_follow = true
-@zoom_by = 1
-@debug1 = 0
-@debug2 = 0
-@debug4 = 0
-@debug3 = 0
+player_movement_x = 0
+player_movement_y = 0
+@pressed_space = false
+@scene_transition_into = false
+@scene_transition_out = false
+@indoors = false
+@house = nil
+@room = nil
on :key do |event|
- if event.key == 'a'
- @y_move += 0
- @x_move += -@speed
- end
- if event.key == 'd'
- @y_move += 0
- @x_move += @speed
- end
if event.key == 'w'
- @y_move += -@speed
- @x_move += 0
+ player_movement_y -= @speed unless @scene_transition_into || @scene_transition_out
end
if event.key == 's'
- @y_move += @speed
- @x_move += 0
- end
- if event.key == 'j'
- @cam_x_move -= @speed
- @is_follow = false
- end
- if event.key == 'l'
- @cam_x_move += @speed
- @is_follow = false
+ player_movement_y += @speed unless @scene_transition_into || @scene_transition_out
end
- if event.key == 'i'
- @cam_y_move -= @speed
- @is_follow = false
- end
- if event.key == 'k'
- @cam_y_move += @speed
- @is_follow = false
+ if event.key == 'd'
+ player_movement_x += @speed unless @scene_transition_into || @scene_transition_out
end
-end
-on :key_down do |event|
- if event.key == 'f'
- @player.flip_sprite(:vertical)
+ if event.key == 'a'
+ player_movement_x -= @speed unless @scene_transition_into || @scene_transition_out
end
- if event.key == 'h'
- @player.flip_sprite(:none)
+ if event.key == 'space'
+ @pressed_space = true unless @scene_transition_into || @scene_transition_out
end
- if event.key == 't'
- Camera.debug_y += 2
+ if event.key == 'q'
+ Camera.angle += 1
end
- if event.key == 'g'
+ if event.key == 'e'
+ Camera.angle -= 1
end
-end
-
-on :key do |event|
if event.key == 'z'
- @zoom_by = 1.015
+ Camera.zoom *= 1.015
end
if event.key == 'x'
- @zoom_by = 0.985
+ Camera.zoom *= 0.985
end
- if event.key == 'c'
- #Camera.zoom_to 1
- end
- if event.key == 'm'
- #Camera.move_to(-10,-10)
+end
+=begin
+Camera << Text.new('rotate me to see how if it works',
+ x: 500,
+ y: 500,
+ z: 99)
+=end
+update do
+ if (@player.x > 2371 && player_movement_x.positive?) || (@player.x.negative? && player_movement_x.negative?)
+ player_movement_x = 0
+ end
+ if (@player.y > 1608 && player_movement_y.positive?) || (@player.y.negative? && player_movement_y.negative?)
+ player_movement_y = 0
+ end
+ if !player_movement_y.zero? == !player_movement_x.zero?
+ player_movement_x /= 1.4141
+ player_movement_y /= 1.4141
+ end
+ @player.x += player_movement_x
+ @player.y += player_movement_y
+ if player_movement_x.negative?
+ @player.play animation: :walk, loop: true
+ elsif player_movement_x.positive? || !player_movement_y.zero?
+ @player.play animation: :walk, loop: true, flip: :vertical
+ else
+ @player.play animation: :stand
end
- if event.key == 'q'
- Camera.angle -= 2
- end
- if event.key == 'e'
- Camera.angle += 2
- end
- if event.key == 'r'
- Camera.angle = 0.0
- Camera.zoom = 1.0
+ if !@scene_transition_into && !@scene_transition_out
+ Camera.zoom = (-[Math.sqrt(((@player.x + (@player.width / 2) - Camera.x)**2) + ((@player.y + (@player.width / 2) - Camera.y)**2)), 350].min * 0.004) + 2
+ Camera.x += (@player.x + (@player.width / 2) - Camera.x) * 0.025
+ Camera.y += (@player.y + (@player.height / 2)- Camera.y) * 0.025
+ elsif @scene_transition_into
+ if Camera.zoom < 250
+ Camera.zoom *= 1.05
+ Camera.angle += 5
+ else
+ @scene_transition_into = false
+ @scene_transition_out = true
+ if @room.nil?
+ @house.remove
+ @house = nil
+ @indoors = true
+ else
+ @room.remove
+ @room = nil
+ @indoors = false
+ end
+ Camera.remove @background
+ @background.remove
+ @background = nil
+ end
+ Camera.x += (@player.x + (@player.width / 2) - Camera.x) * 0.25
+ Camera.y += (@player.y + (@player.height / 2) - Camera.y) * 0.25
+ elsif @scene_transition_out
+ if !(Camera.zoom <= 2.1 && Camera.angle.zero?)
+ Camera.zoom /= 1.05
+ Camera.angle -= 5
+ else
+ @scene_transition_out = false
+ end
end
-end
-update do
- @player.x += @x_move
- @player.y += @y_move
- @x_move = 0
- @y_move = 0
- Camera.zoom *= @zoom_by
- if @is_follow
- Camera.x = @player.x
- Camera.y = @player.y
+ if @house.nil? && !@indoors
+ @house = House.new(750, 300)
+ @background = Image.new(
+ 'assets/background.png',
+ x: 100, y: 100,
+ z: -1
+ )
+ Camera << @background
+ elsif @room.nil? && @indoors
+ @room = Room.new(750,300)
+ @background = Rectangle.new(
+ color: 'black',
+ x: 0,
+ y: 0,
+ width: 1920,
+ height: 1080,
+ z: -1
+ )
+ end
+ @shadow.x = @player.x - 2
+ @shadow.y = @player.y + 42
+
+ Camera.remove @house_text
+ @house_text&.remove
+ if @indoors
+ @house_text = @room.visted_by?(@player)
else
- angle = Camera.angle * (Math::PI / 180)
- Camera.x += (@cam_x_move * Math.cos(-angle)) - (@cam_y_move * Math.sin(-angle))
- Camera.y += (@cam_x_move * Math.sin(-angle)) + (@cam_y_move * Math.cos(-angle))
+ @house_text = @house.visted_by?(@player)
+ end
+ Camera << @house_text unless @house_text.nil?
+ if !@house_text.nil? && @pressed_space
+ @scene_transition_into = true
end
- @cam_x_move = 0
- @cam_y_move = 0
- @zoom_by = 1
@ui_pos_cam.text = "Camera Position: #{Camera.x.round(1)}, #{Camera.y.round(1)}"
@ui_pos_ply.text = "Player Position: #{@player.x.round(1)}, #{@player.y.round(1)}"
@ui_zoom.text = "Zoom: #{Camera.zoom.round(3)}"
@ui_fps.text = "FPS: #{Window.fps.round(2)}"
@ui_rotation.text = "Angle: #{Camera.angle}"
+ player_movement_x = 0
+ player_movement_y = 0
+ @pressed_space = false
Camera.redraw
end