rhex 2.0.3 → 2.0.5
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 +4 -4
- data/lib/hex/axial_grid.rb +10 -14
- data/lib/hex/base_hex.rb +2 -2
- data/lib/hex/modules/ascii_to_grid_flat.rb +77 -0
- data/lib/hex/square_grid.rb +14 -13
- metadata +7 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6c2fae8bfcec85bb6d40cdd93c5b3fb9aa4b0c6f
|
4
|
+
data.tar.gz: 941154bdc0bae0a5cd8b57ac08d1afdbb6c211b7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1d5c99ed7299f9c35f3b896151c6900bbc77bca5cfc9bcf20adfb99b04b44c07439bdb6d9a018eda9278c2e257145e774efadf6d300b93229e66a8115d58e61c
|
7
|
+
data.tar.gz: b2bdb4cf22ddaa34757d79644353967032d4eb316b52a1ce600018a9e1fec878d1e839c816a359a6ed786bfd4f6f4e072941db754d88e98026da6ee95952f971
|
data/lib/hex/axial_grid.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
require_relative 'axial_hex'
|
2
|
-
require_relative 'modules/ascii_to_grid'
|
3
2
|
require_relative 'modules/grid_to_pic'
|
3
|
+
require_relative 'modules/ascii_to_grid_flat'
|
4
4
|
|
5
5
|
# This class represents a grid of hexagons stored in an axial coordinate system.
|
6
6
|
#
|
@@ -17,6 +17,8 @@ require_relative 'modules/grid_to_pic'
|
|
17
17
|
#
|
18
18
|
class AxialGrid
|
19
19
|
|
20
|
+
include AsciiToGridFlat
|
21
|
+
|
20
22
|
attr_reader :hex_ray, :hex_height, :hex_width, :quarter_height, :half_width
|
21
23
|
|
22
24
|
# Create an axial hexagon grid
|
@@ -97,21 +99,15 @@ class AxialGrid
|
|
97
99
|
#
|
98
100
|
# @return [Array<AxialHex>] all surrounding hexes
|
99
101
|
def h_surrounding_hexes( h )
|
100
|
-
h.surrounding_hexes.map{ |sh| hget( sh ) }
|
102
|
+
h.surrounding_hexes.map{ |sh| hget( sh ) }.compact
|
101
103
|
end
|
102
104
|
|
103
|
-
# Return the grid as a
|
104
|
-
#
|
105
|
-
# @return [
|
106
|
-
def
|
107
|
-
|
108
|
-
|
109
|
-
h.each do |k, v|
|
110
|
-
# p k
|
111
|
-
h[ k ] = v.to_hash
|
112
|
-
end
|
113
|
-
# p h
|
114
|
-
h
|
105
|
+
# Return the grid as a json string
|
106
|
+
#
|
107
|
+
# @return [Array] the grid as a json string
|
108
|
+
def to_json
|
109
|
+
a = @hexes.map{ |e| { q: e[0][0], r: e[0][1], c: e[1].color, b: e[1].border } }
|
110
|
+
a.to_json
|
115
111
|
end
|
116
112
|
|
117
113
|
end
|
data/lib/hex/base_hex.rb
CHANGED
@@ -0,0 +1,77 @@
|
|
1
|
+
# This module contains the methods relatives to ascii map reading
|
2
|
+
module AsciiToGridFlat
|
3
|
+
|
4
|
+
# Read an ascii file and load it into the hexagon grid. The input grid is supposed to be odd flat topped (odd-q) and will be stored into an axial representation.
|
5
|
+
#
|
6
|
+
# @param file_path [String] the name of the ascii file to read. For how to create this file, please see : https://github.com/czuger/rhex#reading-a-grid-from-an-ascii-file
|
7
|
+
def read_ascii_file_flat_topped_odd( file_path )
|
8
|
+
File.open( file_path ) do |file|
|
9
|
+
|
10
|
+
odd = 0
|
11
|
+
base_q = 0
|
12
|
+
line_q = 0
|
13
|
+
|
14
|
+
file.each_line do |line|
|
15
|
+
elements = line.split
|
16
|
+
elements.each_with_index do |element, index|
|
17
|
+
# puts "element = %c, index = %d || q = %d, r = %d" % [element, index, index*2 + odd, base_q - index]
|
18
|
+
# cset( index*2 + odd, base_q - index, color: element.to_sym, border: nil )
|
19
|
+
q = index*2 + odd
|
20
|
+
r = base_q - index
|
21
|
+
@hexes[ [ q, r ] ] = AxialHex.new( q, r, color: element.to_sym )
|
22
|
+
end
|
23
|
+
|
24
|
+
odd = ( odd.odd? ? 0 : 1 )
|
25
|
+
|
26
|
+
line_q += 1
|
27
|
+
if line_q >= 2
|
28
|
+
line_q = 0
|
29
|
+
base_q += 1
|
30
|
+
end
|
31
|
+
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
|
37
|
+
# Write an ascii file representing an axial hex grid as an flat topped (odd-q) hex representation.
|
38
|
+
#
|
39
|
+
# @param file_path [String] the name of the ascii file to read. For how to create this file, please see : https://github.com/czuger/rhex#reading-a-grid-from-an-ascii-file
|
40
|
+
def write_ascii_file_flat_topped_odd( file_path )
|
41
|
+
File.open( file_path, 'w' ) do |file|
|
42
|
+
|
43
|
+
base_r = 0
|
44
|
+
base_q = 0
|
45
|
+
line_q = 0
|
46
|
+
line = []
|
47
|
+
|
48
|
+
|
49
|
+
loop do
|
50
|
+
r = base_r
|
51
|
+
q = base_q
|
52
|
+
odd = ( base_q == 0 ? '' : ' ' )
|
53
|
+
|
54
|
+
while( ( hex = cget( q, r ) ) ) do
|
55
|
+
line << hex.color
|
56
|
+
q += 2
|
57
|
+
r -= 1
|
58
|
+
end
|
59
|
+
|
60
|
+
break if line.empty?
|
61
|
+
|
62
|
+
file.puts( odd + line.join( ' ' ) )
|
63
|
+
|
64
|
+
base_q = ( base_q == 0 ? 1 : 0 )
|
65
|
+
|
66
|
+
line_q += 1
|
67
|
+
if line_q >= 2
|
68
|
+
line_q = 0
|
69
|
+
base_r += 1
|
70
|
+
end
|
71
|
+
line = []
|
72
|
+
end
|
73
|
+
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
end
|
data/lib/hex/square_grid.rb
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
require_relative 'axial_grid'
|
2
2
|
require_relative 'cube_hex'
|
3
|
+
require_relative 'modules/ascii_to_grid'
|
3
4
|
|
4
5
|
# This class represents a grid of hexagons stored in an axial coordinate system but manage the conversion to a square representation (what finally you want)
|
5
6
|
#
|
@@ -29,37 +30,37 @@ class SquareGrid < AxialGrid
|
|
29
30
|
set_hex_dimensions
|
30
31
|
end
|
31
32
|
|
32
|
-
# Create an hexagon at a given position (
|
33
|
+
# Create an hexagon at a given position (q, r)
|
33
34
|
#
|
34
|
-
# @param
|
35
|
-
# @param
|
35
|
+
# @param q [Integer] the col coordinate of the hexagon
|
36
|
+
# @param r [Integer] the r coordinate of the hexagon
|
36
37
|
# @param color [String] a colorstring that can be used by ImageMagic
|
37
38
|
# @param border [Boolean] is the hex on the border of the screen (not fully draw)
|
38
39
|
# @param data [Unknown] some data associated with the hexagone. Everything you want, it is up to you
|
39
40
|
#
|
40
41
|
# @return [AxialHex] an hexagon
|
41
42
|
#
|
42
|
-
def cset(
|
43
|
-
hset( even_q_to_axial_hex(
|
43
|
+
def cset( q, r, color: nil, border: false, data: nil )
|
44
|
+
hset( even_q_to_axial_hex( q, r, color: color, border: border, data: data ) )
|
44
45
|
end
|
45
46
|
|
46
|
-
# Get the hexagon at a given position (
|
47
|
+
# Get the hexagon at a given position (q, r)
|
47
48
|
#
|
48
|
-
# @param
|
49
|
-
# @param
|
49
|
+
# @param q [Integer] the col coordinate of the hexagon
|
50
|
+
# @param r [Integer] the r coordinate of the hexagon
|
50
51
|
#
|
51
52
|
# @return [AxialHex] the hexagon at the requested position. nil if nothing
|
52
53
|
#
|
53
|
-
def cget(
|
54
|
-
hget( even_q_to_axial_hex(
|
54
|
+
def cget( q, r )
|
55
|
+
hget( even_q_to_axial_hex( q, r ) )
|
55
56
|
end
|
56
57
|
|
57
58
|
private
|
58
59
|
|
59
|
-
def even_q_to_axial_hex(
|
60
|
+
def even_q_to_axial_hex( q, r, color: nil, border: false, data: nil )
|
60
61
|
# convert odd-r offset to cube
|
61
|
-
x =
|
62
|
-
z =
|
62
|
+
x = q - (r - (r&1)) / 2
|
63
|
+
z = r
|
63
64
|
y = -x-z
|
64
65
|
|
65
66
|
tmp_cube = CubeHex.new( x, y, z, color: color, border: border, data: data )
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rhex
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.0.
|
4
|
+
version: 2.0.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Cédric ZUGER
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2019-07-02 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: |2
|
14
14
|
A library providing hexagons management and hexagonal grids for ruby.
|
@@ -24,6 +24,7 @@ files:
|
|
24
24
|
- lib/hex/base_hex.rb
|
25
25
|
- lib/hex/cube_hex.rb
|
26
26
|
- lib/hex/modules/ascii_to_grid.rb
|
27
|
+
- lib/hex/modules/ascii_to_grid_flat.rb
|
27
28
|
- lib/hex/modules/grid_to_pic.rb
|
28
29
|
- lib/hex/square_grid.rb
|
29
30
|
- lib/rhex.rb
|
@@ -37,17 +38,17 @@ require_paths:
|
|
37
38
|
- lib
|
38
39
|
required_ruby_version: !ruby/object:Gem::Requirement
|
39
40
|
requirements:
|
40
|
-
- -
|
41
|
+
- - ">="
|
41
42
|
- !ruby/object:Gem::Version
|
42
|
-
version: 2.
|
43
|
+
version: 2.3.6
|
43
44
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
44
45
|
requirements:
|
45
|
-
- -
|
46
|
+
- - ">="
|
46
47
|
- !ruby/object:Gem::Version
|
47
48
|
version: '0'
|
48
49
|
requirements: []
|
49
50
|
rubyforge_project:
|
50
|
-
rubygems_version: 2.
|
51
|
+
rubygems_version: 2.6.13
|
51
52
|
signing_key:
|
52
53
|
specification_version: 4
|
53
54
|
summary: Ruby HEXagonal grid
|