ruby-perlin-2D-map-generator 0.0.2 → 0.0.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (5) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +79 -3
  3. data/lib/CLI/command.rb +15 -4
  4. data/lib/map.rb +8 -0
  5. metadata +50 -22
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 59f285c1212afff796f6788a429ce6165cd782527330d9a2130f5bf444cae048
4
- data.tar.gz: cb54ce932c804c506f26ad66523fa35e8ca37d274b89ab6a345c6a263dff75b0
3
+ metadata.gz: 1bd8731cdd9870723cfcb6b977f7d111cc160591f727598ae05be919d6dd231f
4
+ data.tar.gz: d13ec13f781e96e6251bf37ee54d998c065698063e59d99b8143735c48e7e28a
5
5
  SHA512:
6
- metadata.gz: d9790b03d89b999a94be35a5c0d7aff5a81d844c06a8a52fcfbdd63e4923aee49353e0319d69d1ab108d8b3de0e5a6a8998d396481c7014037a122dd4ed48e6a
7
- data.tar.gz: f85761e76b1294b5ff318ddfd14d947f34586f1f4241ee61f42972cfa1f0c21649b288c3e48bb200134ba13338f2e3bb26fa1037d0fcf5e07c6ace87a5828592
6
+ metadata.gz: 766f4c73584e9e5152bf6842790bb3f330ca7d7fd9b46ab7427754f4c7869c0529e870827f181b0523f341d9134e8c5fdce18eecc2ef8a9ad2d22f17112cb040
7
+ data.tar.gz: ed3f8b411ccced1c278e0038abd92ccb6f856f67b683f13ab5298b51f762e71683efecf69e87ab53b56ecacf24859a8541336330fb65dcb15da2a8ae1e3b2740
data/README.md CHANGED
@@ -1,4 +1,10 @@
1
1
  # Ruby Perlin 2D Map Generator
2
+
3
+ [![Gem Version](https://badge.fury.io/rb/ruby-perlin-2D-map-generator.svg)](https://badge.fury.io/rb/ruby-perlin-2D-map-generator)
4
+ ![CI Status](https://github.com/matthewstyler/ruby-perlin-2D-map-generator/actions/workflows/main.yml/badge.svg)
5
+ ![CodeQL](https://github.com/matthewstyler/ruby-perlin-2D-map-generator/workflows/CodeQL/badge.svg)
6
+ [![Downloads](https://img.shields.io/gem/dt/ruby-perlin-2D-map-generator.svg?style=flat)](https://rubygems.org/gems/ruby-perlin-2D-map-generator)
7
+
2
8
  A gem that procedurally generates seeded and customizable 2D map using perlin noise.
3
9
 
4
10
  Include the gem in your project, or use the executable from the command line.
@@ -6,7 +12,22 @@ Include the gem in your project, or use the executable from the command line.
6
12
  Map can be rendered in console using ansi colors or returned as 2D array of hashes describing each tile and binome. Completely customizable, use the --help option for full usage details.
7
13
 
8
14
 
9
- ![2D-maps](https://github.com/matthewstyler/ruby-perlin-2D-map-generator/assets/4560901/89b4f623-53e3-445e-8e5b-96f4fcf67af5)
15
+ ![2D-maps](https://github.com/matthewstyler/ruby-perlin-2D-map-generator/assets/4560901/4fa5883f-839a-40c9-86a1-d5f9e2c37b9a)
16
+
17
+
18
+ # Installation
19
+
20
+ ### Bundler
21
+
22
+ ```ruby
23
+ gem 'ruby-perlin-2D-map-generator'
24
+ ```
25
+
26
+ ### Manual
27
+
28
+ ```sh
29
+ gem install ruby-perlin-2D-map-generator
30
+ ```
10
31
 
11
32
  # Customization examples
12
33
 
@@ -38,6 +59,52 @@ See Command line Usage for full customization, below are some examples. Alter th
38
59
  - 100) (default 0.0)
39
60
  ```
40
61
 
62
+ # Generate without rendering
63
+
64
+ ```irb
65
+ irb(main):001:0> map = Map.new
66
+ ```
67
+
68
+ Map can then be manipulated via traditional x,y lookup
69
+ ```irb
70
+ map[x, y].to_h
71
+ =>
72
+ {:x=>0,
73
+ :y=>1,
74
+ :height=>0.29251394359649563,
75
+ :moist=>0.29100678755603004,
76
+ :temp=>0.6034041566100443,
77
+ :biome=>{:name=>"deep_valley", :flora_range=>1, :colour=>"\e[48;5;47m"},
78
+ :items=>[]}
79
+ ```
80
+ or the less intuitative multidimensional lookup (reversed axis):
81
+
82
+ ```irb
83
+ map.tiles[y][x].to_h
84
+ =>
85
+ {:x=>0,
86
+ :y=>1,
87
+ :height=>0.29251394359649563,
88
+ :moist=>0.29100678755603004,
89
+ :temp=>0.6034041566100443,
90
+ :biome=>{:name=>"deep_valley", :flora_range=>1, :colour=>"\e[48;5;47m"},
91
+ :items=>[]}
92
+ ```
93
+
94
+ or from the command line:
95
+
96
+ ```bash
97
+ $ ruby-perlin-2D-map-generator describe coordinates=0,1
98
+
99
+ {:x=>0,
100
+ :y=>1,
101
+ :height=>0.29251394359649563,
102
+ :moist=>0.29100678755603004,
103
+ :temp=>0.6034041566100443,
104
+ :biome=>{:name=>"deep_valley", :flora_range=>1, :colour=>"\e[48;5;47m"},
105
+ :items=>[]}
106
+ ```
107
+
41
108
  # Full Command line Usage
42
109
  ```bash
43
110
  $ ruby-perlin-2D-map-generator --help
@@ -51,8 +118,14 @@ hashes with each tiles information.
51
118
 
52
119
  Arguments:
53
120
  (DESCRIBE | RENDER) command to run: render prints the map to standard
54
- output using ansi colors, while describe prints each
55
- tiles bionome information in the map.
121
+ output using ansi colors. describe prints each tiles
122
+ bionome information in the map, can be combined with the
123
+ coordinates keyword to print a specific tile.
124
+ (permitted: describe, render)
125
+
126
+ Keywords:
127
+ COORDINATES=INT_LIST Used with the describe command, only returns the given
128
+ coordinate tile details
56
129
 
57
130
  Options:
58
131
  --elevation=float Adjust each generated elevation by this percent (0 -
@@ -96,4 +169,7 @@ Examples:
96
169
 
97
170
  Render with options
98
171
  $ ruby-perlin-2D-map-generator render --elevation=-40 --moisture=25 --hs=1
172
+
173
+ Describe tile [1, 1]
174
+ $ ruby-perlin-2D-map-generator describe coordinates=1,1
99
175
  ```
data/lib/CLI/command.rb CHANGED
@@ -20,14 +20,25 @@ module CLI
20
20
 
21
21
  example 'Render with options',
22
22
  ' $ ruby-perlin-2D-map-generator render --elevation=-40 --moisture=25 --hs=1'
23
+
24
+ example 'Describe tile [1, 1]',
25
+ ' $ ruby-perlin-2D-map-generator describe coordinates=1,1'
23
26
  end
24
27
 
25
28
  argument :command do
26
29
  name '(describe | render)'
27
30
  arity one
28
- validate ->(v) { v.downcase == 'describe' || v.downcase == 'render' }
29
- desc 'command to run: render prints the map to standard output using ansi colors, ' \
30
- 'while describe prints each tiles bionome information in the map.'
31
+ permit %w[describe render]
32
+ desc 'command to run: render prints the map to standard output using ansi colors. ' \
33
+ 'describe prints each tiles bionome information in the map, can be combined with ' \
34
+ 'the coordinates keyword to print a specific tile.'
35
+ end
36
+
37
+ keyword :coordinates do
38
+ arity one
39
+ convert :int_list
40
+ validate ->(v) { v >= 0 }
41
+ desc 'Used with the describe command, only returns the given coordinate tile details'
31
42
  end
32
43
 
33
44
  option :height_seed do
@@ -255,7 +266,7 @@ module CLI
255
266
  ))
256
267
  case params[:command]
257
268
  when 'render' then map.render
258
- when 'describe' then puts map.describe
269
+ when 'describe' then puts(!params[:coordinates].nil? ? map[params[:coordinates][0], params[:coordinates][1]].to_h : map.describe)
259
270
  end
260
271
  end
261
272
 
data/lib/map.rb CHANGED
@@ -21,6 +21,14 @@ class Map
21
21
  end
22
22
  end
23
23
 
24
+ # rubocop:disable Naming/MethodParameterName:
25
+ def [](x, y)
26
+ raise ArgumentError, 'coordinates out of bounds' if y.nil? || y >= tiles.size || x.nil? || x >= tiles[y].size
27
+
28
+ tiles[y][x]
29
+ end
30
+ # rubocop:enable Naming/MethodParameterName:
31
+
24
32
  def tiles
25
33
  @tiles ||= MapTileGenerator.new(map: self).generate
26
34
  end
metadata CHANGED
@@ -1,85 +1,113 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruby-perlin-2D-map-generator
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tyler Matthews (matthewstyler)
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-07-06 00:00:00.000000000 Z
11
+ date: 2023-07-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: perlin
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ">="
17
+ - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '0'
19
+ version: 0.2.2
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ">="
24
+ - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '0'
26
+ version: 0.2.2
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: tty-option
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - ">="
31
+ - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '0'
33
+ version: 0.3.0
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - ">="
38
+ - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: '0'
40
+ version: 0.3.0
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: minitest
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - ">="
45
+ - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: '0'
47
+ version: '5.18'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - ">="
52
+ - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: '0'
54
+ version: '5.18'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: mocha
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - ">="
59
+ - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: '0'
61
+ version: 2.0.4
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - ">="
66
+ - - "~>"
67
67
  - !ruby/object:Gem::Version
68
- version: '0'
68
+ version: 2.0.4
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: rake
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
- - - ">="
73
+ - - "~>"
74
74
  - !ruby/object:Gem::Version
75
- version: '0'
75
+ version: 13.0.6
76
76
  type: :development
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
- - - ">="
80
+ - - "~>"
81
81
  - !ruby/object:Gem::Version
82
- version: '0'
82
+ version: 13.0.6
83
+ - !ruby/object:Gem::Dependency
84
+ name: rubocop
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: 1.54.1
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: 1.54.1
97
+ - !ruby/object:Gem::Dependency
98
+ name: simplecov
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: 0.22.0
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: 0.22.0
83
111
  description: A gem that procedurally generates a seeded and customizable 2D map using
84
112
  perlin noise. Map can be rendered in console using ansi colors or returned as 2D
85
113
  array of hashes describing each tile and binome. Completelycustomizable, use the