Files
tsullivan13andClaude Opus 5.5 d9bac524db Park editor: saved object sets; duplicate selections; group local axes
Sets: save a selection under a name and place it again anywhere, on any map.

- The library gets an OBJECTS / SETS switch. SETS saves the selected
  objects as a set and lists the saved sets to place or delete (Delete asks
  for a second press).
- A set is a park file in <profile>/object_sets/<name>.park.json, so it
  shares the park format, its 2 MB limit and its name rules. Positions are
  relative to the set's anchor: the middle of its footprint, at its lowest
  origin.
- Placing follows the cursor as one wire cube per object, on surfaces or
  the grid plane; the mouse wheel turns it by the angle step. A click
  pastes the whole set: one undo step, under the paste path's object and
  session limits. Sets with objects missing from the catalog cannot be
  placed.
- A placed or pasted group is then selected with the move gizmo.

Editing groups:

- Local axes work for multi-selections. A placed set's axes are the
  rotation it was placed with, plus every later turn; any other group uses
  its last selected object's rotation. Applying a moved group does not snap
  its own rotation to the angle grid.
- Duplicate (button or Ctrl+D) copies every selected object at its saved
  position, rotation and scale, one grid step along X, as one paste.
- On a server with object scaling off, pastes (sets, duplicates, Ctrl+V)
  are made at 1x.

Tests cover set storage (anchor, round trip, replace, names, damaged files,
delete), saving and placing a set through the UI (surface, wheel, one
paste, no live preview), selecting it with its own axes, moving it along
them, and duplicating with and without scaling.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-13 09:02:41 -07:00

38 lines
1.5 KiB
CMake

add_library(dingosdk_steam_restart_guard STATIC
Extension/Boot/steam_restart_guard.cpp
Extension/Boot/offline_steam.cpp)
target_link_libraries(dingosdk_steam_restart_guard PUBLIC dingosdk_launcher_support dingosdk_hooks dingosdk_logging)
add_library(dingosdk_startup_interventions STATIC
Extension/Boot/startup_interventions.cpp)
add_library(dingosdk_fast_travel_unlock STATIC
Extension/Progression/fast_travel_unlock.cpp)
add_library(dingosdk_local_profile STATIC
Extension/Profile/local_profile.cpp
Extension/Profile/profile_defaults.cpp
Extension/Profile/local_profile_store.cpp
Extension/Profile/profile_update.cpp
Extension/Profile/database_schema.cpp
Extension/Profile/database_codec.cpp
Extension/Objects/placement_database.cpp
Extension/Objects/object_categories.cpp
Extension/Profile/local_profile_legacy.cpp
Extension/Customization/local_customization.cpp
Extension/News/news_feed.cpp
Extension/Progression/rip_score.cpp
Extension/World/profile_policy.cpp
Extension/Rendering/profile_policy.cpp
Extension/Settings/input_bindings.cpp
Extension/Progression/challenge_profile.cpp
Extension/Objects/placements_store.cpp
Extension/Objects/ParkEditor/park_document.cpp
Extension/Objects/ParkEditor/park_mods.cpp
Extension/Objects/ParkEditor/park_object_sets.cpp
)
target_link_libraries(dingosdk_local_profile PUBLIC dingosdk_fast_travel_unlock dingosdk_content_cache dingosdk_json dingosdk_storage dingosdk_mod_list)
include(cmake/ProfileData.cmake)