import "networkbasetypes.proto";

option optimize_for = SPEED;
option cc_generic_services = false;

message CInButtonStatePB {
	optional uint64 buttonstate1 = 1;
	optional uint64 buttonstate2 = 2;
	optional uint64 buttonstate3 = 3;
}

message CTicklessMoveStep {
	optional int32 button = 1;
	optional bool pressed = 2;
	optional float when = 3;
}

message CBaseUserCmdPB {
	optional int32 command_number = 1;
	optional int32 tick_count = 2;
	optional .CInButtonStatePB buttons_pb = 3;
	optional .CMsgQAngle viewangles = 4;
	optional float forwardmove = 5;
	optional float leftmove = 6;
	optional float upmove = 7;
	optional int32 impulse = 8;
	optional int32 weaponselect = 9;
	optional int32 random_seed = 10;
	optional int32 mousedx = 11;
	optional int32 mousedy = 12;
	optional bool hasbeenpredicted = 13;
	optional uint32 pawn_entity_handle = 14 [default = 16777215];
	repeated .CTicklessMoveStep tickless_moves = 18;
}

message CUserCmdBasePB {
	optional .CBaseUserCmdPB base = 1;
}

message CHLXUserCmdPB {
	optional .CBaseUserCmdPB base = 1;
}

message CDota2UserCmdPB {
	optional .CBaseUserCmdPB base = 1;
	optional int32 spectator_query_unit_entindex = 2;
	optional .CMsgVector crosshairtrace = 3;
	optional int32 cameraposition_x = 4;
	optional int32 cameraposition_y = 5;
	optional uint32 clickbehavior = 6;
	optional uint32 statspanel = 7;
	optional uint32 shoppanel = 8;
	optional uint32 stats_dropdown = 9;
	optional uint32 stats_dropdown_sort = 10;
}

message CCitadelUserCmdPB {
	optional .CBaseUserCmdPB base = 1;
	optional .CMsgVector vec_camera_position = 2;
	optional .CMsgQAngle ang_camera_angles = 3;
	optional int32 execute_ability_indices = 4;
	optional bool in_shop = 5;
	optional float camera_roaming_speed = 6;
	optional int32 spec_target = 7 [default = -1];
}

message CSGOInputHistoryEntryPB {
	optional .CMsgQAngle view_angles = 2;
	optional .CMsgVector shoot_position = 3;
	optional int32 render_tick_count = 4;
	optional float render_tick_fraction = 5;
	optional int32 player_tick_count = 6;
	optional float player_tick_fraction = 7;
	optional int32 target_ent_index = 8;
	optional .CMsgVector target_head_pos_check = 9;
	optional .CMsgVector target_pos_check = 10;
}

message CSGOUserCmdPB {
	optional .CBaseUserCmdPB base = 1;
	repeated .CSGOInputHistoryEntryPB input_history = 2;
	optional int32 attack1_start_history_index = 6 [default = -1];
	optional int32 attack2_start_history_index = 7 [default = -1];
}

message CMsgVRHandInfo {
	optional .CMsgVector vposition = 1;
	optional .CMsgQAngle angles = 2;
	optional .CMsgVector velocity = 3;
	optional .CMsgVector localposition = 4;
	optional .CMsgQAngle localangles = 5;
	optional float sampletime = 6;
	optional .CMsgVector filteredposition = 7;
	optional .CMsgQAngle filteredangles = 8;
	optional .CMsgVector filteredvelocity = 9;
	optional .CMsgVector filteredangularvel = 10;
	optional .CMsgVector filteredthrowvel = 11;
	optional float triggeranalogvalue = 12;
	optional float gripanalogvalue = 13;
	optional float finger0 = 14;
	optional float finger1 = 15;
	optional float finger2 = 16;
	optional float finger3 = 17;
	optional float finger4 = 18;
	optional float fingersplay0 = 19;
	optional float fingersplay1 = 20;
	optional float fingersplay2 = 21;
	optional float fingersplay3 = 22;
	optional float trackpadanalogvaluex = 23;
	optional float trackpadanalogvaluey = 24;
	optional float joystickanalogvaluex = 25;
	optional float joystickanalogvaluey = 26;
}

message CMsgVRController {
	optional bool active = 1;
	optional bool supports_skeleton = 2;
	optional .CMsgVRHandInfo info = 3;
}

message CUserMsgVRCore {
	optional bool active = 1;
	optional bool targeting_mode = 2;
	optional uint32 controller_type = 3;
	optional .CMsgVector middle_eye_local = 4;
	optional .CMsgQAngle viewangles_local = 5;
	repeated .CMsgVRController hmd_controllers = 6;
}

message VrInputDigitalActionData {
	optional uint64 activeorigin = 1;
	optional bool active = 2;
	optional bool state = 3;
	optional bool changed = 4;
	optional float updatetime = 5;
}

message VrInputAnalogActionData {
	optional uint64 activeorigin = 1;
	optional .CMsgVector position = 2;
	optional .CMsgVector delta = 3;
	optional bool active = 4;
	optional float updatetime = 5;
}

message VrInputSkeletalActionData {
	optional bool active = 1;
	optional uint64 activeorigin = 2;
}

message VrSkeletalSummaryData {
	repeated float fingercurl = 1;
	repeated float fingersplay = 2;
}

message VrSkeletalData {
	optional .VrInputSkeletalActionData skeletal_action_data = 1;
	optional .VrSkeletalSummaryData skeletal_summary_data = 2;
	optional uint32 bone_count = 3;
	optional uint32 bone_transform_source = 4;
	optional bytes compressed_bone_transforms = 5;
}

message CUerMsgVRActions {
	repeated .VrInputDigitalActionData digital_action_data = 1;
	repeated .VrInputAnalogActionData analog_action_data = 2;
	repeated .VrSkeletalData skeleton = 3;
}

message VRSampleUserCmdPB {
	optional .CBaseUserCmdPB base = 1;
	optional .CUserMsgVRCore hmd = 2;
	optional .CUerMsgVRActions actions = 3;
}
