Added project
commit
3d97573449
|
@ -0,0 +1,247 @@
|
||||||
|
#Copyright (c) 2015 OvermindDL1
|
||||||
|
#
|
||||||
|
#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.
|
||||||
|
#
|
||||||
|
#OvermindDL1 would love to receive updates, fixes, and more to this code,
|
||||||
|
#though it is not required: https://github.com/OvermindDL1/Godot-Helpers
|
||||||
|
|
||||||
|
## Testing only
|
||||||
|
#extends SceneTree
|
||||||
|
|
||||||
|
#const F2 = 0.5 * (sqrt(3.0) - 1.0)
|
||||||
|
#const G2 = (3.0 - sqrt(3.0)) / 6.0
|
||||||
|
#const G2o = G2*2.0 - 1.0
|
||||||
|
#const F3 = (1.0 / 3.0)
|
||||||
|
#const G3 = (1.0 / 6.0)
|
||||||
|
#const F2 = 0.3660254037844385965883020617184229195117950439453125
|
||||||
|
#const G2 = 0.2113248654051871344705659794271923601627349853515625
|
||||||
|
#const G2o = -0.577350269189625731058868041145615279674530029296875
|
||||||
|
#const F3 = 0.333333333333333314829616256247390992939472198486328125
|
||||||
|
#const G3 = 0.1666666666666666574148081281236954964697360992431640625
|
||||||
|
const F2 = 0.36602540378443860
|
||||||
|
const G2 = 0.21132486540518714
|
||||||
|
const G2o = -0.577350269189626
|
||||||
|
const F3 = 0.33333333333333333
|
||||||
|
const G3 = 0.16666666666666666
|
||||||
|
|
||||||
|
const GRAD3 = [
|
||||||
|
1,1,0, -1,1,0, 1,-1,0, -1,-1,0,
|
||||||
|
1,0,1, -1,0,1, 1,0,-1, -1,0,-1,
|
||||||
|
0,1,1, 0,-1,1, 0,1,-1, 0,-1,-1,
|
||||||
|
1,0,-1, -1,0,-1, 0,-1,1, 0,1,1,
|
||||||
|
]
|
||||||
|
|
||||||
|
const GRAD4 = [
|
||||||
|
0,1,1,1, 0,1,1,-1, 0,1,-1,1, 0,1,-1,-1,
|
||||||
|
0,-1,1,1, 0,-1,1,-1, 0,-1,-1,1, 0,-1,-1,-1,
|
||||||
|
1,0,1,1, 1,0,1,-1, 1,0,-1,1, 1,0,-1,-1,
|
||||||
|
-1,0,1,1, -1,0,1,-1, -1,0,-1,1, -1,0,-1,-1,
|
||||||
|
1,1,0,1, 1,1,0,-1, 1,-1,0,1, 1,-1,0,-1,
|
||||||
|
-1,1,0,1, -1,1,0,-1, -1,-1,0,1, -1,-1,0,-1,
|
||||||
|
1,1,1,0, 1,1,-1,0, 1,-1,1,0, 1,-1,-1,0,
|
||||||
|
-1,1,1,0, -1,1,-1,0, -1,-1,1,0, -1,-1,-1,0,
|
||||||
|
]
|
||||||
|
|
||||||
|
const PERM = [
|
||||||
|
151, 160, 137, 91, 90, 15, 131, 13, 201, 95, 96, 53, 194, 233, 7, 225, 140,
|
||||||
|
36, 103, 30, 69, 142, 8, 99, 37, 240, 21, 10, 23, 190, 6, 148, 247, 120,
|
||||||
|
234, 75, 0, 26, 197, 62, 94, 252, 219, 203, 117, 35, 11, 32, 57, 177, 33,
|
||||||
|
88, 237, 149, 56, 87, 174, 20, 125, 136, 171, 168, 68, 175, 74, 165, 71,
|
||||||
|
134, 139, 48, 27, 166, 77, 146, 158, 231, 83, 111, 229, 122, 60, 211, 133,
|
||||||
|
230, 220, 105, 92, 41, 55, 46, 245, 40, 244, 102, 143, 54, 65, 25, 63, 161,
|
||||||
|
1, 216, 80, 73, 209, 76, 132, 187, 208, 89, 18, 169, 200, 196, 135, 130,
|
||||||
|
116, 188, 159, 86, 164, 100, 109, 198, 173, 186, 3, 64, 52, 217, 226, 250,
|
||||||
|
124, 123, 5, 202, 38, 147, 118, 126, 255, 82, 85, 212, 207, 206, 59, 227,
|
||||||
|
47, 16, 58, 17, 182, 189, 28, 42, 223, 183, 170, 213, 119, 248, 152, 2, 44,
|
||||||
|
154, 163, 70, 221, 153, 101, 155, 167, 43, 172, 9, 129, 22, 39, 253, 19, 98,
|
||||||
|
108, 110, 79, 113, 224, 232, 178, 185, 112, 104, 218, 246, 97, 228, 251, 34,
|
||||||
|
242, 193, 238, 210, 144, 12, 191, 179, 162, 241, 81, 51, 145, 235, 249, 14,
|
||||||
|
239, 107, 49, 192, 214, 31, 181, 199, 106, 157, 184, 84, 204, 176, 115, 121,
|
||||||
|
50, 45, 127, 4, 150, 254, 138, 236, 205, 93, 222, 114, 67, 29, 24, 72, 243,
|
||||||
|
141, 128, 195, 78, 66, 215, 61, 156, 180, 151, 160, 137, 91, 90, 15, 131,
|
||||||
|
13, 201, 95, 96, 53, 194, 233, 7, 225, 140, 36, 103, 30, 69, 142, 8, 99, 37,
|
||||||
|
240, 21, 10, 23, 190, 6, 148, 247, 120, 234, 75, 0, 26, 197, 62, 94, 252,
|
||||||
|
219, 203, 117, 35, 11, 32, 57, 177, 33, 88, 237, 149, 56, 87, 174, 20, 125,
|
||||||
|
136, 171, 168, 68, 175, 74, 165, 71, 134, 139, 48, 27, 166, 77, 146, 158,
|
||||||
|
231, 83, 111, 229, 122, 60, 211, 133, 230, 220, 105, 92, 41, 55, 46, 245,
|
||||||
|
40, 244, 102, 143, 54, 65, 25, 63, 161, 1, 216, 80, 73, 209, 76, 132, 187,
|
||||||
|
208, 89, 18, 169, 200, 196, 135, 130, 116, 188, 159, 86, 164, 100, 109, 198,
|
||||||
|
173, 186, 3, 64, 52, 217, 226, 250, 124, 123, 5, 202, 38, 147, 118, 126,
|
||||||
|
255, 82, 85, 212, 207, 206, 59, 227, 47, 16, 58, 17, 182, 189, 28, 42, 223,
|
||||||
|
183, 170, 213, 119, 248, 152, 2, 44, 154, 163, 70, 221, 153, 101, 155, 167,
|
||||||
|
43, 172, 9, 129, 22, 39, 253, 19, 98, 108, 110, 79, 113, 224, 232, 178, 185,
|
||||||
|
112, 104, 218, 246, 97, 228, 251, 34, 242, 193, 238, 210, 144, 12, 191, 179,
|
||||||
|
162, 241, 81, 51, 145, 235, 249, 14, 239, 107, 49, 192, 214, 31, 181, 199,
|
||||||
|
106, 157, 184, 84, 204, 176, 115, 121, 50, 45, 127, 4, 150, 254, 138, 236,
|
||||||
|
05, 93, 222, 114, 67, 29, 24, 72, 243, 141, 128, 195, 78, 66, 215, 61, 156,
|
||||||
|
180,
|
||||||
|
]
|
||||||
|
|
||||||
|
static func simplex2(c0, c1):
|
||||||
|
var s = (c0+c1) * 0.36602540378443860
|
||||||
|
var a0 = floor(c0+s)
|
||||||
|
var a1 = floor(c1+s)
|
||||||
|
var t = (a0+a1) * 0.21132486540518714
|
||||||
|
|
||||||
|
var n0 = 0.0
|
||||||
|
var n1 = 0.0
|
||||||
|
var n2 = 0.0
|
||||||
|
|
||||||
|
var p00 = c0-(a0-t)
|
||||||
|
var p01 = 0.0
|
||||||
|
var p02 = 0.0
|
||||||
|
var p10 = c1-(a1-t)
|
||||||
|
var p11 = 0.0
|
||||||
|
var p12 = 0.0
|
||||||
|
|
||||||
|
# Current gdscript casts false to 0 and true to 1
|
||||||
|
var b0 = int(p00 > p10)
|
||||||
|
var b1 = int(p00 <= p10)
|
||||||
|
|
||||||
|
p01 = p00 - b0 + 0.21132486540518714
|
||||||
|
p11 = p10 - b1 + 0.21132486540518714
|
||||||
|
p02 = p00 + -0.577350269189626
|
||||||
|
p12 = p10 + -0.577350269189626
|
||||||
|
|
||||||
|
var A0 = int(a0)&255
|
||||||
|
var A1 = int(a1)&255
|
||||||
|
var g0 = (PERM[A0 + PERM[A1]] % 12) * 3
|
||||||
|
var g1 = (PERM[A0 + b0 + PERM[A1 + b1]] % 12) * 3
|
||||||
|
var g2 = (PERM[A0 + 1 + PERM[A1 + 1]] % 12) * 3
|
||||||
|
|
||||||
|
var f0 = 0.5 - p00*p00 - p10*p10
|
||||||
|
var f1 = 0.5 - p01*p01 - p11*p11
|
||||||
|
var f2 = 0.5 - p02*p02 - p12*p12
|
||||||
|
|
||||||
|
if f0 > 0:
|
||||||
|
#n0 = f0*f0*f0*f0 * (GRAD3[g0]*p00 + GRAD3[g0]*p10)
|
||||||
|
n0 = f0*f0*f0*f0 * (GRAD3[g0]*p00 + GRAD3[g0 + 1]*p10)
|
||||||
|
if f1 > 0:
|
||||||
|
#n1 = f1*f1*f1*f1 * (GRAD3[g1 + 1]*p01 + GRAD3[g1 + 1]*p11)
|
||||||
|
n1 = f1*f1*f1*f1 * (GRAD3[g1]*p01 + GRAD3[g1 + 1]*p11)
|
||||||
|
if f2 > 0:
|
||||||
|
#n2 = f2*f2*f2*f2 * (GRAD3[g2 + 2]*p02 + GRAD3[g2 + 2]*p12)
|
||||||
|
n2 = f2*f2*f2*f2 * (GRAD3[g2]*p02 + GRAD3[g2 + 1]*p12)
|
||||||
|
|
||||||
|
return (n0 + n1 + n2) * 70.0
|
||||||
|
|
||||||
|
|
||||||
|
static func simplex3(c0, c1, c2):
|
||||||
|
var s = (c0+c1+c2) * 0.33333333333333333
|
||||||
|
var a0 = floor(c0+s)
|
||||||
|
var a1 = floor(c1+s)
|
||||||
|
var a2 = floor(c2+s)
|
||||||
|
var t = (a0+a1+a2) * 0.16666666666666666
|
||||||
|
|
||||||
|
var n00 = 0
|
||||||
|
var n01 = 0
|
||||||
|
var n02 = 0
|
||||||
|
var n10 = 0
|
||||||
|
var n11 = 0
|
||||||
|
var n12 = 0
|
||||||
|
|
||||||
|
var p00 = c0-(a0-t)
|
||||||
|
var p01 = c1-(a1-t)
|
||||||
|
var p02 = c2-(a2-t)
|
||||||
|
|
||||||
|
if p00 >= p01:
|
||||||
|
if p01 >= p02:
|
||||||
|
n00 = 1
|
||||||
|
n10 = 1
|
||||||
|
n11 = 1
|
||||||
|
elif p00 >= p02:
|
||||||
|
n00 = 1
|
||||||
|
n10 = 1
|
||||||
|
n12 = 1
|
||||||
|
else:
|
||||||
|
n02 = 1
|
||||||
|
n10 = 1
|
||||||
|
n12 = 1
|
||||||
|
else:
|
||||||
|
if p01 < p02:
|
||||||
|
n02 = 1
|
||||||
|
n11 = 1
|
||||||
|
n12 = 1
|
||||||
|
elif p00 < p02:
|
||||||
|
n01 = 1
|
||||||
|
n11 = 1
|
||||||
|
n12 = 1
|
||||||
|
else:
|
||||||
|
n01 = 1
|
||||||
|
n10 = 1
|
||||||
|
n11 = 1
|
||||||
|
|
||||||
|
var p10 = p00 - 1.0 + 0.5
|
||||||
|
var p20 = p00 - n10 + 0.33333333333333333
|
||||||
|
var p30 = p00 - n00 + 0.16666666666666666
|
||||||
|
var p11 = p01 - 1.0 + 0.5
|
||||||
|
var p21 = p01 - n11 + 0.33333333333333333
|
||||||
|
var p31 = p01 - n01 + 0.16666666666666666
|
||||||
|
var p12 = p02 - 1.0 + 0.5
|
||||||
|
var p22 = p02 - n12 + 0.33333333333333333
|
||||||
|
var p32 = p02 - n02 + 0.16666666666666666
|
||||||
|
|
||||||
|
var A0 = int(a0)&255
|
||||||
|
var A1 = int(a1)&255
|
||||||
|
var A2 = int(a2)&255
|
||||||
|
var g0 = (PERM[A0 + PERM[A2]] % 12) * 3
|
||||||
|
var g1 = (PERM[A0 + n00 + PERM[A1 + n01 + PERM[n02 + A2]]] % 12) * 3
|
||||||
|
var g2 = (PERM[A0 + n10 + PERM[A1 + n11 + PERM[n12 + A2]]] % 12) * 3
|
||||||
|
var g3 = (PERM[A0 + 1 + PERM[A1 + 1 + PERM[A2 + 1]]] % 12) * 3
|
||||||
|
|
||||||
|
var f0 = 0.6 - p00*p00 - p01*p01 - p02*p02
|
||||||
|
var f1 = 0.6 - p10*p10 - p11*p11 - p12*p12
|
||||||
|
var f2 = 0.6 - p20*p20 - p21*p21 - p22*p22
|
||||||
|
var f3 = 0.6 - p30*p30 - p31*p31 - p32*p32
|
||||||
|
|
||||||
|
var n0 = 0.0
|
||||||
|
var n1 = 0.0
|
||||||
|
var n2 = 0.0
|
||||||
|
var n3 = 0.0
|
||||||
|
if f0 > 0:
|
||||||
|
n0 = f0*f0*f0*f0 * (p00*GRAD3[g0] + p01*GRAD3[g0+1] + p02*GRAD3[g0+2])
|
||||||
|
if f1 > 0:
|
||||||
|
n1 = f1*f1*f1*f1 * (p10*GRAD3[g1] + p11*GRAD3[g1+1] + p12*GRAD3[g1+2])
|
||||||
|
if f2 > 0:
|
||||||
|
n2 = f2*f2*f2*f2 * (p20*GRAD3[g2] + p21*GRAD3[g2+1] + p22*GRAD3[g2+2])
|
||||||
|
if f3 > 0:
|
||||||
|
n3 = f3*f3*f3*f3 * (p30*GRAD3[g3] + p31*GRAD3[g3+1] + p32*GRAD3[g3+2])
|
||||||
|
|
||||||
|
return (n0 + n1 + n2 + n3) * 32.0
|
||||||
|
|
||||||
|
|
||||||
|
## Testing only
|
||||||
|
#func _init():
|
||||||
|
# var c = 1000000
|
||||||
|
# print("Preloading data into active memory")
|
||||||
|
# for a in range(c/100):
|
||||||
|
# simplex2(c, c)
|
||||||
|
#
|
||||||
|
# print("Testing simplex2...")
|
||||||
|
# var t = OS.get_unix_time()
|
||||||
|
# for a in range(c):
|
||||||
|
# simplex2(c, c)
|
||||||
|
# print ("Testing of simplex2 with "+str(c)+" iterations took "+str(OS.get_unix_time()-t)+" seconds.")
|
||||||
|
#
|
||||||
|
# print("Testing simplex3...")
|
||||||
|
# t = OS.get_unix_time()
|
||||||
|
# for a in range(c):
|
||||||
|
# simplex3(c, c, c)
|
||||||
|
# print ("Testing of simplex3 with "+str(c)+" iterations took "+str(OS.get_unix_time()-t)+" seconds.")
|
||||||
|
# quit()
|
|
@ -0,0 +1,53 @@
|
||||||
|
|
||||||
|
extends MeshInstance
|
||||||
|
|
||||||
|
|
||||||
|
var voxel_map = null
|
||||||
|
|
||||||
|
var _normal_material = null
|
||||||
|
var _spawn_material = null
|
||||||
|
var _normal_pos = Vector3(0,0,0)
|
||||||
|
var _anim_time = 0
|
||||||
|
|
||||||
|
|
||||||
|
func _ready():
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
func spawn():
|
||||||
|
# _spawn_material = FixedMaterial.new()
|
||||||
|
# _spawn_material.set_texture(FixedMaterial.PARAM_DIFFUSE, voxel_map.material.get_texture(FixedMaterial.PARAM_DIFFUSE))
|
||||||
|
# _spawn_material.set_parameter(FixedMaterial.PARAM_DIFFUSE, Color(1,1,1,0.5))
|
||||||
|
# _spawn_material.set_flag(FixedMaterial.FLAG_USE_ALPHA, true)
|
||||||
|
#_spawn_material.set_blend_mode(Material.BLEND_MODE_MIX)
|
||||||
|
#set_material_override(_spawn_material)
|
||||||
|
#set_material_override(voxel_map.material)
|
||||||
|
_normal_pos = get_translation()
|
||||||
|
set_process(true)
|
||||||
|
|
||||||
|
|
||||||
|
func _process(delta):
|
||||||
|
_anim_time += delta
|
||||||
|
var k = _anim_time
|
||||||
|
if k < 1.0:
|
||||||
|
var pos = _normal_pos
|
||||||
|
pos.y -= (1-k)*(1-k) * 64.0
|
||||||
|
set_translation(pos)
|
||||||
|
else:
|
||||||
|
set_translation(_normal_pos)
|
||||||
|
set_process(false)
|
||||||
|
|
||||||
|
# var color = _spawn_material.get_parameter(FixedMaterial.PARAM_DIFFUSE)
|
||||||
|
# if color.a < 1.0:
|
||||||
|
# color.a += (0.1*delta)
|
||||||
|
# if color.a >= 1.0:
|
||||||
|
# set_material_override(voxel_map.material)
|
||||||
|
# set_process(false)
|
||||||
|
# _spawn_material = null
|
||||||
|
# else:
|
||||||
|
# color.r = color.a
|
||||||
|
# color.g = color.a
|
||||||
|
# color.b = color.a
|
||||||
|
# _spawn_material.set_parameter(FixedMaterial.PARAM_DIFFUSE, color)
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,26 @@
|
||||||
|
[gd_scene load_steps=2 format=1]
|
||||||
|
|
||||||
|
[ext_resource path="res://block.gd" type="Script" id=1]
|
||||||
|
|
||||||
|
[node name="Block" type="MeshInstance"]
|
||||||
|
|
||||||
|
_import_transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 )
|
||||||
|
layers = 1
|
||||||
|
geometry/visible = true
|
||||||
|
geometry/material_override = null
|
||||||
|
geometry/cast_shadow = true
|
||||||
|
geometry/receive_shadows = true
|
||||||
|
geometry/range_begin = 0.0
|
||||||
|
geometry/range_end = 0.0
|
||||||
|
geometry/extra_cull_margin = 0.0
|
||||||
|
geometry/billboard = false
|
||||||
|
geometry/billboard_y = false
|
||||||
|
geometry/depth_scale = false
|
||||||
|
geometry/visible_in_all_rooms = false
|
||||||
|
geometry/use_baked_light = false
|
||||||
|
geometry/baked_light_tex_id = 0
|
||||||
|
mesh/mesh = null
|
||||||
|
mesh/skeleton = NodePath("..")
|
||||||
|
script/script = ExtResource( 1 )
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,14 @@
|
||||||
|
|
||||||
|
extends Node
|
||||||
|
|
||||||
|
|
||||||
|
var chunk_position = Vector2(0,0)
|
||||||
|
var voxel_map = null
|
||||||
|
|
||||||
|
var _blocks = []
|
||||||
|
|
||||||
|
|
||||||
|
func _ready():
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,9 @@
|
||||||
|
[gd_scene load_steps=2 format=1]
|
||||||
|
|
||||||
|
[ext_resource path="res://chunk.gd" type="Script" id=1]
|
||||||
|
|
||||||
|
[node name="Node" type="Node"]
|
||||||
|
|
||||||
|
script/script = ExtResource( 1 )
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,80 @@
|
||||||
|
|
||||||
|
extends Camera
|
||||||
|
|
||||||
|
|
||||||
|
export var sensitivity = 0.4
|
||||||
|
export var min_angle = -90
|
||||||
|
export var max_angle = 90
|
||||||
|
export var speed = 10.0
|
||||||
|
export var capture_mouse = true
|
||||||
|
|
||||||
|
var _yaw = 0
|
||||||
|
var _pitch = 0
|
||||||
|
var _forward = Vector3(0,0,0)
|
||||||
|
|
||||||
|
|
||||||
|
func _ready():
|
||||||
|
if capture_mouse:
|
||||||
|
Input.set_mouse_mode(Input.MOUSE_MODE_CAPTURED)
|
||||||
|
set_process(true)
|
||||||
|
set_process_input(true)
|
||||||
|
|
||||||
|
func _process(delta):
|
||||||
|
var motor = Vector3(0,0,0)
|
||||||
|
|
||||||
|
var forward = get_transform().basis * Vector3(0,0,-1)
|
||||||
|
var right = get_transform().basis * Vector3(1,0,0)
|
||||||
|
var up = Vector3(0,1,0)
|
||||||
|
|
||||||
|
if abs(forward.y) < 1.0:
|
||||||
|
_forward = Vector3(forward.x, 0, forward.z).normalized()
|
||||||
|
|
||||||
|
if Input.is_key_pressed(KEY_Z):
|
||||||
|
motor += _forward
|
||||||
|
if Input.is_key_pressed(KEY_S):
|
||||||
|
motor -= _forward
|
||||||
|
if Input.is_key_pressed(KEY_Q):
|
||||||
|
motor -= right
|
||||||
|
if Input.is_key_pressed(KEY_D):
|
||||||
|
motor += right
|
||||||
|
if Input.is_key_pressed(KEY_SPACE):
|
||||||
|
motor += up
|
||||||
|
if Input.is_key_pressed(KEY_SHIFT):
|
||||||
|
motor -= up
|
||||||
|
|
||||||
|
set_translation(get_translation() + motor * (delta * speed))
|
||||||
|
|
||||||
|
|
||||||
|
func _input(event):
|
||||||
|
if event.type == InputEvent.MOUSE_BUTTON:
|
||||||
|
if event.pressed and Input.get_mouse_mode() != Input.MOUSE_MODE_CAPTURED:
|
||||||
|
if capture_mouse:
|
||||||
|
# Capture the mouse
|
||||||
|
Input.set_mouse_mode(Input.MOUSE_MODE_CAPTURED)
|
||||||
|
|
||||||
|
elif event.type == InputEvent.MOUSE_MOTION:
|
||||||
|
if Input.get_mouse_mode() == Input.MOUSE_MODE_CAPTURED || not capture_mouse:
|
||||||
|
# Get mouse delta
|
||||||
|
var motion = event.relative_pos
|
||||||
|
|
||||||
|
# Add to rotations
|
||||||
|
_yaw -= motion.x * sensitivity
|
||||||
|
_pitch += motion.y * sensitivity
|
||||||
|
|
||||||
|
# Clamp pitch
|
||||||
|
var e = 0.001
|
||||||
|
if _pitch > max_angle-e:
|
||||||
|
_pitch = max_angle-e
|
||||||
|
elif _pitch < min_angle+e:
|
||||||
|
_pitch = min_angle+e
|
||||||
|
|
||||||
|
# Apply rotations
|
||||||
|
set_rotation(Vector3(0, deg2rad(_yaw), 0))
|
||||||
|
rotate_x(deg2rad(_pitch))
|
||||||
|
|
||||||
|
elif event.type == InputEvent.KEY:
|
||||||
|
if event.pressed and event.scancode == KEY_ESCAPE:
|
||||||
|
# Get the mouse back
|
||||||
|
Input.set_mouse_mode(Input.MOUSE_MODE_VISIBLE)
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,19 @@
|
||||||
|
[application]
|
||||||
|
|
||||||
|
name="SurfaceTool"
|
||||||
|
main_scene="res://new_scene.tscn"
|
||||||
|
target_fps=60
|
||||||
|
icon="res://icon.png"
|
||||||
|
|
||||||
|
[debug]
|
||||||
|
|
||||||
|
print_fps=false
|
||||||
|
|
||||||
|
[rasterizer]
|
||||||
|
|
||||||
|
shadow_filter=3
|
||||||
|
trilinear_mipmap_filter=true
|
||||||
|
|
||||||
|
[render]
|
||||||
|
|
||||||
|
default_clear_color=#ff2e2e2e
|
|
@ -0,0 +1,276 @@
|
||||||
|
[convert_images]
|
||||||
|
|
||||||
|
action="none"
|
||||||
|
compress_quality=0.7
|
||||||
|
formats="png"
|
||||||
|
shrink=1.0
|
||||||
|
|
||||||
|
[convert_samples]
|
||||||
|
|
||||||
|
action="none"
|
||||||
|
max_hz=44100
|
||||||
|
trim=false
|
||||||
|
|
||||||
|
[convert_scenes]
|
||||||
|
|
||||||
|
convert_text_scenes=true
|
||||||
|
|
||||||
|
[export_filter]
|
||||||
|
|
||||||
|
filter=""
|
||||||
|
filter_exclude=""
|
||||||
|
type="resources"
|
||||||
|
|
||||||
|
[platform:Android]
|
||||||
|
|
||||||
|
apk_expansion/SALT=""
|
||||||
|
apk_expansion/enable=false
|
||||||
|
apk_expansion/public_key=""
|
||||||
|
architecture/arm=true
|
||||||
|
architecture/x86=false
|
||||||
|
command_line/extra_args=""
|
||||||
|
custom_package/debug=""
|
||||||
|
custom_package/release=""
|
||||||
|
keystore/release=""
|
||||||
|
keystore/release_password=""
|
||||||
|
keystore/release_user=""
|
||||||
|
one_click_deploy/clear_previous_install=true
|
||||||
|
package/icon=""
|
||||||
|
package/name=""
|
||||||
|
package/signed=true
|
||||||
|
package/unique_name="org.godotengine.$genname"
|
||||||
|
permissions/access_checkin_properties=false
|
||||||
|
permissions/access_coarse_location=false
|
||||||
|
permissions/access_fine_location=false
|
||||||
|
permissions/access_location_extra_commands=false
|
||||||
|
permissions/access_mock_location=false
|
||||||
|
permissions/access_network_state=false
|
||||||
|
permissions/access_surface_flinger=false
|
||||||
|
permissions/access_wifi_state=false
|
||||||
|
permissions/account_manager=false
|
||||||
|
permissions/add_voicemail=false
|
||||||
|
permissions/authenticate_accounts=false
|
||||||
|
permissions/battery_stats=false
|
||||||
|
permissions/bind_accessibility_service=false
|
||||||
|
permissions/bind_appwidget=false
|
||||||
|
permissions/bind_device_admin=false
|
||||||
|
permissions/bind_input_method=false
|
||||||
|
permissions/bind_nfc_service=false
|
||||||
|
permissions/bind_notification_listener_service=false
|
||||||
|
permissions/bind_print_service=false
|
||||||
|
permissions/bind_remoteviews=false
|
||||||
|
permissions/bind_text_service=false
|
||||||
|
permissions/bind_vpn_service=false
|
||||||
|
permissions/bind_wallpaper=false
|
||||||
|
permissions/bluetooth=false
|
||||||
|
permissions/bluetooth_admin=false
|
||||||
|
permissions/bluetooth_privileged=false
|
||||||
|
permissions/brick=false
|
||||||
|
permissions/broadcast_package_removed=false
|
||||||
|
permissions/broadcast_sms=false
|
||||||
|
permissions/broadcast_sticky=false
|
||||||
|
permissions/broadcast_wap_push=false
|
||||||
|
permissions/call_phone=false
|
||||||
|
permissions/call_privileged=false
|
||||||
|
permissions/camera=false
|
||||||
|
permissions/capture_audio_output=false
|
||||||
|
permissions/capture_secure_video_output=false
|
||||||
|
permissions/capture_video_output=false
|
||||||
|
permissions/change_component_enabled_state=false
|
||||||
|
permissions/change_configuration=false
|
||||||
|
permissions/change_network_state=false
|
||||||
|
permissions/change_wifi_multicast_state=false
|
||||||
|
permissions/change_wifi_state=false
|
||||||
|
permissions/clear_app_cache=false
|
||||||
|
permissions/clear_app_user_data=false
|
||||||
|
permissions/control_location_updates=false
|
||||||
|
permissions/delete_cache_files=false
|
||||||
|
permissions/delete_packages=false
|
||||||
|
permissions/device_power=false
|
||||||
|
permissions/diagnostic=false
|
||||||
|
permissions/disable_keyguard=false
|
||||||
|
permissions/dump=false
|
||||||
|
permissions/expand_status_bar=false
|
||||||
|
permissions/factory_test=false
|
||||||
|
permissions/flashlight=false
|
||||||
|
permissions/force_back=false
|
||||||
|
permissions/get_accounts=false
|
||||||
|
permissions/get_package_size=false
|
||||||
|
permissions/get_tasks=false
|
||||||
|
permissions/get_top_activity_info=false
|
||||||
|
permissions/global_search=false
|
||||||
|
permissions/hardware_test=false
|
||||||
|
permissions/inject_events=false
|
||||||
|
permissions/install_location_provider=false
|
||||||
|
permissions/install_packages=false
|
||||||
|
permissions/install_shortcut=false
|
||||||
|
permissions/internal_system_window=false
|
||||||
|
permissions/internet=false
|
||||||
|
permissions/kill_background_processes=false
|
||||||
|
permissions/location_hardware=false
|
||||||
|
permissions/manage_accounts=false
|
||||||
|
permissions/manage_app_tokens=false
|
||||||
|
permissions/manage_documents=false
|
||||||
|
permissions/master_clear=false
|
||||||
|
permissions/media_content_control=false
|
||||||
|
permissions/modify_audio_settings=false
|
||||||
|
permissions/modify_phone_state=false
|
||||||
|
permissions/mount_format_filesystems=false
|
||||||
|
permissions/mount_unmount_filesystems=false
|
||||||
|
permissions/nfc=false
|
||||||
|
permissions/persistent_activity=false
|
||||||
|
permissions/process_outgoing_calls=false
|
||||||
|
permissions/read_calendar=false
|
||||||
|
permissions/read_call_log=false
|
||||||
|
permissions/read_contacts=false
|
||||||
|
permissions/read_external_storage=false
|
||||||
|
permissions/read_frame_buffer=false
|
||||||
|
permissions/read_history_bookmarks=false
|
||||||
|
permissions/read_input_state=false
|
||||||
|
permissions/read_logs=false
|
||||||
|
permissions/read_phone_state=false
|
||||||
|
permissions/read_profile=false
|
||||||
|
permissions/read_sms=false
|
||||||
|
permissions/read_social_stream=false
|
||||||
|
permissions/read_sync_settings=false
|
||||||
|
permissions/read_sync_stats=false
|
||||||
|
permissions/read_user_dictionary=false
|
||||||
|
permissions/reboot=false
|
||||||
|
permissions/receive_boot_completed=false
|
||||||
|
permissions/receive_mms=false
|
||||||
|
permissions/receive_sms=false
|
||||||
|
permissions/receive_wap_push=false
|
||||||
|
permissions/record_audio=false
|
||||||
|
permissions/reorder_tasks=false
|
||||||
|
permissions/restart_packages=false
|
||||||
|
permissions/send_respond_via_message=false
|
||||||
|
permissions/send_sms=false
|
||||||
|
permissions/set_activity_watcher=false
|
||||||
|
permissions/set_alarm=false
|
||||||
|
permissions/set_always_finish=false
|
||||||
|
permissions/set_animation_scale=false
|
||||||
|
permissions/set_debug_app=false
|
||||||
|
permissions/set_orientation=false
|
||||||
|
permissions/set_pointer_speed=false
|
||||||
|
permissions/set_preferred_applications=false
|
||||||
|
permissions/set_process_limit=false
|
||||||
|
permissions/set_time=false
|
||||||
|
permissions/set_time_zone=false
|
||||||
|
permissions/set_wallpaper=false
|
||||||
|
permissions/set_wallpaper_hints=false
|
||||||
|
permissions/signal_persistent_processes=false
|
||||||
|
permissions/status_bar=false
|
||||||
|
permissions/subscribed_feeds_read=false
|
||||||
|
permissions/subscribed_feeds_write=false
|
||||||
|
permissions/system_alert_window=false
|
||||||
|
permissions/transmit_ir=false
|
||||||
|
permissions/uninstall_shortcut=false
|
||||||
|
permissions/update_device_stats=false
|
||||||
|
permissions/use_credentials=false
|
||||||
|
permissions/use_sip=false
|
||||||
|
permissions/vibrate=false
|
||||||
|
permissions/wake_lock=false
|
||||||
|
permissions/write_apn_settings=false
|
||||||
|
permissions/write_calendar=false
|
||||||
|
permissions/write_call_log=false
|
||||||
|
permissions/write_contacts=false
|
||||||
|
permissions/write_external_storage=false
|
||||||
|
permissions/write_gservices=false
|
||||||
|
permissions/write_history_bookmarks=false
|
||||||
|
permissions/write_profile=false
|
||||||
|
permissions/write_secure_settings=false
|
||||||
|
permissions/write_settings=false
|
||||||
|
permissions/write_sms=false
|
||||||
|
permissions/write_social_stream=false
|
||||||
|
permissions/write_sync_settings=false
|
||||||
|
permissions/write_user_dictionary=false
|
||||||
|
screen/immersive_mode=true
|
||||||
|
screen/orientation=0
|
||||||
|
screen/support_large=true
|
||||||
|
screen/support_normal=true
|
||||||
|
screen/support_small=true
|
||||||
|
screen/support_xlarge=true
|
||||||
|
screen/use_32_bits_view=true
|
||||||
|
user_permissions/0=""
|
||||||
|
user_permissions/1=""
|
||||||
|
user_permissions/10=""
|
||||||
|
user_permissions/11=""
|
||||||
|
user_permissions/12=""
|
||||||
|
user_permissions/13=""
|
||||||
|
user_permissions/14=""
|
||||||
|
user_permissions/15=""
|
||||||
|
user_permissions/16=""
|
||||||
|
user_permissions/17=""
|
||||||
|
user_permissions/18=""
|
||||||
|
user_permissions/19=""
|
||||||
|
user_permissions/2=""
|
||||||
|
user_permissions/3=""
|
||||||
|
user_permissions/4=""
|
||||||
|
user_permissions/5=""
|
||||||
|
user_permissions/6=""
|
||||||
|
user_permissions/7=""
|
||||||
|
user_permissions/8=""
|
||||||
|
user_permissions/9=""
|
||||||
|
version/code=1
|
||||||
|
version/name="1.0"
|
||||||
|
|
||||||
|
[platform:BlackBerry 10]
|
||||||
|
|
||||||
|
package/category="core.games"
|
||||||
|
package/custom_template=""
|
||||||
|
package/description="Game made with Godot Engine"
|
||||||
|
package/icon=""
|
||||||
|
package/name=""
|
||||||
|
package/unique_name="com.godot.noname"
|
||||||
|
release/author="Cert. Name"
|
||||||
|
release/author_id="Cert. ID"
|
||||||
|
version/code=1
|
||||||
|
version/name="1.0"
|
||||||
|
|
||||||
|
[platform:HTML5]
|
||||||
|
|
||||||
|
browser/enable_run=false
|
||||||
|
custom_package/debug=""
|
||||||
|
custom_package/release=""
|
||||||
|
html/controls_enabled=true
|
||||||
|
html/font_family="arial,sans-serif"
|
||||||
|
html/head_include=""
|
||||||
|
html/style_include=""
|
||||||
|
html/title=""
|
||||||
|
options/memory_size=3
|
||||||
|
|
||||||
|
[platform:Linux X11]
|
||||||
|
|
||||||
|
binary/64_bits=true
|
||||||
|
custom_binary/debug=""
|
||||||
|
custom_binary/release=""
|
||||||
|
resources/bundle_dependencies_(for_optical_disc)=false
|
||||||
|
resources/pack_mode=1
|
||||||
|
|
||||||
|
[platform:Mac OSX]
|
||||||
|
|
||||||
|
application/64_bits=false
|
||||||
|
application/copyright=""
|
||||||
|
application/icon=""
|
||||||
|
application/identifier="com.godot.macgame"
|
||||||
|
application/info="This Game is Nice"
|
||||||
|
application/name=""
|
||||||
|
application/short_version="1.0"
|
||||||
|
application/signature="godotmacgame"
|
||||||
|
application/version="1.0"
|
||||||
|
custom_package/debug=""
|
||||||
|
custom_package/release=""
|
||||||
|
display/high_res=false
|
||||||
|
|
||||||
|
[platform:Windows Desktop]
|
||||||
|
|
||||||
|
binary/64_bits=true
|
||||||
|
custom_binary/debug=""
|
||||||
|
custom_binary/release=""
|
||||||
|
resources/bundle_dependencies_(for_optical_disc)=false
|
||||||
|
resources/pack_mode=0
|
||||||
|
|
||||||
|
[script]
|
||||||
|
|
||||||
|
action="compile"
|
||||||
|
encrypt_key=""
|
|
@ -0,0 +1,715 @@
|
||||||
|
|
||||||
|
extends Node
|
||||||
|
|
||||||
|
const BLOCK_SIZE = 16
|
||||||
|
|
||||||
|
const SIDE_LEFT = 0
|
||||||
|
const SIDE_RIGHT = 1
|
||||||
|
const SIDE_BOTTOM = 2
|
||||||
|
const SIDE_TOP = 3
|
||||||
|
const SIDE_BACK = 4
|
||||||
|
const SIDE_FRONT = 5
|
||||||
|
|
||||||
|
const SORT_TIME = 1
|
||||||
|
const TILE_SIZE = 16
|
||||||
|
|
||||||
|
export(Material) var material = null
|
||||||
|
export(Material) var transparent_material = null
|
||||||
|
var min_y = -2
|
||||||
|
var max_y = 2
|
||||||
|
var view_radius = 8
|
||||||
|
|
||||||
|
var _side_normals = [
|
||||||
|
Vector3(-1,0,0),
|
||||||
|
Vector3(1,0,0),
|
||||||
|
Vector3(0,-1,0),
|
||||||
|
Vector3(0,1,0),
|
||||||
|
Vector3(0,0,-1),
|
||||||
|
Vector3(0,0,1)
|
||||||
|
]
|
||||||
|
|
||||||
|
var _blocks = {}
|
||||||
|
var _generating_blocks = {}
|
||||||
|
#var _chunks = {}
|
||||||
|
|
||||||
|
var _pending_blocks = []
|
||||||
|
var _thread = Thread.new()
|
||||||
|
var _time_before_sort = SORT_TIME
|
||||||
|
var _camera = null
|
||||||
|
var _voxel_types = []
|
||||||
|
var _priority_positions = []
|
||||||
|
var _outer_positions = []
|
||||||
|
var _precalc_neighboring = []
|
||||||
|
|
||||||
|
|
||||||
|
class Block:
|
||||||
|
var voxel_map = null
|
||||||
|
var voxels = []
|
||||||
|
var pos = Vector3(0,0,0)
|
||||||
|
var mesh = null
|
||||||
|
var node = null
|
||||||
|
var gen_time = 0
|
||||||
|
var has_generated = false
|
||||||
|
var has_structures = false
|
||||||
|
var need_update = false
|
||||||
|
|
||||||
|
func _init():
|
||||||
|
pass
|
||||||
|
#voxels = create_voxel_grid(BLOCK_SIZE+2,BLOCK_SIZE+2,BLOCK_SIZE+2)
|
||||||
|
|
||||||
|
static func create_voxel_grid(sx,sy,sz):
|
||||||
|
var grid = []
|
||||||
|
grid.resize(sz)
|
||||||
|
for z in range(0, sz):
|
||||||
|
var plane = []
|
||||||
|
plane.resize(sy)
|
||||||
|
grid[z] = plane
|
||||||
|
for y in range(0, sy):
|
||||||
|
var line = []
|
||||||
|
#var line = IntArray()
|
||||||
|
line.resize(sx)
|
||||||
|
plane[y] = line
|
||||||
|
for x in range(0, sx):
|
||||||
|
line[x] = 0
|
||||||
|
return grid
|
||||||
|
|
||||||
|
func is_generated():
|
||||||
|
return has_generated and has_structures
|
||||||
|
|
||||||
|
func is_surrounded():
|
||||||
|
var blocks = voxel_map._blocks
|
||||||
|
var ngb = voxel_map._precalc_neighboring
|
||||||
|
for v in ngb:
|
||||||
|
if not blocks.has(pos + v):
|
||||||
|
return false
|
||||||
|
return false
|
||||||
|
|
||||||
|
func get_ground_y(x,z):
|
||||||
|
var types = voxel_map._voxel_types
|
||||||
|
for y in range(BLOCK_SIZE-1, 0, -1):
|
||||||
|
if not types[voxels[z][y][x]].is_transparent:
|
||||||
|
return y
|
||||||
|
return 0
|
||||||
|
|
||||||
|
func local_to_map(vpos):
|
||||||
|
return vpos + pos * BLOCK_SIZE
|
||||||
|
|
||||||
|
|
||||||
|
class BlockRequest:
|
||||||
|
const TYPE_GENERATE = 0
|
||||||
|
const TYPE_UPDATE = 0
|
||||||
|
|
||||||
|
var type = 0
|
||||||
|
var block_pos = Vector3(0,0,0)
|
||||||
|
|
||||||
|
func _init(pos, type=TYPE_GENERATE):
|
||||||
|
self.block_pos = pos
|
||||||
|
self.type = type
|
||||||
|
|
||||||
|
|
||||||
|
#class Chunk:
|
||||||
|
# var heightmap = []
|
||||||
|
#
|
||||||
|
# func _init():
|
||||||
|
# heightmap.resize(BLOCK_SIZE+2)
|
||||||
|
# for y in range(0, heightmap.size()):
|
||||||
|
# var line = []
|
||||||
|
# line.resize(BLOCK_SIZE+2)
|
||||||
|
# heightmap[y] = line
|
||||||
|
# for x in range(0, line.size()):
|
||||||
|
# line[x] = 0
|
||||||
|
|
||||||
|
|
||||||
|
class VoxelType:
|
||||||
|
const GEOM_EMPTY = 0
|
||||||
|
const GEOM_CUBE = 1
|
||||||
|
const GEOM_XQUAD = 2
|
||||||
|
const GEOM_MODEL = 3
|
||||||
|
const GEOM_LIQUID = 4
|
||||||
|
|
||||||
|
var id = 0
|
||||||
|
var name = "default"
|
||||||
|
var cube_side_uv4 = []
|
||||||
|
var is_transparent = false
|
||||||
|
var geom_type = GEOM_CUBE
|
||||||
|
|
||||||
|
# Mesh that will always be included in the voxel
|
||||||
|
var model_vertices = []
|
||||||
|
var model_uv = []
|
||||||
|
# Parts of the mesh that will appear only if connected sides are transparent
|
||||||
|
var model_side_vertices = []
|
||||||
|
var model_side_uv = []
|
||||||
|
var model_normals = []
|
||||||
|
|
||||||
|
func _init(id, name):
|
||||||
|
self.id = id
|
||||||
|
self.name = name
|
||||||
|
cube_side_uv4.resize(6)
|
||||||
|
set_all_atlas_pos(Vector2(0,0))
|
||||||
|
|
||||||
|
func set_side_atlas_pos(side, pos):
|
||||||
|
var s = 1.0 / 4.0
|
||||||
|
# Apply a tiny padding to avoid tiling artefacts
|
||||||
|
var e = 0.001
|
||||||
|
cube_side_uv4[side] = [
|
||||||
|
s * (pos + Vector2(e,e)),
|
||||||
|
s * (pos + Vector2(1-e,e)),
|
||||||
|
s * (pos + Vector2(e,1-e)),
|
||||||
|
s * (pos + Vector2(1-e,1-e))
|
||||||
|
]
|
||||||
|
return self
|
||||||
|
|
||||||
|
func set_all_atlas_pos(pos):
|
||||||
|
for i in range(0, 6):
|
||||||
|
set_side_atlas_pos(i, pos)
|
||||||
|
return self
|
||||||
|
|
||||||
|
func set_tbs_atlas_pos(top_pos, bottom_pos, sides_pos):
|
||||||
|
set_side_atlas_pos(SIDE_LEFT, sides_pos)
|
||||||
|
set_side_atlas_pos(SIDE_RIGHT, sides_pos)
|
||||||
|
set_side_atlas_pos(SIDE_FRONT, sides_pos)
|
||||||
|
set_side_atlas_pos(SIDE_BACK, sides_pos)
|
||||||
|
set_side_atlas_pos(SIDE_TOP, top_pos)
|
||||||
|
set_side_atlas_pos(SIDE_BOTTOM, bottom_pos)
|
||||||
|
return self
|
||||||
|
|
||||||
|
func set_geom(g):
|
||||||
|
geom_type = g
|
||||||
|
return self
|
||||||
|
|
||||||
|
func set_transparent(trans):
|
||||||
|
is_transparent = trans
|
||||||
|
return self
|
||||||
|
|
||||||
|
func compile():
|
||||||
|
if geom_type == GEOM_CUBE:
|
||||||
|
model_side_vertices = _make_cube_vertex_offsets()
|
||||||
|
model_side_uv = _make_cube_side_uv6(cube_side_uv4)
|
||||||
|
|
||||||
|
elif geom_type == GEOM_LIQUID:
|
||||||
|
model_side_vertices = _make_cube_vertex_offsets(15.0 / 16.0)
|
||||||
|
model_side_uv = _make_cube_side_uv6(cube_side_uv4)
|
||||||
|
|
||||||
|
elif geom_type == GEOM_XQUAD:
|
||||||
|
var uv = cube_side_uv4
|
||||||
|
model_uv = [
|
||||||
|
uv[0][2],
|
||||||
|
uv[0][0],
|
||||||
|
uv[0][1],
|
||||||
|
uv[0][2],
|
||||||
|
uv[0][1],
|
||||||
|
uv[0][3],
|
||||||
|
|
||||||
|
uv[0][3],
|
||||||
|
uv[0][2],
|
||||||
|
uv[0][1],
|
||||||
|
uv[0][2],
|
||||||
|
uv[0][0],
|
||||||
|
uv[0][1]
|
||||||
|
]
|
||||||
|
model_vertices = [
|
||||||
|
Vector3(0,0,0),
|
||||||
|
Vector3(0,1,0),
|
||||||
|
Vector3(1,1,1),
|
||||||
|
Vector3(0,0,0),
|
||||||
|
Vector3(1,1,1),
|
||||||
|
Vector3(1,0,1),
|
||||||
|
|
||||||
|
Vector3(1,0,0),
|
||||||
|
Vector3(0,0,1),
|
||||||
|
Vector3(1,1,0),
|
||||||
|
Vector3(0,0,1),
|
||||||
|
Vector3(0,1,1),
|
||||||
|
Vector3(1,1,0)
|
||||||
|
]
|
||||||
|
model_normals = [
|
||||||
|
Vector3(-0.7, 0.0, 0.7),
|
||||||
|
Vector3(-0.7, 0.0, 0.7),
|
||||||
|
Vector3(-0.7, 0.0, 0.7),
|
||||||
|
Vector3(-0.7, 0.0, 0.7),
|
||||||
|
Vector3(-0.7, 0.0, 0.7),
|
||||||
|
Vector3(-0.7, 0.0, 0.7),
|
||||||
|
|
||||||
|
Vector3(0.7, 0.0, 0.7),
|
||||||
|
Vector3(0.7, 0.0, 0.7),
|
||||||
|
Vector3(0.7, 0.0, 0.7),
|
||||||
|
Vector3(0.7, 0.0, 0.7),
|
||||||
|
Vector3(0.7, 0.0, 0.7),
|
||||||
|
Vector3(0.7, 0.0, 0.7)
|
||||||
|
]
|
||||||
|
|
||||||
|
else:
|
||||||
|
print("Unknown voxel geometry type")
|
||||||
|
|
||||||
|
|
||||||
|
static func _make_cube_vertex_offsets(sy=1):
|
||||||
|
var a = [
|
||||||
|
[
|
||||||
|
# LEFT
|
||||||
|
Vector3(0,0,0),
|
||||||
|
Vector3(0,sy,0),
|
||||||
|
Vector3(0,sy,1),
|
||||||
|
Vector3(0,0,0),
|
||||||
|
Vector3(0,sy,1),
|
||||||
|
Vector3(0,0,1),
|
||||||
|
],
|
||||||
|
[
|
||||||
|
# RIGHT
|
||||||
|
Vector3(1,0,0),
|
||||||
|
Vector3(1,sy,1),
|
||||||
|
Vector3(1,sy,0),
|
||||||
|
Vector3(1,0,0),
|
||||||
|
Vector3(1,0,1),
|
||||||
|
Vector3(1,sy,1)
|
||||||
|
],
|
||||||
|
[
|
||||||
|
# BOTTOM
|
||||||
|
Vector3(0,0,0),
|
||||||
|
Vector3(1,0,1),
|
||||||
|
Vector3(1,0,0),
|
||||||
|
Vector3(0,0,0),
|
||||||
|
Vector3(0,0,1),
|
||||||
|
Vector3(1,0,1)
|
||||||
|
],
|
||||||
|
[
|
||||||
|
# TOP
|
||||||
|
Vector3(0,sy,0),
|
||||||
|
Vector3(1,sy,0),
|
||||||
|
Vector3(1,sy,1),
|
||||||
|
Vector3(0,sy,0),
|
||||||
|
Vector3(1,sy,1),
|
||||||
|
Vector3(0,sy,1)
|
||||||
|
],
|
||||||
|
[
|
||||||
|
# BACK
|
||||||
|
Vector3(0,0,0),
|
||||||
|
Vector3(1,0,0),
|
||||||
|
Vector3(1,sy,0),
|
||||||
|
Vector3(0,0,0),
|
||||||
|
Vector3(1,sy,0),
|
||||||
|
Vector3(0,sy,0),
|
||||||
|
],
|
||||||
|
[
|
||||||
|
# FRONT
|
||||||
|
Vector3(1,0,1),
|
||||||
|
Vector3(0,0,1),
|
||||||
|
Vector3(1,sy,1),
|
||||||
|
Vector3(0,0,1),
|
||||||
|
Vector3(0,sy,1),
|
||||||
|
Vector3(1,sy,1)
|
||||||
|
]
|
||||||
|
]
|
||||||
|
return a
|
||||||
|
|
||||||
|
static func _make_cube_side_uv6(sides_uv4):
|
||||||
|
var uvs = sides_uv4
|
||||||
|
var uv6 = [
|
||||||
|
[
|
||||||
|
uvs[SIDE_LEFT][2],
|
||||||
|
uvs[SIDE_LEFT][0],
|
||||||
|
uvs[SIDE_LEFT][1],
|
||||||
|
uvs[SIDE_LEFT][2],
|
||||||
|
uvs[SIDE_LEFT][1],
|
||||||
|
uvs[SIDE_LEFT][3]
|
||||||
|
],
|
||||||
|
[
|
||||||
|
uvs[SIDE_RIGHT][2],
|
||||||
|
uvs[SIDE_RIGHT][1],
|
||||||
|
uvs[SIDE_RIGHT][0],
|
||||||
|
uvs[SIDE_RIGHT][2],
|
||||||
|
uvs[SIDE_RIGHT][3],
|
||||||
|
uvs[SIDE_RIGHT][1]
|
||||||
|
],
|
||||||
|
[
|
||||||
|
uvs[SIDE_BOTTOM][0],
|
||||||
|
uvs[SIDE_BOTTOM][3],
|
||||||
|
uvs[SIDE_BOTTOM][1],
|
||||||
|
uvs[SIDE_BOTTOM][0],
|
||||||
|
uvs[SIDE_BOTTOM][2],
|
||||||
|
uvs[SIDE_BOTTOM][3]
|
||||||
|
],
|
||||||
|
[
|
||||||
|
uvs[SIDE_TOP][0],
|
||||||
|
uvs[SIDE_TOP][1],
|
||||||
|
uvs[SIDE_TOP][3],
|
||||||
|
uvs[SIDE_TOP][0],
|
||||||
|
uvs[SIDE_TOP][3],
|
||||||
|
uvs[SIDE_TOP][2]
|
||||||
|
],
|
||||||
|
[
|
||||||
|
uvs[SIDE_BACK][2],
|
||||||
|
uvs[SIDE_BACK][3],
|
||||||
|
uvs[SIDE_BACK][1],
|
||||||
|
uvs[SIDE_BACK][2],
|
||||||
|
uvs[SIDE_BACK][1],
|
||||||
|
uvs[SIDE_BACK][0]
|
||||||
|
],
|
||||||
|
[
|
||||||
|
uvs[SIDE_FRONT][3],
|
||||||
|
uvs[SIDE_FRONT][2],
|
||||||
|
uvs[SIDE_FRONT][1],
|
||||||
|
uvs[SIDE_FRONT][2],
|
||||||
|
uvs[SIDE_FRONT][0],
|
||||||
|
uvs[SIDE_FRONT][1]
|
||||||
|
],
|
||||||
|
]
|
||||||
|
return uv6
|
||||||
|
|
||||||
|
|
||||||
|
func _ready():
|
||||||
|
_camera = get_parent().get_node("Camera")
|
||||||
|
|
||||||
|
_load_voxel_types()
|
||||||
|
_precalculate_priority_positions()
|
||||||
|
_precalculate_neighboring()
|
||||||
|
_update_pending_blocks()
|
||||||
|
|
||||||
|
set_process(true)
|
||||||
|
|
||||||
|
|
||||||
|
func _precalculate_neighboring():
|
||||||
|
for z in range(-1, 2):
|
||||||
|
for y in range(-1, 2):
|
||||||
|
for x in range(-1, 2):
|
||||||
|
if x != 0 and y != 0 and z != 0:
|
||||||
|
_precalc_neighboring.append(Vector3(x,y,z))
|
||||||
|
|
||||||
|
|
||||||
|
func add_voxel_type(id, name):
|
||||||
|
var vt = VoxelType.new(id, name)
|
||||||
|
if id >= _voxel_types.size():
|
||||||
|
_voxel_types.resize(id+1)
|
||||||
|
_voxel_types[id] = vt
|
||||||
|
return vt
|
||||||
|
|
||||||
|
|
||||||
|
func _load_voxel_types():
|
||||||
|
add_voxel_type(0, "air") \
|
||||||
|
.set_geom(VoxelType.GEOM_EMPTY) \
|
||||||
|
.set_transparent(true)
|
||||||
|
|
||||||
|
add_voxel_type(1, "grassy_dirt") \
|
||||||
|
.set_tbs_atlas_pos(Vector2(0,0), Vector2(1,0), Vector2(0,1))
|
||||||
|
|
||||||
|
add_voxel_type(2, "bush") \
|
||||||
|
.set_all_atlas_pos(Vector2(1,1)) \
|
||||||
|
.set_geom(VoxelType.GEOM_XQUAD) \
|
||||||
|
.set_transparent(true)
|
||||||
|
|
||||||
|
add_voxel_type(3, "log") \
|
||||||
|
.set_tbs_atlas_pos(Vector2(3,0), Vector2(3,0), Vector2(2,0))
|
||||||
|
|
||||||
|
add_voxel_type(4, "dirt") \
|
||||||
|
.set_all_atlas_pos(Vector2(1,0))
|
||||||
|
|
||||||
|
add_voxel_type(5, "water") \
|
||||||
|
.set_all_atlas_pos(Vector2(2,1)) \
|
||||||
|
.set_transparent(true) \
|
||||||
|
.set_geom(VoxelType.GEOM_LIQUID)
|
||||||
|
|
||||||
|
for vt in _voxel_types:
|
||||||
|
vt.compile()
|
||||||
|
|
||||||
|
|
||||||
|
func _precalculate_priority_positions():
|
||||||
|
_priority_positions.clear()
|
||||||
|
for z in range(-view_radius, view_radius):
|
||||||
|
for x in range(-view_radius, view_radius):
|
||||||
|
for y in range(min_y, max_y):
|
||||||
|
_priority_positions.append(Vector3(x,y,z))
|
||||||
|
_priority_positions.sort_custom(self, "_compare_priority_positions")
|
||||||
|
|
||||||
|
|
||||||
|
func _compare_priority_positions(a, b):
|
||||||
|
return a.length_squared() > b.length_squared()
|
||||||
|
|
||||||
|
|
||||||
|
func set_voxel(pos, id):
|
||||||
|
# This function only works if the block exists and is surrounded
|
||||||
|
|
||||||
|
var bpos = Vector3(floor(pos.x/BLOCK_SIZE), floor(pos.y/BLOCK_SIZE), floor(pos.z/BLOCK_SIZE))
|
||||||
|
var block = _blocks[bpos]
|
||||||
|
var rx = pos.x%BLOCK_SIZE
|
||||||
|
var ry = pos.y%BLOCK_SIZE
|
||||||
|
var rz = pos.z%BLOCK_SIZE
|
||||||
|
block.voxels[rz+1][ry+1][rx+1] = id
|
||||||
|
block.need_update = true
|
||||||
|
|
||||||
|
# TODO The following is not needed if the meshing process could just take copies with neighboring
|
||||||
|
|
||||||
|
if rx == 0:
|
||||||
|
var nblock = _blocks[bpos-Vector3(1,0,0)]
|
||||||
|
nblock.voxels[BLOCK_SIZE+1][ry+1][rx+1] = id
|
||||||
|
nblock.need_update = true
|
||||||
|
elif rx == BLOCK_SIZE-1:
|
||||||
|
var nblock = _blocks[bpos+Vector3(1,0,0)]
|
||||||
|
nblock.voxels[0][ry+1][rx+1] = id
|
||||||
|
nblock.need_update = true
|
||||||
|
|
||||||
|
if ry == 0:
|
||||||
|
var nblock = _blocks[bpos-Vector3(0,1,0)]
|
||||||
|
nblock.voxels[rx+1][BLOCK_SIZE+1][rx+1] = id
|
||||||
|
nblock.need_update = true
|
||||||
|
elif ry == BLOCK_SIZE-1:
|
||||||
|
var nblock = _blocks[bpos+Vector3(0,1,0)]
|
||||||
|
nblock.voxels[rx+1][0][rx+1] = id
|
||||||
|
nblock.need_update = true
|
||||||
|
|
||||||
|
if rz == 0:
|
||||||
|
var nblock = _blocks[bpos-Vector3(0,0,1)]
|
||||||
|
nblock.voxels[rz+1][ry+1][BLOCK_SIZE+1] = id
|
||||||
|
nblock.need_update = true
|
||||||
|
elif rz == BLOCK_SIZE-1:
|
||||||
|
var nblock = _blocks[bpos+Vector3(0,0,1)]
|
||||||
|
nblock.voxels[rx+1][ry+1][0] = id
|
||||||
|
nblock.need_update = true
|
||||||
|
|
||||||
|
|
||||||
|
func _update_pending_blocks():
|
||||||
|
# Using pre-sorted relative vectors is faster than sorting the list directly
|
||||||
|
var camera_block_pos = _camera.get_translation() / BLOCK_SIZE
|
||||||
|
camera_block_pos.x = floor(camera_block_pos.x)
|
||||||
|
camera_block_pos.y = 0#floor(camera_block_pos.y)
|
||||||
|
camera_block_pos.z = floor(camera_block_pos.z)
|
||||||
|
_pending_blocks.clear()
|
||||||
|
for rpos in _priority_positions:
|
||||||
|
var pos = rpos + camera_block_pos
|
||||||
|
if pos.y >= min_y and pos.y < max_y and not _generating_blocks.has(pos):
|
||||||
|
if not _blocks.has(pos):
|
||||||
|
_pending_blocks.append(pos)
|
||||||
|
# else:
|
||||||
|
# var block = _blocks[pos]
|
||||||
|
# if block.need_update:
|
||||||
|
# # TODO update mesh
|
||||||
|
# elif not block.has_structures and block.is_surrounded():
|
||||||
|
# # TODO generate structures
|
||||||
|
|
||||||
|
|
||||||
|
func _process(delta):
|
||||||
|
|
||||||
|
# TODO Immerge blocks that are too far away
|
||||||
|
|
||||||
|
if _time_before_sort > 0:
|
||||||
|
_time_before_sort -= delta
|
||||||
|
if _time_before_sort <= 0:
|
||||||
|
_time_before_sort = SORT_TIME
|
||||||
|
_update_pending_blocks()
|
||||||
|
|
||||||
|
if _pending_blocks.size() != 0:
|
||||||
|
if not _thread.is_active():
|
||||||
|
|
||||||
|
# Closer blocks are loaded first
|
||||||
|
var pos = _pending_blocks[_pending_blocks.size()-1]
|
||||||
|
_pending_blocks.pop_back()
|
||||||
|
_thread.start(self, "generate_block_thread", BlockRequest.new(pos, BlockRequest.TYPE_GENERATE))
|
||||||
|
_generating_blocks[pos] = true
|
||||||
|
|
||||||
|
# Visible blocks are loaded first
|
||||||
|
# var hbs = Vector3(0.5, 0.5, 0.5) * BLOCK_SIZE
|
||||||
|
# for i in range(_pending_blocks.size()-1, 0, -1):
|
||||||
|
# var pos = _pending_blocks[i]
|
||||||
|
# var wpos = pos*BLOCK_SIZE + hbs
|
||||||
|
# if not _camera.is_position_behind(wpos):
|
||||||
|
# _pending_blocks[i] = _pending_blocks[_pending_blocks.size()-1]
|
||||||
|
# _pending_blocks.pop_back()
|
||||||
|
# _thread.start(self, "generate_block_thread", pos)
|
||||||
|
# break
|
||||||
|
|
||||||
|
|
||||||
|
func generate_block_thread(request):
|
||||||
|
if request.type == BlockRequest.TYPE_GENERATE:
|
||||||
|
var block = generate_block(request.block_pos)
|
||||||
|
# Call the main thread to wait
|
||||||
|
call_deferred("thread_finished")
|
||||||
|
return block
|
||||||
|
else:
|
||||||
|
print("Unknown request type " + str(request.type))
|
||||||
|
|
||||||
|
|
||||||
|
func thread_finished():
|
||||||
|
var block = _thread.wait_to_finish()
|
||||||
|
_generating_blocks.erase(block.pos)
|
||||||
|
spawn_block(block)
|
||||||
|
|
||||||
|
|
||||||
|
func generate_block(pos):
|
||||||
|
var time_before = OS.get_ticks_msec()
|
||||||
|
|
||||||
|
#var time_before = OS.get_ticks_msec()
|
||||||
|
var voxels = Block.create_voxel_grid(BLOCK_SIZE+2, BLOCK_SIZE+2, BLOCK_SIZE+2)
|
||||||
|
#print("Create: " + str(OS.get_ticks_msec() - time_before) + "ms")
|
||||||
|
|
||||||
|
#time_before = OS.get_ticks_msec()
|
||||||
|
var empty = generate_random(voxels, pos * BLOCK_SIZE)
|
||||||
|
#print("Generate: " + str(OS.get_ticks_msec() - time_before) + "ms")
|
||||||
|
|
||||||
|
var mesh = null
|
||||||
|
if empty:
|
||||||
|
voxels = null
|
||||||
|
else:
|
||||||
|
#time_before = OS.get_ticks_msec()
|
||||||
|
var st_solid = SurfaceTool.new()
|
||||||
|
var st_transparent = SurfaceTool.new()
|
||||||
|
|
||||||
|
st_solid.begin(Mesh.PRIMITIVE_TRIANGLES)
|
||||||
|
st_transparent.begin(Mesh.PRIMITIVE_TRIANGLES)
|
||||||
|
|
||||||
|
st_solid.set_material(material)
|
||||||
|
st_transparent.set_material(transparent_material)
|
||||||
|
|
||||||
|
make_mesh(voxels, st_solid, st_transparent)
|
||||||
|
#st.index()
|
||||||
|
|
||||||
|
mesh = st_solid.commit()
|
||||||
|
st_transparent.commit(mesh)
|
||||||
|
|
||||||
|
#print("Bake: " + str(OS.get_ticks_msec() - time_before) + "ms")
|
||||||
|
|
||||||
|
var block = Block.new()
|
||||||
|
block.voxel_map = self
|
||||||
|
block.voxels = voxels
|
||||||
|
block.pos = pos
|
||||||
|
block.mesh = mesh
|
||||||
|
block.gen_time = OS.get_ticks_msec() - time_before
|
||||||
|
|
||||||
|
return block
|
||||||
|
|
||||||
|
|
||||||
|
func spawn_block(block):
|
||||||
|
if block.mesh != null:
|
||||||
|
var mesh_instance = preload("res://block.tscn").instance()
|
||||||
|
mesh_instance.set_mesh(block.mesh)
|
||||||
|
mesh_instance.set_translation(block.pos * BLOCK_SIZE)
|
||||||
|
mesh_instance.voxel_map = self
|
||||||
|
add_child(mesh_instance)
|
||||||
|
block.node = mesh_instance
|
||||||
|
mesh_instance.spawn()
|
||||||
|
_blocks[block.pos] = block
|
||||||
|
print("Gen time: " + str(block.gen_time) + " (empty=" + str(block.mesh == null) + ")")
|
||||||
|
|
||||||
|
|
||||||
|
func generate_random(cubes, offset):
|
||||||
|
var ox = offset.x
|
||||||
|
var oy = offset.y
|
||||||
|
var oz = offset.z
|
||||||
|
var empty = true
|
||||||
|
var ns1 = 0.01
|
||||||
|
var ns2 = 0.05
|
||||||
|
|
||||||
|
var dirt = 1
|
||||||
|
if oy < 0:
|
||||||
|
dirt = 4
|
||||||
|
|
||||||
|
var air = 0
|
||||||
|
if oy < 0:
|
||||||
|
air = 5
|
||||||
|
|
||||||
|
var bs = cubes.size()
|
||||||
|
|
||||||
|
for z in range(0, bs):
|
||||||
|
for x in range(0, bs):
|
||||||
|
#var h = 8.0*(cos((ox+x)/8.0) + sin((oz+z)/8.0)) + 8 - oy
|
||||||
|
var n1 = preload("Simplex.gd").simplex2(ns1*(ox+x), ns1*(oz+z))
|
||||||
|
var n2 = preload("Simplex.gd").simplex2(ns2*(ox+x+100.0), ns2*(oz+z))
|
||||||
|
var h = 16.0*n1 + 4.0*n2 + 8 - oy
|
||||||
|
if h >= 0:
|
||||||
|
if h < bs:
|
||||||
|
empty = false
|
||||||
|
for y in range(0, h):
|
||||||
|
cubes[z][y][x] = dirt
|
||||||
|
for y in range(h, bs):
|
||||||
|
cubes[z][y][x] = air
|
||||||
|
if oy == -BLOCK_SIZE:
|
||||||
|
cubes[z][bs-1][x] = 0
|
||||||
|
if oy >= 0 and randf() < 0.2:
|
||||||
|
cubes[z][h][x] = 2
|
||||||
|
# if randf() < 0.01:
|
||||||
|
# var th = h+1+randi()%8
|
||||||
|
# if th > bs:
|
||||||
|
# th = bs
|
||||||
|
# for y in range(h, th):
|
||||||
|
# cubes[z][y][x] = 3
|
||||||
|
else:
|
||||||
|
empty = false
|
||||||
|
for y in range(0, bs):
|
||||||
|
cubes[z][y][x] = 1
|
||||||
|
else:
|
||||||
|
for y in range(0, bs):
|
||||||
|
cubes[z][y][x] = air
|
||||||
|
|
||||||
|
return empty
|
||||||
|
|
||||||
|
|
||||||
|
func _is_face_visible(vt, other_vt):
|
||||||
|
return other_vt.id == 0 or (other_vt.is_transparent and other_vt != vt)
|
||||||
|
|
||||||
|
|
||||||
|
func make_mesh(cubes, st_solid, st_transparent):
|
||||||
|
|
||||||
|
for z in range(1, cubes.size()-1):
|
||||||
|
var plane = cubes[z]
|
||||||
|
for y in range(1, plane.size()-1):
|
||||||
|
var line = plane[y]
|
||||||
|
for x in range(1, line.size()-1):
|
||||||
|
var voxel_id = line[x]
|
||||||
|
if voxel_id != 0:
|
||||||
|
var voxel_type = _voxel_types[voxel_id]
|
||||||
|
|
||||||
|
var st = st_solid
|
||||||
|
if voxel_type.is_transparent:
|
||||||
|
st = st_transparent
|
||||||
|
|
||||||
|
var ppos = Vector3(x,y,z)
|
||||||
|
var pos = ppos-Vector3(1,1,1)
|
||||||
|
|
||||||
|
# Side faces
|
||||||
|
if voxel_type.model_side_vertices.size() != 0:
|
||||||
|
for side in range(0,6):
|
||||||
|
var npos = ppos + _side_normals[side]
|
||||||
|
if _is_face_visible(voxel_type, _voxel_types[cubes[npos.z][npos.y][npos.x]]):
|
||||||
|
st.add_normal(_side_normals[side])
|
||||||
|
var uvs = voxel_type.model_side_uv[side]
|
||||||
|
var vertices = voxel_type.model_side_vertices[side]
|
||||||
|
for vi in range(0,vertices.size()):
|
||||||
|
st.add_uv(uvs[vi])
|
||||||
|
st.add_vertex(pos + vertices[vi])
|
||||||
|
|
||||||
|
if voxel_type.geom_type == VoxelType.GEOM_XQUAD:
|
||||||
|
pos.x += rand_range(-0.15, 0.15)
|
||||||
|
pos.z += rand_range(-0.15, 0.15)
|
||||||
|
|
||||||
|
# Model faces
|
||||||
|
if voxel_type.model_vertices.size() != 0:
|
||||||
|
var vertices = voxel_type.model_vertices
|
||||||
|
var uvs = voxel_type.model_uv
|
||||||
|
var normals = voxel_type.model_normals
|
||||||
|
for vi in range(0, vertices.size()):
|
||||||
|
st.add_uv(uvs[vi])
|
||||||
|
st.add_normal(normals[vi])
|
||||||
|
st.add_vertex(pos + vertices[vi])
|
||||||
|
|
||||||
|
# elif voxel_type.geom_type == VoxelType.GEOM_XQUAD:
|
||||||
|
# var pos = Vector3(x,y,z)-Vector3(1,1,1)
|
||||||
|
# pos.x += rand_range(-0.15, 0.15)
|
||||||
|
# pos.z += rand_range(-0.15, 0.15)
|
||||||
|
# var uvs = voxel_type.cube_side_uv4[0]
|
||||||
|
#
|
||||||
|
# st.add_normal(Vector3(-0.7,0,0.7))
|
||||||
|
# st.add_uv(uvs[2]); st.add_vertex(pos)
|
||||||
|
# st.add_uv(uvs[0]); st.add_vertex(pos+Vector3(0,1,0))
|
||||||
|
# st.add_uv(uvs[1]); st.add_vertex(pos+Vector3(1,1,1))
|
||||||
|
# st.add_uv(uvs[2]); st.add_vertex(pos)
|
||||||
|
# st.add_uv(uvs[1]); st.add_vertex(pos+Vector3(1,1,1))
|
||||||
|
# st.add_uv(uvs[3]); st.add_vertex(pos+Vector3(1,0,1))
|
||||||
|
#
|
||||||
|
# st.add_normal(Vector3(0.7,0,0.7))
|
||||||
|
# st.add_uv(uvs[3]); st.add_vertex(pos+Vector3(1,0,0))
|
||||||
|
# st.add_uv(uvs[2]); st.add_vertex(pos+Vector3(0,0,1))
|
||||||
|
# st.add_uv(uvs[1]); st.add_vertex(pos+Vector3(1,1,0))
|
||||||
|
# st.add_uv(uvs[2]); st.add_vertex(pos+Vector3(0,0,1))
|
||||||
|
# st.add_uv(uvs[0]); st.add_vertex(pos+Vector3(0,1,1))
|
||||||
|
# st.add_uv(uvs[1]); st.add_vertex(pos+Vector3(1,1,0))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,8 @@
|
||||||
|
|
||||||
|
extends Camera2D
|
||||||
|
|
||||||
|
|
||||||
|
func _ready():
|
||||||
|
#var image = get_parent().get_screen_capture()
|
||||||
|
pass
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
gen_mipmaps=false
|
|
@ -0,0 +1,408 @@
|
||||||
|
[gd_scene load_steps=10 format=1]
|
||||||
|
|
||||||
|
[ext_resource path="res://debug_camera.gd" type="Script" id=1]
|
||||||
|
[ext_resource path="res://generator.gd" type="Script" id=2]
|
||||||
|
[ext_resource path="res://terrain.png" type="Texture" id=3]
|
||||||
|
[ext_resource path="res://block.gd" type="Script" id=4]
|
||||||
|
|
||||||
|
[sub_resource type="FixedMaterial" id=1]
|
||||||
|
|
||||||
|
flags/visible = true
|
||||||
|
flags/double_sided = false
|
||||||
|
flags/invert_faces = false
|
||||||
|
flags/unshaded = false
|
||||||
|
flags/on_top = false
|
||||||
|
flags/lightmap_on_uv2 = true
|
||||||
|
flags/colarray_is_srgb = true
|
||||||
|
params/blend_mode = 0
|
||||||
|
params/depth_draw = 1
|
||||||
|
params/line_width = 0.0
|
||||||
|
fixed_flags/use_alpha = false
|
||||||
|
fixed_flags/use_color_array = false
|
||||||
|
fixed_flags/use_point_size = false
|
||||||
|
fixed_flags/discard_alpha = false
|
||||||
|
fixed_flags/use_xy_normalmap = false
|
||||||
|
params/diffuse = Color( 1, 1, 1, 1 )
|
||||||
|
params/specular = Color( 0, 0, 0, 1 )
|
||||||
|
params/emission = Color( 0, 0, 0, 1 )
|
||||||
|
params/specular_exp = 40
|
||||||
|
params/detail_mix = 1.0
|
||||||
|
params/normal_depth = 1
|
||||||
|
params/shader = 0
|
||||||
|
params/shader_param = 0.5
|
||||||
|
params/glow = 0
|
||||||
|
params/point_size = 1.0
|
||||||
|
uv_xform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 )
|
||||||
|
textures/diffuse = ExtResource( 3 )
|
||||||
|
textures/diffuse_tc = 0
|
||||||
|
textures/detail_tc = 0
|
||||||
|
textures/specular_tc = 0
|
||||||
|
textures/emission_tc = 0
|
||||||
|
textures/specular_exp_tc = 0
|
||||||
|
textures/glow_tc = 0
|
||||||
|
textures/normal_tc = 0
|
||||||
|
textures/shade_param_tc = 0
|
||||||
|
|
||||||
|
[sub_resource type="FixedMaterial" id=2]
|
||||||
|
|
||||||
|
flags/visible = true
|
||||||
|
flags/double_sided = true
|
||||||
|
flags/invert_faces = false
|
||||||
|
flags/unshaded = false
|
||||||
|
flags/on_top = false
|
||||||
|
flags/lightmap_on_uv2 = true
|
||||||
|
flags/colarray_is_srgb = true
|
||||||
|
params/blend_mode = 0
|
||||||
|
params/depth_draw = 2
|
||||||
|
params/line_width = 0.0
|
||||||
|
fixed_flags/use_alpha = true
|
||||||
|
fixed_flags/use_color_array = false
|
||||||
|
fixed_flags/use_point_size = false
|
||||||
|
fixed_flags/discard_alpha = false
|
||||||
|
fixed_flags/use_xy_normalmap = false
|
||||||
|
params/diffuse = Color( 1, 1, 1, 1 )
|
||||||
|
params/specular = Color( 0, 0, 0, 1 )
|
||||||
|
params/emission = Color( 0, 0, 0, 1 )
|
||||||
|
params/specular_exp = 40
|
||||||
|
params/detail_mix = 1.0
|
||||||
|
params/normal_depth = 1
|
||||||
|
params/shader = 0
|
||||||
|
params/shader_param = 0.5
|
||||||
|
params/glow = 0
|
||||||
|
params/point_size = 1.0
|
||||||
|
uv_xform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 )
|
||||||
|
textures/diffuse = ExtResource( 3 )
|
||||||
|
textures/diffuse_tc = 0
|
||||||
|
textures/detail_tc = 0
|
||||||
|
textures/specular_tc = 0
|
||||||
|
textures/emission_tc = 0
|
||||||
|
textures/specular_exp_tc = 0
|
||||||
|
textures/glow_tc = 0
|
||||||
|
textures/normal_tc = 0
|
||||||
|
textures/shade_param_tc = 0
|
||||||
|
|
||||||
|
[sub_resource type="FixedMaterial" id=3]
|
||||||
|
|
||||||
|
flags/visible = true
|
||||||
|
flags/double_sided = false
|
||||||
|
flags/invert_faces = false
|
||||||
|
flags/unshaded = false
|
||||||
|
flags/on_top = false
|
||||||
|
flags/lightmap_on_uv2 = true
|
||||||
|
flags/colarray_is_srgb = true
|
||||||
|
params/blend_mode = 0
|
||||||
|
params/depth_draw = 1
|
||||||
|
params/line_width = 1.0
|
||||||
|
fixed_flags/use_alpha = false
|
||||||
|
fixed_flags/use_color_array = false
|
||||||
|
fixed_flags/use_point_size = false
|
||||||
|
fixed_flags/discard_alpha = false
|
||||||
|
fixed_flags/use_xy_normalmap = false
|
||||||
|
params/diffuse = Color( 1, 1, 1, 1 )
|
||||||
|
params/specular = Color( 0, 0, 0, 1 )
|
||||||
|
params/emission = Color( 0, 0, 0, 1 )
|
||||||
|
params/specular_exp = 40
|
||||||
|
params/detail_mix = 1.0
|
||||||
|
params/normal_depth = 1
|
||||||
|
params/shader = 0
|
||||||
|
params/shader_param = 0.5
|
||||||
|
params/glow = 0
|
||||||
|
params/point_size = 1.0
|
||||||
|
uv_xform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 )
|
||||||
|
textures/diffuse_tc = 0
|
||||||
|
textures/detail_tc = 0
|
||||||
|
textures/specular_tc = 0
|
||||||
|
textures/emission_tc = 0
|
||||||
|
textures/specular_exp_tc = 0
|
||||||
|
textures/glow_tc = 0
|
||||||
|
textures/normal_tc = 0
|
||||||
|
textures/shade_param_tc = 0
|
||||||
|
|
||||||
|
[sub_resource type="Environment" id=4]
|
||||||
|
|
||||||
|
ambient_light/enabled = true
|
||||||
|
ambient_light/color = Color( 0.378906, 0.378906, 0.378906, 1 )
|
||||||
|
ambient_light/energy = 1.0
|
||||||
|
fxaa/enabled = false
|
||||||
|
background/mode = 2
|
||||||
|
background/color = Color( 0.539063, 0.525474, 0.414825, 1 )
|
||||||
|
background/energy = 1.0
|
||||||
|
background/scale = 1.0
|
||||||
|
background/glow = 0.0
|
||||||
|
background/canvas_max_layer = null
|
||||||
|
glow/enabled = true
|
||||||
|
glow/blur_passes = 1
|
||||||
|
glow/blur_scale = 1
|
||||||
|
glow/blur_strength = 1
|
||||||
|
glow/blur_blend_mode = null
|
||||||
|
glow/bloom = 0.0
|
||||||
|
glow/bloom_treshold = 0.5
|
||||||
|
dof_blur/enabled = false
|
||||||
|
dof_blur/blur_passes = 2
|
||||||
|
dof_blur/begin = 0.0
|
||||||
|
dof_blur/range = 10.0
|
||||||
|
hdr/enabled = false
|
||||||
|
hdr/tonemapper = 0
|
||||||
|
hdr/exposure = 0.4
|
||||||
|
hdr/white = 1.0
|
||||||
|
hdr/glow_treshold = 0.95
|
||||||
|
hdr/glow_scale = 0.2
|
||||||
|
hdr/min_luminance = 0.4
|
||||||
|
hdr/max_luminance = 8.0
|
||||||
|
hdr/exposure_adj_speed = 0.5
|
||||||
|
fog/enabled = true
|
||||||
|
fog/begin = 0.01
|
||||||
|
fog/begin_color = Color( 0, 0, 0, 1 )
|
||||||
|
fog/end_color = Color( 0.537255, 0.521569, 0.411765, 1 )
|
||||||
|
fog/attenuation = 0.707107
|
||||||
|
fog/bg = true
|
||||||
|
bcs/enabled = false
|
||||||
|
bcs/brightness = 1.0
|
||||||
|
bcs/contrast = 1.0
|
||||||
|
bcs/saturation = 1.0
|
||||||
|
srgb/enabled = false
|
||||||
|
|
||||||
|
[sub_resource type="Animation" id=5]
|
||||||
|
|
||||||
|
length = 1.0
|
||||||
|
loop = false
|
||||||
|
step = 0.1
|
||||||
|
tracks/0/type = "value"
|
||||||
|
tracks/0/path = NodePath(".")
|
||||||
|
tracks/0/interp = 1
|
||||||
|
tracks/0/keys = { "cont":true, "times":FloatArray( ), "transitions":FloatArray( ), "values":[ ] }
|
||||||
|
|
||||||
|
[node name="Node" type="Node"]
|
||||||
|
|
||||||
|
[node name="Camera" type="Camera" parent="."]
|
||||||
|
|
||||||
|
_import_transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 )
|
||||||
|
transform/local = Transform( 0.815509, -0.351713, 0.459612, 0, 0.794154, 0.607717, -0.578744, -0.495599, 0.64764, 18.1809, 22.9505, 25.3826 )
|
||||||
|
projection = 0
|
||||||
|
fov = 80.0
|
||||||
|
near = 0.1
|
||||||
|
far = 200.0
|
||||||
|
keep_aspect = 1
|
||||||
|
current = true
|
||||||
|
visible_layers = 1048575
|
||||||
|
environment = null
|
||||||
|
h_offset = 0.0
|
||||||
|
v_offset = 0.0
|
||||||
|
script/script = ExtResource( 1 )
|
||||||
|
sensitivity = 0.4
|
||||||
|
min_angle = -90
|
||||||
|
max_angle = 90
|
||||||
|
speed = 10.0
|
||||||
|
capture_mouse = true
|
||||||
|
|
||||||
|
[node name="Particles" type="Particles" parent="Camera"]
|
||||||
|
|
||||||
|
_import_transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 )
|
||||||
|
layers = 1
|
||||||
|
geometry/visible = true
|
||||||
|
geometry/material_override = null
|
||||||
|
geometry/cast_shadow = false
|
||||||
|
geometry/receive_shadows = true
|
||||||
|
geometry/range_begin = 0.0
|
||||||
|
geometry/range_end = 0.0
|
||||||
|
geometry/extra_cull_margin = 0.0
|
||||||
|
geometry/billboard = false
|
||||||
|
geometry/billboard_y = false
|
||||||
|
geometry/depth_scale = false
|
||||||
|
geometry/visible_in_all_rooms = false
|
||||||
|
geometry/use_baked_light = false
|
||||||
|
geometry/baked_light_tex_id = 0
|
||||||
|
material = null
|
||||||
|
amount = 256
|
||||||
|
emitting = true
|
||||||
|
visibility = AABB( -4, -4, -4, 8, 8, 8 )
|
||||||
|
emission_extents = Vector3( 32, 32, 32 )
|
||||||
|
emission_base_velocity = Vector3( 0, 0, 0 )
|
||||||
|
emission_points = Vector3Array( )
|
||||||
|
gravity_normal = Vector3( 0, -1, 0 )
|
||||||
|
local_coords = false
|
||||||
|
emit_timeout = 0.0
|
||||||
|
vars/lifetime = 5.0
|
||||||
|
vars/spread = 0.2
|
||||||
|
vars/gravity = 0.0
|
||||||
|
vars/linear_vel = 0.2
|
||||||
|
vars/angular_vel = 0.0
|
||||||
|
vars/linear_accel = 0.0
|
||||||
|
vars/radial_accel = 0.0
|
||||||
|
vars/tan_accel = 0.0
|
||||||
|
vars/damping = 0.0
|
||||||
|
vars/initial_size = 0.05
|
||||||
|
vars/final_size = 0.05
|
||||||
|
vars/initial_angle = 0.0
|
||||||
|
vars/height_from_velocity = false
|
||||||
|
vars/height = 1.0
|
||||||
|
vars/height_speed_scale = 0.0
|
||||||
|
rand/lifetime = 0.0
|
||||||
|
rand/spread = 0.0
|
||||||
|
rand/gravity = 0.0
|
||||||
|
rand/linear_vel = 0.0
|
||||||
|
rand/angular_vel = 0.0
|
||||||
|
rand/linear_accel = 0.0
|
||||||
|
rand/radial_accel = 0.0
|
||||||
|
rand/tan_accel = 0.0
|
||||||
|
rand/damping = 0.0
|
||||||
|
rand/initial_size = 0.0
|
||||||
|
rand/final_size = 0.0
|
||||||
|
rand/initial_angle = 0.0
|
||||||
|
rand/height = 0.0
|
||||||
|
rand/height_speed_scale = 0.0
|
||||||
|
color_phases/count = 0
|
||||||
|
phase_0/pos = 0.0
|
||||||
|
phase_0/color = Color( 0, 0, 0, 1 )
|
||||||
|
phase_1/pos = 1.0
|
||||||
|
phase_1/color = Color( 0, 0, 0, 1 )
|
||||||
|
phase_2/pos = 1.0
|
||||||
|
phase_2/color = Color( 0, 0, 0, 1 )
|
||||||
|
phase_3/pos = 1.0
|
||||||
|
phase_3/color = Color( 0, 0, 0, 1 )
|
||||||
|
|
||||||
|
[node name="TestCube" type="TestCube" parent="."]
|
||||||
|
|
||||||
|
_import_transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 )
|
||||||
|
transform/local = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -3.63175, 0, 0 )
|
||||||
|
layers = 1
|
||||||
|
geometry/visible = true
|
||||||
|
geometry/material_override = null
|
||||||
|
geometry/cast_shadow = true
|
||||||
|
geometry/receive_shadows = true
|
||||||
|
geometry/range_begin = 0.0
|
||||||
|
geometry/range_end = 0.0
|
||||||
|
geometry/extra_cull_margin = 0.0
|
||||||
|
geometry/billboard = false
|
||||||
|
geometry/billboard_y = false
|
||||||
|
geometry/depth_scale = false
|
||||||
|
geometry/visible_in_all_rooms = false
|
||||||
|
geometry/use_baked_light = false
|
||||||
|
geometry/baked_light_tex_id = 0
|
||||||
|
|
||||||
|
[node name="TestCube1" type="TestCube" parent="."]
|
||||||
|
|
||||||
|
_import_transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 )
|
||||||
|
transform/local = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -3.63175, 0, 2.12836 )
|
||||||
|
layers = 1
|
||||||
|
geometry/visible = true
|
||||||
|
geometry/material_override = null
|
||||||
|
geometry/cast_shadow = true
|
||||||
|
geometry/receive_shadows = true
|
||||||
|
geometry/range_begin = 0.0
|
||||||
|
geometry/range_end = 0.0
|
||||||
|
geometry/extra_cull_margin = 0.0
|
||||||
|
geometry/billboard = false
|
||||||
|
geometry/billboard_y = false
|
||||||
|
geometry/depth_scale = false
|
||||||
|
geometry/visible_in_all_rooms = false
|
||||||
|
geometry/use_baked_light = false
|
||||||
|
geometry/baked_light_tex_id = 0
|
||||||
|
|
||||||
|
[node name="TestCube2" type="TestCube" parent="."]
|
||||||
|
|
||||||
|
_import_transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 )
|
||||||
|
transform/local = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -1.39143, 0, 0 )
|
||||||
|
layers = 1
|
||||||
|
geometry/visible = true
|
||||||
|
geometry/material_override = null
|
||||||
|
geometry/cast_shadow = true
|
||||||
|
geometry/receive_shadows = true
|
||||||
|
geometry/range_begin = 0.0
|
||||||
|
geometry/range_end = 0.0
|
||||||
|
geometry/extra_cull_margin = 0.0
|
||||||
|
geometry/billboard = false
|
||||||
|
geometry/billboard_y = false
|
||||||
|
geometry/depth_scale = false
|
||||||
|
geometry/visible_in_all_rooms = false
|
||||||
|
geometry/use_baked_light = false
|
||||||
|
geometry/baked_light_tex_id = 0
|
||||||
|
|
||||||
|
[node name="TestCube3" type="TestCube" parent="."]
|
||||||
|
|
||||||
|
_import_transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 )
|
||||||
|
transform/local = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -3.63175, 2.18131, 0 )
|
||||||
|
layers = 1
|
||||||
|
geometry/visible = true
|
||||||
|
geometry/material_override = null
|
||||||
|
geometry/cast_shadow = true
|
||||||
|
geometry/receive_shadows = true
|
||||||
|
geometry/range_begin = 0.0
|
||||||
|
geometry/range_end = 0.0
|
||||||
|
geometry/extra_cull_margin = 0.0
|
||||||
|
geometry/billboard = false
|
||||||
|
geometry/billboard_y = false
|
||||||
|
geometry/depth_scale = false
|
||||||
|
geometry/visible_in_all_rooms = false
|
||||||
|
geometry/use_baked_light = false
|
||||||
|
geometry/baked_light_tex_id = 0
|
||||||
|
|
||||||
|
[node name="VoxelMap" type="Node" parent="."]
|
||||||
|
|
||||||
|
script/script = ExtResource( 2 )
|
||||||
|
material = SubResource( 1 )
|
||||||
|
transparent_material = SubResource( 2 )
|
||||||
|
|
||||||
|
[node name="Block" type="MeshInstance" parent="."]
|
||||||
|
|
||||||
|
_import_transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 )
|
||||||
|
visibility/visible = false
|
||||||
|
layers = 1
|
||||||
|
geometry/visible = true
|
||||||
|
geometry/material_override = SubResource( 3 )
|
||||||
|
geometry/cast_shadow = true
|
||||||
|
geometry/receive_shadows = true
|
||||||
|
geometry/range_begin = 0.0
|
||||||
|
geometry/range_end = 0.0
|
||||||
|
geometry/extra_cull_margin = 0.0
|
||||||
|
geometry/billboard = false
|
||||||
|
geometry/billboard_y = false
|
||||||
|
geometry/depth_scale = false
|
||||||
|
geometry/visible_in_all_rooms = false
|
||||||
|
geometry/use_baked_light = false
|
||||||
|
geometry/baked_light_tex_id = 0
|
||||||
|
mesh/mesh = null
|
||||||
|
mesh/skeleton = NodePath("..")
|
||||||
|
script/script = ExtResource( 4 )
|
||||||
|
|
||||||
|
[node name="WorldEnvironment" type="WorldEnvironment" parent="."]
|
||||||
|
|
||||||
|
_import_transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 )
|
||||||
|
environment = SubResource( 4 )
|
||||||
|
|
||||||
|
[node name="AnimationPlayer" type="AnimationPlayer" parent="."]
|
||||||
|
|
||||||
|
playback/process_mode = 1
|
||||||
|
playback/default_blend_time = 0.0
|
||||||
|
root/root = NodePath("..")
|
||||||
|
anims/NewAnim = SubResource( 5 )
|
||||||
|
playback/active = true
|
||||||
|
playback/speed = 1.0
|
||||||
|
blend_times = [ ]
|
||||||
|
autoplay = ""
|
||||||
|
|
||||||
|
[node name="DirectionalLight" type="DirectionalLight" parent="."]
|
||||||
|
|
||||||
|
_import_transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 )
|
||||||
|
transform/local = Transform( 0.817159, -0.383981, 0.429895, 4.66628e-006, 0.745816, 0.666152, -0.576412, -0.54435, 0.609452, 1.36405, 1.98931, 7.37862 )
|
||||||
|
layers = 1
|
||||||
|
params/enabled = true
|
||||||
|
params/editor_only = false
|
||||||
|
params/bake_mode = 0
|
||||||
|
params/energy = 1.0
|
||||||
|
colors/diffuse = Color( 1, 1, 1, 1 )
|
||||||
|
colors/specular = Color( 1, 1, 1, 1 )
|
||||||
|
shadow/shadow = true
|
||||||
|
shadow/darkening = 0.0
|
||||||
|
shadow/z_offset = 0.05
|
||||||
|
shadow/z_slope_scale = 0.0
|
||||||
|
shadow/esm_multiplier = 60.0
|
||||||
|
shadow/blur_passes = 1.0
|
||||||
|
projector = null
|
||||||
|
operator = 0
|
||||||
|
shadow/mode = 0
|
||||||
|
shadow/max_distance = 100.0
|
||||||
|
shadow/split_weight = 0.5
|
||||||
|
shadow/zoffset_scale = 2.0
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,68 @@
|
||||||
|
[gd_scene load_steps=5 format=1]
|
||||||
|
|
||||||
|
[ext_resource path="res://gpu_generator.gd" type="Script" id=1]
|
||||||
|
[ext_resource path="res://icon.png" type="Texture" id=2]
|
||||||
|
|
||||||
|
[sub_resource type="CanvasItemShader" id=4]
|
||||||
|
|
||||||
|
_code = { "fragment":"vec2 pos = floor(UV * 64.0);\nfloat a = fract(sin(dot(pos ,vec2(12.9898,78.233))) * 438.5453);\nvec4 col = vec4(a, a, a, 1.0);\n\nCOLOR = col;\n", "fragment_ofs":0, "light":"", "light_ofs":0, "vertex":"", "vertex_ofs":0 }
|
||||||
|
|
||||||
|
[sub_resource type="CanvasItemMaterial" id=5]
|
||||||
|
|
||||||
|
shader/shader = SubResource( 4 )
|
||||||
|
shader/shading_mode = 0
|
||||||
|
|
||||||
|
[node name="ShaderGen" type="Node"]
|
||||||
|
|
||||||
|
[node name="Viewport" type="Viewport" parent="."]
|
||||||
|
|
||||||
|
rect = Rect2( 0, 0, 0, 0 )
|
||||||
|
own_world = false
|
||||||
|
world = null
|
||||||
|
transparent_bg = false
|
||||||
|
render_target/enabled = true
|
||||||
|
render_target/v_flip = false
|
||||||
|
render_target/clear_on_new_frame = true
|
||||||
|
render_target/filter = false
|
||||||
|
render_target/gen_mipmaps = false
|
||||||
|
render_target/update_mode = 2
|
||||||
|
audio_listener/enable_2d = false
|
||||||
|
audio_listener/enable_3d = false
|
||||||
|
physics/object_picking = false
|
||||||
|
gui/disable_input = false
|
||||||
|
|
||||||
|
[node name="Camera2D" type="Camera2D" parent="."]
|
||||||
|
|
||||||
|
anchor_mode = 0
|
||||||
|
rotating = false
|
||||||
|
current = false
|
||||||
|
zoom = Vector2( 1, 1 )
|
||||||
|
limit/left = -10000000
|
||||||
|
limit/top = -10000000
|
||||||
|
limit/right = 10000000
|
||||||
|
limit/bottom = 10000000
|
||||||
|
drag_margin/h_enabled = true
|
||||||
|
drag_margin/v_enabled = true
|
||||||
|
smoothing/enable = false
|
||||||
|
smoothing/speed = 5.0
|
||||||
|
drag_margin/left = 0.2
|
||||||
|
drag_margin/top = 0.2
|
||||||
|
drag_margin/right = 0.2
|
||||||
|
drag_margin/bottom = 0.2
|
||||||
|
script/script = ExtResource( 1 )
|
||||||
|
|
||||||
|
[node name="Polygon2D" type="Polygon2D" parent="."]
|
||||||
|
|
||||||
|
material/material = SubResource( 5 )
|
||||||
|
polygon = Vector2Array( 0, 0, 64, 0, 64, 64, 0, 64 )
|
||||||
|
uv = Vector2Array( 0, 0, 64, 0, 64, 64, 0, 64 )
|
||||||
|
color = Color( 1, 1, 1, 1 )
|
||||||
|
offset = Vector2( 0, 0 )
|
||||||
|
texture/texture = ExtResource( 2 )
|
||||||
|
texture/offset = Vector2( 0, 0 )
|
||||||
|
texture/scale = Vector2( 1, 1 )
|
||||||
|
texture/rotation = 0.0
|
||||||
|
invert/enable = false
|
||||||
|
invert/border = 100.0
|
||||||
|
|
||||||
|
|
Binary file not shown.
After Width: | Height: | Size: 3.2 KiB |
|
@ -0,0 +1,2 @@
|
||||||
|
filter=false
|
||||||
|
gen_mipmaps=false
|
Loading…
Reference in New Issue