private static void DrawDroneTools(Crazyflie drone) { EditorGUI.BeginChangeCheck(); bool timestampsEnabled = EditorGUILayout.Toggle("Show Timestamps", showTimestamps); bool endpointsEnabled = EditorGUILayout.Toggle("Show Start/End Text", showEndpoints); if (EditorGUI.EndChangeCheck()) { EditorPrefs.SetBool(TIMESTAMPS_PREF_KEY, timestampsEnabled); EditorPrefs.SetBool(ENDPOINTS_PREF_KEY, endpointsEnabled); } EditorGUILayout.Space(30.0f); EditorGUI.BeginChangeCheck(); Color updatedColor = EditorGUILayout.ColorField(new GUIContent("Current Color"), drone.LightColor, false, false, false); if (EditorGUI.EndChangeCheck()) { drone.SetColorKeyframe(updatedColor, drone.Time); EditorApplication.QueuePlayerLoopUpdate(); } EditorGUILayout.Space(10); EditorGUI.BeginChangeCheck(); Vector3 updatedPosition = EditorGUILayout.Vector3Field(new GUIContent("Current Position"), drone.transform.position); if (EditorGUI.EndChangeCheck()) { drone.SetWaypoint(updatedPosition, drone.Time); } EditorGUILayout.Space(10); }
protected override void OnDrawScene(SceneView scene) { Waypoint keyframe = Target; Crazyflie drone = keyframe.Drone; CrazyflieEditor.Draw(drone); Vector3 position = GlobalTransform.Transfomed(keyframe.Position); if (keyframe.JointType != JointType.Linear) { DrawTangent(keyframe, false); DrawTangent(keyframe, true); } if (targetPoint == 0) { CustomHandles.DrawCircle(position, 0.0375f, Color.yellow); MoveHandle(keyframe, position, 0.06f, 0.045f, keyframe.SetPosition); } else { CustomHandles.DrawCircle(position, 0.0375f, Color.white); } if (Event.current.type == EventType.KeyDown && Event.current.keyCode == KeyCode.Delete) { drone.RemoveWaypoint(Target); } // -- GUI -- // DrawGUI(keyframe); }
public void ConnectToInvalidBluetoothID() { System.Threading.Tasks.Task.Run(async() => { Crazyflie c = new Crazyflie("BluetoothLE#BluetoothLE00:00:00:00:00:00-00:00:00:00:00:00"); CrazyflieStatus status = await c.InitializeAsync(); Assert.IsTrue(status == CrazyflieStatus.InvalidDeviceId); }).GetAwaiter().GetResult(); }
private static void DrawNonSelected(Crazyflie drone, GizmoType gizmo) { if (PreferencesMenu.PathEnabled) { //DrawDroneBounds(drone, Palette.UltraTranslucent); List <Waypoint> waypoints = drone.Waypoints; CustomHandles.DrawBezierPath(waypoints, Palette.UltraTranslucent, 2.0f); } }
/// -------- DRONE GUI -------- /// public static void DrawDroneGUI(Crazyflie drone) { showTimestamps = EditorPrefs.GetBool(TIMESTAMPS_PREF_KEY, false); showEndpoints = EditorPrefs.GetBool(ENDPOINTS_PREF_KEY, false); Rect toolsRect = new Rect(20, 20, 300, 250); CustomGUI.Window(toolsRect, "Drone Tools", DrawDroneTools, drone); }
public void Apply() { UpdateContainment(); for (int i = 0; i < containedDroneCount; i++) { Crazyflie drone = this.hitDrones[i]; drone.SetColorKeyframe(Evaluate(drone.transform.position), TimelineUtilities.CurrentTime); } EditorApplication.QueuePlayerLoopUpdate(); }
private void DrawDrones() { for (int i = 0; i < containedDroneCount; i++) { Crazyflie drone = this.hitDrones[i]; Color color = Evaluate(drone.transform.position); CrazyflieEditor.DrawDroneBounds(drone, color * 1.5f, false); color.a = 0.5f; CrazyflieEditor.DrawDroneBounds(drone, color, true); } }
private void Form1_Load(object sender, EventArgs e) { //rd = new RadioDriver[NUMS]; cf = new Crazyflie[NUMS]; for (int i = 0; i < NUMS; i++) { //rd[i] = new RadioDriver(); cf[i] = new Crazyflie(); } RegisterHotKey(Handle, (int)Keys.Up, KeyModifiers.None, Keys.Up); RegisterHotKey(Handle, (int)Keys.Down, KeyModifiers.None, Keys.Down); }
public void InitializeTest() { IList <string> devices = null; System.Threading.Tasks.Task.Run(async() => { devices = await Crazyflie.ScanInterfacesAsync(); Assert.IsTrue(devices.Count >= 1); Crazyflie c = new Crazyflie(devices[0]); CrazyflieStatus status = await c.InitializeAsync(); Assert.IsTrue(status == CrazyflieStatus.Success); }).GetAwaiter().GetResult(); }
public static void DrawColorKeyframes(Crazyflie drone, List <Waypoint> waypoints) { List <ColorKeyframe> colorKeyframes = drone.ColorKeyframes; Vector3 dronePosition = drone.transform.position; for (int i = 0; i < colorKeyframes.Count; i++) { ColorKeyframe keyframe = colorKeyframes[i]; keyframe.Position = KeyframeUtil.GetPosition(waypoints, keyframe.time, dronePosition); keyframe.Tangent = KeyframeUtil.GetTangent(waypoints, keyframe.time, true, true); keyframe.Offset = GetOffset(i, colorKeyframes); DrawSelector(keyframe); } }
protected override void OnDrawScene(SceneView scene) { ColorKeyframe keyframe = Target; Crazyflie drone = keyframe.Drone; CrazyflieEditor.Draw(drone); if (Event.current.type == EventType.KeyDown && Event.current.keyCode == KeyCode.Delete) { drone.RemoveColorKeyframe(keyframe); } // -- GUI -- // DrawGUI(keyframe); }
public void ScanInterfacesTest() { // Assuming at least once device is paired, verify it is found. IList <string> devices = null; System.Threading.Tasks.Task.Run(async() => { devices = await Crazyflie.ScanInterfacesAsync(); }).GetAwaiter().GetResult(); Assert.IsTrue(devices.Count >= 1); Debug.WriteLine("Found devices: "); foreach (string device in devices) { Debug.WriteLine("ID: " + device); } }
private void UpdateContainment() { int hitCount = Physics.OverlapBoxNonAlloc(transform.position, 0.5f * transform.lossyScale, this.contained, transform.rotation); this.containedDroneCount = 0; for (int i = 0; i < hitCount; i++) { Collider collider = contained[i]; Crazyflie drone = collider.GetComponent <Crazyflie>(); if (drone == null) { continue; } this.hitDrones[containedDroneCount] = drone; this.containedDroneCount += 1; } }
public static void DrawDroneBounds(Crazyflie drone, Color wireColor, bool solid = false) { Vector3 offsetPosition = drone.transform.position + DroneOffset; Color previousColor = Handles.color; Handles.color = wireColor; if (solid) { Matrix4x4 matrix = Handles.matrix; Handles.matrix = Matrix4x4.TRS(offsetPosition, Quaternion.identity, DroneSize); Handles.CubeHandleCap(0, Vector3.zero, Quaternion.identity, 1.0f, EventType.Repaint); Handles.matrix = matrix; } else { Handles.DrawWireCube(offsetPosition, DroneSize); } Handles.color = previousColor; }
/// -------- DRONE HANDLES -------- /// public static void DrawDroneHandles(Crazyflie drone, bool active) { float time = (float)TimelineUtilities.Director.time; List <Waypoint> waypoints = drone.Waypoints; CustomHandles.DrawBezierPath(waypoints, Color.white, 2.0f); DrawWaypoints(waypoints); ColorKeyframeEditor.DrawColorKeyframes(drone, waypoints); if (active) { DrawDroneBounds(drone, Palette.Translucent); // DrawDroneBounds(drone, Color.white); EditorGUI.BeginChangeCheck(); Vector3 updatedPosition = CustomHandles.MoveHandle(drone.transform.position, 0.025f, 0.085f); if (EditorGUI.EndChangeCheck()) { drone.SetWaypoint(updatedPosition, time); } } //CustomHandles.DrawTangent(waypoints, 0.25f, time); }
private static void DrawColorKeyframeTools(ColorKeyframe keyframe) { Crazyflie drone = keyframe.Drone; EditorGUI.BeginChangeCheck(); float updatedTime = EditorGUILayout.FloatField("Time (seconds)", (float)keyframe.time); Color updatedColor = EditorGUILayout.ColorField(new GUIContent("Light Color"), keyframe.LightColor, false, false, false); if (EditorGUI.EndChangeCheck()) { Undo.RecordObject(keyframe, "Change Color Keyframe"); keyframe.time = Mathf.Max(0, updatedTime); keyframe.LightColor = updatedColor; drone.UpdateView(); TimelineEditor.Refresh(RefreshReason.ContentsModified); } EditorGUILayout.Space(30.0f); if (GUILayout.Button("Delete")) { drone.RemoveColorKeyframe(keyframe); } }
static void CreateDrone() { if (DroneTemplate == null) { DroneTemplate = Resources.Load <GameObject>("Prefabs/crazyflie"); } string operationName = "Create Drone"; Undo.RecordObject(Director, operationName); Undo.RecordObject(Timeline, operationName); int droneCount = FindObjectsOfType <Crazyflie>().Length; GameObject drone = (GameObject)PrefabUtility.InstantiatePrefab(DroneTemplate); drone.name = $"Drone {droneCount}"; drone.transform.position = new Vector3(0, 0.5f, 0); drone.transform.SetAsLastSibling(); CrazyflieTrack track = Timeline.CreateTrack <CrazyflieTrack>(drone.name + " Track"); Crazyflie crazyflie = drone.GetComponent <Crazyflie>(); crazyflie?.Initialize(track); crazyflie?.SetColorKeyframe(Color.black, 0.0f); crazyflie?.SetWaypoint(drone.transform.position, 0.0f); Director.SetGenericBinding(track, crazyflie); AssetDatabase.Refresh(); EditorUtility.SetDirty(Timeline); EditorUtility.SetDirty(track); EditorUtility.SetDirty(Director); UnityEditor.Timeline.TimelineEditor.Refresh(UnityEditor.Timeline.RefreshReason.ContentsAddedOrRemoved); Undo.RegisterCreatedObjectUndo(drone, "Create Drone"); Undo.RegisterCreatedObjectUndo(track, "Create Drone"); Selection.activeObject = drone; }
private static void DrawWaypointTools(Waypoint waypoint) { Crazyflie drone = waypoint.Drone; EditorGUI.BeginChangeCheck(); float updatedTime = EditorGUILayout.FloatField("Time (seconds)", (float)waypoint.time); JointType updatedJointType = (JointType)EditorGUILayout.EnumPopup("Joint Type", waypoint.JointType); EditorGUILayout.Space(10); Vector3 updatedPosition = EditorGUILayout.Vector3Field(new GUIContent("Position"), waypoint.Position); EditorGUILayout.Space(10); GUI.enabled = (updatedJointType == JointType.Continuous); Vector3 updatedTangent = EditorGUILayout.Vector3Field(new GUIContent("Tangent"), waypoint.Tangent); EditorGUILayout.Space(30); GUI.enabled = true; if (EditorGUI.EndChangeCheck()) { Undo.RecordObject(waypoint, "Change Waypoint"); waypoint.time = Mathf.Max(0, updatedTime); waypoint.Position = updatedPosition; waypoint.Tangent = updatedTangent; waypoint.JointType = updatedJointType; drone.UpdateView(); TimelineEditor.Refresh(RefreshReason.ContentsModified); } if (GUILayout.Button("Delete")) { drone.RemoveWaypoint(waypoint); } }
protected override void OnDrawScene(SceneView scene) { Crazyflie drone = Target.Drone; CrazyflieEditor.Draw(drone, true); }
public static void Draw(Crazyflie drone, bool active = false) { DrawDroneHandles(drone, active); DrawDroneGUI(drone); }
private static void DrawSelected(Crazyflie drone, GizmoType gizmo) { }
public void ResetReferences() { drone = null; }