mirror of
https://github.com/Relintai/broken_seals.git
synced 2024-11-13 20:47:19 +01:00
481 lines
17 KiB
GDScript
481 lines
17 KiB
GDScript
extends Control
|
|
|
|
# Copyright Péter Magyar relintai@gmail.com
|
|
# MIT License, might be merged into the Voxelman engine module
|
|
|
|
# Copyright (c) 2019 Péter Magyar
|
|
|
|
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
# of this software and associated documentation files (the "Software"), to deal
|
|
# in the Software without restriction, including without limitation the rights
|
|
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
# copies of the Software, and to permit persons to whom the Software is
|
|
# furnished to do so, subject to the following conditions:
|
|
#
|
|
# The above copyright notice and this permission notice shall be included in all
|
|
# copies or substantial portions of the Software.
|
|
|
|
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
# SOFTWARE.
|
|
|
|
export(NodePath) var text_edit_path : NodePath
|
|
|
|
const VOXEL_ENTRY_INDEX_000 : int = 0
|
|
const VOXEL_ENTRY_INDEX_100 : int = 1
|
|
const VOXEL_ENTRY_INDEX_010 : int = 4
|
|
const VOXEL_ENTRY_INDEX_110 : int = 5
|
|
const VOXEL_ENTRY_INDEX_001 : int = 2
|
|
const VOXEL_ENTRY_INDEX_101 : int = 3
|
|
const VOXEL_ENTRY_INDEX_011 : int = 6
|
|
const VOXEL_ENTRY_INDEX_111 : int = 7
|
|
const VOXEL_ENTRIES_SIZE : int = 8
|
|
|
|
const VOXEL_ENTRY_MASK_000 : int = 1
|
|
const VOXEL_ENTRY_MASK_100 : int = 2
|
|
const VOXEL_ENTRY_MASK_010 : int = 16
|
|
const VOXEL_ENTRY_MASK_110 : int = 32
|
|
const VOXEL_ENTRY_MASK_001 : int = 4
|
|
const VOXEL_ENTRY_MASK_101 : int = 8
|
|
const VOXEL_ENTRY_MASK_011 : int = 64
|
|
const VOXEL_ENTRY_MASK_111 : int = 128
|
|
|
|
var entry_index_x_rotations : Array = [
|
|
VOXEL_ENTRY_INDEX_010, #from VOXEL_ENTRY_INDEX_000
|
|
VOXEL_ENTRY_INDEX_110, #from VOXEL_ENTRY_INDEX_100
|
|
VOXEL_ENTRY_INDEX_000, #from VOXEL_ENTRY_INDEX_001
|
|
VOXEL_ENTRY_INDEX_100, #from VOXEL_ENTRY_INDEX_101
|
|
VOXEL_ENTRY_INDEX_011, #from VOXEL_ENTRY_INDEX_010
|
|
VOXEL_ENTRY_INDEX_111, #from VOXEL_ENTRY_INDEX_110
|
|
VOXEL_ENTRY_INDEX_001, #from VOXEL_ENTRY_INDEX_011
|
|
VOXEL_ENTRY_INDEX_101, #from VOXEL_ENTRY_INDEX_111
|
|
]
|
|
|
|
var entry_index_y_rotations : Array = [
|
|
VOXEL_ENTRY_INDEX_100, #from VOXEL_ENTRY_INDEX_000
|
|
VOXEL_ENTRY_INDEX_101, #from VOXEL_ENTRY_INDEX_100
|
|
VOXEL_ENTRY_INDEX_000, #from VOXEL_ENTRY_INDEX_001
|
|
VOXEL_ENTRY_INDEX_001, #from VOXEL_ENTRY_INDEX_101
|
|
VOXEL_ENTRY_INDEX_110, #from VOXEL_ENTRY_INDEX_010
|
|
VOXEL_ENTRY_INDEX_111, #from VOXEL_ENTRY_INDEX_110
|
|
VOXEL_ENTRY_INDEX_010, #from VOXEL_ENTRY_INDEX_011
|
|
VOXEL_ENTRY_INDEX_011, #from VOXEL_ENTRY_INDEX_111
|
|
]
|
|
|
|
var entry_index_z_rotations : Array = [
|
|
VOXEL_ENTRY_INDEX_100, #from VOXEL_ENTRY_INDEX_000
|
|
VOXEL_ENTRY_INDEX_110, #from VOXEL_ENTRY_INDEX_100
|
|
VOXEL_ENTRY_INDEX_101, #from VOXEL_ENTRY_INDEX_001
|
|
VOXEL_ENTRY_INDEX_111, #from VOXEL_ENTRY_INDEX_101
|
|
VOXEL_ENTRY_INDEX_000, #from VOXEL_ENTRY_INDEX_010
|
|
VOXEL_ENTRY_INDEX_010, #from VOXEL_ENTRY_INDEX_110
|
|
VOXEL_ENTRY_INDEX_001, #from VOXEL_ENTRY_INDEX_011
|
|
VOXEL_ENTRY_INDEX_011, #from VOXEL_ENTRY_INDEX_111
|
|
]
|
|
|
|
var entry_index_names : Array = [
|
|
"VOXEL_ENTRY_INDEX_000", #VOXEL_ENTRY_INDEX_000
|
|
"VOXEL_ENTRY_INDEX_100", #VOXEL_ENTRY_INDEX_100
|
|
"VOXEL_ENTRY_INDEX_001", #VOXEL_ENTRY_INDEX_001
|
|
"VOXEL_ENTRY_INDEX_101", #VOXEL_ENTRY_INDEX_101
|
|
"VOXEL_ENTRY_INDEX_010", #VOXEL_ENTRY_INDEX_010
|
|
"VOXEL_ENTRY_INDEX_110", #VOXEL_ENTRY_INDEX_110
|
|
"VOXEL_ENTRY_INDEX_011", #VOXEL_ENTRY_INDEX_011
|
|
"VOXEL_ENTRY_INDEX_111", #VOXEL_ENTRY_INDEX_111
|
|
]
|
|
|
|
var class_match_table : Array = [
|
|
0, #0
|
|
VOXEL_ENTRY_MASK_000, #1
|
|
VOXEL_ENTRY_MASK_000 | VOXEL_ENTRY_MASK_100, #2
|
|
VOXEL_ENTRY_MASK_100 | VOXEL_ENTRY_MASK_001, #3
|
|
VOXEL_ENTRY_MASK_000 | VOXEL_ENTRY_MASK_100 | VOXEL_ENTRY_MASK_001, #4
|
|
VOXEL_ENTRY_MASK_000 | VOXEL_ENTRY_MASK_100 | VOXEL_ENTRY_MASK_001 | VOXEL_ENTRY_MASK_101, #5
|
|
VOXEL_ENTRY_MASK_100 | VOXEL_ENTRY_MASK_010 | VOXEL_ENTRY_MASK_001, #6
|
|
VOXEL_ENTRY_MASK_100 | VOXEL_ENTRY_MASK_010 | VOXEL_ENTRY_MASK_001 | VOXEL_ENTRY_MASK_000, #7
|
|
VOXEL_ENTRY_MASK_000 | VOXEL_ENTRY_MASK_010 | VOXEL_ENTRY_MASK_101, #8
|
|
VOXEL_ENTRY_MASK_010 | VOXEL_ENTRY_MASK_000 | VOXEL_ENTRY_MASK_100 | VOXEL_ENTRY_MASK_101, #9
|
|
VOXEL_ENTRY_MASK_110 | VOXEL_ENTRY_MASK_100 | VOXEL_ENTRY_MASK_000 | VOXEL_ENTRY_MASK_001, #10
|
|
VOXEL_ENTRY_MASK_110 | VOXEL_ENTRY_MASK_000 | VOXEL_ENTRY_MASK_001 | VOXEL_ENTRY_MASK_101, #11
|
|
VOXEL_ENTRY_MASK_000 | VOXEL_ENTRY_MASK_100 | VOXEL_ENTRY_MASK_001 | VOXEL_ENTRY_MASK_101 | VOXEL_ENTRY_MASK_110, #12
|
|
VOXEL_ENTRY_MASK_101 | VOXEL_ENTRY_MASK_001 | VOXEL_ENTRY_MASK_010 | VOXEL_ENTRY_MASK_110, #13
|
|
VOXEL_ENTRY_MASK_110 | VOXEL_ENTRY_MASK_010 | VOXEL_ENTRY_MASK_000 | VOXEL_ENTRY_MASK_001 | VOXEL_ENTRY_MASK_101, #14
|
|
VOXEL_ENTRY_MASK_000 | VOXEL_ENTRY_MASK_101 | VOXEL_ENTRY_MASK_011 | VOXEL_ENTRY_MASK_110, #15
|
|
VOXEL_ENTRY_MASK_100 | VOXEL_ENTRY_MASK_101 | VOXEL_ENTRY_MASK_110 | VOXEL_ENTRY_MASK_000 | VOXEL_ENTRY_MASK_011, #16
|
|
VOXEL_ENTRY_MASK_000 | VOXEL_ENTRY_MASK_100 | VOXEL_ENTRY_MASK_001 | VOXEL_ENTRY_MASK_101 | VOXEL_ENTRY_MASK_110 | VOXEL_ENTRY_MASK_011, #17
|
|
|
|
VOXEL_ENTRY_MASK_110 | VOXEL_ENTRY_MASK_001, #18 eqv to 3 (36)
|
|
VOXEL_ENTRY_MASK_100 | VOXEL_ENTRY_MASK_110 | VOXEL_ENTRY_MASK_101 | VOXEL_ENTRY_MASK_010 | VOXEL_ENTRY_MASK_011 | VOXEL_ENTRY_MASK_001, #19 eqv to 3 (126)
|
|
VOXEL_ENTRY_MASK_001 | VOXEL_ENTRY_MASK_000 | VOXEL_ENTRY_MASK_010 | VOXEL_ENTRY_MASK_101 | VOXEL_ENTRY_MASK_100 | VOXEL_ENTRY_MASK_110, #20 eqv to 2 (63)
|
|
|
|
VOXEL_ENTRY_MASK_000 | VOXEL_ENTRY_MASK_100 | VOXEL_ENTRY_MASK_001 | VOXEL_ENTRY_MASK_101 | VOXEL_ENTRY_MASK_010 | VOXEL_ENTRY_MASK_110 | VOXEL_ENTRY_MASK_011, #21 eqv to 1 (127)
|
|
VOXEL_ENTRY_MASK_000 | VOXEL_ENTRY_MASK_100 | VOXEL_ENTRY_MASK_001 | VOXEL_ENTRY_MASK_101 | VOXEL_ENTRY_MASK_010 | VOXEL_ENTRY_MASK_110 | VOXEL_ENTRY_MASK_011 | VOXEL_ENTRY_MASK_111, #22 eqv to 0
|
|
]
|
|
|
|
var equivalence_classes_data : Array = [
|
|
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17,
|
|
3, 3, 2, 1, 0
|
|
]
|
|
|
|
var vertices_data : Array = [
|
|
[],
|
|
#1 1
|
|
[ Vector3(0.5, 0, 0), Vector3(0, 0.5, 0), Vector3(0, 0, 0.5) ],
|
|
#3 2
|
|
[ Vector3(0, 0, 0.5), Vector3(0, 0, 0.5), Vector3(0, 0.5, 0), Vector3(0, 0.5, 0) ],
|
|
#6 3
|
|
[ Vector3(-0.5, 0, 0), Vector3(0, 0, 0.5), Vector3(0, 0.5, 0),
|
|
Vector3(0.5, 0, 0), Vector3(0, 0, -0.5), Vector3(0, 0.5, 0) ],
|
|
#7 4
|
|
[ Vector3(0, 0.5, 0), Vector3(0, 0.5, 0), Vector3(0, 0.5, 0),
|
|
Vector3(0, 0.5, 0), Vector3(0, 0.5, 0),
|
|
Vector3(0, 0, 0.5), Vector3(0.5, 0, 0) ],
|
|
#15 5
|
|
[ Vector3(0, 0.5, 0), Vector3(0, 0.5, 0), Vector3(0, 0.5, 0), Vector3(0, 0.5, 0) ],
|
|
#22 6
|
|
[ Vector3(0.5, 0, 0), Vector3(0, 0, 0.5), Vector3(0, -0.5, 0),
|
|
Vector3(0, 0, 0.5), Vector3(0, 0.5, 0), Vector3(-0.5, 0, 0),
|
|
Vector3(0.5, 0, 0), Vector3(0, 0, -0.5), Vector3(0, 0.5, 0) ],
|
|
#23 7
|
|
[ Vector3(0.5, 0, 0), Vector3(0, 0, 0.5),
|
|
Vector3(0, 0.5, 0), Vector3(0, 0, 0.5),
|
|
Vector3(0.5, 0, 0), Vector3(0, 0.5, 0) ],
|
|
#25 8
|
|
[ Vector3(0, 0, 0.5), Vector3(0, 0, 0.5), Vector3(0.5, 0, 0), Vector3(0.5, 0, 0),
|
|
Vector3(0, 0, -0.5), Vector3(-0.5, 0, 0), Vector3(0, 0.5, 0) ],
|
|
#27 9
|
|
[ Vector3(0, 0, 0.5), Vector3(0, 0, 0.5), Vector3(-0.5, 0, 0), Vector3(0, 0.5, 0),
|
|
Vector3(0.5, 0, 0), Vector3(0, 0.5, 0) ],
|
|
#29 10
|
|
[ Vector3(0.5, 0, 0), Vector3(0, 0, -0.5), Vector3(0.5, 0, 0), Vector3(0, 0.5, 0),
|
|
Vector3(0, 0, 0.5), Vector3(0, 0.5, 0) ],
|
|
#30 11
|
|
[ Vector3(0, 0.5, 0), Vector3(0, 0.5, 0), Vector3(0, 0.5, 0),
|
|
Vector3(0, 0, -0.5), Vector3(-0.5, 0, 0),
|
|
Vector3(0, 0.5, 0), Vector3(0, 0.5, 0),
|
|
Vector3(0, 0, 0.5), Vector3(0, -0.5, 0), Vector3(0.5, 0, 0) ],
|
|
#31 12
|
|
[ Vector3(0, 0.5, 0), Vector3(0, 0.5, 0), Vector3(0, 0.5, 0),
|
|
Vector3(0, 0, 0.5), Vector3(0.5, 0, 0) ],
|
|
#60 13
|
|
[ Vector3(0, 0, 0.5), Vector3(0, 0, 0.5), Vector3(0, -0.5, 0), Vector3(0, -0.5, 0),
|
|
Vector3(0, 0, -0.5), Vector3(0, 0, -0.5), Vector3(0, 0.5, 0), Vector3(0, 0.5, 0) ],
|
|
#61 14
|
|
[ Vector3(0.5, 0, 0), Vector3(0, -0.5, 0), Vector3(0, 0, 0.5),
|
|
Vector3(0.5, 0, 0), Vector3(0, 0, 0.5), Vector3(0, 0, 0.5),
|
|
Vector3(0.5, 0, 0), Vector3(0, 0.5, 0), Vector3(0, 0, 0.5),
|
|
Vector3(0.5, 0, 0), Vector3(0, 0.5, 0), Vector3(0, 0.5, 0),
|
|
Vector3(0.5, 0, 0), Vector3(0, 0.5, 0), Vector3(0, 0, -0.5) ],
|
|
#105 15
|
|
[ Vector3(0.5, 0, 0), Vector3(0, 0.5, 0), Vector3(0, 0, 0.5),
|
|
Vector3(0, 0, -0.5), Vector3(-0.5, 0, 0), Vector3(0, 0.5, 0),
|
|
Vector3(-0.5, 0, 0), Vector3(0, -0.5, 0), Vector3(0, 0, 0.5),
|
|
Vector3(0, 0, -0.5), Vector3(0.5, 0, 0), Vector3(0, -0.5, 0) ],
|
|
#107 16
|
|
[ Vector3(0, 0, 0.5), Vector3(-0.5, 0, 0),
|
|
Vector3(0, 0.5, 0), Vector3(-0.5, 0, 0),
|
|
Vector3(0, 0, 0.5), Vector3(0, 0.5, 0),
|
|
Vector3(0, 0, -0.5), Vector3(0.5, 0, 0), Vector3(0, -0.5, 0) ],
|
|
#111 17
|
|
[ Vector3(0, 0.5, 0), Vector3(0.5, 0, 0), Vector3(0, 0, -0.5),
|
|
Vector3(0, 0.5, 0), Vector3(-0.5, 0, 0), Vector3(0, 0, 0.5),
|
|
Vector3(0, 0.5, 0), Vector3(-0.5, 0, 0), Vector3(0, 0.5, 0),
|
|
Vector3(0, 0.5, 0), Vector3(0, 0, -0.5), Vector3(0, 0.5, 0) ],
|
|
#36 18
|
|
[ Vector3(-0.5, 0, 0), Vector3(0, -0.5, 0), Vector3(0, 0, 0.5),
|
|
Vector3(0, 0.5, 0), Vector3(0.5, 0, 0), Vector3(0, 0, -0.5) ],
|
|
|
|
#126 19
|
|
[ Vector3(0.5, 0, 0), Vector3(0, 0.5, 0), Vector3(0, 0, 0.5),
|
|
Vector3(0, 0, -0.5), Vector3(0, -0.5, 0), Vector3(-0.5, 0, 0) ],
|
|
#63
|
|
[ Vector3(0, 0.5, 0), Vector3(0, 0.5, 0), Vector3(0, 0, 0.5), Vector3(0, 0, 0.5) ],
|
|
|
|
#127 20
|
|
[ Vector3(0.5, 0, 0), Vector3(0, 0.5, 0), Vector3(0, 0, 0.5) ],
|
|
[]
|
|
]
|
|
|
|
var vertex_corner_data : Array = [
|
|
[],
|
|
#1 1
|
|
[ VOXEL_ENTRY_INDEX_000, VOXEL_ENTRY_INDEX_000, VOXEL_ENTRY_INDEX_000 ],
|
|
#3 2
|
|
[ VOXEL_ENTRY_INDEX_000, VOXEL_ENTRY_INDEX_100, VOXEL_ENTRY_INDEX_000, VOXEL_ENTRY_INDEX_100 ],
|
|
#6 3
|
|
[ VOXEL_ENTRY_INDEX_100, VOXEL_ENTRY_INDEX_100, VOXEL_ENTRY_INDEX_100,
|
|
VOXEL_ENTRY_INDEX_001, VOXEL_ENTRY_INDEX_001, VOXEL_ENTRY_INDEX_001 ],
|
|
#7 4
|
|
[ VOXEL_ENTRY_INDEX_000, VOXEL_ENTRY_INDEX_001, VOXEL_ENTRY_INDEX_100,
|
|
VOXEL_ENTRY_INDEX_001, VOXEL_ENTRY_INDEX_100,
|
|
VOXEL_ENTRY_INDEX_100, VOXEL_ENTRY_INDEX_001 ],
|
|
#15 5
|
|
[ VOXEL_ENTRY_INDEX_000, VOXEL_ENTRY_INDEX_100, VOXEL_ENTRY_INDEX_001, VOXEL_ENTRY_INDEX_101 ],
|
|
#22 6
|
|
[ VOXEL_ENTRY_INDEX_010, VOXEL_ENTRY_INDEX_010, VOXEL_ENTRY_INDEX_010,
|
|
VOXEL_ENTRY_INDEX_100, VOXEL_ENTRY_INDEX_100, VOXEL_ENTRY_INDEX_100,
|
|
VOXEL_ENTRY_INDEX_001, VOXEL_ENTRY_INDEX_001, VOXEL_ENTRY_INDEX_001 ],
|
|
#23 7
|
|
[ VOXEL_ENTRY_INDEX_010, VOXEL_ENTRY_INDEX_010,
|
|
VOXEL_ENTRY_INDEX_100, VOXEL_ENTRY_INDEX_100,
|
|
VOXEL_ENTRY_INDEX_001, VOXEL_ENTRY_INDEX_001 ],
|
|
#25 8
|
|
[ VOXEL_ENTRY_INDEX_010, VOXEL_ENTRY_INDEX_000, VOXEL_ENTRY_INDEX_010, VOXEL_ENTRY_INDEX_000,
|
|
VOXEL_ENTRY_INDEX_101, VOXEL_ENTRY_INDEX_101, VOXEL_ENTRY_INDEX_101 ],
|
|
#27 9
|
|
[ VOXEL_ENTRY_INDEX_000, VOXEL_ENTRY_INDEX_010, VOXEL_ENTRY_INDEX_101, VOXEL_ENTRY_INDEX_101,
|
|
VOXEL_ENTRY_INDEX_010, VOXEL_ENTRY_INDEX_100 ],
|
|
#29 10
|
|
[ VOXEL_ENTRY_INDEX_000, VOXEL_ENTRY_INDEX_101, VOXEL_ENTRY_INDEX_010, VOXEL_ENTRY_INDEX_101,
|
|
VOXEL_ENTRY_INDEX_010, VOXEL_ENTRY_INDEX_001 ],
|
|
#30 11
|
|
[ VOXEL_ENTRY_INDEX_101, VOXEL_ENTRY_INDEX_100, VOXEL_ENTRY_INDEX_001,
|
|
VOXEL_ENTRY_INDEX_001, VOXEL_ENTRY_INDEX_100,
|
|
VOXEL_ENTRY_INDEX_100, VOXEL_ENTRY_INDEX_001,
|
|
VOXEL_ENTRY_INDEX_010, VOXEL_ENTRY_INDEX_010, VOXEL_ENTRY_INDEX_010 ],
|
|
#31 12
|
|
[ VOXEL_ENTRY_INDEX_001, VOXEL_ENTRY_INDEX_101, VOXEL_ENTRY_INDEX_100,
|
|
VOXEL_ENTRY_INDEX_010, VOXEL_ENTRY_INDEX_010 ],
|
|
#60 13
|
|
[ VOXEL_ENTRY_INDEX_110, VOXEL_ENTRY_INDEX_010, VOXEL_ENTRY_INDEX_110, VOXEL_ENTRY_INDEX_010,
|
|
VOXEL_ENTRY_INDEX_101, VOXEL_ENTRY_INDEX_001, VOXEL_ENTRY_INDEX_101, VOXEL_ENTRY_INDEX_001 ],
|
|
#61 14
|
|
[ VOXEL_ENTRY_INDEX_000, VOXEL_ENTRY_INDEX_110, VOXEL_ENTRY_INDEX_110,
|
|
VOXEL_ENTRY_INDEX_000, VOXEL_ENTRY_INDEX_010, VOXEL_ENTRY_INDEX_110,
|
|
VOXEL_ENTRY_INDEX_000, VOXEL_ENTRY_INDEX_001, VOXEL_ENTRY_INDEX_010,
|
|
VOXEL_ENTRY_INDEX_000, VOXEL_ENTRY_INDEX_101, VOXEL_ENTRY_INDEX_001,
|
|
VOXEL_ENTRY_INDEX_000, VOXEL_ENTRY_INDEX_101, VOXEL_ENTRY_INDEX_101 ],
|
|
#105 15
|
|
[ VOXEL_ENTRY_INDEX_000, VOXEL_ENTRY_INDEX_000, VOXEL_ENTRY_INDEX_000,
|
|
VOXEL_ENTRY_INDEX_101, VOXEL_ENTRY_INDEX_101, VOXEL_ENTRY_INDEX_101,
|
|
VOXEL_ENTRY_INDEX_110, VOXEL_ENTRY_INDEX_110, VOXEL_ENTRY_INDEX_110,
|
|
VOXEL_ENTRY_INDEX_011, VOXEL_ENTRY_INDEX_011, VOXEL_ENTRY_INDEX_011 ],
|
|
#107 16
|
|
[ VOXEL_ENTRY_INDEX_110, VOXEL_ENTRY_INDEX_110,
|
|
VOXEL_ENTRY_INDEX_101, VOXEL_ENTRY_INDEX_101,
|
|
VOXEL_ENTRY_INDEX_000, VOXEL_ENTRY_INDEX_000,
|
|
VOXEL_ENTRY_INDEX_011, VOXEL_ENTRY_INDEX_011, VOXEL_ENTRY_INDEX_011 ],
|
|
#111 17
|
|
[ VOXEL_ENTRY_INDEX_101, VOXEL_ENTRY_INDEX_011, VOXEL_ENTRY_INDEX_011,
|
|
VOXEL_ENTRY_INDEX_101, VOXEL_ENTRY_INDEX_110, VOXEL_ENTRY_INDEX_110,
|
|
VOXEL_ENTRY_INDEX_101, VOXEL_ENTRY_INDEX_110, VOXEL_ENTRY_INDEX_000,
|
|
VOXEL_ENTRY_INDEX_101, VOXEL_ENTRY_INDEX_011, VOXEL_ENTRY_INDEX_000 ],
|
|
#36 18
|
|
[ VOXEL_ENTRY_INDEX_110, VOXEL_ENTRY_INDEX_110, VOXEL_ENTRY_INDEX_110,
|
|
VOXEL_ENTRY_INDEX_001, VOXEL_ENTRY_INDEX_001, VOXEL_ENTRY_INDEX_001 ],
|
|
|
|
|
|
#126 18 (3)
|
|
[ VOXEL_ENTRY_INDEX_011, VOXEL_ENTRY_INDEX_101, VOXEL_ENTRY_INDEX_110,
|
|
VOXEL_ENTRY_INDEX_001, VOXEL_ENTRY_INDEX_010, VOXEL_ENTRY_INDEX_100 ],
|
|
#63
|
|
[ VOXEL_ENTRY_INDEX_001, VOXEL_ENTRY_INDEX_101, VOXEL_ENTRY_INDEX_010, VOXEL_ENTRY_INDEX_110 ],
|
|
|
|
#127 19 (1)
|
|
[ VOXEL_ENTRY_INDEX_011, VOXEL_ENTRY_INDEX_101, VOXEL_ENTRY_INDEX_110 ],
|
|
[],
|
|
]
|
|
|
|
func index_entry_to_mask_entry(entry : int) -> int:
|
|
if entry == VOXEL_ENTRY_INDEX_000:
|
|
return VOXEL_ENTRY_MASK_000
|
|
|
|
if entry == VOXEL_ENTRY_INDEX_100:
|
|
return VOXEL_ENTRY_MASK_100
|
|
|
|
if entry == VOXEL_ENTRY_INDEX_010:
|
|
return VOXEL_ENTRY_MASK_010
|
|
|
|
if entry == VOXEL_ENTRY_INDEX_110:
|
|
return VOXEL_ENTRY_MASK_110
|
|
|
|
if entry == VOXEL_ENTRY_INDEX_001:
|
|
return VOXEL_ENTRY_MASK_001
|
|
|
|
if entry == VOXEL_ENTRY_INDEX_101:
|
|
return VOXEL_ENTRY_MASK_101
|
|
|
|
if entry == VOXEL_ENTRY_INDEX_011:
|
|
return VOXEL_ENTRY_MASK_011
|
|
|
|
if entry == VOXEL_ENTRY_INDEX_111:
|
|
return VOXEL_ENTRY_MASK_111
|
|
|
|
return 0
|
|
|
|
func mask_entry_to_index_entry(entry : int) -> int:
|
|
if entry == VOXEL_ENTRY_MASK_000:
|
|
return VOXEL_ENTRY_INDEX_000
|
|
|
|
if entry == VOXEL_ENTRY_MASK_100:
|
|
return VOXEL_ENTRY_INDEX_100
|
|
|
|
if entry == VOXEL_ENTRY_MASK_010:
|
|
return VOXEL_ENTRY_INDEX_010
|
|
|
|
if entry == VOXEL_ENTRY_MASK_110:
|
|
return VOXEL_ENTRY_INDEX_110
|
|
|
|
if entry == VOXEL_ENTRY_MASK_001:
|
|
return VOXEL_ENTRY_INDEX_001
|
|
|
|
if entry == VOXEL_ENTRY_MASK_101:
|
|
return VOXEL_ENTRY_INDEX_101
|
|
|
|
if entry == VOXEL_ENTRY_MASK_011:
|
|
return VOXEL_ENTRY_INDEX_011
|
|
|
|
if entry == VOXEL_ENTRY_MASK_111:
|
|
return VOXEL_ENTRY_INDEX_111
|
|
|
|
return 0
|
|
|
|
func generate() -> String:
|
|
|
|
var i : int = 0
|
|
var a : String = ""
|
|
|
|
for y in range(4):
|
|
for z in range(8):
|
|
for x in range(8):
|
|
var data : Array = get_equiv_data(i)
|
|
|
|
var index : int = data[0]
|
|
var rx : int = data[1]
|
|
var ry : int = data[2]
|
|
var rz : int = data[3]
|
|
|
|
var owners : Array = get_rotate_owners(index, rx, ry, rz)
|
|
|
|
# a += str(i) + " -> " + str(equivalence_classes_data[index]) + " (" + str(data) + ")\n"
|
|
a += str(i) + " -> " + str(equivalence_classes_data[index]) + " (" + str(data) + ")" + " (" + str(debug_index_to_str(vertex_corner_data[index])) + " " + str(debug_index_to_str(owners)) + ")\n"
|
|
|
|
|
|
i += 1
|
|
|
|
return a
|
|
|
|
func get_rotate_owners(index : int, x : int, y : int, z : int) -> Array:
|
|
var owners : Array = vertex_corner_data[index]
|
|
var nowners : Array = []
|
|
|
|
for index in owners:
|
|
var i : int = index
|
|
|
|
for rx in range(x):
|
|
i = entry_index_x_rotations[i]
|
|
|
|
for ry in range(y):
|
|
i = entry_index_y_rotations[i]
|
|
|
|
for rz in range(z):
|
|
i = entry_index_z_rotations[i]
|
|
|
|
nowners.append(i)
|
|
|
|
return nowners
|
|
|
|
|
|
func find_equiv_index(cls : int) -> int:
|
|
for x in range(4):
|
|
for y in range(4):
|
|
for z in range(4):
|
|
var cl : int = rotate_index(cls, x, y, z)
|
|
|
|
for i in range(len(class_match_table)):
|
|
if class_match_table[i] == cl:
|
|
return i
|
|
|
|
return -1
|
|
|
|
func get_equiv_data(cls : int) -> Array:
|
|
var res : Array = []
|
|
|
|
for x in range(4):
|
|
for y in range(4):
|
|
for z in range(4):
|
|
var cl : int = rotate_index(cls, x, y, z)
|
|
|
|
for i in range(len(class_match_table)):
|
|
if class_match_table[i] == cl:
|
|
|
|
res.append(i)
|
|
res.append(x)
|
|
res.append(y)
|
|
res.append(z)
|
|
|
|
return res
|
|
|
|
return res
|
|
|
|
func rotate_index(cls : int, x : int, y : int, z : int) -> int:
|
|
var corners : Array = [
|
|
cls & 1 << 0,
|
|
cls & 1 << 1,
|
|
cls & 1 << 2,
|
|
cls & 1 << 3,
|
|
cls & 1 << 4,
|
|
cls & 1 << 5,
|
|
cls & 1 << 6,
|
|
cls & 1 << 7,
|
|
]
|
|
|
|
for i in range(len(corners)):
|
|
if corners[i] == 0:
|
|
continue
|
|
|
|
var index : int = mask_entry_to_index_entry(corners[i])
|
|
|
|
for rx in range(x):
|
|
index = entry_index_x_rotations[index]
|
|
|
|
for ry in range(y):
|
|
index = entry_index_y_rotations[index]
|
|
|
|
for rz in range(z):
|
|
index = entry_index_z_rotations[index]
|
|
|
|
corners[i] = index_entry_to_mask_entry((index))
|
|
|
|
var res : int = 0
|
|
|
|
for e in corners:
|
|
res = res | e
|
|
|
|
return res
|
|
|
|
func debug_index_to_str(array : Array) -> Array:
|
|
var o : Array = []
|
|
|
|
for e in array:
|
|
if e == VOXEL_ENTRY_INDEX_000:
|
|
o.append("000")
|
|
elif e == VOXEL_ENTRY_INDEX_100:
|
|
o.append("100")
|
|
elif e == VOXEL_ENTRY_INDEX_010:
|
|
o.append("010")
|
|
elif e == VOXEL_ENTRY_INDEX_110:
|
|
o.append("110")
|
|
elif e == VOXEL_ENTRY_INDEX_001:
|
|
o.append("001")
|
|
elif e == VOXEL_ENTRY_INDEX_101:
|
|
o.append("101")
|
|
elif e == VOXEL_ENTRY_INDEX_011:
|
|
o.append("011")
|
|
elif e == VOXEL_ENTRY_INDEX_111:
|
|
o.append("111")
|
|
else:
|
|
o.append("!")
|
|
|
|
return o
|
|
|
|
|
|
func _on_Button_pressed():
|
|
var text_edit : TextEdit = get_node(text_edit_path) as TextEdit
|
|
|
|
text_edit.text = generate()
|