diff --git a/AutoLoad/Cube.gd b/AutoLoad/Cube.gd index e8641e0d..af3a22ef 100644 --- a/AutoLoad/Cube.gd +++ b/AutoLoad/Cube.gd @@ -54,26 +54,28 @@ func get_cubescfg_modified_time(): func _notification(what: int): if what == MainLoop.NOTIFICATION_WM_FOCUS_IN: - if cubesCfgLastModifiedTime != get_cubescfg_modified_time(): - - var oMessage = Nodelist.list["oMessage"] - var oOverheadGraphics = Nodelist.list["oOverheadGraphics"] - var oPickSlabWindow = Nodelist.list["oPickSlabWindow"] - var oColumnEditor = Nodelist.list["oColumnEditor"] - var oSlabsetWindow = Nodelist.list["oSlabsetWindow"] - var oEditor = Nodelist.list["oEditor"] - var oGenerateTerrain = Nodelist.list["oGenerateTerrain"] - - read_cubes_cfg() - # Refresh the display of anything that handles cubes - oOverheadGraphics.update_map_overhead_2d_textures() - oPickSlabWindow.add_slabs() - oColumnEditor._on_ColumnEditor_visibility_changed() - oSlabsetWindow._on_SlabsetWindow_visibility_changed() - if oEditor.currentView == oEditor.VIEW_3D: - oGenerateTerrain.start() - - oMessage.quick("Reloaded cubes.cfg") + var oDataClm = Nodelist.list["oDataClm"] + if oDataClm.cubes.empty() == false: # fixes a crash when you've got no map loaded + if cubesCfgLastModifiedTime != get_cubescfg_modified_time(): + var oMessage = Nodelist.list["oMessage"] + var oOverheadGraphics = Nodelist.list["oOverheadGraphics"] + var oPickSlabWindow = Nodelist.list["oPickSlabWindow"] + var oColumnEditor = Nodelist.list["oColumnEditor"] + var oSlabsetWindow = Nodelist.list["oSlabsetWindow"] + var oEditor = Nodelist.list["oEditor"] + var oGenerateTerrain = Nodelist.list["oGenerateTerrain"] + + read_cubes_cfg() + # Refresh the display of anything that handles cubes + + oOverheadGraphics.update_map_overhead_2d_textures() + oPickSlabWindow.add_slabs() + oColumnEditor._on_ColumnEditor_visibility_changed() + oSlabsetWindow._on_SlabsetWindow_visibility_changed() + if oEditor.currentView == oEditor.VIEW_3D: + oGenerateTerrain.start() + + oMessage.quick("Reloaded cubes.cfg") func read_cubes_cfg(): diff --git a/LevelChanger.gd b/LevelChanger.gd index 6e4a91ed..7b5aaaea 100644 --- a/LevelChanger.gd +++ b/LevelChanger.gd @@ -4,6 +4,8 @@ onready var oMapSettingsWindow = Nodelist.list["oMapSettingsWindow"] onready var oMapBrowser = Nodelist.list["oMapBrowser"] onready var oColumnEditor = Nodelist.list["oColumnEditor"] onready var oSlabsetWindow = Nodelist.list["oSlabsetWindow"] +onready var oSelector = Nodelist.list["oSelector"] + func _ready(): get_line_edit().expand_to_text_length = true @@ -20,6 +22,8 @@ func _input(event): if oColumnEditor.visible == true: return if oSlabsetWindow.visible == true: return + if oSelector.mode == oSelector.MODE_TILE: return + var allowKeyShortcuts = false match get_parent().name: "PlacingListData": # Placing diff --git a/Scenes/BrushPlacingPreview.gd b/Scenes/BrushPlacingPreview.gd new file mode 100644 index 00000000..2f436208 --- /dev/null +++ b/Scenes/BrushPlacingPreview.gd @@ -0,0 +1,84 @@ +extends Node2D +onready var oBrushPreviewDisplay = Nodelist.list["oBrushPreviewDisplay"] +onready var oSelector = Nodelist.list["oSelector"] +onready var oSelection = Nodelist.list["oSelection"] +onready var oEditingTools = Nodelist.list["oEditingTools"] +onready var oEditor = Nodelist.list["oEditor"] + +var img = Image.new() +var tex = ImageTexture.new() + +var brushShapeArray = [] +var offsetBrushPos = 0 + +func _ready(): + img.create(1, 1, false, Image.FORMAT_RGBA8) + tex.create_from_image(img, 0) + yield(get_tree(),'idle_frame') + update_img() + +func update_img(): + img.resize(oEditingTools.BRUSH_SIZE,oEditingTools.BRUSH_SIZE, Image.INTERPOLATE_NEAREST) + var imgW = img.get_width() + var imgH = img.get_height() + + match oEditingTools.TOOL_SELECTED: + oEditingTools.PENCIL: + brushShapeArray = make_brush_shape(oSelection.CONSTRUCT_PENCIL) + oEditingTools.BRUSH: + brushShapeArray = make_brush_shape(oSelection.CONSTRUCT_BRUSH) + oEditingTools.RECTANGLE: + brushShapeArray = [] + oEditingTools.PAINTBUCKET: + brushShapeArray = [] + if oSelector.mode == oSelector.MODE_SUBTILE: + brushShapeArray = [] + + img.fill(Color(0,0,0,0)) + + img.lock() + + for pos in brushShapeArray: + img.set_pixelv(pos, Color(1,1,1,0.25)) + img.unlock() + + tex.set_data(img) + + var halfSize = ((oEditingTools.BRUSH_SIZE)-1) / 2.0 + offsetBrushPos = -Vector2(floor(halfSize),floor(halfSize)) + + oBrushPreviewDisplay.texture = tex + oBrushPreviewDisplay.rect_size = Vector2(imgW*96, imgH*96) + + +func _process(delta): + oBrushPreviewDisplay.rect_position = (oSelector.cursorTile+offsetBrushPos) * Vector2(96,96) + +func make_brush_shape(constructType): + var array = [] + + + var beginPos = Vector2(0,0) + var endPos = Vector2(oEditingTools.BRUSH_SIZE-1, oEditingTools.BRUSH_SIZE-1) + var brushSize = (beginPos-endPos).abs() + var center = Vector2(brushSize.x*0.5, brushSize.y*0.5) + print("brushSize: " + str(brushSize)) + for y in range(beginPos.y, endPos.y+1): + for x in range(beginPos.x, endPos.x+1): + if constructType == oSelection.CONSTRUCT_BRUSH: + print(Vector2(x,y).distance_to(center)) + if Vector2(x,y).distance_to(center) < max(brushSize.x+1,brushSize.y+1)*0.47: + array.append(Vector2(x,y)) + else: + array.append(Vector2(x,y)) + return array + + + + # Clamp inside map +# if clampInsideMap == true: +# beginTile.x = clamp(beginTile.x, oEditor.fieldBoundary.position.x, oEditor.fieldBoundary.end.x-1) +# beginTile.y = clamp(beginTile.y, oEditor.fieldBoundary.position.y, oEditor.fieldBoundary.end.y-1) +# endTile.x = clamp(endTile.x, oEditor.fieldBoundary.position.x, oEditor.fieldBoundary.end.x-1) +# endTile.y = clamp(endTile.y, oEditor.fieldBoundary.position.y, oEditor.fieldBoundary.end.y-1) + diff --git a/Scenes/EditBrushSizeValue.gd b/Scenes/EditBrushSizeValue.gd index ef98f4df..4e4157b8 100644 --- a/Scenes/EditBrushSizeValue.gd +++ b/Scenes/EditBrushSizeValue.gd @@ -5,10 +5,13 @@ onready var oMapSettingsWindow = Nodelist.list["oMapSettingsWindow"] onready var oMapBrowser = Nodelist.list["oMapBrowser"] onready var oColumnEditor = Nodelist.list["oColumnEditor"] onready var oSlabsetWindow = Nodelist.list["oSlabsetWindow"] +onready var oSelector = Nodelist.list["oSelector"] + func _ready(): get_line_edit().expand_to_text_length = true + func _input(event): if visible == false: return if event is InputEventKey and event.pressed == true: @@ -19,6 +22,7 @@ func _input(event): if oMapBrowser.visible == true: return if oColumnEditor.visible == true: return if oSlabsetWindow.visible == true: return + if oSelector.mode == oSelector.MODE_SUBTILE: return yield(get_tree(),'idle_frame') if oPropertiesTabs.current_tab != 1: return diff --git a/Scenes/EditingMode.gd b/Scenes/EditingMode.gd index e128a669..107f8ec7 100644 --- a/Scenes/EditingMode.gd +++ b/Scenes/EditingMode.gd @@ -6,6 +6,7 @@ onready var oPropertiesWindow = Nodelist.list["oPropertiesWindow"] onready var oThingDetails = Nodelist.list["oThingDetails"] onready var oModeSwitchButton = Nodelist.list["oModeSwitchButton"] onready var oPlacingSettings = Nodelist.list["oPlacingSettings"] +onready var oBrushPreview = Nodelist.list["oBrushPreview"] func _ready(): get_viewport().connect("size_changed",self, "_on_viewport_size_changed") @@ -29,6 +30,7 @@ func _on_ModeSwitchButton_pressed(): oSelector.change_mode(oSelector.MODE_TILE) # will also call switch_mode in here oPlacingSettings.editing_mode_was_switched(oModeSwitchButton.text) + oBrushPreview.update_img() func switch_mode(string): # Called from oSelection too if is_instance_valid(oPickSlabWindow) == false: return diff --git a/Scenes/EditingTools.gd b/Scenes/EditingTools.gd index a4fee534..9ddb8d73 100644 --- a/Scenes/EditingTools.gd +++ b/Scenes/EditingTools.gd @@ -1,6 +1,8 @@ extends VBoxContainer onready var oToolPencil = Nodelist.list["oToolPencil"] onready var oBrushSizeContainer = Nodelist.list["oBrushSizeContainer"] +onready var oBrushPreview = Nodelist.list["oBrushPreview"] +onready var oFillUseDisplay = Nodelist.list["oFillUseDisplay"] var BRUSH_SIZE = 1 @@ -17,21 +19,27 @@ func _on_ToolBrush_toggled(button_pressed): TOOL_SELECTED = BRUSH oBrushSizeContainer.visible = true oBrushSizeContainer.get_node("Label").text = "Brush size" + oBrushPreview.update_img() + oFillUseDisplay.visible = false func _on_ToolPencil_toggled(button_pressed): TOOL_SELECTED = PENCIL oBrushSizeContainer.visible = true oBrushSizeContainer.get_node("Label").text = "Pencil size" + oBrushPreview.update_img() + oFillUseDisplay.visible = false func _on_ToolRectangle_toggled(button_pressed): TOOL_SELECTED = RECTANGLE oBrushSizeContainer.visible = false - + oBrushPreview.update_img() + oFillUseDisplay.visible = false func _on_ToolPaintBucket_toggled(button_pressed): TOOL_SELECTED = PAINTBUCKET oBrushSizeContainer.visible = false - + oBrushPreview.update_img() + oFillUseDisplay.visible = true func switched_to_slab_mode(): visible = true @@ -39,8 +47,10 @@ func switched_to_slab_mode(): func switched_to_thing_mode(): oToolPencil.pressed = true visible = false + oFillUseDisplay.visible = false func _on_EditBrushSizeValue_value_changed(value): BRUSH_SIZE = value - + yield(get_tree(),'idle_frame') + oBrushPreview.update_img() diff --git a/Scenes/GamePaths.gd b/Scenes/GamePaths.gd index 33656996..12f2220e 100644 --- a/Scenes/GamePaths.gd +++ b/Scenes/GamePaths.gd @@ -61,6 +61,7 @@ func set_paths(path): oKeeperFXDetection.text = "KeeperFX not detected" oKeeperFXDetection.set("custom_colors/font_color", Color(1.0,0.5,0.5,1)) oKeeperFXDetection.visible = true + reconstruct_command_line() func _on_CmdLineDkCommands_text_changed(new_text): Settings.set_setting("dk_commands", new_text) diff --git a/Scenes/Instances.gd b/Scenes/Instances.gd index 957be209..17f7a7a4 100644 --- a/Scenes/Instances.gd +++ b/Scenes/Instances.gd @@ -87,6 +87,9 @@ func mirror_adjusted_value(instanceBeingAdjusted, variableNameToAdjust): "doorLocked": getNodeAtMirroredPosition.doorLocked = instanceBeingAdjusted.doorLocked instanceBeingAdjusted.toggle_spinning_key() + "ownership": + var finalOwner = calculate_mirrored_ownership(toPos, fromPos, fieldX, fieldY, instanceBeingAdjusted.ownership) + getNodeAtMirroredPosition.ownership = finalOwner func mirror_deletion_of_instance(instanceBeingDeleted): var actions = [] @@ -148,43 +151,46 @@ func mirror_instance_placement(newThingType, newSubtype, fromPos, newOwner, mirr placedInstances += 1 - var quadrantDestination = oMirrorOptions.get_quadrant(toPos, fieldX, fieldY) - var quadrantClickedOn = oMirrorOptions.get_quadrant(fromPos, fieldX, fieldY) - var quadrantDestinationOwner = oMirrorOptions.ownerValue[quadrantDestination] - var quadrantClickedOnOwner = oMirrorOptions.ownerValue[quadrantClickedOn] - - var mainPaint = newOwner - var finalOwner = 5 - - if oMirrorOptions.ui_quadrants_have_owner(mainPaint) == false: - finalOwner = mainPaint - else: - if mainPaint == quadrantDestinationOwner: - finalOwner = quadrantClickedOnOwner - else: - match oMirrorOptions.splitType: - 0,1: - finalOwner = quadrantDestinationOwner - 2: - var otherTwoQuadrants = [] - for i in 4: - if oMirrorOptions.ownerValue[i] == quadrantClickedOnOwner: continue - if oMirrorOptions.ownerValue[i] == mainPaint: continue - otherTwoQuadrants.append(oMirrorOptions.ownerValue[i]) - - if otherTwoQuadrants.size() == 2: - if quadrantDestinationOwner == otherTwoQuadrants[0]: - finalOwner = otherTwoQuadrants[1] - else: - finalOwner = otherTwoQuadrants[0] - else: - finalOwner = quadrantDestinationOwner + var finalOwner = calculate_mirrored_ownership(toPos, fromPos, fieldX, fieldY, newOwner) match mirrorType: MIRROR_THING: place_new_thing(newThingType, newSubtype, toPos, finalOwner) MIRROR_LIGHT: place_new_light(newThingType, newSubtype, toPos, finalOwner) MIRROR_ACTIONPOINT: place_new_action_point(newThingType, newSubtype, toPos, finalOwner) +func calculate_mirrored_ownership(toPos, fromPos, fieldX, fieldY, mainPaint): + var quadrantDestination = oMirrorOptions.get_quadrant(toPos, fieldX, fieldY) + var quadrantClickedOn = oMirrorOptions.get_quadrant(fromPos, fieldX, fieldY) + var quadrantDestinationOwner = oMirrorOptions.ownerValue[quadrantDestination] + var quadrantClickedOnOwner = oMirrorOptions.ownerValue[quadrantClickedOn] + + var finalOwner = 5 + + if oMirrorOptions.ui_quadrants_have_owner(mainPaint) == false: + finalOwner = mainPaint + else: + if mainPaint == quadrantDestinationOwner: + finalOwner = quadrantClickedOnOwner + else: + match oMirrorOptions.splitType: + 0,1: + finalOwner = quadrantDestinationOwner + 2: + var otherTwoQuadrants = [] + for i in 4: + if oMirrorOptions.ownerValue[i] == quadrantClickedOnOwner: continue + if oMirrorOptions.ownerValue[i] == mainPaint: continue + otherTwoQuadrants.append(oMirrorOptions.ownerValue[i]) + + if otherTwoQuadrants.size() == 2: + if quadrantDestinationOwner == otherTwoQuadrants[0]: + finalOwner = otherTwoQuadrants[1] + else: + finalOwner = otherTwoQuadrants[0] + else: + finalOwner = quadrantDestinationOwner + return finalOwner + func place_new_thing(newThingType, newSubtype, newPosition, newOwnership): # Placed by hand var CODETIME_START = OS.get_ticks_msec() var xSlab = floor(newPosition.x / 3) diff --git a/Scenes/Main.tscn b/Scenes/Main.tscn index e7f6cdc0..4b3f69f7 100644 --- a/Scenes/Main.tscn +++ b/Scenes/Main.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=168 format=2] +[gd_scene load_steps=172 format=2] [ext_resource path="res://Scenes/SlabStyle.gd" type="Script" id=1] [ext_resource path="res://Scenes/SlabPlacement.gd" type="Script" id=2] @@ -137,6 +137,7 @@ [ext_resource path="res://Class/SliderSetting.tscn" type="PackedScene" id=135] [ext_resource path="res://Scenes/QuickMapPreview.gd" type="Script" id=136] [ext_resource path="res://Scenes/ClmControls.tscn" type="PackedScene" id=137] +[ext_resource path="res://Scenes/BrushPlacingPreview.gd" type="Script" id=138] [ext_resource path="res://Scenes/LimitThing.gd" type="Script" id=139] [ext_resource path="res://Shaders/IndividualFloorTexture.tres" type="Material" id=140] [ext_resource path="res://Scenes/DataLof.gd" type="Script" id=141] @@ -148,6 +149,7 @@ [ext_resource path="res://Art/IconBrushHover.png" type="Texture" id=147] [ext_resource path="res://Art/SplitNS.png" type="Texture" id=148] [ext_resource path="res://Scenes/MirrorOptions.gd" type="Script" id=149] +[ext_resource path="res://Shaders/brightenbrush.shader" type="Shader" id=150] [sub_resource type="TileSet" id=1] 0/name = "Wibble_0.png 0" @@ -234,6 +236,14 @@ shader_param/color3 = null shader_param/color4 = null shader_param/color5 = null +[sub_resource type="ShaderMaterial" id=23] +shader = ExtResource( 150 ) +shader_param/brightness = 1.75 + +[sub_resource type="ShaderMaterial" id=22] +shader = ExtResource( 150 ) +shader_param/brightness = 1.75 + [sub_resource type="ShaderMaterial" id=19] shader = ExtResource( 36 ) @@ -542,6 +552,27 @@ texture = ExtResource( 24 ) centered = false script = ExtResource( 18 ) +[node name="Centerer" type="Control" parent="Game2D/Selector/TileSelector"] +margin_right = 96.0 +margin_bottom = 96.0 +mouse_filter = 2 + +[node name="FillUseDisplay" type="TextureRect" parent="Game2D/Selector/TileSelector/Centerer"] +visible = false +modulate = Color( 1, 1, 1, 0.752941 ) +anchor_left = 0.15 +anchor_top = 0.15 +anchor_right = 0.85 +anchor_bottom = 0.85 +grow_horizontal = 2 +grow_vertical = 2 +mouse_filter = 2 +size_flags_horizontal = 3 +size_flags_vertical = 3 +texture = ExtResource( 143 ) +expand = true +stretch_mode = 1 + [node name="Inspector" type="Node2D" parent="Game2D"] z_index = 200 script = ExtResource( 94 ) @@ -558,8 +589,19 @@ script = ExtResource( 98 ) script = ExtResource( 101 ) [node name="RectangleSelection" type="Node2D" parent="Game2D"] +material = SubResource( 23 ) script = ExtResource( 114 ) +[node name="BrushPreview" type="Node2D" parent="Game2D"] +script = ExtResource( 138 ) + +[node name="BrushPreviewDisplay" type="TextureRect" parent="Game2D/BrushPreview"] +material = SubResource( 22 ) +margin_right = 500.0 +margin_bottom = 500.0 +mouse_filter = 2 +expand = true + [node name="ScriptHelpers" type="Node2D" parent="Game2D"] script = ExtResource( 133 ) @@ -1328,6 +1370,7 @@ hint_tooltip = "Pencil tool" focus_mode = 0 toggle_mode = true pressed = true +enabled_focus_mode = 0 group = ExtResource( 108 ) texture_normal = ExtResource( 107 ) texture_pressed = ExtResource( 110 ) @@ -1339,7 +1382,9 @@ margin_right = 48.0 margin_bottom = 48.0 rect_min_size = Vector2( 48, 48 ) hint_tooltip = "Brush tool" +focus_mode = 0 toggle_mode = true +enabled_focus_mode = 0 group = ExtResource( 108 ) texture_normal = ExtResource( 146 ) texture_pressed = ExtResource( 145 ) @@ -1397,12 +1442,14 @@ visible = false margin_top = -55.0 margin_right = 91.0 margin_bottom = -26.0 +focus_mode = 0 text = "Place door as locked" [node name="MirrorPlacementCheckBox" type="CheckBox" parent="Ui/UiTools/PropertiesWindow/VBoxContainer/PropertiesTabs/PlacingSettings"] margin_top = 50.0 margin_right = 186.0 margin_bottom = 79.0 +focus_mode = 0 text = "Symmetrical" [node name="MirrorOptions" type="HBoxContainer" parent="Ui/UiTools/PropertiesWindow/VBoxContainer/PropertiesTabs/PlacingSettings"] @@ -1468,6 +1515,7 @@ margin_bottom = 90.0 [node name="SplitDirectionButton" type="Button" parent="Ui/UiTools/PropertiesWindow/VBoxContainer/PropertiesTabs/PlacingSettings/MirrorOptions/VBoxContainer"] margin_right = 176.0 margin_bottom = 27.0 +focus_mode = 0 size_flags_horizontal = 0 size_flags_vertical = 0 text = "Division axis" @@ -1475,6 +1523,7 @@ text = "Division axis" [node name="MirrorFlipCheckBox" type="CheckBox" parent="Ui/UiTools/PropertiesWindow/VBoxContainer/PropertiesTabs/PlacingSettings/MirrorOptions/VBoxContainer"] margin_right = 64.0 margin_bottom = 29.0 +focus_mode = 0 size_flags_horizontal = 0 size_flags_vertical = 0 text = "Inverted" @@ -1502,6 +1551,7 @@ margin_bottom = 21.0 margin_top = 132.0 margin_right = 276.0 margin_bottom = 159.0 +focus_mode = 0 text = "Tips" [node name="ColumnDetails" type="VBoxContainer" parent="Ui/UiTools/PropertiesWindow/VBoxContainer/PropertiesTabs"] diff --git a/Scenes/OverheadGraphics.gd b/Scenes/OverheadGraphics.gd index b29c220e..b3f4a024 100644 --- a/Scenes/OverheadGraphics.gd +++ b/Scenes/OverheadGraphics.gd @@ -13,6 +13,8 @@ var overheadTexData = ImageTexture.new() var arrayOfColorRects = [] func update_map_overhead_2d_textures(): + + var CODETIME_START = OS.get_ticks_msec() if arrayOfColorRects.empty() == true: diff --git a/Scenes/Selection.gd b/Scenes/Selection.gd index 4c58be6a..dc5be2bc 100644 --- a/Scenes/Selection.gd +++ b/Scenes/Selection.gd @@ -27,6 +27,7 @@ onready var oScriptHelpers = Nodelist.list["oScriptHelpers"] onready var oEditingTools = Nodelist.list["oEditingTools"] onready var oMirrorPlacementCheckBox = Nodelist.list["oMirrorPlacementCheckBox"] onready var oLoadingBar = Nodelist.list["oLoadingBar"] +onready var oBrushPreview = Nodelist.list["oBrushPreview"] enum { CONSTRUCT_BRUSH @@ -134,12 +135,11 @@ func update_paint(): func construct_shape_for_placement(constructType): oEditor.mapHasBeenEdited = true - var rectStart = Vector2() - var rectEnd = Vector2() - var shapePositionArray = [] match constructType: CONSTRUCT_RECTANGLE: + var rectStart = Vector2() + var rectEnd = Vector2() if oRectangleSelection.beginTile.x < oRectangleSelection.endTile.x: rectStart.x = oRectangleSelection.beginTile.x rectEnd.x = oRectangleSelection.endTile.x @@ -156,40 +156,14 @@ func construct_shape_for_placement(constructType): for x in range(rectStart.x, rectEnd.x+1): shapePositionArray.append(Vector2(x,y)) CONSTRUCT_PENCIL, CONSTRUCT_BRUSH: - - var b = ((oEditingTools.BRUSH_SIZE)-1) / 2.0 - var beginTile = oSelector.world2tile(get_global_mouse_position()) - Vector2(floor(b),floor(b)) - var endTile = oSelector.world2tile(get_global_mouse_position()) + Vector2(ceil(b),ceil(b)) - - # Clamp inside map - beginTile.x = clamp(beginTile.x, oEditor.fieldBoundary.position.x, oEditor.fieldBoundary.end.x-1) - beginTile.y = clamp(beginTile.y, oEditor.fieldBoundary.position.y, oEditor.fieldBoundary.end.y-1) - endTile.x = clamp(endTile.x, oEditor.fieldBoundary.position.x, oEditor.fieldBoundary.end.x-1) - endTile.y = clamp(endTile.y, oEditor.fieldBoundary.position.y, oEditor.fieldBoundary.end.y-1) - - if beginTile.x < endTile.x: - rectStart.x = beginTile.x - rectEnd.x = endTile.x - else: - rectStart.x = endTile.x - rectEnd.x = beginTile.x - if beginTile.y < endTile.y: - rectStart.y = beginTile.y - rectEnd.y = endTile.y - else: - rectStart.y = endTile.y - rectEnd.y = beginTile.y - var brushSizeX = abs(rectStart.x-rectEnd.x) - var brushSizeY = abs(rectStart.y-rectEnd.y) - var center = rectStart + (Vector2(brushSizeX,brushSizeY)*0.5) - - for y in range(rectStart.y, rectEnd.y+1): - for x in range(rectStart.x, rectEnd.x+1): - if constructType == CONSTRUCT_BRUSH: - if (Vector2(x,y).distance_to(center)) < (max(brushSizeX+1,brushSizeY+1)*0.47): - shapePositionArray.append(Vector2(x,y)) - else: - shapePositionArray.append(Vector2(x,y)) + var ct_and_offset = oSelector.cursorTile + oBrushPreview.offsetBrushPos + for pos in oBrushPreview.brushShapeArray: + var newPos = pos + ct_and_offset + if newPos.x < oEditor.fieldBoundary.position.x: continue + if newPos.x > oEditor.fieldBoundary.end.x-1: continue + if newPos.y < oEditor.fieldBoundary.position.y: continue + if newPos.y > oEditor.fieldBoundary.end.y-1: continue + shapePositionArray.append(newPos) CONSTRUCT_FILL: var beginTile = oSelector.world2tile(get_global_mouse_position()) var coordsToCheck = [beginTile] @@ -250,6 +224,7 @@ func construct_shape_for_placement(constructType): oSlabPlacement.generate_slabs_based_on_id(shapePositionArray, updateNearby) + func place_subtile(placeSubtile): if placeSubtile.x < 0 or placeSubtile.y < 0 or placeSubtile.x >= (M.xSize*3) or placeSubtile.y >= (M.ySize*3): return diff --git a/Scenes/TwoColumnData.gd b/Scenes/TwoColumnData.gd index 3c05eef2..0b67ac16 100644 --- a/Scenes/TwoColumnData.gd +++ b/Scenes/TwoColumnData.gd @@ -314,6 +314,7 @@ func _on_optionbutton_item_selected(indexSelected, leftText): # When pressing En "ThingListData": if is_instance_valid(inst): inst.ownership = oSelection.paintOwnership + aValueWasAdjustedSoMirrorIt = "ownership" "PlacingListData": oPlacingSettings.ownership = oSelection.paintOwnership "Door locked": diff --git a/Shaders/brightenbrush.shader b/Shaders/brightenbrush.shader new file mode 100644 index 00000000..a734f398 --- /dev/null +++ b/Shaders/brightenbrush.shader @@ -0,0 +1,9 @@ +shader_type canvas_item; +render_mode blend_mul; +uniform float brightness; + +void fragment() { + vec4 baseCol = texture(TEXTURE, UV); + if (baseCol.a == 0.0) {discard;} + COLOR = vec4(baseCol.rgb*brightness,baseCol.a); +} \ No newline at end of file diff --git a/project.godot b/project.godot index d0d85bcd..2da51d20 100644 --- a/project.godot +++ b/project.godot @@ -103,6 +103,14 @@ texture={ [input] +ui_focus_next={ +"deadzone": 0.5, +"events": [ ] +} +ui_focus_prev={ +"deadzone": 0.5, +"events": [ ] +} ui_left={ "deadzone": 0.5, "events": [ Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":14,"pressure":0.0,"pressed":false,"script":null)