2019-11-20 14:37:34 +01:00
extends Control
# Copyright Péter Magyar relintai@gmail.com
# MIT License, might be merged into the Voxelman engine module
2019-12-01 23:21:48 +01:00
# 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.
2019-11-20 14:37:34 +01:00
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 ( )