using System.Collections.Generic; using StereoKit; namespace slash; static class Mono { public static double game_time; public static int score; public static Pose world_pose; public static DeltaBool menu; public static Pose menu_pose; public static float menu_scale; public enum Mode { Float = -1, Hold = 0, Mount = 1, } public static Mode mode; public static void Init() { game_time = 0.0; world_pose = new(0, 0, 0); menu = new(true); menu_pose = new(0, 0, 0); menu_scale = 1 * U.cm; mode = Mode.Mount; } public static void Frame() { if (Rig.btn_back.delta == +1) { menu.Step(!menu.state); SFX.click.PlayMenu(); } if (menu.state) { // just one btn(resume) in menu rn if (Rig.btn_select.delta == +1) { Rig.btn_select.delta = 0; // [!] hacky capture menu.Step(false); SFX.click.PlayMenu(); } } // flatscreen dev controls if (Device.Name == "Simulator") { if (Input.Key(Key.MouseCenter).IsActive()) { float sx = Input.Mouse.posChange.x; Renderer.CameraRoot *= Matrix.R( Quat.FromAngles(0, -sx * 180.0f * Time.Stepf, 0) ); // orbital_view // box_pose.position = Input.Head.position + Input.Head.orientation * V.XYZ(0, -0 * U.cm, -10 * U.cm); } } else { // in_dist.Step(Vec3.Distance(Rig.r_con_stick.position, box_pose.position) < 6 * U.cm); // bool pickup = in_dist.state && Rig.btn_grip.delta == +1; // in_cone.Step(Vec3.AngleBetween( // Rig.head.orientation * Vec3.Forward, // Vec3.Direction(box_pose.position, Rig.head.position) // ) < 15.0f); // switch (mode) // { // case Mode.Float: // if (pickup) { mode = Mode.Hold; } // break; // case Mode.Hold: // box_pose.position = Rig.r_con_stick.position; // box_dist = Vec3.Distance(box_pose.position, Rig.head.position); // if (Rig.btn_grip.delta == -1) { mode = in_cone.state ? Mode.Mount : Mode.Float; } // break; // case Mode.Mount: // // orbital_view // box_pose.position = Rig.head.position + Rig.head.orientation * V.XYZ(0, -(SD_Y + 0.5f) * box_scale, -box_dist); // if (pickup) { mode = Mode.Hold; } // break; // } } } }