empi 0.21 → 0.25
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 +8 -5
- data/lib/lib/game_states/build_state.rb +68 -0
- data/lib/{game_state.rb → lib/game_states/game_state.rb} +0 -0
- data/lib/lib/game_states/play_state.rb +149 -0
- data/lib/{escape_state.rb → lib/game_states/quit_state.rb} +4 -5
- data/lib/lib/game_states/set_state.rb +75 -0
- data/lib/lib/game_states/welcome_state.rb +85 -0
- data/lib/lib/game_states/win_state.rb +61 -0
- data/lib/{army.rb → lib/units/army.rb} +2 -2
- data/lib/{ship.rb → lib/units/ship.rb} +2 -2
- data/lib/{town.rb → lib/units/town.rb} +31 -23
- data/lib/{unit.rb → lib/units/unit.rb} +73 -47
- data/lib/{unitFunction.rb → lib/units/unit_function.rb} +13 -4
- data/lib/lib/user_interface/cursor.rb +252 -0
- data/lib/lib/user_interface/infopane.rb +49 -0
- data/lib/lib/user_interface/map.rb +189 -0
- data/lib/lib/user_interface/tile.rb +56 -0
- metadata +23 -19
- data/lib/build_state.rb +0 -54
- data/lib/cursor.rb +0 -167
- data/lib/infopane.rb +0 -38
- data/lib/map.rb +0 -153
- data/lib/play_state.rb +0 -98
- data/lib/tile.rb +0 -36
data/lib/play_state.rb
DELETED
@@ -1,98 +0,0 @@
|
|
1
|
-
require 'singleton'
|
2
|
-
|
3
|
-
require_relative './game_state'
|
4
|
-
require_relative './escape_state'
|
5
|
-
|
6
|
-
require_relative './cursor'
|
7
|
-
require_relative './infopane'
|
8
|
-
require_relative './map'
|
9
|
-
|
10
|
-
|
11
|
-
XTEXT = 5
|
12
|
-
YTEXT = 5
|
13
|
-
ZTILE = 0
|
14
|
-
ZUNIT = 1
|
15
|
-
ZTEXT = 2
|
16
|
-
ZCURSOR = 3
|
17
|
-
|
18
|
-
FACTIONS = 2
|
19
|
-
COLOUR = [0xff_ffffff, 0xff_ff3300, 0xff_ffcc00]
|
20
|
-
|
21
|
-
FUNCNONE = 'none'
|
22
|
-
FUNCSENTRY = 'sentry'
|
23
|
-
FUNCBUILD = 'build'
|
24
|
-
|
25
|
-
# Game state of main gameplay
|
26
|
-
class PlayState < GameState
|
27
|
-
include Singleton
|
28
|
-
|
29
|
-
# Load new scenario or resume game
|
30
|
-
def after_start
|
31
|
-
unless @infopane and @map and @cursor # is everything set up yet?
|
32
|
-
@infopane = Infopane.new
|
33
|
-
@map = Map.new(@infopane)
|
34
|
-
@cursor = Cursor.new(0, 0, @map, @infopane)
|
35
|
-
help # show help after loading of map
|
36
|
-
new_turn
|
37
|
-
else
|
38
|
-
# Remind player the current status
|
39
|
-
if @cursor.freeroam
|
40
|
-
@infopane.text = 'freeroam is enabled'
|
41
|
-
puts 'freeroam is enabled'
|
42
|
-
else
|
43
|
-
@cursor.info
|
44
|
-
end
|
45
|
-
end
|
46
|
-
end
|
47
|
-
|
48
|
-
# What to do just before state gets deactivated
|
49
|
-
#def before_end
|
50
|
-
# TODO undraw all parts?
|
51
|
-
#end
|
52
|
-
|
53
|
-
# Process given button or send it to cursor
|
54
|
-
def update(button)
|
55
|
-
case(button)
|
56
|
-
when Gosu::KbEscape then
|
57
|
-
GameState.switch!(EscapeState.instance)
|
58
|
-
when Gosu::KbPeriod then
|
59
|
-
new_turn
|
60
|
-
when Gosu::KbH then
|
61
|
-
help
|
62
|
-
else
|
63
|
-
@cursor.update(button)
|
64
|
-
end
|
65
|
-
end
|
66
|
-
|
67
|
-
# Draw all parts of main window
|
68
|
-
def draw
|
69
|
-
@map.draw_tiles
|
70
|
-
@cursor.draw
|
71
|
-
@infopane.draw
|
72
|
-
end
|
73
|
-
|
74
|
-
# End current turn and start the next one
|
75
|
-
def new_turn
|
76
|
-
puts "=============\n" \
|
77
|
-
"End of turn\n" \
|
78
|
-
"=============\n"
|
79
|
-
|
80
|
-
functionable_units = @map.all_units.select { |uu| uu.function != FUNCNONE}
|
81
|
-
functionable_units.each { |uu| uu.function! }
|
82
|
-
|
83
|
-
@map.all_units.each { |uu| uu.reset_moves!}
|
84
|
-
@infopane.next_turn
|
85
|
-
|
86
|
-
@cursor.freeroam = true
|
87
|
-
@cursor.switch_freeroam! # so freeroam = false, with messages
|
88
|
-
end
|
89
|
-
|
90
|
-
# Printout the controls
|
91
|
-
def help
|
92
|
-
puts "-----------\n" \
|
93
|
-
"h: help, Esc: end game, Enter: info, j: switch freeroam\n" \
|
94
|
-
"QWEADZXC or arrow keys: movement, .: end turn\n" \
|
95
|
-
"functions: s sentry, b build, n none\n" \
|
96
|
-
"-----------\n"
|
97
|
-
end
|
98
|
-
end
|
data/lib/tile.rb
DELETED
@@ -1,36 +0,0 @@
|
|
1
|
-
TILE_SEA = 0
|
2
|
-
TILE_GROUND = 1
|
3
|
-
|
4
|
-
SYMBOL_SEA = '.'
|
5
|
-
SYMBOL_GROUND = '#'
|
6
|
-
|
7
|
-
class Tile
|
8
|
-
attr_accessor :terrain, :infopane, :unit
|
9
|
-
|
10
|
-
def initialize(x, y, loaded_symbol, infopane)
|
11
|
-
dir_path = File.dirname(__FILE__)
|
12
|
-
|
13
|
-
@x = x
|
14
|
-
@y = y
|
15
|
-
@infopane = infopane
|
16
|
-
|
17
|
-
case(loaded_symbol)
|
18
|
-
when SYMBOL_SEA then
|
19
|
-
@terrain = TILE_SEA
|
20
|
-
@image = Gosu::Image.new(dir_path + '/media/sea.png')
|
21
|
-
when SYMBOL_GROUND then
|
22
|
-
@terrain = TILE_GROUND
|
23
|
-
@image = Gosu::Image.new(dir_path + '/media/ground.png')
|
24
|
-
else
|
25
|
-
abort("tile.initialize(): Unknown terrain symbol (#{loaded_symbol})")
|
26
|
-
end
|
27
|
-
end
|
28
|
-
|
29
|
-
def draw
|
30
|
-
@image.draw(@x * TILESIZE, (@y + 1) * TILESIZE, ZTILE)
|
31
|
-
|
32
|
-
if @unit
|
33
|
-
@unit.draw
|
34
|
-
end
|
35
|
-
end
|
36
|
-
end
|