empi 0.21 → 0.22.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/empi.rb +3 -3
- data/lib/lib/game_states/build_state.rb +82 -0
- data/lib/{escape_state.rb → lib/game_states/escape_state.rb} +0 -0
- data/lib/{game_state.rb → lib/game_states/game_state.rb} +0 -0
- data/lib/{play_state.rb → lib/game_states/play_state.rb} +8 -6
- data/lib/{army.rb → lib/units/army.rb} +1 -1
- data/lib/{ship.rb → lib/units/ship.rb} +1 -1
- data/lib/{town.rb → lib/units/town.rb} +20 -14
- data/lib/{unit.rb → lib/units/unit.rb} +24 -16
- data/lib/{unitFunction.rb → lib/units/unitFunction.rb} +11 -2
- data/lib/{cursor.rb → lib/user_interface/cursor.rb} +4 -3
- data/lib/{infopane.rb → lib/user_interface/infopane.rb} +0 -0
- data/lib/{map.rb → lib/user_interface/map.rb} +5 -4
- data/lib/{tile.rb → lib/user_interface/tile.rb} +2 -2
- metadata +15 -15
- data/lib/build_state.rb +0 -54
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6ad13787b5a8797ab609b5b7a907cf5c496eaeb1e6dd6f6cca7d639eeb8ea806
|
4
|
+
data.tar.gz: 260e7ffb1be2609e55edef0e37fe1d74409a107f15b269472154514ada633f36
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 138cf192068da984a0a415346d9210ef81e20c968bf86f4c0a37dd71201ec233eb224e1aa400a5199143badbf649e2c45a1dd7fafa33aecc2afcbc8e58a27a19
|
7
|
+
data.tar.gz: 971e0ec6b97089ede1598648cb114cecdcd88a6fceb49a90fd9da162539afc50896569ae08bc394676dda6c5a833db6dedab9216173d4ed6100dc3759daeec00
|
data/lib/empi.rb
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
require 'rubygems'
|
2
2
|
require 'gosu'
|
3
3
|
|
4
|
-
require_relative './game_state'
|
5
|
-
require_relative './play_state'
|
4
|
+
require_relative './lib/game_states/game_state'
|
5
|
+
require_relative './lib/game_states/play_state'
|
6
6
|
|
7
7
|
TILESIZE = 50
|
8
8
|
MAPX = 10
|
@@ -19,7 +19,7 @@ class GameWindow < Gosu::Window
|
|
19
19
|
height = (MAPY + 2) * TILESIZE, \
|
20
20
|
fullscreen = false)
|
21
21
|
super
|
22
|
-
self.caption = 'Empi: Ruby Edition 0.
|
22
|
+
self.caption = 'Empi: Ruby Edition 0.22 dev'
|
23
23
|
|
24
24
|
# Activate first state
|
25
25
|
$window = self
|
@@ -0,0 +1,82 @@
|
|
1
|
+
require 'singleton'
|
2
|
+
|
3
|
+
require_relative './game_state'
|
4
|
+
require_relative './play_state'
|
5
|
+
|
6
|
+
require_relative './../units/army'
|
7
|
+
require_relative './../units/ship'
|
8
|
+
|
9
|
+
# Game state of closing the game window
|
10
|
+
class BuildState < GameState
|
11
|
+
include Singleton
|
12
|
+
|
13
|
+
attr_accessor :unit
|
14
|
+
|
15
|
+
# What to do just after state gets activated
|
16
|
+
#def after_start
|
17
|
+
#end
|
18
|
+
|
19
|
+
# What to do just before state gets deactivated
|
20
|
+
#def before_end
|
21
|
+
# TODO hide question?
|
22
|
+
#end
|
23
|
+
|
24
|
+
# Process given button to cursor
|
25
|
+
def update(button)
|
26
|
+
project = nil
|
27
|
+
|
28
|
+
case(button)
|
29
|
+
when Gosu::KbEscape then
|
30
|
+
# If there was no project selected before then behave same as "none" option
|
31
|
+
unless @unit.project
|
32
|
+
reset_function!()
|
33
|
+
else
|
34
|
+
puts PROMPT + @unit.to_s + ": cancelling, nothing changed"
|
35
|
+
GameState.switch!(PlayState.instance)
|
36
|
+
end
|
37
|
+
when Gosu::Kb0, Gosu::KbN then
|
38
|
+
reset_function!()
|
39
|
+
when Gosu::Kb1, Gosu::KbA then
|
40
|
+
project = Army
|
41
|
+
when Gosu::Kb2, Gosu::KbS then
|
42
|
+
project = Ship
|
43
|
+
end
|
44
|
+
|
45
|
+
# Did we get any proper answer?
|
46
|
+
if project
|
47
|
+
@unit.set_project!(project)
|
48
|
+
GameState.switch!(PlayState.instance)
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
# If "none" project was selected reset also the function
|
53
|
+
def reset_function!()
|
54
|
+
puts PROMPT + @unit.to_s + ": no project selected, resetting function"
|
55
|
+
@unit.set_function!(FUNCNONE)
|
56
|
+
GameState.switch!(PlayState.instance)
|
57
|
+
end
|
58
|
+
|
59
|
+
def draw
|
60
|
+
# Combine parts according to if there already is some project set
|
61
|
+
unit_text = "Built so far in " + @unit.to_s + ":"
|
62
|
+
if @unit.project
|
63
|
+
project_text = "
|
64
|
+
#{@unit.parts_built} " +
|
65
|
+
"part#{ 's' unless @unit.parts_built == 1 } of " +
|
66
|
+
@unit.project.name + " (" + @unit.build_info + ")"
|
67
|
+
else
|
68
|
+
project_text = "
|
69
|
+
no project selected"
|
70
|
+
end
|
71
|
+
|
72
|
+
options_text = "Select the project:\n
|
73
|
+
1, A – Army (#{ @unit.price_list[Army] } turns)
|
74
|
+
2, S – Ship (#{ @unit.price_list[Ship] } turns)\n
|
75
|
+
0, N – none
|
76
|
+
Esc – cancel project #{ @unit.project ? 'change' : 'setup'}"
|
77
|
+
|
78
|
+
build_project = Gosu::Image.from_text(
|
79
|
+
unit_text + "\n" + project_text + "\n\n" + options_text, 20)
|
80
|
+
build_project.draw((2*TILESIZE) + XTEXT, (2*TILESIZE) + YTEXT, ZTEXT)
|
81
|
+
end
|
82
|
+
end
|
File without changes
|
File without changes
|
@@ -3,9 +3,9 @@ require 'singleton'
|
|
3
3
|
require_relative './game_state'
|
4
4
|
require_relative './escape_state'
|
5
5
|
|
6
|
-
require_relative '
|
7
|
-
require_relative '
|
8
|
-
require_relative '
|
6
|
+
require_relative './../user_interface/cursor'
|
7
|
+
require_relative './../user_interface/infopane'
|
8
|
+
require_relative './../user_interface/map'
|
9
9
|
|
10
10
|
|
11
11
|
XTEXT = 5
|
@@ -35,6 +35,8 @@ class PlayState < GameState
|
|
35
35
|
help # show help after loading of map
|
36
36
|
new_turn
|
37
37
|
else
|
38
|
+
@cursor.info_stopped = false
|
39
|
+
|
38
40
|
# Remind player the current status
|
39
41
|
if @cursor.freeroam
|
40
42
|
@infopane.text = 'freeroam is enabled'
|
@@ -46,9 +48,9 @@ class PlayState < GameState
|
|
46
48
|
end
|
47
49
|
|
48
50
|
# What to do just before state gets deactivated
|
49
|
-
|
50
|
-
|
51
|
-
|
51
|
+
def before_end
|
52
|
+
@cursor.info_stopped = true
|
53
|
+
end
|
52
54
|
|
53
55
|
# Process given button or send it to cursor
|
54
56
|
def update(button)
|
@@ -9,7 +9,7 @@ class Army < Unit
|
|
9
9
|
def initialize(x, y, faction, map, infopane)
|
10
10
|
super
|
11
11
|
dir_path = File.dirname(__FILE__)
|
12
|
-
@image = Gosu::Image.new(dir_path + '
|
12
|
+
@image = Gosu::Image.new(dir_path + '/../../media/army.png')
|
13
13
|
|
14
14
|
@armor_left = @armor_max = 3
|
15
15
|
@moves_max = 5
|
@@ -9,7 +9,7 @@ class Ship < Unit
|
|
9
9
|
def initialize(x, y, faction, map, infopane)
|
10
10
|
super
|
11
11
|
dir_path = File.dirname(__FILE__)
|
12
|
-
@image = Gosu::Image.new(dir_path + '
|
12
|
+
@image = Gosu::Image.new(dir_path + '/../../media/ship.png')
|
13
13
|
|
14
14
|
@armor_left = @armor_max = 1
|
15
15
|
@moves_max = 2
|
@@ -1,10 +1,10 @@
|
|
1
|
-
require_relative './game_state'
|
2
|
-
require_relative './build_state'
|
3
|
-
|
4
1
|
require_relative './army'
|
5
2
|
require_relative './ship'
|
6
3
|
require_relative './unit'
|
7
4
|
|
5
|
+
require_relative './../game_states/game_state'
|
6
|
+
require_relative './../game_states/build_state'
|
7
|
+
|
8
8
|
class Town < Unit
|
9
9
|
@name = 'town'
|
10
10
|
@map_symbol = 'T'
|
@@ -15,7 +15,7 @@ class Town < Unit
|
|
15
15
|
def initialize(x, y, faction, map, infopane)
|
16
16
|
super
|
17
17
|
dir_path = File.dirname(__FILE__)
|
18
|
-
@image = Gosu::Image.new(dir_path + '
|
18
|
+
@image = Gosu::Image.new(dir_path + '/../../media/town.png')
|
19
19
|
|
20
20
|
@armor_left = @armor_max = 1
|
21
21
|
@moves_max = 0
|
@@ -26,7 +26,7 @@ class Town < Unit
|
|
26
26
|
@parts_built = 0
|
27
27
|
@parts_needed = 0
|
28
28
|
|
29
|
-
set_function!(FUNCBUILD)
|
29
|
+
set_function!(FUNCBUILD) unless @faction == 0
|
30
30
|
end
|
31
31
|
|
32
32
|
def can_build?
|
@@ -47,8 +47,10 @@ class Town < Unit
|
|
47
47
|
super
|
48
48
|
|
49
49
|
# Reset build process
|
50
|
+
@function.func = FUNCNONE
|
50
51
|
@project = nil
|
51
52
|
@parts_built = 0
|
53
|
+
|
52
54
|
set_function!(FUNCBUILD)
|
53
55
|
end
|
54
56
|
|
@@ -57,7 +59,7 @@ class Town < Unit
|
|
57
59
|
super
|
58
60
|
|
59
61
|
if @faction != 0 and func == FUNCBUILD # neutral towns don't need projects
|
60
|
-
# Set
|
62
|
+
# Set starting project once or ask player about next project
|
61
63
|
if @starting_project
|
62
64
|
set_project!(@starting_project)
|
63
65
|
@starting_project = nil
|
@@ -70,15 +72,10 @@ class Town < Unit
|
|
70
72
|
|
71
73
|
# Set desired project
|
72
74
|
def set_project!(desired_project)
|
73
|
-
|
74
|
-
prices = Hash[
|
75
|
-
[Army, Ship].collect { |ii| [ii, ii.price] } # TODO all subclasses of Unit which can_be_built?
|
76
|
-
]
|
77
|
-
|
78
|
-
unless prices.key?(desired_project)
|
75
|
+
unless price_list.key?(desired_project)
|
79
76
|
abort("town.set_project!(): Unknown project (#{desired_project})")
|
80
77
|
end
|
81
|
-
@parts_needed =
|
78
|
+
@parts_needed = price_list[desired_project]
|
82
79
|
|
83
80
|
# Compare new setting with the old one
|
84
81
|
if desired_project == @project
|
@@ -93,8 +90,17 @@ class Town < Unit
|
|
93
90
|
unless lost_parts > 0
|
94
91
|
puts new_project_set_text
|
95
92
|
else
|
96
|
-
puts new_project_set_text + ", losing #{lost_parts}
|
93
|
+
puts new_project_set_text + ", losing #{lost_parts} " +
|
94
|
+
"part#{ 's' unless lost_parts == 1 } of #{previous_project.name}"
|
95
|
+
|
97
96
|
end
|
98
97
|
end
|
99
98
|
end
|
99
|
+
|
100
|
+
# Load all prices
|
101
|
+
def price_list
|
102
|
+
prices = Hash[
|
103
|
+
[Army, Ship].collect { |ii| [ii, ii.price] } # TODO all subclasses of Unit which can_be_built?
|
104
|
+
]
|
105
|
+
end
|
100
106
|
end
|
@@ -6,7 +6,7 @@ class Unit
|
|
6
6
|
attr_reader :name, :map_symbol, :price, :value
|
7
7
|
end
|
8
8
|
|
9
|
-
attr_accessor :x, :y, :faction, :function, :cargo
|
9
|
+
attr_accessor :x, :y, :faction, :function, :cargo, :cargo_max
|
10
10
|
|
11
11
|
def initialize(x, y, faction, map, infopane)
|
12
12
|
@x = x
|
@@ -101,10 +101,11 @@ class Unit
|
|
101
101
|
oldcoords_unit = @map.get_unit(old_x, old_y)
|
102
102
|
newcoords_unit = @map.get_unit(@x, @y)
|
103
103
|
|
104
|
-
# If there is nobody or is there friendly unit with some cargo space
|
104
|
+
# If there is nobody or is there friendly unit with some cargo space (and bigger cargo space)
|
105
105
|
if !newcoords_unit || \
|
106
106
|
(newcoords_unit.faction == @faction && \
|
107
107
|
newcoords_unit.can_transport? && \
|
108
|
+
@cargo_max < newcoords_unit.cargo_max && \
|
108
109
|
!newcoords_unit.is_full?)
|
109
110
|
|
110
111
|
# Leave old coordinates
|
@@ -115,7 +116,7 @@ class Unit
|
|
115
116
|
end
|
116
117
|
|
117
118
|
# Get to new coordinates
|
118
|
-
if newcoords_unit
|
119
|
+
if !newcoords_unit
|
119
120
|
@map.set_unit(@x, @y, self)
|
120
121
|
@cargo.each { |uu|
|
121
122
|
uu.x = @x
|
@@ -129,21 +130,25 @@ class Unit
|
|
129
130
|
end
|
130
131
|
|
131
132
|
else # if there already is somebody that can't transport you (enemy or full friend)
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
133
|
+
# Stay on your original tile
|
134
|
+
@x = old_x
|
135
|
+
@y = old_y
|
136
|
+
|
137
|
+
# If it was a friend unit
|
138
|
+
if newcoords_unit.faction == @faction
|
139
|
+
if !newcoords_unit.can_transport?
|
140
|
+
puts PROMPT + newcoords_unit.to_s + ' can\'t transport other units'
|
141
|
+
else
|
142
|
+
if @cargo_max >= newcoords_unit.cargo_max
|
143
|
+
puts PROMPT + "#{self.class.name} can\'t fit in #{newcoords_unit.class.name}"
|
144
|
+
else # thus newcoords_unit.is_full? is true
|
141
145
|
puts PROMPT + newcoords_unit.to_s + ' is already full'
|
142
146
|
end
|
143
|
-
else
|
144
|
-
# Enemy!
|
145
|
-
newcoords_unit.engage!(self)
|
146
147
|
end
|
148
|
+
else
|
149
|
+
# Enemy!
|
150
|
+
newcoords_unit.engage!(self)
|
151
|
+
end
|
147
152
|
end
|
148
153
|
@moves_left -= 1
|
149
154
|
|
@@ -228,12 +233,15 @@ class Unit
|
|
228
233
|
|
229
234
|
# Set desired function
|
230
235
|
def set_function!(func)
|
231
|
-
|
236
|
+
if @faction == 0
|
237
|
+
puts PROMPT + to_s + ": neutral towns can't have functions set"
|
238
|
+
else
|
232
239
|
if func == FUNCBUILD and !can_build?
|
233
240
|
puts PROMPT + to_s + ": this unit can't build other units"
|
234
241
|
return
|
235
242
|
end
|
236
243
|
|
244
|
+
# Check current function and set the new one
|
237
245
|
if @function.func == func
|
238
246
|
puts PROMPT + to_s + ": function is already set to #{@function.func}"
|
239
247
|
else
|
@@ -12,6 +12,9 @@ class UnitFunction
|
|
12
12
|
when FUNCNONE
|
13
13
|
"no function"
|
14
14
|
when FUNCBUILD
|
15
|
+
unless @unit.project
|
16
|
+
abort("unitFunction.info(): No project set (" + @unit.to_s + ")")
|
17
|
+
end
|
15
18
|
"building #{@unit.project.name} (#{@unit.build_info})"
|
16
19
|
when FUNCSENTRY
|
17
20
|
"sentrying"
|
@@ -19,11 +22,13 @@ class UnitFunction
|
|
19
22
|
end
|
20
23
|
|
21
24
|
def func!(map, infopane)
|
22
|
-
ret = " didn't actually do anything (ERROR)"
|
23
|
-
|
24
25
|
case @func
|
25
26
|
# Build given unit
|
26
27
|
when FUNCBUILD
|
28
|
+
unless @unit.project
|
29
|
+
abort("unitFunction.func!(): No project set (" + @unit.to_s + ")")
|
30
|
+
end
|
31
|
+
|
27
32
|
@unit.parts_built += 1
|
28
33
|
|
29
34
|
unless @unit.parts_built >= @unit.parts_needed # just == should be enough
|
@@ -49,6 +54,10 @@ class UnitFunction
|
|
49
54
|
end
|
50
55
|
end
|
51
56
|
|
57
|
+
unless ret
|
58
|
+
abort("unitFunction.func!(): Functionable unit didn't function (" + @unit.to_s + ")")
|
59
|
+
end
|
60
|
+
|
52
61
|
ret
|
53
62
|
end
|
54
63
|
end
|
@@ -1,5 +1,5 @@
|
|
1
1
|
class Cursor
|
2
|
-
attr_accessor :x, :y, :freeroam, :unit
|
2
|
+
attr_accessor :x, :y, :freeroam, :info_stopped, :unit
|
3
3
|
|
4
4
|
def initialize(x, y, map, infopane)
|
5
5
|
dir_path = File.dirname(__FILE__)
|
@@ -9,8 +9,9 @@ class Cursor
|
|
9
9
|
@map = map
|
10
10
|
@infopane = infopane
|
11
11
|
|
12
|
-
@image = Gosu::Image.new(dir_path + '
|
12
|
+
@image = Gosu::Image.new(dir_path + '/../../media/cursor.png')
|
13
13
|
@freeroam = false
|
14
|
+
@info_stopped = false
|
14
15
|
end
|
15
16
|
|
16
17
|
def update(button)
|
@@ -123,7 +124,7 @@ class Cursor
|
|
123
124
|
end
|
124
125
|
|
125
126
|
warp_to!(@unit) # stay at old or go to new
|
126
|
-
info
|
127
|
+
info unless @info_stopped # due to switching out of the play game state
|
127
128
|
end
|
128
129
|
|
129
130
|
# Switch between being attached to unit and being able to freeroam
|
File without changes
|
@@ -1,7 +1,8 @@
|
|
1
|
-
require_relative './army'
|
2
|
-
require_relative './ship'
|
3
1
|
require_relative './tile'
|
4
|
-
|
2
|
+
|
3
|
+
require_relative './../units/army'
|
4
|
+
require_relative './../units/ship'
|
5
|
+
require_relative './../units/town'
|
5
6
|
|
6
7
|
class Map
|
7
8
|
attr_accessor :name, :mapx, :mapy, :infopane
|
@@ -15,7 +16,7 @@ class Map
|
|
15
16
|
]
|
16
17
|
|
17
18
|
# TODO selectable starting scenario
|
18
|
-
load_map(dir_path + '
|
19
|
+
load_map(dir_path + '/../../save/m02.esf')
|
19
20
|
end
|
20
21
|
|
21
22
|
# Load map from file
|
@@ -17,10 +17,10 @@ class Tile
|
|
17
17
|
case(loaded_symbol)
|
18
18
|
when SYMBOL_SEA then
|
19
19
|
@terrain = TILE_SEA
|
20
|
-
@image = Gosu::Image.new(dir_path + '
|
20
|
+
@image = Gosu::Image.new(dir_path + '/../../media/sea.png')
|
21
21
|
when SYMBOL_GROUND then
|
22
22
|
@terrain = TILE_GROUND
|
23
|
-
@image = Gosu::Image.new(dir_path + '
|
23
|
+
@image = Gosu::Image.new(dir_path + '/../../media/ground.png')
|
24
24
|
else
|
25
25
|
abort("tile.initialize(): Unknown terrain symbol (#{loaded_symbol})")
|
26
26
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: empi
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 0.22.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Detros
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-
|
11
|
+
date: 2020-07-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: gosu
|
@@ -46,14 +46,20 @@ executables: []
|
|
46
46
|
extensions: []
|
47
47
|
extra_rdoc_files: []
|
48
48
|
files:
|
49
|
-
- lib/army.rb
|
50
|
-
- lib/build_state.rb
|
51
|
-
- lib/cursor.rb
|
52
49
|
- lib/empi.rb
|
53
|
-
- lib/
|
54
|
-
- lib/
|
55
|
-
- lib/
|
56
|
-
- lib/
|
50
|
+
- lib/lib/game_states/build_state.rb
|
51
|
+
- lib/lib/game_states/escape_state.rb
|
52
|
+
- lib/lib/game_states/game_state.rb
|
53
|
+
- lib/lib/game_states/play_state.rb
|
54
|
+
- lib/lib/units/army.rb
|
55
|
+
- lib/lib/units/ship.rb
|
56
|
+
- lib/lib/units/town.rb
|
57
|
+
- lib/lib/units/unit.rb
|
58
|
+
- lib/lib/units/unitFunction.rb
|
59
|
+
- lib/lib/user_interface/cursor.rb
|
60
|
+
- lib/lib/user_interface/infopane.rb
|
61
|
+
- lib/lib/user_interface/map.rb
|
62
|
+
- lib/lib/user_interface/tile.rb
|
57
63
|
- lib/media/Empi v18.png
|
58
64
|
- lib/media/army.png
|
59
65
|
- lib/media/cursor.png
|
@@ -61,16 +67,10 @@ files:
|
|
61
67
|
- lib/media/sea.png
|
62
68
|
- lib/media/ship.png
|
63
69
|
- lib/media/town.png
|
64
|
-
- lib/play_state.rb
|
65
70
|
- lib/save/m01.esf
|
66
71
|
- lib/save/m02-err.esf
|
67
72
|
- lib/save/m02.esf
|
68
73
|
- lib/save/m03.esf
|
69
|
-
- lib/ship.rb
|
70
|
-
- lib/tile.rb
|
71
|
-
- lib/town.rb
|
72
|
-
- lib/unit.rb
|
73
|
-
- lib/unitFunction.rb
|
74
74
|
homepage: http://www.bay12forums.com/smf/index.php?topic=157538
|
75
75
|
licenses:
|
76
76
|
- CC-BY-SA-3.0
|
data/lib/build_state.rb
DELETED
@@ -1,54 +0,0 @@
|
|
1
|
-
require 'singleton'
|
2
|
-
|
3
|
-
require_relative './game_state'
|
4
|
-
require_relative './play_state'
|
5
|
-
|
6
|
-
require_relative './army'
|
7
|
-
require_relative './ship'
|
8
|
-
|
9
|
-
# Game state of closing the game window
|
10
|
-
class BuildState < GameState
|
11
|
-
include Singleton
|
12
|
-
|
13
|
-
attr_accessor :unit
|
14
|
-
|
15
|
-
# What to do just after state gets activated
|
16
|
-
#def after_start
|
17
|
-
#end
|
18
|
-
|
19
|
-
# What to do just before state gets deactivated
|
20
|
-
#def before_end
|
21
|
-
# TODO hide question?
|
22
|
-
#end
|
23
|
-
|
24
|
-
# Process given button to cursor
|
25
|
-
def update(button)
|
26
|
-
project = nil
|
27
|
-
|
28
|
-
case(button)
|
29
|
-
when Gosu::KbN, Gosu::KbEscape then
|
30
|
-
puts PROMPT + @unit.to_s + ": no project selected, resetting function"
|
31
|
-
@unit.set_function!(FUNCNONE)
|
32
|
-
GameState.switch!(PlayState.instance)
|
33
|
-
when Gosu::Kb1, Gosu::KbA then
|
34
|
-
project = Army
|
35
|
-
when Gosu::Kb2, Gosu::KbS then
|
36
|
-
project = Ship
|
37
|
-
end
|
38
|
-
|
39
|
-
# Did we get any proper answer?
|
40
|
-
if project
|
41
|
-
@unit.set_project!(project)
|
42
|
-
GameState.switch!(PlayState.instance)
|
43
|
-
end
|
44
|
-
end
|
45
|
-
|
46
|
-
def draw
|
47
|
-
build_project = Gosu::Image.from_text(
|
48
|
-
"Select the project for " + @unit.to_s + ":\n
|
49
|
-
1, A – Army (3 turns)\n
|
50
|
-
2, S – Ship (5 turns)\n\n
|
51
|
-
N, Esc – none\n", 20)
|
52
|
-
build_project.draw((2*TILESIZE) + XTEXT, (3*TILESIZE) + YTEXT, ZTEXT)
|
53
|
-
end
|
54
|
-
end
|