Skip to content

Commit 1b0759d

Browse files
committed
Feature: Allow configuring game events per autoRef
1 parent 9ba8658 commit 1b0759d

File tree

5 files changed

+138
-31
lines changed

5 files changed

+138
-31
lines changed

internal/app/engine/engine.go

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -310,7 +310,19 @@ func (e *Engine) GetConfig() *Config {
310310
func (e *Engine) UpdateConfig(delta *Config) {
311311
e.mutex.Lock()
312312
defer e.mutex.Unlock()
313-
proto.Merge(&e.config, delta)
313+
log.Printf("Process config delta change %v", delta)
314+
for k, v := range delta.GameEventBehavior {
315+
e.config.GameEventBehavior[k] = v
316+
}
317+
for autoRef, cfg := range delta.AutoRefConfigs {
318+
if _, ok := e.config.AutoRefConfigs[autoRef]; !ok {
319+
e.config.AutoRefConfigs[autoRef] = new(AutoRefConfig)
320+
e.config.AutoRefConfigs[autoRef].GameEventEnabled = map[string]bool{}
321+
}
322+
for k, v := range cfg.GameEventEnabled {
323+
e.config.AutoRefConfigs[autoRef].GameEventEnabled[k] = v
324+
}
325+
}
314326
log.Printf("Engine config updated to %v", e.config)
315327
if err := e.config.WriteTo(e.engineConfig.ConfigFilename); err != nil {
316328
log.Printf("Could not write engine config: %v", err)

internal/app/engine/proposals.go

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -18,15 +18,6 @@ func (e *Engine) EnqueueGameEvent(gameEvent *state.GameEvent) {
1818
}
1919
origin := gameEvent.Origin[0]
2020

21-
if _, ok := e.config.AutoRefConfigs[origin]; !ok {
22-
cfg := new(AutoRefConfig)
23-
cfg.GameEventEnabled = map[string]bool{}
24-
for _, event := range state.AllGameEvents() {
25-
cfg.GameEventEnabled[event.String()] = true
26-
}
27-
e.config.AutoRefConfigs[origin] = cfg
28-
}
29-
3021
if !e.config.AutoRefConfigs[origin].GameEventEnabled[gameEvent.Type.String()] {
3122
log.Printf("Ignoring disabled game event for %v: %v", origin, *gameEvent)
3223
return

internal/app/rcon/autoref.go

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package rcon
22

33
import (
44
"github.com/RoboCup-SSL/ssl-game-controller/internal/app/engine"
5+
"github.com/RoboCup-SSL/ssl-game-controller/internal/app/state"
56
"github.com/RoboCup-SSL/ssl-go-tools/pkg/sslconn"
67
"github.com/odeke-em/go-uuid"
78
"github.com/pkg/errors"
@@ -132,6 +133,17 @@ func (s *AutoRefServer) handleClientConnection(conn net.Conn) {
132133
gcState.AutoRefState[client.id] = s
133134
})
134135

136+
if _, ok := s.gcEngine.GetConfig().AutoRefConfigs[client.id]; !ok {
137+
cfg := new(engine.AutoRefConfig)
138+
cfg.GameEventEnabled = map[string]bool{}
139+
for _, event := range state.AllGameEvents() {
140+
cfg.GameEventEnabled[event.String()] = true
141+
}
142+
s.gcEngine.UpdateConfig(&engine.Config{
143+
AutoRefConfigs: map[string]*engine.AutoRefConfig{client.id: cfg},
144+
})
145+
}
146+
135147
for {
136148
req := AutoRefToController{}
137149
if err := sslconn.ReceiveMessage(conn, &req); err != nil {
Lines changed: 101 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,101 @@
1+
<template>
2+
<div class="game-controller-container">
3+
<table>
4+
<tr>
5+
<td align="left"><b>All</b></td>
6+
<td>
7+
<div class="btn-group-toggle btn-group">
8+
<label :class="{btn:true, 'btn-secondary': true, active: allValuesAre(true)}"
9+
@click="changeAllValuesTo(true)">
10+
On
11+
</label>
12+
<label :class="{btn:true, 'btn-secondary': true, active: allValuesAre(false)}"
13+
@click="changeAllValuesTo(false)">
14+
Off
15+
</label>
16+
</div>
17+
</td>
18+
</tr>
19+
<tr>
20+
<td colspan="2">
21+
<hr>
22+
</td>
23+
</tr>
24+
<tr v-for="(eventState, event) in gameEventEnabled" :key="event">
25+
<td align="left">{{event}}</td>
26+
<td>
27+
<div class="btn-group-toggle btn-group">
28+
<label :class="{btn:true, 'btn-secondary': true, active: eventState}"
29+
@click="changeEventState(event, true)">
30+
On
31+
</label>
32+
<label :class="{btn:true, 'btn-secondary': true, active: !eventState}"
33+
@click="changeEventState(event, false)">
34+
Off
35+
</label>
36+
</div>
37+
</td>
38+
</tr>
39+
</table>
40+
</div>
41+
</template>
42+
43+
<script>
44+
import {submitConfigUpdate} from "../../submit";
45+
46+
export default {
47+
name: "AutoRefConfig",
48+
props: {
49+
autoRefName: String
50+
},
51+
computed: {
52+
gameEventEnabled() {
53+
if (this.$store.state.config.autoRefConfigs.hasOwnProperty(this.autoRefName)) {
54+
return this.$store.state.config.autoRefConfigs[this.autoRefName].gameEventEnabled;
55+
}
56+
return [];
57+
},
58+
eventTypes() {
59+
return Object.keys(this.gameEventEnabled).sort();
60+
},
61+
},
62+
methods: {
63+
changeEventState(event, value) {
64+
submitConfigUpdate({
65+
autoRefConfigs: {
66+
[this.autoRefName]: {
67+
gameEventEnabled: {
68+
[event]: value
69+
}
70+
}
71+
}
72+
});
73+
},
74+
allValuesAre(value) {
75+
for (let events of Object.values(this.eventTypes)) {
76+
if (events !== value) {
77+
return false;
78+
}
79+
}
80+
return true;
81+
},
82+
changeAllValuesTo(value) {
83+
let eventEnabled = {};
84+
for (let event of this.eventTypes) {
85+
eventEnabled[event] = value;
86+
}
87+
88+
submitConfigUpdate({
89+
autoRefConfigs: {
90+
[this.autoRefName]: {
91+
gameEventEnabled: eventEnabled
92+
}
93+
}
94+
});
95+
}
96+
}
97+
}
98+
</script>
99+
100+
<style scoped>
101+
</style>

src/components/settings/AutonomousSettings.vue

Lines changed: 12 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -2,43 +2,34 @@
22
<div class="game-controller-container">
33
<div class="auto-refs-connected" v-b-tooltip.hover.d500>
44
<p>
5-
<b>{{autoRefsConnected}}</b> autoRefs connected: {{autoRefs}}
5+
<strong>{{autoRefsConnected}}</strong> autoRefs connected: {{autoRefs}}
66
</p>
77
</div>
88

9-
<b-btn @click="showBehaviors=!showBehaviors" v-if="!showBehaviors">Configure Behaviors</b-btn>
10-
11-
<EventBehavior v-if="showBehaviors"/>
9+
<b-tabs content-class="mt-3">
10+
<b-tab title="Game events" active>
11+
<EventBehavior/>
12+
</b-tab>
13+
<b-tab v-for="autoRef in autoRefs" :title="autoRef" :key="autoRef">
14+
<AutoRefConfig :auto-ref-name="autoRef"/>
15+
</b-tab>
16+
</b-tabs>
1217
</div>
1318
</template>
1419

1520
<script>
1621
import EventBehavior from "./EventBehavior";
22+
import AutoRefConfig from "./AutoRefConfig";
1723
1824
export default {
1925
name: "AutonomousSettings",
20-
components: {EventBehavior},
21-
data() {
22-
return {
23-
showBehaviors: false
24-
}
25-
},
26+
components: {AutoRefConfig, EventBehavior},
2627
computed: {
2728
gcState() {
2829
return this.$store.state.gcState
2930
},
3031
autoRefs() {
31-
if (this.autoRefsConnected) {
32-
let autoRefs = '';
33-
let autoRefNames = Object.keys(this.gcState.autoRefState);
34-
for (let i = 0; i < autoRefNames.length; i++) {
35-
autoRefs += autoRefNames[i];
36-
if (i !== (autoRefNames.length - 1)) {
37-
autoRefs += ', '
38-
}
39-
}
40-
return autoRefs;
41-
}
32+
return Object.keys(this.gcState.autoRefState);
4233
},
4334
autoRefsConnected() {
4435
if (this.gcState.autoRefState) {

0 commit comments

Comments
 (0)