package ru.m.tankz.proto; message Person { required int32 id = 1; required string name = 2; } message Account { required int32 id = 1; required string login = 2; repeated Person persons = 3; } message LoginRequest { required string login = 1; required string password = 2; } message LoginResponse { required Account account = 1; } message PersonSelectRequest { required int32 person_id = 1; } message PersonSelectResponse { required Person person = 1; } message ErrorResponse { required int32 code = 1; required string message = 2; } enum GameState { READY = 1; STARTED = 2; ENDED = 3; } message Game { required int32 id = 1; required Person creator = 2; repeated Person persons = 3; required GameState state = 4; } message GamesRequest { } message GamesResponse { repeated Game games = 1; } message CreateGameRequest { } message CreateGameResponse { required Game game = 1; } message JoinGameRequest { required int32 game_id = 1; } message JoinGameResponse { required Game game = 1; } message LeaveGameRequest { required int32 game_id = 1; } message LeaveGameResponse { required Game game = 1; } message StartGameRequest { } message StartGameResponse { required Game game = 1; } message ExitGameRequest { } message ExitGameResponse { } /** Game */ enum GameActionType { MOVE = 1; SHOT = 2; STOP = 3; } message GameActionRequest { required GameActionType type = 1; optional int32 directionX = 2; optional int32 directionY = 3; } enum GameObjectType { TANK = 1; BULLET = 2; } enum GameChangeType { MOVED = 1; DESTROED = 2; MODIFIED = 3; APPEND = 4; DIRECTION = 5; } message GameChange { required GameChangeType type = 1; required GameObjectType objectType = 2; required int32 objectId = 3; optional int32 parentObjectId = 4; optional float x = 5; optional float y = 6; optional int32 directionX = 7; optional int32 directionY = 8; } message GameUpdateResponse { repeated GameChange changes = 1; }