import "networkbasetypes.proto";
import "citadel_gcmessages_common.proto";

enum ECitadelClientMessages {
	CITADEL_CM_MapPing = 1002;
	CITADEL_CM_PerformanceStats = 1003;
	CITADEL_CM_PingWheel = 1004;
	CITADEL_CM_ChatMsg = 1005;
	CITADEL_CM_PerfReport = 1006;
	CITADEL_CM_QuickResponse = 1007;
	CITADEL_CM_Pause = 1008;
	CITADEL_CM_MapLine = 1009;
	CITADEL_CM_AbilityPing = 1010;
	CITADEL_CM_ExecuteMapUnitAbility = 1011;
	CITADEL_CM_GetDamageStats = 1012;
	CITADEL_CM_CheaterVote = 1013;
	CITADEL_CM_MutePlayers = 1014;
	CITADEL_CM_HitMismatch = 1015;
	CITADEL_CM_HideoutStart = 1016;
	CITADEL_CM_HeroBuild = 1017;
	CITADEL_CM_HideoutMenuState = 1018;
	CITADEL_CM_HideoutSpawn = 1019;
	CITADEL_CM_HideoutMatchmakingState = 1020;
	CITADEL_CM_PlayerStatsUpdated = 1021;
	CITADEL_CM_HideoutUpdateHeroReleaseVoteTally = 1022;
}

message CCitadelClientMsg_Pause {
}

message CCitadelClientMsg_MapPing {
	optional .CMsgVector ping_location = 1;
	optional int32 event_type = 2;
	optional int32 entity_index = 3 [default = -1];
	optional bool is_aggressive_ping = 4;
	optional bool is_minimap_ping = 5;
	optional bool is_blind_ping = 6;
}

message CCitadelClientMsg_PingWheel {
	optional uint32 ping_wheel_option_id = 1;
	optional uint32 subnav_message_id = 2;
	optional .CMsgVector ping_location = 3;
	optional int32 entity_index = 4 [default = -1];
}

message CCitadelClientMsg_AbilityPing {
	optional int32 entity_index = 1 [default = -1];
	optional uint32 pinged_ability_id = 2;
	optional int32 pinged_player_slot = 3 [default = -1];
}

message CCitadelClientMsg_MapLine {
	optional .CMsgMapLine mapline = 1;
}

message CCitadelClientMsg_QuickResponse {
	optional uint32 ping_wheel_message_id = 1;
	optional uint32 responding_to_ping_message_id = 2;
	optional int32 responding_to_player_slot = 3 [default = -1];
}

message CCitadelClientMsg_PerformanceStats {
	optional float current_game_time = 1;
	optional float average_fps = 2;
	optional float min_fps = 3;
	optional float max_fps = 4;
}

message CCitadelClientMsg_ChatMsg {
	optional string chat_text = 1;
	optional bool all_chat = 2;
	optional .CMsgLaneColor lane_color = 3 [default = k_ELaneColor_Invalid];
}

message CCitadelClientMsg_PerfReport {
	optional float average_frame_time = 1;
	optional float max_frame_time = 2;
	optional float average_compute_time = 3;
	optional float max_compute_time = 4;
	optional float average_client_tick_time = 5;
	optional float max_client_tick_time = 6;
	optional float average_client_simulate_time = 7;
	optional float max_client_simulate_time = 8;
	optional float average_output_time = 9;
	optional float max_output_time = 10;
	optional float average_wait_for_rendering_to_complete_time = 11;
	optional float max_wait_for_rendering_to_complete_time = 12;
	optional float average_swap_time = 13;
	optional float max_swap_time = 14;
	optional float average_frame_update_time = 15;
	optional float max_frame_update_time = 16;
	optional float average_idle_time = 17;
	optional float max_idle_time = 18;
	optional float average_input_processing_time = 19;
	optional float max_input_processing_time = 20;
}

message CCitadelClientMsg_GetDamageStats {
	optional uint32 lobby_player_slot = 1;
	optional string ability_name = 2;
}

message CCitadelClientCachedPlayerStats {
	message Stat {
		optional string stat_name = 1;
		optional uint64 all_time_total = 2;
		optional uint32 all_time_match_max = 3;
		optional uint32 all_time_life_max = 4;
	}

	optional uint32 version = 1;
	repeated .CCitadelClientCachedPlayerStats.Stat stats = 2;
}

message CCitadelClientMsg_ExecuteMapUnitAbility {
	optional int32 ability_entity_index = 1;
	optional int32 target_entity_index = 2;
}

message CCitadelClientMsg_CheaterVote {
	optional bool end_game_immediately = 1;
}

message CCitadelClientMsg_MutePlayers {
	repeated int32 player_slots = 1;
	optional bool unmute = 2;
}

message CCitadelClientMsg_HitMismatch {
	optional int32 client_hit_entity_index = 1 [default = -1];
	optional int32 server_hit_entity_index = 2 [default = -1];
}

message CCitadelClientMsg_HideoutStart {
}

message CCitadelClientMsg_HeroBuild {
	option (maximum_size_bytes) = 16384;

	optional .CMsgHeroBuild hero_build = 1;
}

message CCitadelClientMsg_HideoutMenuState {
	enum MenuState {
		k_eNone = 0;
		k_eEscapeMenu = 1;
		k_eDashboard = 2;
	}

	optional .CCitadelClientMsg_HideoutMenuState.MenuState menu_state = 1 [default = k_eNone];
}

message CCitadelClientMsg_HideoutSpawn {
	optional uint32 hero_id = 1;
	optional bool show_intro = 2;
}

message CCitadelClientMsg_HideoutMatchmakingState {
	optional bool is_matchmaking = 1;
}

message CCitadelClientMsg_PlayerStatsUpdated {
}

message CCitadelClientMsg_HideoutUpdateHeroReleaseVoteTally {
	message VoteRoundToTallyEntry {
		optional uint32 key = 1;
		optional .CMsgHeroReleaseVoteTally value = 2;
	}

	repeated .CCitadelClientMsg_HideoutUpdateHeroReleaseVoteTally.VoteRoundToTallyEntry vote_round_to_tally = 1;
}
