rubyplay_framework 1.6.4 → 1.6.6
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/interpreter/gameLexer.rb +94 -94
- data/lib/interpreter/gameLexer.rex +23 -23
- data/lib/interpreter/gameParser.racc +39 -39
- data/lib/interpreter/gameParser.rb +172 -172
- data/lib/map/dungeon.rb +6 -6
- data/lib/map/entity.rb +2 -4
- data/lib/map/map.rb +19 -19
- data/lib/map/point.rb +2 -4
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4ffde0f9a94ffc46604e5fbcf531397362930d1a
|
4
|
+
data.tar.gz: 44c4fe0fc5a5f6f6eb753361c091193c60961992
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d44d04e753525ccf9927b467ccd03d2e7a3cfa3089f7d124d9ffe8a0f9da2e798f69ef7053af90418a93399fb252425c7f4a8516118dcd6957ced2e40935f29d
|
7
|
+
data.tar.gz: 65a7db2dbfe59f1867b6b88088633ba7275257f22beeacdd68e758c077ccada68802a23615fb0c0ebf06f863e2fe3b8eea3cf026f7afebdcfb1de8dbb85e37fb
|
@@ -1,94 +1,94 @@
|
|
1
|
-
#--
|
2
|
-
# DO NOT MODIFY!!!!
|
3
|
-
# This file is automatically generated by rex 1.0.5
|
4
|
-
# from lexical definition file "lib/interpreter/gameLexer.rex".
|
5
|
-
#++
|
6
|
-
|
7
|
-
require 'racc/parser'
|
8
|
-
class GameLanguage < Racc::Parser
|
9
|
-
require 'strscan'
|
10
|
-
|
11
|
-
class ScanError < StandardError ; end
|
12
|
-
|
13
|
-
attr_reader :lineno
|
14
|
-
attr_reader :filename
|
15
|
-
attr_accessor :state
|
16
|
-
|
17
|
-
def scan_setup(str)
|
18
|
-
@ss = StringScanner.new(str)
|
19
|
-
@lineno = 1
|
20
|
-
@state = nil
|
21
|
-
end
|
22
|
-
|
23
|
-
def action
|
24
|
-
yield
|
25
|
-
end
|
26
|
-
|
27
|
-
def scan_str(str)
|
28
|
-
scan_setup(str)
|
29
|
-
do_parse
|
30
|
-
end
|
31
|
-
alias :scan :scan_str
|
32
|
-
|
33
|
-
def load_file( filename )
|
34
|
-
@filename = filename
|
35
|
-
open(filename, "r") do |f|
|
36
|
-
scan_setup(f.read)
|
37
|
-
end
|
38
|
-
end
|
39
|
-
|
40
|
-
def scan_file( filename )
|
41
|
-
load_file(filename)
|
42
|
-
do_parse
|
43
|
-
end
|
44
|
-
|
45
|
-
|
46
|
-
def next_token
|
47
|
-
return if @ss.eos?
|
48
|
-
|
49
|
-
# skips empty actions
|
50
|
-
until token = _next_token or @ss.eos?; end
|
51
|
-
token
|
52
|
-
end
|
53
|
-
|
54
|
-
def _next_token
|
55
|
-
text = @ss.peek(1)
|
56
|
-
@lineno += 1 if text == "\n"
|
57
|
-
token = case @state
|
58
|
-
when nil
|
59
|
-
case
|
60
|
-
when (text = @ss.scan(/[ \t]+[a-z]+|[ \t]+[A-Z][a-z]+|[ \t]+[a-z]+\d+|[ \t]+[A-Z][a-z]+\d+/))
|
61
|
-
action { [:WORD, text.gsub!(/[\ \t]+/,'')] }
|
62
|
-
|
63
|
-
when (text = @ss.scan(/[ \t]+/))
|
64
|
-
;
|
65
|
-
|
66
|
-
when (text = @ss.scan(/\d+|-\d+/))
|
67
|
-
action {[:NUMBER, text.to_i]}
|
68
|
-
|
69
|
-
when (text = @ss.scan(/\d+\.\d+|-\d+\.\d+/))
|
70
|
-
action {[:FLOAT, test.to_f]}
|
71
|
-
|
72
|
-
when (text = @ss.scan(/\w+/))
|
73
|
-
action {[:FUNCTION, text]}
|
74
|
-
|
75
|
-
else
|
76
|
-
text = @ss.string[@ss.pos .. -1]
|
77
|
-
raise ScanError, "can not match: '" + text + "'"
|
78
|
-
end # if
|
79
|
-
|
80
|
-
else
|
81
|
-
raise ScanError, "undefined state: '" + state.to_s + "'"
|
82
|
-
end # case state
|
83
|
-
token
|
84
|
-
end # def _next_token
|
85
|
-
|
86
|
-
def tokenize(code)
|
87
|
-
scan_setup(code)
|
88
|
-
tokens = []
|
89
|
-
while token = next_token
|
90
|
-
tokens << token
|
91
|
-
end
|
92
|
-
tokens
|
93
|
-
end
|
94
|
-
end # class
|
1
|
+
#--
|
2
|
+
# DO NOT MODIFY!!!!
|
3
|
+
# This file is automatically generated by rex 1.0.5
|
4
|
+
# from lexical definition file "lib/interpreter/gameLexer.rex".
|
5
|
+
#++
|
6
|
+
|
7
|
+
require 'racc/parser'
|
8
|
+
class GameLanguage < Racc::Parser
|
9
|
+
require 'strscan'
|
10
|
+
|
11
|
+
class ScanError < StandardError ; end
|
12
|
+
|
13
|
+
attr_reader :lineno
|
14
|
+
attr_reader :filename
|
15
|
+
attr_accessor :state
|
16
|
+
|
17
|
+
def scan_setup(str)
|
18
|
+
@ss = StringScanner.new(str)
|
19
|
+
@lineno = 1
|
20
|
+
@state = nil
|
21
|
+
end
|
22
|
+
|
23
|
+
def action
|
24
|
+
yield
|
25
|
+
end
|
26
|
+
|
27
|
+
def scan_str(str)
|
28
|
+
scan_setup(str)
|
29
|
+
do_parse
|
30
|
+
end
|
31
|
+
alias :scan :scan_str
|
32
|
+
|
33
|
+
def load_file( filename )
|
34
|
+
@filename = filename
|
35
|
+
open(filename, "r") do |f|
|
36
|
+
scan_setup(f.read)
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
def scan_file( filename )
|
41
|
+
load_file(filename)
|
42
|
+
do_parse
|
43
|
+
end
|
44
|
+
|
45
|
+
|
46
|
+
def next_token
|
47
|
+
return if @ss.eos?
|
48
|
+
|
49
|
+
# skips empty actions
|
50
|
+
until token = _next_token or @ss.eos?; end
|
51
|
+
token
|
52
|
+
end
|
53
|
+
|
54
|
+
def _next_token
|
55
|
+
text = @ss.peek(1)
|
56
|
+
@lineno += 1 if text == "\n"
|
57
|
+
token = case @state
|
58
|
+
when nil
|
59
|
+
case
|
60
|
+
when (text = @ss.scan(/[ \t]+[a-z]+|[ \t]+[A-Z][a-z]+|[ \t]+[a-z]+\d+|[ \t]+[A-Z][a-z]+\d+/))
|
61
|
+
action { [:WORD, text.gsub!(/[\ \t]+/,'')] }
|
62
|
+
|
63
|
+
when (text = @ss.scan(/[ \t]+/))
|
64
|
+
;
|
65
|
+
|
66
|
+
when (text = @ss.scan(/\d+|-\d+/))
|
67
|
+
action {[:NUMBER, text.to_i]}
|
68
|
+
|
69
|
+
when (text = @ss.scan(/\d+\.\d+|-\d+\.\d+/))
|
70
|
+
action {[:FLOAT, test.to_f]}
|
71
|
+
|
72
|
+
when (text = @ss.scan(/\w+/))
|
73
|
+
action {[:FUNCTION, text]}
|
74
|
+
|
75
|
+
else
|
76
|
+
text = @ss.string[@ss.pos .. -1]
|
77
|
+
raise ScanError, "can not match: '" + text + "'"
|
78
|
+
end # if
|
79
|
+
|
80
|
+
else
|
81
|
+
raise ScanError, "undefined state: '" + state.to_s + "'"
|
82
|
+
end # case state
|
83
|
+
token
|
84
|
+
end # def _next_token
|
85
|
+
|
86
|
+
def tokenize(code)
|
87
|
+
scan_setup(code)
|
88
|
+
tokens = []
|
89
|
+
while token = next_token
|
90
|
+
tokens << token
|
91
|
+
end
|
92
|
+
tokens
|
93
|
+
end
|
94
|
+
end # class
|
@@ -1,24 +1,24 @@
|
|
1
|
-
class GameLanguage
|
2
|
-
macro
|
3
|
-
BLANK [\ \t]+ #only works on macro
|
4
|
-
NUMBER \d+|-\d+
|
5
|
-
FLOAT \d+\.\d+|-\d+\.\d+
|
6
|
-
WORD [\ \t]+[a-z]+|[\ \t]+[A-Z][a-z]+|[\ \t]+[a-z]+\d+|[\ \t]+[A-Z][a-z]+\d+
|
7
|
-
FUNCTION \w+
|
8
|
-
rule
|
9
|
-
{WORD} { [:WORD, text.gsub!(/[\ \t]+/,'')] }
|
10
|
-
{BLANK} #do nothing
|
11
|
-
{NUMBER} {[:NUMBER, text.to_i]}
|
12
|
-
{FLOAT} {[:FLOAT, test.to_f]}
|
13
|
-
{FUNCTION} {[:FUNCTION, text]}
|
14
|
-
|
15
|
-
inner
|
16
|
-
def tokenize(code)
|
17
|
-
scan_setup(code)
|
18
|
-
tokens = []
|
19
|
-
while token = next_token
|
20
|
-
tokens << token
|
21
|
-
end
|
22
|
-
tokens
|
23
|
-
end
|
1
|
+
class GameLanguage
|
2
|
+
macro
|
3
|
+
BLANK [\ \t]+ #only works on macro
|
4
|
+
NUMBER \d+|-\d+
|
5
|
+
FLOAT \d+\.\d+|-\d+\.\d+
|
6
|
+
WORD [\ \t]+[a-z]+|[\ \t]+[A-Z][a-z]+|[\ \t]+[a-z]+\d+|[\ \t]+[A-Z][a-z]+\d+
|
7
|
+
FUNCTION \w+
|
8
|
+
rule
|
9
|
+
{WORD} { [:WORD, text.gsub!(/[\ \t]+/,'')] }
|
10
|
+
{BLANK} #do nothing
|
11
|
+
{NUMBER} {[:NUMBER, text.to_i]}
|
12
|
+
{FLOAT} {[:FLOAT, test.to_f]}
|
13
|
+
{FUNCTION} {[:FUNCTION, text]}
|
14
|
+
|
15
|
+
inner
|
16
|
+
def tokenize(code)
|
17
|
+
scan_setup(code)
|
18
|
+
tokens = []
|
19
|
+
while token = next_token
|
20
|
+
tokens << token
|
21
|
+
end
|
22
|
+
tokens
|
23
|
+
end
|
24
24
|
end
|
@@ -1,40 +1,40 @@
|
|
1
|
-
class GameLanguage
|
2
|
-
rule
|
3
|
-
function : FUNCTION
|
4
|
-
| FUNCTION WORD { return val }
|
5
|
-
| FUNCTION WORD WORD { return val }
|
6
|
-
| FUNCTION WORD WORD WORD { return val }
|
7
|
-
| FUNCTION WORD WORD WORD WORD { return val }
|
8
|
-
| FUNCTION NUMBER NUMBER { return val }
|
9
|
-
| FUNCTION NUMBER NUMBER NUMBER { return val }
|
10
|
-
end
|
11
|
-
|
12
|
-
---- header
|
13
|
-
require_relative 'gameLexer'
|
14
|
-
|
15
|
-
---- inner
|
16
|
-
@@functions = []
|
17
|
-
|
18
|
-
def parse(object, input)
|
19
|
-
output = scan_str(input)
|
20
|
-
if(output.kind_of?(Array))
|
21
|
-
if(@@functions.find { |f| (f[0] == output[0]) && (f.length == output.length) })
|
22
|
-
object.public_send(output[0].to_sym, *(output.drop(1)))
|
23
|
-
else
|
24
|
-
raise RuntimeError, "No such function #{output[0]}"
|
25
|
-
end
|
26
|
-
else
|
27
|
-
if(@@functions.find { |f| (f[0] == output) })
|
28
|
-
object.public_send(output.to_sym)
|
29
|
-
else
|
30
|
-
raise RuntimeError, "No such function #{output}"
|
31
|
-
end
|
32
|
-
end
|
33
|
-
end
|
34
|
-
|
35
|
-
def intialize_functions(filename)
|
36
|
-
file = File.open(filename).read
|
37
|
-
file.each_line { |line|
|
38
|
-
@@functions << line.gsub(/\s+/, ' ').strip.split(" ")
|
39
|
-
}
|
1
|
+
class GameLanguage
|
2
|
+
rule
|
3
|
+
function : FUNCTION
|
4
|
+
| FUNCTION WORD { return val }
|
5
|
+
| FUNCTION WORD WORD { return val }
|
6
|
+
| FUNCTION WORD WORD WORD { return val }
|
7
|
+
| FUNCTION WORD WORD WORD WORD { return val }
|
8
|
+
| FUNCTION NUMBER NUMBER { return val }
|
9
|
+
| FUNCTION NUMBER NUMBER NUMBER { return val }
|
10
|
+
end
|
11
|
+
|
12
|
+
---- header
|
13
|
+
require_relative 'gameLexer'
|
14
|
+
|
15
|
+
---- inner
|
16
|
+
@@functions = []
|
17
|
+
|
18
|
+
def parse(object, input)
|
19
|
+
output = scan_str(input)
|
20
|
+
if(output.kind_of?(Array))
|
21
|
+
if(@@functions.find { |f| (f[0] == output[0]) && (f.length == output.length) })
|
22
|
+
object.public_send(output[0].to_sym, *(output.drop(1)))
|
23
|
+
else
|
24
|
+
raise RuntimeError, "No such function #{output[0]}"
|
25
|
+
end
|
26
|
+
else
|
27
|
+
if(@@functions.find { |f| (f[0] == output) })
|
28
|
+
object.public_send(output.to_sym)
|
29
|
+
else
|
30
|
+
raise RuntimeError, "No such function #{output}"
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
def intialize_functions(filename)
|
36
|
+
file = File.open(filename).read
|
37
|
+
file.each_line { |line|
|
38
|
+
@@functions << line.gsub(/\s+/, ' ').strip.split(" ")
|
39
|
+
}
|
40
40
|
end
|
@@ -1,172 +1,172 @@
|
|
1
|
-
#
|
2
|
-
# DO NOT MODIFY!!!!
|
3
|
-
# This file is automatically generated by Racc 1.4.14
|
4
|
-
# from Racc grammer file "".
|
5
|
-
#
|
6
|
-
|
7
|
-
require 'racc/parser.rb'
|
8
|
-
|
9
|
-
require_relative 'gameLexer'
|
10
|
-
|
11
|
-
class GameLanguage < Racc::Parser
|
12
|
-
|
13
|
-
module_eval(<<'...end gameParser.racc/module_eval...', 'gameParser.racc', 16)
|
14
|
-
@@functions = []
|
15
|
-
|
16
|
-
def parse(object, input)
|
17
|
-
output = scan_str(input)
|
18
|
-
if(output.kind_of?(Array))
|
19
|
-
if(@@functions.find { |f| (f[0] == output[0]) && (f.length == output.length) })
|
20
|
-
object.public_send(output[0].to_sym, *(output.drop(1)))
|
21
|
-
else
|
22
|
-
raise RuntimeError, "No such function #{output[0]}"
|
23
|
-
end
|
24
|
-
else
|
25
|
-
if(@@functions.find { |f| (f[0] == output) })
|
26
|
-
object.public_send(output.to_sym)
|
27
|
-
else
|
28
|
-
raise RuntimeError, "No such function #{output}"
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|
32
|
-
|
33
|
-
def intialize_functions(filename)
|
34
|
-
file = File.open(filename).read
|
35
|
-
file.each_line { |line|
|
36
|
-
@@functions << line.gsub(/\s+/, ' ').strip.split(" ")
|
37
|
-
}
|
38
|
-
end
|
39
|
-
...end gameParser.racc/module_eval...
|
40
|
-
##### State transition tables begin ###
|
41
|
-
|
42
|
-
racc_action_table = [
|
43
|
-
4, 5, 7, 2, 6, 3, 8, 9, 10, 11 ]
|
44
|
-
|
45
|
-
racc_action_check = [
|
46
|
-
2, 2, 4, 0, 3, 1, 5, 7, 8, 9 ]
|
47
|
-
|
48
|
-
racc_action_pointer = [
|
49
|
-
1, 5, -3, 4, -1, 2, nil, 4, 4, 6,
|
50
|
-
nil, nil ]
|
51
|
-
|
52
|
-
racc_action_default = [
|
53
|
-
-8, -8, -1, -8, -2, -8, 12, -3, -6, -4,
|
54
|
-
-7, -5 ]
|
55
|
-
|
56
|
-
racc_goto_table = [
|
57
|
-
1 ]
|
58
|
-
|
59
|
-
racc_goto_check = [
|
60
|
-
1 ]
|
61
|
-
|
62
|
-
racc_goto_pointer = [
|
63
|
-
nil, 0 ]
|
64
|
-
|
65
|
-
racc_goto_default = [
|
66
|
-
nil, nil ]
|
67
|
-
|
68
|
-
racc_reduce_table = [
|
69
|
-
0, 0, :racc_error,
|
70
|
-
1, 6, :_reduce_none,
|
71
|
-
2, 6, :_reduce_2,
|
72
|
-
3, 6, :_reduce_3,
|
73
|
-
4, 6, :_reduce_4,
|
74
|
-
5, 6, :_reduce_5,
|
75
|
-
3, 6, :_reduce_6,
|
76
|
-
4, 6, :_reduce_7 ]
|
77
|
-
|
78
|
-
racc_reduce_n = 8
|
79
|
-
|
80
|
-
racc_shift_n = 12
|
81
|
-
|
82
|
-
racc_token_table = {
|
83
|
-
false => 0,
|
84
|
-
:error => 1,
|
85
|
-
:FUNCTION => 2,
|
86
|
-
:WORD => 3,
|
87
|
-
:NUMBER => 4 }
|
88
|
-
|
89
|
-
racc_nt_base = 5
|
90
|
-
|
91
|
-
racc_use_result_var = true
|
92
|
-
|
93
|
-
Racc_arg = [
|
94
|
-
racc_action_table,
|
95
|
-
racc_action_check,
|
96
|
-
racc_action_default,
|
97
|
-
racc_action_pointer,
|
98
|
-
racc_goto_table,
|
99
|
-
racc_goto_check,
|
100
|
-
racc_goto_default,
|
101
|
-
racc_goto_pointer,
|
102
|
-
racc_nt_base,
|
103
|
-
racc_reduce_table,
|
104
|
-
racc_token_table,
|
105
|
-
racc_shift_n,
|
106
|
-
racc_reduce_n,
|
107
|
-
racc_use_result_var ]
|
108
|
-
|
109
|
-
Racc_token_to_s_table = [
|
110
|
-
"$end",
|
111
|
-
"error",
|
112
|
-
"FUNCTION",
|
113
|
-
"WORD",
|
114
|
-
"NUMBER",
|
115
|
-
"$start",
|
116
|
-
"function" ]
|
117
|
-
|
118
|
-
Racc_debug_parser = false
|
119
|
-
|
120
|
-
##### State transition tables end #####
|
121
|
-
|
122
|
-
# reduce 0 omitted
|
123
|
-
|
124
|
-
# reduce 1 omitted
|
125
|
-
|
126
|
-
module_eval(<<'.,.,', 'gameParser.racc', 3)
|
127
|
-
def _reduce_2(val, _values, result)
|
128
|
-
return val
|
129
|
-
result
|
130
|
-
end
|
131
|
-
.,.,
|
132
|
-
|
133
|
-
module_eval(<<'.,.,', 'gameParser.racc', 4)
|
134
|
-
def _reduce_3(val, _values, result)
|
135
|
-
return val
|
136
|
-
result
|
137
|
-
end
|
138
|
-
.,.,
|
139
|
-
|
140
|
-
module_eval(<<'.,.,', 'gameParser.racc', 5)
|
141
|
-
def _reduce_4(val, _values, result)
|
142
|
-
return val
|
143
|
-
result
|
144
|
-
end
|
145
|
-
.,.,
|
146
|
-
|
147
|
-
module_eval(<<'.,.,', 'gameParser.racc', 6)
|
148
|
-
def _reduce_5(val, _values, result)
|
149
|
-
return val
|
150
|
-
result
|
151
|
-
end
|
152
|
-
.,.,
|
153
|
-
|
154
|
-
module_eval(<<'.,.,', 'gameParser.racc', 7)
|
155
|
-
def _reduce_6(val, _values, result)
|
156
|
-
return val
|
157
|
-
result
|
158
|
-
end
|
159
|
-
.,.,
|
160
|
-
|
161
|
-
module_eval(<<'.,.,', 'gameParser.racc', 8)
|
162
|
-
def _reduce_7(val, _values, result)
|
163
|
-
return val
|
164
|
-
result
|
165
|
-
end
|
166
|
-
.,.,
|
167
|
-
|
168
|
-
def _reduce_none(val, _values, result)
|
169
|
-
val[0]
|
170
|
-
end
|
171
|
-
|
172
|
-
end # class GameLanguage
|
1
|
+
#
|
2
|
+
# DO NOT MODIFY!!!!
|
3
|
+
# This file is automatically generated by Racc 1.4.14
|
4
|
+
# from Racc grammer file "".
|
5
|
+
#
|
6
|
+
|
7
|
+
require 'racc/parser.rb'
|
8
|
+
|
9
|
+
require_relative 'gameLexer'
|
10
|
+
|
11
|
+
class GameLanguage < Racc::Parser
|
12
|
+
|
13
|
+
module_eval(<<'...end gameParser.racc/module_eval...', 'gameParser.racc', 16)
|
14
|
+
@@functions = []
|
15
|
+
|
16
|
+
def parse(object, input)
|
17
|
+
output = scan_str(input)
|
18
|
+
if(output.kind_of?(Array))
|
19
|
+
if(@@functions.find { |f| (f[0] == output[0]) && (f.length == output.length) })
|
20
|
+
object.public_send(output[0].to_sym, *(output.drop(1)))
|
21
|
+
else
|
22
|
+
raise RuntimeError, "No such function #{output[0]}"
|
23
|
+
end
|
24
|
+
else
|
25
|
+
if(@@functions.find { |f| (f[0] == output) })
|
26
|
+
object.public_send(output.to_sym)
|
27
|
+
else
|
28
|
+
raise RuntimeError, "No such function #{output}"
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
def intialize_functions(filename)
|
34
|
+
file = File.open(filename).read
|
35
|
+
file.each_line { |line|
|
36
|
+
@@functions << line.gsub(/\s+/, ' ').strip.split(" ")
|
37
|
+
}
|
38
|
+
end
|
39
|
+
...end gameParser.racc/module_eval...
|
40
|
+
##### State transition tables begin ###
|
41
|
+
|
42
|
+
racc_action_table = [
|
43
|
+
4, 5, 7, 2, 6, 3, 8, 9, 10, 11 ]
|
44
|
+
|
45
|
+
racc_action_check = [
|
46
|
+
2, 2, 4, 0, 3, 1, 5, 7, 8, 9 ]
|
47
|
+
|
48
|
+
racc_action_pointer = [
|
49
|
+
1, 5, -3, 4, -1, 2, nil, 4, 4, 6,
|
50
|
+
nil, nil ]
|
51
|
+
|
52
|
+
racc_action_default = [
|
53
|
+
-8, -8, -1, -8, -2, -8, 12, -3, -6, -4,
|
54
|
+
-7, -5 ]
|
55
|
+
|
56
|
+
racc_goto_table = [
|
57
|
+
1 ]
|
58
|
+
|
59
|
+
racc_goto_check = [
|
60
|
+
1 ]
|
61
|
+
|
62
|
+
racc_goto_pointer = [
|
63
|
+
nil, 0 ]
|
64
|
+
|
65
|
+
racc_goto_default = [
|
66
|
+
nil, nil ]
|
67
|
+
|
68
|
+
racc_reduce_table = [
|
69
|
+
0, 0, :racc_error,
|
70
|
+
1, 6, :_reduce_none,
|
71
|
+
2, 6, :_reduce_2,
|
72
|
+
3, 6, :_reduce_3,
|
73
|
+
4, 6, :_reduce_4,
|
74
|
+
5, 6, :_reduce_5,
|
75
|
+
3, 6, :_reduce_6,
|
76
|
+
4, 6, :_reduce_7 ]
|
77
|
+
|
78
|
+
racc_reduce_n = 8
|
79
|
+
|
80
|
+
racc_shift_n = 12
|
81
|
+
|
82
|
+
racc_token_table = {
|
83
|
+
false => 0,
|
84
|
+
:error => 1,
|
85
|
+
:FUNCTION => 2,
|
86
|
+
:WORD => 3,
|
87
|
+
:NUMBER => 4 }
|
88
|
+
|
89
|
+
racc_nt_base = 5
|
90
|
+
|
91
|
+
racc_use_result_var = true
|
92
|
+
|
93
|
+
Racc_arg = [
|
94
|
+
racc_action_table,
|
95
|
+
racc_action_check,
|
96
|
+
racc_action_default,
|
97
|
+
racc_action_pointer,
|
98
|
+
racc_goto_table,
|
99
|
+
racc_goto_check,
|
100
|
+
racc_goto_default,
|
101
|
+
racc_goto_pointer,
|
102
|
+
racc_nt_base,
|
103
|
+
racc_reduce_table,
|
104
|
+
racc_token_table,
|
105
|
+
racc_shift_n,
|
106
|
+
racc_reduce_n,
|
107
|
+
racc_use_result_var ]
|
108
|
+
|
109
|
+
Racc_token_to_s_table = [
|
110
|
+
"$end",
|
111
|
+
"error",
|
112
|
+
"FUNCTION",
|
113
|
+
"WORD",
|
114
|
+
"NUMBER",
|
115
|
+
"$start",
|
116
|
+
"function" ]
|
117
|
+
|
118
|
+
Racc_debug_parser = false
|
119
|
+
|
120
|
+
##### State transition tables end #####
|
121
|
+
|
122
|
+
# reduce 0 omitted
|
123
|
+
|
124
|
+
# reduce 1 omitted
|
125
|
+
|
126
|
+
module_eval(<<'.,.,', 'gameParser.racc', 3)
|
127
|
+
def _reduce_2(val, _values, result)
|
128
|
+
return val
|
129
|
+
result
|
130
|
+
end
|
131
|
+
.,.,
|
132
|
+
|
133
|
+
module_eval(<<'.,.,', 'gameParser.racc', 4)
|
134
|
+
def _reduce_3(val, _values, result)
|
135
|
+
return val
|
136
|
+
result
|
137
|
+
end
|
138
|
+
.,.,
|
139
|
+
|
140
|
+
module_eval(<<'.,.,', 'gameParser.racc', 5)
|
141
|
+
def _reduce_4(val, _values, result)
|
142
|
+
return val
|
143
|
+
result
|
144
|
+
end
|
145
|
+
.,.,
|
146
|
+
|
147
|
+
module_eval(<<'.,.,', 'gameParser.racc', 6)
|
148
|
+
def _reduce_5(val, _values, result)
|
149
|
+
return val
|
150
|
+
result
|
151
|
+
end
|
152
|
+
.,.,
|
153
|
+
|
154
|
+
module_eval(<<'.,.,', 'gameParser.racc', 7)
|
155
|
+
def _reduce_6(val, _values, result)
|
156
|
+
return val
|
157
|
+
result
|
158
|
+
end
|
159
|
+
.,.,
|
160
|
+
|
161
|
+
module_eval(<<'.,.,', 'gameParser.racc', 8)
|
162
|
+
def _reduce_7(val, _values, result)
|
163
|
+
return val
|
164
|
+
result
|
165
|
+
end
|
166
|
+
.,.,
|
167
|
+
|
168
|
+
def _reduce_none(val, _values, result)
|
169
|
+
val[0]
|
170
|
+
end
|
171
|
+
|
172
|
+
end # class GameLanguage
|
data/lib/map/dungeon.rb
CHANGED
@@ -52,7 +52,7 @@ module MapDungeon
|
|
52
52
|
end
|
53
53
|
|
54
54
|
#Dungeon builder class
|
55
|
-
class
|
55
|
+
class DungeonBuilder
|
56
56
|
include MapEntity
|
57
57
|
|
58
58
|
def initialize()
|
@@ -61,22 +61,22 @@ module MapDungeon
|
|
61
61
|
|
62
62
|
attr_reader :dungeon
|
63
63
|
|
64
|
-
def
|
64
|
+
def build_dungeon(name, description, node = nil, entityBuilder = "")
|
65
65
|
add_name(name)
|
66
66
|
add_description(description)
|
67
67
|
if(node != nil)
|
68
|
-
node.each()
|
68
|
+
node.each() do |entity|
|
69
69
|
args = []
|
70
70
|
if(entityBuilder.length > 0)
|
71
71
|
builder = Object::const_get(entityBuilder).new()
|
72
72
|
else
|
73
|
-
builder =
|
73
|
+
builder = EntityBuilder.new()
|
74
74
|
end
|
75
75
|
nodeSet = entity.xpath("*")
|
76
76
|
nodeSet.each { |n| args << n.content }
|
77
|
-
builder.
|
77
|
+
builder.build_entity(*(args))
|
78
78
|
@dungeon.add_entity(builder.entity, builder.entity.type)
|
79
|
-
|
79
|
+
end
|
80
80
|
end
|
81
81
|
end
|
82
82
|
|
data/lib/map/entity.rb
CHANGED
@@ -1,5 +1,3 @@
|
|
1
|
-
require 'nokogiri'
|
2
|
-
|
3
1
|
module MapEntity
|
4
2
|
|
5
3
|
class Entity
|
@@ -32,7 +30,7 @@ module MapEntity
|
|
32
30
|
end
|
33
31
|
|
34
32
|
#Entity builder class
|
35
|
-
class
|
33
|
+
class EntityBuilder
|
36
34
|
|
37
35
|
def initialize()
|
38
36
|
@entity = Entity.new()
|
@@ -41,7 +39,7 @@ module MapEntity
|
|
41
39
|
attr_reader :entity
|
42
40
|
|
43
41
|
#Builds the entity of a dungeon
|
44
|
-
def
|
42
|
+
def build_entity(type, nametag)
|
45
43
|
add_type(type)
|
46
44
|
add_nametag(nametag)
|
47
45
|
end
|
data/lib/map/map.rb
CHANGED
@@ -24,20 +24,26 @@ include MapPoint, MapDungeon, MapEntity
|
|
24
24
|
doc = parse_from_XML(filePath)
|
25
25
|
end
|
26
26
|
doc.remove_namespaces!
|
27
|
-
doc.xpath("//node").each()
|
27
|
+
doc.xpath("//node").each() do |node|
|
28
28
|
coords = node.xpath("point//*")
|
29
29
|
point = build_point(coords, pointBuilder)
|
30
30
|
dungeonElements = node.xpath("dungeon//*[not(name()='entity') and not(ancestor-or-self::entity)]")
|
31
31
|
dungeon = build_dungeon(node, dungeonElements, dungeonBuilder, entityBuilder)
|
32
32
|
@map_nodes[point] = dungeon
|
33
33
|
build_adjacent(point, node, pointBuilder)
|
34
|
-
|
34
|
+
end
|
35
35
|
p = @map_nodes.keys().sample() #Get random key
|
36
36
|
if(@map_nodes.length() != check_connectivity(p))
|
37
37
|
raise MapExceptions::MalformedMapException.new()
|
38
38
|
end
|
39
39
|
end
|
40
40
|
|
41
|
+
#Allows to make a movement without creating a explicit Point object
|
42
|
+
def move(point, entity, movX = 0, movY = 0, movZ = 0)
|
43
|
+
toPoint = Point.new(point.x()+movX, point.y()+movY, point.z()+movZ)
|
44
|
+
movement(point, toPoint, entity)
|
45
|
+
end
|
46
|
+
|
41
47
|
#Puts move the entity from one point to an adjacent
|
42
48
|
def movement(fromPoint, toPoint, entity)
|
43
49
|
if(is_adjacent?(fromPoint, toPoint))
|
@@ -48,12 +54,6 @@ include MapPoint, MapDungeon, MapEntity
|
|
48
54
|
end
|
49
55
|
end
|
50
56
|
|
51
|
-
#Allows to make a movement without creating a explicit Point object
|
52
|
-
def move(point, entity, movX = 0, movY = 0, movZ = 0)
|
53
|
-
toPoint = Point.new(point.x()+movX, point.y()+movY, point.z()+movZ)
|
54
|
-
movement(point, toPoint, entity)
|
55
|
-
end
|
56
|
-
|
57
57
|
#Check if point2 is in the adjacent list of point1
|
58
58
|
def is_adjacent?(point1, point2)
|
59
59
|
@adjacencies[point1].find { |p| point2 == p }
|
@@ -121,11 +121,11 @@ include MapPoint, MapDungeon, MapEntity
|
|
121
121
|
#Checks if the map generated is fully connected
|
122
122
|
def check_connectivity(point, visited = Hash.new())
|
123
123
|
visited[point] = 1
|
124
|
-
@adjacencies[point].each
|
124
|
+
@adjacencies[point].each do |nextPoint|
|
125
125
|
if(!visited.has_key?(nextPoint))
|
126
126
|
check_connectivity(nextPoint, visited)
|
127
127
|
end
|
128
|
-
|
128
|
+
end
|
129
129
|
return visited.length()
|
130
130
|
end
|
131
131
|
|
@@ -133,13 +133,13 @@ include MapPoint, MapDungeon, MapEntity
|
|
133
133
|
def shortest_path(initial, destination)
|
134
134
|
distance = Hash.new()
|
135
135
|
visited = Hash.new()
|
136
|
-
@adjacencies.each_key
|
136
|
+
@adjacencies.each_key do |point|
|
137
137
|
if(is_adjacent?(initial, point))
|
138
138
|
distance[point] = 1
|
139
139
|
else
|
140
140
|
distance[point] = (2**(0.size * 8 - 2) - 1)
|
141
141
|
end
|
142
|
-
|
142
|
+
end
|
143
143
|
visited[initial] = true
|
144
144
|
distance.delete(initial)
|
145
145
|
until(visited.length == @adjacencies.length) do
|
@@ -150,12 +150,12 @@ include MapPoint, MapDungeon, MapEntity
|
|
150
150
|
if(nextNode == destination)
|
151
151
|
break;
|
152
152
|
end
|
153
|
-
@adjacencies[nextNode].each
|
153
|
+
@adjacencies[nextNode].each do |a|
|
154
154
|
alt = distance[nextNode] + 1
|
155
155
|
if(!(visited.has_key?(a)) && alt < distance[a])
|
156
156
|
distance[a] = alt
|
157
157
|
end
|
158
|
-
|
158
|
+
end
|
159
159
|
distance.delete(nextNode)
|
160
160
|
end
|
161
161
|
end
|
@@ -181,10 +181,10 @@ protected
|
|
181
181
|
if(pointBuilder.length > 0)
|
182
182
|
builder = Object::const_get(pointBuilder).new()
|
183
183
|
else
|
184
|
-
builder =
|
184
|
+
builder = PointBuilder.new()
|
185
185
|
end
|
186
186
|
nodeSet.each { |node| args << node.content }
|
187
|
-
builder.
|
187
|
+
builder.build_point(*(args))
|
188
188
|
builder.point()
|
189
189
|
end
|
190
190
|
|
@@ -194,15 +194,15 @@ protected
|
|
194
194
|
if(dungeonBuilder.length > 0)
|
195
195
|
builder = Object::const_get(dungeonBuilder).new()
|
196
196
|
else
|
197
|
-
builder =
|
197
|
+
builder = DungeonBuilder.new()
|
198
198
|
end
|
199
199
|
nodeSet.each { |n| args << n.content }
|
200
200
|
if(!(node.xpath("dungeon//entity").empty?))
|
201
201
|
args << node.xpath("dungeon//entity")
|
202
202
|
args << entityBuilder
|
203
|
-
builder.
|
203
|
+
builder.build_dungeon(*(args))
|
204
204
|
else
|
205
|
-
builder.
|
205
|
+
builder.build_dungeon(*(args))
|
206
206
|
end
|
207
207
|
builder.dungeon()
|
208
208
|
end
|
data/lib/map/point.rb
CHANGED
@@ -1,5 +1,3 @@
|
|
1
|
-
require 'nokogiri'
|
2
|
-
|
3
1
|
module MapPoint
|
4
2
|
|
5
3
|
class Point
|
@@ -38,7 +36,7 @@ module MapPoint
|
|
38
36
|
end
|
39
37
|
|
40
38
|
#Point builder class
|
41
|
-
class
|
39
|
+
class PointBuilder
|
42
40
|
|
43
41
|
def initialize()
|
44
42
|
@point = Point.new()
|
@@ -47,7 +45,7 @@ module MapPoint
|
|
47
45
|
attr_reader :point
|
48
46
|
|
49
47
|
#Builds the point of a node
|
50
|
-
def
|
48
|
+
def build_point(x, y, z)
|
51
49
|
add_x(x.to_i)
|
52
50
|
add_y(y.to_i)
|
53
51
|
add_z(z.to_i)
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rubyplay_framework
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.6.
|
4
|
+
version: 1.6.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Alvaro Pavon Alvarado
|
@@ -107,7 +107,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
107
107
|
version: '0'
|
108
108
|
requirements: []
|
109
109
|
rubyforge_project:
|
110
|
-
rubygems_version: 2.6.
|
110
|
+
rubygems_version: 2.6.12
|
111
111
|
signing_key:
|
112
112
|
specification_version: 4
|
113
113
|
summary: Roleplay games development helper library
|