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 +7 -0
- data/lib/tmap/map.rb +97 -0
- data/lib/tmap/tile.rb +15 -0
- data/lib/tmap/zorder.rb +4 -0
- data/lib/tmap.rb +4 -0
- metadata +47 -0
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
data/lib/tmap/zorder.rb
ADDED
data/lib/tmap.rb
ADDED
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: []
|