diff --git a/frontend/src/components/team/HullColorInput.vue b/frontend/src/components/team/HullColorInput.vue
new file mode 100644
index 00000000..3deefadb
--- /dev/null
+++ b/frontend/src/components/team/HullColorInput.vue
@@ -0,0 +1,38 @@
+
+
+
+
+
diff --git a/frontend/src/helpers/ChangeDetails.ts b/frontend/src/helpers/ChangeDetails.ts
index eba679e3..bdafc775 100644
--- a/frontend/src/helpers/ChangeDetails.ts
+++ b/frontend/src/helpers/ChangeDetails.ts
@@ -226,6 +226,8 @@ function teamStateChangeTitle(change: Change_UpdateTeamStateJson): string {
return `Remove foul ${change.removeFoul}`
} else if (change.botSubstitutionsLeft !== undefined) {
return `Bot substitutions left: ${change.botSubstitutionsLeft}`
+ } else if (change.hullColor !== undefined) {
+ return `Change hull color: ${change.hullColor}`
}
return "Unknown team state change: " + JSON.stringify(change)
}
diff --git a/frontend/src/proto/state/ssl_gc_referee_message_pb.ts b/frontend/src/proto/state/ssl_gc_referee_message_pb.ts
index 3bd7ec76..72eb5502 100644
--- a/frontend/src/proto/state/ssl_gc_referee_message_pb.ts
+++ b/frontend/src/proto/state/ssl_gc_referee_message_pb.ts
@@ -12,7 +12,7 @@ import type { Message } from "@bufbuild/protobuf";
* Describes the file state/ssl_gc_referee_message.proto.
*/
export const file_state_ssl_gc_referee_message: GenFile = /*@__PURE__*/
- fileDesc("CiJzdGF0ZS9zc2xfZ2NfcmVmZXJlZV9tZXNzYWdlLnByb3RvIrUOCgdSZWZlcmVlEhkKEXNvdXJjZV9pZGVudGlmaWVyGBIgASgJEi0KCm1hdGNoX3R5cGUYEyABKA4yCi5NYXRjaFR5cGU6DVVOS05PV05fTUFUQ0gSGAoQcGFja2V0X3RpbWVzdGFtcBgBIAIoBBIdCgVzdGFnZRgCIAIoDjIOLlJlZmVyZWUuU3RhZ2USFwoPc3RhZ2VfdGltZV9sZWZ0GAMgASgSEiEKB2NvbW1hbmQYBCACKA4yEC5SZWZlcmVlLkNvbW1hbmQSFwoPY29tbWFuZF9jb3VudGVyGAUgAigNEhkKEWNvbW1hbmRfdGltZXN0YW1wGAYgAigEEiEKBnllbGxvdxgHIAIoCzIRLlJlZmVyZWUuVGVhbUluZm8SHwoEYmx1ZRgIIAIoCzIRLlJlZmVyZWUuVGVhbUluZm8SKwoTZGVzaWduYXRlZF9wb3NpdGlvbhgJIAEoCzIOLlJlZmVyZWUuUG9pbnQSIgoaYmx1ZV90ZWFtX29uX3Bvc2l0aXZlX2hhbGYYCiABKAgSJgoMbmV4dF9jb21tYW5kGAwgASgOMhAuUmVmZXJlZS5Db21tYW5kEh8KC2dhbWVfZXZlbnRzGBAgAygLMgouR2FtZUV2ZW50EjUKFGdhbWVfZXZlbnRfcHJvcG9zYWxzGBEgAygLMhcuR2FtZUV2ZW50UHJvcG9zYWxHcm91cBIlCh1jdXJyZW50X2FjdGlvbl90aW1lX3JlbWFpbmluZxgPIAEoAxIWCg5zdGF0dXNfbWVzc2FnZRgUIAEoCRrEAwoIVGVhbUluZm8SDAoEbmFtZRgBIAIoCRINCgVzY29yZRgCIAIoDRIRCglyZWRfY2FyZHMYAyACKA0SHQoReWVsbG93X2NhcmRfdGltZXMYBCADKA1CAhABEhQKDHllbGxvd19jYXJkcxgFIAIoDRIQCgh0aW1lb3V0cxgGIAIoDRIUCgx0aW1lb3V0X3RpbWUYByACKA0SEgoKZ29hbGtlZXBlchgIIAIoDRIUCgxmb3VsX2NvdW50ZXIYCSABKA0SHwoXYmFsbF9wbGFjZW1lbnRfZmFpbHVyZXMYCiABKA0SFgoOY2FuX3BsYWNlX2JhbGwYDCABKAgSGAoQbWF4X2FsbG93ZWRfYm90cxgNIAEoDRIfChdib3Rfc3Vic3RpdHV0aW9uX2ludGVudBgOIAEoCBInCh9iYWxsX3BsYWNlbWVudF9mYWlsdXJlc19yZWFjaGVkGA8gASgIEiAKGGJvdF9zdWJzdGl0dXRpb25fYWxsb3dlZBgQIAEoCBIeChZib3Rfc3Vic3RpdHV0aW9uc19sZWZ0GBEgASgNEiIKGmJvdF9zdWJzdGl0dXRpb25fdGltZV9sZWZ0GBIgASgNGh0KBVBvaW50EgkKAXgYASACKAISCQoBeRgCIAIoAiLRAgoFU3RhZ2USGQoVTk9STUFMX0ZJUlNUX0hBTEZfUFJFEAASFQoRTk9STUFMX0ZJUlNUX0hBTEYQARIUChBOT1JNQUxfSEFMRl9USU1FEAISGgoWTk9STUFMX1NFQ09ORF9IQUxGX1BSRRADEhYKEk5PUk1BTF9TRUNPTkRfSEFMRhAEEhQKEEVYVFJBX1RJTUVfQlJFQUsQBRIYChRFWFRSQV9GSVJTVF9IQUxGX1BSRRAGEhQKEEVYVFJBX0ZJUlNUX0hBTEYQBxITCg9FWFRSQV9IQUxGX1RJTUUQCBIZChVFWFRSQV9TRUNPTkRfSEFMRl9QUkUQCRIVChFFWFRSQV9TRUNPTkRfSEFMRhAKEhoKFlBFTkFMVFlfU0hPT1RPVVRfQlJFQUsQCxIUChBQRU5BTFRZX1NIT09UT1VUEAwSDQoJUE9TVF9HQU1FEA0ilgMKB0NvbW1hbmQSCAoESEFMVBAAEggKBFNUT1AQARIQCgxOT1JNQUxfU1RBUlQQAhIPCgtGT1JDRV9TVEFSVBADEhoKFlBSRVBBUkVfS0lDS09GRl9ZRUxMT1cQBBIYChRQUkVQQVJFX0tJQ0tPRkZfQkxVRRAFEhoKFlBSRVBBUkVfUEVOQUxUWV9ZRUxMT1cQBhIYChRQUkVQQVJFX1BFTkFMVFlfQkxVRRAHEhYKEkRJUkVDVF9GUkVFX1lFTExPVxAIEhQKEERJUkVDVF9GUkVFX0JMVUUQCRIcChRJTkRJUkVDVF9GUkVFX1lFTExPVxAKGgIIARIaChJJTkRJUkVDVF9GUkVFX0JMVUUQCxoCCAESEgoOVElNRU9VVF9ZRUxMT1cQDBIQCgxUSU1FT1VUX0JMVUUQDRITCgtHT0FMX1lFTExPVxAOGgIIARIRCglHT0FMX0JMVUUQDxoCCAESGQoVQkFMTF9QTEFDRU1FTlRfWUVMTE9XEBASFwoTQkFMTF9QTEFDRU1FTlRfQkxVRRARSgQICxAMSgQIDRAOSgQIDhAPIlcKFkdhbWVFdmVudFByb3Bvc2FsR3JvdXASCgoCaWQYAyABKAkSHwoLZ2FtZV9ldmVudHMYASADKAsyCi5HYW1lRXZlbnQSEAoIYWNjZXB0ZWQYAiABKAgqVAoJTWF0Y2hUeXBlEhEKDVVOS05PV05fTUFUQ0gQABIPCgtHUk9VUF9QSEFTRRABEhUKEUVMSU1JTkFUSU9OX1BIQVNFEAISDAoIRlJJRU5ETFkQA0JbQhhTc2xHY1JlZmVyZWVNZXNzYWdlUHJvdG9QAVo9Z2l0aHViLmNvbS9Sb2JvQ3VwLVNTTC9zc2wtZ2FtZS1jb250cm9sbGVyL2ludGVybmFsL2FwcC9zdGF0ZQ", [file_state_ssl_gc_game_event]);
+ fileDesc("CiJzdGF0ZS9zc2xfZ2NfcmVmZXJlZV9tZXNzYWdlLnByb3RvItUOCgdSZWZlcmVlEhkKEXNvdXJjZV9pZGVudGlmaWVyGBIgASgJEi0KCm1hdGNoX3R5cGUYEyABKA4yCi5NYXRjaFR5cGU6DVVOS05PV05fTUFUQ0gSGAoQcGFja2V0X3RpbWVzdGFtcBgBIAIoBBIdCgVzdGFnZRgCIAIoDjIOLlJlZmVyZWUuU3RhZ2USFwoPc3RhZ2VfdGltZV9sZWZ0GAMgASgSEiEKB2NvbW1hbmQYBCACKA4yEC5SZWZlcmVlLkNvbW1hbmQSFwoPY29tbWFuZF9jb3VudGVyGAUgAigNEhkKEWNvbW1hbmRfdGltZXN0YW1wGAYgAigEEiEKBnllbGxvdxgHIAIoCzIRLlJlZmVyZWUuVGVhbUluZm8SHwoEYmx1ZRgIIAIoCzIRLlJlZmVyZWUuVGVhbUluZm8SKwoTZGVzaWduYXRlZF9wb3NpdGlvbhgJIAEoCzIOLlJlZmVyZWUuUG9pbnQSIgoaYmx1ZV90ZWFtX29uX3Bvc2l0aXZlX2hhbGYYCiABKAgSJgoMbmV4dF9jb21tYW5kGAwgASgOMhAuUmVmZXJlZS5Db21tYW5kEh8KC2dhbWVfZXZlbnRzGBAgAygLMgouR2FtZUV2ZW50EjUKFGdhbWVfZXZlbnRfcHJvcG9zYWxzGBEgAygLMhcuR2FtZUV2ZW50UHJvcG9zYWxHcm91cBIlCh1jdXJyZW50X2FjdGlvbl90aW1lX3JlbWFpbmluZxgPIAEoAxIWCg5zdGF0dXNfbWVzc2FnZRgUIAEoCRrkAwoIVGVhbUluZm8SDAoEbmFtZRgBIAIoCRINCgVzY29yZRgCIAIoDRIRCglyZWRfY2FyZHMYAyACKA0SHQoReWVsbG93X2NhcmRfdGltZXMYBCADKA1CAhABEhQKDHllbGxvd19jYXJkcxgFIAIoDRIQCgh0aW1lb3V0cxgGIAIoDRIUCgx0aW1lb3V0X3RpbWUYByACKA0SEgoKZ29hbGtlZXBlchgIIAIoDRIUCgxmb3VsX2NvdW50ZXIYCSABKA0SHwoXYmFsbF9wbGFjZW1lbnRfZmFpbHVyZXMYCiABKA0SFgoOY2FuX3BsYWNlX2JhbGwYDCABKAgSGAoQbWF4X2FsbG93ZWRfYm90cxgNIAEoDRIfChdib3Rfc3Vic3RpdHV0aW9uX2ludGVudBgOIAEoCBInCh9iYWxsX3BsYWNlbWVudF9mYWlsdXJlc19yZWFjaGVkGA8gASgIEiAKGGJvdF9zdWJzdGl0dXRpb25fYWxsb3dlZBgQIAEoCBIeChZib3Rfc3Vic3RpdHV0aW9uc19sZWZ0GBEgASgNEiIKGmJvdF9zdWJzdGl0dXRpb25fdGltZV9sZWZ0GBIgASgNEh4KCmh1bGxfY29sb3IYEyABKA4yCi5IdWxsQ29sb3IaHQoFUG9pbnQSCQoBeBgBIAIoAhIJCgF5GAIgAigCItECCgVTdGFnZRIZChVOT1JNQUxfRklSU1RfSEFMRl9QUkUQABIVChFOT1JNQUxfRklSU1RfSEFMRhABEhQKEE5PUk1BTF9IQUxGX1RJTUUQAhIaChZOT1JNQUxfU0VDT05EX0hBTEZfUFJFEAMSFgoSTk9STUFMX1NFQ09ORF9IQUxGEAQSFAoQRVhUUkFfVElNRV9CUkVBSxAFEhgKFEVYVFJBX0ZJUlNUX0hBTEZfUFJFEAYSFAoQRVhUUkFfRklSU1RfSEFMRhAHEhMKD0VYVFJBX0hBTEZfVElNRRAIEhkKFUVYVFJBX1NFQ09ORF9IQUxGX1BSRRAJEhUKEUVYVFJBX1NFQ09ORF9IQUxGEAoSGgoWUEVOQUxUWV9TSE9PVE9VVF9CUkVBSxALEhQKEFBFTkFMVFlfU0hPT1RPVVQQDBINCglQT1NUX0dBTUUQDSKWAwoHQ29tbWFuZBIICgRIQUxUEAASCAoEU1RPUBABEhAKDE5PUk1BTF9TVEFSVBACEg8KC0ZPUkNFX1NUQVJUEAMSGgoWUFJFUEFSRV9LSUNLT0ZGX1lFTExPVxAEEhgKFFBSRVBBUkVfS0lDS09GRl9CTFVFEAUSGgoWUFJFUEFSRV9QRU5BTFRZX1lFTExPVxAGEhgKFFBSRVBBUkVfUEVOQUxUWV9CTFVFEAcSFgoSRElSRUNUX0ZSRUVfWUVMTE9XEAgSFAoQRElSRUNUX0ZSRUVfQkxVRRAJEhwKFElORElSRUNUX0ZSRUVfWUVMTE9XEAoaAggBEhoKEklORElSRUNUX0ZSRUVfQkxVRRALGgIIARISCg5USU1FT1VUX1lFTExPVxAMEhAKDFRJTUVPVVRfQkxVRRANEhMKC0dPQUxfWUVMTE9XEA4aAggBEhEKCUdPQUxfQkxVRRAPGgIIARIZChVCQUxMX1BMQUNFTUVOVF9ZRUxMT1cQEBIXChNCQUxMX1BMQUNFTUVOVF9CTFVFEBFKBAgLEAxKBAgNEA5KBAgOEA8iVwoWR2FtZUV2ZW50UHJvcG9zYWxHcm91cBIKCgJpZBgDIAEoCRIfCgtnYW1lX2V2ZW50cxgBIAMoCzIKLkdhbWVFdmVudBIQCghhY2NlcHRlZBgCIAEoCCpUCglNYXRjaFR5cGUSEQoNVU5LTk9XTl9NQVRDSBAAEg8KC0dST1VQX1BIQVNFEAESFQoRRUxJTUlOQVRJT05fUEhBU0UQAhIMCghGUklFTkRMWRADKk4KCUh1bGxDb2xvchIWChJIVUxMX0NPTE9SX1VOS05PV04QABITCg9IVUxMX0NPTE9SX0RBUksQARIUChBIVUxMX0NPTE9SX0xJR0hUEAJCW0IYU3NsR2NSZWZlcmVlTWVzc2FnZVByb3RvUAFaPWdpdGh1Yi5jb20vUm9ib0N1cC1TU0wvc3NsLWdhbWUtY29udHJvbGxlci9pbnRlcm5hbC9hcHAvc3RhdGU", [file_state_ssl_gc_game_event]);
/**
* Each UDP packet contains one of these messages.
@@ -422,6 +422,13 @@ export type Referee_TeamInfo = Message<"Referee.TeamInfo"> & {
* @generated from field: optional uint32 bot_substitution_time_left = 18;
*/
botSubstitutionTimeLeft: number;
+
+ /**
+ * The color of the hull of the robots of this team
+ *
+ * @generated from field: optional HullColor hull_color = 19;
+ */
+ hullColor: HullColor;
};
/**
@@ -551,6 +558,13 @@ export type Referee_TeamInfoJson = {
* @generated from field: optional uint32 bot_substitution_time_left = 18;
*/
botSubstitutionTimeLeft?: number;
+
+ /**
+ * The color of the hull of the robots of this team
+ *
+ * @generated from field: optional HullColor hull_color = 19;
+ */
+ hullColor?: HullColorJson;
};
/**
@@ -998,3 +1012,44 @@ export type MatchTypeJson = "UNKNOWN_MATCH" | "GROUP_PHASE" | "ELIMINATION_PHASE
export const MatchTypeSchema: GenEnum = /*@__PURE__*/
enumDesc(file_state_ssl_gc_referee_message, 0);
+/**
+ * HullColor is the color of the hull of the robots of a team
+ *
+ * @generated from enum HullColor
+ */
+export enum HullColor {
+ /**
+ * not set
+ *
+ * @generated from enum value: HULL_COLOR_UNKNOWN = 0;
+ */
+ UNKNOWN = 0,
+
+ /**
+ * dark hull color
+ *
+ * @generated from enum value: HULL_COLOR_DARK = 1;
+ */
+ DARK = 1,
+
+ /**
+ * light hull color
+ *
+ * @generated from enum value: HULL_COLOR_LIGHT = 2;
+ */
+ LIGHT = 2,
+}
+
+/**
+ * HullColor is the color of the hull of the robots of a team
+ *
+ * @generated from enum HullColor
+ */
+export type HullColorJson = "HULL_COLOR_UNKNOWN" | "HULL_COLOR_DARK" | "HULL_COLOR_LIGHT";
+
+/**
+ * Describes the enum HullColor.
+ */
+export const HullColorSchema: GenEnum = /*@__PURE__*/
+ enumDesc(file_state_ssl_gc_referee_message, 1);
+
diff --git a/frontend/src/proto/state/ssl_gc_state_pb.ts b/frontend/src/proto/state/ssl_gc_state_pb.ts
index aa3b4b2a..dece51ec 100644
--- a/frontend/src/proto/state/ssl_gc_state_pb.ts
+++ b/frontend/src/proto/state/ssl_gc_state_pb.ts
@@ -10,7 +10,7 @@ import type { Vector2, Vector2Json } from "../geom/ssl_gc_geometry_pb";
import { file_geom_ssl_gc_geometry } from "../geom/ssl_gc_geometry_pb";
import type { GameEvent, GameEventJson } from "./ssl_gc_game_event_pb";
import { file_state_ssl_gc_game_event } from "./ssl_gc_game_event_pb";
-import type { MatchType, MatchTypeJson, Referee_Stage, Referee_StageJson } from "./ssl_gc_referee_message_pb";
+import type { HullColor, HullColorJson, MatchType, MatchTypeJson, Referee_Stage, Referee_StageJson } from "./ssl_gc_referee_message_pb";
import { file_state_ssl_gc_referee_message } from "./ssl_gc_referee_message_pb";
import type { Duration, DurationJson, Timestamp, TimestampJson } from "@bufbuild/protobuf/wkt";
import { file_google_protobuf_duration, file_google_protobuf_timestamp } from "@bufbuild/protobuf/wkt";
@@ -20,7 +20,7 @@ import type { Message } from "@bufbuild/protobuf";
* Describes the file state/ssl_gc_state.proto.
*/
export const file_state_ssl_gc_state: GenFile = /*@__PURE__*/
- fileDesc("ChhzdGF0ZS9zc2xfZ2Nfc3RhdGUucHJvdG8idQoKWWVsbG93Q2FyZBIKCgJpZBgBIAEoDRIoChRjYXVzZWRfYnlfZ2FtZV9ldmVudBgCIAEoCzIKLkdhbWVFdmVudBIxCg50aW1lX3JlbWFpbmluZxgDIAEoCzIZLmdvb2dsZS5wcm90b2J1Zi5EdXJhdGlvbiI/CgdSZWRDYXJkEgoKAmlkGAEgASgNEigKFGNhdXNlZF9ieV9nYW1lX2V2ZW50GAIgASgLMgouR2FtZUV2ZW50ImsKBEZvdWwSCgoCaWQYASABKA0SKAoUY2F1c2VkX2J5X2dhbWVfZXZlbnQYAiABKAsyCi5HYW1lRXZlbnQSLQoJdGltZXN0YW1wGAMgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcCLZAQoHQ29tbWFuZBIbCgR0eXBlGAEgAigOMg0uQ29tbWFuZC5UeXBlEhcKCGZvcl90ZWFtGAIgAigOMgUuVGVhbSKXAQoEVHlwZRILCgdVTktOT1dOEAASCAoESEFMVBABEggKBFNUT1AQAhIQCgxOT1JNQUxfU1RBUlQQAxIPCgtGT1JDRV9TVEFSVBAEEgoKBkRJUkVDVBAFEgsKB0tJQ0tPRkYQBxILCgdQRU5BTFRZEAgSCwoHVElNRU9VVBAJEhIKDkJBTExfUExBQ0VNRU5UEAoiBAgGEAYiwwEKCUdhbWVTdGF0ZRIdCgR0eXBlGAEgAigOMg8uR2FtZVN0YXRlLlR5cGUSFwoIZm9yX3RlYW0YAiABKA4yBS5UZWFtIn4KBFR5cGUSCwoHVU5LTk9XThAAEggKBEhBTFQQARIICgRTVE9QEAISCwoHUlVOTklORxADEg0KCUZSRUVfS0lDSxAEEgsKB0tJQ0tPRkYQBRILCgdQRU5BTFRZEAYSCwoHVElNRU9VVBAHEhIKDkJBTExfUExBQ0VNRU5UEAgiWQoIUHJvcG9zYWwSLQoJdGltZXN0YW1wGAEgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIeCgpnYW1lX2V2ZW50GAIgASgLMgouR2FtZUV2ZW50IlEKDVByb3Bvc2FsR3JvdXASCgoCaWQYBCABKAkSHAoJcHJvcG9zYWxzGAEgAygLMgkuUHJvcG9zYWwSEAoIYWNjZXB0ZWQYAiABKAhKBAgDEAQi0gUKCFRlYW1JbmZvEgwKBG5hbWUYASABKAkSDQoFZ29hbHMYAiABKAUSEgoKZ29hbGtlZXBlchgDIAEoBRIhCgx5ZWxsb3dfY2FyZHMYBCADKAsyCy5ZZWxsb3dDYXJkEhsKCXJlZF9jYXJkcxgFIAMoCzIILlJlZENhcmQSFQoNdGltZW91dHNfbGVmdBgGIAEoBRI0ChF0aW1lb3V0X3RpbWVfbGVmdBgHIAEoCzIZLmdvb2dsZS5wcm90b2J1Zi5EdXJhdGlvbhIYChBvbl9wb3NpdGl2ZV9oYWxmGAggASgIEhQKBWZvdWxzGAkgAygLMgUuRm91bBIfChdiYWxsX3BsYWNlbWVudF9mYWlsdXJlcxgKIAEoBRInCh9iYWxsX3BsYWNlbWVudF9mYWlsdXJlc19yZWFjaGVkGAsgASgIEhYKDmNhbl9wbGFjZV9iYWxsGAwgASgIEhgKEG1heF9hbGxvd2VkX2JvdHMYDSABKAUSQwofcmVxdWVzdHNfYm90X3N1YnN0aXR1dGlvbl9zaW5jZRgOIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASOgoWcmVxdWVzdHNfdGltZW91dF9zaW5jZRgPIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASQQodcmVxdWVzdHNfZW1lcmdlbmN5X3N0b3Bfc2luY2UYECABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEhcKD2NoYWxsZW5nZV9mbGFncxgRIAEoBRIgChhib3Rfc3Vic3RpdHV0aW9uX2FsbG93ZWQYEiABKAgSHgoWYm90X3N1YnN0aXR1dGlvbnNfbGVmdBgTIAEoBRI9Chpib3Rfc3Vic3RpdHV0aW9uX3RpbWVfbGVmdBgUIAEoCzIZLmdvb2dsZS5wcm90b2J1Zi5EdXJhdGlvbiKxBgoFU3RhdGUSHQoFc3RhZ2UYASABKA4yDi5SZWZlcmVlLlN0YWdlEhkKB2NvbW1hbmQYAiABKAsyCC5Db21tYW5kEh4KCmdhbWVfc3RhdGUYEyABKAsyCi5HYW1lU3RhdGUSNQoSc3RhZ2VfdGltZV9lbGFwc2VkGAQgASgLMhkuZ29vZ2xlLnByb3RvYnVmLkR1cmF0aW9uEjIKD3N0YWdlX3RpbWVfbGVmdBgFIAEoCzIZLmdvb2dsZS5wcm90b2J1Zi5EdXJhdGlvbhI0ChBtYXRjaF90aW1lX3N0YXJ0GAYgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIpCgp0ZWFtX3N0YXRlGAggAygLMhUuU3RhdGUuVGVhbVN0YXRlRW50cnkSHwoNcGxhY2VtZW50X3BvcxgJIAEoCzIILlZlY3RvcjISHgoMbmV4dF9jb21tYW5kGAogASgLMgguQ29tbWFuZBJACh1jdXJyZW50X2FjdGlvbl90aW1lX3JlbWFpbmluZxgMIAEoCzIZLmdvb2dsZS5wcm90b2J1Zi5EdXJhdGlvbhIfCgtnYW1lX2V2ZW50cxgNIAMoCzIKLkdhbWVFdmVudBInCg9wcm9wb3NhbF9ncm91cHMYDiADKAsyDi5Qcm9wb3NhbEdyb3VwEhsKCGRpdmlzaW9uGA8gASgOMgkuRGl2aXNpb24SIQoSZmlyc3Rfa2lja29mZl90ZWFtGBEgASgOMgUuVGVhbRIeCgptYXRjaF90eXBlGBIgASgOMgouTWF0Y2hUeXBlEjcKE3JlYWR5X2NvbnRpbnVlX3RpbWUYFCABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEiYKDnNob290b3V0X3N0YXRlGBUgASgLMg4uU2hvb3RvdXRTdGF0ZRIWCg5zdGF0dXNfbWVzc2FnZRgWIAEoCRIZChFtYXhfYm90c19wZXJfdGVhbRgXIAEoBRo7Cg5UZWFtU3RhdGVFbnRyeRILCgNrZXkYASABKAkSGAoFdmFsdWUYAiABKAsyCS5UZWFtSW5mbzoCOAFKBAgQEBEipAEKDVNob290b3V0U3RhdGUSGAoJbmV4dF90ZWFtGAEgASgOMgUuVGVhbRJAChJudW1iZXJfb2ZfYXR0ZW1wdHMYAiADKAsyJC5TaG9vdG91dFN0YXRlLk51bWJlck9mQXR0ZW1wdHNFbnRyeRo3ChVOdW1iZXJPZkF0dGVtcHRzRW50cnkSCwoDa2V5GAEgASgJEg0KBXZhbHVlGAIgASgFOgI4AUJSQg9Tc2xHY1N0YXRlUHJvdG9QAVo9Z2l0aHViLmNvbS9Sb2JvQ3VwLVNTTC9zc2wtZ2FtZS1jb250cm9sbGVyL2ludGVybmFsL2FwcC9zdGF0ZQ", [file_state_ssl_gc_common, file_geom_ssl_gc_geometry, file_state_ssl_gc_game_event, file_state_ssl_gc_referee_message, file_google_protobuf_duration, file_google_protobuf_timestamp]);
+ fileDesc("ChhzdGF0ZS9zc2xfZ2Nfc3RhdGUucHJvdG8idQoKWWVsbG93Q2FyZBIKCgJpZBgBIAEoDRIoChRjYXVzZWRfYnlfZ2FtZV9ldmVudBgCIAEoCzIKLkdhbWVFdmVudBIxCg50aW1lX3JlbWFpbmluZxgDIAEoCzIZLmdvb2dsZS5wcm90b2J1Zi5EdXJhdGlvbiI/CgdSZWRDYXJkEgoKAmlkGAEgASgNEigKFGNhdXNlZF9ieV9nYW1lX2V2ZW50GAIgASgLMgouR2FtZUV2ZW50ImsKBEZvdWwSCgoCaWQYASABKA0SKAoUY2F1c2VkX2J5X2dhbWVfZXZlbnQYAiABKAsyCi5HYW1lRXZlbnQSLQoJdGltZXN0YW1wGAMgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcCLZAQoHQ29tbWFuZBIbCgR0eXBlGAEgAigOMg0uQ29tbWFuZC5UeXBlEhcKCGZvcl90ZWFtGAIgAigOMgUuVGVhbSKXAQoEVHlwZRILCgdVTktOT1dOEAASCAoESEFMVBABEggKBFNUT1AQAhIQCgxOT1JNQUxfU1RBUlQQAxIPCgtGT1JDRV9TVEFSVBAEEgoKBkRJUkVDVBAFEgsKB0tJQ0tPRkYQBxILCgdQRU5BTFRZEAgSCwoHVElNRU9VVBAJEhIKDkJBTExfUExBQ0VNRU5UEAoiBAgGEAYiwwEKCUdhbWVTdGF0ZRIdCgR0eXBlGAEgAigOMg8uR2FtZVN0YXRlLlR5cGUSFwoIZm9yX3RlYW0YAiABKA4yBS5UZWFtIn4KBFR5cGUSCwoHVU5LTk9XThAAEggKBEhBTFQQARIICgRTVE9QEAISCwoHUlVOTklORxADEg0KCUZSRUVfS0lDSxAEEgsKB0tJQ0tPRkYQBRILCgdQRU5BTFRZEAYSCwoHVElNRU9VVBAHEhIKDkJBTExfUExBQ0VNRU5UEAgiWQoIUHJvcG9zYWwSLQoJdGltZXN0YW1wGAEgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIeCgpnYW1lX2V2ZW50GAIgASgLMgouR2FtZUV2ZW50IlEKDVByb3Bvc2FsR3JvdXASCgoCaWQYBCABKAkSHAoJcHJvcG9zYWxzGAEgAygLMgkuUHJvcG9zYWwSEAoIYWNjZXB0ZWQYAiABKAhKBAgDEAQi8gUKCFRlYW1JbmZvEgwKBG5hbWUYASABKAkSDQoFZ29hbHMYAiABKAUSEgoKZ29hbGtlZXBlchgDIAEoBRIhCgx5ZWxsb3dfY2FyZHMYBCADKAsyCy5ZZWxsb3dDYXJkEhsKCXJlZF9jYXJkcxgFIAMoCzIILlJlZENhcmQSFQoNdGltZW91dHNfbGVmdBgGIAEoBRI0ChF0aW1lb3V0X3RpbWVfbGVmdBgHIAEoCzIZLmdvb2dsZS5wcm90b2J1Zi5EdXJhdGlvbhIYChBvbl9wb3NpdGl2ZV9oYWxmGAggASgIEhQKBWZvdWxzGAkgAygLMgUuRm91bBIfChdiYWxsX3BsYWNlbWVudF9mYWlsdXJlcxgKIAEoBRInCh9iYWxsX3BsYWNlbWVudF9mYWlsdXJlc19yZWFjaGVkGAsgASgIEhYKDmNhbl9wbGFjZV9iYWxsGAwgASgIEhgKEG1heF9hbGxvd2VkX2JvdHMYDSABKAUSQwofcmVxdWVzdHNfYm90X3N1YnN0aXR1dGlvbl9zaW5jZRgOIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASOgoWcmVxdWVzdHNfdGltZW91dF9zaW5jZRgPIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASQQodcmVxdWVzdHNfZW1lcmdlbmN5X3N0b3Bfc2luY2UYECABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEhcKD2NoYWxsZW5nZV9mbGFncxgRIAEoBRIgChhib3Rfc3Vic3RpdHV0aW9uX2FsbG93ZWQYEiABKAgSHgoWYm90X3N1YnN0aXR1dGlvbnNfbGVmdBgTIAEoBRI9Chpib3Rfc3Vic3RpdHV0aW9uX3RpbWVfbGVmdBgUIAEoCzIZLmdvb2dsZS5wcm90b2J1Zi5EdXJhdGlvbhIeCgpodWxsX2NvbG9yGBUgASgOMgouSHVsbENvbG9yIrEGCgVTdGF0ZRIdCgVzdGFnZRgBIAEoDjIOLlJlZmVyZWUuU3RhZ2USGQoHY29tbWFuZBgCIAEoCzIILkNvbW1hbmQSHgoKZ2FtZV9zdGF0ZRgTIAEoCzIKLkdhbWVTdGF0ZRI1ChJzdGFnZV90aW1lX2VsYXBzZWQYBCABKAsyGS5nb29nbGUucHJvdG9idWYuRHVyYXRpb24SMgoPc3RhZ2VfdGltZV9sZWZ0GAUgASgLMhkuZ29vZ2xlLnByb3RvYnVmLkR1cmF0aW9uEjQKEG1hdGNoX3RpbWVfc3RhcnQYBiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEikKCnRlYW1fc3RhdGUYCCADKAsyFS5TdGF0ZS5UZWFtU3RhdGVFbnRyeRIfCg1wbGFjZW1lbnRfcG9zGAkgASgLMgguVmVjdG9yMhIeCgxuZXh0X2NvbW1hbmQYCiABKAsyCC5Db21tYW5kEkAKHWN1cnJlbnRfYWN0aW9uX3RpbWVfcmVtYWluaW5nGAwgASgLMhkuZ29vZ2xlLnByb3RvYnVmLkR1cmF0aW9uEh8KC2dhbWVfZXZlbnRzGA0gAygLMgouR2FtZUV2ZW50EicKD3Byb3Bvc2FsX2dyb3VwcxgOIAMoCzIOLlByb3Bvc2FsR3JvdXASGwoIZGl2aXNpb24YDyABKA4yCS5EaXZpc2lvbhIhChJmaXJzdF9raWNrb2ZmX3RlYW0YESABKA4yBS5UZWFtEh4KCm1hdGNoX3R5cGUYEiABKA4yCi5NYXRjaFR5cGUSNwoTcmVhZHlfY29udGludWVfdGltZRgUIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASJgoOc2hvb3RvdXRfc3RhdGUYFSABKAsyDi5TaG9vdG91dFN0YXRlEhYKDnN0YXR1c19tZXNzYWdlGBYgASgJEhkKEW1heF9ib3RzX3Blcl90ZWFtGBcgASgFGjsKDlRlYW1TdGF0ZUVudHJ5EgsKA2tleRgBIAEoCRIYCgV2YWx1ZRgCIAEoCzIJLlRlYW1JbmZvOgI4AUoECBAQESKkAQoNU2hvb3RvdXRTdGF0ZRIYCgluZXh0X3RlYW0YASABKA4yBS5UZWFtEkAKEm51bWJlcl9vZl9hdHRlbXB0cxgCIAMoCzIkLlNob290b3V0U3RhdGUuTnVtYmVyT2ZBdHRlbXB0c0VudHJ5GjcKFU51bWJlck9mQXR0ZW1wdHNFbnRyeRILCgNrZXkYASABKAkSDQoFdmFsdWUYAiABKAU6AjgBQlJCD1NzbEdjU3RhdGVQcm90b1ABWj1naXRodWIuY29tL1JvYm9DdXAtU1NML3NzbC1nYW1lLWNvbnRyb2xsZXIvaW50ZXJuYWwvYXBwL3N0YXRl", [file_state_ssl_gc_common, file_geom_ssl_gc_geometry, file_state_ssl_gc_game_event, file_state_ssl_gc_referee_message, file_google_protobuf_duration, file_google_protobuf_timestamp]);
/**
* @generated from message YellowCard
@@ -561,6 +561,11 @@ export type TeamInfo = Message<"TeamInfo"> & {
* @generated from field: optional google.protobuf.Duration bot_substitution_time_left = 20;
*/
botSubstitutionTimeLeft?: Duration;
+
+ /**
+ * @generated from field: optional HullColor hull_color = 21;
+ */
+ hullColor: HullColor;
};
/**
@@ -666,6 +671,11 @@ export type TeamInfoJson = {
* @generated from field: optional google.protobuf.Duration bot_substitution_time_left = 20;
*/
botSubstitutionTimeLeft?: DurationJson;
+
+ /**
+ * @generated from field: optional HullColor hull_color = 21;
+ */
+ hullColor?: HullColorJson;
};
/**
diff --git a/frontend/src/proto/statemachine/ssl_gc_change_pb.ts b/frontend/src/proto/statemachine/ssl_gc_change_pb.ts
index eb110f9e..5c13888f 100644
--- a/frontend/src/proto/statemachine/ssl_gc_change_pb.ts
+++ b/frontend/src/proto/statemachine/ssl_gc_change_pb.ts
@@ -12,7 +12,7 @@ import type { Vector2, Vector2Json } from "../geom/ssl_gc_geometry_pb";
import { file_geom_ssl_gc_geometry } from "../geom/ssl_gc_geometry_pb";
import type { GameEvent, GameEventJson } from "../state/ssl_gc_game_event_pb";
import { file_state_ssl_gc_game_event } from "../state/ssl_gc_game_event_pb";
-import type { MatchType, MatchTypeJson, Referee_Stage, Referee_StageJson } from "../state/ssl_gc_referee_message_pb";
+import type { HullColor, HullColorJson, MatchType, MatchTypeJson, Referee_Stage, Referee_StageJson } from "../state/ssl_gc_referee_message_pb";
import { file_state_ssl_gc_referee_message } from "../state/ssl_gc_referee_message_pb";
import type { BoolValueJson, Int32ValueJson, StringValueJson, Timestamp, TimestampJson, UInt32ValueJson } from "@bufbuild/protobuf/wkt";
import { file_google_protobuf_timestamp, file_google_protobuf_wrappers } from "@bufbuild/protobuf/wkt";
@@ -22,7 +22,7 @@ import type { Message } from "@bufbuild/protobuf";
* Describes the file statemachine/ssl_gc_change.proto.
*/
export const file_statemachine_ssl_gc_change: GenFile = /*@__PURE__*/
- fileDesc("CiBzdGF0ZW1hY2hpbmUvc3NsX2djX2NoYW5nZS5wcm90byKTAQoLU3RhdGVDaGFuZ2USCgoCaWQYASABKAUSGQoJc3RhdGVfcHJlGAIgASgLMgYuU3RhdGUSFQoFc3RhdGUYAyABKAsyBi5TdGF0ZRIXCgZjaGFuZ2UYBCABKAsyBy5DaGFuZ2USLQoJdGltZXN0YW1wGAUgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcCLUFgoGQ2hhbmdlEg4KBm9yaWdpbhgBIAEoCRISCgpyZXZlcnRpYmxlGBAgASgIEjAKEm5ld19jb21tYW5kX2NoYW5nZRgCIAEoCzISLkNoYW5nZS5OZXdDb21tYW5kSAASMgoTY2hhbmdlX3N0YWdlX2NoYW5nZRgDIAEoCzITLkNoYW5nZS5DaGFuZ2VTdGFnZUgAEkQKHXNldF9iYWxsX3BsYWNlbWVudF9wb3NfY2hhbmdlGAQgASgLMhsuQ2hhbmdlLlNldEJhbGxQbGFjZW1lbnRQb3NIABI3ChZhZGRfeWVsbG93X2NhcmRfY2hhbmdlGAUgASgLMhUuQ2hhbmdlLkFkZFllbGxvd0NhcmRIABIxChNhZGRfcmVkX2NhcmRfY2hhbmdlGAYgASgLMhIuQ2hhbmdlLkFkZFJlZENhcmRIABI5Chd5ZWxsb3dfY2FyZF9vdmVyX2NoYW5nZRgHIAEoCzIWLkNoYW5nZS5ZZWxsb3dDYXJkT3ZlckgAEjUKFWFkZF9nYW1lX2V2ZW50X2NoYW5nZRgIIAEoCzIULkNoYW5nZS5BZGRHYW1lRXZlbnRIABJECh1hZGRfcGFzc2l2ZV9nYW1lX2V2ZW50X2NoYW5nZRgTIAEoCzIbLkNoYW5nZS5BZGRQYXNzaXZlR2FtZUV2ZW50SAASMgoTYWRkX3Byb3Bvc2FsX2NoYW5nZRgJIAEoCzITLkNoYW5nZS5BZGRQcm9wb3NhbEgAEjQKFHVwZGF0ZV9jb25maWdfY2hhbmdlGAwgASgLMhQuQ2hhbmdlLlVwZGF0ZUNvbmZpZ0gAEjsKGHVwZGF0ZV90ZWFtX3N0YXRlX2NoYW5nZRgNIAEoCzIXLkNoYW5nZS5VcGRhdGVUZWFtU3RhdGVIABI0ChRzd2l0Y2hfY29sb3JzX2NoYW5nZRgOIAEoCzIULkNoYW5nZS5Td2l0Y2hDb2xvcnNIABInCg1yZXZlcnRfY2hhbmdlGA8gASgLMg4uQ2hhbmdlLlJldmVydEgAEjUKFW5ld19nYW1lX3N0YXRlX2NoYW5nZRgRIAEoCzIULkNoYW5nZS5OZXdHYW1lU3RhdGVIABJDChxhY2NlcHRfcHJvcG9zYWxfZ3JvdXBfY2hhbmdlGBIgASgLMhsuQ2hhbmdlLkFjY2VwdFByb3Bvc2FsR3JvdXBIABI9ChlzZXRfc3RhdHVzX21lc3NhZ2VfY2hhbmdlGBQgASgLMhguQ2hhbmdlLlNldFN0YXR1c01lc3NhZ2VIABonCgpOZXdDb21tYW5kEhkKB2NvbW1hbmQYASABKAsyCC5Db21tYW5kGjAKC0NoYW5nZVN0YWdlEiEKCW5ld19zdGFnZRgBIAEoDjIOLlJlZmVyZWUuU3RhZ2UaLAoTU2V0QmFsbFBsYWNlbWVudFBvcxIVCgNwb3MYASABKAsyCC5WZWN0b3IyGlIKDUFkZFllbGxvd0NhcmQSFwoIZm9yX3RlYW0YASABKA4yBS5UZWFtEigKFGNhdXNlZF9ieV9nYW1lX2V2ZW50GAIgASgLMgouR2FtZUV2ZW50Gk8KCkFkZFJlZENhcmQSFwoIZm9yX3RlYW0YASABKA4yBS5UZWFtEigKFGNhdXNlZF9ieV9nYW1lX2V2ZW50GAIgASgLMgouR2FtZUV2ZW50GikKDlllbGxvd0NhcmRPdmVyEhcKCGZvcl90ZWFtGAEgASgOMgUuVGVhbRouCgxBZGRHYW1lRXZlbnQSHgoKZ2FtZV9ldmVudBgBIAEoCzIKLkdhbWVFdmVudBo1ChNBZGRQYXNzaXZlR2FtZUV2ZW50Eh4KCmdhbWVfZXZlbnQYASABKAsyCi5HYW1lRXZlbnQaKgoLQWRkUHJvcG9zYWwSGwoIcHJvcG9zYWwYASABKAsyCS5Qcm9wb3NhbBo8ChNBY2NlcHRQcm9wb3NhbEdyb3VwEhAKCGdyb3VwX2lkGAMgASgJEhMKC2FjY2VwdGVkX2J5GAIgASgJGq4BCgxVcGRhdGVDb25maWcSGwoIZGl2aXNpb24YASABKA4yCS5EaXZpc2lvbhIhChJmaXJzdF9raWNrb2ZmX3RlYW0YAiABKA4yBS5UZWFtEh4KCm1hdGNoX3R5cGUYBCABKA4yCi5NYXRjaFR5cGUSOAoTbWF4X3JvYm90c19wZXJfdGVhbRgFIAEoCzIbLmdvb2dsZS5wcm90b2J1Zi5JbnQzMlZhbHVlSgQIAxAEGqYICg9VcGRhdGVUZWFtU3RhdGUSFwoIZm9yX3RlYW0YASABKA4yBS5UZWFtEi8KCXRlYW1fbmFtZRgCIAEoCzIcLmdvb2dsZS5wcm90b2J1Zi5TdHJpbmdWYWx1ZRIqCgVnb2FscxgDIAEoCzIbLmdvb2dsZS5wcm90b2J1Zi5JbnQzMlZhbHVlEi8KCmdvYWxrZWVwZXIYBCABKAsyGy5nb29nbGUucHJvdG9idWYuSW50MzJWYWx1ZRIyCg10aW1lb3V0c19sZWZ0GAUgASgLMhsuZ29vZ2xlLnByb3RvYnVmLkludDMyVmFsdWUSNwoRdGltZW91dF90aW1lX2xlZnQYBiABKAsyHC5nb29nbGUucHJvdG9idWYuU3RyaW5nVmFsdWUSNAoQb25fcG9zaXRpdmVfaGFsZhgHIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5Cb29sVmFsdWUSPAoXYmFsbF9wbGFjZW1lbnRfZmFpbHVyZXMYCCABKAsyGy5nb29nbGUucHJvdG9idWYuSW50MzJWYWx1ZRIyCg5jYW5fcGxhY2VfYmFsbBgJIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5Cb29sVmFsdWUSOQoUY2hhbGxlbmdlX2ZsYWdzX2xlZnQYFSABKAsyGy5nb29nbGUucHJvdG9idWYuSW50MzJWYWx1ZRI7ChZib3Rfc3Vic3RpdHV0aW9uc19sZWZ0GBYgASgLMhsuZ29vZ2xlLnByb3RvYnVmLkludDMyVmFsdWUSPQoZcmVxdWVzdHNfYm90X3N1YnN0aXR1dGlvbhgKIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5Cb29sVmFsdWUSNAoQcmVxdWVzdHNfdGltZW91dBgRIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5Cb29sVmFsdWUSNgoScmVxdWVzdHNfY2hhbGxlbmdlGBIgASgLMhouZ29vZ2xlLnByb3RvYnVmLkJvb2xWYWx1ZRI7ChdyZXF1ZXN0c19lbWVyZ2VuY3lfc3RvcBgTIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5Cb29sVmFsdWUSIAoLeWVsbG93X2NhcmQYFCABKAsyCy5ZZWxsb3dDYXJkEhoKCHJlZF9jYXJkGAwgASgLMgguUmVkQ2FyZBITCgRmb3VsGA0gASgLMgUuRm91bBI4ChJyZW1vdmVfeWVsbG93X2NhcmQYDiABKAsyHC5nb29nbGUucHJvdG9idWYuVUludDMyVmFsdWUSNQoPcmVtb3ZlX3JlZF9jYXJkGA8gASgLMhwuZ29vZ2xlLnByb3RvYnVmLlVJbnQzMlZhbHVlEjEKC3JlbW92ZV9mb3VsGBAgASgLMhwuZ29vZ2xlLnByb3RvYnVmLlVJbnQzMlZhbHVlGg4KDFN3aXRjaENvbG9ycxobCgZSZXZlcnQSEQoJY2hhbmdlX2lkGAEgASgFGi4KDE5ld0dhbWVTdGF0ZRIeCgpnYW1lX3N0YXRlGAEgASgLMgouR2FtZVN0YXRlGioKEFNldFN0YXR1c01lc3NhZ2USFgoOc3RhdHVzX21lc3NhZ2UYASABKAlCCAoGY2hhbmdlQlpCEFNzbEdjQ2hhbmdlUHJvdG9QAVpEZ2l0aHViLmNvbS9Sb2JvQ3VwLVNTTC9zc2wtZ2FtZS1jb250cm9sbGVyL2ludGVybmFsL2FwcC9zdGF0ZW1hY2hpbmU", [file_state_ssl_gc_state, file_state_ssl_gc_common, file_geom_ssl_gc_geometry, file_state_ssl_gc_game_event, file_state_ssl_gc_referee_message, file_google_protobuf_timestamp, file_google_protobuf_wrappers]);
+ fileDesc("CiBzdGF0ZW1hY2hpbmUvc3NsX2djX2NoYW5nZS5wcm90byKTAQoLU3RhdGVDaGFuZ2USCgoCaWQYASABKAUSGQoJc3RhdGVfcHJlGAIgASgLMgYuU3RhdGUSFQoFc3RhdGUYAyABKAsyBi5TdGF0ZRIXCgZjaGFuZ2UYBCABKAsyBy5DaGFuZ2USLQoJdGltZXN0YW1wGAUgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcCL0FgoGQ2hhbmdlEg4KBm9yaWdpbhgBIAEoCRISCgpyZXZlcnRpYmxlGBAgASgIEjAKEm5ld19jb21tYW5kX2NoYW5nZRgCIAEoCzISLkNoYW5nZS5OZXdDb21tYW5kSAASMgoTY2hhbmdlX3N0YWdlX2NoYW5nZRgDIAEoCzITLkNoYW5nZS5DaGFuZ2VTdGFnZUgAEkQKHXNldF9iYWxsX3BsYWNlbWVudF9wb3NfY2hhbmdlGAQgASgLMhsuQ2hhbmdlLlNldEJhbGxQbGFjZW1lbnRQb3NIABI3ChZhZGRfeWVsbG93X2NhcmRfY2hhbmdlGAUgASgLMhUuQ2hhbmdlLkFkZFllbGxvd0NhcmRIABIxChNhZGRfcmVkX2NhcmRfY2hhbmdlGAYgASgLMhIuQ2hhbmdlLkFkZFJlZENhcmRIABI5Chd5ZWxsb3dfY2FyZF9vdmVyX2NoYW5nZRgHIAEoCzIWLkNoYW5nZS5ZZWxsb3dDYXJkT3ZlckgAEjUKFWFkZF9nYW1lX2V2ZW50X2NoYW5nZRgIIAEoCzIULkNoYW5nZS5BZGRHYW1lRXZlbnRIABJECh1hZGRfcGFzc2l2ZV9nYW1lX2V2ZW50X2NoYW5nZRgTIAEoCzIbLkNoYW5nZS5BZGRQYXNzaXZlR2FtZUV2ZW50SAASMgoTYWRkX3Byb3Bvc2FsX2NoYW5nZRgJIAEoCzITLkNoYW5nZS5BZGRQcm9wb3NhbEgAEjQKFHVwZGF0ZV9jb25maWdfY2hhbmdlGAwgASgLMhQuQ2hhbmdlLlVwZGF0ZUNvbmZpZ0gAEjsKGHVwZGF0ZV90ZWFtX3N0YXRlX2NoYW5nZRgNIAEoCzIXLkNoYW5nZS5VcGRhdGVUZWFtU3RhdGVIABI0ChRzd2l0Y2hfY29sb3JzX2NoYW5nZRgOIAEoCzIULkNoYW5nZS5Td2l0Y2hDb2xvcnNIABInCg1yZXZlcnRfY2hhbmdlGA8gASgLMg4uQ2hhbmdlLlJldmVydEgAEjUKFW5ld19nYW1lX3N0YXRlX2NoYW5nZRgRIAEoCzIULkNoYW5nZS5OZXdHYW1lU3RhdGVIABJDChxhY2NlcHRfcHJvcG9zYWxfZ3JvdXBfY2hhbmdlGBIgASgLMhsuQ2hhbmdlLkFjY2VwdFByb3Bvc2FsR3JvdXBIABI9ChlzZXRfc3RhdHVzX21lc3NhZ2VfY2hhbmdlGBQgASgLMhguQ2hhbmdlLlNldFN0YXR1c01lc3NhZ2VIABonCgpOZXdDb21tYW5kEhkKB2NvbW1hbmQYASABKAsyCC5Db21tYW5kGjAKC0NoYW5nZVN0YWdlEiEKCW5ld19zdGFnZRgBIAEoDjIOLlJlZmVyZWUuU3RhZ2UaLAoTU2V0QmFsbFBsYWNlbWVudFBvcxIVCgNwb3MYASABKAsyCC5WZWN0b3IyGlIKDUFkZFllbGxvd0NhcmQSFwoIZm9yX3RlYW0YASABKA4yBS5UZWFtEigKFGNhdXNlZF9ieV9nYW1lX2V2ZW50GAIgASgLMgouR2FtZUV2ZW50Gk8KCkFkZFJlZENhcmQSFwoIZm9yX3RlYW0YASABKA4yBS5UZWFtEigKFGNhdXNlZF9ieV9nYW1lX2V2ZW50GAIgASgLMgouR2FtZUV2ZW50GikKDlllbGxvd0NhcmRPdmVyEhcKCGZvcl90ZWFtGAEgASgOMgUuVGVhbRouCgxBZGRHYW1lRXZlbnQSHgoKZ2FtZV9ldmVudBgBIAEoCzIKLkdhbWVFdmVudBo1ChNBZGRQYXNzaXZlR2FtZUV2ZW50Eh4KCmdhbWVfZXZlbnQYASABKAsyCi5HYW1lRXZlbnQaKgoLQWRkUHJvcG9zYWwSGwoIcHJvcG9zYWwYASABKAsyCS5Qcm9wb3NhbBo8ChNBY2NlcHRQcm9wb3NhbEdyb3VwEhAKCGdyb3VwX2lkGAMgASgJEhMKC2FjY2VwdGVkX2J5GAIgASgJGq4BCgxVcGRhdGVDb25maWcSGwoIZGl2aXNpb24YASABKA4yCS5EaXZpc2lvbhIhChJmaXJzdF9raWNrb2ZmX3RlYW0YAiABKA4yBS5UZWFtEh4KCm1hdGNoX3R5cGUYBCABKA4yCi5NYXRjaFR5cGUSOAoTbWF4X3JvYm90c19wZXJfdGVhbRgFIAEoCzIbLmdvb2dsZS5wcm90b2J1Zi5JbnQzMlZhbHVlSgQIAxAEGsYICg9VcGRhdGVUZWFtU3RhdGUSFwoIZm9yX3RlYW0YASABKA4yBS5UZWFtEi8KCXRlYW1fbmFtZRgCIAEoCzIcLmdvb2dsZS5wcm90b2J1Zi5TdHJpbmdWYWx1ZRIqCgVnb2FscxgDIAEoCzIbLmdvb2dsZS5wcm90b2J1Zi5JbnQzMlZhbHVlEi8KCmdvYWxrZWVwZXIYBCABKAsyGy5nb29nbGUucHJvdG9idWYuSW50MzJWYWx1ZRIyCg10aW1lb3V0c19sZWZ0GAUgASgLMhsuZ29vZ2xlLnByb3RvYnVmLkludDMyVmFsdWUSNwoRdGltZW91dF90aW1lX2xlZnQYBiABKAsyHC5nb29nbGUucHJvdG9idWYuU3RyaW5nVmFsdWUSNAoQb25fcG9zaXRpdmVfaGFsZhgHIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5Cb29sVmFsdWUSPAoXYmFsbF9wbGFjZW1lbnRfZmFpbHVyZXMYCCABKAsyGy5nb29nbGUucHJvdG9idWYuSW50MzJWYWx1ZRIyCg5jYW5fcGxhY2VfYmFsbBgJIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5Cb29sVmFsdWUSOQoUY2hhbGxlbmdlX2ZsYWdzX2xlZnQYFSABKAsyGy5nb29nbGUucHJvdG9idWYuSW50MzJWYWx1ZRI7ChZib3Rfc3Vic3RpdHV0aW9uc19sZWZ0GBYgASgLMhsuZ29vZ2xlLnByb3RvYnVmLkludDMyVmFsdWUSPQoZcmVxdWVzdHNfYm90X3N1YnN0aXR1dGlvbhgKIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5Cb29sVmFsdWUSNAoQcmVxdWVzdHNfdGltZW91dBgRIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5Cb29sVmFsdWUSNgoScmVxdWVzdHNfY2hhbGxlbmdlGBIgASgLMhouZ29vZ2xlLnByb3RvYnVmLkJvb2xWYWx1ZRI7ChdyZXF1ZXN0c19lbWVyZ2VuY3lfc3RvcBgTIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5Cb29sVmFsdWUSIAoLeWVsbG93X2NhcmQYFCABKAsyCy5ZZWxsb3dDYXJkEhoKCHJlZF9jYXJkGAwgASgLMgguUmVkQ2FyZBITCgRmb3VsGA0gASgLMgUuRm91bBI4ChJyZW1vdmVfeWVsbG93X2NhcmQYDiABKAsyHC5nb29nbGUucHJvdG9idWYuVUludDMyVmFsdWUSNQoPcmVtb3ZlX3JlZF9jYXJkGA8gASgLMhwuZ29vZ2xlLnByb3RvYnVmLlVJbnQzMlZhbHVlEjEKC3JlbW92ZV9mb3VsGBAgASgLMhwuZ29vZ2xlLnByb3RvYnVmLlVJbnQzMlZhbHVlEh4KCmh1bGxfY29sb3IYFyABKA4yCi5IdWxsQ29sb3IaDgoMU3dpdGNoQ29sb3JzGhsKBlJldmVydBIRCgljaGFuZ2VfaWQYASABKAUaLgoMTmV3R2FtZVN0YXRlEh4KCmdhbWVfc3RhdGUYASABKAsyCi5HYW1lU3RhdGUaKgoQU2V0U3RhdHVzTWVzc2FnZRIWCg5zdGF0dXNfbWVzc2FnZRgBIAEoCUIICgZjaGFuZ2VCWkIQU3NsR2NDaGFuZ2VQcm90b1ABWkRnaXRodWIuY29tL1JvYm9DdXAtU1NML3NzbC1nYW1lLWNvbnRyb2xsZXIvaW50ZXJuYWwvYXBwL3N0YXRlbWFjaGluZQ", [file_state_ssl_gc_state, file_state_ssl_gc_common, file_geom_ssl_gc_geometry, file_state_ssl_gc_game_event, file_state_ssl_gc_referee_message, file_google_protobuf_timestamp, file_google_protobuf_wrappers]);
/**
* A state change
@@ -966,6 +966,13 @@ export type Change_UpdateTeamState = Message<"Change.UpdateTeamState"> & {
* @generated from field: optional google.protobuf.UInt32Value remove_foul = 16;
*/
removeFoul?: number;
+
+ /**
+ * The color of the hull
+ *
+ * @generated from field: optional HullColor hull_color = 23;
+ */
+ hullColor: HullColor;
};
/**
@@ -1120,6 +1127,13 @@ export type Change_UpdateTeamStateJson = {
* @generated from field: optional google.protobuf.UInt32Value remove_foul = 16;
*/
removeFoul?: UInt32ValueJson;
+
+ /**
+ * The color of the hull
+ *
+ * @generated from field: optional HullColor hull_color = 23;
+ */
+ hullColor?: HullColorJson;
};
/**
diff --git a/frontend/src/views/StartView.vue b/frontend/src/views/StartView.vue
index dab60349..4d4ef3de 100644
--- a/frontend/src/views/StartView.vue
+++ b/frontend/src/views/StartView.vue
@@ -15,6 +15,7 @@ import FieldHalfInput from "@/components/team/FieldHalfInput.vue";
import StageInput from "@/components/start/StageInput.vue";
import {teams} from "@/helpers";
import MaxRobotsPerTeamInput from "@/components/start/MaxRobotsPerTeamInput.vue";
+import HullColorInput from "@/components/team/HullColorInput.vue";
@@ -66,6 +67,14 @@ import MaxRobotsPerTeamInput from "@/components/start/MaxRobotsPerTeamInput.vue"
+
+
+
+
+
+
+
+
diff --git a/internal/app/publish/messagegenerator.go b/internal/app/publish/messagegenerator.go
index 3a4a852e..68558cee 100644
--- a/internal/app/publish/messagegenerator.go
+++ b/internal/app/publish/messagegenerator.go
@@ -140,6 +140,7 @@ func updateTeam(teamInfo *state.Referee_TeamInfo, teamState *state.TeamInfo) {
*teamInfo.BotSubstitutionAllowed = *teamState.BotSubstitutionAllowed
*teamInfo.BotSubstitutionsLeft = unsigned32(*teamState.BotSubstitutionsLeft)
*teamInfo.BotSubstitutionTimeLeft = mapTime(teamState.BotSubstitutionTimeLeft.AsDuration())
+ *teamInfo.HullColor = *teamState.HullColor
}
func newRefereeMessage() (m *state.Referee) {
@@ -177,6 +178,7 @@ func newTeamInfo() (t *state.Referee_TeamInfo) {
t.BotSubstitutionAllowed = new(bool)
t.BotSubstitutionsLeft = new(uint32)
t.BotSubstitutionTimeLeft = new(uint32)
+ t.HullColor = new(state.HullColor)
return
}
diff --git a/internal/app/state/ssl_gc_referee_message.pb.go b/internal/app/state/ssl_gc_referee_message.pb.go
index 91a4185e..837fd109 100644
--- a/internal/app/state/ssl_gc_referee_message.pb.go
+++ b/internal/app/state/ssl_gc_referee_message.pb.go
@@ -87,6 +87,69 @@ func (MatchType) EnumDescriptor() ([]byte, []int) {
return file_state_ssl_gc_referee_message_proto_rawDescGZIP(), []int{0}
}
+// HullColor is the color of the hull of the robots of a team
+type HullColor int32
+
+const (
+ // not set
+ HullColor_HULL_COLOR_UNKNOWN HullColor = 0
+ // dark hull color
+ HullColor_HULL_COLOR_DARK HullColor = 1
+ // light hull color
+ HullColor_HULL_COLOR_LIGHT HullColor = 2
+)
+
+// Enum value maps for HullColor.
+var (
+ HullColor_name = map[int32]string{
+ 0: "HULL_COLOR_UNKNOWN",
+ 1: "HULL_COLOR_DARK",
+ 2: "HULL_COLOR_LIGHT",
+ }
+ HullColor_value = map[string]int32{
+ "HULL_COLOR_UNKNOWN": 0,
+ "HULL_COLOR_DARK": 1,
+ "HULL_COLOR_LIGHT": 2,
+ }
+)
+
+func (x HullColor) Enum() *HullColor {
+ p := new(HullColor)
+ *p = x
+ return p
+}
+
+func (x HullColor) String() string {
+ return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
+}
+
+func (HullColor) Descriptor() protoreflect.EnumDescriptor {
+ return file_state_ssl_gc_referee_message_proto_enumTypes[1].Descriptor()
+}
+
+func (HullColor) Type() protoreflect.EnumType {
+ return &file_state_ssl_gc_referee_message_proto_enumTypes[1]
+}
+
+func (x HullColor) Number() protoreflect.EnumNumber {
+ return protoreflect.EnumNumber(x)
+}
+
+// Deprecated: Do not use.
+func (x *HullColor) UnmarshalJSON(b []byte) error {
+ num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b)
+ if err != nil {
+ return err
+ }
+ *x = HullColor(num)
+ return nil
+}
+
+// Deprecated: Use HullColor.Descriptor instead.
+func (HullColor) EnumDescriptor() ([]byte, []int) {
+ return file_state_ssl_gc_referee_message_proto_rawDescGZIP(), []int{1}
+}
+
// These are the "coarse" stages of the game.
type Referee_Stage int32
@@ -176,11 +239,11 @@ func (x Referee_Stage) String() string {
}
func (Referee_Stage) Descriptor() protoreflect.EnumDescriptor {
- return file_state_ssl_gc_referee_message_proto_enumTypes[1].Descriptor()
+ return file_state_ssl_gc_referee_message_proto_enumTypes[2].Descriptor()
}
func (Referee_Stage) Type() protoreflect.EnumType {
- return &file_state_ssl_gc_referee_message_proto_enumTypes[1]
+ return &file_state_ssl_gc_referee_message_proto_enumTypes[2]
}
func (x Referee_Stage) Number() protoreflect.EnumNumber {
@@ -311,11 +374,11 @@ func (x Referee_Command) String() string {
}
func (Referee_Command) Descriptor() protoreflect.EnumDescriptor {
- return file_state_ssl_gc_referee_message_proto_enumTypes[2].Descriptor()
+ return file_state_ssl_gc_referee_message_proto_enumTypes[3].Descriptor()
}
func (Referee_Command) Type() protoreflect.EnumType {
- return &file_state_ssl_gc_referee_message_proto_enumTypes[2]
+ return &file_state_ssl_gc_referee_message_proto_enumTypes[3]
}
func (x Referee_Command) Number() protoreflect.EnumNumber {
@@ -653,8 +716,10 @@ type Referee_TeamInfo struct {
BotSubstitutionsLeft *uint32 `protobuf:"varint,17,opt,name=bot_substitutions_left,json=botSubstitutionsLeft" json:"bot_substitutions_left,omitempty"`
// The number of microseconds left for current bot substitution
BotSubstitutionTimeLeft *uint32 `protobuf:"varint,18,opt,name=bot_substitution_time_left,json=botSubstitutionTimeLeft" json:"bot_substitution_time_left,omitempty"`
- unknownFields protoimpl.UnknownFields
- sizeCache protoimpl.SizeCache
+ // The color of the hull of the robots of this team
+ HullColor *HullColor `protobuf:"varint,19,opt,name=hull_color,json=hullColor,enum=HullColor" json:"hull_color,omitempty"`
+ unknownFields protoimpl.UnknownFields
+ sizeCache protoimpl.SizeCache
}
func (x *Referee_TeamInfo) Reset() {
@@ -806,6 +871,13 @@ func (x *Referee_TeamInfo) GetBotSubstitutionTimeLeft() uint32 {
return 0
}
+func (x *Referee_TeamInfo) GetHullColor() HullColor {
+ if x != nil && x.HullColor != nil {
+ return *x.HullColor
+ }
+ return HullColor_HULL_COLOR_UNKNOWN
+}
+
// The coordinates of the Designated Position. These are measured in
// millimetres and correspond to SSL-Vision coordinates. These fields are
// always either both present (in the case of a ball placement command) or
@@ -869,7 +941,7 @@ var file_state_ssl_gc_referee_message_proto_rawDesc = []byte{
0x65, 0x66, 0x65, 0x72, 0x65, 0x65, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x2e, 0x70,
0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1d, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2f, 0x73, 0x73, 0x6c, 0x5f,
0x67, 0x63, 0x5f, 0x67, 0x61, 0x6d, 0x65, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x70, 0x72,
- 0x6f, 0x74, 0x6f, 0x22, 0xd2, 0x12, 0x0a, 0x07, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x65, 0x12,
+ 0x6f, 0x74, 0x6f, 0x22, 0xfd, 0x12, 0x0a, 0x07, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x65, 0x12,
0x2b, 0x0a, 0x11, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69,
0x66, 0x69, 0x65, 0x72, 0x18, 0x12, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x73, 0x6f, 0x75, 0x72,
0x63, 0x65, 0x49, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x12, 0x38, 0x0a, 0x0a,
@@ -922,7 +994,7 @@ var file_state_ssl_gc_referee_message_proto_rawDesc = []byte{
0x69, 0x6f, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x52, 0x65, 0x6d, 0x61, 0x69, 0x6e, 0x69, 0x6e, 0x67,
0x12, 0x25, 0x0a, 0x0e, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61,
0x67, 0x65, 0x18, 0x14, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73,
- 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0xda, 0x05, 0x0a, 0x08, 0x54, 0x65, 0x61, 0x6d,
+ 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x85, 0x06, 0x0a, 0x08, 0x54, 0x65, 0x61, 0x6d,
0x49, 0x6e, 0x66, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x02,
0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x63, 0x6f, 0x72,
0x65, 0x18, 0x02, 0x20, 0x02, 0x28, 0x0d, 0x52, 0x05, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x1b,
@@ -968,75 +1040,83 @@ var file_state_ssl_gc_referee_message_proto_rawDesc = []byte{
0x75, 0x62, 0x73, 0x74, 0x69, 0x74, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x69, 0x6d, 0x65,
0x5f, 0x6c, 0x65, 0x66, 0x74, 0x18, 0x12, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x17, 0x62, 0x6f, 0x74,
0x53, 0x75, 0x62, 0x73, 0x74, 0x69, 0x74, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x69, 0x6d, 0x65,
- 0x4c, 0x65, 0x66, 0x74, 0x1a, 0x23, 0x0a, 0x05, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x0c, 0x0a,
- 0x01, 0x78, 0x18, 0x01, 0x20, 0x02, 0x28, 0x02, 0x52, 0x01, 0x78, 0x12, 0x0c, 0x0a, 0x01, 0x79,
- 0x18, 0x02, 0x20, 0x02, 0x28, 0x02, 0x52, 0x01, 0x79, 0x22, 0xd1, 0x02, 0x0a, 0x05, 0x53, 0x74,
- 0x61, 0x67, 0x65, 0x12, 0x19, 0x0a, 0x15, 0x4e, 0x4f, 0x52, 0x4d, 0x41, 0x4c, 0x5f, 0x46, 0x49,
- 0x52, 0x53, 0x54, 0x5f, 0x48, 0x41, 0x4c, 0x46, 0x5f, 0x50, 0x52, 0x45, 0x10, 0x00, 0x12, 0x15,
- 0x0a, 0x11, 0x4e, 0x4f, 0x52, 0x4d, 0x41, 0x4c, 0x5f, 0x46, 0x49, 0x52, 0x53, 0x54, 0x5f, 0x48,
- 0x41, 0x4c, 0x46, 0x10, 0x01, 0x12, 0x14, 0x0a, 0x10, 0x4e, 0x4f, 0x52, 0x4d, 0x41, 0x4c, 0x5f,
- 0x48, 0x41, 0x4c, 0x46, 0x5f, 0x54, 0x49, 0x4d, 0x45, 0x10, 0x02, 0x12, 0x1a, 0x0a, 0x16, 0x4e,
- 0x4f, 0x52, 0x4d, 0x41, 0x4c, 0x5f, 0x53, 0x45, 0x43, 0x4f, 0x4e, 0x44, 0x5f, 0x48, 0x41, 0x4c,
- 0x46, 0x5f, 0x50, 0x52, 0x45, 0x10, 0x03, 0x12, 0x16, 0x0a, 0x12, 0x4e, 0x4f, 0x52, 0x4d, 0x41,
- 0x4c, 0x5f, 0x53, 0x45, 0x43, 0x4f, 0x4e, 0x44, 0x5f, 0x48, 0x41, 0x4c, 0x46, 0x10, 0x04, 0x12,
- 0x14, 0x0a, 0x10, 0x45, 0x58, 0x54, 0x52, 0x41, 0x5f, 0x54, 0x49, 0x4d, 0x45, 0x5f, 0x42, 0x52,
- 0x45, 0x41, 0x4b, 0x10, 0x05, 0x12, 0x18, 0x0a, 0x14, 0x45, 0x58, 0x54, 0x52, 0x41, 0x5f, 0x46,
- 0x49, 0x52, 0x53, 0x54, 0x5f, 0x48, 0x41, 0x4c, 0x46, 0x5f, 0x50, 0x52, 0x45, 0x10, 0x06, 0x12,
- 0x14, 0x0a, 0x10, 0x45, 0x58, 0x54, 0x52, 0x41, 0x5f, 0x46, 0x49, 0x52, 0x53, 0x54, 0x5f, 0x48,
- 0x41, 0x4c, 0x46, 0x10, 0x07, 0x12, 0x13, 0x0a, 0x0f, 0x45, 0x58, 0x54, 0x52, 0x41, 0x5f, 0x48,
- 0x41, 0x4c, 0x46, 0x5f, 0x54, 0x49, 0x4d, 0x45, 0x10, 0x08, 0x12, 0x19, 0x0a, 0x15, 0x45, 0x58,
- 0x54, 0x52, 0x41, 0x5f, 0x53, 0x45, 0x43, 0x4f, 0x4e, 0x44, 0x5f, 0x48, 0x41, 0x4c, 0x46, 0x5f,
- 0x50, 0x52, 0x45, 0x10, 0x09, 0x12, 0x15, 0x0a, 0x11, 0x45, 0x58, 0x54, 0x52, 0x41, 0x5f, 0x53,
- 0x45, 0x43, 0x4f, 0x4e, 0x44, 0x5f, 0x48, 0x41, 0x4c, 0x46, 0x10, 0x0a, 0x12, 0x1a, 0x0a, 0x16,
- 0x50, 0x45, 0x4e, 0x41, 0x4c, 0x54, 0x59, 0x5f, 0x53, 0x48, 0x4f, 0x4f, 0x54, 0x4f, 0x55, 0x54,
- 0x5f, 0x42, 0x52, 0x45, 0x41, 0x4b, 0x10, 0x0b, 0x12, 0x14, 0x0a, 0x10, 0x50, 0x45, 0x4e, 0x41,
- 0x4c, 0x54, 0x59, 0x5f, 0x53, 0x48, 0x4f, 0x4f, 0x54, 0x4f, 0x55, 0x54, 0x10, 0x0c, 0x12, 0x0d,
- 0x0a, 0x09, 0x50, 0x4f, 0x53, 0x54, 0x5f, 0x47, 0x41, 0x4d, 0x45, 0x10, 0x0d, 0x22, 0x96, 0x03,
- 0x0a, 0x07, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x12, 0x08, 0x0a, 0x04, 0x48, 0x41, 0x4c,
- 0x54, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x53, 0x54, 0x4f, 0x50, 0x10, 0x01, 0x12, 0x10, 0x0a,
- 0x0c, 0x4e, 0x4f, 0x52, 0x4d, 0x41, 0x4c, 0x5f, 0x53, 0x54, 0x41, 0x52, 0x54, 0x10, 0x02, 0x12,
- 0x0f, 0x0a, 0x0b, 0x46, 0x4f, 0x52, 0x43, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x52, 0x54, 0x10, 0x03,
- 0x12, 0x1a, 0x0a, 0x16, 0x50, 0x52, 0x45, 0x50, 0x41, 0x52, 0x45, 0x5f, 0x4b, 0x49, 0x43, 0x4b,
- 0x4f, 0x46, 0x46, 0x5f, 0x59, 0x45, 0x4c, 0x4c, 0x4f, 0x57, 0x10, 0x04, 0x12, 0x18, 0x0a, 0x14,
- 0x50, 0x52, 0x45, 0x50, 0x41, 0x52, 0x45, 0x5f, 0x4b, 0x49, 0x43, 0x4b, 0x4f, 0x46, 0x46, 0x5f,
- 0x42, 0x4c, 0x55, 0x45, 0x10, 0x05, 0x12, 0x1a, 0x0a, 0x16, 0x50, 0x52, 0x45, 0x50, 0x41, 0x52,
- 0x45, 0x5f, 0x50, 0x45, 0x4e, 0x41, 0x4c, 0x54, 0x59, 0x5f, 0x59, 0x45, 0x4c, 0x4c, 0x4f, 0x57,
- 0x10, 0x06, 0x12, 0x18, 0x0a, 0x14, 0x50, 0x52, 0x45, 0x50, 0x41, 0x52, 0x45, 0x5f, 0x50, 0x45,
- 0x4e, 0x41, 0x4c, 0x54, 0x59, 0x5f, 0x42, 0x4c, 0x55, 0x45, 0x10, 0x07, 0x12, 0x16, 0x0a, 0x12,
- 0x44, 0x49, 0x52, 0x45, 0x43, 0x54, 0x5f, 0x46, 0x52, 0x45, 0x45, 0x5f, 0x59, 0x45, 0x4c, 0x4c,
- 0x4f, 0x57, 0x10, 0x08, 0x12, 0x14, 0x0a, 0x10, 0x44, 0x49, 0x52, 0x45, 0x43, 0x54, 0x5f, 0x46,
- 0x52, 0x45, 0x45, 0x5f, 0x42, 0x4c, 0x55, 0x45, 0x10, 0x09, 0x12, 0x1c, 0x0a, 0x14, 0x49, 0x4e,
- 0x44, 0x49, 0x52, 0x45, 0x43, 0x54, 0x5f, 0x46, 0x52, 0x45, 0x45, 0x5f, 0x59, 0x45, 0x4c, 0x4c,
- 0x4f, 0x57, 0x10, 0x0a, 0x1a, 0x02, 0x08, 0x01, 0x12, 0x1a, 0x0a, 0x12, 0x49, 0x4e, 0x44, 0x49,
- 0x52, 0x45, 0x43, 0x54, 0x5f, 0x46, 0x52, 0x45, 0x45, 0x5f, 0x42, 0x4c, 0x55, 0x45, 0x10, 0x0b,
- 0x1a, 0x02, 0x08, 0x01, 0x12, 0x12, 0x0a, 0x0e, 0x54, 0x49, 0x4d, 0x45, 0x4f, 0x55, 0x54, 0x5f,
- 0x59, 0x45, 0x4c, 0x4c, 0x4f, 0x57, 0x10, 0x0c, 0x12, 0x10, 0x0a, 0x0c, 0x54, 0x49, 0x4d, 0x45,
- 0x4f, 0x55, 0x54, 0x5f, 0x42, 0x4c, 0x55, 0x45, 0x10, 0x0d, 0x12, 0x13, 0x0a, 0x0b, 0x47, 0x4f,
- 0x41, 0x4c, 0x5f, 0x59, 0x45, 0x4c, 0x4c, 0x4f, 0x57, 0x10, 0x0e, 0x1a, 0x02, 0x08, 0x01, 0x12,
- 0x11, 0x0a, 0x09, 0x47, 0x4f, 0x41, 0x4c, 0x5f, 0x42, 0x4c, 0x55, 0x45, 0x10, 0x0f, 0x1a, 0x02,
- 0x08, 0x01, 0x12, 0x19, 0x0a, 0x15, 0x42, 0x41, 0x4c, 0x4c, 0x5f, 0x50, 0x4c, 0x41, 0x43, 0x45,
- 0x4d, 0x45, 0x4e, 0x54, 0x5f, 0x59, 0x45, 0x4c, 0x4c, 0x4f, 0x57, 0x10, 0x10, 0x12, 0x17, 0x0a,
- 0x13, 0x42, 0x41, 0x4c, 0x4c, 0x5f, 0x50, 0x4c, 0x41, 0x43, 0x45, 0x4d, 0x45, 0x4e, 0x54, 0x5f,
- 0x42, 0x4c, 0x55, 0x45, 0x10, 0x11, 0x4a, 0x04, 0x08, 0x0b, 0x10, 0x0c, 0x4a, 0x04, 0x08, 0x0d,
- 0x10, 0x0e, 0x4a, 0x04, 0x08, 0x0e, 0x10, 0x0f, 0x22, 0x71, 0x0a, 0x16, 0x47, 0x61, 0x6d, 0x65,
- 0x45, 0x76, 0x65, 0x6e, 0x74, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x47, 0x72, 0x6f,
- 0x75, 0x70, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02,
- 0x69, 0x64, 0x12, 0x2b, 0x0a, 0x0b, 0x67, 0x61, 0x6d, 0x65, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74,
- 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x47, 0x61, 0x6d, 0x65, 0x45, 0x76,
- 0x65, 0x6e, 0x74, 0x52, 0x0a, 0x67, 0x61, 0x6d, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x12,
- 0x1a, 0x0a, 0x08, 0x61, 0x63, 0x63, 0x65, 0x70, 0x74, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28,
- 0x08, 0x52, 0x08, 0x61, 0x63, 0x63, 0x65, 0x70, 0x74, 0x65, 0x64, 0x2a, 0x54, 0x0a, 0x09, 0x4d,
- 0x61, 0x74, 0x63, 0x68, 0x54, 0x79, 0x70, 0x65, 0x12, 0x11, 0x0a, 0x0d, 0x55, 0x4e, 0x4b, 0x4e,
- 0x4f, 0x57, 0x4e, 0x5f, 0x4d, 0x41, 0x54, 0x43, 0x48, 0x10, 0x00, 0x12, 0x0f, 0x0a, 0x0b, 0x47,
- 0x52, 0x4f, 0x55, 0x50, 0x5f, 0x50, 0x48, 0x41, 0x53, 0x45, 0x10, 0x01, 0x12, 0x15, 0x0a, 0x11,
- 0x45, 0x4c, 0x49, 0x4d, 0x49, 0x4e, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x50, 0x48, 0x41, 0x53,
- 0x45, 0x10, 0x02, 0x12, 0x0c, 0x0a, 0x08, 0x46, 0x52, 0x49, 0x45, 0x4e, 0x44, 0x4c, 0x59, 0x10,
- 0x03, 0x42, 0x5b, 0x42, 0x18, 0x53, 0x73, 0x6c, 0x47, 0x63, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65,
- 0x65, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a,
- 0x3d, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x52, 0x6f, 0x62, 0x6f,
- 0x43, 0x75, 0x70, 0x2d, 0x53, 0x53, 0x4c, 0x2f, 0x73, 0x73, 0x6c, 0x2d, 0x67, 0x61, 0x6d, 0x65,
- 0x2d, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x2f, 0x69, 0x6e, 0x74, 0x65,
- 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x61, 0x70, 0x70, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65,
+ 0x4c, 0x65, 0x66, 0x74, 0x12, 0x29, 0x0a, 0x0a, 0x68, 0x75, 0x6c, 0x6c, 0x5f, 0x63, 0x6f, 0x6c,
+ 0x6f, 0x72, 0x18, 0x13, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0a, 0x2e, 0x48, 0x75, 0x6c, 0x6c, 0x43,
+ 0x6f, 0x6c, 0x6f, 0x72, 0x52, 0x09, 0x68, 0x75, 0x6c, 0x6c, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x1a,
+ 0x23, 0x0a, 0x05, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x0c, 0x0a, 0x01, 0x78, 0x18, 0x01, 0x20,
+ 0x02, 0x28, 0x02, 0x52, 0x01, 0x78, 0x12, 0x0c, 0x0a, 0x01, 0x79, 0x18, 0x02, 0x20, 0x02, 0x28,
+ 0x02, 0x52, 0x01, 0x79, 0x22, 0xd1, 0x02, 0x0a, 0x05, 0x53, 0x74, 0x61, 0x67, 0x65, 0x12, 0x19,
+ 0x0a, 0x15, 0x4e, 0x4f, 0x52, 0x4d, 0x41, 0x4c, 0x5f, 0x46, 0x49, 0x52, 0x53, 0x54, 0x5f, 0x48,
+ 0x41, 0x4c, 0x46, 0x5f, 0x50, 0x52, 0x45, 0x10, 0x00, 0x12, 0x15, 0x0a, 0x11, 0x4e, 0x4f, 0x52,
+ 0x4d, 0x41, 0x4c, 0x5f, 0x46, 0x49, 0x52, 0x53, 0x54, 0x5f, 0x48, 0x41, 0x4c, 0x46, 0x10, 0x01,
+ 0x12, 0x14, 0x0a, 0x10, 0x4e, 0x4f, 0x52, 0x4d, 0x41, 0x4c, 0x5f, 0x48, 0x41, 0x4c, 0x46, 0x5f,
+ 0x54, 0x49, 0x4d, 0x45, 0x10, 0x02, 0x12, 0x1a, 0x0a, 0x16, 0x4e, 0x4f, 0x52, 0x4d, 0x41, 0x4c,
+ 0x5f, 0x53, 0x45, 0x43, 0x4f, 0x4e, 0x44, 0x5f, 0x48, 0x41, 0x4c, 0x46, 0x5f, 0x50, 0x52, 0x45,
+ 0x10, 0x03, 0x12, 0x16, 0x0a, 0x12, 0x4e, 0x4f, 0x52, 0x4d, 0x41, 0x4c, 0x5f, 0x53, 0x45, 0x43,
+ 0x4f, 0x4e, 0x44, 0x5f, 0x48, 0x41, 0x4c, 0x46, 0x10, 0x04, 0x12, 0x14, 0x0a, 0x10, 0x45, 0x58,
+ 0x54, 0x52, 0x41, 0x5f, 0x54, 0x49, 0x4d, 0x45, 0x5f, 0x42, 0x52, 0x45, 0x41, 0x4b, 0x10, 0x05,
+ 0x12, 0x18, 0x0a, 0x14, 0x45, 0x58, 0x54, 0x52, 0x41, 0x5f, 0x46, 0x49, 0x52, 0x53, 0x54, 0x5f,
+ 0x48, 0x41, 0x4c, 0x46, 0x5f, 0x50, 0x52, 0x45, 0x10, 0x06, 0x12, 0x14, 0x0a, 0x10, 0x45, 0x58,
+ 0x54, 0x52, 0x41, 0x5f, 0x46, 0x49, 0x52, 0x53, 0x54, 0x5f, 0x48, 0x41, 0x4c, 0x46, 0x10, 0x07,
+ 0x12, 0x13, 0x0a, 0x0f, 0x45, 0x58, 0x54, 0x52, 0x41, 0x5f, 0x48, 0x41, 0x4c, 0x46, 0x5f, 0x54,
+ 0x49, 0x4d, 0x45, 0x10, 0x08, 0x12, 0x19, 0x0a, 0x15, 0x45, 0x58, 0x54, 0x52, 0x41, 0x5f, 0x53,
+ 0x45, 0x43, 0x4f, 0x4e, 0x44, 0x5f, 0x48, 0x41, 0x4c, 0x46, 0x5f, 0x50, 0x52, 0x45, 0x10, 0x09,
+ 0x12, 0x15, 0x0a, 0x11, 0x45, 0x58, 0x54, 0x52, 0x41, 0x5f, 0x53, 0x45, 0x43, 0x4f, 0x4e, 0x44,
+ 0x5f, 0x48, 0x41, 0x4c, 0x46, 0x10, 0x0a, 0x12, 0x1a, 0x0a, 0x16, 0x50, 0x45, 0x4e, 0x41, 0x4c,
+ 0x54, 0x59, 0x5f, 0x53, 0x48, 0x4f, 0x4f, 0x54, 0x4f, 0x55, 0x54, 0x5f, 0x42, 0x52, 0x45, 0x41,
+ 0x4b, 0x10, 0x0b, 0x12, 0x14, 0x0a, 0x10, 0x50, 0x45, 0x4e, 0x41, 0x4c, 0x54, 0x59, 0x5f, 0x53,
+ 0x48, 0x4f, 0x4f, 0x54, 0x4f, 0x55, 0x54, 0x10, 0x0c, 0x12, 0x0d, 0x0a, 0x09, 0x50, 0x4f, 0x53,
+ 0x54, 0x5f, 0x47, 0x41, 0x4d, 0x45, 0x10, 0x0d, 0x22, 0x96, 0x03, 0x0a, 0x07, 0x43, 0x6f, 0x6d,
+ 0x6d, 0x61, 0x6e, 0x64, 0x12, 0x08, 0x0a, 0x04, 0x48, 0x41, 0x4c, 0x54, 0x10, 0x00, 0x12, 0x08,
+ 0x0a, 0x04, 0x53, 0x54, 0x4f, 0x50, 0x10, 0x01, 0x12, 0x10, 0x0a, 0x0c, 0x4e, 0x4f, 0x52, 0x4d,
+ 0x41, 0x4c, 0x5f, 0x53, 0x54, 0x41, 0x52, 0x54, 0x10, 0x02, 0x12, 0x0f, 0x0a, 0x0b, 0x46, 0x4f,
+ 0x52, 0x43, 0x45, 0x5f, 0x53, 0x54, 0x41, 0x52, 0x54, 0x10, 0x03, 0x12, 0x1a, 0x0a, 0x16, 0x50,
+ 0x52, 0x45, 0x50, 0x41, 0x52, 0x45, 0x5f, 0x4b, 0x49, 0x43, 0x4b, 0x4f, 0x46, 0x46, 0x5f, 0x59,
+ 0x45, 0x4c, 0x4c, 0x4f, 0x57, 0x10, 0x04, 0x12, 0x18, 0x0a, 0x14, 0x50, 0x52, 0x45, 0x50, 0x41,
+ 0x52, 0x45, 0x5f, 0x4b, 0x49, 0x43, 0x4b, 0x4f, 0x46, 0x46, 0x5f, 0x42, 0x4c, 0x55, 0x45, 0x10,
+ 0x05, 0x12, 0x1a, 0x0a, 0x16, 0x50, 0x52, 0x45, 0x50, 0x41, 0x52, 0x45, 0x5f, 0x50, 0x45, 0x4e,
+ 0x41, 0x4c, 0x54, 0x59, 0x5f, 0x59, 0x45, 0x4c, 0x4c, 0x4f, 0x57, 0x10, 0x06, 0x12, 0x18, 0x0a,
+ 0x14, 0x50, 0x52, 0x45, 0x50, 0x41, 0x52, 0x45, 0x5f, 0x50, 0x45, 0x4e, 0x41, 0x4c, 0x54, 0x59,
+ 0x5f, 0x42, 0x4c, 0x55, 0x45, 0x10, 0x07, 0x12, 0x16, 0x0a, 0x12, 0x44, 0x49, 0x52, 0x45, 0x43,
+ 0x54, 0x5f, 0x46, 0x52, 0x45, 0x45, 0x5f, 0x59, 0x45, 0x4c, 0x4c, 0x4f, 0x57, 0x10, 0x08, 0x12,
+ 0x14, 0x0a, 0x10, 0x44, 0x49, 0x52, 0x45, 0x43, 0x54, 0x5f, 0x46, 0x52, 0x45, 0x45, 0x5f, 0x42,
+ 0x4c, 0x55, 0x45, 0x10, 0x09, 0x12, 0x1c, 0x0a, 0x14, 0x49, 0x4e, 0x44, 0x49, 0x52, 0x45, 0x43,
+ 0x54, 0x5f, 0x46, 0x52, 0x45, 0x45, 0x5f, 0x59, 0x45, 0x4c, 0x4c, 0x4f, 0x57, 0x10, 0x0a, 0x1a,
+ 0x02, 0x08, 0x01, 0x12, 0x1a, 0x0a, 0x12, 0x49, 0x4e, 0x44, 0x49, 0x52, 0x45, 0x43, 0x54, 0x5f,
+ 0x46, 0x52, 0x45, 0x45, 0x5f, 0x42, 0x4c, 0x55, 0x45, 0x10, 0x0b, 0x1a, 0x02, 0x08, 0x01, 0x12,
+ 0x12, 0x0a, 0x0e, 0x54, 0x49, 0x4d, 0x45, 0x4f, 0x55, 0x54, 0x5f, 0x59, 0x45, 0x4c, 0x4c, 0x4f,
+ 0x57, 0x10, 0x0c, 0x12, 0x10, 0x0a, 0x0c, 0x54, 0x49, 0x4d, 0x45, 0x4f, 0x55, 0x54, 0x5f, 0x42,
+ 0x4c, 0x55, 0x45, 0x10, 0x0d, 0x12, 0x13, 0x0a, 0x0b, 0x47, 0x4f, 0x41, 0x4c, 0x5f, 0x59, 0x45,
+ 0x4c, 0x4c, 0x4f, 0x57, 0x10, 0x0e, 0x1a, 0x02, 0x08, 0x01, 0x12, 0x11, 0x0a, 0x09, 0x47, 0x4f,
+ 0x41, 0x4c, 0x5f, 0x42, 0x4c, 0x55, 0x45, 0x10, 0x0f, 0x1a, 0x02, 0x08, 0x01, 0x12, 0x19, 0x0a,
+ 0x15, 0x42, 0x41, 0x4c, 0x4c, 0x5f, 0x50, 0x4c, 0x41, 0x43, 0x45, 0x4d, 0x45, 0x4e, 0x54, 0x5f,
+ 0x59, 0x45, 0x4c, 0x4c, 0x4f, 0x57, 0x10, 0x10, 0x12, 0x17, 0x0a, 0x13, 0x42, 0x41, 0x4c, 0x4c,
+ 0x5f, 0x50, 0x4c, 0x41, 0x43, 0x45, 0x4d, 0x45, 0x4e, 0x54, 0x5f, 0x42, 0x4c, 0x55, 0x45, 0x10,
+ 0x11, 0x4a, 0x04, 0x08, 0x0b, 0x10, 0x0c, 0x4a, 0x04, 0x08, 0x0d, 0x10, 0x0e, 0x4a, 0x04, 0x08,
+ 0x0e, 0x10, 0x0f, 0x22, 0x71, 0x0a, 0x16, 0x47, 0x61, 0x6d, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74,
+ 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x12, 0x0e, 0x0a,
+ 0x02, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x2b, 0x0a,
+ 0x0b, 0x67, 0x61, 0x6d, 0x65, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03,
+ 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x47, 0x61, 0x6d, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x0a,
+ 0x67, 0x61, 0x6d, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x61, 0x63,
+ 0x63, 0x65, 0x70, 0x74, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x61, 0x63,
+ 0x63, 0x65, 0x70, 0x74, 0x65, 0x64, 0x2a, 0x54, 0x0a, 0x09, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x54,
+ 0x79, 0x70, 0x65, 0x12, 0x11, 0x0a, 0x0d, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x5f, 0x4d,
+ 0x41, 0x54, 0x43, 0x48, 0x10, 0x00, 0x12, 0x0f, 0x0a, 0x0b, 0x47, 0x52, 0x4f, 0x55, 0x50, 0x5f,
+ 0x50, 0x48, 0x41, 0x53, 0x45, 0x10, 0x01, 0x12, 0x15, 0x0a, 0x11, 0x45, 0x4c, 0x49, 0x4d, 0x49,
+ 0x4e, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x50, 0x48, 0x41, 0x53, 0x45, 0x10, 0x02, 0x12, 0x0c,
+ 0x0a, 0x08, 0x46, 0x52, 0x49, 0x45, 0x4e, 0x44, 0x4c, 0x59, 0x10, 0x03, 0x2a, 0x4e, 0x0a, 0x09,
+ 0x48, 0x75, 0x6c, 0x6c, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x12, 0x16, 0x0a, 0x12, 0x48, 0x55, 0x4c,
+ 0x4c, 0x5f, 0x43, 0x4f, 0x4c, 0x4f, 0x52, 0x5f, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10,
+ 0x00, 0x12, 0x13, 0x0a, 0x0f, 0x48, 0x55, 0x4c, 0x4c, 0x5f, 0x43, 0x4f, 0x4c, 0x4f, 0x52, 0x5f,
+ 0x44, 0x41, 0x52, 0x4b, 0x10, 0x01, 0x12, 0x14, 0x0a, 0x10, 0x48, 0x55, 0x4c, 0x4c, 0x5f, 0x43,
+ 0x4f, 0x4c, 0x4f, 0x52, 0x5f, 0x4c, 0x49, 0x47, 0x48, 0x54, 0x10, 0x02, 0x42, 0x5b, 0x42, 0x18,
+ 0x53, 0x73, 0x6c, 0x47, 0x63, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x65, 0x4d, 0x65, 0x73, 0x73,
+ 0x61, 0x67, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x3d, 0x67, 0x69, 0x74, 0x68,
+ 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x52, 0x6f, 0x62, 0x6f, 0x43, 0x75, 0x70, 0x2d, 0x53,
+ 0x53, 0x4c, 0x2f, 0x73, 0x73, 0x6c, 0x2d, 0x67, 0x61, 0x6d, 0x65, 0x2d, 0x63, 0x6f, 0x6e, 0x74,
+ 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f,
+ 0x61, 0x70, 0x70, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65,
}
var (
@@ -1051,34 +1131,36 @@ func file_state_ssl_gc_referee_message_proto_rawDescGZIP() []byte {
return file_state_ssl_gc_referee_message_proto_rawDescData
}
-var file_state_ssl_gc_referee_message_proto_enumTypes = make([]protoimpl.EnumInfo, 3)
+var file_state_ssl_gc_referee_message_proto_enumTypes = make([]protoimpl.EnumInfo, 4)
var file_state_ssl_gc_referee_message_proto_msgTypes = make([]protoimpl.MessageInfo, 4)
var file_state_ssl_gc_referee_message_proto_goTypes = []any{
(MatchType)(0), // 0: MatchType
- (Referee_Stage)(0), // 1: Referee.Stage
- (Referee_Command)(0), // 2: Referee.Command
- (*Referee)(nil), // 3: Referee
- (*GameEventProposalGroup)(nil), // 4: GameEventProposalGroup
- (*Referee_TeamInfo)(nil), // 5: Referee.TeamInfo
- (*Referee_Point)(nil), // 6: Referee.Point
- (*GameEvent)(nil), // 7: GameEvent
+ (HullColor)(0), // 1: HullColor
+ (Referee_Stage)(0), // 2: Referee.Stage
+ (Referee_Command)(0), // 3: Referee.Command
+ (*Referee)(nil), // 4: Referee
+ (*GameEventProposalGroup)(nil), // 5: GameEventProposalGroup
+ (*Referee_TeamInfo)(nil), // 6: Referee.TeamInfo
+ (*Referee_Point)(nil), // 7: Referee.Point
+ (*GameEvent)(nil), // 8: GameEvent
}
var file_state_ssl_gc_referee_message_proto_depIdxs = []int32{
0, // 0: Referee.match_type:type_name -> MatchType
- 1, // 1: Referee.stage:type_name -> Referee.Stage
- 2, // 2: Referee.command:type_name -> Referee.Command
- 5, // 3: Referee.yellow:type_name -> Referee.TeamInfo
- 5, // 4: Referee.blue:type_name -> Referee.TeamInfo
- 6, // 5: Referee.designated_position:type_name -> Referee.Point
- 2, // 6: Referee.next_command:type_name -> Referee.Command
- 7, // 7: Referee.game_events:type_name -> GameEvent
- 4, // 8: Referee.game_event_proposals:type_name -> GameEventProposalGroup
- 7, // 9: GameEventProposalGroup.game_events:type_name -> GameEvent
- 10, // [10:10] is the sub-list for method output_type
- 10, // [10:10] is the sub-list for method input_type
- 10, // [10:10] is the sub-list for extension type_name
- 10, // [10:10] is the sub-list for extension extendee
- 0, // [0:10] is the sub-list for field type_name
+ 2, // 1: Referee.stage:type_name -> Referee.Stage
+ 3, // 2: Referee.command:type_name -> Referee.Command
+ 6, // 3: Referee.yellow:type_name -> Referee.TeamInfo
+ 6, // 4: Referee.blue:type_name -> Referee.TeamInfo
+ 7, // 5: Referee.designated_position:type_name -> Referee.Point
+ 3, // 6: Referee.next_command:type_name -> Referee.Command
+ 8, // 7: Referee.game_events:type_name -> GameEvent
+ 5, // 8: Referee.game_event_proposals:type_name -> GameEventProposalGroup
+ 8, // 9: GameEventProposalGroup.game_events:type_name -> GameEvent
+ 1, // 10: Referee.TeamInfo.hull_color:type_name -> HullColor
+ 11, // [11:11] is the sub-list for method output_type
+ 11, // [11:11] is the sub-list for method input_type
+ 11, // [11:11] is the sub-list for extension type_name
+ 11, // [11:11] is the sub-list for extension extendee
+ 0, // [0:11] is the sub-list for field type_name
}
func init() { file_state_ssl_gc_referee_message_proto_init() }
@@ -1092,7 +1174,7 @@ func file_state_ssl_gc_referee_message_proto_init() {
File: protoimpl.DescBuilder{
GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
RawDescriptor: file_state_ssl_gc_referee_message_proto_rawDesc,
- NumEnums: 3,
+ NumEnums: 4,
NumMessages: 4,
NumExtensions: 0,
NumServices: 0,
diff --git a/internal/app/state/ssl_gc_state.pb.go b/internal/app/state/ssl_gc_state.pb.go
index 704807a8..bf255f7a 100644
--- a/internal/app/state/ssl_gc_state.pb.go
+++ b/internal/app/state/ssl_gc_state.pb.go
@@ -595,6 +595,7 @@ type TeamInfo struct {
BotSubstitutionAllowed *bool `protobuf:"varint,18,opt,name=bot_substitution_allowed,json=botSubstitutionAllowed" json:"bot_substitution_allowed,omitempty"`
BotSubstitutionsLeft *int32 `protobuf:"varint,19,opt,name=bot_substitutions_left,json=botSubstitutionsLeft" json:"bot_substitutions_left,omitempty"`
BotSubstitutionTimeLeft *durationpb.Duration `protobuf:"bytes,20,opt,name=bot_substitution_time_left,json=botSubstitutionTimeLeft" json:"bot_substitution_time_left,omitempty"`
+ HullColor *HullColor `protobuf:"varint,21,opt,name=hull_color,json=hullColor,enum=HullColor" json:"hull_color,omitempty"`
unknownFields protoimpl.UnknownFields
sizeCache protoimpl.SizeCache
}
@@ -769,6 +770,13 @@ func (x *TeamInfo) GetBotSubstitutionTimeLeft() *durationpb.Duration {
return nil
}
+func (x *TeamInfo) GetHullColor() HullColor {
+ if x != nil && x.HullColor != nil {
+ return *x.HullColor
+ }
+ return HullColor_HULL_COLOR_UNKNOWN
+}
+
type State struct {
state protoimpl.MessageState `protogen:"open.v1"`
Stage *Referee_Stage `protobuf:"varint,1,opt,name=stage,enum=Referee_Stage" json:"stage,omitempty"`
@@ -1092,7 +1100,7 @@ var file_state_ssl_gc_state_proto_rawDesc = []byte{
0x32, 0x09, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x52, 0x09, 0x70, 0x72, 0x6f,
0x70, 0x6f, 0x73, 0x61, 0x6c, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x61, 0x63, 0x63, 0x65, 0x70, 0x74,
0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x61, 0x63, 0x63, 0x65, 0x70, 0x74,
- 0x65, 0x64, 0x4a, 0x04, 0x08, 0x03, 0x10, 0x04, 0x22, 0xb2, 0x08, 0x0a, 0x08, 0x54, 0x65, 0x61,
+ 0x65, 0x64, 0x4a, 0x04, 0x08, 0x03, 0x10, 0x04, 0x22, 0xdd, 0x08, 0x0a, 0x08, 0x54, 0x65, 0x61,
0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20,
0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x67, 0x6f, 0x61,
0x6c, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x67, 0x6f, 0x61, 0x6c, 0x73, 0x12,
@@ -1159,95 +1167,97 @@ var file_state_ssl_gc_state_proto_rawDesc = []byte{
0x65, 0x66, 0x74, 0x18, 0x14, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67,
0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61,
0x74, 0x69, 0x6f, 0x6e, 0x52, 0x17, 0x62, 0x6f, 0x74, 0x53, 0x75, 0x62, 0x73, 0x74, 0x69, 0x74,
- 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x4c, 0x65, 0x66, 0x74, 0x22, 0xcf, 0x08,
- 0x0a, 0x05, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x24, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x67, 0x65,
- 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0e, 0x2e, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x65,
- 0x2e, 0x53, 0x74, 0x61, 0x67, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x67, 0x65, 0x12, 0x22, 0x0a,
- 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x08,
- 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e,
- 0x64, 0x12, 0x29, 0x0a, 0x0a, 0x67, 0x61, 0x6d, 0x65, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18,
- 0x13, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x47, 0x61, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x74,
- 0x65, 0x52, 0x09, 0x67, 0x61, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x47, 0x0a, 0x12,
- 0x73, 0x74, 0x61, 0x67, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x65, 0x6c, 0x61, 0x70, 0x73,
- 0x65, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c,
- 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74,
- 0x69, 0x6f, 0x6e, 0x52, 0x10, 0x73, 0x74, 0x61, 0x67, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x45, 0x6c,
- 0x61, 0x70, 0x73, 0x65, 0x64, 0x12, 0x41, 0x0a, 0x0f, 0x73, 0x74, 0x61, 0x67, 0x65, 0x5f, 0x74,
- 0x69, 0x6d, 0x65, 0x5f, 0x6c, 0x65, 0x66, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19,
- 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66,
- 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0d, 0x73, 0x74, 0x61, 0x67, 0x65,
- 0x54, 0x69, 0x6d, 0x65, 0x4c, 0x65, 0x66, 0x74, 0x12, 0x44, 0x0a, 0x10, 0x6d, 0x61, 0x74, 0x63,
- 0x68, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x06, 0x20, 0x01,
- 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74,
- 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0e,
- 0x6d, 0x61, 0x74, 0x63, 0x68, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x72, 0x74, 0x12, 0x34,
- 0x0a, 0x0a, 0x74, 0x65, 0x61, 0x6d, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x08, 0x20, 0x03,
- 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x54, 0x65, 0x61, 0x6d, 0x53,
- 0x74, 0x61, 0x74, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x09, 0x74, 0x65, 0x61, 0x6d, 0x53,
- 0x74, 0x61, 0x74, 0x65, 0x12, 0x2d, 0x0a, 0x0d, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x6d, 0x65, 0x6e,
- 0x74, 0x5f, 0x70, 0x6f, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x08, 0x2e, 0x56, 0x65,
- 0x63, 0x74, 0x6f, 0x72, 0x32, 0x52, 0x0c, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x6d, 0x65, 0x6e, 0x74,
- 0x50, 0x6f, 0x73, 0x12, 0x2b, 0x0a, 0x0c, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x63, 0x6f, 0x6d, 0x6d,
- 0x61, 0x6e, 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x08, 0x2e, 0x43, 0x6f, 0x6d, 0x6d,
- 0x61, 0x6e, 0x64, 0x52, 0x0b, 0x6e, 0x65, 0x78, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64,
- 0x12, 0x5c, 0x0a, 0x1d, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x61, 0x63, 0x74, 0x69,
- 0x6f, 0x6e, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x72, 0x65, 0x6d, 0x61, 0x69, 0x6e, 0x69, 0x6e,
- 0x67, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65,
- 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69,
- 0x6f, 0x6e, 0x52, 0x1a, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x41, 0x63, 0x74, 0x69, 0x6f,
- 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x52, 0x65, 0x6d, 0x61, 0x69, 0x6e, 0x69, 0x6e, 0x67, 0x12, 0x2b,
- 0x0a, 0x0b, 0x67, 0x61, 0x6d, 0x65, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x0d, 0x20,
- 0x03, 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x47, 0x61, 0x6d, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52,
- 0x0a, 0x67, 0x61, 0x6d, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x37, 0x0a, 0x0f, 0x70,
- 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x18, 0x0e,
- 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x47,
- 0x72, 0x6f, 0x75, 0x70, 0x52, 0x0e, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x47, 0x72,
- 0x6f, 0x75, 0x70, 0x73, 0x12, 0x25, 0x0a, 0x08, 0x64, 0x69, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e,
- 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x09, 0x2e, 0x44, 0x69, 0x76, 0x69, 0x73, 0x69, 0x6f,
- 0x6e, 0x52, 0x08, 0x64, 0x69, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x33, 0x0a, 0x12, 0x66,
- 0x69, 0x72, 0x73, 0x74, 0x5f, 0x6b, 0x69, 0x63, 0x6b, 0x6f, 0x66, 0x66, 0x5f, 0x74, 0x65, 0x61,
- 0x6d, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x05, 0x2e, 0x54, 0x65, 0x61, 0x6d, 0x52, 0x10,
- 0x66, 0x69, 0x72, 0x73, 0x74, 0x4b, 0x69, 0x63, 0x6b, 0x6f, 0x66, 0x66, 0x54, 0x65, 0x61, 0x6d,
- 0x12, 0x29, 0x0a, 0x0a, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x12,
- 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0a, 0x2e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x54, 0x79, 0x70, 0x65,
- 0x52, 0x09, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x54, 0x79, 0x70, 0x65, 0x12, 0x4a, 0x0a, 0x13, 0x72,
- 0x65, 0x61, 0x64, 0x79, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x69, 0x6e, 0x75, 0x65, 0x5f, 0x74, 0x69,
- 0x6d, 0x65, 0x18, 0x14, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c,
- 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73,
- 0x74, 0x61, 0x6d, 0x70, 0x52, 0x11, 0x72, 0x65, 0x61, 0x64, 0x79, 0x43, 0x6f, 0x6e, 0x74, 0x69,
- 0x6e, 0x75, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x12, 0x35, 0x0a, 0x0e, 0x73, 0x68, 0x6f, 0x6f, 0x74,
- 0x6f, 0x75, 0x74, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x15, 0x20, 0x01, 0x28, 0x0b, 0x32,
- 0x0e, 0x2e, 0x53, 0x68, 0x6f, 0x6f, 0x74, 0x6f, 0x75, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52,
- 0x0d, 0x73, 0x68, 0x6f, 0x6f, 0x74, 0x6f, 0x75, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x25,
- 0x0a, 0x0e, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65,
- 0x18, 0x16, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x4d, 0x65,
- 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x29, 0x0a, 0x11, 0x6d, 0x61, 0x78, 0x5f, 0x62, 0x6f, 0x74,
- 0x73, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x74, 0x65, 0x61, 0x6d, 0x18, 0x17, 0x20, 0x01, 0x28, 0x05,
- 0x52, 0x0e, 0x6d, 0x61, 0x78, 0x42, 0x6f, 0x74, 0x73, 0x50, 0x65, 0x72, 0x54, 0x65, 0x61, 0x6d,
- 0x1a, 0x47, 0x0a, 0x0e, 0x54, 0x65, 0x61, 0x6d, 0x53, 0x74, 0x61, 0x74, 0x65, 0x45, 0x6e, 0x74,
- 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
- 0x03, 0x6b, 0x65, 0x79, 0x12, 0x1f, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20,
- 0x01, 0x28, 0x0b, 0x32, 0x09, 0x2e, 0x54, 0x65, 0x61, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x05,
- 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x4a, 0x04, 0x08, 0x10, 0x10, 0x11, 0x22,
- 0xcc, 0x01, 0x0a, 0x0d, 0x53, 0x68, 0x6f, 0x6f, 0x74, 0x6f, 0x75, 0x74, 0x53, 0x74, 0x61, 0x74,
- 0x65, 0x12, 0x22, 0x0a, 0x09, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x74, 0x65, 0x61, 0x6d, 0x18, 0x01,
- 0x20, 0x01, 0x28, 0x0e, 0x32, 0x05, 0x2e, 0x54, 0x65, 0x61, 0x6d, 0x52, 0x08, 0x6e, 0x65, 0x78,
- 0x74, 0x54, 0x65, 0x61, 0x6d, 0x12, 0x52, 0x0a, 0x12, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x5f,
- 0x6f, 0x66, 0x5f, 0x61, 0x74, 0x74, 0x65, 0x6d, 0x70, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28,
- 0x0b, 0x32, 0x24, 0x2e, 0x53, 0x68, 0x6f, 0x6f, 0x74, 0x6f, 0x75, 0x74, 0x53, 0x74, 0x61, 0x74,
- 0x65, 0x2e, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x4f, 0x66, 0x41, 0x74, 0x74, 0x65, 0x6d, 0x70,
- 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x10, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x4f,
- 0x66, 0x41, 0x74, 0x74, 0x65, 0x6d, 0x70, 0x74, 0x73, 0x1a, 0x43, 0x0a, 0x15, 0x4e, 0x75, 0x6d,
+ 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x4c, 0x65, 0x66, 0x74, 0x12, 0x29, 0x0a,
+ 0x0a, 0x68, 0x75, 0x6c, 0x6c, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x18, 0x15, 0x20, 0x01, 0x28,
+ 0x0e, 0x32, 0x0a, 0x2e, 0x48, 0x75, 0x6c, 0x6c, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x52, 0x09, 0x68,
+ 0x75, 0x6c, 0x6c, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x22, 0xcf, 0x08, 0x0a, 0x05, 0x53, 0x74, 0x61,
+ 0x74, 0x65, 0x12, 0x24, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28,
+ 0x0e, 0x32, 0x0e, 0x2e, 0x52, 0x65, 0x66, 0x65, 0x72, 0x65, 0x65, 0x2e, 0x53, 0x74, 0x61, 0x67,
+ 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x67, 0x65, 0x12, 0x22, 0x0a, 0x07, 0x63, 0x6f, 0x6d, 0x6d,
+ 0x61, 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x08, 0x2e, 0x43, 0x6f, 0x6d, 0x6d,
+ 0x61, 0x6e, 0x64, 0x52, 0x07, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x12, 0x29, 0x0a, 0x0a,
+ 0x67, 0x61, 0x6d, 0x65, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x13, 0x20, 0x01, 0x28, 0x0b,
+ 0x32, 0x0a, 0x2e, 0x47, 0x61, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x09, 0x67, 0x61,
+ 0x6d, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x47, 0x0a, 0x12, 0x73, 0x74, 0x61, 0x67, 0x65,
+ 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x65, 0x6c, 0x61, 0x70, 0x73, 0x65, 0x64, 0x18, 0x04, 0x20,
+ 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f,
+ 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x10,
+ 0x73, 0x74, 0x61, 0x67, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x45, 0x6c, 0x61, 0x70, 0x73, 0x65, 0x64,
+ 0x12, 0x41, 0x0a, 0x0f, 0x73, 0x74, 0x61, 0x67, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x5f, 0x6c,
+ 0x65, 0x66, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67,
+ 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61,
+ 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0d, 0x73, 0x74, 0x61, 0x67, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x4c,
+ 0x65, 0x66, 0x74, 0x12, 0x44, 0x0a, 0x10, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x5f, 0x74, 0x69, 0x6d,
+ 0x65, 0x5f, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e,
+ 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e,
+ 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0e, 0x6d, 0x61, 0x74, 0x63, 0x68,
+ 0x54, 0x69, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x72, 0x74, 0x12, 0x34, 0x0a, 0x0a, 0x74, 0x65, 0x61,
+ 0x6d, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e,
+ 0x53, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x54, 0x65, 0x61, 0x6d, 0x53, 0x74, 0x61, 0x74, 0x65, 0x45,
+ 0x6e, 0x74, 0x72, 0x79, 0x52, 0x09, 0x74, 0x65, 0x61, 0x6d, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12,
+ 0x2d, 0x0a, 0x0d, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x70, 0x6f, 0x73,
+ 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x08, 0x2e, 0x56, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x32,
+ 0x52, 0x0c, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x50, 0x6f, 0x73, 0x12, 0x2b,
+ 0x0a, 0x0c, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x18, 0x0a,
+ 0x20, 0x01, 0x28, 0x0b, 0x32, 0x08, 0x2e, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x52, 0x0b,
+ 0x6e, 0x65, 0x78, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x61, 0x6e, 0x64, 0x12, 0x5c, 0x0a, 0x1d, 0x63,
+ 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x5f, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x69,
+ 0x6d, 0x65, 0x5f, 0x72, 0x65, 0x6d, 0x61, 0x69, 0x6e, 0x69, 0x6e, 0x67, 0x18, 0x0c, 0x20, 0x01,
+ 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74,
+ 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x1a, 0x63,
+ 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x69, 0x6d, 0x65,
+ 0x52, 0x65, 0x6d, 0x61, 0x69, 0x6e, 0x69, 0x6e, 0x67, 0x12, 0x2b, 0x0a, 0x0b, 0x67, 0x61, 0x6d,
+ 0x65, 0x5f, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x0d, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0a,
+ 0x2e, 0x47, 0x61, 0x6d, 0x65, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x52, 0x0a, 0x67, 0x61, 0x6d, 0x65,
+ 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x37, 0x0a, 0x0f, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73,
+ 0x61, 0x6c, 0x5f, 0x67, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x18, 0x0e, 0x20, 0x03, 0x28, 0x0b, 0x32,
+ 0x0e, 0x2e, 0x50, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52,
+ 0x0e, 0x70, 0x72, 0x6f, 0x70, 0x6f, 0x73, 0x61, 0x6c, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x73, 0x12,
+ 0x25, 0x0a, 0x08, 0x64, 0x69, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x0f, 0x20, 0x01, 0x28,
+ 0x0e, 0x32, 0x09, 0x2e, 0x44, 0x69, 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x08, 0x64, 0x69,
+ 0x76, 0x69, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x33, 0x0a, 0x12, 0x66, 0x69, 0x72, 0x73, 0x74, 0x5f,
+ 0x6b, 0x69, 0x63, 0x6b, 0x6f, 0x66, 0x66, 0x5f, 0x74, 0x65, 0x61, 0x6d, 0x18, 0x11, 0x20, 0x01,
+ 0x28, 0x0e, 0x32, 0x05, 0x2e, 0x54, 0x65, 0x61, 0x6d, 0x52, 0x10, 0x66, 0x69, 0x72, 0x73, 0x74,
+ 0x4b, 0x69, 0x63, 0x6b, 0x6f, 0x66, 0x66, 0x54, 0x65, 0x61, 0x6d, 0x12, 0x29, 0x0a, 0x0a, 0x6d,
+ 0x61, 0x74, 0x63, 0x68, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x12, 0x20, 0x01, 0x28, 0x0e, 0x32,
+ 0x0a, 0x2e, 0x4d, 0x61, 0x74, 0x63, 0x68, 0x54, 0x79, 0x70, 0x65, 0x52, 0x09, 0x6d, 0x61, 0x74,
+ 0x63, 0x68, 0x54, 0x79, 0x70, 0x65, 0x12, 0x4a, 0x0a, 0x13, 0x72, 0x65, 0x61, 0x64, 0x79, 0x5f,
+ 0x63, 0x6f, 0x6e, 0x74, 0x69, 0x6e, 0x75, 0x65, 0x5f, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x14, 0x20,
+ 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f,
+ 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52,
+ 0x11, 0x72, 0x65, 0x61, 0x64, 0x79, 0x43, 0x6f, 0x6e, 0x74, 0x69, 0x6e, 0x75, 0x65, 0x54, 0x69,
+ 0x6d, 0x65, 0x12, 0x35, 0x0a, 0x0e, 0x73, 0x68, 0x6f, 0x6f, 0x74, 0x6f, 0x75, 0x74, 0x5f, 0x73,
+ 0x74, 0x61, 0x74, 0x65, 0x18, 0x15, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x53, 0x68, 0x6f,
+ 0x6f, 0x74, 0x6f, 0x75, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x0d, 0x73, 0x68, 0x6f, 0x6f,
+ 0x74, 0x6f, 0x75, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x73, 0x74, 0x61,
+ 0x74, 0x75, 0x73, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x16, 0x20, 0x01, 0x28,
+ 0x09, 0x52, 0x0d, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65,
+ 0x12, 0x29, 0x0a, 0x11, 0x6d, 0x61, 0x78, 0x5f, 0x62, 0x6f, 0x74, 0x73, 0x5f, 0x70, 0x65, 0x72,
+ 0x5f, 0x74, 0x65, 0x61, 0x6d, 0x18, 0x17, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0e, 0x6d, 0x61, 0x78,
+ 0x42, 0x6f, 0x74, 0x73, 0x50, 0x65, 0x72, 0x54, 0x65, 0x61, 0x6d, 0x1a, 0x47, 0x0a, 0x0e, 0x54,
+ 0x65, 0x61, 0x6d, 0x53, 0x74, 0x61, 0x74, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a,
+ 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12,
+ 0x1f, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x09,
+ 0x2e, 0x54, 0x65, 0x61, 0x6d, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65,
+ 0x3a, 0x02, 0x38, 0x01, 0x4a, 0x04, 0x08, 0x10, 0x10, 0x11, 0x22, 0xcc, 0x01, 0x0a, 0x0d, 0x53,
+ 0x68, 0x6f, 0x6f, 0x74, 0x6f, 0x75, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x22, 0x0a, 0x09,
+ 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x74, 0x65, 0x61, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32,
+ 0x05, 0x2e, 0x54, 0x65, 0x61, 0x6d, 0x52, 0x08, 0x6e, 0x65, 0x78, 0x74, 0x54, 0x65, 0x61, 0x6d,
+ 0x12, 0x52, 0x0a, 0x12, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x6f, 0x66, 0x5f, 0x61, 0x74,
+ 0x74, 0x65, 0x6d, 0x70, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x53,
+ 0x68, 0x6f, 0x6f, 0x74, 0x6f, 0x75, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x4e, 0x75, 0x6d,
0x62, 0x65, 0x72, 0x4f, 0x66, 0x41, 0x74, 0x74, 0x65, 0x6d, 0x70, 0x74, 0x73, 0x45, 0x6e, 0x74,
- 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
- 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20,
- 0x01, 0x28, 0x05, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x42, 0x52,
- 0x42, 0x0f, 0x53, 0x73, 0x6c, 0x47, 0x63, 0x53, 0x74, 0x61, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x74,
- 0x6f, 0x50, 0x01, 0x5a, 0x3d, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f,
- 0x52, 0x6f, 0x62, 0x6f, 0x43, 0x75, 0x70, 0x2d, 0x53, 0x53, 0x4c, 0x2f, 0x73, 0x73, 0x6c, 0x2d,
- 0x67, 0x61, 0x6d, 0x65, 0x2d, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x2f,
- 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x61, 0x70, 0x70, 0x2f, 0x73, 0x74, 0x61,
- 0x74, 0x65,
+ 0x72, 0x79, 0x52, 0x10, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x4f, 0x66, 0x41, 0x74, 0x74, 0x65,
+ 0x6d, 0x70, 0x74, 0x73, 0x1a, 0x43, 0x0a, 0x15, 0x4e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x4f, 0x66,
+ 0x41, 0x74, 0x74, 0x65, 0x6d, 0x70, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a,
+ 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12,
+ 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05,
+ 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x42, 0x52, 0x42, 0x0f, 0x53, 0x73, 0x6c,
+ 0x47, 0x63, 0x53, 0x74, 0x61, 0x74, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x3d,
+ 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x52, 0x6f, 0x62, 0x6f, 0x43,
+ 0x75, 0x70, 0x2d, 0x53, 0x53, 0x4c, 0x2f, 0x73, 0x73, 0x6c, 0x2d, 0x67, 0x61, 0x6d, 0x65, 0x2d,
+ 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72,
+ 0x6e, 0x61, 0x6c, 0x2f, 0x61, 0x70, 0x70, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65,
}
var (
@@ -1283,10 +1293,11 @@ var file_state_ssl_gc_state_proto_goTypes = []any{
(*durationpb.Duration)(nil), // 15: google.protobuf.Duration
(*timestamppb.Timestamp)(nil), // 16: google.protobuf.Timestamp
(Team)(0), // 17: Team
- (Referee_Stage)(0), // 18: Referee.Stage
- (*geom.Vector2)(nil), // 19: Vector2
- (Division)(0), // 20: Division
- (MatchType)(0), // 21: MatchType
+ (HullColor)(0), // 18: HullColor
+ (Referee_Stage)(0), // 19: Referee.Stage
+ (*geom.Vector2)(nil), // 20: Vector2
+ (Division)(0), // 21: Division
+ (MatchType)(0), // 22: MatchType
}
var file_state_ssl_gc_state_proto_depIdxs = []int32{
14, // 0: YellowCard.caused_by_game_event:type_name -> GameEvent
@@ -1309,31 +1320,32 @@ var file_state_ssl_gc_state_proto_depIdxs = []int32{
16, // 17: TeamInfo.requests_timeout_since:type_name -> google.protobuf.Timestamp
16, // 18: TeamInfo.requests_emergency_stop_since:type_name -> google.protobuf.Timestamp
15, // 19: TeamInfo.bot_substitution_time_left:type_name -> google.protobuf.Duration
- 18, // 20: State.stage:type_name -> Referee.Stage
- 5, // 21: State.command:type_name -> Command
- 6, // 22: State.game_state:type_name -> GameState
- 15, // 23: State.stage_time_elapsed:type_name -> google.protobuf.Duration
- 15, // 24: State.stage_time_left:type_name -> google.protobuf.Duration
- 16, // 25: State.match_time_start:type_name -> google.protobuf.Timestamp
- 12, // 26: State.team_state:type_name -> State.TeamStateEntry
- 19, // 27: State.placement_pos:type_name -> Vector2
- 5, // 28: State.next_command:type_name -> Command
- 15, // 29: State.current_action_time_remaining:type_name -> google.protobuf.Duration
- 14, // 30: State.game_events:type_name -> GameEvent
- 8, // 31: State.proposal_groups:type_name -> ProposalGroup
- 20, // 32: State.division:type_name -> Division
- 17, // 33: State.first_kickoff_team:type_name -> Team
- 21, // 34: State.match_type:type_name -> MatchType
- 16, // 35: State.ready_continue_time:type_name -> google.protobuf.Timestamp
- 11, // 36: State.shootout_state:type_name -> ShootoutState
- 17, // 37: ShootoutState.next_team:type_name -> Team
- 13, // 38: ShootoutState.number_of_attempts:type_name -> ShootoutState.NumberOfAttemptsEntry
- 9, // 39: State.TeamStateEntry.value:type_name -> TeamInfo
- 40, // [40:40] is the sub-list for method output_type
- 40, // [40:40] is the sub-list for method input_type
- 40, // [40:40] is the sub-list for extension type_name
- 40, // [40:40] is the sub-list for extension extendee
- 0, // [0:40] is the sub-list for field type_name
+ 18, // 20: TeamInfo.hull_color:type_name -> HullColor
+ 19, // 21: State.stage:type_name -> Referee.Stage
+ 5, // 22: State.command:type_name -> Command
+ 6, // 23: State.game_state:type_name -> GameState
+ 15, // 24: State.stage_time_elapsed:type_name -> google.protobuf.Duration
+ 15, // 25: State.stage_time_left:type_name -> google.protobuf.Duration
+ 16, // 26: State.match_time_start:type_name -> google.protobuf.Timestamp
+ 12, // 27: State.team_state:type_name -> State.TeamStateEntry
+ 20, // 28: State.placement_pos:type_name -> Vector2
+ 5, // 29: State.next_command:type_name -> Command
+ 15, // 30: State.current_action_time_remaining:type_name -> google.protobuf.Duration
+ 14, // 31: State.game_events:type_name -> GameEvent
+ 8, // 32: State.proposal_groups:type_name -> ProposalGroup
+ 21, // 33: State.division:type_name -> Division
+ 17, // 34: State.first_kickoff_team:type_name -> Team
+ 22, // 35: State.match_type:type_name -> MatchType
+ 16, // 36: State.ready_continue_time:type_name -> google.protobuf.Timestamp
+ 11, // 37: State.shootout_state:type_name -> ShootoutState
+ 17, // 38: ShootoutState.next_team:type_name -> Team
+ 13, // 39: ShootoutState.number_of_attempts:type_name -> ShootoutState.NumberOfAttemptsEntry
+ 9, // 40: State.TeamStateEntry.value:type_name -> TeamInfo
+ 41, // [41:41] is the sub-list for method output_type
+ 41, // [41:41] is the sub-list for method input_type
+ 41, // [41:41] is the sub-list for extension type_name
+ 41, // [41:41] is the sub-list for extension extendee
+ 0, // [0:41] is the sub-list for field type_name
}
func init() { file_state_ssl_gc_state_proto_init() }
diff --git a/internal/app/state/state.go b/internal/app/state/state.go
index 6b0a8ef9..868fe476 100644
--- a/internal/app/state/state.go
+++ b/internal/app/state/state.go
@@ -29,6 +29,8 @@ func NewState() (s *State) {
s.TeamState[Team_YELLOW.String()] = newTeamInfo()
s.TeamState[Team_BLUE.String()] = newTeamInfo()
*s.TeamState[Team_YELLOW.String()].OnPositiveHalf = !*s.TeamState[Team_BLUE.String()].OnPositiveHalf
+ *s.TeamState[Team_BLUE.String()].HullColor = HullColor_HULL_COLOR_DARK
+ *s.TeamState[Team_YELLOW.String()].HullColor = HullColor_HULL_COLOR_LIGHT
*s.Division = Division_DIV_A
*s.FirstKickoffTeam = Team_YELLOW
diff --git a/internal/app/state/teaminfo.go b/internal/app/state/teaminfo.go
index 1c27b43a..1370e009 100644
--- a/internal/app/state/teaminfo.go
+++ b/internal/app/state/teaminfo.go
@@ -22,6 +22,7 @@ func newTeamInfo() (t *TeamInfo) {
t.BotSubstitutionAllowed = new(bool)
t.BotSubstitutionsLeft = new(int32)
t.BotSubstitutionTimeLeft = new(durationpb.Duration)
+ t.HullColor = new(HullColor)
*t.CanPlaceBall = true
*t.Name = "Unknown"
diff --git a/internal/app/statemachine/change_teamstate.go b/internal/app/statemachine/change_teamstate.go
index 27bbf626..e49d315b 100644
--- a/internal/app/statemachine/change_teamstate.go
+++ b/internal/app/statemachine/change_teamstate.go
@@ -138,6 +138,10 @@ func (s *StateMachine) processChangeUpdateTeamState(newState *state.State, chang
if change.BotSubstitutionsLeft != nil {
*teamState.BotSubstitutionsLeft = change.BotSubstitutionsLeft.Value
}
+ if change.HullColor != nil {
+ *newState.TeamInfo(change.ForTeam.Opposite()).HullColor = *newState.TeamInfo(*change.ForTeam).HullColor
+ *teamState.HullColor = *change.HullColor
+ }
s.updateMaxBots(newState)
diff --git a/internal/app/statemachine/ssl_gc_change.pb.go b/internal/app/statemachine/ssl_gc_change.pb.go
index c8f9e55a..fba787ca 100644
--- a/internal/app/statemachine/ssl_gc_change.pb.go
+++ b/internal/app/statemachine/ssl_gc_change.pb.go
@@ -1035,7 +1035,9 @@ type Change_UpdateTeamState struct {
// Remove the red card with this id
RemoveRedCard *wrapperspb.UInt32Value `protobuf:"bytes,15,opt,name=remove_red_card,json=removeRedCard" json:"remove_red_card,omitempty"`
// Remove the foul with this id
- RemoveFoul *wrapperspb.UInt32Value `protobuf:"bytes,16,opt,name=remove_foul,json=removeFoul" json:"remove_foul,omitempty"`
+ RemoveFoul *wrapperspb.UInt32Value `protobuf:"bytes,16,opt,name=remove_foul,json=removeFoul" json:"remove_foul,omitempty"`
+ // The color of the hull
+ HullColor *state.HullColor `protobuf:"varint,23,opt,name=hull_color,json=hullColor,enum=HullColor" json:"hull_color,omitempty"`
unknownFields protoimpl.UnknownFields
sizeCache protoimpl.SizeCache
}
@@ -1217,6 +1219,13 @@ func (x *Change_UpdateTeamState) GetRemoveFoul() *wrapperspb.UInt32Value {
return nil
}
+func (x *Change_UpdateTeamState) GetHullColor() state.HullColor {
+ if x != nil && x.HullColor != nil {
+ return *x.HullColor
+ }
+ return state.HullColor(0)
+}
+
// Switch the team colors
type Change_SwitchColors struct {
state protoimpl.MessageState `protogen:"open.v1"`
@@ -1421,7 +1430,7 @@ var file_statemachine_ssl_gc_change_proto_rawDesc = []byte{
0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a,
0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66,
0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x09, 0x74, 0x69, 0x6d, 0x65,
- 0x73, 0x74, 0x61, 0x6d, 0x70, 0x22, 0xe6, 0x1d, 0x0a, 0x06, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65,
+ 0x73, 0x74, 0x61, 0x6d, 0x70, 0x22, 0x91, 0x1e, 0x0a, 0x06, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65,
0x12, 0x16, 0x0a, 0x06, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
0x52, 0x06, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x12, 0x1e, 0x0a, 0x0a, 0x72, 0x65, 0x76, 0x65,
0x72, 0x74, 0x69, 0x62, 0x6c, 0x65, 0x18, 0x10, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x72, 0x65,
@@ -1561,8 +1570,8 @@ var file_statemachine_ssl_gc_change_proto_rawDesc = []byte{
0x65, 0x61, 0x6d, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67,
0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x49, 0x6e, 0x74, 0x33,
0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x10, 0x6d, 0x61, 0x78, 0x52, 0x6f, 0x62, 0x6f, 0x74,
- 0x73, 0x50, 0x65, 0x72, 0x54, 0x65, 0x61, 0x6d, 0x4a, 0x04, 0x08, 0x03, 0x10, 0x04, 0x1a, 0xe6,
- 0x0a, 0x0a, 0x0f, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x65, 0x61, 0x6d, 0x53, 0x74, 0x61,
+ 0x73, 0x50, 0x65, 0x72, 0x54, 0x65, 0x61, 0x6d, 0x4a, 0x04, 0x08, 0x03, 0x10, 0x04, 0x1a, 0x91,
+ 0x0b, 0x0a, 0x0f, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x54, 0x65, 0x61, 0x6d, 0x53, 0x74, 0x61,
0x74, 0x65, 0x12, 0x20, 0x0a, 0x08, 0x66, 0x6f, 0x72, 0x5f, 0x74, 0x65, 0x61, 0x6d, 0x18, 0x01,
0x20, 0x01, 0x28, 0x0e, 0x32, 0x05, 0x2e, 0x54, 0x65, 0x61, 0x6d, 0x52, 0x07, 0x66, 0x6f, 0x72,
0x54, 0x65, 0x61, 0x6d, 0x12, 0x39, 0x0a, 0x09, 0x74, 0x65, 0x61, 0x6d, 0x5f, 0x6e, 0x61, 0x6d,
@@ -1648,24 +1657,27 @@ var file_statemachine_ssl_gc_change_proto_rawDesc = []byte{
0x76, 0x65, 0x5f, 0x66, 0x6f, 0x75, 0x6c, 0x18, 0x10, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e,
0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e,
0x55, 0x49, 0x6e, 0x74, 0x33, 0x32, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x0a, 0x72, 0x65, 0x6d,
- 0x6f, 0x76, 0x65, 0x46, 0x6f, 0x75, 0x6c, 0x1a, 0x0e, 0x0a, 0x0c, 0x53, 0x77, 0x69, 0x74, 0x63,
- 0x68, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x73, 0x1a, 0x25, 0x0a, 0x06, 0x52, 0x65, 0x76, 0x65, 0x72,
- 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01,
- 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x49, 0x64, 0x1a, 0x39,
- 0x0a, 0x0c, 0x4e, 0x65, 0x77, 0x47, 0x61, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x29,
- 0x0a, 0x0a, 0x67, 0x61, 0x6d, 0x65, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01,
- 0x28, 0x0b, 0x32, 0x0a, 0x2e, 0x47, 0x61, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x09,
- 0x67, 0x61, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x1a, 0x39, 0x0a, 0x10, 0x53, 0x65, 0x74,
- 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x25, 0x0a,
- 0x0e, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18,
- 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x4d, 0x65, 0x73,
- 0x73, 0x61, 0x67, 0x65, 0x42, 0x08, 0x0a, 0x06, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x42, 0x5a,
- 0x42, 0x10, 0x53, 0x73, 0x6c, 0x47, 0x63, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x50, 0x72, 0x6f,
- 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x44, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d,
- 0x2f, 0x52, 0x6f, 0x62, 0x6f, 0x43, 0x75, 0x70, 0x2d, 0x53, 0x53, 0x4c, 0x2f, 0x73, 0x73, 0x6c,
- 0x2d, 0x67, 0x61, 0x6d, 0x65, 0x2d, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72,
- 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x61, 0x70, 0x70, 0x2f, 0x73, 0x74,
- 0x61, 0x74, 0x65, 0x6d, 0x61, 0x63, 0x68, 0x69, 0x6e, 0x65,
+ 0x6f, 0x76, 0x65, 0x46, 0x6f, 0x75, 0x6c, 0x12, 0x29, 0x0a, 0x0a, 0x68, 0x75, 0x6c, 0x6c, 0x5f,
+ 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x18, 0x17, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0a, 0x2e, 0x48, 0x75,
+ 0x6c, 0x6c, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x52, 0x09, 0x68, 0x75, 0x6c, 0x6c, 0x43, 0x6f, 0x6c,
+ 0x6f, 0x72, 0x1a, 0x0e, 0x0a, 0x0c, 0x53, 0x77, 0x69, 0x74, 0x63, 0x68, 0x43, 0x6f, 0x6c, 0x6f,
+ 0x72, 0x73, 0x1a, 0x25, 0x0a, 0x06, 0x52, 0x65, 0x76, 0x65, 0x72, 0x74, 0x12, 0x1b, 0x0a, 0x09,
+ 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52,
+ 0x08, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x49, 0x64, 0x1a, 0x39, 0x0a, 0x0c, 0x4e, 0x65, 0x77,
+ 0x47, 0x61, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x29, 0x0a, 0x0a, 0x67, 0x61, 0x6d,
+ 0x65, 0x5f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0a, 0x2e,
+ 0x47, 0x61, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x09, 0x67, 0x61, 0x6d, 0x65, 0x53,
+ 0x74, 0x61, 0x74, 0x65, 0x1a, 0x39, 0x0a, 0x10, 0x53, 0x65, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75,
+ 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x25, 0x0a, 0x0e, 0x73, 0x74, 0x61, 0x74,
+ 0x75, 0x73, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
+ 0x52, 0x0d, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x42,
+ 0x08, 0x0a, 0x06, 0x63, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x42, 0x5a, 0x42, 0x10, 0x53, 0x73, 0x6c,
+ 0x47, 0x63, 0x43, 0x68, 0x61, 0x6e, 0x67, 0x65, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a,
+ 0x44, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x52, 0x6f, 0x62, 0x6f,
+ 0x43, 0x75, 0x70, 0x2d, 0x53, 0x53, 0x4c, 0x2f, 0x73, 0x73, 0x6c, 0x2d, 0x67, 0x61, 0x6d, 0x65,
+ 0x2d, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x6c, 0x65, 0x72, 0x2f, 0x69, 0x6e, 0x74, 0x65,
+ 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x61, 0x70, 0x70, 0x2f, 0x73, 0x74, 0x61, 0x74, 0x65, 0x6d, 0x61,
+ 0x63, 0x68, 0x69, 0x6e, 0x65,
}
var (
@@ -1717,7 +1729,8 @@ var file_statemachine_ssl_gc_change_proto_goTypes = []any{
(*state.RedCard)(nil), // 32: RedCard
(*state.Foul)(nil), // 33: Foul
(*wrapperspb.UInt32Value)(nil), // 34: google.protobuf.UInt32Value
- (*state.GameState)(nil), // 35: GameState
+ (state.HullColor)(0), // 35: HullColor
+ (*state.GameState)(nil), // 36: GameState
}
var file_statemachine_ssl_gc_change_proto_depIdxs = []int32{
18, // 0: StateChange.state_pre:type_name -> State
@@ -1776,12 +1789,13 @@ var file_statemachine_ssl_gc_change_proto_depIdxs = []int32{
34, // 53: Change.UpdateTeamState.remove_yellow_card:type_name -> google.protobuf.UInt32Value
34, // 54: Change.UpdateTeamState.remove_red_card:type_name -> google.protobuf.UInt32Value
34, // 55: Change.UpdateTeamState.remove_foul:type_name -> google.protobuf.UInt32Value
- 35, // 56: Change.NewGameState.game_state:type_name -> GameState
- 57, // [57:57] is the sub-list for method output_type
- 57, // [57:57] is the sub-list for method input_type
- 57, // [57:57] is the sub-list for extension type_name
- 57, // [57:57] is the sub-list for extension extendee
- 0, // [0:57] is the sub-list for field type_name
+ 35, // 56: Change.UpdateTeamState.hull_color:type_name -> HullColor
+ 36, // 57: Change.NewGameState.game_state:type_name -> GameState
+ 58, // [58:58] is the sub-list for method output_type
+ 58, // [58:58] is the sub-list for method input_type
+ 58, // [58:58] is the sub-list for extension type_name
+ 58, // [58:58] is the sub-list for extension extendee
+ 0, // [0:58] is the sub-list for field type_name
}
func init() { file_statemachine_ssl_gc_change_proto_init() }
diff --git a/proto/state/ssl_gc_referee_message.proto b/proto/state/ssl_gc_referee_message.proto
index a812dd24..30f46512 100644
--- a/proto/state/ssl_gc_referee_message.proto
+++ b/proto/state/ssl_gc_referee_message.proto
@@ -162,6 +162,8 @@ message Referee {
optional uint32 bot_substitutions_left = 17;
// The number of microseconds left for current bot substitution
optional uint32 bot_substitution_time_left = 18;
+ // The color of the hull of the robots of this team
+ optional HullColor hull_color = 19;
}
// Information about the two teams.
@@ -234,3 +236,13 @@ enum MatchType {
// a friendly match, not part of a tournament
FRIENDLY = 3;
}
+
+// HullColor is the color of the hull of the robots of a team
+enum HullColor {
+ // not set
+ HULL_COLOR_UNKNOWN = 0;
+ // dark hull color
+ HULL_COLOR_DARK = 1;
+ // light hull color
+ HULL_COLOR_LIGHT = 2;
+}
diff --git a/proto/state/ssl_gc_state.proto b/proto/state/ssl_gc_state.proto
index 52d84ce7..8ddabaad 100644
--- a/proto/state/ssl_gc_state.proto
+++ b/proto/state/ssl_gc_state.proto
@@ -99,6 +99,7 @@ message TeamInfo {
optional bool bot_substitution_allowed = 18;
optional int32 bot_substitutions_left = 19;
optional google.protobuf.Duration bot_substitution_time_left = 20;
+ optional HullColor hull_color = 21;
}
message State {
diff --git a/proto/statemachine/ssl_gc_change.proto b/proto/statemachine/ssl_gc_change.proto
index 3182679b..7b922074 100644
--- a/proto/statemachine/ssl_gc_change.proto
+++ b/proto/statemachine/ssl_gc_change.proto
@@ -173,6 +173,8 @@ message Change {
optional google.protobuf.UInt32Value remove_red_card = 15;
// Remove the foul with this id
optional google.protobuf.UInt32Value remove_foul = 16;
+ // The color of the hull
+ optional HullColor hull_color = 23;
}
// Switch the team colors