gameworks 2.0.0 → 2.1.0
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/gameworks/game.rb +21 -14
- data/lib/gameworks/player.rb +5 -1
- data/lib/gameworks/servlet/add_player.rb +1 -0
- data/lib/gameworks/version.rb +1 -1
- 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: 10a8ee8b5768eec3e315cf623d160995d9b321c7
|
4
|
+
data.tar.gz: 12daacb5259d91a5b299c1289c2ebfc77981a46c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b606bae8289aef66caf94c308b27a94cfeb02f1bb999d4a8e91b93cea38061cee95be9b3a880a368f25526a054a7c5efae6147847a726f01735a122bd67eff17
|
7
|
+
data.tar.gz: 41cb36e64d04fb488324834bdba461a2eda9de821b8d3fe8b0dc8d847143d27881bfdfc669ed615a7c06446eede468827a1afe7ecfc027ee0e33b7b2cb7697a0
|
data/lib/gameworks/game.rb
CHANGED
@@ -12,7 +12,7 @@ module Gameworks
|
|
12
12
|
STATE_IN_PLAY = 'in play'
|
13
13
|
STATE_COMPLETED = 'completed'
|
14
14
|
|
15
|
-
attr_reader :players, :state, :id, :delay_time, :notifier
|
15
|
+
attr_reader :players, :state, :id, :delay_time, :moves, :notifier
|
16
16
|
|
17
17
|
def initialize(payload={})
|
18
18
|
@notifier = Notifier.new
|
@@ -23,6 +23,7 @@ module Gameworks
|
|
23
23
|
@observers = {}
|
24
24
|
@fuses = {}
|
25
25
|
@id = generate_uuid.split('-').first
|
26
|
+
@moves = {}
|
26
27
|
end
|
27
28
|
|
28
29
|
def register_observer(cb)
|
@@ -37,7 +38,7 @@ module Gameworks
|
|
37
38
|
cb.call(delta(snapshot).to_json)
|
38
39
|
cb.succeed if end_game
|
39
40
|
end
|
40
|
-
notifier.push(self,
|
41
|
+
notifier.push(self, to_json)
|
41
42
|
end
|
42
43
|
|
43
44
|
def snapshot_for_observer(token)
|
@@ -49,16 +50,13 @@ module Gameworks
|
|
49
50
|
snapshot
|
50
51
|
end
|
51
52
|
|
52
|
-
def initial_snapshot
|
53
|
-
@initial_snapshot ||= snapshot
|
54
|
-
end
|
55
|
-
|
56
53
|
def player_changed?(player, snapshot, for_player=nil)
|
57
54
|
player.score != snapshot.player_scores[player]
|
58
55
|
end
|
59
56
|
|
60
57
|
def delta(snapshot, for_player=nil)
|
61
|
-
{ :
|
58
|
+
{ :id => id,
|
59
|
+
:players => @players.select{ |p| player_changed?(p, snapshot, for_player) }.map{ |p| p.as_json(for_player) },
|
62
60
|
:state => @state }
|
63
61
|
end
|
64
62
|
|
@@ -107,6 +105,7 @@ module Gameworks
|
|
107
105
|
end
|
108
106
|
|
109
107
|
def signal_turns
|
108
|
+
moves.clear
|
110
109
|
active_players.each do |player|
|
111
110
|
token = generate_uuid
|
112
111
|
@turns[token] = player
|
@@ -127,13 +126,16 @@ module Gameworks
|
|
127
126
|
|
128
127
|
move, error = build_move(payload, player)
|
129
128
|
return false, error unless move
|
129
|
+
|
130
130
|
legal, error = move_legal?(move, player)
|
131
131
|
return false, error unless legal
|
132
|
-
|
133
|
-
|
132
|
+
|
133
|
+
moves[player] = move
|
134
|
+
process_move(move, player)
|
135
|
+
|
134
136
|
ignore_disqualified_players
|
135
137
|
update_observers
|
136
|
-
|
138
|
+
true
|
137
139
|
end
|
138
140
|
|
139
141
|
def build_move(payload, player)
|
@@ -148,15 +150,19 @@ module Gameworks
|
|
148
150
|
raise NotImplementedError
|
149
151
|
end
|
150
152
|
|
153
|
+
def waiting_on_moves?
|
154
|
+
(active_players - moves.keys).any?
|
155
|
+
end
|
156
|
+
|
151
157
|
def disqualify(player)
|
152
158
|
player.disqualify!
|
153
159
|
update_observers
|
154
160
|
if @players.select { |p| !p.disqualified? }.size < 2
|
155
161
|
end_game
|
156
|
-
|
157
|
-
|
158
|
-
end_turn
|
162
|
+
elsif !waiting_on_moves?
|
163
|
+
signal_turns
|
159
164
|
end
|
165
|
+
# else do nothing; waiting for other players
|
160
166
|
end
|
161
167
|
|
162
168
|
def end_game
|
@@ -175,7 +181,8 @@ module Gameworks
|
|
175
181
|
end
|
176
182
|
|
177
183
|
def as_json(for_player=nil)
|
178
|
-
{ :
|
184
|
+
{ :id => id,
|
185
|
+
:players => @players.map{ |player| player.as_json(for_player) },
|
179
186
|
:state => @state }
|
180
187
|
end
|
181
188
|
|
data/lib/gameworks/player.rb
CHANGED
@@ -1,7 +1,9 @@
|
|
1
1
|
require 'eventmachine'
|
2
|
+
require 'securerandom'
|
2
3
|
|
3
4
|
module Gameworks
|
4
5
|
class Player
|
6
|
+
attr_reader :id
|
5
7
|
attr_reader :name
|
6
8
|
attr_accessor :score
|
7
9
|
attr_reader :disqualified
|
@@ -14,6 +16,7 @@ module Gameworks
|
|
14
16
|
return
|
15
17
|
end
|
16
18
|
|
19
|
+
@id = SecureRandom.uuid.to_s.split('-').first
|
17
20
|
@name = payload['name']
|
18
21
|
@score = 0
|
19
22
|
@disqualified = false
|
@@ -43,7 +46,8 @@ module Gameworks
|
|
43
46
|
end
|
44
47
|
|
45
48
|
def as_json(for_player=nil)
|
46
|
-
{
|
49
|
+
{ id: id,
|
50
|
+
name: name,
|
47
51
|
score: score,
|
48
52
|
disqualified: disqualified }
|
49
53
|
end
|
data/lib/gameworks/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gameworks
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Brian Palmer
|
@@ -12,7 +12,7 @@ authors:
|
|
12
12
|
autorequire:
|
13
13
|
bindir: bin
|
14
14
|
cert_chain: []
|
15
|
-
date: 2015-07-
|
15
|
+
date: 2015-07-14 00:00:00.000000000 Z
|
16
16
|
dependencies:
|
17
17
|
- !ruby/object:Gem::Dependency
|
18
18
|
name: rake
|