tmap-engine 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 3f693bf52545bf7b4cd3e6fd4e73f913a419af4b
4
+ data.tar.gz: 2af056dda39e7bf6bb0849b3a25c41e534811ac1
5
+ SHA512:
6
+ metadata.gz: 6da2dc8a4aa720e89328685460cb39d246deca725b1e1bf7d83ca064edc4b79008917ca9ac50436978d1c50e4613d4fcb0d534414a3f18643cac2b9d4b35577d
7
+ data.tar.gz: 6996e0539f57f3a7eb9f40332b8362308e4b3be0f1aa33b69aafb679c6d5e7d20adaf5e508728577d20df8ea577c2330a67912fee06bd13dc961ee0af0ec91fb
data/lib/tmap/map.rb ADDED
@@ -0,0 +1,97 @@
1
+ module Tmap
2
+ require 'psych'
3
+ require_relative 'zorder.rb'
4
+
5
+ class Map
6
+ attr_accessor :speed, :x, :y
7
+
8
+ def initialize(path, speed, start_x, start_y)
9
+ map = Psych.load_file(path)
10
+ parse_file(map)
11
+ @tileset = Gosu::Image.load_tiles($window, @tileset_file, @tile_size, @tile_size, false)
12
+ @speed = speed
13
+ @view_size = $window.height / @tile_size
14
+ @sliced_view_size = (@view_size / 2).floor
15
+ @x = start_x
16
+ @y = start_y
17
+ end
18
+
19
+ def update(direction)
20
+ case direction
21
+ when :left
22
+ @x -= @speed unless blocked_or_out_of_bounds?(@x-@speed, @map[@y][@x - @speed], :width)
23
+ when :right
24
+ @x += @speed unless blocked_or_out_of_bounds?(@x+@speed, @map[@y][@x + @speed], :width)
25
+ when :up
26
+ @y -= @speed unless blocked_or_out_of_bounds?(@y-@speed, @map[@y - @speed][@x], :height)
27
+ when :down
28
+ @y += @speed unless blocked_or_out_of_bounds?(@y+@speed, @map[@y + @speed][@x], :height)
29
+ end
30
+ end
31
+
32
+ def draw
33
+ map = viewable_map
34
+ map.each_with_index do |line, j|
35
+ line.each_with_index do |tile, i|
36
+ @tileset[@tiles[tile].picture_id].draw(i * @tile_size, j * @tile_size, Zorder::MAP)
37
+ end
38
+ end
39
+ end
40
+
41
+ private
42
+
43
+ def parse_file(file)
44
+ infos = file['infos'].inject({}){|memo,(k,v)| memo[k.to_sym] = v; memo}
45
+ @tile_size = infos[:tile_size]
46
+ @height = infos[:map].length + 1
47
+ @width = infos[:map].first.length + 1
48
+ @tileset_file = infos[:tileset]
49
+ @out_of_limit_tile = infos[:out_of_limit_tile]
50
+ @tiles = []
51
+ infos[:tiles].each do |k, v|
52
+ @tiles << Tile.new(k.to_s, v['tile'], v['collide'])
53
+ end
54
+ @map = load_map(infos[:map])
55
+ end
56
+
57
+ def load_map(map)
58
+ map.map{|line| line.chars.map(&:to_i)}
59
+ end
60
+
61
+ def blocked_or_out_of_bounds?(x, tile, axe)
62
+ send("out_of_#{axe.to_s}_limits?".to_sym, x) || @tiles[tile].collide?
63
+ end
64
+
65
+ def viewable_map
66
+ y = @y - @sliced_view_size
67
+ new_map = []
68
+ while (y <= @y + @sliced_view_size)
69
+ new_line = []
70
+ x = @x - @sliced_view_size
71
+ while (x <= @x + @sliced_view_size)
72
+ new_line << get_block(x, y)
73
+ x += 1
74
+ end
75
+ new_map << new_line
76
+ y += 1
77
+ end
78
+ new_map
79
+ end
80
+
81
+ def get_block(x, y)
82
+ if out_of_width_limits?(x) || out_of_height_limits?(y)
83
+ @out_of_limit_tile
84
+ else
85
+ @map[y][x]
86
+ end
87
+ end
88
+
89
+ def out_of_width_limits?(x)
90
+ x > @width-1 || x < 0
91
+ end
92
+
93
+ def out_of_height_limits?(x)
94
+ x > @height-1 || x < 0
95
+ end
96
+ end
97
+ end
data/lib/tmap/tile.rb ADDED
@@ -0,0 +1,15 @@
1
+ module Tmap
2
+ class Tile
3
+ attr_reader :picture_id, :name
4
+
5
+ def initialize(name, picture_id, collidable)
6
+ @name = name
7
+ @picture_id = picture_id
8
+ @collidable = collidable
9
+ end
10
+
11
+ def collide?
12
+ @collidable
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,4 @@
1
+ module Zorder
2
+ MAP = 1
3
+ CHARACTER = 2
4
+ end
data/lib/tmap.rb ADDED
@@ -0,0 +1,4 @@
1
+ require_relative './tmap/map.rb'
2
+
3
+ module Tmap
4
+ end
metadata ADDED
@@ -0,0 +1,47 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: tmap-engine
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - FABRE Hugo
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-05-26 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: This is a tiled map engine for libgosu
14
+ email: hugo.fabre@hotmail.com
15
+ executables: []
16
+ extensions: []
17
+ extra_rdoc_files: []
18
+ files:
19
+ - lib/tmap.rb
20
+ - lib/tmap/map.rb
21
+ - lib/tmap/tile.rb
22
+ - lib/tmap/zorder.rb
23
+ homepage: https://github.com/hfabre/tmap-engine
24
+ licenses:
25
+ - MIT
26
+ metadata: {}
27
+ post_install_message:
28
+ rdoc_options: []
29
+ require_paths:
30
+ - lib
31
+ required_ruby_version: !ruby/object:Gem::Requirement
32
+ requirements:
33
+ - - '>='
34
+ - !ruby/object:Gem::Version
35
+ version: '0'
36
+ required_rubygems_version: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - '>='
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ requirements: []
42
+ rubyforge_project:
43
+ rubygems_version: 2.0.14
44
+ signing_key:
45
+ specification_version: 4
46
+ summary: Tiled map engine
47
+ test_files: []