Removed script from editor

This commit is contained in:
2024-09-20 16:06:27 +03:00
parent 43c312e371
commit 9ad8bb2620
8 changed files with 336 additions and 97 deletions

View File

@@ -2,13 +2,13 @@ extends Spatial
#var camera_mode = -1
onready var vmode = {
2: $"%v_buildings",
3: $"%v_navigation",
5: $"%v_poi",
6: $"%v_road_lines",
7: $"%v_npc",
}
#onready var vmode = {
# 2: $"%v_buildings",
# 3: $"%v_navigation",
# 5: $"%v_poi",
# 6: $"%v_road_lines",
# 7: $"%v_npc",
#}
#func change_building_type(index):
# var item = $"%building_type".get_item_text(index)
@@ -38,55 +38,60 @@ func _ready():
]:
b.connect("pressed", $WorldEditor, "editor_command", [b.name, []])
$WorldEditor.connect("editor_event", self, "editor_event")
for k in vmode.keys():
vmode[k].hide()
$"%building_cursor".hide()
$"%line_cursor".hide()
# for k in vmode.keys():
# vmode[k].hide()
# $"%building_cursor".hide()
# $"%line_cursor".hide()
# $"%building_type".connect("item_selected", self, "change_building_type")
# $"%NavPanel".connect("gui_input", self, "nav_gui_input")
var ignore_events = [
"result:get_closest_building",
"mouse_drag",
"mouse_press",
"mouse_drag_on",
"mouse_drag_off",
"line_cursor_motion",
"button:create_building",
"lines_select_line",
"lines_changed_line"
]
#var ignore_events = [
# "mode_change_pre",
# "mode_change_post",
# "result:get_closest_building",
# "result:get_building_types",
# "mouse_drag",
# "mouse_press",
# "mouse_drag_on",
# "mouse_drag_off",
# "line_cursor_motion",
# "button:create_building",
# "lines_select_line",
# "lines_changed_line"
#]
func editor_event(evname: String, args: Array):
print(evname, args)
if evname == "mode_change_pre":
var mode_prev = args[0]
if mode_prev == -1:
for k in vmode.keys():
vmode[k].hide()
elif vmode.has(mode_prev):
vmode[mode_prev].hide()
elif evname == "mode_change_post":
var mode_next = args[1]
if vmode.has(mode_next):
vmode[mode_next].show()
if mode_next == 2:
$WorldEditor.editor_command("get_building_types", [])
elif mode_next == 6:
$WorldEditor.editor_command("get_lines_list", [])
elif evname == "result:get_building_types":
print(evname, args)
var btypes = args[0]
$"%building_type".clear()
for k in btypes.keys():
$"%building_type".add_item(k)
elif evname == "editor_camera_moved":
$Area.global_transform.origin.x = $Camera.global_transform.origin.x
$Area.global_transform.origin.z = $Camera.global_transform.origin.z
# if evname == "mode_change_pre":
# var mode_prev = args[0]
# if mode_prev == -1:
# for k in vmode.keys():
# vmode[k].hide()
# elif vmode.has(mode_prev):
# vmode[mode_prev].hide()
# elif evname == "mode_change_post":
# var mode_next = args[1]
# if vmode.has(mode_next):
# vmode[mode_next].show()
# if mode_next == 2:
# $WorldEditor.editor_command("get_building_types", [])
# elif mode_next == 6:
# $WorldEditor.editor_command("get_lines_list", [])
# elif evname == "result:get_building_types":
# pass
# print(evname, args)
# var btypes = args[0]
# $"%building_type".clear()
# for k in btypes.keys():
# $"%building_type".add_item(k)
# if evname == "editor_camera_moved":
# var cam = get_viewport().get_camera()
# $"%selection_area".global_transform.origin.x = cam.global_transform.origin.x
# $"%selection_area".global_transform.origin.z = cam.global_transform.origin.z
# elif evname == "edit_update_building":
# check_edit_building()
elif evname in ignore_events:
pass
else:
breakpoint
# elif evname in ignore_events:
# pass
# else:
# breakpoint
#func mouse_drag(position):
# if $WorldEditor.get_current_mode() != 2:
# return
@@ -154,7 +159,7 @@ func editor_event(evname: String, args: Array):
# selected_building_xform = xform
#var selected_building
var selected_building_xform
#var selected_building_xform
#func select_building(xform, id, mid):
# selected_building = id
# selected_building_xform = xform
@@ -168,14 +173,14 @@ var selected_building_xform
# if !$"%building_cursor".visible:
# $"%building_cursor".show()
# $"%building_cursor".global_transform.origin = xform.origin
func _process(delta):
#func _process(delta):
# if Input.is_action_just_pressed("editor_cam1"):
# setup_cam1()
# if Input.is_action_just_pressed("editor_cam2"):
# setup_cam2()
# if Input.is_action_just_pressed("editor_cam3"):
# setup_cam3()
var mode = $"%buildings_edit_mode".selected
# var mode = $"%buildings_edit_mode".selected
# if mode == 2:
# $"%building_rot_cursor".global_transform = selected_building_xform
# if !$"%building_rot_cursor".visible:
@@ -232,10 +237,10 @@ func _process(delta):
## drag_delay -= delta
#var motion = Vector2()
#var old_mouse_pos = Vector2(-1, -1)
var rotation_y = 0
#var rotation_y = 0
#var dragging = false
#var drag_delay = 0.2
var drag_start = Vector3()
#var drag_start = Vector3()
#func _unhandled_input(event):
# var editor_mode = $WorldEditor.get_current_mode()
# var camera_mode = $WorldEditor.get_camera_mode()
@@ -274,5 +279,5 @@ var drag_start = Vector3()
# $WorldEditor.editor_command("update_building_transform", [selected_building, xform])
# $building_rot_cursor.global_transform = xform
# selected_building_xform = xform
func _physics_process(delta):
assert($WorldEditor is WorldEditor)
#func _physics_process(delta):
# assert($WorldEditor is WorldEditor)

View File

@@ -1,6 +1,5 @@
[gd_scene load_steps=16 format=2]
[gd_scene load_steps=15 format=2]
[ext_resource path="res://main/editor.gd" type="Script" id=1]
[ext_resource path="res://terrain/terrain_draw.png" type="Image" id=2]
[ext_resource path="res://terrain/terrain.png" type="Image" id=3]
[ext_resource path="res://terrain/terrain_edit.png" type="Image" id=4]
@@ -48,7 +47,6 @@ size = Vector3( 4, 4, 120 )
size = Vector3( 3, 60, 3 )
[node name="editor" type="Spatial"]
script = ExtResource( 1 )
[node name="WorldEditor" type="WorldEditor" parent="."]
@@ -124,7 +122,7 @@ text = "NPC Mode"
unique_name_in_owner = true
margin_top = 206.0
margin_right = 248.0
margin_bottom = 374.0
margin_bottom = 482.0
[node name="HSeparator" type="HSeparator" parent="VBoxContainer/v_buildings"]
margin_right = 248.0
@@ -184,11 +182,26 @@ margin_right = 248.0
margin_bottom = 168.0
text = "Save Buildings"
[node name="lines_list_building" type="ItemList" parent="VBoxContainer/v_buildings"]
unique_name_in_owner = true
margin_top = 172.0
margin_right = 248.0
margin_bottom = 252.0
rect_min_size = Vector2( 0, 80 )
size_flags_horizontal = 3
[node name="buildings_assign_to_line" type="Button" parent="VBoxContainer/v_buildings"]
unique_name_in_owner = true
margin_top = 256.0
margin_right = 248.0
margin_bottom = 276.0
text = "Assign To Line"
[node name="v_navigation" type="VBoxContainer" parent="VBoxContainer"]
unique_name_in_owner = true
margin_top = 378.0
margin_top = 486.0
margin_right = 248.0
margin_bottom = 400.0
margin_bottom = 508.0
[node name="HSeparator" type="HSeparator" parent="VBoxContainer/v_navigation"]
margin_right = 248.0
@@ -202,9 +215,9 @@ text = "Navigation mode"
[node name="v_poi" type="VBoxContainer" parent="VBoxContainer"]
unique_name_in_owner = true
margin_top = 404.0
margin_top = 512.0
margin_right = 248.0
margin_bottom = 426.0
margin_bottom = 534.0
[node name="HSeparator" type="HSeparator" parent="VBoxContainer/v_poi"]
margin_right = 248.0
@@ -218,9 +231,9 @@ text = "POI mode"
[node name="v_road_lines" type="VBoxContainer" parent="VBoxContainer"]
unique_name_in_owner = true
margin_top = 430.0
margin_top = 538.0
margin_right = 248.0
margin_bottom = 1080.0
margin_bottom = 1188.0
[node name="HSeparator" type="HSeparator" parent="VBoxContainer/v_road_lines"]
margin_right = 248.0
@@ -270,7 +283,7 @@ margin_left = 79.0
margin_right = 124.0
margin_bottom = 20.0
text = "Point"
items = [ "", null, 0, false, false, 0, 0, null, "", true, "Create", null, 0, false, false, 11, 0, null, "", false, "Remove", null, 0, false, false, 12, 0, null, "", false, "", null, 0, false, false, 3, 0, null, "", true, "Point To Cursor", null, 0, false, false, 51, 0, null, "", false, "Cursor To Point", null, 0, false, false, 52, 0, null, "", false, "Item 6", null, 0, false, false, 6, 0, null, "", false, "Item 7", null, 0, false, false, 7, 0, null, "", false ]
items = [ "", null, 0, false, false, 0, 0, null, "", true, "Create", null, 0, false, false, 11, 0, null, "", false, "Remove", null, 0, false, false, 12, 0, null, "", false, "", null, 0, false, false, 3, 0, null, "", true, "Point To Cursor", null, 0, false, false, 51, 0, null, "", false, "Cursor To Point", null, 0, false, false, 52, 0, null, "", false, "Item 6", null, 0, false, true, 6, 0, null, "", false, "Item 7", null, 0, false, true, 7, 0, null, "", false ]
switch_on_hover = true
[node name="road_lines_line_menu" type="MenuButton" parent="VBoxContainer/v_road_lines/road_lines_base/VBoxContainer/road_lines_menu_block"]
@@ -506,9 +519,9 @@ margin_bottom = 418.0
[node name="v_npc" type="VBoxContainer" parent="VBoxContainer"]
unique_name_in_owner = true
margin_top = 1084.0
margin_top = 1192.0
margin_right = 248.0
margin_bottom = 1106.0
margin_bottom = 1214.0
[node name="HSeparator" type="HSeparator" parent="VBoxContainer/v_npc"]
margin_right = 248.0
@@ -540,12 +553,13 @@ far = 1000.0
[node name="DirectionalLight" type="DirectionalLight" parent="."]
transform = Transform( 1, 0, 0, 0, 0.707107, 0.707107, 0, -0.707107, 0.707107, 0, 2, 0 )
[node name="Area" type="Area" parent="."]
[node name="selection_area" type="Area" parent="."]
unique_name_in_owner = true
collision_layer = 32768
collision_mask = 32768
monitoring = false
[node name="CollisionShape" type="CollisionShape" parent="Area"]
[node name="CollisionShape" type="CollisionShape" parent="selection_area"]
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.1, 0 )
shape = SubResource( 9 )

View File

@@ -144,6 +144,7 @@ static std::vector<Object *> ui_handlers;
BuildingsEditor::BuildingsEditor(WorldEditor *editor)
: editor(editor)
, selected_building(-1)
, active(false)
{
}
@@ -156,6 +157,9 @@ void BuildingsEditor::exit()
void BuildingsEditor::activate()
{
assert(!active);
ConfigFile config;
Error result = config.load("res://config/stream.conf");
ERR_FAIL_COND_MSG(result != OK, "Failed to load config");
print_line("BuildingsEditor ACTIVE");
Array args;
ui_handlers.push_back(memnew(HandleButton(
@@ -165,9 +169,24 @@ void BuildingsEditor::activate()
int i;
for (i = 0; i < (int)ui_handlers.size(); i++)
assert(ui_handlers[i]);
active = true;
/* TODO: make separate function for this */
EditorEvent::get_singleton()->event.add_listener(
this, &BuildingsEditor::event_handler);
Dictionary buildings_data =
config.get_value("buildings", "building_data");
OptionButton *building_type =
get_as_node<OptionButton>("%building_type");
building_type->clear();
List<Variant> keys;
buildings_data.get_key_list(&keys);
List<Variant>::Element *e = keys.front();
while (e) {
const String &key = e->get();
print_line("EE::" + key);
building_type->add_item(key);
e = e->next();
}
active = true;
}
void BuildingsEditor::deactivate()
@@ -200,6 +219,8 @@ void BuildingsEditor::event_handler(const String &event, const Array &args)
get_as_node<Spatial>("%building_rot_cursor")
->set_global_transform(selected_building_xform);
}
} else if (event == "result:get_building_types") {
/* TODO: replace with direct data access */
}
print_line("buildings::" + event);
}

View File

@@ -207,19 +207,18 @@ void RoadLinesData::index_lines(
std::vector<Vector3> &road_lines_nodes)
{
List<String> keys;
RoadLinesData *rld = RoadLinesData::get_singleton();
rld->get_road_lines_key_list(&keys);
get_road_lines_key_list(&keys);
List<String>::Element *e = keys.front();
while (e) {
String rkey = e->get();
struct RoadLinesData::road_line &pt = rld->lines[rkey];
struct RoadLinesData::road_line &pt = lines[rkey];
pt.indices.clear();
e = e->next();
}
e = keys.front();
while (e) {
String rkey = e->get();
struct RoadLinesData::road_line &pt = rld->lines[rkey];
struct RoadLinesData::road_line &pt = lines[rkey];
road_lines_curve_index(pt, road_lines_nodes_hash,
road_lines_nodes);
e = e->next();
@@ -481,28 +480,10 @@ void RoadLinesData::process_lines(
&road_lines_nodes_hash,
std::vector<Vector3> &road_lines_nodes)
{
int i;
get_debug_node()->clear();
index_lines(road_lines_nodes_hash, road_lines_nodes);
insert_close_points(road_lines_nodes, 160.0f);
update_road_lines_nodes(road_lines_nodes);
dump_road_lines(road_lines_nodes);
if (debug_flags & 1) {
get_debug_node()->begin(Mesh::PRIMITIVE_LINES);
for (i = 0; i < (int)road_lines_nodes.size(); i++) {
print_line("debug_node: " + itos(i) + " " +
(road_lines_nodes[i].operator String()));
get_debug_node()->set_color(
Color(0.1f, 0.6f, 0.6f, 1.0f));
get_debug_node()->add_vertex(road_lines_nodes[i]);
get_debug_node()->set_color(
Color(0.1f, 0.6f, 0.6f, 1.0f));
get_debug_node()->add_vertex(
road_lines_nodes[i] +
Vector3(0.0f, 200.0f, 0.0f));
}
get_debug_node()->end();
}
}
void RoadLinesData::set_debug_flags(int debug_flags)

View File

@@ -7,7 +7,6 @@ class RoadLinesData {
String road_lines_path;
uint32_t road_lines_hash(const Vector3 &v);
static ImmediateGeometry *debug_im;
static ImmediateGeometry *get_debug_node();
protected:
RoadLinesData();
@@ -15,6 +14,7 @@ protected:
_Signal<void> lines_updated;
public:
static ImmediateGeometry *get_debug_node();
struct road_line {
std::vector<Transform> points;
std::vector<int> indices;
@@ -38,6 +38,7 @@ public:
int get_debug_flags() const;
private:
void create_segments_from_lines();
void index_lines(std::unordered_map<uint32_t, std::vector<Vector3> >
&road_lines_nodes_hash,
std::vector<Vector3> &road_lines_nodes);

View File

@@ -1177,5 +1177,7 @@ void RoadLinesEditor::event_handler(const String &event, const Array &args)
print_line("the line is a road");
if (current_line.ends_with("_road") && update_roads)
rebuild_roads();
} else if (event == "result:get_building_types") {
/* TODO:: implement */
}
}

View File

@@ -94,6 +94,11 @@ struct RoadLinesProcessing {
}
e = e->next();
}
}
void sort_neighbors()
{
int i;
/* sort neighbors by angle */
for (i = 0; i < (int)nodes.size(); i++) {
std::sort(
edges[i].neighbors.begin(),
@@ -110,6 +115,72 @@ struct RoadLinesProcessing {
});
}
}
/* need to find nodes too close to edge and split them */
void optimize_nodes(float maxdst)
{
int i, j, k;
for (k = 0; k < (int)nodes.size(); k++) {
const Vector3 &p = nodes[k];
Vector3 np;
float dst = Math_INF;
int n1, n2;
for (i = 0; i < (int)nodes.size(); i++) {
if (k == i)
continue;
for (j = 0; j < (int)edges[i].neighbors.size();
j++) {
const Vector3 &p1 = nodes[i];
const Vector3 &p2 =
nodes[edges[i].neighbors[j]];
const Vector3 seg[] = { p1, p2 };
Vector3 tmp = Geometry::
get_closest_point_to_segment(
p, &seg[0]);
if (tmp.is_equal_approx(p1) ||
tmp.is_equal_approx(p2))
/* edges of segment, bad */
continue;
float tmpdst =
p.distance_squared_to(tmp);
if (tmpdst > maxdst * maxdst)
continue;
if (dst > tmpdst) {
dst = tmpdst;
np = tmp;
n1 = i;
n2 = edges[i].neighbors[j];
}
}
}
if (dst <= maxdst * maxdst) {
nodes[k] = np;
edges[n2].neighbors.erase(std::remove(
edges[n2].neighbors.begin(),
edges[n2].neighbors.end(), n1));
edges[n1].neighbors.erase(std::remove(
edges[n1].neighbors.begin(),
edges[n1].neighbors.end(), n2));
if (std::find(edges[k].neighbors.begin(),
edges[k].neighbors.end(),
n1) == edges[k].neighbors.end())
edges[k].neighbors.push_back(n1);
if (std::find(edges[k].neighbors.begin(),
edges[k].neighbors.end(),
n2) == edges[k].neighbors.end())
edges[k].neighbors.push_back(n2);
if (std::find(edges[n1].neighbors.begin(),
edges[n1].neighbors.end(),
k) == edges[n1].neighbors.end())
edges[n1].neighbors.push_back(k);
if (std::find(edges[n2].neighbors.begin(),
edges[n2].neighbors.end(),
k) == edges[n2].neighbors.end())
edges[n2].neighbors.push_back(k);
print_verbose("FIXED: " + itos(k) + ": " +
String::num(dst));
}
}
}
Vector3 tangent(const Vector3 &v)
{
Vector2 rv = Vector2(v.x, v.z).tangent();
@@ -197,6 +268,7 @@ struct RoadLinesProcessing {
}
void road_setup()
{
int i, j;
RoadLinesData *rld = RoadLinesData::get_singleton();
std::vector<Vector3> road_lines_nodes;
std::unordered_map<uint32_t, std::vector<Vector3> >
@@ -207,8 +279,70 @@ struct RoadLinesProcessing {
rld->process_lines(road_lines_nodes_hash, road_lines_nodes);
create_nodes(road_lines_nodes);
create_edges();
optimize_nodes(16.0f);
sort_neighbors();
wedges.clear();
build_wedges(wedges);
ImmediateGeometry *d = rld->get_debug_node();
d->clear();
if (debug_flags & 1) {
d->begin(Mesh::PRIMITIVE_LINES);
for (i = 0; i < (int)nodes.size(); i++) {
d->set_color(Color(0.1f, 0.6f, 0.6f, 1.0f));
d->add_vertex(nodes[i]);
d->set_color(Color(0.1f, 0.6f, 0.6f, 1.0f));
d->add_vertex(nodes[i] +
Vector3(0.0f, 200.0f, 0.0f));
}
d->end();
}
if (debug_flags & 2) {
d->begin(Mesh::PRIMITIVE_LINES);
for (i = 0; i < (int)nodes.size(); i++) {
const struct edgedata &e = edges[i];
for (j = 0; j < (int)e.neighbors.size(); j++) {
int idx1 = i;
int idx2 = e.neighbors[j];
assert(idx1 != idx2);
const Vector3 &p1 =
nodes[idx1] + Vector3(0, 10, 0);
const Vector3 &p2 =
nodes[idx2] + Vector3(0, 10, 0);
d->set_color(
Color(0.1f, 0.6f, 0.6f, 1.0f));
d->add_vertex(p1);
d->set_color(
Color(0.1f, 0.6f, 0.6f, 1.0f));
d->add_vertex(p2);
}
}
d->end();
}
if (debug_flags & 4) {
d->begin(Mesh::PRIMITIVE_LINES);
for (i = 0; i < (int)nodes.size(); i++) {
std::vector<struct wedge> wedge = wedges[i];
for (j = 0; j < (int)wedge.size(); j++) {
struct wedge w = wedge[j];
Vector3 p0 = w.p[0] + Vector3(0, 20, 0);
Vector3 p1 = w.p[1] + Vector3(0, 30, 0);
Vector3 p2 = w.p[2] + Vector3(0, 40, 0);
d->set_color(
Color(0.1f, 0.6f, 0.1f, 1.0f));
d->add_vertex(p0);
d->set_color(
Color(0.1f, 0.6f, 0.1f, 1.0f));
d->add_vertex(p1);
d->set_color(
Color(0.1f, 0.6f, 0.1f, 1.0f));
d->add_vertex(p1);
d->set_color(
Color(0.1f, 0.6f, 0.1f, 1.0f));
d->add_vertex(p2);
}
}
d->end();
}
print_line("ROAD SETUP DONE");
}
};

View File

@@ -51,6 +51,7 @@ WorldEditor::WorldEditor()
InputMap::get_singleton()->add_action("mouse1");
EditorEvent::get_singleton()->event.add_listener(
this, &WorldEditor::event_signal_handler);
print_line("constructed");
}
WorldEditor::~WorldEditor()
@@ -65,6 +66,7 @@ WorldEditor::~WorldEditor()
memdelete(buildings_editor);
buildings_editor = nullptr;
}
print_line("destructed");
}
void WorldEditor::set_camera_mode(int mode)
@@ -159,6 +161,13 @@ static std::unordered_map<String, int, StringHasher> modes = {
{ "select_road_lines", WorldEditor::MODE_ROAD_LINES },
{ "select_npc", WorldEditor::MODE_NPC }
};
static std::unordered_map<int, String> vmode = { { 2, "%v_buildings" },
{ 3, "%v_navigation" },
{ 5, "%v_poi" },
{ 6, "%v_road_lines" },
{ 7, "%v_npc" } };
void WorldEditor::tools_button(const String &button)
{
Array change;
@@ -166,8 +175,11 @@ void WorldEditor::tools_button(const String &button)
print_line("tools_button: " + button);
if (modes.find(button) == modes.end())
goto end;
assert(modes[button] >= 0);
if (current_mode == modes[button])
goto end;
print_line("mode change: " + itos(current_mode) + " " +
itos(modes[button]));
change[0] = current_mode;
change[1] = modes[button];
EditorEvent::get_singleton()->event.emit("mode_change_pre", change);
@@ -197,7 +209,9 @@ void WorldEditor::tools_button(const String &button)
break;
}
EditorEvent::get_singleton()->event.emit("mode_change_post", change);
assert(modes[button] >= 0);
current_mode = modes[button];
assert(current_mode >= 0);
end:;
}
@@ -269,6 +283,50 @@ int WorldEditor::get_current_mode() const
void WorldEditor::event_signal_handler(const String &event, const Array &args)
{
if (event == "mode_change_pre") {
int prev_mode = args[0];
if (prev_mode == -1) {
auto pt = vmode.begin();
while (pt != vmode.end()) {
auto data = *pt;
Control *p = Object::cast_to<Control>(
get_node(NodePath(data.second)));
assert(p);
p->hide();
pt++;
}
} else {
Control *p = Object::cast_to<Control>(
get_node(NodePath(vmode[prev_mode])));
assert(p);
p->hide();
}
} else if (event == "mode_change_post") {
int mode_next = args[1];
Control *p = Object::cast_to<Control>(
get_node(NodePath(vmode[mode_next])));
assert(p);
p->show();
switch (mode_next) {
case 2:
editor_command("get_building_types", Array());
break;
case 6:
editor_command("get_lines_list", Array());
break;
}
} else if (event == "editor_camera_moved") {
Camera *cam = get_viewport()->get_camera();
Spatial *area = Object::cast_to<Spatial>(
get_node(NodePath("%selection_area")));
assert(cam);
assert(area);
Transform area_transform = area->get_global_transform();
const Transform &cam_transform = cam->get_global_transform();
area_transform.origin.x = cam_transform.origin.x;
area_transform.origin.z = cam_transform.origin.z;
area->set_global_transform(area_transform);
}
emit_signal("editor_event", event, args);
}
@@ -287,6 +345,9 @@ void WorldEditor::_notification(int which)
{
switch (which) {
case NOTIFICATION_ENTER_TREE: {
if (Engine::get_singleton()->is_editor_hint()) {
return;
}
Node *base = get_parent();
int count = base->get_child_count();
int i;
@@ -303,6 +364,24 @@ void WorldEditor::_notification(int which)
"world_command_result");
}
}
auto pt = vmode.begin();
while (pt != vmode.end()) {
auto data = *pt;
Control *p = Object::cast_to<Control>(
get_node(NodePath(data.second)));
assert(p);
p->hide();
pt++;
}
Spatial *building_cursor = Object::cast_to<Spatial>(
get_node(NodePath("%building_cursor")));
assert(building_cursor);
building_cursor->hide();
Spatial *line_cursor = Object::cast_to<Spatial>(
get_node(NodePath("%line_cursor")));
assert(line_cursor);
line_cursor->hide();
set_process_unhandled_input(true);
set_physics_process(true);
Spatial *cursor = Object::cast_to<Spatial>(
@@ -319,6 +398,9 @@ void WorldEditor::_notification(int which)
set_process_unhandled_input(false);
break;
case NOTIFICATION_PHYSICS_PROCESS: {
if (Engine::get_singleton()->is_editor_hint()) {
return;
}
if (!is_inside_tree())
return;
Camera *cam = get_viewport()->get_camera();
@@ -359,7 +441,6 @@ void WorldEditor::_notification(int which)
buildings_editor->update(delta);
break;
case MODE_ROAD_LINES:
// print_line("current_mode: " + itos(current_mode));
road_lines_editor->update(delta);
break;
}