Skip to content

Commit

Permalink
3d Camera: implement per-scene config
Browse files Browse the repository at this point in the history
  • Loading branch information
bakana808 committed Jul 12, 2024
1 parent ff4f444 commit 31ae932
Show file tree
Hide file tree
Showing 4 changed files with 108 additions and 45 deletions.
14 changes: 7 additions & 7 deletions project/main_menu.gd
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@ func init(p_main: M8SceneDisplay) -> void:
#--------------------------------------------------------------------------

%ButtonResetSceneVars.pressed.connect(func() -> void:
main.current_scene.config_delete_profile(main.menu_scene.DEFAULT_PROFILE)
main.menu_scene.config_delete_profile(main.menu_scene.DEFAULT_PROFILE)
main.reload_scene()
)

Expand Down Expand Up @@ -100,25 +100,25 @@ func init(p_main: M8SceneDisplay) -> void:
%Check_MouseCamera.toggled.connect(func(toggled_on: bool) -> void:
if main.current_scene and main.current_scene.has_3d_camera():
main.current_scene.get_3d_camera().mouse_controlled_pan_zoom=toggled_on
config.camera_mouse_control=toggled_on
# config.camera_mouse_control=toggled_on
)
%Check_MouseCamera.button_pressed = config.camera_mouse_control
# %Check_MouseCamera.button_pressed = config.camera_mouse_control

%Check_HumanCamera.toggled.connect(func(toggled_on: bool) -> void:
if main.current_scene and main.current_scene.has_3d_camera():
main.current_scene.get_3d_camera().humanized_movement=toggled_on
config.camera_humanize=toggled_on
# config.camera_humanize=toggled_on
)
%Check_HumanCamera.button_pressed = config.camera_humanize
# %Check_HumanCamera.button_pressed = config.camera_humanize

main.m8_scene_changed.connect(func(_scene_path: String, scene: M8Scene) -> void:
if scene.has_3d_camera():
%Container_SceneCamera.modulate.a=1.0
%Button_SceneCameraMenu.disabled=false
%Check_MouseCamera.disabled=false
%Check_HumanCamera.disabled=false
%Check_MouseCamera.toggled.emit(config.camera_mouse_control)
%Check_HumanCamera.toggled.emit(config.camera_humanize)
# %Check_MouseCamera.toggled.emit(config.camera_mouse_control)
# %Check_HumanCamera.toggled.emit(config.camera_humanize)
else:
%Container_SceneCamera.modulate.a=0.5
%Button_SceneCameraMenu.disabled=true
Expand Down
62 changes: 29 additions & 33 deletions project/main_menu.tscn
Original file line number Diff line number Diff line change
Expand Up @@ -172,15 +172,41 @@ text = "Scene Parameters"

[node name="ButtonResetSceneVars" type="Button" parent="CenterContainer/VBoxContainer/TabContainer/Scene/VBoxContainer/HBoxContainer2"]
unique_name_in_owner = true
custom_minimum_size = Vector2(120, 0)
custom_minimum_size = Vector2(150, 0)
layout_mode = 2
theme_override_styles/normal = SubResource("StyleBoxFlat_3mi27")
text = "Reset to Defaults"

[node name="Button_SceneMenu" type="Button" parent="CenterContainer/VBoxContainer/TabContainer/Scene/VBoxContainer/HBoxContainer2"]
unique_name_in_owner = true
custom_minimum_size = Vector2(100, 0)
custom_minimum_size = Vector2(140, 0)
layout_mode = 2
text = "Configure..."

[node name="HSeparator5" type="HSeparator" parent="CenterContainer/VBoxContainer/TabContainer/Scene/VBoxContainer"]
layout_mode = 2
theme_override_styles/separator = SubResource("StyleBoxEmpty_5cyir")

[node name="GridContainer" type="GridContainer" parent="CenterContainer/VBoxContainer/TabContainer/Scene/VBoxContainer"]
layout_mode = 2
columns = 3

[node name="Label" type="Label" parent="CenterContainer/VBoxContainer/TabContainer/Scene/VBoxContainer/GridContainer"]
layout_mode = 2
size_flags_horizontal = 3
text = "Secondary Scene Mode"

[node name="Option_SubSceneMode" type="OptionButton" parent="CenterContainer/VBoxContainer/TabContainer/Scene/VBoxContainer/GridContainer"]
unique_name_in_owner = true
custom_minimum_size = Vector2(150, 0)
layout_mode = 2
alignment = 1

[node name="Button_SubSceneMenu" type="Button" parent="CenterContainer/VBoxContainer/TabContainer/Scene/VBoxContainer/GridContainer"]
unique_name_in_owner = true
custom_minimum_size = Vector2(140, 0)
layout_mode = 2
disabled = true
text = "Configure..."

[node name="HSeparator3" type="HSeparator" parent="CenterContainer/VBoxContainer/TabContainer/Scene/VBoxContainer"]
Expand All @@ -199,7 +225,7 @@ text = "3D Camera"

[node name="Button_SceneCameraMenu" type="Button" parent="CenterContainer/VBoxContainer/TabContainer/Scene/VBoxContainer/Container_SceneCamera"]
unique_name_in_owner = true
custom_minimum_size = Vector2(100, 0)
custom_minimum_size = Vector2(140, 0)
layout_mode = 2
text = "Configure..."

Expand All @@ -221,36 +247,6 @@ text = "Enable Humanized Camera Movement"
unique_name_in_owner = true
layout_mode = 2

[node name="HSeparator4" type="HSeparator" parent="CenterContainer/VBoxContainer/TabContainer/Scene/VBoxContainer"]
layout_mode = 2
theme_override_styles/separator = SubResource("StyleBoxEmpty_5cyir")

[node name="RichTextLabel4" type="RichTextLabel" parent="CenterContainer/VBoxContainer/TabContainer/Scene/VBoxContainer"]
layout_mode = 2
bbcode_enabled = true
text = "[b]Secondary Scene[/b] "
fit_content = true

[node name="GridContainer" type="GridContainer" parent="CenterContainer/VBoxContainer/TabContainer/Scene/VBoxContainer"]
layout_mode = 2
columns = 3

[node name="Label" type="Label" parent="CenterContainer/VBoxContainer/TabContainer/Scene/VBoxContainer/GridContainer"]
layout_mode = 2
size_flags_horizontal = 3
text = "Secondary Scene Mode"

[node name="Option_SubSceneMode" type="OptionButton" parent="CenterContainer/VBoxContainer/TabContainer/Scene/VBoxContainer/GridContainer"]
unique_name_in_owner = true
layout_mode = 2

[node name="Button_SubSceneMenu" type="Button" parent="CenterContainer/VBoxContainer/TabContainer/Scene/VBoxContainer/GridContainer"]
unique_name_in_owner = true
custom_minimum_size = Vector2(100, 0)
layout_mode = 2
disabled = true
text = "Configure..."

[node name="HSeparator2" type="HSeparator" parent="CenterContainer/VBoxContainer/TabContainer/Scene/VBoxContainer"]
layout_mode = 2
theme_override_styles/separator = SubResource("StyleBoxEmpty_5cyir")
Expand Down
75 changes: 71 additions & 4 deletions project/scene_camera_menu.gd
Original file line number Diff line number Diff line change
@@ -1,44 +1,111 @@
extends PanelContainer

const PROP_POS := "__cam_pos"
const PROP_ANG := "__cam_ang"
const PROP_FLEN := "__cam_flen"
const PROP_FWID := "__cam_fwid"
const PROP_BLUR := "__cam_blur"
const PROP_MOUSE := "__cam_mouse"
const PROP_HUMAN := "__cam_human"

var main: M8SceneDisplay

func _setprop(property: String, value: Variant) -> void:
main.menu_scene.config_set_property(property, value)

func _getprop(property: String, default: Variant=null) -> Variant:
return main.menu_scene.config_get_property(property, default)

func init(p_main: M8SceneDisplay) -> void:
main = p_main

%Button_Finish.pressed.connect(func() -> void:
main.menu_open()
)

%Spin_PosX.value_changed.connect(func(value: float) -> void:
_cam().position.x=value
_setprop(PROP_POS, _cam().position)
)

%Spin_PosY.value_changed.connect(func(value: float) -> void:
_cam().position.y=value
_setprop(PROP_POS, _cam().position)
)

%Spin_PosZ.value_changed.connect(func(value: float) -> void:
_cam().position.z=value
_setprop(PROP_POS, _cam().position)
)

%Spin_AngP.value_changed.connect(func(value: float) -> void:
_cam().rotation.x=deg_to_rad(value)
_setprop(PROP_ANG, _cam().rotation)
)

%Spin_AngY.value_changed.connect(func(value: float) -> void:
_cam().rotation.y=deg_to_rad(value)
_setprop(PROP_ANG, _cam().rotation)
)

%Spin_FocalLength.value_changed.connect(func(value: float) -> void:
_cam().dof_focus_distance=value
_setprop(PROP_FLEN, value)
)

%Spin_FocalWidth.value_changed.connect(func(value: float) -> void:
_cam().dof_focus_width=value
_setprop(PROP_FWID, value)
)

%Slider_Blur.value_changed.connect(func(value: float) -> void:
_cam().dof_blur_amount=value
_setprop(PROP_BLUR, value)
)

%Button_Finish.pressed.connect(func() -> void:
main.menu_open()
)

main.menu.get_node("%Check_MouseCamera").toggled.connect(func(toggled_on: bool) -> void:
_setprop(PROP_MOUSE, toggled_on)
)

main.menu.get_node("%Check_HumanCamera").toggled.connect(func(toggled_on: bool) -> void:
_setprop(PROP_HUMAN, toggled_on)
)

main.m8_scene_changed.connect(func(_scene_path: String, scene: M8Scene) -> void:

if !scene.has_3d_camera(): return

var cam:=scene.get_3d_camera()

_getprop(PROP_POS, cam.position)
_getprop(PROP_ANG, cam.rotation)
_getprop(PROP_FLEN, cam.dof_focus_distance)
_getprop(PROP_FWID, cam.dof_focus_width)
_getprop(PROP_BLUR, cam.dof_blur_amount)

cam.position=_getprop(PROP_POS)
cam.rotation=_getprop(PROP_ANG)
cam.base_position=_getprop(PROP_POS)
cam.base_rotation=_getprop(PROP_ANG)

%Spin_PosX.value_changed.emit(_getprop(PROP_POS).x)
%Spin_PosY.value_changed.emit(_getprop(PROP_POS).y)
%Spin_PosZ.value_changed.emit(_getprop(PROP_POS).z)

%Spin_AngP.value_changed.emit(rad_to_deg(_getprop(PROP_ANG).x))
%Spin_AngY.value_changed.emit(rad_to_deg(_getprop(PROP_ANG).y))

%Spin_FocalLength.value_changed.emit(_getprop(PROP_FLEN))
%Spin_FocalWidth.value_changed.emit(_getprop(PROP_FWID))
%Slider_Blur.value_changed.emit(_getprop(PROP_BLUR))

main.menu.get_node("%Check_MouseCamera").button_pressed=_getprop(PROP_MOUSE, true)
main.menu.get_node("%Check_HumanCamera").button_pressed=_getprop(PROP_HUMAN, true)

cam.mouse_controlled_pan_zoom=_getprop(PROP_MOUSE)
cam.humanized_movement=_getprop(PROP_HUMAN)

update_fields()
)

func set_fields_editable(editable: bool) -> void:
Expand Down
2 changes: 1 addition & 1 deletion project/scene_menu.gd
Original file line number Diff line number Diff line change
Expand Up @@ -111,7 +111,7 @@ func config_get_property(property: String, default: Variant=null) -> Variant:
print("scene: %s: adding property '%s' to config" % [current_profile, property])
profile[property] = default

print("scene: profile %s: get %s=%s" % [current_profile, property, profile[property]])
# print("scene: profile %s: get %s=%s" % [current_profile, property, profile[property]])

return profile[property]

Expand Down

0 comments on commit 31ae932

Please sign in to comment.