Added project

master
Marc Gilleron 2016-04-27 01:55:07 +02:00
commit 3d97573449
16 changed files with 1926 additions and 0 deletions

247
Simplex.gd Normal file
View File

@ -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()

53
block.gd Normal file
View File

@ -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)

26
block.tscn Normal file
View File

@ -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 )

14
chunk.gd Normal file
View File

@ -0,0 +1,14 @@
extends Node
var chunk_position = Vector2(0,0)
var voxel_map = null
var _blocks = []
func _ready():
pass

9
chunk.tscn Normal file
View File

@ -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 )

80
debug_camera.gd Normal file
View File

@ -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)

19
engine.cfg Normal file
View File

@ -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

276
export.cfg Normal file
View File

@ -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=""

715
generator.gd Normal file
View File

@ -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))

8
gpu_generator.gd Normal file
View File

@ -0,0 +1,8 @@
extends Camera2D
func _ready():
#var image = get_parent().get_screen_capture()
pass

BIN
icon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

1
icon.png.flags Normal file
View File

@ -0,0 +1 @@
gen_mipmaps=false

408
new_scene.tscn Normal file
View File

@ -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

68
shader_gen.tscn Normal file
View File

@ -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

BIN
terrain.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

2
terrain.png.flags Normal file
View File

@ -0,0 +1,2 @@
filter=false
gen_mipmaps=false