From 30ec55066b3e775b6cabddf5b05c712cae0c92b4 Mon Sep 17 00:00:00 2001 From: Antti Hakkarainen Date: Wed, 8 Feb 2023 13:45:34 +0200 Subject: [PATCH] protoype world gen based on input image --- .../residential/med/med20x20res001.png | Bin 0 -> 4671 bytes .../residential/med/med20x20res001.png.import | 34 +++++++++++++ art/terrain/water.png | Bin 0 -> 2379 bytes art/terrain/water.png.import | 34 +++++++++++++ maps/tampere_10x10km_1000px.png | Bin 0 -> 20720 bytes maps/tampere_10x10km_1000px.png.import | 34 +++++++++++++ scenes/Main.tscn | 25 +++++++++- scripts/CameraZoom2D.gd | 47 +++++++++--------- scripts/Globals.gd | 7 ++- scripts/Main.gd | 24 +++++++-- scripts/World.gd | 15 ++++-- 11 files changed, 188 insertions(+), 32 deletions(-) create mode 100644 art/buildings/residential/med/med20x20res001.png create mode 100644 art/buildings/residential/med/med20x20res001.png.import create mode 100644 art/terrain/water.png create mode 100644 art/terrain/water.png.import create mode 100644 maps/tampere_10x10km_1000px.png create mode 100644 maps/tampere_10x10km_1000px.png.import diff --git a/art/buildings/residential/med/med20x20res001.png b/art/buildings/residential/med/med20x20res001.png new file mode 100644 index 0000000000000000000000000000000000000000..255095171aed6b5d2f526d1cc342f1eaefad8fad GIT binary patch literal 4671 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 literal 0 HcmV?d00001 diff --git a/art/buildings/residential/med/med20x20res001.png.import b/art/buildings/residential/med/med20x20res001.png.import new file mode 100644 index 0000000..a7733f0 --- /dev/null +++ b/art/buildings/residential/med/med20x20res001.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://byy4k72uxx7sj" +path="res://.godot/imported/med20x20res001.png-eb243a76d9b6d5226915bed21b40d302.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://art/buildings/residential/med/med20x20res001.png" +dest_files=["res://.godot/imported/med20x20res001.png-eb243a76d9b6d5226915bed21b40d302.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/art/terrain/water.png b/art/terrain/water.png new file mode 100644 index 0000000000000000000000000000000000000000..35e3116197164c89f3605076fe1f522381a016ed GIT binary patch literal 2379 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 literal 0 HcmV?d00001 diff --git a/maps/tampere_10x10km_1000px.png.import b/maps/tampere_10x10km_1000px.png.import new file mode 100644 index 0000000..8d5d39a --- /dev/null +++ b/maps/tampere_10x10km_1000px.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://b3c1bddo2an1c" +path="res://.godot/imported/tampere_10x10km_1000px.png-d109810aa82500564790bd9658dd33b4.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://maps/tampere_10x10km_1000px.png" +dest_files=["res://.godot/imported/tampere_10x10km_1000px.png-d109810aa82500564790bd9658dd33b4.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/scenes/Main.tscn b/scenes/Main.tscn index 4fba92c..6ac5b6a 100644 --- a/scenes/Main.tscn +++ b/scenes/Main.tscn @@ -1,11 +1,19 @@ -[gd_scene load_steps=8 format=3 uid="uid://ciperl36hv26g"] +[gd_scene load_steps=12 format=3 uid="uid://ciperl36hv26g"] [ext_resource type="Script" path="res://scripts/Main.gd" id="1_ysxum"] +[ext_resource type="Texture2D" uid="uid://byy4k72uxx7sj" path="res://art/buildings/residential/med/med20x20res001.png" id="2_sfv1p"] [ext_resource type="Script" path="res://scripts/Control.gd" id="3_1t1c8"] [ext_resource type="Script" path="res://scripts/World.gd" id="3_6q5ju"] [ext_resource type="Texture2D" uid="uid://dakvtfpnjuwwl" path="res://art/placeholder/outdoors.png" id="3_yddbk"] +[ext_resource type="Texture2D" uid="uid://bor3gkli3s8eg" path="res://art/terrain/water.png" id="4_i5fj4"] [ext_resource type="PackedScene" uid="uid://2we3txfr812u" path="res://scenes/Camera_zoom_2d.tscn" id="4_rx82t"] +[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_3q7ue"] +texture = ExtResource("2_sfv1p") +0:0/size_in_atlas = Vector2i(20, 20) +0:0/next_alternative_id = 2 +0:0/0 = 0 + [sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_s55i2"] texture = ExtResource("3_yddbk") 0:0/0 = 0 @@ -452,8 +460,15 @@ texture = ExtResource("3_yddbk") 14:2/size_in_atlas = Vector2i(4, 4) 14:2/0 = 0 +[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_bcy6h"] +texture = ExtResource("4_i5fj4") +0:0/0 = 0 + [sub_resource type="TileSet" id="TileSet_t3bbo"] +terrain_set_0/mode = 0 sources/1 = SubResource("TileSetAtlasSource_s55i2") +sources/0 = SubResource("TileSetAtlasSource_3q7ue") +sources/2 = SubResource("TileSetAtlasSource_bcy6h") [node name="Main" type="Node"] script = ExtResource("1_ysxum") @@ -462,6 +477,13 @@ script = ExtResource("1_ysxum") tile_set = SubResource("TileSet_t3bbo") format = 2 layer_0/name = "Buildings" +layer_1/name = "Terrain" +layer_1/enabled = true +layer_1/modulate = Color(1, 1, 1, 1) +layer_1/y_sort_enabled = false +layer_1/y_sort_origin = 0 +layer_1/z_index = 0 +layer_1/tile_data = PackedInt32Array() script = ExtResource("3_6q5ju") [node name="CameraZoom2D" parent="World" instance=ExtResource("4_rx82t")] @@ -526,6 +548,7 @@ offset_right = 8.0 offset_bottom = 8.0 [node name="DebugInfo" type="Label" parent="UILayer/Control"] +layout_mode = 0 offset_left = 568.0 offset_top = 24.0 offset_right = 928.0 diff --git a/scripts/CameraZoom2D.gd b/scripts/CameraZoom2D.gd index b04f130..e505c99 100644 --- a/scripts/CameraZoom2D.gd +++ b/scripts/CameraZoom2D.gd @@ -2,39 +2,40 @@ class_name CameraZoom2D extends Camera2D -var _zoom_level : float = 1.0 : set = _set_zoom_level -var is_dragging_camera = false +var is_panning_camera = false var tween -func _set_zoom_level(value: float) -> void: - _zoom_level = clamp(value, Globals.CAMERA_MIN_ZOOM_LEVEL, Globals.CAMERA_MAX_ZOOM_LEVEL) +func _set_camera_zoom_level(value: float) -> void: + Globals.CAMERA_ZOOM_LEVEL = clamp(value, Globals.CAMERA_MIN_ZOOM_LEVEL, Globals.CAMERA_MAX_ZOOM_LEVEL) #interpolate frames between zoom levels to make zooming look smoother tween = get_tree().create_tween() tween.tween_property( self, "zoom", - Vector2(_zoom_level, _zoom_level), + Vector2(Globals.CAMERA_ZOOM_LEVEL, Globals.CAMERA_ZOOM_LEVEL), Globals.CAMERA_ZOOM_DURATION ) + +func camera_zoom_in() -> void: + _set_camera_zoom_level(Globals.CAMERA_ZOOM_LEVEL - Globals.CAMERA_ZOOM_FACTOR) -func _unhandled_input(event): - # camera zooming - if event.is_action_pressed("camera_zoom_in"): - _set_zoom_level(_zoom_level - Globals.CAMERA_ZOOM_FACTOR) - elif event.is_action_pressed("camera_zoom_out"): - _set_zoom_level(_zoom_level + Globals.CAMERA_ZOOM_DURATION) +func camera_zoom_out() -> void: + _set_camera_zoom_level(Globals.CAMERA_ZOOM_LEVEL + Globals.CAMERA_ZOOM_DURATION) - # camera dragging - if event is InputEventMouseButton and event.button_index == MOUSE_BUTTON_LEFT: - if !is_dragging_camera and event.pressed: - is_dragging_camera = true - if is_dragging_camera and !event.pressed: - is_dragging_camera = false - if event is InputEventMouseMotion and is_dragging_camera: - if self.position != event.position: - tween = get_tree().create_tween() - tween.tween_property(self, "property", Vector2(self.position, event.position), Globals.CAMERA_ZOOM_DURATION) - else: - self.position = event.position * Globals.CAMERA_DRAG_MULTI +func _unhandled_input(event): + if event.is_action_pressed("camera_zoom_in"): + camera_zoom_in() + if event.is_action_pressed("camera_zoom_out"): + camera_zoom_out() + + if event is InputEventMouseButton and event.button_index == MOUSE_BUTTON_LEFT: + if !is_panning_camera and event.pressed: + is_panning_camera = true + if is_panning_camera and !event.pressed: + is_panning_camera = false + + if event is InputEventMouseMotion and is_panning_camera: + self.position -= event.relative * Globals.CAMERA_PAN_MULTI + diff --git a/scripts/Globals.gd b/scripts/Globals.gd index 878e59b..92a01f1 100644 --- a/scripts/Globals.gd +++ b/scripts/Globals.gd @@ -20,8 +20,11 @@ const TYPE_POWERPLANT = "powerplant" const TYPE_ROADS = "roads" const TYPE_DEMOLISH = "demolish" -const CAMERA_MIN_ZOOM_LEVEL: float = 0.5 +# camera movement settings +var CAMERA_ZOOM_LEVEL : float = 1.0 + +const CAMERA_MIN_ZOOM_LEVEL: float = 0.1 const CAMERA_MAX_ZOOM_LEVEL: float = 2.0 const CAMERA_ZOOM_FACTOR: float = 0.1 const CAMERA_ZOOM_DURATION: float = 0.1 -const CAMERA_DRAG_MULTI:float = 2.0 +const CAMERA_PAN_MULTI:float = 2.0 diff --git a/scripts/Main.gd b/scripts/Main.gd index 7e02cfe..a6ab5d6 100644 --- a/scripts/Main.gd +++ b/scripts/Main.gd @@ -8,12 +8,30 @@ extends Node -# Called when the node enters the scene tree for the first time. -func _ready(): +var world_map: TileMap + +func _init(): DisplayServer.window_set_size( Vector2i(Globals.DEFAULT_X_RES, Globals.DEFAULT_Y_RES) - ) + ) + +# Called when the node enters the scene tree for the first time. +func _ready(): + generate_terrain() + + # Called every frame. 'delta' is the elapsed time since the previous frame. func _process(_delta): pass + +func generate_terrain(): + world_map = get_node("World") + var image = Image.new() + image.load("res://maps/tampere_10x10km_1000px.png") + + for x in 1000: + for y in 1000: + # layer | position coords | tilemap id | coords of the tile at tilemap | alternative tile + if image.get_pixel(x, y) == Color(1,1,1,1): + world_map.set_cell(0, Vector2i(x, y), 2, Vector2i(0,0), 0) diff --git a/scripts/World.gd b/scripts/World.gd index db1fd1d..abcb67f 100644 --- a/scripts/World.gd +++ b/scripts/World.gd @@ -40,23 +40,32 @@ func _input(event): func place_building_to_map(): - + # layer | position coords | tilemap id | coords of the tile at tilemap | alternative tile + match building_type: Globals.TYPE_RESIDENTIAL: - tilemap = Vector2i(4,4) + tilemap = Vector2i(0,0) + set_cell(0, local_to_map(get_viewport().get_mouse_position()) , 0, tilemap, 0) Globals.TYPE_COMMERCIAL: tilemap = Vector2i(4,12) + set_cell(0, local_to_map(get_viewport().get_mouse_position()) , 1, tilemap, 0) Globals.TYPE_INDUSTRIAL: tilemap = Vector2i(4,20) + set_cell(0, local_to_map(get_viewport().get_mouse_position()) , 1, tilemap, 0) Globals.TYPE_ROADS: tilemap = Vector2i(14,2) + set_cell(0, local_to_map(get_viewport().get_mouse_position()) , 1, tilemap, 0) Globals.TYPE_DEMOLISH: tilemap = Vector2i(4,4) + set_cell(0, local_to_map(get_viewport().get_mouse_position()) , 1, tilemap, 0) Globals.TYPE_SERVICES: tilemap = Vector2i(4,8) + set_cell(0, local_to_map(get_viewport().get_mouse_position()) , 1, tilemap, 0) Globals.TYPE_SOCIAL: tilemap = Vector2i(4,0) + set_cell(0, local_to_map(get_viewport().get_mouse_position()) , 1, tilemap, 0) _: #default tilemap = Vector2i(16,16) + set_cell(0, local_to_map(get_viewport().get_mouse_position()) , 1, tilemap, 0) - set_cell(0, local_to_map(get_viewport().get_mouse_position()), 1, tilemap, 0) + # set_cell(0, local_to_map(get_viewport().get_mouse_position()) , 1, tilemap, 0)