diff --git a/nodes/GridContext.gd b/nodes/GridContext.gd index 825d15f..be55757 100644 --- a/nodes/GridContext.gd +++ b/nodes/GridContext.gd @@ -1,6 +1,6 @@ tool extends TK_Context -class_name TK_GridContext +class_name n_parent ## todo: Cell visualization. ## todo: Integration of TileMap. @@ -30,7 +30,8 @@ func try_moving(p_game_object: Node2D, p_from: Vector2, p_to: Vector2) -> bool: func register_collider(p_collider: Node) -> void: _colliders[p_collider] = null - if p_collider.connect("child_exiting_tree", self, "_on_collider_exiting_tree") != OK: + if not p_collider.is_connected("child_exiting_tree", self, "_on_collider_exiting_tree") and \ + p_collider.connect("child_exiting_tree", self, "_on_collider_exiting_tree") != OK: assert(false) func _on_collider_exiting_tree(p_collider) -> void: diff --git a/nodes/TileMapObject.gd b/nodes/TileMapObject.gd index 58b41ea..3811f5d 100644 --- a/nodes/TileMapObject.gd +++ b/nodes/TileMapObject.gd @@ -2,10 +2,13 @@ tool extends TileMap # todo: Give care about descriptor swaps being loseless / non introducing artifacts. +# todo: Prevent user from deleting or editing tile_set property. +# todo: Update it when changed. ## Dictates whether tileset collision information should be exposed to game context. export var expose_collisions: bool = true +# todo: Use Node identity instead of name. var _descriptor_name_to_id: Dictionary # String to int var _id_to_descriptor_name: Dictionary # int to String @@ -29,16 +32,26 @@ func is_path_traversible(p_game_object: Node2D, p_from: Vector2, p_to: Vector2) func _enter_tree() -> void: tile_set = TileSet.new() - get_parent().register_collider(self) + + var n_parent := get_parent() + if not n_parent is TK_Context: + return + + n_parent.register_collider(self) # It's okay to fail here for non-grid contexts. - if get_parent().connect("cell_size_changed", self, "_update_cell_size"): - _update_cell_size(get_parent().cell_size, get_parent().cell_size) - - if connect("child_entered_tree", self, "_on_child_entered_tree") != OK: + if not n_parent.is_connected("cell_size_changed", self, "_update_cell_size") and \ + n_parent.connect("cell_size_changed", self, "_update_cell_size") != OK: assert(false) - if connect("child_exiting_tree", self, "_on_child_exiting_tree") != OK: + _update_cell_size(n_parent.cell_size, n_parent.cell_size) + + if not is_connected("child_entered_tree", self, "_on_child_entered_tree") and \ + connect("child_entered_tree", self, "_on_child_entered_tree") != OK: + assert(false) + + if not is_connected("child_exiting_tree", self, "_on_child_exiting_tree") and \ + connect("child_exiting_tree", self, "_on_child_exiting_tree") != OK: assert(false) func _update_cell_size(_p_old_cell_size: Vector2, p_new_cell_size: Vector2) -> void: @@ -56,11 +69,13 @@ func _on_child_entered_tree(p_node: Node) -> void: _id_to_descriptor_name[id] = p_node.name tile_set.create_tile(id) tile_set.tile_set_texture(id, p_node.texture) + if not p_node.id.empty(): + tile_set.tile_set_name(id, p_node.id) func _on_child_exiting_tree(p_node: Node) -> void: var id := _descriptor_name_to_id[p_node.name] as int for cell in get_used_cells_by_id(id): - set_cell(cell.x, cell.y, -1) + set_cellv(cell, -1) tile_set.remove_tile(id) if not _descriptor_name_to_id.erase(p_node.name): assert(false) diff --git a/nodes/TileMapTileDescriptor.gd b/nodes/TileMapTileDescriptor.gd index 9b695c0..db1afa1 100644 --- a/nodes/TileMapTileDescriptor.gd +++ b/nodes/TileMapTileDescriptor.gd @@ -7,6 +7,10 @@ export var texture: Texture setget _set_texture # todo: More layer customizeability. export var is_solid: bool +# todo: Update TileMapObject in editor when it's changed. +export var id: String = "" + +# todo: Should work for non-grid objects. func is_traversible_for(_p_game_object: Node2D) -> bool: return not is_solid diff --git a/project.godot b/project.godot index 6f8c846..6853519 100644 --- a/project.godot +++ b/project.godot @@ -134,15 +134,15 @@ _global_script_classes=[ { "language": "GDScript", "path": "res://nodes/GameObject.gd" }, { -"base": "TK_Context", -"class": "TK_GridContext", -"language": "GDScript", -"path": "res://nodes/GridContext.gd" -}, { "base": "Node", "class": "TK_TileMapTileDescriptor", "language": "GDScript", "path": "res://nodes/TileMapTileDescriptor.gd" +}, { +"base": "TK_Context", +"class": "n_parent", +"language": "GDScript", +"path": "res://nodes/GridContext.gd" } ] _global_script_class_icons={ "BrushPrefabs": "", @@ -170,14 +170,15 @@ _global_script_class_icons={ "TK_Controller": "", "TK_FittingSprite": "", "TK_GameObject": "", -"TK_GridContext": "", -"TK_TileMapTileDescriptor": "" +"TK_TileMapTileDescriptor": "", +"n_parent": "" } [application] config/name="TochieKit" run/main_scene="res://scenes/Game.tscn" +run/low_processor_mode=true config/icon="res://icon.png" [autoload] @@ -226,6 +227,15 @@ move_left={ ] } +[input_devices] + +buffering/agile_event_flushing=true +pointing/emulate_touch_from_mouse=true + +[node] + +name_num_separator=3 + [physics] common/enable_pause_aware_picking=true @@ -233,8 +243,18 @@ common/enable_pause_aware_picking=true [rendering] quality/driver/driver_name="GLES2" +quality/intended_usage/framebuffer_allocation=1 +quality/intended_usage/framebuffer_allocation.mobile=1 2d/snapping/use_gpu_pixel_snap=true +threads/thread_model=2 vram_compression/import_etc=true vram_compression/import_etc2=false +quality/reflections/texture_array_reflections=false +quality/shading/force_vertex_shading=true +quality/shading/force_lambert_over_burley=true +quality/shading/force_blinn_over_ggx=true +quality/filters/use_nearest_mipmap_filter=true +batching/options/single_rect_fallback=true +quality/lightmapping/use_bicubic_sampling=false environment/default_clear_color=Color( 0.00784314, 0, 0.117647, 1 ) environment/default_environment="res://default_env.tres" diff --git a/scenes/Game.tscn b/scenes/Game.tscn index 9a57c5d..d6c05e3 100644 --- a/scenes/Game.tscn +++ b/scenes/Game.tscn @@ -6,11 +6,11 @@ [ext_resource path="res://nodes/GridContext.tscn" type="PackedScene" id=4] [ext_resource path="res://nodes/GameObject.tscn" type="PackedScene" id=5] [ext_resource path="res://art/tiles/brickwall.png" type="Texture" id=6] -[ext_resource path="res://nodes/TileMapObject.gd" type="Script" id=7] +[ext_resource path="res://nodes/TileMapObject.tscn" type="PackedScene" id=7] [ext_resource path="res://scenes/tiles/Brickwall.tscn" type="PackedScene" id=8] [sub_resource type="TileSet" id=1] -0/name = "" +0/name = "tk.Brickwall" 0/texture = ExtResource( 6 ) 0/tex_offset = Vector2( 0, 0 ) 0/modulate = Color( 1, 1, 1, 1 ) @@ -29,14 +29,11 @@ [node name="GridContext" parent="." instance=ExtResource( 4 )] -[node name="TileMapObject" type="TileMap" parent="GridContext"] +[node name="TileMapObject" parent="GridContext" instance=ExtResource( 7 )] scale = Vector2( 4, 4 ) tile_set = SubResource( 1 ) cell_size = Vector2( 16, 16 ) -bake_navigation = true -format = 1 -tile_data = PoolIntArray( 0, 0, 0, 1, 0, 0, 2, 0, 0, 3, 0, 0, 4, 0, 0, 5, 0, 0, 6, 0, 0, 7, 0, 0, 8, 0, 0, 9, 0, 0, 10, 0, 0, 11, 0, 0, 12, 0, 0, 13, 0, 0, 14, 0, 0, 15, 0, 0, 65536, 0, 0, 65551, 0, 0, 131072, 0, 0, 131074, 0, 0, 131085, 0, 0, 131087, 0, 0, 196608, 0, 0, 196623, 0, 0, 262144, 0, 0, 262146, 0, 0, 262157, 0, 0, 262159, 0, 0, 327680, 0, 0, 327695, 0, 0, 393216, 0, 0, 393218, 0, 0, 393219, 0, 0, 393220, 0, 0, 393221, 0, 0, 393222, 0, 0, 393223, 0, 0, 393224, 0, 0, 393225, 0, 0, 393226, 0, 0, 393227, 0, 0, 393228, 0, 0, 393229, 0, 0, 393231, 0, 0, 458752, 0, 0, 458767, 0, 0, 524288, 0, 0, 524289, 0, 0, 524290, 0, 0, 524291, 0, 0, 524292, 0, 0, 524293, 0, 0, 524294, 0, 0, 524295, 0, 0, 524296, 0, 0, 524297, 0, 0, 524298, 0, 0, 524299, 0, 0, 524300, 0, 0, 524301, 0, 0, 524302, 0, 0, 524303, 0, 0 ) -script = ExtResource( 7 ) +tile_data = PoolIntArray( 0, 0, 0, 1, 0, 0, 2, 0, 0, 3, 0, 0, 4, 0, 0, 5, 0, 0, 6, 0, 0, 7, 0, 0, 8, 0, 0, 9, 0, 0, 10, 0, 0, 11, 0, 0, 12, 0, 0, 13, 0, 0, 14, 0, 0, 15, 0, 0, 65536, 0, 0, 65551, 0, 0, 131072, 0, 0, 131087, 0, 0, 196608, 0, 0, 196623, 0, 0, 262144, 0, 0, 262159, 0, 0, 327680, 0, 0, 327695, 0, 0, 393216, 0, 0, 393231, 0, 0, 458752, 0, 0, 458767, 0, 0, 524288, 0, 0, 524289, 0, 0, 524290, 0, 0, 524291, 0, 0, 524292, 0, 0, 524293, 0, 0, 524294, 0, 0, 524295, 0, 0, 524296, 0, 0, 524297, 0, 0, 524298, 0, 0, 524299, 0, 0, 524300, 0, 0, 524301, 0, 0, 524302, 0, 0, 524303, 0, 0 ) [node name="Brickwall" parent="GridContext/TileMapObject" instance=ExtResource( 8 )] diff --git a/scenes/tiles/Brickwall.tscn b/scenes/tiles/Brickwall.tscn index 0b65570..3da5906 100644 --- a/scenes/tiles/Brickwall.tscn +++ b/scenes/tiles/Brickwall.tscn @@ -7,3 +7,4 @@ script = ExtResource( 2 ) texture = ExtResource( 1 ) is_solid = true +id = "tk.Brickwall"