grid map/相机位置钳制/pixel perfect配置/参考分辨率制定

master
chendian 2 years ago
parent 752a67622d
commit 0f2aebd967

@ -44,7 +44,11 @@ MetSys="*res://addons/MetroidvaniaSystem/Nodes/Singleton.tscn"
[display]
window/size/viewport_width=640
window/size/viewport_height=360
window/size/always_on_top=true
window/stretch/mode="canvas_items"
window/stretch/scale_mode="integer"
[editor_plugins]
@ -77,6 +81,12 @@ texture={
"roughness/mode": 0,
"roughness/src_normal": ""
}
MagicaVoxel.With.Extensions.To.Mesh={
"FirstKeyframeOnly": true,
"GreedyMeshGenerator": true,
"Scale": 0.02,
"SnapToGround": false
}
[input]

@ -1,18 +0,0 @@
[remap]
importer="MagicaVoxel.With.Extensions.To.Mesh"
type="Mesh"
uid="uid://cap7t5iwpjpi2"
path="res://.godot/imported/levelground0000.vox-0f7ad0ea1b84e847bee0fa9cfb6f526b.mesh"
[deps]
source_file="res://resource/level/levelground0000.vox"
dest_files=["res://.godot/imported/levelground0000.vox-0f7ad0ea1b84e847bee0fa9cfb6f526b.mesh"]
[params]
Scale=0.1
GreedyMeshGenerator=true
SnapToGround=false
FirstKeyframeOnly=true

@ -0,0 +1,18 @@
[remap]
importer="MagicaVoxel.With.Extensions.To.Mesh"
type="Mesh"
uid="uid://caii2ypk4lb1k"
path="res://.godot/imported/block_center.vox-174afe624f8f28740a980e749fa5cb81.mesh"
[deps]
source_file="res://resource/mesh_level/block_center.vox"
dest_files=["res://.godot/imported/block_center.vox-174afe624f8f28740a980e749fa5cb81.mesh"]
[params]
Scale=0.02
GreedyMeshGenerator=true
SnapToGround=false
FirstKeyframeOnly=true

@ -0,0 +1,18 @@
[remap]
importer="MagicaVoxel.With.Extensions.To.Mesh"
type="Mesh"
uid="uid://c6g1c31dd86yp"
path="res://.godot/imported/block_corner.vox-f69c0349b9af8b9ce9744df0e32de2d4.mesh"
[deps]
source_file="res://resource/mesh_level/block_corner.vox"
dest_files=["res://.godot/imported/block_corner.vox-f69c0349b9af8b9ce9744df0e32de2d4.mesh"]
[params]
Scale=0.02
GreedyMeshGenerator=true
SnapToGround=false
FirstKeyframeOnly=true

@ -0,0 +1,18 @@
[remap]
importer="MagicaVoxel.With.Extensions.To.Mesh"
type="Mesh"
uid="uid://d1awgblbh4vmq"
path="res://.godot/imported/block_edge.vox-0697c9a463d7f84082eb6b2aa243a538.mesh"
[deps]
source_file="res://resource/mesh_level/block_edge.vox"
dest_files=["res://.godot/imported/block_edge.vox-0697c9a463d7f84082eb6b2aa243a538.mesh"]
[params]
Scale=0.02
GreedyMeshGenerator=true
SnapToGround=false
FirstKeyframeOnly=false

File diff suppressed because one or more lines are too long

@ -0,0 +1,16 @@
[gd_scene load_steps=4 format=3 uid="uid://b3rp0a5do2mm6"]
[ext_resource type="ArrayMesh" uid="uid://caii2ypk4lb1k" path="res://resource/mesh_level/block_center.vox" id="1_8nl8s"]
[ext_resource type="ArrayMesh" uid="uid://c6g1c31dd86yp" path="res://resource/mesh_level/block_corner.vox" id="2_870el"]
[ext_resource type="ArrayMesh" uid="uid://d1awgblbh4vmq" path="res://resource/mesh_level/block_edge.vox" id="3_0q8sx"]
[node name="MeshLibrary" type="Node3D"]
[node name="BlockCenter" type="MeshInstance3D" parent="."]
mesh = ExtResource("1_8nl8s")
[node name="BlockCorner" type="MeshInstance3D" parent="."]
mesh = ExtResource("2_870el")
[node name="BlockEdge" type="MeshInstance3D" parent="."]
mesh = ExtResource("3_0q8sx")

@ -1,8 +1,7 @@
[gd_scene load_steps=12 format=3 uid="uid://eoydwrunmm5n"]
[gd_scene load_steps=10 format=3 uid="uid://eoydwrunmm5n"]
[ext_resource type="Script" path="res://script/manager/game_manager.gd" id="1_q2t80"]
[ext_resource type="ArrayMesh" uid="uid://cap7t5iwpjpi2" path="res://resource/level/levelground0000.vox" id="1_u51ir"]
[ext_resource type="Script" path="res://scene/level_manager.gd" id="2_ewhkj"]
[ext_resource type="Script" path="res://script/manager/level_manager.gd" id="2_ewhkj"]
[ext_resource type="Script" path="res://script/manager/character_manager.gd" id="4_oonkb"]
[ext_resource type="Script" path="res://script/manager/camera_manager.gd" id="4_yqiun"]
[ext_resource type="Script" path="res://script/editor_tool/editor_tool.gd" id="5_n3qhi"]
@ -11,9 +10,6 @@
[ext_resource type="Script" path="res://script/manager/effect_manager.gd" id="8_0jv87"]
[ext_resource type="Texture2D" uid="uid://bjv7f83tdgq17" path="res://render/texture/shape/explodeDecal.png" id="9_4x7bs"]
[sub_resource type="ConcavePolygonShape3D" id="ConcavePolygonShape3D_2mxa4"]
data = PackedVector3Array(-6.4, 0, -6.4, -3.2, 0, -6.4, -3.2, 0, 6.4, -3.2, 0, 6.4, -6.4, 0, 6.4, -6.4, 0, -6.4, -3.2, 0, 3.2, 6.4, 0, 3.2, 6.4, 0, 6.4, 6.4, 0, 6.4, -3.2, 0, 6.4, -3.2, 0, 3.2, -3.2, 0, -3.2, 3.2, 0, -3.2, 3.2, 0, 3.2, 3.2, 0, 3.2, -3.2, 0, 3.2, -3.2, 0, -3.2, -3.2, 0, -6.4, 6.4, 0, -6.4, 6.4, 0, -3.2, 6.4, 0, -3.2, -3.2, 0, -3.2, -3.2, 0, -6.4, 3.2, 0, -3.2, 6.4, 0, -3.2, 6.4, 0, 3.2, 6.4, 0, 3.2, 3.2, 0, 3.2, 3.2, 0, -3.2, -3.2, -0.1, 6.4, -3.2, -0.1, -6.4, -6.4, -0.1, -6.4, -6.4, -0.1, -6.4, -6.4, -0.1, 6.4, -3.2, -0.1, 6.4, 6.4, -0.1, 6.4, 6.4, -0.1, 3.2, -3.2, -0.1, 3.2, -3.2, -0.1, 3.2, -3.2, -0.1, 6.4, 6.4, -0.1, 6.4, 3.2, -0.1, 3.2, 3.2, -0.1, -3.2, -3.2, -0.1, -3.2, -3.2, -0.1, -3.2, -3.2, -0.1, 3.2, 3.2, -0.1, 3.2, 6.4, -0.1, -3.2, 6.4, -0.1, -6.4, -3.2, -0.1, -6.4, -3.2, -0.1, -6.4, -3.2, -0.1, -3.2, 6.4, -0.1, -3.2, 6.4, -0.1, 3.2, 6.4, -0.1, -3.2, 3.2, -0.1, -3.2, 3.2, -0.1, -3.2, 3.2, -0.1, 3.2, 6.4, -0.1, 3.2, -6.4, 0, -6.4, -6.4, 0, 6.4, -6.4, -0.1, 6.4, -6.4, -0.1, 6.4, -6.4, -0.1, -6.4, -6.4, 0, -6.4, 6.4, 0, -6.4, 6.4, -0.1, -6.4, 6.4, -0.1, 6.4, 6.4, -0.1, 6.4, 6.4, 0, 6.4, 6.4, 0, -6.4, -6.4, -0.1, 6.4, -6.4, 0, 6.4, 6.4, 0, 6.4, 6.4, 0, 6.4, 6.4, -0.1, 6.4, -6.4, -0.1, 6.4, 6.4, 0, -6.4, -6.4, 0, -6.4, -6.4, -0.1, -6.4, -6.4, -0.1, -6.4, 6.4, -0.1, -6.4, 6.4, 0, -6.4)
[node name="Root" type="Node3D"]
[node name="GameManager" type="Node3D" parent="."]
@ -22,31 +18,16 @@ script = ExtResource("1_q2t80")
[node name="LevelManager" type="Node3D" parent="GameManager"]
script = ExtResource("2_ewhkj")
[node name="DirectionalLight3D" type="DirectionalLight3D" parent="GameManager/LevelManager"]
transform = Transform3D(0.707106, -0.5, 0.5, 0, 0.707107, 0.707107, -0.707106, -0.5, 0.5, 0, 0, 5.42268)
shadow_enabled = true
shadow_blur = 0.0
[node name="Levelground0000" type="MeshInstance3D" parent="GameManager/LevelManager"]
mesh = ExtResource("1_u51ir")
skeleton = NodePath("../../..")
[node name="StaticBody3D" type="StaticBody3D" parent="GameManager/LevelManager/Levelground0000"]
[node name="CollisionShape3D" type="CollisionShape3D" parent="GameManager/LevelManager/Levelground0000/StaticBody3D"]
shape = SubResource("ConcavePolygonShape3D_2mxa4")
[node name="CameraManager" type="Camera3D" parent="GameManager"]
transform = Transform3D(1, 0, 0, 0, 0.707107, 0.707107, 0, -0.707107, 0.707107, 0, 4.01178, 2.85449)
projection = 1
current = true
size = 8.0
size = 7.2
frustum_offset = Vector2(2, 0)
far = 20.0
script = ExtResource("4_yqiun")
[node name="CharacterManager" type="Node3D" parent="GameManager"]
unique_name_in_owner = true
script = ExtResource("4_oonkb")
[node name="EffectManager" type="Node3D" parent="GameManager"]
@ -62,8 +43,8 @@ script = ExtResource("8_0jv87")
script = ExtResource("5_n3qhi")
[node name="Decal" type="Decal" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.924324, -0.0136981, 0)
size = Vector3(0.5, 0.5, 0.5)
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.233297, 0.230601, 0)
size = Vector3(0.5, 0.36145, 0.5)
texture_albedo = ExtResource("9_4x7bs")
modulate = Color(0, 0, 0, 1)
cull_mask = 1

@ -0,0 +1,28 @@
[gd_scene load_steps=3 format=3 uid="uid://viwd61u8u8h0"]
[ext_resource type="Script" path="res://addons/MetroidvaniaSystem/Scripts/RoomInstance.gd" id="1_nundc"]
[ext_resource type="MeshLibrary" uid="uid://bbya6804fmu42" path="res://resource/mesh_library/default.tres" id="2_qqvc4"]
[node name="Level" type="Node3D"]
[node name="RoomInstance" type="Node3D" parent="."]
script = ExtResource("1_nundc")
[node name="Light" type="Node3D" parent="."]
[node name="DirectionalLight3D" type="DirectionalLight3D" parent="Light"]
transform = Transform3D(0.707107, -0.5, 0.5, 0, 0.707107, 0.707107, -0.707107, -0.5, 0.5, 0, 0, 0)
[node name="Ground" type="CSGBox3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 6.4, -1, 3.6)
use_collision = true
size = Vector3(12.8, 2, 7.2)
[node name="GridMap" type="GridMap" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0.4)
mesh_library = ExtResource("2_qqvc4")
cell_size = Vector3(0.64, 0.64, 0.64)
data = {
"cells": PackedInt32Array(0, 1, 655362, 0, 0, 0, 19, 1, 0, 19, 0, 0, 19, 2, 0, 19, 3, 0, 19, 7, 0, 19, 8, 0, 19, 9, 0, 19, 10, 0, 18, 10, 0, 17, 10, 0, 16, 10, 0, 0, 2, 655362, 0, 3, 655362, 0, 9, 655362, 0, 5, 655362, 0, 4, 655362, 15, 10, 0, 14, 10, 0, 13, 10, 0, 12, 10, 0, 11, 10, 0, 8, 10, 0, 7, 10, 0, 6, 10, 0, 5, 10, 0, 4, 10, 0, 3, 10, 0, 2, 10, 0, 1, 10, 0, 0, 10, 0, 0, 65535, 1376258, 1, 65535, 1376258, 2, 65535, 1376258, 3, 65535, 1376258, 4, 65535, 1376258, 5, 65535, 1376258, 6, 65535, 1376258, 7, 65535, 1376258, 8, 65535, 1376258, 9, 65535, 1376258, 12, 65535, 1376258, 13, 65535, 1376258, 14, 65535, 1376258, 15, 65535, 1376258, 16, 65535, 1376258, 17, 65535, 1376258, 18, 65535, 1376258, 19, 65535, 1376258)
}
metadata/_editor_floor_ = Vector3(0, 0, 0)

@ -1,20 +0,0 @@
[gd_scene load_steps=4 format=3 uid="uid://dmaphmg5c2frs"]
[ext_resource type="ArrayMesh" uid="uid://cap7t5iwpjpi2" path="res://resource/level/levelground0000.vox" id="1_4p4uf"]
[ext_resource type="PackedScene" uid="uid://do7abukgd54js" path="res://addons/MetroidvaniaSystem/Nodes/RoomInstance.tscn" id="1_vsrgt"]
[sub_resource type="ConcavePolygonShape3D" id="ConcavePolygonShape3D_5umlp"]
data = PackedVector3Array(-6.4, 0, -6.4, -3.2, 0, -6.4, -3.2, 0, 6.4, -3.2, 0, 6.4, -6.4, 0, 6.4, -6.4, 0, -6.4, -3.2, 0, 3.2, 6.4, 0, 3.2, 6.4, 0, 6.4, 6.4, 0, 6.4, -3.2, 0, 6.4, -3.2, 0, 3.2, -3.2, 0, -3.2, 3.2, 0, -3.2, 3.2, 0, 3.2, 3.2, 0, 3.2, -3.2, 0, 3.2, -3.2, 0, -3.2, -3.2, 0, -6.4, 6.4, 0, -6.4, 6.4, 0, -3.2, 6.4, 0, -3.2, -3.2, 0, -3.2, -3.2, 0, -6.4, 3.2, 0, -3.2, 6.4, 0, -3.2, 6.4, 0, 3.2, 6.4, 0, 3.2, 3.2, 0, 3.2, 3.2, 0, -3.2, -3.2, -0.1, 6.4, -3.2, -0.1, -6.4, -6.4, -0.1, -6.4, -6.4, -0.1, -6.4, -6.4, -0.1, 6.4, -3.2, -0.1, 6.4, 6.4, -0.1, 6.4, 6.4, -0.1, 3.2, -3.2, -0.1, 3.2, -3.2, -0.1, 3.2, -3.2, -0.1, 6.4, 6.4, -0.1, 6.4, 3.2, -0.1, 3.2, 3.2, -0.1, -3.2, -3.2, -0.1, -3.2, -3.2, -0.1, -3.2, -3.2, -0.1, 3.2, 3.2, -0.1, 3.2, 6.4, -0.1, -3.2, 6.4, -0.1, -6.4, -3.2, -0.1, -6.4, -3.2, -0.1, -6.4, -3.2, -0.1, -3.2, 6.4, -0.1, -3.2, 6.4, -0.1, 3.2, 6.4, -0.1, -3.2, 3.2, -0.1, -3.2, 3.2, -0.1, -3.2, 3.2, -0.1, 3.2, 6.4, -0.1, 3.2, -6.4, 0, -6.4, -6.4, 0, 6.4, -6.4, -0.1, 6.4, -6.4, -0.1, 6.4, -6.4, -0.1, -6.4, -6.4, 0, -6.4, 6.4, 0, -6.4, 6.4, -0.1, -6.4, 6.4, -0.1, 6.4, 6.4, -0.1, 6.4, 6.4, 0, 6.4, 6.4, 0, -6.4, -6.4, -0.1, 6.4, -6.4, 0, 6.4, 6.4, 0, 6.4, 6.4, 0, 6.4, 6.4, -0.1, 6.4, -6.4, -0.1, 6.4, 6.4, 0, -6.4, -6.4, 0, -6.4, -6.4, -0.1, -6.4, -6.4, -0.1, -6.4, 6.4, -0.1, -6.4, 6.4, 0, -6.4)
[node name="Levelground0000" type="Node3D"]
[node name="Levelground0000" type="MeshInstance3D" parent="."]
mesh = ExtResource("1_4p4uf")
skeleton = NodePath("../../..")
[node name="StaticBody3D" type="StaticBody3D" parent="Levelground0000"]
[node name="CollisionShape3D" type="CollisionShape3D" parent="Levelground0000/StaticBody3D"]
shape = SubResource("ConcavePolygonShape3D_5umlp")
[node name="RoomInstance" parent="." instance=ExtResource("1_vsrgt")]

@ -2,3 +2,4 @@ extends Node3D
var camera_mgr:CameraManager
var character_mgr:CharacterManager
var level_mgr:LevelManager

@ -2,13 +2,16 @@ extends Camera3D
class_name CameraManager
var target:int
var offset:Vector3
var offset:Vector3 = Vector3(0,1,1) * 5
var level_size:Vector2
var camera_limit = Vector2(6.4,3.6)
func _ready():
Global.camera_mgr = self
SignalManager.character_create.connect(on_character_create)
SignalManager.character_pos_changed.connect(on_character_pos_changed)
SignalManager.character_destroy.connect(on_character_destroy)
SignalManager.level_size_change.connect(on_level_size_change)
func _process(delta):
pass
@ -16,12 +19,16 @@ func _process(delta):
func on_character_create(id:int,team:Enum.ETeam,pos:Vector3):
if team == Enum.ETeam.Player:
target = id
offset = position - pos
func on_character_pos_changed(id:int,pos:Vector3):
if id == target:
pos.x = clamp(pos.x,camera_limit.x,level_size.x-camera_limit.x)
pos.z = clamp(pos.z,camera_limit.y,level_size.y-camera_limit.y)
pos.y = clamp(pos.y,0,0.5)
position = pos + offset
func on_character_destroy(id:int):
target = 0
offset = Vector3.ZERO
func on_level_size_change(size:Vector2):
level_size = size

@ -1,11 +1,10 @@
extends Node3D
@onready var character_manager = (%CharacterManager as CharacterManager)
func _ready():
MetSys.set_save_data()
character_manager.create_character(ResourceManager.cfg_character_player,Enum.ETeam.Player,Vector3(0,1,0))
character_manager.create_character(ResourceManager.cfg_character_monster_test,Enum.ETeam.Monster,Vector3(0.5,1,0))
Global.level_mgr.init()
Global.character_mgr.create_character(ResourceManager.cfg_character_player,Enum.ETeam.Player,Vector3(5,0,5))
Global.character_mgr.create_character(ResourceManager.cfg_character_monster_test,Enum.ETeam.Monster,Vector3(5.5,0,5))
func _process(delta):
pass

@ -1,7 +1,12 @@
extends Node3D
class_name LevelManager
var map: Node3D
var starting_map = "levelground0000.tscn"
var starting_map = "level0101.tscn"
func _ready():
Global.level_mgr = self
func init():
MetSys.set_save_data()
@ -16,10 +21,12 @@ func goto_map(map_path: String):
map.queue_free()
map = null
# Load the new map scene.
map = load(map_path).instantiate()
add_child(map)
MetSys.current_layer = MetSys.get_current_room_instance().get_layer()
var level_size = MetSys.get_current_room_instance().get_size()
print(level_size)
SignalManager.level_size_change.emit(level_size)
func on_room_changed(target_map: String):
if target_map.is_absolute_path():

@ -17,3 +17,6 @@ signal character_ui_pos_changed
signal character_status_changed
signal character_hit_text
signal character_hit_damage
#level
signal level_size_change

@ -11,7 +11,7 @@
[2,0,0]
0,0,0,-1|11d4e3,,,,||
[0,-1,0]
0,0,0,0|11d4e3,,,,||
0,0,0,0|11d4e3,,,,||/level0101.tscn
[2,2,0]
0,0,0,0|11d4e3,,,,||
[-1,2,0]
@ -19,9 +19,9 @@
[1,2,0]
0,0,-1,0|||
[0,0,0]
0,-1,0,0|||/levelground0000.tscn
0,-1,0,0|||
[0,1,0]
0,0,0,-1|||/levelground0000.tscn
0,0,0,-1|||
[3,1,0]
0,0,0,0|c70000,,,,||
[-2,1,0]

@ -8,5 +8,5 @@ script = ExtResource("1_l1so1")
theme = ExtResource("2_nrj5e")
map_root_folder = "res://scene/level"
map_setting_folder = "res://setting"
in_game_cell_size = Vector2(1152, 648)
in_game_cell_size = Vector2(12.8, 7.2)
collectible_list = Array[Dictionary]([])

@ -1,7 +1,7 @@
workspace :
{
// use '$' for current directory, otherwise use actual full path
dir_model : [[$/../../resource/level]]
dir_model : [[$/../../resource/mesh_level]]
dir_pattern : [[$/vox]]
dir_palette : [[$/palette]]
dir_export : [[$/export]]

Loading…
Cancel
Save