From 106efecf55e29b67911d160d2386c8c9f3fd4c35 Mon Sep 17 00:00:00 2001 From: ObeseTermite Date: Mon, 15 Sep 2025 13:30:11 -0700 Subject: [PATCH] Optimizations and extra tiles/textures for the future --- combined/main.tscn | 16 +++++ globals.gd | 5 ++ logic/camera/camera.gd | 41 +++++++++++ logic/camera/camera.gd.uid | 1 + logic/mechanics/arrow/arrow.gd | 4 ++ logic/mechanics/arrow/arrow.gd.uid | 1 + logic/mechanics/item/item.gd | 7 ++ logic/mechanics/item/item.gd.uid | 1 + logic/mechanics/item/item_definition.gd | 6 ++ logic/mechanics/item/item_definition.gd.uid | 1 + logic/mechanics/item/item_definition_array.gd | 5 ++ .../item/item_definition_array.gd.uid | 1 + logic/mechanics/item/item_globals.gd | 14 ++++ logic/mechanics/item/item_globals.gd.uid | 1 + logic/world/chunk/chunk.gd | 53 +++++++++----- logic/world/chunk/chunk.gdshader | 25 +++++++ logic/world/chunk/chunk.gdshader.uid | 1 + logic/world/chunk/chunk.tscn | 6 -- logic/world/chunk/chunk_drawing.gd | 67 ++++++++++++++++++ logic/world/chunk/chunk_drawing.gd.uid | 1 + logic/world/chunk/chunk_drawing.tscn | 8 +++ logic/world/chunk/tile/tile.gd | 5 -- logic/world/chunk/tile/tile.gd.uid | 1 - logic/world/chunk/tile/tile_definition.gd | 1 - logic/world/chunk/tile/tile_globals.gd | 11 ++- logic/world/world.gd | 20 ++++++ logic/world/world.gd.uid | 1 + logic/world/world.tscn | 6 ++ project.godot | 4 +- resources/items/base_items.tres | 21 ++++++ resources/items/textures/blank_tile.png | Bin 0 -> 99 bytes .../textures/blank_tile.png.import} | 8 +-- resources/items/textures/item_atlas.png | Bin 0 -> 468 bytes .../items/textures/item_atlas.png.import | 26 +++++++ resources/misc/arrows.png | Bin 0 -> 417 bytes .../arrows.png.import} | 8 +-- resources/tiles/base_tiles.tres | 16 +++-- resources/tiles/textures/grass.png | Bin 210 -> 0 bytes resources/tiles/textures/tile_atlas.png | Bin 0 -> 426 bytes .../tiles/textures/tile_atlas.png.import | 26 +++++++ resources/tiles/textures/water.png | Bin 196 -> 0 bytes resources/tiles/tile_gradient.tres | 6 ++ 42 files changed, 377 insertions(+), 48 deletions(-) create mode 100644 combined/main.tscn create mode 100644 logic/camera/camera.gd create mode 100644 logic/camera/camera.gd.uid create mode 100644 logic/mechanics/arrow/arrow.gd create mode 100644 logic/mechanics/arrow/arrow.gd.uid create mode 100644 logic/mechanics/item/item.gd create mode 100644 logic/mechanics/item/item.gd.uid create mode 100644 logic/mechanics/item/item_definition.gd create mode 100644 logic/mechanics/item/item_definition.gd.uid create mode 100644 logic/mechanics/item/item_definition_array.gd create mode 100644 logic/mechanics/item/item_definition_array.gd.uid create mode 100644 logic/mechanics/item/item_globals.gd create mode 100644 logic/mechanics/item/item_globals.gd.uid create mode 100644 logic/world/chunk/chunk.gdshader create mode 100644 logic/world/chunk/chunk.gdshader.uid delete mode 100644 logic/world/chunk/chunk.tscn create mode 100644 logic/world/chunk/chunk_drawing.gd create mode 100644 logic/world/chunk/chunk_drawing.gd.uid create mode 100644 logic/world/chunk/chunk_drawing.tscn delete mode 100644 logic/world/chunk/tile/tile.gd delete mode 100644 logic/world/chunk/tile/tile.gd.uid create mode 100644 logic/world/world.gd create mode 100644 logic/world/world.gd.uid create mode 100644 logic/world/world.tscn create mode 100644 resources/items/base_items.tres create mode 100644 resources/items/textures/blank_tile.png rename resources/{tiles/textures/water.png.import => items/textures/blank_tile.png.import} (67%) create mode 100644 resources/items/textures/item_atlas.png create mode 100644 resources/items/textures/item_atlas.png.import create mode 100644 resources/misc/arrows.png rename resources/{tiles/textures/grass.png.import => misc/arrows.png.import} (68%) delete mode 100644 resources/tiles/textures/grass.png create mode 100644 resources/tiles/textures/tile_atlas.png create mode 100644 resources/tiles/textures/tile_atlas.png.import delete mode 100644 resources/tiles/textures/water.png create mode 100644 resources/tiles/tile_gradient.tres diff --git a/combined/main.tscn b/combined/main.tscn new file mode 100644 index 0000000..aaf400d --- /dev/null +++ b/combined/main.tscn @@ -0,0 +1,16 @@ +[gd_scene load_steps=4 format=3 uid="uid://cjs660cs0u4rk"] + +[ext_resource type="PackedScene" uid="uid://b17vn1ecnbc36" path="res://logic/world/world.tscn" id="1_tg0rs"] +[ext_resource type="Script" uid="uid://f1n37ucrb0j4" path="res://logic/camera/camera.gd" id="2_ahkbh"] +[ext_resource type="PackedScene" uid="uid://cgrgaehjqja4d" path="res://logic/world/chunk/chunk_drawing.tscn" id="3_gphrn"] + +[node name="Main" type="Node2D"] + +[node name="World" parent="." instance=ExtResource("1_tg0rs")] + +[node name="Camera2D" type="Camera2D" parent="."] +script = ExtResource("2_ahkbh") + +[node name="Chunk Drawing" parent="." node_paths=PackedStringArray("world", "camera") instance=ExtResource("3_gphrn")] +world = NodePath("../World") +camera = NodePath("../Camera2D") diff --git a/globals.gd b/globals.gd index 61510e1..847606f 100644 --- a/globals.gd +++ b/globals.gd @@ -1 +1,6 @@ extends Node + +var seed : int + +func _ready() -> void: + seed = randi() diff --git a/logic/camera/camera.gd b/logic/camera/camera.gd new file mode 100644 index 0000000..1c05b47 --- /dev/null +++ b/logic/camera/camera.gd @@ -0,0 +1,41 @@ +extends Camera2D + +class_name WorldCamera + +var last_drag_position : Vector2 + +var dragging = false + +@export var zoom_constant : float = 1.1 + +@export var min_zoom = 0.3 +@export var max_zoom = 3 + +func get_camera_rect() -> Rect2: + var pos = position + var size = get_viewport_rect().size / zoom + return Rect2(pos - size / 2, size) + +func _input(event: InputEvent) -> void: + if event is InputEventMouseButton: + if event.button_index == MOUSE_BUTTON_MIDDLE: + dragging = event.pressed + last_drag_position = get_local_mouse_position() + if event.button_index == MOUSE_BUTTON_WHEEL_DOWN: + zoom_out() + if event.button_index == MOUSE_BUTTON_WHEEL_UP: + zoom_in() + +func zoom_out(): + if zoom.x / zoom_constant > min_zoom: + zoom /= zoom_constant + +func zoom_in(): + if zoom.x * zoom_constant < max_zoom: + zoom *= zoom_constant + +func _process(delta: float) -> void: + if dragging: + var current_mouse_position = get_local_mouse_position() + position += (last_drag_position - current_mouse_position) + last_drag_position = current_mouse_position diff --git a/logic/camera/camera.gd.uid b/logic/camera/camera.gd.uid new file mode 100644 index 0000000..c15b94b --- /dev/null +++ b/logic/camera/camera.gd.uid @@ -0,0 +1 @@ +uid://f1n37ucrb0j4 diff --git a/logic/mechanics/arrow/arrow.gd b/logic/mechanics/arrow/arrow.gd new file mode 100644 index 0000000..a9ab684 --- /dev/null +++ b/logic/mechanics/arrow/arrow.gd @@ -0,0 +1,4 @@ +class_name Arrow + +var direction : Vector2i +var filter : int diff --git a/logic/mechanics/arrow/arrow.gd.uid b/logic/mechanics/arrow/arrow.gd.uid new file mode 100644 index 0000000..a719f55 --- /dev/null +++ b/logic/mechanics/arrow/arrow.gd.uid @@ -0,0 +1 @@ +uid://dlg5eb7b1xitl diff --git a/logic/mechanics/item/item.gd b/logic/mechanics/item/item.gd new file mode 100644 index 0000000..f5d2cc9 --- /dev/null +++ b/logic/mechanics/item/item.gd @@ -0,0 +1,7 @@ +class_name Item + +var id : int +var direction : Vector2i + +func _init(id : int): + self.id = id diff --git a/logic/mechanics/item/item.gd.uid b/logic/mechanics/item/item.gd.uid new file mode 100644 index 0000000..257feb9 --- /dev/null +++ b/logic/mechanics/item/item.gd.uid @@ -0,0 +1 @@ +uid://bw6aoqk7m4ter diff --git a/logic/mechanics/item/item_definition.gd b/logic/mechanics/item/item_definition.gd new file mode 100644 index 0000000..f98afed --- /dev/null +++ b/logic/mechanics/item/item_definition.gd @@ -0,0 +1,6 @@ +extends Resource + +class_name ItemDefinition + +@export var name : String +@export var base : bool = false diff --git a/logic/mechanics/item/item_definition.gd.uid b/logic/mechanics/item/item_definition.gd.uid new file mode 100644 index 0000000..b8ac8df --- /dev/null +++ b/logic/mechanics/item/item_definition.gd.uid @@ -0,0 +1 @@ +uid://shau2ou14l0t diff --git a/logic/mechanics/item/item_definition_array.gd b/logic/mechanics/item/item_definition_array.gd new file mode 100644 index 0000000..09a731a --- /dev/null +++ b/logic/mechanics/item/item_definition_array.gd @@ -0,0 +1,5 @@ +extends Resource + +class_name ItemDefinitionArray + +@export var item_definitions : Array[ItemDefinition] diff --git a/logic/mechanics/item/item_definition_array.gd.uid b/logic/mechanics/item/item_definition_array.gd.uid new file mode 100644 index 0000000..5f46bda --- /dev/null +++ b/logic/mechanics/item/item_definition_array.gd.uid @@ -0,0 +1 @@ +uid://csr0k4rp8ifm5 diff --git a/logic/mechanics/item/item_globals.gd b/logic/mechanics/item/item_globals.gd new file mode 100644 index 0000000..7a4c301 --- /dev/null +++ b/logic/mechanics/item/item_globals.gd @@ -0,0 +1,14 @@ +extends Node + +var item_definitions : Array[ItemDefinition] +var item_atlas : CompressedTexture2DArray + +const chunk_size : int = 32 +const tile_size : int = 16 + +func _init(): + + var item_definition_array : ItemDefinitionArray = preload("res://resources/items/base_items.tres") + item_definitions = item_definition_array.item_definitions + + item_atlas = preload("res://resources/items/textures/item_atlas.png") diff --git a/logic/mechanics/item/item_globals.gd.uid b/logic/mechanics/item/item_globals.gd.uid new file mode 100644 index 0000000..85d6d85 --- /dev/null +++ b/logic/mechanics/item/item_globals.gd.uid @@ -0,0 +1 @@ +uid://d3rlput1on3pt diff --git a/logic/world/chunk/chunk.gd b/logic/world/chunk/chunk.gd index 730155f..101ef68 100644 --- a/logic/world/chunk/chunk.gd +++ b/logic/world/chunk/chunk.gd @@ -1,24 +1,41 @@ -extends Node2D +class_name Chunk -var tiles : Array[Tile] -var chunk_offset : Vector2i +var tiles : Array[int] +var position : Vector2i + +var items : Dictionary[Vector2i, Item] +var arrows : Dictionary[Vector2i, Arrow] + +func _init(position : Vector2i) -> void: + self.position = position + + var noise : FastNoiseLite = FastNoiseLite.new() + noise.noise_type = FastNoiseLite.TYPE_PERLIN + noise.fractal_type = FastNoiseLite.FRACTAL_FBM + + noise.seed = Globals.seed + noise.frequency = 0.025 + + noise.fractal_octaves = 5 + noise.fractal_lacunarity = 2 + noise.fractal_gain = 0.5 + + var x : int = 0 + var y : int = 0 + + var offset : Vector2i = position * TileGlobals.chunk_size -func _init() -> void: for i in range(TileGlobals.chunk_size ** 2): - tiles.append(Tile.new()) + if x >= TileGlobals.chunk_size: + x = 0 + y += 1 + + var point_value : float = remap(noise.get_noise_2d(x+offset.x,y+offset.y), -1, 1, 0, 1) + var tile_id : int = TileGlobals.chunk_gradient.sample(point_value).r8 + + tiles.append(tile_id) + + x += 1 func get_tile(pos : Vector2i): return tiles[pos.y * TileGlobals.chunk_size + pos.x] - -func _draw() -> void: - var x : int = 0 - var y : int = 0 - - for tile in tiles: - var tile_definition : TileDefinition = TileGlobals.tile_definitions[tile.id] - draw_texture(tile_definition.texture, Vector2(x, y) * TileGlobals.tile_size) - - x += 1 - if x >= TileGlobals.chunk_size: - y += 1 - x = 0 diff --git a/logic/world/chunk/chunk.gdshader b/logic/world/chunk/chunk.gdshader new file mode 100644 index 0000000..e000c55 --- /dev/null +++ b/logic/world/chunk/chunk.gdshader @@ -0,0 +1,25 @@ +shader_type canvas_item; + +uniform float tile_count; + +const int chunk_size = 32; + +uniform int tiles[chunk_size*chunk_size]; +uniform int items[chunk_size*chunk_size]; + +uniform sampler2DArray tile_texture : filter_nearest_mipmap; +uniform sampler2DArray item_texture : filter_nearest; + +void fragment() { + float item_id = float(items[int(floor(float(chunk_size) * UV.x) + float(chunk_size) * floor(float(chunk_size) * UV.y))]); + COLOR = texture(item_texture, + vec3(mod(UV.x * float(chunk_size), 1.0), mod(UV.y * float(chunk_size), 1.0), float(item_id)) // map + ); + + if (COLOR == vec4(0,0,0,0)){ + float tile_id = float(tiles[int(floor(float(chunk_size) * UV.x) + float(chunk_size) * floor(float(chunk_size) * UV.y))]); + COLOR = texture(tile_texture, + vec3(mod(UV.x * float(chunk_size), 1.0), mod(UV.y * float(chunk_size), 1.0), float(tile_id)) // map + ); + } +} \ No newline at end of file diff --git a/logic/world/chunk/chunk.gdshader.uid b/logic/world/chunk/chunk.gdshader.uid new file mode 100644 index 0000000..71d2c7e --- /dev/null +++ b/logic/world/chunk/chunk.gdshader.uid @@ -0,0 +1 @@ +uid://bex8pyibcsyfa diff --git a/logic/world/chunk/chunk.tscn b/logic/world/chunk/chunk.tscn deleted file mode 100644 index 72da410..0000000 --- a/logic/world/chunk/chunk.tscn +++ /dev/null @@ -1,6 +0,0 @@ -[gd_scene load_steps=2 format=3 uid="uid://b5shor4eu6vsy"] - -[ext_resource type="Script" uid="uid://bgcupjxa6vqhj" path="res://logic/world/chunk/chunk.gd" id="1_kkcqc"] - -[node name="Chunk" type="Node2D"] -script = ExtResource("1_kkcqc") diff --git a/logic/world/chunk/chunk_drawing.gd b/logic/world/chunk/chunk_drawing.gd new file mode 100644 index 0000000..0574d18 --- /dev/null +++ b/logic/world/chunk/chunk_drawing.gd @@ -0,0 +1,67 @@ +extends Node2D + +@export var world : World +@export var camera : WorldCamera + +@export var chunk_shader : Shader + +var chunk_textures : Dictionary[Chunk, Sprite2D] + +func _draw(): + var camera_chunk = world.tile_pos_to_chunk_pos(Vector2i(camera.position / TileGlobals.tile_size / 2)) + + var camera_size : Vector2 = camera.get_camera_rect().size / TileGlobals.chunk_size / TileGlobals.tile_size / 2 + var adjusted_size : Vector2i = Vector2i(ceil(camera_size.x) + 2, ceil(camera_size.y) + 2) + var generation_radius = maxi(adjusted_size.x, adjusted_size.y) + + for y in range(camera_chunk.y - generation_radius, camera_chunk.y + generation_radius): + for x in range(camera_chunk.x - generation_radius, camera_chunk.x + generation_radius): + draw_chunk(world.get_chunk_at(camera_chunk + Vector2i(x,y))) + +func draw_chunk(chunk : Chunk) -> void: + var x : int = 0 + var y : int = 0 + var offset : Vector2 = chunk.position * TileGlobals.chunk_size * TileGlobals.tile_size + + if not chunk_textures.has(chunk): + var new_sprite2d : Sprite2D = Sprite2D.new() + new_sprite2d.texture = preload("res://resources/items/textures/blank_tile.png") + new_sprite2d.position = offset + new_sprite2d.scale = Vector2( + TileGlobals.chunk_size, + TileGlobals.chunk_size + ) + + var new_shader_material : ShaderMaterial = ShaderMaterial.new() + new_shader_material.shader = chunk_shader + + new_sprite2d.material = new_shader_material + + new_sprite2d.material.set_shader_parameter("tile_size", TileGlobals.tile_size) + new_sprite2d.material.set_shader_parameter("tile_count", len(TileGlobals.tile_definitions)) + new_sprite2d.material.set_shader_parameter("tile_texture", TileGlobals.tile_atlas) + + var item_array : Array[int] + + for iy in range(TileGlobals.chunk_size): + for ix in range(TileGlobals.chunk_size): + item_array.append(0) + + for item_pos in chunk.items.keys(): + item_array[item_pos.y*TileGlobals.chunk_size+item_pos.x] = chunk.items[item_pos].id + + new_sprite2d.material.set_shader_parameter("item_texture", ItemGlobals.item_atlas) + + new_sprite2d.material.set_shader_parameter("tiles", chunk.tiles) + new_sprite2d.material.set_shader_parameter("items", item_array) + + new_sprite2d.texture_repeat = CanvasItem.TEXTURE_REPEAT_ENABLED + + chunk_textures[chunk] = new_sprite2d + add_child(new_sprite2d) + + + + +func _process(delta: float) -> void: + queue_redraw() diff --git a/logic/world/chunk/chunk_drawing.gd.uid b/logic/world/chunk/chunk_drawing.gd.uid new file mode 100644 index 0000000..ef4004f --- /dev/null +++ b/logic/world/chunk/chunk_drawing.gd.uid @@ -0,0 +1 @@ +uid://dym8afqdasvrh diff --git a/logic/world/chunk/chunk_drawing.tscn b/logic/world/chunk/chunk_drawing.tscn new file mode 100644 index 0000000..ea35e28 --- /dev/null +++ b/logic/world/chunk/chunk_drawing.tscn @@ -0,0 +1,8 @@ +[gd_scene load_steps=3 format=3 uid="uid://cgrgaehjqja4d"] + +[ext_resource type="Script" uid="uid://dym8afqdasvrh" path="res://logic/world/chunk/chunk_drawing.gd" id="1_40leb"] +[ext_resource type="Shader" uid="uid://bex8pyibcsyfa" path="res://logic/world/chunk/chunk.gdshader" id="2_r2tw6"] + +[node name="Chunk Drawing" type="Node2D"] +script = ExtResource("1_40leb") +chunk_shader = ExtResource("2_r2tw6") diff --git a/logic/world/chunk/tile/tile.gd b/logic/world/chunk/tile/tile.gd deleted file mode 100644 index fde4786..0000000 --- a/logic/world/chunk/tile/tile.gd +++ /dev/null @@ -1,5 +0,0 @@ -extends Node - -class_name Tile - -var id : int = 0 diff --git a/logic/world/chunk/tile/tile.gd.uid b/logic/world/chunk/tile/tile.gd.uid deleted file mode 100644 index 4b23656..0000000 --- a/logic/world/chunk/tile/tile.gd.uid +++ /dev/null @@ -1 +0,0 @@ -uid://v68woe1hw3gc diff --git a/logic/world/chunk/tile/tile_definition.gd b/logic/world/chunk/tile/tile_definition.gd index 4803568..1a3a402 100644 --- a/logic/world/chunk/tile/tile_definition.gd +++ b/logic/world/chunk/tile/tile_definition.gd @@ -3,5 +3,4 @@ extends Resource class_name TileDefinition @export var name : String -@export var texture : Texture2D @export var barrier : bool = false diff --git a/logic/world/chunk/tile/tile_globals.gd b/logic/world/chunk/tile/tile_globals.gd index 2bba9db..0a21e65 100644 --- a/logic/world/chunk/tile/tile_globals.gd +++ b/logic/world/chunk/tile/tile_globals.gd @@ -1,9 +1,18 @@ extends Node var tile_definitions : Array[TileDefinition] -const chunk_size : int = 16 +var tile_atlas : CompressedTexture2DArray + +var chunk_gradient : Gradient + +const chunk_size : int = 32 const tile_size : int = 16 func _init(): + var tile_definition_array : TileDefinitionArray = preload("res://resources/tiles/base_tiles.tres") tile_definitions = tile_definition_array.tile_definitions + + tile_atlas = preload("res://resources/tiles/textures/tile_atlas.png") + + chunk_gradient = preload("res://resources/tiles/tile_gradient.tres") diff --git a/logic/world/world.gd b/logic/world/world.gd new file mode 100644 index 0000000..0b518ad --- /dev/null +++ b/logic/world/world.gd @@ -0,0 +1,20 @@ +extends Node + +class_name World + +var chunks : Dictionary[Vector2i, Chunk] + +func get_chunk_at(position : Vector2i) -> Chunk: + if chunks.has(position): return chunks[position] + + var new_chunk : Chunk = Chunk.new(position) + + chunks[position] = new_chunk + + return new_chunk + +func tile_pos_to_chunk_pos(position : Vector2i): + return position / TileGlobals.chunk_size + +func _ready() -> void: + pass diff --git a/logic/world/world.gd.uid b/logic/world/world.gd.uid new file mode 100644 index 0000000..d5492dc --- /dev/null +++ b/logic/world/world.gd.uid @@ -0,0 +1 @@ +uid://b2octwbo0y3gg diff --git a/logic/world/world.tscn b/logic/world/world.tscn new file mode 100644 index 0000000..3176870 --- /dev/null +++ b/logic/world/world.tscn @@ -0,0 +1,6 @@ +[gd_scene load_steps=2 format=3 uid="uid://b17vn1ecnbc36"] + +[ext_resource type="Script" uid="uid://b2octwbo0y3gg" path="res://logic/world/world.gd" id="1_3neqc"] + +[node name="World" type="Node"] +script = ExtResource("1_3neqc") diff --git a/project.godot b/project.godot index 487d92c..4c15d01 100644 --- a/project.godot +++ b/project.godot @@ -11,6 +11,7 @@ config_version=5 [application] config/name="FactoryExpansion" +run/main_scene="uid://cjs660cs0u4rk" config/features=PackedStringArray("4.4", "GL Compatibility") config/icon="res://icon.svg" @@ -18,9 +19,10 @@ config/icon="res://icon.svg" Globals="*res://globals.gd" TileGlobals="*res://logic/world/chunk/tile/tile_globals.gd" +ItemGlobals="*res://logic/mechanics/item/item_globals.gd" [rendering] -textures/canvas_textures/default_texture_filter=0 +textures/canvas_textures/default_texture_filter=3 renderer/rendering_method="gl_compatibility" renderer/rendering_method.mobile="gl_compatibility" diff --git a/resources/items/base_items.tres b/resources/items/base_items.tres new file mode 100644 index 0000000..973cf54 --- /dev/null +++ b/resources/items/base_items.tres @@ -0,0 +1,21 @@ +[gd_resource type="Resource" script_class="ItemDefinitionArray" load_steps=5 format=3 uid="uid://c6h53vbacghee"] + +[ext_resource type="Script" uid="uid://shau2ou14l0t" path="res://logic/mechanics/item/item_definition.gd" id="1_ip82l"] +[ext_resource type="Script" uid="uid://csr0k4rp8ifm5" path="res://logic/mechanics/item/item_definition_array.gd" id="1_nowd5"] + +[sub_resource type="Resource" id="Resource_wfoic"] +script = ExtResource("1_ip82l") +name = "Wood" +base = true +metadata/_custom_type_script = "uid://shau2ou14l0t" + +[sub_resource type="Resource" id="Resource_a0wvc"] +script = ExtResource("1_ip82l") +name = "Iron" +base = true +metadata/_custom_type_script = "uid://shau2ou14l0t" + +[resource] +script = ExtResource("1_nowd5") +item_definitions = Array[ExtResource("1_ip82l")]([SubResource("Resource_wfoic"), SubResource("Resource_a0wvc")]) +metadata/_custom_type_script = "uid://csr0k4rp8ifm5" diff --git a/resources/items/textures/blank_tile.png b/resources/items/textures/blank_tile.png new file mode 100644 index 0000000000000000000000000000000000000000..a449decfda83ba650f4418e380e7f90a7f528cd7 GIT binary patch literal 99 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|WIbIRLo9le v|NQ^|zn+bYL0EN`JFkRk!j*=DDGUtRr&wf`KP(LfDrE3<^>bP0l+XkKc$*s_ literal 0 HcmV?d00001 diff --git a/resources/tiles/textures/water.png.import b/resources/items/textures/blank_tile.png.import similarity index 67% rename from resources/tiles/textures/water.png.import rename to resources/items/textures/blank_tile.png.import index edd9669..a6dbe72 100644 --- a/resources/tiles/textures/water.png.import +++ b/resources/items/textures/blank_tile.png.import @@ -2,16 +2,16 @@ importer="texture" type="CompressedTexture2D" -uid="uid://dhj4m7xfgfr8r" -path="res://.godot/imported/water.png-0df44c59650310c522d02ac1e8165335.ctex" +uid="uid://bwfn65l5xb6hh" +path="res://.godot/imported/blank_tile.png-fabd4206ee3de9b98233abcb4fd23e7e.ctex" metadata={ "vram_texture": false } [deps] -source_file="res://resources/tiles/textures/water.png" -dest_files=["res://.godot/imported/water.png-0df44c59650310c522d02ac1e8165335.ctex"] +source_file="res://resources/items/textures/blank_tile.png" +dest_files=["res://.godot/imported/blank_tile.png-fabd4206ee3de9b98233abcb4fd23e7e.ctex"] [params] diff --git a/resources/items/textures/item_atlas.png b/resources/items/textures/item_atlas.png new file mode 100644 index 0000000000000000000000000000000000000000..a47fe340db883c3c3639738435b1d2b8ebf8389c GIT binary patch literal 468 zcmV;_0W1EAP)Px$j!8s8R7i>CmLX5WKp2Lf5)8j!4uP)e44Ii*f?0w{Qa z-Q%qT0t#@ozNYK_*AKn!MJ;WlxPPhDg*Zvo{_YL{506jeSpm$Ac(J&CGJS!GPx$TS-JgR9J<*m%9zZFc5|>$bA|L2@a1Ayshqv)IZE2iz_wvu>4 zhYtg7Qqn($4+FTo9&t3Y2y4Tck^`0pyN6&*1`rN?NJl0a{kQ~tP^>>qeA}UIIk06& z?HO2GCym0)Nkn{1Ocs%1h%YruC>*zu&735}M?@1=#FsvCQgrtKL40H?VwlAgiQf?Q zO;G!oSrnlx9*zG4Dg$y~a=%5ajo%XS7_>ZN0lsTG{$CSsMzM_E3~EHwgRAFi00000 LNkvXXu0mjf4r#Dm literal 0 HcmV?d00001 diff --git a/resources/tiles/textures/grass.png.import b/resources/misc/arrows.png.import similarity index 68% rename from resources/tiles/textures/grass.png.import rename to resources/misc/arrows.png.import index e83442f..920079d 100644 --- a/resources/tiles/textures/grass.png.import +++ b/resources/misc/arrows.png.import @@ -2,16 +2,16 @@ importer="texture" type="CompressedTexture2D" -uid="uid://31njex15xgpr" -path="res://.godot/imported/grass.png-b9f264aaa8345ec83a51549170f38e82.ctex" +uid="uid://d1nsg6nkifsuy" +path="res://.godot/imported/arrows.png-f4154ffb8ad82a4cead337521dc1b0a8.ctex" metadata={ "vram_texture": false } [deps] -source_file="res://resources/tiles/textures/grass.png" -dest_files=["res://.godot/imported/grass.png-b9f264aaa8345ec83a51549170f38e82.ctex"] +source_file="res://resources/misc/arrows.png" +dest_files=["res://.godot/imported/arrows.png-f4154ffb8ad82a4cead337521dc1b0a8.ctex"] [params] diff --git a/resources/tiles/base_tiles.tres b/resources/tiles/base_tiles.tres index ca61647..90c8965 100644 --- a/resources/tiles/base_tiles.tres +++ b/resources/tiles/base_tiles.tres @@ -1,25 +1,27 @@ -[gd_resource type="Resource" script_class="TileDefinitionArray" load_steps=7 format=3 uid="uid://7a03sai1i6fd"] +[gd_resource type="Resource" script_class="TileDefinitionArray" load_steps=6 format=3 uid="uid://7a03sai1i6fd"] [ext_resource type="Script" uid="uid://18w861lh0xyt" path="res://logic/world/chunk/tile/tile_definition_array.gd" id="1_58vwe"] [ext_resource type="Script" uid="uid://cp4p3pk48mwqx" path="res://logic/world/chunk/tile/tile_definition.gd" id="2_12vs5"] -[ext_resource type="Texture2D" uid="uid://31njex15xgpr" path="res://resources/tiles/textures/grass.png" id="3_12vs5"] -[ext_resource type="Texture2D" uid="uid://dhj4m7xfgfr8r" path="res://resources/tiles/textures/water.png" id="4_edm72"] [sub_resource type="Resource" id="Resource_c6abn"] script = ExtResource("2_12vs5") name = "Water" -texture = ExtResource("4_edm72") -barrier = false +barrier = true metadata/_custom_type_script = "uid://cp4p3pk48mwqx" [sub_resource type="Resource" id="Resource_edm72"] script = ExtResource("2_12vs5") name = "Grass" -texture = ExtResource("3_12vs5") barrier = false metadata/_custom_type_script = "uid://cp4p3pk48mwqx" +[sub_resource type="Resource" id="Resource_58vwe"] +script = ExtResource("2_12vs5") +name = "Stone" +barrier = true +metadata/_custom_type_script = "uid://cp4p3pk48mwqx" + [resource] script = ExtResource("1_58vwe") -tile_definitions = Array[ExtResource("2_12vs5")]([SubResource("Resource_c6abn"), SubResource("Resource_edm72")]) +tile_definitions = Array[ExtResource("2_12vs5")]([SubResource("Resource_c6abn"), SubResource("Resource_edm72"), SubResource("Resource_58vwe")]) metadata/_custom_type_script = "uid://18w861lh0xyt" diff --git a/resources/tiles/textures/grass.png b/resources/tiles/textures/grass.png deleted file mode 100644 index fff7e60cc30614bd02cea30a1bc0e29bd0c0a396..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 210 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|dOTemLo9lG zgEk5tP~dRsIx|6alT%iBvEB3nHtFC(_a}@i1wPDYKXv<+RPCj|F;60=q$?Sny!iaR zY@;#PD}E`T8rkHK7mc0klY6+758PeQB3r<2EM&B8ueI{SDZDc$3T#~1yTjPwO@{JA zsm07f$vcY@EcX|Tu(Uk{8@c04o-=q?6NS3j3^ HP6ef+ diff --git a/resources/tiles/textures/tile_atlas.png b/resources/tiles/textures/tile_atlas.png new file mode 100644 index 0000000000000000000000000000000000000000..d8e2e11c1c6881a24f750dda1eafd5a049e9cfa4 GIT binary patch literal 426 zcmV;b0agBqP)Px$WJyFpR7i=nm9cIDF${+PL#IB#O&u5z65Dlv6$y1mV&FY^5FVi~!N%M-Xa~BT zgl=R)%q-W*S6|{dPN1I@$rmTmZ(nQ|_-Hx+sE!9**ISTHT-RIAM>YVgZaZ8~cf7v6 zAcW>0x9`Dw777X=ge%x(b=!G+v4A+10NUo<+mqRJ;2Xs*YvMz2@t4!xv-zHd$!yv$ zmlB9)S;D;&$~xa8TRJyi)ZX6r*H83JQEm1e7m^Z8bv&S6eu_TpGy3-$h#}R0iyI98 zrU0~eu2Gs#CJ1zKebU(!(VSoaS}WBAYT348sRzRJgf#J%Cq(dI$bPg2MkG)prO5T>Lo9la z2A$+Rpul4ssGgu(mvde9hoNtILhHBGkfjcvGD5vQI-O*mbKK|`W=PV_&}=rl7*uy8 zgV{mhAdi*fVU-OEQJcii2jty(f=STajVyLv9NN5Ywc54`5ACm sg`BJnu*wK!Z#X;IV3psb|NJkRTFqR_55Lmp1G