public void Draw(AptSceneManager manager) { if (ImGui.Begin("Scene transform", ImGuiWindowFlags.AlwaysAutoResize)) { var scale = manager.CurrentScale; var scaleFactor = MathF.Log(scale, 2); ImGui.SliderFloat("Scale Exponent", ref scaleFactor, -4, 4); scale = MathF.Pow(2, scaleFactor); ImGui.InputFloat("Scale (does not work for now)", ref scale); ImGui.Spacing(); var windowSize = manager.Game.Window.ClientBounds; var offset = manager.CurrentOffset; var x = offset.X; var y = offset.Y; ImGui.SliderFloat("SceneView Offset X", ref x, MathF.Min(0, x) - 100, MathF.Max(windowSize.Width, x) + 100); ImGui.SliderFloat("SceneView Offset Y", ref y, MathF.Min(0, y) - 100, MathF.Max(windowSize.Height, y) + 100); ImGui.Spacing(); var previousColor = manager.DisplayBackgroundColor; var color = new Vector3(previousColor.R, previousColor.G, previousColor.B); ImGui.ColorEdit3("Background (display only)", ref color); manager.CurrentScale = scale; manager.CurrentOffset = new Vector2(x, y); manager.ChangeDisplayBackgroundColor(new ColorRgbaF(color.X, color.Y, color.Z, 1)); } ImGui.End(); }
public void Draw(AptSceneManager manager) { if (_utilities?.Manager != manager.AptManager) { _lastSelectedCharacter = -1; _decidingExportName = string.Empty; _utilities = manager.AptManager is null ? null : new CharacterUtilities(manager.AptManager); } if (_utilities is null) { return; } if (ImGui.Begin("Characters")) { ImGui.Text("Characters"); ImGui.PushID(1); DrawCharacterCreationForm(); ImGui.PopID(); ImGui.PushID(2); ListCharacterDescription(manager); ImGui.PopID(); } ImGui.End(); }
public static FrameItemUtilities?Reset(AptSceneManager manager, FrameItemUtilities?current) { if (manager.IsCurrentCharacterImported) { return(null); } if (manager.CurrentCharacter is not Playable p) { return(null); } if (manager.CurrentFrameWrapped is not int frameNumber) { return(null); } var currentFrame = p.Frames[frameNumber]; if (ReferenceEquals(p, current?._character) && ReferenceEquals(currentFrame, current?._storedFrame)) { return(current); } return(new FrameItemUtilities(p, manager, currentFrame)); }
public void Draw(AptSceneManager manager) { if (_frameListUtilities.Reset(manager)) { // if this is a different frame (imply _utilities.Active == true) ImGui.SetNextWindowSize(Vector2.Zero); _inputFrameNumber = manager.CurrentFrame; _playing = false; _playSpeed = 1f; } else if (!_frameListUtilities.Active) { return; } if (ImGui.Begin(Name)) { ImGui.InputFloat("Speed multiplier", ref _playSpeed); ImGui.Text($"Current Frame: {manager.CurrentFrameWrapped}"); ProcessPlay(manager); ImGui.Separator(); ImGui.InputInt($" / {manager.NumberOfFrames}", ref _inputFrameNumber); _inputFrameNumber = Math.Abs(_inputFrameNumber); if (ImGui.Button("Play to frame")) { manager.PlayToFrame(_inputFrameNumber); } ImGui.Separator(); if (ImGui.BeginChild("Real Frame List")) { var digits = 1; if (manager.NumberOfFrames > 10) { digits = (int)Math.Log10(manager.NumberOfFrames - 1) + 1; } for (var i = 0; i < manager.NumberOfFrames; ++i) { var selected = (i == manager.CurrentFrameWrapped); ImGui.Selectable($"Frame {i.ToString($"D{digits}")}", ref selected); if (selected && i != manager.CurrentFrameWrapped) { manager.PlayToFrame(i); _inputFrameNumber = i; } } } ImGui.EndChild(); } ImGui.End(); }
private void ListCharacterDescription(AptSceneManager manager) { var indexColor = new Vector4(0, 1, 1, 1); var typeColor = new Vector4(0, 0.8f, 0.2f, 1); var exportColor = new Vector4(1, 1, 0, 1); foreach (var desc in _utilities !.GetActiveCharactersDescription()) { var wasSelected = (_lastSelectedCharacter == desc.Index); if (desc.Import is Import import) { ImGui.TextColored(indexColor, "Imported"); ImGui.SameLine(0, 5); ImGui.Text($"{import.Movie}.{import.Name}"); } if (desc.ExportedName != null) { ImGui.TextColored(exportColor, "Exported"); ImGui.SameLine(0, 5); ImGui.Text(desc.ExportedName); } ImGui.TextColored(indexColor, desc.Index.ToString()); ImGui.SameLine(0, 5); ImGui.TextColored(typeColor, desc.Type); ImGui.SameLine(0, 5); var selected = wasSelected; ImGui.Selectable(desc.Name, ref selected); if (selected) { _lastSelectedCharacter = desc.Index; var selectedCharacter = _utilities.GetCharacterByIndex(desc.Index); if (manager.CurrentCharacter != selectedCharacter) { System.Console.WriteLine($"Setting new character {desc.Index} {selectedCharacter.GetType().Name}"); manager.SetCharacter(selectedCharacter); _decidingExportName = desc.ExportedName ?? desc.Name; } DrawSelectedCharacterDescription(desc); } ImGui.Separator(); } }
public void Draw(AptSceneManager manager) { if (_utilities?.Manager != manager.AptManager) { _utilities = manager.AptManager is null ? null : new GeometryUtilities(manager.AptManager); _selected = null; _lastError = null; _currentInput = string.Empty; } if (_utilities is null) { return; } if (ImGui.Begin("Apt Geometries")) { if (_selected.HasValue) { ImGui.Columns(2); ImGui.Value("Geometry", _selected.Value.Key); } ImGui.InputInt("New geomery id", ref _newGeometryId); if (_utilities.HasGeometry(_newGeometryId)) { ImGui.Text($"Geometry #{_newGeometryId} already exists."); } else if (ImGui.Button("New geometry")) { _utilities.AddGeometry(_newGeometryId); } DrawGeometryList(); if (_selected is KeyValuePair <int, string> selected) { ImGui.NextColumn(); DrawInput(selected); } } ImGui.End(); }
// return true if they are new frames public bool Reset(AptSceneManager manager) { _manager ??= manager; if (_manager != manager) { throw new NotSupportedException(); } var newCharacter = _manager?.CurrentCharacter as Playable; if (CurrentCharacter != newCharacter) { CurrentCharacter = newCharacter; return(CurrentCharacter != null); } return(false); }
private void ProcessPlay(AptSceneManager manager) { if (!_playing) { if (ImGui.Button("Play")) { _playing = true; _lastPlayUpdate = DateTime.UtcNow; if (manager.CurrentFrame != _inputFrameNumber) { manager.PlayToFrame(0); _inputFrameNumber = 0; } } } else { if (ImGui.Button("Stop")) { _playing = false; } } var now = DateTime.UtcNow; var mspf = manager.MillisecondsPerFrame / _playSpeed; while ((now - _lastPlayUpdate).TotalMilliseconds >= mspf) { if (manager.CurrentFrame != _inputFrameNumber) { _playing = false; } if (!_playing) { break; } ++_inputFrameNumber; manager.NextFrame(); _lastPlayUpdate += TimeSpan.FromMilliseconds(mspf); } ImGui.TextWrapped("Played frames might differ from real ones because AptEditor won't execute any actionscript."); }
private FrameItemUtilities(Playable character, AptSceneManager manager, Frame currentFrame) { _character = character; _manager = manager; _storedFrame = currentFrame; foreach (var frameItem in CurrentItems) { switch (frameItem) { case PlaceObject placeObject: _placeObjects.Add(placeObject.Depth, new LogicalPlaceObject(EditAndUpdate, placeObject)); break; case RemoveObject removeObject: _placeObjects.Add(removeObject.Depth, null); break; case FrameLabel frameLabel: _frameLabels.Add(frameLabel); break; case Action action: _frameActions.Add(new LogicalAction(action)); break; case InitAction initAction: _initActions.Add(new LogicalInitAction(initAction)); break; case BackgroundColor background: _backgroundColors.Add(background); break; default: throw new NotImplementedException(); } } }
public void Draw(AptSceneManager manager) { if (ImGui.Begin("Instruction Editor")) { for (var i = 0; i < _instructions.Items.Count; ++i) { if (i == _editingIndex) { _editBox.Draw(); ImGui.SameLine(); if (ImGui.Button("Done")) { _editingIndex = -1; } } else { ImGui.Button(_instructions.Items[i].InstructionName()); } } } ImGui.End(); }
public void Draw(AptSceneManager manager) { var maybeNew = FrameItemUtilities.Reset(manager, _utilities); if (maybeNew is null) { return; } if (!ReferenceEquals(_utilities, maybeNew)) { // if this is a different frame (imply _utilities.Active == true) ImGui.SetNextWindowSize(new Vector2(0, 0)); _utilities = maybeNew; ResetCreatePlaceObjectForm(); } if (ImGui.Begin(Name)) { var id = _utilities.GetHashCode(); // frame label ImGui.Text("Frame labels"); ImGui.Button("New Frame label"); foreach (var label in _utilities.FrameLabels) { using var _ = new ImGuiIDHelper("Frame labels", ref id); ImGui.Text($"{label.FrameId}"); ImGui.SameLine(); ImGui.TextColored(new Vector4(1, 1, 0, 1), label.Name); ImGui.SameLine(); ImGui.Text($"{label.Flags}"); ImGui.SameLine(ImGui.GetWindowWidth() - 100); ImGui.Button("Remove"); ImGui.NewLine(); // TODO: is frame label globally visible? } ImGui.Separator(); // background color if (!_utilities.BackgroundColors.Any()) { ImGui.Button("Set background color"); } foreach (var color in _utilities.BackgroundColors) { using var _ = new ImGuiIDHelper("Background colors", ref id); ImGui.Text("Background Color"); ImGui.SameLine(); ImGui.ColorButton("Background color", color.Color.ToColorRgbaF().ToVector4()); ImGui.SameLine(ImGui.GetWindowWidth() - 100); ImGui.Button("Remove"); } ImGui.Separator(); // actions ImGui.Button("Add frame Action"); foreach (var item in _utilities.FrameActions) { using var _ = new ImGuiIDHelper("Frame actions", ref id); if (ImGui.Button("Frame Action")) { _currentFrameAction = new InstructionEditor(item.Instructions); } } ImGui.Separator(); // initActions ImGui.Button("Add InitAction"); var indexColor = new Vector4(0, 1, 1, 1); var typeColor = new Vector4(0, 1, 0, 1); foreach (var item in _utilities.InitActions) { using var _ = new ImGuiIDHelper("Init actions", ref id); ImGui.TextColored(indexColor, $"{item.Sprite}"); ImGui.SameLine(35, 5); if (ImGui.Button("Sprite InitAction")) { _currentFrameAction = new InstructionEditor(item.Instructions); } } ImGui.Separator(); // placeobjects ImGui.Text("Place commands"); DrawCreatePlaceObjectForm(); ImGui.Separator(); ImGui.Indent(10); int?remove = null; foreach (var(depth, placeObject) in _utilities.PlaceObjects) { using var _ = new ImGuiIDHelper("PlaceObjects", ref id); ImGui.Text($"Depth: {depth}"); ImGui.SameLine(); if (ImGui.Button("Remove")) { remove = depth; } if (placeObject is null) { ImGui.Text("Remove character in the current depth."); continue; } ImGui.TextColored(typeColor, "Character"); ProcessPlaceCharacter(placeObject); ImGui.Spacing(); ProcessTransform(placeObject); ImGui.Spacing(); ProcessColorTransform(placeObject); ImGui.Spacing(); ProcessRatio(placeObject); ImGui.Spacing(); ProcessName(placeObject); ImGui.Spacing(); ProcessClipEvents(placeObject); ImGui.Separator(); } ImGui.Unindent(); if (remove is int removeValue) { _utilities.RemovePlaceObject(removeValue); } } ImGui.End(); // Draw Frame's Action / InitAction _currentFrameAction?.Draw(manager); }