Merge pull request 'Add Camera Bounds Data' (#9) from editor-camera-bounds into main
Reviewed-on: #9
This commit is contained in:
commit
f3e630849b
BIN
editor.scn (Stored with Git LFS)
BIN
editor.scn (Stored with Git LFS)
Binary file not shown.
|
@ -1,14 +0,0 @@
|
||||||
[remap]
|
|
||||||
|
|
||||||
importer="image"
|
|
||||||
type="Image"
|
|
||||||
uid="uid://drok88h02tdre"
|
|
||||||
path="res://.godot/imported/brush_hard_circle_mask.png-e647df7b970f00cdf2f3f2ac38ad8257.image"
|
|
||||||
|
|
||||||
[deps]
|
|
||||||
|
|
||||||
source_file="res://editor/brush_hard_circle_mask.png"
|
|
||||||
dest_files=["res://.godot/imported/brush_hard_circle_mask.png-e647df7b970f00cdf2f3f2ac38ad8257.image"]
|
|
||||||
|
|
||||||
[params]
|
|
||||||
|
|
|
@ -1,14 +0,0 @@
|
||||||
[remap]
|
|
||||||
|
|
||||||
importer="image"
|
|
||||||
type="Image"
|
|
||||||
uid="uid://bbdh4btpg08do"
|
|
||||||
path="res://.godot/imported/brush_soft_circle_mask.png-5af527bedd556c2d7ed38b029e34527e.image"
|
|
||||||
|
|
||||||
[deps]
|
|
||||||
|
|
||||||
source_file="res://editor/brush_soft_circle_mask.png"
|
|
||||||
dest_files=["res://.godot/imported/brush_soft_circle_mask.png-5af527bedd556c2d7ed38b029e34527e.image"]
|
|
||||||
|
|
||||||
[params]
|
|
||||||
|
|
BIN
editor/menus_theme.res (Stored with Git LFS)
BIN
editor/menus_theme.res (Stored with Git LFS)
Binary file not shown.
Binary file not shown.
|
@ -0,0 +1,12 @@
|
||||||
|
shader_type spatial;
|
||||||
|
render_mode shadows_disabled, unshaded, cull_disabled;
|
||||||
|
|
||||||
|
void fragment() {
|
||||||
|
if (FRONT_FACING) {
|
||||||
|
ALBEDO = vec3(1.0, 0.0, 0.0);
|
||||||
|
ALPHA = 0.5;
|
||||||
|
} else {
|
||||||
|
ALBEDO = vec3(0.0, 1.0, 0.0);
|
||||||
|
ALPHA = 0.1;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,14 @@
|
||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="image"
|
||||||
|
type="Image"
|
||||||
|
uid="uid://drok88h02tdre"
|
||||||
|
path="res://.godot/imported/brush_hard_circle_mask.png-b5b7b3c7aa50923306e69fd4680a2d65.image"
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://map_editor/brush_hard_circle_mask.png"
|
||||||
|
dest_files=["res://.godot/imported/brush_hard_circle_mask.png-b5b7b3c7aa50923306e69fd4680a2d65.image"]
|
||||||
|
|
||||||
|
[params]
|
||||||
|
|
|
@ -0,0 +1,14 @@
|
||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="image"
|
||||||
|
type="Image"
|
||||||
|
uid="uid://bbdh4btpg08do"
|
||||||
|
path="res://.godot/imported/brush_soft_circle_mask.png-f4362d74cca7ee83b36212049a3b11fb.image"
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://map_editor/brush_soft_circle_mask.png"
|
||||||
|
dest_files=["res://.godot/imported/brush_soft_circle_mask.png-f4362d74cca7ee83b36212049a3b11fb.image"]
|
||||||
|
|
||||||
|
[params]
|
||||||
|
|
Binary file not shown.
|
@ -0,0 +1,143 @@
|
||||||
|
class_name MapEditorController extends Node
|
||||||
|
|
||||||
|
##
|
||||||
|
## Default elevation height for terrain.
|
||||||
|
##
|
||||||
|
const DEFAULT_ELEVATION := 0.5
|
||||||
|
|
||||||
|
var _brush_selected := 0
|
||||||
|
|
||||||
|
@export
|
||||||
|
var _registered_brushes: Array[Image] = []
|
||||||
|
|
||||||
|
@export
|
||||||
|
var _registered_paints: Array[TerrainPaint] = []
|
||||||
|
|
||||||
|
var _paint_selected_erase := 0
|
||||||
|
|
||||||
|
var _paint_selected_blue := 0
|
||||||
|
|
||||||
|
var _paint_selected_green := 0
|
||||||
|
|
||||||
|
var _paint_selected_red := 0
|
||||||
|
|
||||||
|
##
|
||||||
|
##
|
||||||
|
##
|
||||||
|
var smooth_elevation := DEFAULT_ELEVATION
|
||||||
|
|
||||||
|
##
|
||||||
|
##
|
||||||
|
##
|
||||||
|
func disable_controls() -> void:
|
||||||
|
set_process(false)
|
||||||
|
|
||||||
|
##
|
||||||
|
##
|
||||||
|
##
|
||||||
|
func enable_controls() -> void:
|
||||||
|
set_process(true)
|
||||||
|
|
||||||
|
##
|
||||||
|
##
|
||||||
|
##
|
||||||
|
func get_registered_brushes() -> Array[Image]:
|
||||||
|
return _registered_brushes
|
||||||
|
|
||||||
|
##
|
||||||
|
##
|
||||||
|
##
|
||||||
|
func get_registered_paints() -> Array[TerrainPaint]:
|
||||||
|
return _registered_paints
|
||||||
|
|
||||||
|
##
|
||||||
|
##
|
||||||
|
##
|
||||||
|
func get_selected_brush() -> int:
|
||||||
|
return _brush_selected
|
||||||
|
|
||||||
|
##
|
||||||
|
##
|
||||||
|
##
|
||||||
|
func get_selected_paint_blue() -> int:
|
||||||
|
return _paint_selected_blue
|
||||||
|
|
||||||
|
##
|
||||||
|
##
|
||||||
|
##
|
||||||
|
func get_selected_paint_erase() -> int:
|
||||||
|
return _paint_selected_erase
|
||||||
|
|
||||||
|
##
|
||||||
|
##
|
||||||
|
##
|
||||||
|
func get_selected_paint_green() -> int:
|
||||||
|
return _paint_selected_green
|
||||||
|
|
||||||
|
##
|
||||||
|
##
|
||||||
|
##
|
||||||
|
func get_selected_paint_red() -> int:
|
||||||
|
return _paint_selected_red
|
||||||
|
|
||||||
|
##
|
||||||
|
## Registers [code]brush_mask[/code] as a usable brush option in the editor.
|
||||||
|
##
|
||||||
|
func register_brush(brush_mask: Image) -> void:
|
||||||
|
_registered_brushes.append(brush_mask)
|
||||||
|
|
||||||
|
##
|
||||||
|
## Registers [code]terrain_paint[/code] as a usable paint option in the editor.
|
||||||
|
##
|
||||||
|
func register_paint(terrain_paint: TerrainPaint) -> void:
|
||||||
|
_registered_paints.append(terrain_paint)
|
||||||
|
|
||||||
|
##
|
||||||
|
## Resets the editor settings to their initial values.
|
||||||
|
##
|
||||||
|
func reset() -> void:
|
||||||
|
select_brush(0)
|
||||||
|
select_paint_erase(0)
|
||||||
|
select_paint_red(0)
|
||||||
|
select_paint_green(0)
|
||||||
|
select_paint_blue(0)
|
||||||
|
|
||||||
|
##
|
||||||
|
##
|
||||||
|
##
|
||||||
|
func select_brush(selected_index: int) -> void:
|
||||||
|
assert((selected_index >= 0) or (selected_index < _registered_brushes.size()))
|
||||||
|
|
||||||
|
_brush_selected = selected_index
|
||||||
|
|
||||||
|
##
|
||||||
|
##
|
||||||
|
##
|
||||||
|
func select_paint_blue(selected_index: int) -> void:
|
||||||
|
assert((selected_index >= 0) or (selected_index < _registered_paints.size()))
|
||||||
|
|
||||||
|
_paint_selected_blue = selected_index
|
||||||
|
|
||||||
|
##
|
||||||
|
##
|
||||||
|
##
|
||||||
|
func select_paint_erase(selected_index: int) -> void:
|
||||||
|
assert((selected_index >= 0) or (selected_index < _registered_paints.size()))
|
||||||
|
|
||||||
|
_paint_selected_erase = selected_index
|
||||||
|
|
||||||
|
##
|
||||||
|
##
|
||||||
|
##
|
||||||
|
func select_paint_green(selected_index: int) -> void:
|
||||||
|
assert((selected_index >= 0) or (selected_index < _registered_paints.size()))
|
||||||
|
|
||||||
|
_paint_selected_green = selected_index
|
||||||
|
|
||||||
|
##
|
||||||
|
##
|
||||||
|
##
|
||||||
|
func select_paint_red(selected_index: int) -> void:
|
||||||
|
assert((selected_index >= 0) or (selected_index < _registered_paints.size()))
|
||||||
|
|
||||||
|
_paint_selected_red = selected_index
|
Binary file not shown.
|
@ -98,9 +98,7 @@ func _input(event: InputEvent) -> void:
|
||||||
if (event is InputEventMouseMotion) and self._is_drag_panning:
|
if (event is InputEventMouseMotion) and self._is_drag_panning:
|
||||||
var global_basis := self.global_transform.basis
|
var global_basis := self.global_transform.basis
|
||||||
var camera_settings := GameSettings.camera_settings
|
var camera_settings := GameSettings.camera_settings
|
||||||
|
var dampened_speed := camera_settings.movement_speed_modifier * _DRAG_SPEED_BASE_MODIFIER
|
||||||
var dampened_speed :=\
|
|
||||||
camera_settings.movement_speed_modifier * _DRAG_SPEED_BASE_MODIFIER
|
|
||||||
|
|
||||||
self._target_position += dampened_speed.y * (-global_basis.z) *\
|
self._target_position += dampened_speed.y * (-global_basis.z) *\
|
||||||
event.relative.y * (-1.0 if camera_settings.is_y_inverted else 1.0)
|
event.relative.y * (-1.0 if camera_settings.is_y_inverted else 1.0)
|
||||||
|
@ -161,6 +159,12 @@ func _ready() -> void:
|
||||||
|
|
||||||
self.select_mode_changed.emit(SelectMode.NONE))
|
self.select_mode_changed.emit(SelectMode.NONE))
|
||||||
|
|
||||||
|
##
|
||||||
|
##
|
||||||
|
##
|
||||||
|
func in_select_area() -> bool:
|
||||||
|
return self._select_mode != SelectMode.NONE
|
||||||
|
|
||||||
##
|
##
|
||||||
## Returns [code]true[/code] if the player controller is currently selecting a location on the
|
## Returns [code]true[/code] if the player controller is currently selecting a location on the
|
||||||
## screen, otherwise [code]false[/code].
|
## screen, otherwise [code]false[/code].
|
||||||
|
@ -181,17 +185,6 @@ func is_selecting() -> bool:
|
||||||
func get_cursor_point() -> Vector2:
|
func get_cursor_point() -> Vector2:
|
||||||
return self._cursor_point
|
return self._cursor_point
|
||||||
|
|
||||||
##
|
|
||||||
## Returns the current [enum SelectMode] being used for selections.
|
|
||||||
##
|
|
||||||
## The general use-case for this function is to peek through the player controller abstraction and
|
|
||||||
## see what supported hardware interface is currently being used to select in the world. This is
|
|
||||||
## useful for handling input-specific behaviors, such as showing a mouse cursor when a mouse input
|
|
||||||
## device is being used.
|
|
||||||
##
|
|
||||||
func get_select_mode() -> int:
|
|
||||||
return self._select_mode
|
|
||||||
|
|
||||||
##
|
##
|
||||||
## Attempts to convert the screen coordinates in [code]screen_point[/code] into 2D worldspace
|
## Attempts to convert the screen coordinates in [code]screen_point[/code] into 2D worldspace
|
||||||
## coordinate relative to an infinite ground plane at y offset [code]0.0[/code].
|
## coordinate relative to an infinite ground plane at y offset [code]0.0[/code].
|
||||||
|
|
|
@ -19,6 +19,11 @@ _global_script_classes=[{
|
||||||
"language": &"GDScript",
|
"language": &"GDScript",
|
||||||
"path": "res://user_interface/button_selection.gd"
|
"path": "res://user_interface/button_selection.gd"
|
||||||
}, {
|
}, {
|
||||||
|
"base": "Node",
|
||||||
|
"class": &"MapEditorController",
|
||||||
|
"language": &"GDScript",
|
||||||
|
"path": "res://map_editor/map_editor_controller.gd"
|
||||||
|
}, {
|
||||||
"base": "Node3D",
|
"base": "Node3D",
|
||||||
"class": &"PlayerController",
|
"class": &"PlayerController",
|
||||||
"language": &"GDScript",
|
"language": &"GDScript",
|
||||||
|
@ -42,6 +47,7 @@ _global_script_classes=[{
|
||||||
_global_script_class_icons={
|
_global_script_class_icons={
|
||||||
"DynamicTerrainInstance3D": "",
|
"DynamicTerrainInstance3D": "",
|
||||||
"ItemSelection": "",
|
"ItemSelection": "",
|
||||||
|
"MapEditorController": "",
|
||||||
"PlayerController": "",
|
"PlayerController": "",
|
||||||
"Settings": "",
|
"Settings": "",
|
||||||
"TerrainInstance3D": "",
|
"TerrainInstance3D": "",
|
||||||
|
@ -51,7 +57,7 @@ _global_script_class_icons={
|
||||||
[application]
|
[application]
|
||||||
|
|
||||||
config/name="Protectorate"
|
config/name="Protectorate"
|
||||||
run/main_scene="res://editor.scn"
|
run/main_scene="res://map_editor.scn"
|
||||||
config/use_custom_user_dir=true
|
config/use_custom_user_dir=true
|
||||||
config/features=PackedStringArray("4.0", "Forward Plus")
|
config/features=PackedStringArray("4.0", "Forward Plus")
|
||||||
config/icon="res://icon.png"
|
config/icon="res://icon.png"
|
||||||
|
|
|
@ -16,7 +16,18 @@ var item_count: int:
|
||||||
return _button_group.get_buttons().size()
|
return _button_group.get_buttons().size()
|
||||||
|
|
||||||
func _get_configuration_warnings() -> PackedStringArray:
|
func _get_configuration_warnings() -> PackedStringArray:
|
||||||
return PackedStringArray()
|
var warnings := PackedStringArray()
|
||||||
|
var children := get_children()
|
||||||
|
|
||||||
|
if not(children.is_empty()):
|
||||||
|
var self_class_name := get_class()
|
||||||
|
|
||||||
|
for child in get_children():
|
||||||
|
warnings.append(
|
||||||
|
"{0} can only have Button children, but {1} is of type {2}".format(
|
||||||
|
[self_class_name, child.name, child.get_class()]))
|
||||||
|
|
||||||
|
return warnings
|
||||||
|
|
||||||
##
|
##
|
||||||
## Adds a new item with no text and only [code]icon[/code] as the icon to the selection.
|
## Adds a new item with no text and only [code]icon[/code] as the icon to the selection.
|
||||||
|
|
Loading…
Reference in New Issue