Skip to content

Commit 7531feb

Browse files
authored
Merge pull request #34 from robocup-logistics/thofmann/randomize-field-from-shell
Randomize playing field from shell
2 parents 4c682f8 + 8548b98 commit 7531feb

File tree

9 files changed

+220
-166
lines changed

9 files changed

+220
-166
lines changed

src/games/rcll/game.clp

Lines changed: 39 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -9,26 +9,6 @@
99
; Licensed under BSD license, cf. LICENSE file
1010
;---------------------------------------------------------------------------
1111

12-
(deffunction game-reset ()
13-
14-
; Retract machine initialization state, if set
15-
(do-for-fact ((?mi machines-initialized)) TRUE
16-
(retract ?mi)
17-
)
18-
19-
; retract all delivery periods
20-
;(printout t "Retracting delivery periods" crlf)
21-
(delayed-do-for-all-facts ((?dp delivery-period)) TRUE
22-
(retract ?dp)
23-
)
24-
25-
; reset all down periods
26-
;(printout t "Resetting down periods" crlf)
27-
(delayed-do-for-all-facts ((?m machine)) TRUE
28-
(modify ?m (down-period (deftemplate-slot-default-value machine down-period)))
29-
)
30-
)
31-
3212
(deffunction game-calc-phase-points (?team-color ?phase)
3313
(bind ?phase-points 0)
3414
(do-for-all-facts ((?p points)) (and (eq ?p:phase ?phase) (eq ?p:team ?team-color))
@@ -46,33 +26,6 @@
4626
(return ?points)
4727
)
4828

49-
(defrule game-reset
50-
(game-reset) ; this is a fact
51-
=>
52-
(game-reset) ; this is a function
53-
)
54-
55-
(defrule game-reset-re-parameterize
56-
(game-reset)
57-
?gf <- (game-parameterized)
58-
=>
59-
(retract ?gf)
60-
)
61-
62-
(defrule game-reset-print
63-
(game-reset)
64-
?gf <- (game-printed)
65-
=>
66-
(retract ?gf)
67-
)
68-
69-
(defrule game-reset-done
70-
(declare (salience -10000))
71-
?gf <- (game-reset)
72-
=>
73-
(retract ?gf)
74-
)
75-
7629
(defrule game-mps-solver-start
7730
"start the solver"
7831
(gamestate (game-time ?gt))
@@ -401,3 +354,42 @@
401354
(retract ?w)
402355
(game-summary)
403356
)
357+
358+
(deffunction game-reset ()
359+
; Retract machine initialization state, if set
360+
(do-for-fact ((?mi machines-initialized)) TRUE
361+
(retract ?mi)
362+
)
363+
; Retract all delivery periods
364+
(delayed-do-for-all-facts ((?dp delivery-period)) TRUE
365+
(retract ?dp)
366+
)
367+
; Reset all down periods
368+
(delayed-do-for-all-facts ((?m machine)) TRUE
369+
(modify ?m (down-period (deftemplate-slot-default-value machine down-period)))
370+
)
371+
; Reset game parameterization
372+
(do-for-fact ((?gp game-parameterized)) TRUE
373+
(retract ?gp)
374+
)
375+
; Reset machine generation
376+
(do-for-fact ((?mg machine-generation)) TRUE
377+
(modify ?mg (state NOT-STARTED))
378+
)
379+
; Print machines again
380+
(do-for-fact ((?mp machines-printed)) TRUE
381+
(retract ?mp)
382+
)
383+
; Print game info again
384+
(do-for-fact ((?gp game-printed)) TRUE
385+
(retract ?gp)
386+
)
387+
)
388+
389+
(defrule game-reset
390+
"Allow calling the function via fact to avoid file loading order issues"
391+
?gr <- (game-reset)
392+
=>
393+
(retract ?gr)
394+
(game-reset)
395+
)

src/games/rcll/machines.clp

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -182,13 +182,6 @@
182182
(assert (machines-initialized))
183183
)
184184

185-
(defrule machines-reset-print
186-
(game-reset)
187-
?mf <- (machines-printed)
188-
=>
189-
(retract ?mf)
190-
)
191-
192185
(defrule machines-print
193186
(machines-initialized)
194187
(gamestate (teams $?teams) (phase PRODUCTION|EXPLORATION))

src/games/rcll/mongodb.clp

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -281,11 +281,13 @@
281281
)
282282

283283
(defrule mongodb-load-machine-zones
284-
(declare (salience ?*PRIORITY_FIRST*))
285-
(gamestate (phase SETUP|EXPLORATION|PRODUCTION) (prev-phase PRE_GAME))
286-
(not (game-parameterized))
287-
(test (any-factp ((?m machine)) (eq ?m:zone TBD)))
284+
(declare (salience ?*PRIORITY_FIRST*))
285+
(gamestate (phase SETUP|EXPLORATION|PRODUCTION) (prev-phase PRE_GAME))
286+
(not (confval (path "/llsfrb/game/random-field") (type BOOL) (value true)))
287+
; load only once
288+
(not (loaded-machine-zones-from-db))
288289
=>
289-
(printout t "load from mongo" crlf)
290+
(printout t "Loading machine positions from database" crlf)
291+
(assert (loaded-machine-zones-from-db))
290292
(mongodb-load-machine-zones)
291293
)

src/games/rcll/net.clp

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -263,6 +263,19 @@
263263
then (delayed-do-for-all-facts ((?r robot)) TRUE (retract ?r)))
264264
)
265265

266+
(defrule net-recv-RandomizeField
267+
?sf <- (gamestate (phase PRE_GAME|SETUP))
268+
?mf <- (protobuf-msg (type "llsf_msgs.RandomizeField") (ptr ?p) (rcvd-via STREAM))
269+
=>
270+
(retract ?mf)
271+
(assert (game-reset))
272+
(delayed-do-for-all-facts ((?m machine)) TRUE
273+
(modify ?m (zone TBD))
274+
)
275+
)
276+
277+
278+
266279
(deffunction net-create-GameState (?gs)
267280
(bind ?gamestate (pb-create "llsf_msgs.GameState"))
268281
(bind ?gamestate-time (pb-field-value ?gamestate "game_time"))

src/libs/mps_placing_clips/mps_placing_clips.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,10 @@ MPSPlacingGenerator::generator_thread()
117117
void
118118
MPSPlacingGenerator::generate_start()
119119
{
120+
if (generator_thread_) {
121+
generator_thread_->join();
122+
generator_thread_.reset();
123+
}
120124
is_generation_running_ = true;
121125
is_field_generated_ = false;
122126

src/msgs/GameState.proto

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,3 +101,10 @@ message SetGamePhase {
101101
// The new desired phase
102102
required GameState.Phase phase = 1;
103103
}
104+
105+
message RandomizeField {
106+
enum CompType {
107+
COMP_ID = 2000;
108+
MSG_TYPE = 23;
109+
}
110+
}

src/shell/menus.cpp

Lines changed: 72 additions & 72 deletions
Original file line numberDiff line numberDiff line change
@@ -172,78 +172,6 @@ GenericItemsMenu::max_cols(int n_items, NCursesMenuItem **items)
172172
}
173173

174174

175-
MachinePlacingMenu::MachinePlacingMenu(NCursesWindow *parent,
176-
std::string machine, std::string puck,
177-
bool can_be_placed_under_rfid, bool can_be_loaded_with)
178-
: Menu(det_lines(can_be_placed_under_rfid, can_be_loaded_with), 30,
179-
(parent->lines() - 5)/2, (parent->cols() - 30)/2)
180-
{
181-
valid_selected_ = false;
182-
place_under_rfid_ = false;
183-
s_under_rfid_ = "Place " + puck.substr(0,2) + " under RFID of " + machine;
184-
s_loaded_with_ = "Load " + machine + " with " + puck.substr(0,2);
185-
s_cancel_ = "** CANCEL **";
186-
NCursesMenuItem **mitems = new NCursesMenuItem*[4];
187-
188-
int idx = 0;
189-
190-
if (can_be_placed_under_rfid) {
191-
SignalItem *item = new SignalItem(s_under_rfid_);
192-
item->signal().connect(boost::bind(&MachinePlacingMenu::item_selected, this, true));
193-
mitems[idx++] = item;
194-
}
195-
196-
if (can_be_loaded_with) {
197-
SignalItem *item = new SignalItem(s_loaded_with_);
198-
item->signal().connect(boost::bind(&MachinePlacingMenu::item_selected, this, false));
199-
mitems[idx++] = item;
200-
}
201-
mitems[idx++] = new SignalItem(s_cancel_);
202-
mitems[idx++] = new NCursesMenuItem();
203-
204-
205-
set_mark("");
206-
set_format(idx-1, 1);
207-
InitMenu(mitems, true, true);
208-
frame("Placing");
209-
}
210-
211-
int
212-
MachinePlacingMenu::det_lines(bool can_be_placed_under_rfid, bool can_be_loaded_with)
213-
{
214-
int rv = 3;
215-
if (can_be_placed_under_rfid) rv += 1;
216-
if (can_be_loaded_with) rv += 1;
217-
return rv;
218-
}
219-
220-
void
221-
MachinePlacingMenu::item_selected(bool under_rfid)
222-
{
223-
valid_selected_ = true;
224-
place_under_rfid_ = under_rfid;
225-
}
226-
227-
bool
228-
MachinePlacingMenu::place_under_rfid()
229-
{
230-
return place_under_rfid_;
231-
}
232-
233-
void
234-
MachinePlacingMenu::On_Menu_Init()
235-
{
236-
bkgd(' '|COLOR_PAIR(COLOR_DEFAULT));
237-
//subWindow().bkgd(parent_->getbkgd());
238-
refresh();
239-
}
240-
241-
MachinePlacingMenu::operator bool() const
242-
{
243-
return valid_selected_;
244-
}
245-
246-
247175
TeamSelectMenu::TeamSelectMenu(NCursesWindow *parent,
248176
llsf_msgs::Team team,
249177
std::shared_ptr<llsf_msgs::GameInfo> gameinfo,
@@ -396,6 +324,78 @@ TeamColorSelectMenu::det_lines()
396324
return team_enum_desc->value_count();
397325
}
398326

327+
GameMenu::GameMenu(NCursesWindow *parent)
328+
: Menu(det_lines(), det_cols(), (parent->lines() - det_lines()) / 2, (parent->cols() - det_cols()) / 2),
329+
menu_selected_(false)
330+
{
331+
NCursesMenuItem **mitems = new NCursesMenuItem *[3];
332+
SignalItem * randomize_item = new SignalItem(s_randomize_);
333+
SignalItem * cancel_item = new SignalItem(s_cancel_);
334+
randomize_item->signal().connect([this]() {
335+
next_menu_ = randomize;
336+
menu_selected_ = true;
337+
});
338+
int idx = 0;
339+
mitems[idx++] = randomize_item;
340+
mitems[idx++] = cancel_item;
341+
mitems[idx++] = new NCursesMenuItem();
342+
set_mark("");
343+
set_format(idx, 1);
344+
InitMenu(mitems, true, true);
345+
}
346+
347+
void
348+
GameMenu::On_Menu_Init()
349+
{
350+
bkgd(' ' | COLOR_PAIR(COLOR_DEFAULT));
351+
box();
352+
attron(' ' | COLOR_PAIR(COLOR_BLACK_ON_BACK) | A_BOLD);
353+
addstr(0, (width() - 6) / 2, " GAME ");
354+
attroff(A_BOLD);
355+
refresh();
356+
}
357+
358+
GameMenu::SubMenu
359+
GameMenu::get_next_menu() const
360+
{
361+
return next_menu_;
362+
}
363+
364+
GameMenu::operator bool() const
365+
{
366+
return menu_selected_;
367+
}
368+
369+
370+
RandomizeFieldMenu::RandomizeFieldMenu(NCursesWindow *parent)
371+
: Menu(det_lines(), det_cols(), (parent->lines() - det_lines()) / 2, (parent->cols() - det_cols()) / 2),
372+
confirmed_(false)
373+
{
374+
NCursesMenuItem **mitems = new NCursesMenuItem *[3];
375+
SignalItem * yes_item = new SignalItem(s_yes_);
376+
yes_item->signal().connect([this]() { confirmed_ = true; });
377+
SignalItem *no_item = new SignalItem(s_no_);
378+
no_item->signal().connect([this]() { confirmed_ = false; });
379+
int idy = 0;
380+
mitems[idy++] = yes_item;
381+
mitems[idy++] = no_item;
382+
mitems[idy++] = new NCursesMenuItem();
383+
set_mark("");
384+
set_format(1, idy - 1);
385+
InitMenu(mitems, true, true);
386+
}
387+
388+
void
389+
RandomizeFieldMenu::On_Menu_Init()
390+
{
391+
bkgd(' ' | COLOR_PAIR(COLOR_DEFAULT));
392+
box();
393+
attron(' ' | COLOR_PAIR(COLOR_BLACK_ON_BACK) | A_BOLD);
394+
addstr(0, (width() - 18) / 2, " Randomize Field? ");
395+
attroff(A_BOLD);
396+
refresh();
397+
}
398+
399399

400400
RobotMaintenanceMenu::RobotMaintenanceMenu(NCursesWindow *parent, llsf_msgs::Team team,
401401
std::shared_ptr<llsf_msgs::RobotInfo> rinfo)

0 commit comments

Comments
 (0)