fantasy 0.1.5.1 → 0.1.7

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 58bcb1e825d5cdf5185a26d5bd1dd972fb585ddeefa8fab964984e4ddd975584
4
- data.tar.gz: eea7d4e258d2a3f949b97b187fd540e9e7702515fcac381c5ae53b244f06c546
3
+ metadata.gz: 5b920c99d05b572330432388e4cb4bae6ef5b814d8834bb3b05da16375f49bf6
4
+ data.tar.gz: 2a5d7c01b7f3e98b5c8928f70981f5bf3591badc844f33a1209f49f6883a426d
5
5
  SHA512:
6
- metadata.gz: 9a4ec479708e117036d068ddcf3c5f33f0338a85e324ca7708bd1922c41c632804e90733fea5c3d2dc258f2d00e2b8fbf37e30d4cf4e0afec70e663af2125319
7
- data.tar.gz: 2beeb1fdb476866e25db35ee12559c7571656e07a0ab9c112d832ec1a0fdffa520f471fc4054bc67a4e14154f445aa9e9b8d5e889d988f64920f04931c53bb01
6
+ metadata.gz: b791f6790eaa41e1c0cd49ef9faf514ef1fdacf9310f4dcf6cdfe6aeae2ebde28952d2f748c1e4f155dea6145dbbee7755599bf6a2555479b36a0d0390752bc0
7
+ data.tar.gz: e6be40d13c6b7a8c19e0e3604a1554eaa2f2efbc08ea7a9769e9b3db94407a1d8e3fd18c7ea0e08089ff6643e69e9c251d3de746720f464d6313b29baa288a50
data/README.md CHANGED
@@ -219,12 +219,13 @@ Easy access to keyboard and mouse inputs on any part of the code. Specially in t
219
219
  - Remove "on_space_bar" when changing scene (TODO)
220
220
  - Detect when key/mouse button is pressed in the actual frame in any part of the code (TODO)
221
221
 
222
- ### Tile Map (TODO)
222
+ ### Tilemap (TODO)
223
223
 
224
224
  For easy creation of:
225
225
 
226
- - Top-down map levels (TODO)
226
+ - Top-down map levels
227
227
  - Platformer map levels (TODO)
228
+ - Allow specific map keys like a=>actor_1, b=>actor_2 (TODO)
228
229
 
229
230
  ### Tweens (TODO)
230
231
 
data/lib/fantasy/actor.rb CHANGED
@@ -54,7 +54,7 @@ class Actor
54
54
 
55
55
  def draw_debug
56
56
  Utils.draw_frame(position_in_camera.x, position_in_camera.y, width, height, 1, Gosu::Color::RED) if solid
57
- Global.pixel_font.draw_text("#{@position.x.floor},#{@position.y.floor}", position_in_camera.x, position_in_camera.y - 20, 1)
57
+ Global.pixel_fonts["medium"].draw_text("#{@position.x.floor},#{@position.y.floor}", position_in_camera.x, position_in_camera.y - 20, 1)
58
58
  end
59
59
 
60
60
  def position_in_camera
data/lib/fantasy/clock.rb CHANGED
@@ -1,5 +1,6 @@
1
1
  class Clock
2
2
  attr_accessor :persistent
3
+ attr_reader :thread
3
4
 
4
5
  def initialize(&block)
5
6
  @block = block
@@ -15,7 +15,7 @@ module Global
15
15
 
16
16
  attr_accessor :game
17
17
  attr_reader :frame_time # delta_time
18
- attr_reader :pixel_font
18
+ attr_reader :pixel_fonts
19
19
  attr_reader :references
20
20
  attr_reader :camera
21
21
  attr_reader :game_state
@@ -30,13 +30,21 @@ module Global
30
30
  @clocks = []
31
31
  @last_frame_at = Time.now
32
32
  @debug = false
33
- @pixel_font = Gosu::Font.new(20, { name: "#{__dir__}/../../fonts/VT323-Regular.ttf" } )
33
+
34
+ @pixel_fonts = {}
35
+ @pixel_fonts["small"] = Gosu::Font.new(20, { name: "#{__dir__}/../../fonts/VT323-Regular.ttf" } )
36
+ @pixel_fonts["medium"] = Gosu::Font.new(40, { name: "#{__dir__}/../../fonts/VT323-Regular.ttf" } )
37
+ @pixel_fonts["big"] = Gosu::Font.new(60, { name: "#{__dir__}/../../fonts/VT323-Regular.ttf" } )
38
+ @pixel_fonts["huge"] = Gosu::Font.new(100, { name: "#{__dir__}/../../fonts/VT323-Regular.ttf" } )
39
+
34
40
  @d_key_pressed = false
35
41
  @references = OpenStruct.new
36
42
  @camera = Camera.new(position: Coordinates.zero)
37
43
  @game_state = Global.presentation_proc.nil? ? "game" : "presentation"
38
44
  @scene_started_at = Time.now
39
45
 
46
+ @background = Color.new(r: 0, g: 0, b: 0)
47
+
40
48
  if @presentation_proc.nil?
41
49
  on_presentation { Global.default_on_presentation }
42
50
  end
@@ -108,7 +116,11 @@ module Global
108
116
  @hud_images.clear
109
117
  @backgrounds.clear
110
118
  @tile_maps.clear
111
- @clocks.reject(&:persistent?).each(&:stop)
119
+
120
+ @clocks.reject(&:persistent?).each do |clock|
121
+ clock.stop unless clock.thread == Thread.current # no stop current Thread
122
+ end
123
+
112
124
  @background = Color.new(r: 0, g: 0, b: 0)
113
125
  end
114
126
 
@@ -1,5 +1,5 @@
1
1
  class HudText
2
- attr_accessor :text, :size, :color, :visible, :layer, :in_world
2
+ attr_accessor :text, :size, :color, :visible, :layer, :in_world, :position
3
3
 
4
4
  def initialize(position:, text: "")
5
5
  @position = position
@@ -17,14 +17,22 @@ class HudText
17
17
 
18
18
  def draw
19
19
  if visible
20
- Global.pixel_font.draw_markup(text, screen_position.x + scale, screen_position.y - 20 + scale, 1, scale, scale, Gosu::Color::BLACK)
21
- Global.pixel_font.draw_markup(text, screen_position.x, screen_position.y - 20, 1, scale, scale, color)
20
+ font.draw_markup(text, screen_position.x + shadow_offset, screen_position.y - 20 + shadow_offset, 1, 1, 1, Gosu::Color::BLACK)
21
+ font.draw_markup(text, screen_position.x, screen_position.y - 20, 1, 1, 1, color)
22
22
  end
23
23
 
24
24
  draw_debug if Global.debug
25
25
  end
26
26
 
27
- def scale
27
+ def font
28
+ found_font = Global.pixel_fonts[@size]
29
+ if found_font.nil?
30
+ raise "HudText.size not valid '#{@size}'. Valid sizes: 'small, medium, big, huge'"
31
+ end
32
+ found_font
33
+ end
34
+
35
+ def shadow_offset
28
36
  case @size
29
37
  when "small"
30
38
  1
@@ -52,6 +60,6 @@ class HudText
52
60
  end
53
61
 
54
62
  def draw_debug
55
- Global.pixel_font.draw_text("#{@position.x.floor},#{@position.y.floor}", @position.x, @position.y, 1)
63
+ Global.pixel_fonts["medium"].draw_text("#{@position.x.floor},#{@position.y.floor}", @position.x, @position.y, 1)
56
64
  end
57
65
  end
@@ -1,4 +1,4 @@
1
- class TileMap
1
+ class Tilemap
2
2
  attr_accessor :position
3
3
 
4
4
  def initialize(map_name:, tiles:, tile_size: nil, tile_width: nil, tile_height: nil)
@@ -13,7 +13,7 @@ class TileMap
13
13
  @tiles = tiles
14
14
  @position = Coordinates.zero
15
15
 
16
- @grid = TileMap.load_grid(@map_name)
16
+ @grid = Tilemap.load_grid(@map_name)
17
17
  end
18
18
 
19
19
  def width
@@ -32,7 +32,13 @@ class TileMap
32
32
 
33
33
  line.each do |tile_index|
34
34
  if !tile_index.nil?
35
- actor = @tiles[tile_index].clone
35
+ actor_template = @tiles[tile_index]
36
+
37
+ if actor_template.nil?
38
+ raise "Tilemap config error. Not found Tile for index '#{tile_index}'"
39
+ end
40
+
41
+ actor = actor_template.clone
36
42
  actor.position.x = @position.x + (tile_position.x * @tile_width)
37
43
  actor.position.y = @position.y + (tile_position.y * @tile_height)
38
44
  end
@@ -50,7 +56,7 @@ class TileMap
50
56
  @@maps = {}
51
57
 
52
58
  def load_grid(map_name)
53
- File.readlines(TileMap.locate_map(map_name), chomp: true).map do |line|
59
+ File.readlines(Tilemap.locate_map(map_name), chomp: true).map do |line|
54
60
  line.each_char.map do |char|
55
61
  char == " " ? nil : char.to_i
56
62
  end
data/lib/fantasy/utils.rb CHANGED
@@ -27,4 +27,9 @@ module Utils
27
27
  Gosu.draw_rect(x, y + (height - stroke), width, stroke, color)
28
28
  Gosu.draw_rect(x, y, stroke, height, color)
29
29
  end
30
+
31
+ def self.remap(value:, from_ini:, from_end:, to_ini:, to_end:)
32
+ result = to_ini + (value - from_ini) * (to_end - to_ini) / (from_end - from_ini);
33
+ result
34
+ end
30
35
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Fantasy
4
- VERSION = "0.1.5.1"
4
+ VERSION = "0.1.7"
5
5
  end
data/lib/fantasy.rb CHANGED
@@ -18,5 +18,5 @@ require_relative "fantasy/background"
18
18
  require_relative "fantasy/sound"
19
19
  require_relative "fantasy/camera"
20
20
  require_relative "fantasy/image"
21
- require_relative "fantasy/tile_map"
21
+ require_relative "fantasy/tilemap"
22
22
  require_relative "fantasy/base"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fantasy
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.5.1
4
+ version: 0.1.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Fernando Guillen
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-03-16 00:00:00.000000000 Z
11
+ date: 2022-03-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: gosu
@@ -72,7 +72,7 @@ files:
72
72
  - lib/fantasy/includes/move_by_cursors.rb
73
73
  - lib/fantasy/loop.rb
74
74
  - lib/fantasy/sound.rb
75
- - lib/fantasy/tile_map.rb
75
+ - lib/fantasy/tilemap.rb
76
76
  - lib/fantasy/tween.rb
77
77
  - lib/fantasy/utils.rb
78
78
  - lib/fantasy/version.rb