mirror of
https://github.com/MaSzyna-EU07/maszyna.git
synced 2026-10-18 23:09:20 +02:00
Checkpoint of the editor branch so work isn't carried loose across a branch switch. Builds. - maj0sted turnout geometry moved into the domain: domain::lay_turnout lays the diverging path (pre-blade lead, blade at beta, arc of alfa-beta, frog rail) and solve_junction is a thin adapter onto it. - the maj0sted web/ tree renamed to editor/ (namespace and paths) - there is no WASM here, it's plain native C++ the editor calls. - click places the switch at its start (początek rozjazdu); the branch's leaving straight is locked tangent to the frog; switches can be slid along the through track and flipped L/P. - Polish turnout templates carry catalogue length (Id-1-consistent lengths), plus blade-angle and pre-blade fields (left 0 until the catalogue figures are in). - TURNOUT_SPEC.md: the Bezier-based runtime/model contract. - also folds in other pending branch changes (scenery, tests) to leave a clean tree.
83 lines
2.7 KiB
C++
83 lines
2.7 KiB
C++
/*
|
|
This Source Code Form is subject to the
|
|
terms of the Mozilla Public License, v.
|
|
2.0. If a copy of the MPL was not
|
|
distributed with this file, You can
|
|
obtain one at
|
|
http://mozilla.org/MPL/2.0/.
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#include "scene/scenenode.h"
|
|
#include "widgets/map_objects.h"
|
|
|
|
namespace scene {
|
|
|
|
struct basic_group {
|
|
// members
|
|
std::vector<scene::basic_node *> nodes;
|
|
std::vector<basic_event *> events;
|
|
};
|
|
|
|
// holds lists of grouped scene nodes
|
|
class node_groups {
|
|
// NOTE: during scenario deserialization encountering *.inc file causes creation of a new group on the group stack
|
|
// this allows all nodes listed in this *.inc file to be grouped and potentially modified together by the editor.
|
|
public:
|
|
// constructors
|
|
node_groups() = default;
|
|
// methods
|
|
// requests creation of a new node group. returns: handle to the group
|
|
group_handle
|
|
create();
|
|
// indicates creation of current group ended. returns: handle to the parent group or null_handle if group stack is empty
|
|
group_handle
|
|
close();
|
|
// drops every group without touching node pointers — call when the region that owned
|
|
// those nodes is about to be (or has just been) destroyed, before a scenery reload
|
|
void
|
|
clear();
|
|
// update minimap objects
|
|
void
|
|
update_map();
|
|
// returns current active group, or null_handle if group stack is empty
|
|
group_handle
|
|
handle() const;
|
|
// places provided node in specified group
|
|
void
|
|
insert( scene::group_handle const Group, scene::basic_node *Node );
|
|
// places provided event in specified group
|
|
void
|
|
insert( scene::group_handle const Group, basic_event *Event );
|
|
// grants direct access to specified group
|
|
scene::basic_group &
|
|
group( scene::group_handle const Group ) {
|
|
return m_groupmap[ Group ]; }
|
|
// sends basic content of the class in legacy (text) format to provided stream
|
|
void
|
|
export_as_text( std::ostream &Output, bool const Dirty ) const;
|
|
|
|
private:
|
|
// types
|
|
using group_map = std::unordered_map<scene::group_handle, scene::basic_group>;
|
|
// methods
|
|
// removes specified group from the group list and group information from the group's nodes
|
|
void
|
|
erase( group_map::const_iterator Group );
|
|
// creates handle for a new group
|
|
group_handle
|
|
create_handle();
|
|
bool
|
|
assign_cross_switch(map::track_switch&sw, std::string &sw_name, const std::string &id, size_t idx);
|
|
// members
|
|
group_map m_groupmap; // map of established node groups
|
|
std::stack<scene::group_handle> m_activegroup; // helper, group to be assigned to newly created nodes
|
|
};
|
|
|
|
extern node_groups Groups;
|
|
|
|
} // scene
|
|
|
|
//---------------------------------------------------------------------------
|