From 41654c78c737550af17bac5c7bae09348bc5286e Mon Sep 17 00:00:00 2001 From: wjsjwr Date: Thu, 21 Nov 2024 23:33:49 +0800 Subject: [PATCH] Tile Map hover --- lab.tscn | 290 ++++++++++++++++++++++++++++++++++++++++++++- project.godot | 6 +- scripts/TestMap.cs | 35 ++++++ 3 files changed, 327 insertions(+), 4 deletions(-) create mode 100644 scripts/TestMap.cs diff --git a/lab.tscn b/lab.tscn index 9caf033..f2ecd9b 100644 --- a/lab.tscn +++ b/lab.tscn @@ -1,7 +1,8 @@ -[gd_scene load_steps=6 format=4 uid="uid://chkhsro6w06rg"] +[gd_scene load_steps=10 format=4 uid="uid://chkhsro6w06rg"] [ext_resource type="Texture2D" uid="uid://chqegsqdgeq34" path="res://temp_res/kenney_tiny-town/Tilemap/tilemap_packed.png" id="1_qt51n"] [ext_resource type="Texture2D" uid="uid://e1wpflj415hp" path="res://temp_res/kenney_tiny-dungeon/Tilemap/tilemap_packed.png" id="1_yu0wa"] +[ext_resource type="Script" path="res://scripts/TestMap.cs" id="3_mca7j"] [sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_s736i"] texture = ExtResource("1_yu0wa") @@ -277,8 +278,291 @@ texture = ExtResource("1_qt51n") sources/0 = SubResource("TileSetAtlasSource_s736i") sources/1 = SubResource("TileSetAtlasSource_ltoth") +[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_fufp2"] +texture = ExtResource("1_yu0wa") +0:0/0 = 0 +1:0/0 = 0 +2:0/0 = 0 +3:0/0 = 0 +4:0/0 = 0 +5:0/0 = 0 +6:0/0 = 0 +7:0/0 = 0 +8:0/0 = 0 +9:0/0 = 0 +10:0/0 = 0 +11:0/0 = 0 +0:1/0 = 0 +1:1/0 = 0 +2:1/0 = 0 +3:1/0 = 0 +4:1/0 = 0 +5:1/0 = 0 +6:1/0 = 0 +7:1/0 = 0 +8:1/0 = 0 +9:1/0 = 0 +10:1/0 = 0 +11:1/0 = 0 +0:2/0 = 0 +1:2/0 = 0 +2:2/0 = 0 +3:2/0 = 0 +4:2/0 = 0 +5:2/0 = 0 +6:2/0 = 0 +7:2/0 = 0 +8:2/0 = 0 +9:2/0 = 0 +10:2/0 = 0 +11:2/0 = 0 +0:3/0 = 0 +1:3/0 = 0 +2:3/0 = 0 +3:3/0 = 0 +4:3/0 = 0 +5:3/0 = 0 +6:3/0 = 0 +7:3/0 = 0 +8:3/0 = 0 +9:3/0 = 0 +10:3/0 = 0 +11:3/0 = 0 +0:4/0 = 0 +1:4/0 = 0 +2:4/0 = 0 +3:4/0 = 0 +4:4/0 = 0 +5:4/0 = 0 +6:4/0 = 0 +7:4/0 = 0 +8:4/0 = 0 +9:4/0 = 0 +10:4/0 = 0 +11:4/0 = 0 +0:5/0 = 0 +1:5/0 = 0 +2:5/0 = 0 +3:5/0 = 0 +4:5/0 = 0 +5:5/0 = 0 +6:5/0 = 0 +7:5/0 = 0 +8:5/0 = 0 +9:5/0 = 0 +10:5/0 = 0 +11:5/0 = 0 +0:6/0 = 0 +1:6/0 = 0 +2:6/0 = 0 +3:6/0 = 0 +4:6/0 = 0 +5:6/0 = 0 +6:6/0 = 0 +7:6/0 = 0 +8:6/0 = 0 +9:6/0 = 0 +10:6/0 = 0 +11:6/0 = 0 +0:7/0 = 0 +1:7/0 = 0 +2:7/0 = 0 +3:7/0 = 0 +4:7/0 = 0 +5:7/0 = 0 +6:7/0 = 0 +7:7/0 = 0 +8:7/0 = 0 +9:7/0 = 0 +10:7/0 = 0 +11:7/0 = 0 +0:8/0 = 0 +1:8/0 = 0 +2:8/0 = 0 +3:8/0 = 0 +4:8/0 = 0 +5:8/0 = 0 +6:8/0 = 0 +7:8/0 = 0 +8:8/0 = 0 +9:8/0 = 0 +10:8/0 = 0 +11:8/0 = 0 +0:9/0 = 0 +1:9/0 = 0 +2:9/0 = 0 +3:9/0 = 0 +4:9/0 = 0 +5:9/0 = 0 +6:9/0 = 0 +7:9/0 = 0 +8:9/0 = 0 +9:9/0 = 0 +10:9/0 = 0 +11:9/0 = 0 +0:10/0 = 0 +1:10/0 = 0 +2:10/0 = 0 +3:10/0 = 0 +4:10/0 = 0 +5:10/0 = 0 +6:10/0 = 0 +7:10/0 = 0 +8:10/0 = 0 +9:10/0 = 0 +10:10/0 = 0 +11:10/0 = 0 + +[sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_nuiiq"] +texture = ExtResource("1_qt51n") +0:0/0 = 0 +1:0/0 = 0 +2:0/0 = 0 +3:0/0 = 0 +4:0/0 = 0 +5:0/0 = 0 +6:0/0 = 0 +7:0/0 = 0 +8:0/0 = 0 +9:0/0 = 0 +10:0/0 = 0 +11:0/0 = 0 +0:1/0 = 0 +1:1/0 = 0 +2:1/0 = 0 +3:1/0 = 0 +4:1/0 = 0 +5:1/0 = 0 +6:1/0 = 0 +7:1/0 = 0 +8:1/0 = 0 +9:1/0 = 0 +10:1/0 = 0 +11:1/0 = 0 +0:2/0 = 0 +1:2/0 = 0 +2:2/0 = 0 +3:2/0 = 0 +4:2/0 = 0 +5:2/0 = 0 +6:2/0 = 0 +7:2/0 = 0 +8:2/0 = 0 +9:2/0 = 0 +10:2/0 = 0 +11:2/0 = 0 +0:3/0 = 0 +1:3/0 = 0 +2:3/0 = 0 +3:3/0 = 0 +4:3/0 = 0 +5:3/0 = 0 +6:3/0 = 0 +7:3/0 = 0 +8:3/0 = 0 +9:3/0 = 0 +10:3/0 = 0 +11:3/0 = 0 +0:4/0 = 0 +1:4/0 = 0 +2:4/0 = 0 +3:4/0 = 0 +4:4/0 = 0 +5:4/0 = 0 +6:4/0 = 0 +7:4/0 = 0 +8:4/0 = 0 +9:4/0 = 0 +10:4/0 = 0 +11:4/0 = 0 +0:5/0 = 0 +1:5/0 = 0 +2:5/0 = 0 +3:5/0 = 0 +4:5/0 = 0 +5:5/0 = 0 +6:5/0 = 0 +7:5/0 = 0 +8:5/0 = 0 +9:5/0 = 0 +10:5/0 = 0 +11:5/0 = 0 +0:6/0 = 0 +1:6/0 = 0 +2:6/0 = 0 +3:6/0 = 0 +4:6/0 = 0 +5:6/0 = 0 +6:6/0 = 0 +7:6/0 = 0 +8:6/0 = 0 +9:6/0 = 0 +10:6/0 = 0 +11:6/0 = 0 +0:7/0 = 0 +1:7/0 = 0 +2:7/0 = 0 +3:7/0 = 0 +4:7/0 = 0 +5:7/0 = 0 +6:7/0 = 0 +7:7/0 = 0 +8:7/0 = 0 +9:7/0 = 0 +10:7/0 = 0 +11:7/0 = 0 +0:8/0 = 0 +1:8/0 = 0 +2:8/0 = 0 +3:8/0 = 0 +4:8/0 = 0 +5:8/0 = 0 +6:8/0 = 0 +7:8/0 = 0 +8:8/0 = 0 +9:8/0 = 0 +10:8/0 = 0 +11:8/0 = 0 +0:9/0 = 0 +1:9/0 = 0 +2:9/0 = 0 +3:9/0 = 0 +4:9/0 = 0 +5:9/0 = 0 +6:9/0 = 0 +7:9/0 = 0 +8:9/0 = 0 +9:9/0 = 0 +10:9/0 = 0 +11:9/0 = 0 +0:10/0 = 0 +1:10/0 = 0 +2:10/0 = 0 +3:10/0 = 0 +4:10/0 = 0 +5:10/0 = 0 +6:10/0 = 0 +7:10/0 = 0 +8:10/0 = 0 +9:10/0 = 0 +10:10/0 = 0 +11:10/0 = 0 + +[sub_resource type="TileSet" id="TileSet_4gmnq"] +sources/0 = SubResource("TileSetAtlasSource_fufp2") +sources/1 = SubResource("TileSetAtlasSource_nuiiq") + [node name="Lab" type="Node2D"] -[node name="TileMapLayer" type="TileMapLayer" parent="."] -tile_map_data = PackedByteArray("AAAEAAMAAAAAAAAAAAAFAAMAAAAAAAAAAAAFAAQAAAAAAAAAAAAGAAQAAAAAAAAAAAAHAAQAAAAAAAAAAAAIAAQAAAAAAAAAAAAJAAUAAAAAAAAAAAAKAAUAAAAAAAAAAAALAAUAAAAAAAAAAAAMAAUAAAAAAAAAAAAMAAYAAAAAAAAAAAAMAAcAAAAAAAAAAAANAAcAAAAAAAAAAAAOAAgAAAAAAAAAAAAPAAkAAAAAAAAAAAAQAAoAAAAAAAAAAAARAAsAAAAAAAAAAAASAAsAAAAAAAAAAAATAAwAAAAAAAAAAAAUAA0AAAAAAAAAAAAVAA4AAAAAAAAAAAAiABsAAAADAAIAAAAjABsAAAADAAIAAAAkABsAAAADAAIAAAAlABsAAAADAAIAAAAmABsAAAADAAIAAAAiABoAAAADAAIAAAAjABoAAAADAAIAAAAkABoAAAADAAIAAAAlABoAAAADAAIAAAAmABoAAAADAAIAAAAnABoAAAADAAIAAAAnABsAAAADAAIAAAA=") +[node name="TestMap" type="TileMapLayer" parent="."] +scale = Vector2(10, 10) +tile_map_data = PackedByteArray("AAAAAAAAAAAGAAMAAAABAAAAAAAGAAMAAAACAAAAAAAGAAMAAAADAAAAAAAGAAMAAAAEAAAAAAAGAAMAAAAFAAAAAAAGAAMAAAAGAAAAAAAGAAMAAAAGAAEAAAAGAAMAAAAGAAIAAAAGAAMAAAAGAAMAAAAGAAMAAAAFAAMAAAAGAAMAAAAEAAMAAAAGAAMAAAADAAMAAAAGAAMAAAACAAMAAAAGAAMAAAABAAMAAAAGAAMAAAAAAAMAAAAGAAMAAAAAAAEAAAABAAQAAAABAAEAAAAAAAYAAAADAAEAAAAAAAYAAAACAAEAAAABAAQAAAAEAAEAAAABAAQAAAAAAAIAAAABAAQAAAABAAIAAAAAAAYAAAACAAIAAAABAAQAAAAEAAIAAAABAAQAAAADAAIAAAAAAAYAAAAFAAIAAAAAAAYAAAAFAAEAAAAAAAYAAAAHAAAAAAALAAYAAAAHAAEAAAALAAYAAAAHAAIAAAALAAYAAAAHAAMAAAALAAYAAAAHAAQAAAALAAcAAAAGAAQAAAAKAAUAAAAFAAQAAAAKAAUAAAAEAAQAAAAKAAUAAAADAAQAAAAKAAUAAAACAAQAAAAKAAUAAAABAAQAAAAKAAUAAAAAAAQAAAAKAAUAAAA=") tile_set = SubResource("TileSet_8aks8") +collision_visibility_mode = 1 + +[node name="Highlight" type="TileMapLayer" parent="."] +scale = Vector2(10, 10) +tile_map_data = PackedByteArray("AAAAAAAAAAACAAUAAAABAAAAAAACAAUAAAACAAAAAAACAAUAAAADAAAAAAACAAUAAAAEAAAAAAACAAUAAAAFAAAAAAACAAUAAAAGAAAAAAACAAUAAAAGAAEAAAACAAUAAAAFAAEAAAACAAUAAAAEAAEAAAACAAUAAAADAAEAAAACAAUAAAACAAEAAAACAAUAAAABAAEAAAACAAUAAAAAAAEAAAACAAUAAAAAAAIAAAACAAUAAAABAAIAAAACAAUAAAACAAIAAAACAAUAAAADAAIAAAACAAUAAAAEAAIAAAACAAUAAAAFAAIAAAACAAUAAAAGAAIAAAACAAUAAAAGAAMAAAACAAUAAAAFAAMAAAACAAUAAAAEAAMAAAACAAUAAAADAAMAAAACAAUAAAACAAMAAAACAAUAAAABAAMAAAACAAUAAAAAAAMAAAACAAUAAAA=") +tile_set = SubResource("TileSet_4gmnq") +collision_visibility_mode = 1 +script = ExtResource("3_mca7j") diff --git a/project.godot b/project.godot index 6424709..609a436 100644 --- a/project.godot +++ b/project.godot @@ -11,7 +11,7 @@ config_version=5 [application] config/name="导师模拟器" -run/main_scene="res://node_2d.tscn" +run/main_scene="res://lab.tscn" config/features=PackedStringArray("4.3", "C#", "GL Compatibility") config/icon="res://icon.svg" @@ -50,3 +50,7 @@ dialogic_default_action={ , Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":0,"pressure":0.0,"pressed":false,"script":null) ] } + +[rendering] + +textures/canvas_textures/default_texture_filter=0 diff --git a/scripts/TestMap.cs b/scripts/TestMap.cs new file mode 100644 index 0000000..a7a195f --- /dev/null +++ b/scripts/TestMap.cs @@ -0,0 +1,35 @@ +using Godot; +using System; + +public partial class TestMap : TileMapLayer +{ + /// + /// The last cell that was highlighted. Used to avoid unnecessary updates. + /// + private Vector2I lastHighlightCell; + private readonly Vector2I highlightTileCoord = new(0, 5); + private readonly Vector2I vector2INegOne = new(-1, -1); + // Called when the node enters the scene tree for the first time. + public override void _Ready() + { + lastHighlightCell = vector2INegOne; + } + + // Called every frame. 'delta' is the elapsed time since the previous frame. + public override void _Process(double delta) + { + Vector2 mousePos = GetLocalMousePosition(); + Vector2I cell = LocalToMap(mousePos); + + if (cell != lastHighlightCell) + { + if (lastHighlightCell != vector2INegOne) + { + EraseCell(lastHighlightCell); + } + lastHighlightCell = cell; + SetCell(cell, 0, highlightTileCoord); + GD.Print("Mouse is over cell: ", cell); + } + } +}