or2d 0.0.5 → 0.0.6
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/or2d/animation.rb +0 -0
- data/lib/or2d/animations/composite_animations.rb +0 -0
- data/lib/or2d/animations/entity_animations.rb +0 -0
- data/lib/or2d/camera.rb +87 -0
- data/lib/or2d/cameras/centered.rb +39 -0
- data/lib/or2d/cameras/padded.rb +65 -0
- data/lib/or2d/composite.rb +0 -0
- data/lib/or2d/composites/projectile.rb +0 -0
- data/lib/or2d/composites/sprite.rb +0 -0
- data/lib/or2d/composites/text.rb +0 -0
- data/lib/or2d/console.rb +0 -0
- data/lib/or2d/entity.rb +19 -0
- data/lib/or2d/instance.rb +12 -0
- data/lib/or2d/patches/float.rb +0 -0
- data/lib/or2d/patches/integer.rb +0 -0
- data/lib/or2d/patches/music.rb +0 -0
- data/lib/or2d/patches/renderable.rb +0 -0
- data/lib/or2d/patches/sound.rb +0 -0
- data/lib/or2d/patches/sprite.rb +0 -0
- data/lib/or2d/patches/window.rb +0 -0
- data/lib/or2d/resource.rb +0 -0
- data/lib/or2d/scene.rb +0 -0
- data/lib/or2d/scenes/placeholder_scene.rb +0 -0
- data/lib/or2d.rb +20 -13
- metadata +5 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 84ff6f80df77d3cdf1c7d68a9c807c6f91024150984ee4848f6852f7d1f1e73a
|
4
|
+
data.tar.gz: 1f3c4e7a6f0f88acea2ec63ad7c78f5c2a76e8417abbeba4b0fd5fbdbf7b8d53
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3c63db0c5fb39018dd3054d4fc83121ab697dca0326f5b46ee3d4ec0f2917df3de83be7bd2cbbdfc6e34ba420f7fa9032ba584caab150c73d6343e20904f9aa9
|
7
|
+
data.tar.gz: a24f90e8eb8749a3f92cc24120ffe1aa21b7906226cd1c110574ed1384839783dad6308664e98b5f8b3af38700a65e844f97fc79ec689cfa2cd44f79e1d5c8d8
|
data/lib/or2d/animation.rb
CHANGED
File without changes
|
File without changes
|
File without changes
|
data/lib/or2d/camera.rb
ADDED
@@ -0,0 +1,87 @@
|
|
1
|
+
module OR2D
|
2
|
+
class Camera
|
3
|
+
|
4
|
+
# The target of the camera.
|
5
|
+
# @return [OR2D::Entity] the target of the camera
|
6
|
+
attr_reader :target
|
7
|
+
|
8
|
+
# The viewport of the camera.
|
9
|
+
# @return [OR2D::Entity] the viewport of the camera
|
10
|
+
attr_reader :viewport
|
11
|
+
|
12
|
+
# Constructs a new Camera object.
|
13
|
+
# @param viewport_width [Integer] the width of the viewport
|
14
|
+
# @param viewport_height [Integer] the height of the viewport
|
15
|
+
# @param target [OR2D::Entity] the target of the camera
|
16
|
+
def initialize(viewport_width = OR2D.game.screen_width,
|
17
|
+
viewport_height = OR2D.game.screen_height,
|
18
|
+
target = OR2D::Entity.new(:square, { size: 1, x: 0, y: 0, show: false }),
|
19
|
+
speed = 1)
|
20
|
+
@target = target
|
21
|
+
@speed = speed
|
22
|
+
@viewport = OR2D::Entity.new(:rectangle, {
|
23
|
+
x: (OR2D.game.screen_width / 2) - viewport_width,
|
24
|
+
y: (OR2D.game.screen_height / 2) + viewport_height,
|
25
|
+
width: viewport_width,
|
26
|
+
height: viewport_height,
|
27
|
+
show: false
|
28
|
+
})
|
29
|
+
end
|
30
|
+
|
31
|
+
def update; end
|
32
|
+
|
33
|
+
def scroll(direction, amount, target: false)
|
34
|
+
case direction
|
35
|
+
when :north then scroll_north(amount, target)
|
36
|
+
when :south then scroll_south(amount, target)
|
37
|
+
when :east then scroll_east(amount, target)
|
38
|
+
when :west then scroll_west(amount, target)
|
39
|
+
else raise ArgumentError, "Invalid direction: #{direction}"
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
# Simulates a northern camera scroll by moving all of the visible entities on the screen to the south.
|
44
|
+
# @param delta_y [Integer] the amount to scroll each entity
|
45
|
+
# @param target [Boolean] whether or not to scroll the target
|
46
|
+
def scroll_north(delta_y, target)
|
47
|
+
OR2D.game.entities.each_value do |entity|
|
48
|
+
next if !target && entity == @target
|
49
|
+
|
50
|
+
entity.screen_y += delta_y
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
# Simulates a southern camera scroll by moving all of the visible entities on the screen to the north.
|
55
|
+
# @param delta_y [Integer] the amount to scroll each entity
|
56
|
+
# @param target [Boolean] whether or not to scroll the target
|
57
|
+
def scroll_south(delta_y, target)
|
58
|
+
OR2D.game.entities.each_value do |entity|
|
59
|
+
next if !target && entity == @target
|
60
|
+
|
61
|
+
entity.screen_y -= delta_y
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
# Simulates an eastern camera scroll by moving all of the visible entities on the screen to the west.
|
66
|
+
# @param delta_x [Integer] the amount to scroll each entity
|
67
|
+
# @param target [Boolean] whether or not to scroll the target
|
68
|
+
def scroll_east(delta_x, target)
|
69
|
+
OR2D.game.entities.each_value do |entity|
|
70
|
+
next if !target && entity == @target
|
71
|
+
|
72
|
+
entity.screen_x -= delta_x
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
# Simulates a western camera scroll by moving all of the visible entities on the screen to the east.
|
77
|
+
# @param delta_x [Integer] the amount to scroll each entity
|
78
|
+
# @param target [Boolean] whether or not to scroll the target
|
79
|
+
def scroll_west(delta_x, target)
|
80
|
+
OR2D.game.entities.each_value do |entity|
|
81
|
+
next if !target && entity == @target
|
82
|
+
|
83
|
+
entity.screen_x += delta_x
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
module OR2D::Cameras
|
2
|
+
class CenteredCamera < OR2D::Camera
|
3
|
+
def initialize(target = nil)
|
4
|
+
super(OR2D.game.screen_width, OR2D.game.screen_height, target, 1.scale)
|
5
|
+
orientate
|
6
|
+
@scrolling = false
|
7
|
+
@direction = nil
|
8
|
+
end
|
9
|
+
|
10
|
+
def update
|
11
|
+
orientate
|
12
|
+
return unless @scrolling
|
13
|
+
|
14
|
+
case @direction
|
15
|
+
when :north then scroll_north(@speed, false)
|
16
|
+
when :south then scroll_south(@speed, false)
|
17
|
+
when :east then scroll_east(@speed, false)
|
18
|
+
when :west then scroll_west(@speed, false)
|
19
|
+
end
|
20
|
+
|
21
|
+
reset_scrolling
|
22
|
+
end
|
23
|
+
|
24
|
+
def scroll(direction, amount)
|
25
|
+
@scrolling = true
|
26
|
+
@direction = direction
|
27
|
+
@speed = amount
|
28
|
+
end
|
29
|
+
|
30
|
+
def orientate
|
31
|
+
@target.screen_x = OR2D.game.screen_width / 2
|
32
|
+
@target.screen_y = OR2D.game.screen_height / 2
|
33
|
+
end
|
34
|
+
|
35
|
+
def reset_scrolling
|
36
|
+
@scrolling = false
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,65 @@
|
|
1
|
+
module OR2D::Cameras
|
2
|
+
# A PaddedCamera is a camera that has padding. When the target <OR2D::Entity> reaches the edge of the padding, the camera will scroll.
|
3
|
+
class PaddedCamera < OR2D::Camera
|
4
|
+
# Constructs a new PaddedCamera.
|
5
|
+
# @param target [OR2D::Entity] the target of the camera
|
6
|
+
# @param padding_width [Integer] the width of the padding
|
7
|
+
# @param padding_height [Integer] the height of the padding
|
8
|
+
def initialize(padding_width = 512, padding_height = 512, target = nil)
|
9
|
+
@padding_width = padding_width
|
10
|
+
@padding_height = padding_height
|
11
|
+
super(@padding_width, @padding_height, target, 1.scale)
|
12
|
+
orientate
|
13
|
+
end
|
14
|
+
|
15
|
+
# Updates the camera.
|
16
|
+
def update
|
17
|
+
scroll if should_scroll?
|
18
|
+
end
|
19
|
+
|
20
|
+
# Checks if the camera should scroll. This check is done by checking if the target <OR2D::Entity> is within the <OR2D::Cameras::PaddedCamera#boundary>.
|
21
|
+
# @return [Boolean] true if the camera should scroll, false otherwise
|
22
|
+
def should_scroll?
|
23
|
+
should_scroll_east? || should_scroll_west? || should_scroll_north? || should_scroll_south?
|
24
|
+
end
|
25
|
+
|
26
|
+
def should_scroll_east?
|
27
|
+
@target.screen_x >= (@viewport.screen_x + @viewport.width)
|
28
|
+
end
|
29
|
+
|
30
|
+
def should_scroll_west?
|
31
|
+
@target.screen_x <= (@viewport.screen_x - @viewport.width)
|
32
|
+
end
|
33
|
+
|
34
|
+
def should_scroll_north?
|
35
|
+
@target.screen_y <= (@viewport.screen_y - @viewport.height)
|
36
|
+
end
|
37
|
+
|
38
|
+
def should_scroll_south?
|
39
|
+
@target.screen_y >= (@viewport.screen_y + @viewport.height)
|
40
|
+
end
|
41
|
+
|
42
|
+
def scroll
|
43
|
+
if should_scroll_east?
|
44
|
+
super(:east, @speed, target: true)
|
45
|
+
@viewport.screen_x += @speed
|
46
|
+
elsif should_scroll_west?
|
47
|
+
super(:west, @speed, target: true)
|
48
|
+
@viewport.screen_x -= @speed
|
49
|
+
end
|
50
|
+
|
51
|
+
if should_scroll_north?
|
52
|
+
super(:north, @speed, target: true)
|
53
|
+
@viewport.screen_y -= @speed
|
54
|
+
elsif should_scroll_south?
|
55
|
+
super(:south, @speed, target: true)
|
56
|
+
@viewport.screen_y += @speed
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
def orientate
|
61
|
+
@target.screen_x = @viewport.screen_x + @viewport.width / 2
|
62
|
+
@target.screen_y = @viewport.screen_y + @viewport.height / 2
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
data/lib/or2d/composite.rb
CHANGED
File without changes
|
File without changes
|
File without changes
|
data/lib/or2d/composites/text.rb
CHANGED
File without changes
|
data/lib/or2d/console.rb
CHANGED
File without changes
|
data/lib/or2d/entity.rb
CHANGED
@@ -14,6 +14,14 @@ module OR2D
|
|
14
14
|
# @return [Ruby2D::Image, Ruby2D::Sprite, Ruby2D::Text, Ruby2D::Triangle, Ruby2D::Quad, Ruby2D::Circle, Ruby2D::Square, Ruby2D::Line, Ruby2D::Rectangle] the entity's resource
|
15
15
|
attr_reader :resource
|
16
16
|
|
17
|
+
# @!attribute [r] previous_x
|
18
|
+
# @return [Integer] the entity's previous x coordinate
|
19
|
+
attr_reader :previous_screen_x
|
20
|
+
|
21
|
+
# @!attribute [r] previous_y
|
22
|
+
# @return [Integer] the entity's previous y coordinate
|
23
|
+
attr_reader :previous_screen_y
|
24
|
+
|
17
25
|
# Constructs a new Entity object.
|
18
26
|
# @param type [Symbol] the type of entity to create
|
19
27
|
# @param options [Hash] the options to create the entity with
|
@@ -28,6 +36,8 @@ module OR2D
|
|
28
36
|
@resource = options[:resource] || OR2D::Resource.create(type, options)
|
29
37
|
@width = @resource.width if @resource.respond_to?(:width)
|
30
38
|
@height = @resource.height if @resource.respond_to?(:height)
|
39
|
+
@previous_screen_x = options[:x] || 0
|
40
|
+
@previous_screen_y = options[:y] || 0
|
31
41
|
show if options[:show]
|
32
42
|
ensure
|
33
43
|
OR2D.game.add_entity(self)
|
@@ -36,6 +46,7 @@ module OR2D
|
|
36
46
|
# Set the Entity x coordinate.
|
37
47
|
# @param x_coordinate [Integer] the x coordinate of the Entity on the screen
|
38
48
|
def x=(x_coordinate)
|
49
|
+
@previous_screen_x = @x
|
39
50
|
super(x_coordinate)
|
40
51
|
@resource.x = x_coordinate if @resource.respond_to?(:x=)
|
41
52
|
end
|
@@ -43,6 +54,7 @@ module OR2D
|
|
43
54
|
# Set the Entity y coordinate.
|
44
55
|
# @param y_coordinate [Integer] the y coordinate of the Entity on the screen
|
45
56
|
def y=(y_coordinate)
|
57
|
+
@previous_screen_x = @y
|
46
58
|
super(y_coordinate)
|
47
59
|
@resource.y = y_coordinate if @resource.respond_to?(:y=)
|
48
60
|
end
|
@@ -78,5 +90,12 @@ module OR2D
|
|
78
90
|
OR2D.game.window.remove(@resource) if @resource
|
79
91
|
OR2D.game.remove_entity(@id)
|
80
92
|
end
|
93
|
+
|
94
|
+
alias screen_x x
|
95
|
+
alias screen_y y
|
96
|
+
alias screen_z z
|
97
|
+
alias screen_x= x=
|
98
|
+
alias screen_y= y=
|
99
|
+
alias screen_z= z=
|
81
100
|
end
|
82
101
|
end
|
data/lib/or2d/instance.rb
CHANGED
@@ -88,6 +88,18 @@ module OR2D
|
|
88
88
|
@window.close
|
89
89
|
end
|
90
90
|
|
91
|
+
# The width of the game window.
|
92
|
+
# @return [Integer] the width of the game window
|
93
|
+
def screen_width
|
94
|
+
@window.get(:width)
|
95
|
+
end
|
96
|
+
|
97
|
+
# The height of the game window.
|
98
|
+
# @return [Integer] the height of the game window
|
99
|
+
def screen_height
|
100
|
+
@window.get(:height)
|
101
|
+
end
|
102
|
+
|
91
103
|
private
|
92
104
|
|
93
105
|
def setup
|
data/lib/or2d/patches/float.rb
CHANGED
File without changes
|
data/lib/or2d/patches/integer.rb
CHANGED
File without changes
|
data/lib/or2d/patches/music.rb
CHANGED
File without changes
|
File without changes
|
data/lib/or2d/patches/sound.rb
CHANGED
File without changes
|
data/lib/or2d/patches/sprite.rb
CHANGED
File without changes
|
data/lib/or2d/patches/window.rb
CHANGED
File without changes
|
data/lib/or2d/resource.rb
CHANGED
File without changes
|
data/lib/or2d/scene.rb
CHANGED
File without changes
|
File without changes
|
data/lib/or2d.rb
CHANGED
@@ -19,30 +19,37 @@ Dir["#{File.dirname(__FILE__)}/or2d/patches/*.rb"].each { |file| load(file) }
|
|
19
19
|
# @author Patrick W.
|
20
20
|
# @since 2023-04-26
|
21
21
|
module OR2D
|
22
|
-
autoload :Animation,
|
23
|
-
autoload :Composite,
|
24
|
-
autoload :Console,
|
25
|
-
autoload :
|
26
|
-
autoload :
|
27
|
-
autoload :
|
28
|
-
autoload :
|
22
|
+
autoload :Animation, 'or2d/animation'
|
23
|
+
autoload :Composite, 'or2d/composite'
|
24
|
+
autoload :Console, 'or2d/console'
|
25
|
+
autoload :Camera, 'or2d/camera'
|
26
|
+
autoload :Entity, 'or2d/entity'
|
27
|
+
autoload :Instance, 'or2d/instance'
|
28
|
+
autoload :Resource, 'or2d/resource'
|
29
|
+
autoload :Scene, 'or2d/scene'
|
29
30
|
|
30
31
|
# The Animations module contains modules and classes for animating objects.
|
31
32
|
module Animations
|
32
|
-
autoload :CompositeAnimations,
|
33
|
-
autoload :EntityAnimations,
|
33
|
+
autoload :CompositeAnimations, 'or2d/animations/composite_animations'
|
34
|
+
autoload :EntityAnimations, 'or2d/animations/entity_animations'
|
35
|
+
end
|
36
|
+
|
37
|
+
# The Cameras module contains all of the camera implementations for the OR2D gem.
|
38
|
+
module Cameras
|
39
|
+
autoload :CenteredCamera, 'or2d/cameras/centered'
|
40
|
+
autoload :PaddedCamera, 'or2d/cameras/padded'
|
34
41
|
end
|
35
42
|
|
36
43
|
# The Composites module contains all of the composite entities for the OR2D gem.
|
37
44
|
module Composites
|
38
|
-
autoload :Projectile,
|
39
|
-
autoload :Sprite,
|
40
|
-
autoload :Text,
|
45
|
+
autoload :Projectile, 'or2d/composites/projectile'
|
46
|
+
autoload :Sprite, 'or2d/composites/sprite'
|
47
|
+
autoload :Text, 'or2d/composites/text'
|
41
48
|
end
|
42
49
|
|
43
50
|
# The Scenes module contains all of the scenes for the OR2D gem.
|
44
51
|
module Scenes
|
45
|
-
autoload :PlaceholderScene,
|
52
|
+
autoload :PlaceholderScene, 'or2d/scenes/placeholder_scene'
|
46
53
|
end
|
47
54
|
|
48
55
|
# Is debug mode enabled?
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: or2d
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Patrick W.
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-10-
|
11
|
+
date: 2023-10-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: dotenv
|
@@ -138,6 +138,9 @@ files:
|
|
138
138
|
- lib/or2d/animation.rb
|
139
139
|
- lib/or2d/animations/composite_animations.rb
|
140
140
|
- lib/or2d/animations/entity_animations.rb
|
141
|
+
- lib/or2d/camera.rb
|
142
|
+
- lib/or2d/cameras/centered.rb
|
143
|
+
- lib/or2d/cameras/padded.rb
|
141
144
|
- lib/or2d/composite.rb
|
142
145
|
- lib/or2d/composites/projectile.rb
|
143
146
|
- lib/or2d/composites/sprite.rb
|