init
This commit is contained in:
commit
6960de27e5
113 changed files with 9440 additions and 0 deletions
7
.gitignore
vendored
Normal file
7
.gitignore
vendored
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
.DS_Store
|
||||
.import/
|
||||
*.import
|
||||
|
||||
**/.DS_Store
|
||||
**/.import/
|
||||
**/*.import
|
||||
8
addons/gdpd/bin/gdpd.gdns
Normal file
8
addons/gdpd/bin/gdpd.gdns
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
[gd_resource type="NativeScript" load_steps=2 format=2]
|
||||
|
||||
[ext_resource path="res://addons/gdpd/bin/libgdpd.gdnlib" type="GDNativeLibrary" id=1]
|
||||
|
||||
[resource]
|
||||
resource_name = "gdpd"
|
||||
class_name = "Gdpd"
|
||||
library = ExtResource( 1 )
|
||||
18
addons/gdpd/bin/libgdpd.gdnlib
Normal file
18
addons/gdpd/bin/libgdpd.gdnlib
Normal file
|
|
@ -0,0 +1,18 @@
|
|||
[general]
|
||||
|
||||
singleton=false
|
||||
load_once=false
|
||||
symbol_prefix="godot_"
|
||||
reloadable=true
|
||||
|
||||
[entry]
|
||||
|
||||
X11.64="res://addons/gdpd/bin/x11/libgdpd.so"
|
||||
Windows.64="res://addons/gdpd/bin/win/libgdpd.dll"
|
||||
OSX.64="res://addons/gdpd/bin/osx/libgdpd.dylib"
|
||||
|
||||
[dependencies]
|
||||
|
||||
X11.64=[ ]
|
||||
Windows.64=[ ]
|
||||
OSX.64=[ ]
|
||||
BIN
addons/gdpd/bin/osx-arm64/libgdpd.dylib
Executable file
BIN
addons/gdpd/bin/osx-arm64/libgdpd.dylib
Executable file
Binary file not shown.
BIN
addons/gdpd/bin/osx-x86_64/libgdpd.dylib
Executable file
BIN
addons/gdpd/bin/osx-x86_64/libgdpd.dylib
Executable file
Binary file not shown.
BIN
addons/gdpd/bin/osx/libgdpd.dylib
Executable file
BIN
addons/gdpd/bin/osx/libgdpd.dylib
Executable file
Binary file not shown.
5
autoload/Events.gd
Normal file
5
autoload/Events.gd
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
extends Node
|
||||
|
||||
signal player_transform_updated(position, heading)
|
||||
# position : Vector3
|
||||
# heading : Vector2 (projected x-z plane, and normalized)
|
||||
6
autoload/Events.tscn
Normal file
6
autoload/Events.tscn
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
[gd_scene load_steps=2 format=2]
|
||||
|
||||
[ext_resource path="res://autoload/Events.gd" type="Script" id=1]
|
||||
|
||||
[node name="Events" type="Node"]
|
||||
script = ExtResource( 1 )
|
||||
124
autoload/Global.gd
Normal file
124
autoload/Global.gd
Normal file
|
|
@ -0,0 +1,124 @@
|
|||
extends Node
|
||||
|
||||
|
||||
#scene changing
|
||||
var _scenelist = [
|
||||
"res://cosmic/Scene.tscn",
|
||||
"res://buoyancy/ocean/Ocean.tscn",
|
||||
"res://crickets/src/Sandbox.tscn",
|
||||
"res://mirrors/assets/levels/Game.tscn",
|
||||
"res://pantyTunnel/Scene.tscn",
|
||||
"res://tenniscourts/src/Sandbox.tscn",
|
||||
]
|
||||
var _sceneidx = 0
|
||||
|
||||
func nextScene():
|
||||
_sceneidx = (_sceneidx + 1) % _scenelist.size()
|
||||
get_tree().change_scene(_scenelist[_sceneidx])
|
||||
|
||||
func goScene(n):
|
||||
get_tree().change_scene(_scenelist[n])
|
||||
|
||||
#gdpd (pd interface with godot)
|
||||
var _gdpd
|
||||
var _patches = []
|
||||
|
||||
export (bool) var _enable_gui = false
|
||||
export (String) var _gui_path = "/Applications/Pd-0.53-1.app/Contents/Resources"
|
||||
export (bool) var _verbose = false
|
||||
export (int) var _sample_rate = 48000
|
||||
export (int) var _blocksize = 256
|
||||
|
||||
func _ready():
|
||||
_gdpd = load("res://addons/gdpd/bin/gdpd.gdns").new()
|
||||
if _enable_gui:
|
||||
# set gui path to activate gui window (otherwise, nogui)
|
||||
_gdpd.set_gui_path(_gui_path)
|
||||
_gdpd.set_volume(1) # by default, volume(gain) == 0
|
||||
_gdpd.set_verbose(_verbose) # by default, suppress 'print'
|
||||
_gdpd.init(0, 2, _sample_rate, _blocksize)
|
||||
_gdpd.computeAudio(true) # [; pd dsp 1 (
|
||||
_gdpd.subscribe("toGodot")
|
||||
# delayed 'stream start' to prevent start-up 'pop' noise.
|
||||
yield(get_tree().create_timer(0.3), "timeout")
|
||||
_gdpd.streamstart()
|
||||
|
||||
func _exit_tree():
|
||||
if _patches.size() != 0:
|
||||
print()
|
||||
print("! ======== * purging leftover opened patches ... * ======== !")
|
||||
print()
|
||||
for id in _patches:
|
||||
_gdpd.closePatch(id)
|
||||
_patches.clear()
|
||||
_gdpd.stop()
|
||||
|
||||
func load_patch(pd_patch) -> int:
|
||||
#the patch path should be the absolute one
|
||||
#separate file name from directory
|
||||
var patch_name = pd_patch.split("/")[-1]
|
||||
var patch_dir = pd_patch.trim_suffix(patch_name)
|
||||
var id = _gdpd.openPatch(patch_name, patch_dir)
|
||||
_patches.append(id)
|
||||
return id
|
||||
|
||||
func close_patch(id):
|
||||
if id in _patches:
|
||||
_gdpd.closePatch(id)
|
||||
_patches.erase(id)
|
||||
|
||||
func _process(_delta) :
|
||||
if Input.is_action_just_released("scene1"):
|
||||
goScene(0)
|
||||
if Input.is_action_just_released("scene2"):
|
||||
goScene(1)
|
||||
if Input.is_action_just_released("scene3"):
|
||||
goScene(2)
|
||||
if Input.is_action_just_released("scene4"):
|
||||
goScene(3)
|
||||
if Input.is_action_just_released("scene5"):
|
||||
goScene(4)
|
||||
if Input.is_action_just_released("scene6"):
|
||||
goScene(5)
|
||||
|
||||
while _gdpd.has_message():
|
||||
var msg = _gdpd.get_next()
|
||||
print(msg)
|
||||
# if msg[0] == "random":
|
||||
# print("r")
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
# ==== archived. ====
|
||||
|
||||
|
||||
# duplicate "res://" into 'user://' ==> we need godot 4 for this approach..
|
||||
# _copydirectory_recursive("res://", "user://")
|
||||
|
||||
|
||||
## copy directory recursively ==> we need godot 4 for this approach..
|
||||
#func _copydirectory_recursive(src, dst):
|
||||
# var dotfolders = RegEx.new()
|
||||
# dotfolders.compile("^\\.\\w*")
|
||||
# var pdfiles = RegEx.new()
|
||||
# pdfiles.compile("\\w+\\.pd$")
|
||||
# var dir = Directory.new()
|
||||
# if dir.open(src) == OK:
|
||||
# dir.list_dir_begin()
|
||||
# var file_name = dir.get_next()
|
||||
# while file_name != "":
|
||||
# if dir.current_is_dir():
|
||||
# print("Found directory: " + file_name)
|
||||
# if not dotfolders.search(file_name):
|
||||
# dir.make_dir(dst + "/" + file_name)
|
||||
# _copydirectory_recursive(dir.get_current_dir() + "/" + file_name, dst + "/" + file_name)
|
||||
# else:
|
||||
# if pdfiles.search(file_name):
|
||||
# print("Found puredata file: " + file_name)
|
||||
# dir.copy(src + "/" + file_name, dst + "/" + file_name)
|
||||
#
|
||||
# file_name = dir.get_next()
|
||||
# else:
|
||||
# print("An error occurred when trying to access the path. : " + src)
|
||||
6
autoload/Global.tscn
Normal file
6
autoload/Global.tscn
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
[gd_scene load_steps=2 format=2]
|
||||
|
||||
[ext_resource path="res://autoload/Global.gd" type="Script" id=1]
|
||||
|
||||
[node name="Global" type="Node"]
|
||||
script = ExtResource( 1 )
|
||||
16
buoyancy/FPSLabel.gd
Normal file
16
buoyancy/FPSLabel.gd
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
extends Label
|
||||
|
||||
|
||||
# Declare member variables here. Examples:
|
||||
# var a = 2
|
||||
# var b = "text"
|
||||
|
||||
|
||||
# Called when the node enters the scene tree for the first time.
|
||||
func _ready():
|
||||
pass # Replace with function body.
|
||||
|
||||
|
||||
# Called every frame. 'delta' is the elapsed time since the previous frame.
|
||||
func _process(delta):
|
||||
text = "FPS: %f" % Engine.get_frames_per_second()
|
||||
140
buoyancy/Player.gd
Normal file
140
buoyancy/Player.gd
Normal file
|
|
@ -0,0 +1,140 @@
|
|||
extends RigidBody
|
||||
|
||||
onready var camera = $Head/Camera
|
||||
onready var camera_base = $Head
|
||||
onready var ground_ray_cast = $GroundRayCast
|
||||
onready var state_label = $Head/Camera/StateLabel
|
||||
onready var ocean = get_node("/root/Ocean")
|
||||
|
||||
var camera_x_rotation = 0
|
||||
|
||||
const mouse_sensitivity = 0.2
|
||||
const SPEED = 1
|
||||
const SPRINT_MOD = 1
|
||||
var jump_impulse = 5
|
||||
|
||||
var paused = false
|
||||
|
||||
enum STATE {
|
||||
FLOATING,
|
||||
DIVING,
|
||||
WALKING,
|
||||
SAILING
|
||||
}
|
||||
|
||||
var bound_object = null
|
||||
var bound_offset = Vector2()
|
||||
|
||||
var state = STATE.WALKING
|
||||
|
||||
# Called when the node enters the scene tree for the first time.
|
||||
func _ready():
|
||||
Input.set_mouse_mode(Input.MOUSE_MODE_CAPTURED)
|
||||
|
||||
func _input(event):
|
||||
# Mouse movement
|
||||
if not paused:
|
||||
if event is InputEventMouseMotion:
|
||||
camera_base.rotate_y(deg2rad(-event.relative.x * mouse_sensitivity))
|
||||
|
||||
var x_delta = event.relative.y * mouse_sensitivity
|
||||
if camera_x_rotation + x_delta > -90 and camera_x_rotation + x_delta < 90:
|
||||
camera.rotate_x(deg2rad(-x_delta))
|
||||
camera_x_rotation += x_delta
|
||||
|
||||
func grounded():
|
||||
return ground_ray_cast.is_colliding()
|
||||
|
||||
func _integrate_forces(physics_state):
|
||||
# State machine
|
||||
state = swap_state()
|
||||
|
||||
if not paused:
|
||||
var acc = Vector3()
|
||||
var direction = Vector3()
|
||||
var camera_base_basis = camera.get_global_transform().basis
|
||||
var mod = SPRINT_MOD if Input.is_action_pressed("sprint") else 1
|
||||
|
||||
if Input.is_action_pressed("move_forward"):
|
||||
direction -= camera_base_basis.z #forward is negative in Godot
|
||||
if Input.is_action_pressed("move_backward"):
|
||||
direction += camera_base_basis.z
|
||||
|
||||
# Strafe
|
||||
if Input.is_action_pressed("move_left"):
|
||||
direction -= camera_base_basis.x
|
||||
if Input.is_action_pressed("move_right"):
|
||||
direction += camera_base_basis.x
|
||||
|
||||
match state:
|
||||
STATE.WALKING:
|
||||
if Input.is_action_just_pressed("jump") and grounded():
|
||||
physics_state.apply_central_impulse(Vector3.UP * jump_impulse)
|
||||
else:
|
||||
# Process inputs (only in the xz plane
|
||||
acc.x = direction.x * SPEED * mod
|
||||
acc.z = direction.z * SPEED * mod
|
||||
if not grounded():
|
||||
acc.y = -weight
|
||||
STATE.DIVING:
|
||||
# Process inputs in all directions
|
||||
acc = direction * SPEED * mod
|
||||
STATE.FLOATING:
|
||||
physics_state.add_central_force(Vector3.DOWN * 9.8)
|
||||
|
||||
var wave = ocean.get_wave(translation.x, translation.z)
|
||||
var wave_height = wave.y
|
||||
var height = translation.y
|
||||
|
||||
acc = direction * SPEED * mod
|
||||
|
||||
if height < wave_height:
|
||||
var buoyancy = clamp((wave_height - height) / 0.001, 0, 1) * 5
|
||||
physics_state.add_central_force(Vector3(0, 9.8 * buoyancy, 0))
|
||||
#physics_state.add_central_force(buoyancy * -physics_state.linear_velocity * 0.5)
|
||||
#physics_state.add_torque(buoyancy * -physics_state.angular_velocity * 0.5)
|
||||
STATE.SAILING:
|
||||
self.transform = bound_object.transform
|
||||
self.translate(bound_offset)
|
||||
|
||||
physics_state.add_central_force(acc * mass)
|
||||
|
||||
# emit signal - playerinfo_updated
|
||||
Events.emit_signal("player_transform_updated", $Head/Camera.get_global_translation(), $Head.global_rotation.y)
|
||||
|
||||
|
||||
|
||||
func swap_state():
|
||||
var wave_height = ocean.get_wave(translation.x, translation.z).y
|
||||
var new_state = state
|
||||
match state:
|
||||
STATE.WALKING:
|
||||
# Are we in water
|
||||
if translation.y < wave_height:
|
||||
if linear_velocity.y < -5:
|
||||
new_state = STATE.DIVING
|
||||
else:
|
||||
new_state = STATE.FLOATING
|
||||
STATE.DIVING:
|
||||
# Are we on or above water
|
||||
if translation.y >= wave_height:
|
||||
new_state = STATE.FLOATING
|
||||
STATE.FLOATING:
|
||||
if grounded():
|
||||
new_state = STATE.WALKING
|
||||
if translation.y < wave_height - 0.1:
|
||||
new_state = STATE.DIVING
|
||||
|
||||
return new_state
|
||||
|
||||
func _process(delta):
|
||||
if Input.is_action_just_pressed("toggle_mouse"):
|
||||
toggle_pause()
|
||||
state_label.text = "%s" % STATE.keys()[state]
|
||||
|
||||
func toggle_pause():
|
||||
paused = !paused
|
||||
if paused:
|
||||
Input.set_mouse_mode(Input.MOUSE_MODE_VISIBLE)
|
||||
else:
|
||||
Input.set_mouse_mode(Input.MOUSE_MODE_CAPTURED)
|
||||
55
buoyancy/Player.tscn
Normal file
55
buoyancy/Player.tscn
Normal file
|
|
@ -0,0 +1,55 @@
|
|||
[gd_scene load_steps=6 format=2]
|
||||
|
||||
[ext_resource path="res://buoyancy/Player.gd" type="Script" id=1]
|
||||
[ext_resource path="res://buoyancy/FPSLabel.gd" type="Script" id=2]
|
||||
[ext_resource path="res://buoyancy/ocean/Floater.tscn" type="PackedScene" id=3]
|
||||
|
||||
[sub_resource type="CapsuleMesh" id=1]
|
||||
radius = 0.5
|
||||
|
||||
[sub_resource type="CapsuleShape" id=2]
|
||||
radius = 0.5
|
||||
|
||||
[node name="Player" type="RigidBody"]
|
||||
custom_integrator = true
|
||||
axis_lock_angular_x = true
|
||||
axis_lock_angular_y = true
|
||||
axis_lock_angular_z = true
|
||||
linear_damp = 1.0
|
||||
angular_damp = 1.0
|
||||
script = ExtResource( 1 )
|
||||
|
||||
[node name="MeshInstance" type="MeshInstance" parent="."]
|
||||
transform = Transform( 1, 0, 0, 0, -4.37114e-08, -1, 0, 1, -4.37114e-08, 0, 0, 0 )
|
||||
mesh = SubResource( 1 )
|
||||
|
||||
[node name="CollisionShape" type="CollisionShape" parent="."]
|
||||
transform = Transform( 1, 0, 0, 0, -4.37114e-08, -1, 0, 1, -4.37114e-08, 0, 0, 0 )
|
||||
shape = SubResource( 2 )
|
||||
|
||||
[node name="Head" type="Spatial" parent="."]
|
||||
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.70418, 0 )
|
||||
|
||||
[node name="Camera" type="Camera" parent="Head"]
|
||||
|
||||
[node name="FPSLabel" type="Label" parent="Head/Camera"]
|
||||
margin_right = 40.0
|
||||
margin_bottom = 14.0
|
||||
script = ExtResource( 2 )
|
||||
__meta__ = {
|
||||
"_edit_use_anchors_": false
|
||||
}
|
||||
|
||||
[node name="StateLabel" type="Label" parent="Head/Camera"]
|
||||
margin_top = 14.5121
|
||||
margin_right = 40.0
|
||||
margin_bottom = 28.5121
|
||||
__meta__ = {
|
||||
"_edit_use_anchors_": false
|
||||
}
|
||||
|
||||
[node name="GroundRayCast" type="RayCast" parent="."]
|
||||
enabled = true
|
||||
cast_to = Vector3( 0, -1.2, 0 )
|
||||
|
||||
[node name="Floater" parent="." instance=ExtResource( 3 )]
|
||||
263
buoyancy/SoundBoxLying.pd
Normal file
263
buoyancy/SoundBoxLying.pd
Normal file
|
|
@ -0,0 +1,263 @@
|
|||
#N canvas 67 146 456 518 12;
|
||||
#X msg 361 51 \; pd dsp 1;
|
||||
#X obj 21 22 r fromGodot\$0;
|
||||
#X obj 21 46 list trim;
|
||||
#X obj 303 253 hsl 100 20 -1 1 0 0 empty empty empty -2 -10 0 12 #fcfcfc #000000 #000000 0 1;
|
||||
#X obj 300 349 line~;
|
||||
#X msg 300 325 \$1 100;
|
||||
#X obj 300 278 expr ($f1 + 1)/8;
|
||||
#X floatatom 300 302 5 0 0 0 - - - 0;
|
||||
#N canvas 68 97 450 300 pan2~ 0;
|
||||
#X obj 51 98 cos~;
|
||||
#X obj 111 98 cos~;
|
||||
#X obj 33 128 *~;
|
||||
#X obj 93 128 *~;
|
||||
#X obj 33 158 outlet~;
|
||||
#X obj 93 158 outlet~;
|
||||
#X obj 33 24 inlet~;
|
||||
#X obj 111 24 inlet~;
|
||||
#X obj 111 74 +~ 0.75;
|
||||
#X connect 0 0 2 1;
|
||||
#X connect 1 0 3 1;
|
||||
#X connect 2 0 4 0;
|
||||
#X connect 3 0 5 0;
|
||||
#X connect 6 0 2 0;
|
||||
#X connect 6 0 3 0;
|
||||
#X connect 7 0 8 0;
|
||||
#X connect 7 0 0 0;
|
||||
#X connect 8 0 1 0;
|
||||
#X restore 199 437 pd pan2~;
|
||||
#X obj 199 467 dac~ 1 2;
|
||||
#X obj 200 408 *~;
|
||||
#X obj 189 127 unpack f f;
|
||||
#X floatatom 296 159 5 0 0 0 - - - 0;
|
||||
#X obj 296 182 sin;
|
||||
#X floatatom 296 206 5 0 0 0 - - - 0;
|
||||
#X obj 361 21 loadbang;
|
||||
#X obj 21 70 route bang panvol param preset;
|
||||
#N canvas 52 27 1207 801 Lying 0;
|
||||
#X floatatom 26 425 5 0 0 0 - - - 0;
|
||||
#X obj 25 179 metro 0.25 120 permin;
|
||||
#X obj 25 153 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000 #000000 0 1;
|
||||
#X obj 25 208 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000 #000000;
|
||||
#X msg 78 149 tempo \$1 permin;
|
||||
#X floatatom 78 124 5 0 300 2 BPM - - 0;
|
||||
#X obj 25 234 f;
|
||||
#X obj 69 233 + 1;
|
||||
#X floatatom 25 282 5 0 0 0 - - - 0;
|
||||
#X obj 25 305 hradio 15 1 0 16 empty empty empty 0 -8 0 10 #fcfcfc #000000 #000000 0;
|
||||
#X obj 65 377 > 0;
|
||||
#X obj 26 401 spigot;
|
||||
#X obj 25 349 trigger f f;
|
||||
#X obj 26 448 mtof;
|
||||
#X floatatom 26 472 5 0 0 0 - - - 0;
|
||||
#X obj 55 508 pack;
|
||||
#X floatatom 190 213 5 0 0 1 Slew - - 0;
|
||||
#X msg 55 538 \$1 \$2;
|
||||
#X obj 55 562 line~;
|
||||
#X obj 55 642 phasor~;
|
||||
#X obj 125 612 *~ 1.003;
|
||||
#X obj 125 642 phasor~;
|
||||
#X obj 125 682 expr~ $v1 - 1;
|
||||
#X obj 228 409 bob~;
|
||||
#X floatatom 240 361 5 0 0 0 - - - 0;
|
||||
#X floatatom 286 361 5 0 0 0 - - - 0;
|
||||
#X obj 228 439 hip~ 5;
|
||||
#X obj 551 795 *~ 0.1;
|
||||
#X obj 331 512 delwrite~ \$0-buffer 1000;
|
||||
#X obj 331 482 *~;
|
||||
#X obj 352 456 hsl 128 15 0 5 0 0 empty empty gain -2 -8 0 10 #fcfcc4 #000000 #000000 0 1;
|
||||
#X obj 429 601 delread~ \$0-buffer 10;
|
||||
#X obj 475 761 *~;
|
||||
#X obj 500 652 hsl 128 15 0 127 0 0 empty empty feedback -2 -8 0 10 #fcfcfc #000000 #000000 0 1;
|
||||
#X floatatom 497 678 5 0 0 0 - - - 0;
|
||||
#X floatatom 429 578 5 0 0 0 - - - 0;
|
||||
#X obj 432 558 hsl 128 15 0 127 0 0 empty empty delay -2 -8 0 10 #fcfcfc #000000 #000000 0 1;
|
||||
#X obj 107 15 inlet;
|
||||
#X floatatom 107 69 5 0 0 0 - - - 0;
|
||||
#X floatatom 151 69 5 0 0 0 - - - 0;
|
||||
#X floatatom 196 69 5 0 0 0 - - - 0;
|
||||
#X floatatom 240 69 5 0 0 0 - - - 0;
|
||||
#X floatatom 370 482 5 0 0 0 - - - 0;
|
||||
#X floatatom 285 69 5 0 5 0 - - - 0;
|
||||
#X floatatom 329 69 5 0 0 0 - - - 0;
|
||||
#X floatatom 374 69 5 0 2 0 - - - 0;
|
||||
#X obj 25 14 loadbang;
|
||||
#X msg 25 38 1;
|
||||
#X obj 595 113 bng 19 250 50 0 empty empty empty 0 -10 0 12 #fcfcfc #000000 #000000;
|
||||
#X obj 595 34 loadbang;
|
||||
#X obj 25 258 % 16;
|
||||
#X floatatom 591 586 5 0 0 0 - - - 0;
|
||||
#X obj 107 39 unpack f f f f f f f f, f 45;
|
||||
#X floatatom 419 69 5 0 0 0 - - - 0;
|
||||
#X msg 595 253 111 56 116 75 115 92 118 101 110 104 94 106 112 98 113 82;
|
||||
#X obj 595 229 list trim;
|
||||
#X obj 595 205 list prepend set;
|
||||
#X obj 595 161 t a b;
|
||||
#X msg 649 180 set;
|
||||
#X obj 551 819 outlet~;
|
||||
#X obj 598 292 inlet;
|
||||
#X obj 157 15 r \$0-preset;
|
||||
#X obj 658 704 s \$0-preset;
|
||||
#X obj 598 332 sel 1 2 3 4 5 6 7 8 9 10 11 12, f 54;
|
||||
#N canvas 0 22 450 278 (subpatch) 0;
|
||||
#X array \$0-pitches 16 float 3;
|
||||
#A 0 7.32 9.26 105 9.35 9.94 8.81 9 8 9 12 62 15 15 16 16 18;
|
||||
#X coords 0 127 16 0 50 50 1 0 0;
|
||||
#X restore 786 143 graph;
|
||||
#X obj 595 82 array set \$0-pitches;
|
||||
#X obj 595 137 array get \$0-pitches;
|
||||
#X obj 25 325 array get \$0-pitches;
|
||||
#X msg 595 58 7.32 9.26 105 9.35 9.94 8.81 9 8 9 12 62 15 15 16 16 18;
|
||||
#X msg 598 386 43 1000 316 3.04 2.45 2.06 0.67 0.2;
|
||||
#X msg 608 410 43 834.7 212 4.11 0.7 74.1 0.63 0.21;
|
||||
#X msg 618 434 39 165.9 607.2 2.2 2.35 15.93 0.5 0.2;
|
||||
#X msg 628 458 28 513 134.1 4.54 1.27 0.53 0.78 0.13;
|
||||
#X msg 638 482 57 32 319.4 3.15 0.17 129.5 0.96 0.22;
|
||||
#X msg 648 506 6 782 197.6 1.75 1.16 92.26 0.37 0.19;
|
||||
#X msg 658 530 296 1.4 330.6 1.6 2 17.92 0.566 0.23;
|
||||
#X msg 668 554 98.46 388.2 196 4 3.2 1.67 0.97 0.21;
|
||||
#X msg 678 578 67.01 399 338 5.04 4.43 0.113 0.251 0.18;
|
||||
#X msg 688 602 17 0 267 2.13 1 80.15 0.88 0.18;
|
||||
#X msg 698 626 43 995 298 4.04 2.45 2.88 0.63 0.33;
|
||||
#X msg 709 650 8.7 23.23 1.69 53.26 0.96 0.19;
|
||||
#X connect 0 0 13 0;
|
||||
#X connect 1 0 3 0;
|
||||
#X connect 2 0 1 0;
|
||||
#X connect 3 0 6 0;
|
||||
#X connect 4 0 1 0;
|
||||
#X connect 5 0 4 0;
|
||||
#X connect 6 0 7 0;
|
||||
#X connect 6 0 50 0;
|
||||
#X connect 7 0 6 1;
|
||||
#X connect 8 0 9 0;
|
||||
#X connect 9 0 67 0;
|
||||
#X connect 10 0 11 1;
|
||||
#X connect 11 0 0 0;
|
||||
#X connect 12 0 11 0;
|
||||
#X connect 12 1 10 0;
|
||||
#X connect 13 0 14 0;
|
||||
#X connect 14 0 15 0;
|
||||
#X connect 15 0 17 0;
|
||||
#X connect 16 0 15 1;
|
||||
#X connect 17 0 18 0;
|
||||
#X connect 18 0 19 0;
|
||||
#X connect 18 0 20 0;
|
||||
#X connect 19 0 22 0;
|
||||
#X connect 20 0 21 0;
|
||||
#X connect 21 0 22 0;
|
||||
#X connect 22 0 23 0;
|
||||
#X connect 23 0 26 0;
|
||||
#X connect 24 0 23 1;
|
||||
#X connect 25 0 23 2;
|
||||
#X connect 26 0 27 0;
|
||||
#X connect 26 0 29 0;
|
||||
#X connect 27 0 59 0;
|
||||
#X connect 29 0 28 0;
|
||||
#X connect 30 0 29 1;
|
||||
#X connect 30 0 42 0;
|
||||
#X connect 31 0 32 0;
|
||||
#X connect 32 0 28 0;
|
||||
#X connect 32 0 27 0;
|
||||
#X connect 33 0 32 1;
|
||||
#X connect 33 0 34 0;
|
||||
#X connect 35 0 31 0;
|
||||
#X connect 36 0 35 0;
|
||||
#X connect 37 0 52 0;
|
||||
#X connect 38 0 5 0;
|
||||
#X connect 39 0 16 0;
|
||||
#X connect 40 0 24 0;
|
||||
#X connect 41 0 25 0;
|
||||
#X connect 43 0 30 0;
|
||||
#X connect 44 0 36 0;
|
||||
#X connect 45 0 33 0;
|
||||
#X connect 46 0 47 0;
|
||||
#X connect 47 0 2 0;
|
||||
#X connect 48 0 66 0;
|
||||
#X connect 49 0 68 0;
|
||||
#X connect 50 0 8 0;
|
||||
#X connect 51 0 27 1;
|
||||
#X connect 52 0 38 0;
|
||||
#X connect 52 1 39 0;
|
||||
#X connect 52 2 40 0;
|
||||
#X connect 52 3 41 0;
|
||||
#X connect 52 4 43 0;
|
||||
#X connect 52 5 44 0;
|
||||
#X connect 52 6 45 0;
|
||||
#X connect 52 7 53 0;
|
||||
#X connect 53 0 51 0;
|
||||
#X connect 55 0 54 0;
|
||||
#X connect 56 0 55 0;
|
||||
#X connect 57 0 56 0;
|
||||
#X connect 57 1 58 0;
|
||||
#X connect 58 0 54 0;
|
||||
#X connect 60 0 63 0;
|
||||
#X connect 61 0 52 0;
|
||||
#X connect 63 0 69 0;
|
||||
#X connect 63 1 70 0;
|
||||
#X connect 63 2 71 0;
|
||||
#X connect 63 3 72 0;
|
||||
#X connect 63 4 73 0;
|
||||
#X connect 63 5 74 0;
|
||||
#X connect 63 6 75 0;
|
||||
#X connect 63 7 76 0;
|
||||
#X connect 63 8 77 0;
|
||||
#X connect 63 9 78 0;
|
||||
#X connect 63 10 79 0;
|
||||
#X connect 63 11 80 0;
|
||||
#X connect 66 0 57 0;
|
||||
#X connect 67 0 12 0;
|
||||
#X connect 68 0 65 0;
|
||||
#X connect 69 0 62 0;
|
||||
#X connect 70 0 62 0;
|
||||
#X connect 71 0 62 0;
|
||||
#X connect 72 0 62 0;
|
||||
#X connect 73 0 62 0;
|
||||
#X connect 74 0 62 0;
|
||||
#X connect 75 0 62 0;
|
||||
#X connect 76 0 62 0;
|
||||
#X connect 77 0 62 0;
|
||||
#X connect 78 0 62 0;
|
||||
#X connect 79 0 62 0;
|
||||
#X connect 80 0 62 0;
|
||||
#X restore 18 269 pd Lying;
|
||||
#X obj 189 264 line~;
|
||||
#X msg 189 240 \$1 100;
|
||||
#X floatatom 189 177 5 0 0 0 - - - 0;
|
||||
#X obj 132 310 switch~;
|
||||
#X obj 132 286 tgl 19 0 empty empty empty 0 -10 0 12 #fcfcfc #000000 #000000 0 1;
|
||||
#X obj 132 262 change;
|
||||
#X text 89 155 switch on/off before 0 to stop startup pops, f 12;
|
||||
#X obj 189 216 max 0;
|
||||
#X obj 132 238 > -0.3;
|
||||
#X obj 203 336 *~;
|
||||
#X connect 1 0 2 0;
|
||||
#X connect 2 0 16 0;
|
||||
#X connect 3 0 6 0;
|
||||
#X connect 4 0 8 1;
|
||||
#X connect 5 0 4 0;
|
||||
#X connect 6 0 7 0;
|
||||
#X connect 7 0 5 0;
|
||||
#X connect 8 0 9 0;
|
||||
#X connect 8 1 9 1;
|
||||
#X connect 10 0 8 0;
|
||||
#X connect 11 0 20 0;
|
||||
#X connect 11 1 12 0;
|
||||
#X connect 12 0 13 0;
|
||||
#X connect 13 0 14 0;
|
||||
#X connect 14 0 3 0;
|
||||
#X connect 15 0 0 0;
|
||||
#X connect 16 1 11 0;
|
||||
#X connect 16 2 17 0;
|
||||
#X connect 16 3 17 1;
|
||||
#X connect 17 0 10 0;
|
||||
#X connect 18 0 27 0;
|
||||
#X connect 18 0 27 1;
|
||||
#X connect 19 0 18 0;
|
||||
#X connect 20 0 25 0;
|
||||
#X connect 20 0 26 0;
|
||||
#X connect 22 0 21 0;
|
||||
#X connect 23 0 22 0;
|
||||
#X connect 25 0 19 0;
|
||||
#X connect 26 0 23 0;
|
||||
#X connect 27 0 10 1;
|
||||
263
buoyancy/SoundBuoyFloating.pd
Normal file
263
buoyancy/SoundBuoyFloating.pd
Normal file
|
|
@ -0,0 +1,263 @@
|
|||
#N canvas 527 149 456 518 12;
|
||||
#X msg 361 51 \; pd dsp 1;
|
||||
#X obj 21 22 r fromGodot\$0;
|
||||
#X obj 21 46 list trim;
|
||||
#X obj 303 253 hsl 100 20 -1 1 0 0 empty empty empty -2 -10 0 12 #fcfcfc #000000 #000000 0 1;
|
||||
#X obj 300 349 line~;
|
||||
#X msg 300 325 \$1 100;
|
||||
#X obj 300 278 expr ($f1 + 1)/8;
|
||||
#X floatatom 300 302 5 0 0 0 - - - 0;
|
||||
#N canvas 68 97 450 300 pan2~ 0;
|
||||
#X obj 51 98 cos~;
|
||||
#X obj 111 98 cos~;
|
||||
#X obj 33 128 *~;
|
||||
#X obj 93 128 *~;
|
||||
#X obj 33 158 outlet~;
|
||||
#X obj 93 158 outlet~;
|
||||
#X obj 33 24 inlet~;
|
||||
#X obj 111 24 inlet~;
|
||||
#X obj 111 74 +~ 0.75;
|
||||
#X connect 0 0 2 1;
|
||||
#X connect 1 0 3 1;
|
||||
#X connect 2 0 4 0;
|
||||
#X connect 3 0 5 0;
|
||||
#X connect 6 0 2 0;
|
||||
#X connect 6 0 3 0;
|
||||
#X connect 7 0 8 0;
|
||||
#X connect 7 0 0 0;
|
||||
#X connect 8 0 1 0;
|
||||
#X restore 199 437 pd pan2~;
|
||||
#X obj 199 467 dac~ 1 2;
|
||||
#X obj 199 407 *~;
|
||||
#X obj 189 127 unpack f f;
|
||||
#X floatatom 296 159 5 0 0 0 - - - 0;
|
||||
#X obj 296 182 sin;
|
||||
#X floatatom 296 206 5 0 0 0 - - - 0;
|
||||
#X obj 361 21 loadbang;
|
||||
#X obj 21 70 route bang panvol param preset;
|
||||
#N canvas 53 227 1207 801 Floating 0;
|
||||
#X floatatom 26 425 5 0 0 0 - - - 0;
|
||||
#X obj 25 179 metro 0.25 120 permin;
|
||||
#X obj 25 153 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000 #000000 0 1;
|
||||
#X obj 25 208 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000 #000000;
|
||||
#X msg 78 149 tempo \$1 permin;
|
||||
#X floatatom 78 124 5 0 300 2 BPM - - 0;
|
||||
#X obj 25 234 f;
|
||||
#X obj 69 233 + 1;
|
||||
#X floatatom 25 282 5 0 0 0 - - - 0;
|
||||
#X obj 25 305 hradio 15 1 0 16 empty empty empty 0 -8 0 10 #fcfcfc #000000 #000000 0;
|
||||
#X obj 65 377 > 0;
|
||||
#X obj 26 401 spigot;
|
||||
#X obj 25 349 trigger f f;
|
||||
#X obj 26 448 mtof;
|
||||
#X floatatom 26 472 5 0 0 0 - - - 0;
|
||||
#X obj 55 508 pack;
|
||||
#X floatatom 190 213 5 0 0 1 Slew - - 0;
|
||||
#X msg 55 538 \$1 \$2;
|
||||
#X obj 55 562 line~;
|
||||
#X obj 55 642 phasor~;
|
||||
#X obj 125 612 *~ 1.003;
|
||||
#X obj 125 642 phasor~;
|
||||
#X obj 125 682 expr~ $v1 - 1;
|
||||
#X obj 228 409 bob~;
|
||||
#X floatatom 240 361 5 0 0 0 - - - 0;
|
||||
#X floatatom 286 361 5 0 0 0 - - - 0;
|
||||
#X obj 228 439 hip~ 5;
|
||||
#X obj 551 795 *~ 0.1;
|
||||
#X obj 331 512 delwrite~ \$0-buffer 1000;
|
||||
#X obj 331 482 *~;
|
||||
#X obj 352 456 hsl 128 15 0 5 0 0 empty empty gain -2 -8 0 10 #fcfcc4 #000000 #000000 0 1;
|
||||
#X obj 429 601 delread~ \$0-buffer 10;
|
||||
#X obj 475 761 *~;
|
||||
#X obj 500 652 hsl 128 15 0 127 0 0 empty empty feedback -2 -8 0 10 #fcfcfc #000000 #000000 0 1;
|
||||
#X floatatom 497 678 5 0 0 0 - - - 0;
|
||||
#X floatatom 429 578 5 0 0 0 - - - 0;
|
||||
#X obj 432 558 hsl 128 15 0 127 0 0 empty empty delay -2 -8 0 10 #fcfcfc #000000 #000000 0 1;
|
||||
#X obj 107 15 inlet;
|
||||
#X floatatom 107 69 5 0 0 0 - - - 0;
|
||||
#X floatatom 151 69 5 0 0 0 - - - 0;
|
||||
#X floatatom 196 69 5 0 0 0 - - - 0;
|
||||
#X floatatom 240 69 5 0 0 0 - - - 0;
|
||||
#X floatatom 370 482 5 0 0 0 - - - 0;
|
||||
#X floatatom 285 69 5 0 5 0 - - - 0;
|
||||
#X floatatom 329 69 5 0 0 0 - - - 0;
|
||||
#X floatatom 374 69 5 0 2 0 - - - 0;
|
||||
#X obj 25 14 loadbang;
|
||||
#X msg 25 38 1;
|
||||
#X obj 595 113 bng 19 250 50 0 empty empty empty 0 -10 0 12 #fcfcfc #000000 #000000;
|
||||
#X obj 595 34 loadbang;
|
||||
#X obj 25 258 % 16;
|
||||
#X floatatom 591 586 5 0 0 0 - - - 0;
|
||||
#X obj 107 39 unpack f f f f f f f f, f 45;
|
||||
#X floatatom 419 69 5 0 0 0 - - - 0;
|
||||
#X msg 595 253 111 56 116 75 115 92 118 101 110 104 94 106 112 98 113 82;
|
||||
#X obj 595 229 list trim;
|
||||
#X obj 595 205 list prepend set;
|
||||
#X obj 595 161 t a b;
|
||||
#X msg 649 180 set;
|
||||
#X obj 551 819 outlet~;
|
||||
#X obj 598 292 inlet;
|
||||
#X obj 157 15 r \$0-preset;
|
||||
#X obj 658 704 s \$0-preset;
|
||||
#X obj 598 332 sel 1 2 3 4 5 6 7 8 9 10 11 12, f 54;
|
||||
#X msg 598 386 84 140 587 1.97 1.2 134.7 0.6 0.88;
|
||||
#X msg 608 410 18.73 18 552 2.26 1.28 360 0.645 0.67;
|
||||
#X msg 618 434 6 306 484.9 0.43 2.57 2.23 0.8 0.55;
|
||||
#X msg 628 458 28 513 250 3.06 2.2 1.03 0.94 0.19;
|
||||
#X msg 638 482 57 0 320 4.43 0.9 129.5 0.96 0.19;
|
||||
#X msg 648 506 6 782 197.6 1.75 1.16 92.26 0.37 0.19;
|
||||
#X msg 658 530 19 0 183.6 1.45 3.11 79.26 0.88 0.19;
|
||||
#X msg 668 554 16.5 0 386 1.89 5 51.67 0.83 0.21;
|
||||
#X msg 678 578 56 0 1665 1.06 0.64 1376 0.72 0.15;
|
||||
#X msg 688 602 16.98 585 122 10.82 2 432 0.88 0.22;
|
||||
#X msg 698 626 43 995 298 4.04 2.45 2.88 0.63 0.33;
|
||||
#X msg 708 650 10 131 188.7 23.23 1.69 53.26 0.96 0.19;
|
||||
#N canvas 0 22 450 278 (subpatch) 0;
|
||||
#X array \$0-pitches 16 float 3;
|
||||
#A 0 111 56 116 75 115 92 118 101 110 104 94 106 112 98 113 82;
|
||||
#X coords 0 127 16 0 50 50 1 0 0;
|
||||
#X restore 786 143 graph;
|
||||
#X obj 595 82 array set \$0-pitches;
|
||||
#X obj 595 137 array get \$0-pitches;
|
||||
#X obj 25 325 array get \$0-pitches;
|
||||
#X msg 595 58 111 56 116 75 115 92 118 101 110 104 94 106 112 98 113 82;
|
||||
#X connect 0 0 13 0;
|
||||
#X connect 1 0 3 0;
|
||||
#X connect 2 0 1 0;
|
||||
#X connect 3 0 6 0;
|
||||
#X connect 4 0 1 0;
|
||||
#X connect 5 0 4 0;
|
||||
#X connect 6 0 7 0;
|
||||
#X connect 6 0 50 0;
|
||||
#X connect 7 0 6 1;
|
||||
#X connect 8 0 9 0;
|
||||
#X connect 9 0 79 0;
|
||||
#X connect 10 0 11 1;
|
||||
#X connect 11 0 0 0;
|
||||
#X connect 12 0 11 0;
|
||||
#X connect 12 1 10 0;
|
||||
#X connect 13 0 14 0;
|
||||
#X connect 14 0 15 0;
|
||||
#X connect 15 0 17 0;
|
||||
#X connect 16 0 15 1;
|
||||
#X connect 17 0 18 0;
|
||||
#X connect 18 0 19 0;
|
||||
#X connect 18 0 20 0;
|
||||
#X connect 19 0 22 0;
|
||||
#X connect 20 0 21 0;
|
||||
#X connect 21 0 22 0;
|
||||
#X connect 22 0 23 0;
|
||||
#X connect 23 0 26 0;
|
||||
#X connect 24 0 23 1;
|
||||
#X connect 25 0 23 2;
|
||||
#X connect 26 0 27 0;
|
||||
#X connect 26 0 29 0;
|
||||
#X connect 27 0 59 0;
|
||||
#X connect 29 0 28 0;
|
||||
#X connect 30 0 29 1;
|
||||
#X connect 30 0 42 0;
|
||||
#X connect 31 0 32 0;
|
||||
#X connect 32 0 28 0;
|
||||
#X connect 32 0 27 0;
|
||||
#X connect 33 0 32 1;
|
||||
#X connect 33 0 34 0;
|
||||
#X connect 35 0 31 0;
|
||||
#X connect 36 0 35 0;
|
||||
#X connect 37 0 52 0;
|
||||
#X connect 38 0 5 0;
|
||||
#X connect 39 0 16 0;
|
||||
#X connect 40 0 24 0;
|
||||
#X connect 41 0 25 0;
|
||||
#X connect 43 0 30 0;
|
||||
#X connect 44 0 36 0;
|
||||
#X connect 45 0 33 0;
|
||||
#X connect 46 0 47 0;
|
||||
#X connect 47 0 2 0;
|
||||
#X connect 48 0 78 0;
|
||||
#X connect 49 0 80 0;
|
||||
#X connect 50 0 8 0;
|
||||
#X connect 51 0 27 1;
|
||||
#X connect 52 0 38 0;
|
||||
#X connect 52 1 39 0;
|
||||
#X connect 52 2 40 0;
|
||||
#X connect 52 3 41 0;
|
||||
#X connect 52 4 43 0;
|
||||
#X connect 52 5 44 0;
|
||||
#X connect 52 6 45 0;
|
||||
#X connect 52 7 53 0;
|
||||
#X connect 53 0 51 0;
|
||||
#X connect 55 0 54 0;
|
||||
#X connect 56 0 55 0;
|
||||
#X connect 57 0 56 0;
|
||||
#X connect 57 1 58 0;
|
||||
#X connect 58 0 54 0;
|
||||
#X connect 60 0 63 0;
|
||||
#X connect 61 0 52 0;
|
||||
#X connect 63 0 64 0;
|
||||
#X connect 63 1 65 0;
|
||||
#X connect 63 2 66 0;
|
||||
#X connect 63 3 67 0;
|
||||
#X connect 63 4 68 0;
|
||||
#X connect 63 5 69 0;
|
||||
#X connect 63 6 70 0;
|
||||
#X connect 63 7 71 0;
|
||||
#X connect 63 8 72 0;
|
||||
#X connect 63 9 73 0;
|
||||
#X connect 63 10 74 0;
|
||||
#X connect 63 11 75 0;
|
||||
#X connect 64 0 62 0;
|
||||
#X connect 65 0 62 0;
|
||||
#X connect 66 0 62 0;
|
||||
#X connect 67 0 62 0;
|
||||
#X connect 68 0 62 0;
|
||||
#X connect 69 0 62 0;
|
||||
#X connect 70 0 62 0;
|
||||
#X connect 71 0 62 0;
|
||||
#X connect 72 0 62 0;
|
||||
#X connect 73 0 62 0;
|
||||
#X connect 74 0 62 0;
|
||||
#X connect 75 0 62 0;
|
||||
#X connect 78 0 57 0;
|
||||
#X connect 79 0 12 0;
|
||||
#X connect 80 0 77 0;
|
||||
#X restore 18 269 pd Floating;
|
||||
#X obj 189 264 line~;
|
||||
#X msg 189 240 \$1 100;
|
||||
#X floatatom 189 177 5 0 0 0 - - - 0;
|
||||
#X obj 132 310 switch~;
|
||||
#X obj 132 286 tgl 19 0 empty empty empty 0 -10 0 12 #fcfcfc #000000 #000000 0 1;
|
||||
#X obj 132 262 change;
|
||||
#X text 89 155 switch on/off before 0 to stop startup pops, f 12;
|
||||
#X obj 189 216 max 0;
|
||||
#X obj 132 238 > -0.3;
|
||||
#X obj 203 336 *~;
|
||||
#X connect 1 0 2 0;
|
||||
#X connect 2 0 16 0;
|
||||
#X connect 3 0 6 0;
|
||||
#X connect 4 0 8 1;
|
||||
#X connect 5 0 4 0;
|
||||
#X connect 6 0 7 0;
|
||||
#X connect 7 0 5 0;
|
||||
#X connect 8 0 9 0;
|
||||
#X connect 8 1 9 1;
|
||||
#X connect 10 0 8 0;
|
||||
#X connect 11 0 20 0;
|
||||
#X connect 11 1 12 0;
|
||||
#X connect 12 0 13 0;
|
||||
#X connect 13 0 14 0;
|
||||
#X connect 14 0 3 0;
|
||||
#X connect 15 0 0 0;
|
||||
#X connect 16 1 11 0;
|
||||
#X connect 16 2 17 0;
|
||||
#X connect 16 3 17 1;
|
||||
#X connect 17 0 10 0;
|
||||
#X connect 18 0 27 0;
|
||||
#X connect 18 0 27 1;
|
||||
#X connect 19 0 18 0;
|
||||
#X connect 20 0 25 0;
|
||||
#X connect 20 0 26 0;
|
||||
#X connect 22 0 21 0;
|
||||
#X connect 23 0 22 0;
|
||||
#X connect 25 0 19 0;
|
||||
#X connect 26 0 23 0;
|
||||
#X connect 27 0 10 1;
|
||||
95
buoyancy/SoundBuoyRand.gd
Normal file
95
buoyancy/SoundBuoyRand.gd
Normal file
|
|
@ -0,0 +1,95 @@
|
|||
extends RigidBody
|
||||
|
||||
export (String, MULTILINE) var patch = ""
|
||||
export (float, 0, 100) var audible_range_max = 10.0
|
||||
export (float, 1, 12) var preset = 1
|
||||
|
||||
var _my_patch = "res://buoyancy/SoundBoxLying.pd"
|
||||
var _my_id = 0
|
||||
|
||||
func set_size(size):
|
||||
$CollisionShape.shape.radius = size
|
||||
$MeshInstance.mesh.radius = size
|
||||
$MeshInstance.mesh.height = size * 2
|
||||
|
||||
func set_freq(freq):
|
||||
Global._gdpd.start_message(2)
|
||||
Global._gdpd.add_symbol('freq')
|
||||
Global._gdpd.add_float(freq)
|
||||
Global._gdpd.finish_list("fromGodot" + String(_my_id))
|
||||
|
||||
func set_gain(gain):
|
||||
Global._gdpd.start_message(2)
|
||||
Global._gdpd.add_symbol('gain')
|
||||
Global._gdpd.add_float(gain)
|
||||
Global._gdpd.finish_list("fromGodot" + String(_my_id))
|
||||
|
||||
func set_param(param):
|
||||
Global._gdpd.start_message(param.size()+1)
|
||||
Global._gdpd.add_symbol("param")
|
||||
for i in range(param.size()):
|
||||
Global._gdpd.add_float(param[i])
|
||||
Global._gdpd.finish_list("fromGodot" + String(_my_id))
|
||||
|
||||
func set_preset(prs):
|
||||
preset = prs
|
||||
Global._gdpd.start_message(2)
|
||||
Global._gdpd.add_symbol("preset")
|
||||
Global._gdpd.add_float(prs)
|
||||
Global._gdpd.finish_list("fromGodot" + String(_my_id))
|
||||
|
||||
func set_color(color):
|
||||
$MeshInstance.material_override = SpatialMaterial.new()
|
||||
$MeshInstance.material_override.albedo_color = color
|
||||
|
||||
func _ready():
|
||||
# save patch (for export)
|
||||
# _save_patch()
|
||||
|
||||
# load patch
|
||||
_my_id = Global.load_patch(ProjectSettings.globalize_path(_my_patch))
|
||||
|
||||
# listen 'player_transform_updated' event
|
||||
Events.connect("player_transform_updated", self, "_on_Events_player_transform_updated")
|
||||
|
||||
# send 'preset'
|
||||
set_preset(preset)
|
||||
|
||||
func _on_Events_player_transform_updated(playerpos, playerheading):
|
||||
var mypos = get_global_translation()
|
||||
var mypos2d = Vector2(mypos.x, mypos.z)
|
||||
var playerpos2d = Vector2(playerpos.x, playerpos.z)
|
||||
# calculate distance
|
||||
var distance = mypos.distance_to(playerpos)
|
||||
# calculate angle
|
||||
var angle = fmod(fmod(playerpos2d.angle_to_point(mypos2d) + playerheading - PI/2, PI*2) + PI*2, PI*2)
|
||||
if angle > PI:
|
||||
angle = angle - PI*2
|
||||
# (check)
|
||||
# print(str(_my_id) +" : ("+ str(distance) +","+ str(angle) +")")
|
||||
# calculate gain
|
||||
var gain = 1 - distance/audible_range_max
|
||||
# send to the patch
|
||||
Global._gdpd.start_message(3)
|
||||
Global._gdpd.add_symbol("panvol")
|
||||
Global._gdpd.add_float(gain)
|
||||
Global._gdpd.add_float(angle)
|
||||
Global._gdpd.finish_list("fromGodot" + String(_my_id))
|
||||
|
||||
|
||||
func _exit_tree():
|
||||
Global.close_patch(_my_id)
|
||||
pass
|
||||
|
||||
#func _save_patch():
|
||||
# # save patch
|
||||
# # prepare directory
|
||||
# var patch_name = _my_patch.split("/")[-1]
|
||||
# var patch_dir = _my_patch.trim_suffix(patch_name)
|
||||
# var dir = Directory.new()
|
||||
# dir.make_dir_recursive(patch_dir)
|
||||
# # save to file
|
||||
# var file = File.new()
|
||||
# file.open(_my_patch, File.WRITE)
|
||||
# file.store_string(patch)
|
||||
# file.close()
|
||||
23
buoyancy/SoundBuoyRand.tscn
Normal file
23
buoyancy/SoundBuoyRand.tscn
Normal file
|
|
@ -0,0 +1,23 @@
|
|||
[gd_scene load_steps=5 format=2]
|
||||
|
||||
[ext_resource path="res://buoyancy/SoundBuoyRand.gd" type="Script" id=1]
|
||||
|
||||
[sub_resource type="SpatialMaterial" id=3]
|
||||
albedo_color = Color( 0.921569, 0.494118, 0.694118, 1 )
|
||||
|
||||
[sub_resource type="SphereMesh" id=1]
|
||||
material = SubResource( 3 )
|
||||
radius = 1.459
|
||||
height = 1.083
|
||||
|
||||
[sub_resource type="ConvexPolygonShape" id=2]
|
||||
points = PoolVector3Array( 0.14602, -0.102076, 1.42342, -0.219537, -0.0658975, -1.42853, -0.218843, 0.0803725, -1.42401, 1.42853, -0.0658975, -0.219537, 0.105642, 0.53546, 0.175801, -1.17876, -0.314129, 0.142673, 0.352377, -0.521109, -0.175919, -1.25567, 0.258471, 0.25097, 0.461951, 0.291547, 1.13684, 0.992575, 0.326336, -0.602528, -0.85013, 0.290827, -0.885845, -0.792132, 0.151385, 1.15232, 0.757919, -0.172957, -1.15507, 1.03698, -0.207188, 0.858142, -0.389239, -0.381989, 0.955797, -1.03684, -0.207215, -0.858252, 1.1369, 0.291563, 0.461705, -0.282969, -0.416976, -0.884008, 0.212696, 0.361742, -1.06321, -0.596437, 0.463472, 0.456036, -1.01224, -0.101075, 1.01252, -1.42401, 0.0803724, -0.218843, -0.634646, -0.486325, -0.0702769, 1.10137, -0.34791, -0.177412, 0.317427, -0.450965, 0.740393, 0.800108, 0.0800942, -1.2003, -0.596435, 0.46347, -0.456034, 1.13038, 0.043762, 0.911546, 0.389491, -0.381972, -0.955754, -0.21339, 0.3277, 1.13926, 0.491401, 0.49861, -0.280533, -0.911547, 0.043762, -1.13039, -1.35204, -0.0657389, 0.511516, 0.456279, 0.463446, 0.596404, 1.34784, 0.0802032, -0.509821, -0.401969, -0.0657613, 1.38931, 1.42853, -0.0658975, 0.219537, 0.955797, -0.381989, 0.389239, 0.400968, 0.080235, 1.38488, 1.15506, -0.172956, -0.757916, -0.421868, -0.484681, 0.491911, -1.06324, 0.361753, -0.212432, 0.467819, -0.2085, 1.25924, -1.38267, -0.101763, -0.363728, -0.919914, -0.346564, 0.636967, -1.03118, -0.348309, -0.426648, -0.143343, -0.243849, -1.29228, -1.07176, 0.221697, 0.785884, 1.37466, 0.152041, 0.253002, 0.990737, 0.396511, 0.035123, -0.461704, 0.291562, -1.1369, -0.176079, 0.500229, -0.527699, -0.0728398, 0.116527, 1.4201, 0.400968, 0.0802351, -1.38488, -1.26559, 0.115794, -0.65088, 0.813189, -0.381526, -0.63635, -0.0704785, 0.465277, 0.739756, -0.644202, -0.207409, -1.18126, -0.286048, -0.278611, 1.21543, -0.176192, -0.521119, -0.352115, 0.281713, -0.520755, 0.281444, 0.290362, -0.137785, -1.37894, 0.889028, 0.256232, 0.9246, 0.694799, -0.0291507, 1.27961 )
|
||||
|
||||
[node name="SoundBuoyRand" type="RigidBody"]
|
||||
script = ExtResource( 1 )
|
||||
|
||||
[node name="MeshInstance" type="MeshInstance" parent="."]
|
||||
mesh = SubResource( 1 )
|
||||
|
||||
[node name="CollisionShape2" type="CollisionShape" parent="."]
|
||||
shape = SubResource( 2 )
|
||||
80
buoyancy/SoundBuoyy.gd
Normal file
80
buoyancy/SoundBuoyy.gd
Normal file
|
|
@ -0,0 +1,80 @@
|
|||
extends RigidBody
|
||||
|
||||
export (String, MULTILINE) var patch = ""
|
||||
export (float, 0, 100) var audible_range_max = 10.0
|
||||
export (float, 1, 12) var preset = 1
|
||||
|
||||
var _my_patch = "res://buoyancy/SoundBoxLying.pd"
|
||||
var _my_id = 0
|
||||
|
||||
func set_param(param):
|
||||
Global._gdpd.start_message(param.size()+1)
|
||||
Global._gdpd.add_symbol("param")
|
||||
for i in range(param.size()):
|
||||
Global._gdpd.add_float(param[i])
|
||||
Global._gdpd.finish_list("fromGodot" + String(_my_id))
|
||||
|
||||
func set_preset(prs):
|
||||
preset = prs
|
||||
Global._gdpd.start_message(2)
|
||||
Global._gdpd.add_symbol("preset")
|
||||
Global._gdpd.add_float(prs)
|
||||
Global._gdpd.finish_list("fromGodot" + String(_my_id))
|
||||
|
||||
func _ready():
|
||||
# save patch (for export)
|
||||
# _save_patch()
|
||||
|
||||
# load patch
|
||||
_my_id = Global.load_patch(ProjectSettings.globalize_path(_my_patch))
|
||||
|
||||
# send a 'individual' bang.
|
||||
Global._gdpd.start_message(1)
|
||||
Global._gdpd.add_symbol('bang') # there's no 'add_bang', only 'add_symbol' => add_symbol('bang') is a pseudo-bang
|
||||
Global._gdpd.finish_list("fromGodot" + String(_my_id)) # send msg. individually ($0)
|
||||
|
||||
# listen 'player_transform_updated' event
|
||||
Events.connect("player_transform_updated", self, "_on_Events_player_transform_updated")
|
||||
|
||||
# send 'preset'
|
||||
set_preset(preset)
|
||||
|
||||
|
||||
func _on_Events_player_transform_updated(playerpos, playerheading):
|
||||
var mypos = get_global_translation()
|
||||
var mypos2d = Vector2(mypos.x, mypos.z)
|
||||
var playerpos2d = Vector2(playerpos.x, playerpos.z)
|
||||
# calculate distance
|
||||
var distance = mypos.distance_to(playerpos)
|
||||
# calculate angle
|
||||
var angle = fmod(fmod(playerpos2d.angle_to_point(mypos2d) + playerheading - PI/2, PI*2) + PI*2, PI*2)
|
||||
if angle > PI:
|
||||
angle = angle - PI*2
|
||||
# (check)
|
||||
# print(str(_my_id) +" : ("+ str(distance) +","+ str(angle) +")")
|
||||
# calculate gain
|
||||
var gain = 1 - distance/audible_range_max
|
||||
# send to the patch
|
||||
Global._gdpd.start_message(3)
|
||||
Global._gdpd.add_symbol("panvol")
|
||||
Global._gdpd.add_float(gain)
|
||||
Global._gdpd.add_float(angle)
|
||||
Global._gdpd.finish_list("fromGodot" + String(_my_id))
|
||||
|
||||
|
||||
func _exit_tree():
|
||||
Global.close_patch(_my_id)
|
||||
pass
|
||||
|
||||
#func _save_patch():
|
||||
# # save patch
|
||||
# # prepare directory
|
||||
# var patch_name = _my_patch.split("/")[-1]
|
||||
# var patch_dir = _my_patch.trim_suffix(patch_name)
|
||||
# var dir = Directory.new()
|
||||
# dir.make_dir_recursive(patch_dir)
|
||||
# # save to file
|
||||
# var file = File.new()
|
||||
# file.open(_my_patch, File.WRITE)
|
||||
# file.store_string(patch)
|
||||
# file.close()
|
||||
33
buoyancy/SoundBuoyy.tscn
Normal file
33
buoyancy/SoundBuoyy.tscn
Normal file
|
|
@ -0,0 +1,33 @@
|
|||
[gd_scene load_steps=5 format=2]
|
||||
|
||||
[ext_resource path="res://buoyancy/ocean/Floater.tscn" type="PackedScene" id=1]
|
||||
[ext_resource path="res://buoyancy/SoundBuoyy.gd" type="Script" id=2]
|
||||
|
||||
[sub_resource type="CylinderMesh" id=1]
|
||||
top_radius = 0.541
|
||||
|
||||
[sub_resource type="ConvexPolygonShape" id=2]
|
||||
points = PoolVector3Array( 1, 1, 0, 1, -1, 0, 0.995106, 1, -0.0980814, 0.995106, 1, 0.0978857, 0.995106, -1, 0.0978857, 0.995106, -1, -0.0980814, 0.980619, 1, -0.195184, 0.980619, 1, 0.194988, 0.980619, -1, 0.194988, 0.980619, -1, -0.195184, 0.95693, 1, -0.290329, 0.95693, 1, 0.290133, 0.95693, -1, 0.290133, 0.95693, -1, -0.290329, 0.923845, 1, -0.382733, 0.923845, 1, 0.382537, 0.923845, -1, 0.382537, 0.923845, -1, -0.382733, 0.881754, 1, -0.471417, 0.881754, 1, 0.471222, 0.881754, -1, 0.471222, 0.881754, -1, -0.471417, 0.831441, 1, -0.555599, 0.831441, 1, 0.555403, 0.831441, -1, 0.555403, 0.831441, -1, -0.555599, 0.772905, 1, -0.634495, 0.772905, 1, 0.634299, 0.772905, -1, 0.634299, 0.772905, -1, -0.634495, 0.70693, 1, -0.707126, 0.70693, 1, 0.70693, 0.70693, -1, 0.70693, 0.70693, -1, -0.707126, 0.634299, 1, -0.773101, 0.634299, 1, 0.772905, 0.634299, -1, 0.772905, 0.634299, -1, -0.773101, 0.555403, 1, -0.831637, 0.555403, 1, 0.831441, 0.555403, -1, 0.831441, 0.555403, -1, -0.831637, 0.471222, 1, -0.88195, 0.471222, 1, 0.881754, 0.471222, -1, 0.881754, 0.471222, -1, -0.88195, 0.382537, 1, -0.924041, 0.382537, 1, 0.923845, 0.382537, -1, 0.923845, 0.382537, -1, -0.924041, 0.290133, 1, -0.957126, 0.290133, 1, 0.95693, 0.290133, -1, 0.95693, 0.290133, -1, -0.957126, 0.194988, 1, -0.980814, 0.194988, 1, 0.980619, 0.194988, -1, 0.980619, 0.194988, -1, -0.980814, 0.0978857, 1, -0.995301, 0.0978857, 1, 0.995106, 0.0978857, -1, 0.995106, 0.0978857, -1, -0.995301, 0, 1, -1, 0, 1, 1, 0, -1, 1, 0, -1, -1, -0.0980814, 1, -0.995301, -0.0980814, 1, 0.995106, -0.0980814, -1, 0.995106, -0.0980814, -1, -0.995301, -0.195184, 1, -0.980814, -0.195184, 1, 0.980619, -0.195184, -1, 0.980619, -0.195184, -1, -0.980814, -0.290329, 1, -0.957126, -0.290329, 1, 0.95693, -0.290329, -1, 0.95693, -0.290329, -1, -0.957126, -0.382733, 1, -0.924041, -0.382733, 1, 0.923845, -0.382733, -1, 0.923845, -0.382733, -1, -0.924041, -0.471417, 1, -0.88195, -0.471417, 1, 0.881754, -0.471417, -1, 0.881754, -0.471417, -1, -0.88195, -0.555599, 1, -0.831637, -0.555599, 1, 0.831441, -0.555599, -1, 0.831441, -0.555599, -1, -0.831637, -0.634495, 1, -0.773101, -0.634495, 1, 0.772905, -0.634495, -1, 0.772905, -0.634495, -1, -0.773101, -0.707126, 1, -0.707126, -0.707126, 1, 0.70693, -0.707126, -1, 0.70693, -0.707126, -1, -0.707126, -0.773101, 1, -0.634495, -0.773101, 1, 0.634299, -0.773101, -1, 0.634299, -0.773101, -1, -0.634495, -0.831637, 1, -0.555599, -0.831637, 1, 0.555403, -0.831637, -1, 0.555403, -0.831637, -1, -0.555599, -0.88195, 1, -0.471417, -0.88195, 1, 0.471222, -0.88195, -1, 0.471222, -0.88195, -1, -0.471417, -0.924041, 1, -0.382733, -0.924041, 1, 0.382537, -0.924041, -1, 0.382537, -0.924041, -1, -0.382733, -0.957126, 1, -0.290329, -0.957126, 1, 0.290133, -0.957126, -1, 0.290133, -0.957126, -1, -0.290329, -0.980814, 1, -0.195184, -0.980814, 1, 0.194988, -0.980814, -1, 0.194988, -0.980814, -1, -0.195184, -0.995301, 1, -0.0980814, -0.995301, 1, 0.0978857, -0.995301, -1, 0.0978857, -0.995301, -1, -0.0980814, -1, 1, 0, -1, -1, 0 )
|
||||
|
||||
[node name="SoundBuoyy1" type="RigidBody"]
|
||||
script = ExtResource( 2 )
|
||||
|
||||
[node name="MeshInstance" type="MeshInstance" parent="."]
|
||||
transform = Transform( 1.91069e-15, 4.37114e-08, 1, 1, -4.37114e-08, 0, 4.37114e-08, 1, -4.37114e-08, 0, 0, 0 )
|
||||
mesh = SubResource( 1 )
|
||||
|
||||
[node name="CollisionShape" type="CollisionShape" parent="."]
|
||||
transform = Transform( 1.91069e-15, 4.37114e-08, 1, 1, -4.37114e-08, 0, 4.37114e-08, 1, -4.37114e-08, 0, 0, 0 )
|
||||
shape = SubResource( 2 )
|
||||
|
||||
[node name="Floater" parent="." instance=ExtResource( 1 )]
|
||||
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.5, 1 )
|
||||
|
||||
[node name="Floater2" parent="." instance=ExtResource( 1 )]
|
||||
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.5, -1 )
|
||||
|
||||
[node name="Floater3" parent="." instance=ExtResource( 1 )]
|
||||
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 1, -0.5, 0 )
|
||||
|
||||
[node name="Floater4" parent="." instance=ExtResource( 1 )]
|
||||
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -1, -0.5, 0 )
|
||||
16
buoyancy/ocean/Camera.gd
Normal file
16
buoyancy/ocean/Camera.gd
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
extends Camera
|
||||
|
||||
|
||||
# Declare member variables here. Examples:
|
||||
# var a = 2
|
||||
# var b = "text"
|
||||
|
||||
|
||||
# Called when the node enters the scene tree for the first time.
|
||||
func _ready():
|
||||
pass # Replace with function body.
|
||||
|
||||
|
||||
# Called every frame. 'delta' is the elapsed time since the previous frame.
|
||||
func _process(delta):
|
||||
pass
|
||||
47
buoyancy/ocean/Floater.gd
Normal file
47
buoyancy/ocean/Floater.gd
Normal file
|
|
@ -0,0 +1,47 @@
|
|||
extends Spatial
|
||||
class_name Floater
|
||||
|
||||
var depth_before_submerged = 1.0
|
||||
onready var ocean = get_node("/root/Ocean")
|
||||
|
||||
var last_position = Vector3()
|
||||
|
||||
var floater_count = 0
|
||||
|
||||
export var water_drag = 0.77
|
||||
export var water_angular_drag = 0.2
|
||||
|
||||
export var enabled = true
|
||||
|
||||
# Called when the node enters the scene tree for the first time.
|
||||
func _ready():
|
||||
var parent_weight = get_parent().weight
|
||||
# How many floater children does the parent have?
|
||||
for c in get_parent().get_children():
|
||||
if c.get_script() == get_script():
|
||||
floater_count += 1
|
||||
|
||||
func get_position():
|
||||
return get_global_transform().origin
|
||||
|
||||
func _physics_process(delta):
|
||||
if not enabled:
|
||||
return
|
||||
|
||||
# It had to be a world coord offset.... not just relative to the parent...
|
||||
# reeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee
|
||||
var world_coord_offset = get_position() - get_parent().translation
|
||||
|
||||
# Gravity
|
||||
get_parent().add_force(Vector3.DOWN * 9.8, world_coord_offset)
|
||||
|
||||
var wave = ocean.get_wave(get_position().x, get_position().z)
|
||||
var wave_height = wave.y / 2.0
|
||||
var height = get_position().y
|
||||
|
||||
if height < wave_height:
|
||||
var buoyancy = clamp((wave_height - height) / depth_before_submerged, 0, 1) * 2
|
||||
get_parent().add_force(Vector3(0, 9.8 * buoyancy, 0), world_coord_offset)
|
||||
get_parent().add_central_force(buoyancy * -get_parent().linear_velocity * water_drag)
|
||||
get_parent().add_torque(buoyancy * -get_parent().angular_velocity * water_angular_drag)
|
||||
if $Marker: $Marker.translation.y = wave_height
|
||||
19
buoyancy/ocean/Floater.tscn
Normal file
19
buoyancy/ocean/Floater.tscn
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
[gd_scene load_steps=4 format=2]
|
||||
|
||||
[ext_resource path="res://buoyancy/ocean/Floater.gd" type="Script" id=1]
|
||||
|
||||
[sub_resource type="SpatialMaterial" id=1]
|
||||
albedo_color = Color( 0.235294, 1, 0.0509804, 1 )
|
||||
|
||||
[sub_resource type="SphereMesh" id=2]
|
||||
material = SubResource( 1 )
|
||||
radius = 0.5
|
||||
height = 1.0
|
||||
|
||||
[node name="Floater" type="Spatial"]
|
||||
script = ExtResource( 1 )
|
||||
|
||||
[node name="Marker" type="MeshInstance" parent="."]
|
||||
visible = false
|
||||
mesh = SubResource( 2 )
|
||||
material/0 = null
|
||||
76
buoyancy/ocean/Ground.gd
Normal file
76
buoyancy/ocean/Ground.gd
Normal file
|
|
@ -0,0 +1,76 @@
|
|||
extends StaticBody
|
||||
tool
|
||||
|
||||
onready var mesh_instance = $MeshInstance
|
||||
|
||||
export(OpenSimplexNoise) var noise = OpenSimplexNoise.new() setget set_noise
|
||||
export var amplitude = 10 setget set_amplitude
|
||||
export var radius = 100 setget set_radius
|
||||
|
||||
# Called when the node enters the scene tree for the first time.
|
||||
func _ready():
|
||||
refresh_mesh()
|
||||
if not Engine.editor_hint: mesh_instance.create_trimesh_collision()
|
||||
|
||||
func refresh_mesh():
|
||||
if not Engine.editor_hint and not mesh_instance:
|
||||
return
|
||||
var mesh = ArrayMesh.new()
|
||||
var plane = PlaneMesh.new()
|
||||
plane.subdivide_width = 400
|
||||
plane.subdivide_depth = 400
|
||||
plane.size = Vector2(400, 400)
|
||||
mesh.add_surface_from_arrays(Mesh.PRIMITIVE_TRIANGLES, plane.get_mesh_arrays())
|
||||
var mdt = MeshDataTool.new()
|
||||
mdt.create_from_surface(mesh, 0)
|
||||
for i in range(mdt.get_vertex_count()):
|
||||
var vertex = mdt.get_vertex(i)
|
||||
var height = noise.get_noise_2d(vertex.x, vertex.z) * amplitude
|
||||
# Outside radius we ramp down
|
||||
var r2_max = radius*radius
|
||||
var r2 = vertex.x * vertex.x + vertex.z * vertex.z
|
||||
if r2 > r2_max:
|
||||
var drop_off_dist = 16000
|
||||
var delta_h = clamp(r2-r2_max, 0, drop_off_dist)/drop_off_dist*amplitude
|
||||
height -= delta_h
|
||||
vertex.y += height
|
||||
mdt.set_vertex(i, vertex)
|
||||
# Calculate vertex normals, face-by-face.
|
||||
for i in range(mdt.get_face_count()):
|
||||
# Get the index in the vertex array.
|
||||
var a = mdt.get_face_vertex(i, 0)
|
||||
var b = mdt.get_face_vertex(i, 1)
|
||||
var c = mdt.get_face_vertex(i, 2)
|
||||
# Get vertex position using vertex index.
|
||||
var ap = mdt.get_vertex(a)
|
||||
var bp = mdt.get_vertex(b)
|
||||
var cp = mdt.get_vertex(c)
|
||||
# Calculate face normal.
|
||||
var n = (bp - cp).cross(ap - bp).normalized()
|
||||
# Add face normal to current vertex normal.
|
||||
# This will not result in perfect normals, but it will be close.
|
||||
mdt.set_vertex_normal(a, n + mdt.get_vertex_normal(a))
|
||||
mdt.set_vertex_normal(b, n + mdt.get_vertex_normal(b))
|
||||
mdt.set_vertex_normal(c, n + mdt.get_vertex_normal(c))
|
||||
|
||||
# Run through vertices one last time to normalize normals and
|
||||
# set color to normal.
|
||||
for i in range(mdt.get_vertex_count()):
|
||||
var v = mdt.get_vertex_normal(i).normalized()
|
||||
mdt.set_vertex_normal(i, v)
|
||||
|
||||
mesh.surface_remove(0)
|
||||
mdt.commit_to_surface(mesh)
|
||||
mesh_instance.mesh = mesh
|
||||
|
||||
func set_noise(n):
|
||||
noise = n
|
||||
if Engine.editor_hint: refresh_mesh()
|
||||
|
||||
func set_amplitude(a):
|
||||
amplitude = a
|
||||
if Engine.editor_hint: refresh_mesh()
|
||||
|
||||
func set_radius(r):
|
||||
radius = r
|
||||
if Engine.editor_hint: refresh_mesh()
|
||||
112
buoyancy/ocean/Ocean.gd
Normal file
112
buoyancy/ocean/Ocean.gd
Normal file
|
|
@ -0,0 +1,112 @@
|
|||
extends Spatial
|
||||
tool
|
||||
|
||||
var SBRtscn = load("res://buoyancy/SoundBuoyRand.tscn")
|
||||
|
||||
var time = 0
|
||||
|
||||
export var wave_a = Vector3(0.7, 1.0, 10.0) setget set_wave_a
|
||||
export var wave_a_dir = Vector2(1.0, 0) setget set_wave_a_dir
|
||||
|
||||
export var wave_b = Vector3(0.4, 0.4, 16.0) setget set_wave_b
|
||||
export var wave_b_dir = Vector2(1.0, 1.0) setget set_wave_b_dir
|
||||
|
||||
export var wave_c = Vector3(0.8, 0.4, 9) setget set_wave_c
|
||||
export var wave_c_dir = Vector2(1.0, 0.5) setget set_wave_c_dir
|
||||
|
||||
onready var water_scene = preload("res://buoyancy/ocean/Water.tscn")
|
||||
onready var water_resource = preload("res://buoyancy/ocean/Water.tres")
|
||||
var water_material
|
||||
|
||||
var water_tiles = {}
|
||||
const water_tile_width = 20
|
||||
|
||||
onready var player = $Player
|
||||
|
||||
# Called when the node enters the scene tree for the first time.
|
||||
func _ready():
|
||||
for i in range(-10, 10):
|
||||
for j in range(-10, 10):
|
||||
var water = water_scene.instance()
|
||||
var pos = Vector2(i*water_tile_width, j*water_tile_width)
|
||||
add_child(water)
|
||||
water.translation.x = pos.x
|
||||
water.translation.z = pos.y
|
||||
water_tiles[pos] = water
|
||||
water.set_surface_material(0, water_resource)
|
||||
|
||||
randomize()
|
||||
for i in range(12):
|
||||
var SBR = SBRtscn.instance()
|
||||
# rstone.set_param(preset_grps[0][randi()%4])
|
||||
# rstone.set_color(preset_colors[0])
|
||||
SBR.set_preset(i)
|
||||
SBR.audible_range_max = 20
|
||||
add_child(SBR)
|
||||
SBR.look_at_from_position(Vector3(rand_range(0, 100), -0.7, rand_range(-30, 30)), Vector3.ZERO, Vector3.UP)
|
||||
|
||||
|
||||
# Called every frame. 'delta' is the elapsed time since the previous frame.
|
||||
func _process(delta):
|
||||
time += delta
|
||||
if water_resource: water_resource.set_shader_param("time", time)
|
||||
|
||||
func _input(event):
|
||||
pass
|
||||
|
||||
func dot(a, b):
|
||||
return (a.x * b.x) + (a.y * b.y)
|
||||
|
||||
func P(wave: Vector3, wave_dir: Vector2, p: Vector2, t):
|
||||
var amplitude = wave.x
|
||||
var steepness = wave.y
|
||||
var wavelength = wave.z
|
||||
var k = 2.0 * PI / wavelength
|
||||
var c = sqrt(9.8 / k)
|
||||
var d = wave_dir.normalized()
|
||||
var f = k * (dot(d, p) - (c * t))
|
||||
var a = steepness / k
|
||||
|
||||
var dx = d.x * a * cos(f)
|
||||
var dy = amplitude * a * sin(f)
|
||||
var dz = d.y * a * cos(f)
|
||||
|
||||
return Vector3(dx, dy, dz)
|
||||
|
||||
func _get_wave(x, z):
|
||||
var v = Vector3(x, 0, z)
|
||||
v += P(wave_a, wave_a_dir, Vector2(x, z), time)
|
||||
v += P(wave_b, wave_b_dir, Vector2(x, z), time)
|
||||
v += P(wave_c, wave_c_dir, Vector2(x, z), time)
|
||||
return v
|
||||
|
||||
func get_wave(x, z):
|
||||
var v0 = _get_wave(x, z)
|
||||
var offset = Vector2(x - v0.x, z - v0.z)
|
||||
var v1 = _get_wave(x+offset.x/4.0, z+offset.y/4.0)
|
||||
|
||||
return v1
|
||||
|
||||
func set_wave_a(a):
|
||||
wave_a = a
|
||||
if water_resource: water_resource.set_shader_param("wave_a", a)
|
||||
|
||||
func set_wave_a_dir(a):
|
||||
wave_a_dir = a
|
||||
if water_resource: water_resource.set_shader_param("wave_a_dir", a)
|
||||
|
||||
func set_wave_b(b):
|
||||
wave_b = b
|
||||
if water_resource: water_resource.set_shader_param("wave_b", b)
|
||||
|
||||
func set_wave_b_dir(b):
|
||||
wave_b_dir = b
|
||||
if water_resource: water_resource.set_shader_param("wave_b_dir", b)
|
||||
|
||||
func set_wave_c(c):
|
||||
wave_c = c
|
||||
if water_resource: water_resource.set_shader_param("wave_c", c)
|
||||
|
||||
func set_wave_c_dir(c):
|
||||
wave_c_dir = c
|
||||
if water_resource: water_resource.set_shader_param("wave_c_dir", c)
|
||||
105
buoyancy/ocean/Ocean.shader
Normal file
105
buoyancy/ocean/Ocean.shader
Normal file
|
|
@ -0,0 +1,105 @@
|
|||
shader_type spatial;
|
||||
render_mode depth_draw_always, specular_phong, diffuse_burley, cull_disabled;
|
||||
|
||||
uniform vec4 water_colour: hint_color;
|
||||
uniform vec4 deep_water_colour : hint_color;
|
||||
|
||||
// amplitude, steepness, wavelength
|
||||
uniform vec3 wave_a = vec3(1.0, 1.0, 10.0);
|
||||
uniform vec2 wave_a_dir = vec2(1.0, 0.0);
|
||||
|
||||
uniform vec3 wave_b = vec3(1.0, 0.25, 20.0);
|
||||
uniform vec2 wave_b_dir = vec2(1.0, 1.0);
|
||||
|
||||
uniform vec3 wave_c = vec3(1.0, 0.15, 1.0);
|
||||
uniform vec2 wave_c_dir = vec2(1.0, 0.5);
|
||||
|
||||
uniform sampler2D noise;
|
||||
|
||||
uniform float foam_level = 0.4;
|
||||
|
||||
uniform float time;
|
||||
|
||||
const float PI = 3.14159265358979323;
|
||||
varying mat4 CAMERA;
|
||||
varying float wave_height;
|
||||
|
||||
void fragment() {
|
||||
float depthRaw = texture(DEPTH_TEXTURE, SCREEN_UV).r * 2.0 - 1.0;
|
||||
float water_depth = PROJECTION_MATRIX[3][2] / (depthRaw + PROJECTION_MATRIX[2][2]);
|
||||
|
||||
// Normalmaps
|
||||
vec2 direction = vec2(-1.0, 0.0);
|
||||
NORMALMAP = texture(noise, UV + direction * TIME * 0.05).xyz;
|
||||
NORMALMAP_DEPTH = 0.5;
|
||||
|
||||
// Refraction
|
||||
vec2 offset = vec2(0.0);
|
||||
// if (water_depth - VERTEX.z > 0.0) {
|
||||
// offset = mix(NORMALMAP.xy - vec2(0.5), NORMAL.xz/10.0, 0.3);
|
||||
// }
|
||||
|
||||
vec4 bg = texture(SCREEN_TEXTURE, SCREEN_UV + (offset * 0.2));
|
||||
float foam_ammount = clamp((foam_level - water_depth - VERTEX.z) / foam_level, 0.0, 1.0);
|
||||
vec4 colour = mix(water_colour, deep_water_colour, 1.0-clamp((wave_height)/1.0, 0, 1));
|
||||
colour = mix(colour, vec4(1.0), foam_ammount);
|
||||
|
||||
float fog_factor = exp(-0.2 * water_depth/20.0);
|
||||
|
||||
// Set everything
|
||||
EMISSION = mix(colour, bg, fog_factor).xyz * (1.0 - colour.a);
|
||||
ALBEDO = colour.xyz;
|
||||
ALPHA = 1.0;
|
||||
SPECULAR = 0.4;
|
||||
ROUGHNESS = 0.05;
|
||||
}
|
||||
|
||||
vec3 gerstnerWave(vec3 wave, vec2 wave_dir, vec3 p, inout vec3 tangent, inout vec3 binormal, float t) {
|
||||
float amplitude = wave.x;
|
||||
float steepness = wave.y;
|
||||
float wavelength = wave.z;
|
||||
|
||||
float k = 2.0 * PI / wavelength;
|
||||
float c = sqrt(9.8 / k); // phase speed
|
||||
vec2 d = normalize(wave_dir);
|
||||
float f = k * (dot(d, p.xz) - (c * t));
|
||||
float a = steepness / k;
|
||||
|
||||
tangent += normalize(vec3(
|
||||
1.0 - d.x * d.x * steepness * sin(f),
|
||||
d.x * steepness * cos(f),
|
||||
-d.x * d.y * (steepness * sin(f))
|
||||
));
|
||||
binormal += normalize(vec3(
|
||||
-d.x * d.y * (steepness * sin(f)),
|
||||
d.y * steepness * cos(f),
|
||||
1.0 - (d.y * d.y * steepness * sin(f))
|
||||
));
|
||||
|
||||
return vec3(
|
||||
d.x * (a * cos(f)),
|
||||
amplitude * a * sin(f),
|
||||
d.y * (a * cos(f))
|
||||
);
|
||||
}
|
||||
|
||||
void vertex() {
|
||||
vec3 original_p = (WORLD_MATRIX * vec4(VERTEX.xyz, 1.0)).xyz;
|
||||
vec3 p = VERTEX.xyz;
|
||||
vec3 tangent = vec3(1.0, 0.0, 0.0);
|
||||
vec3 binormal = vec3(0.0, 0.0, 1.0);
|
||||
|
||||
p += gerstnerWave(wave_a, wave_a_dir, original_p, tangent, binormal, time);
|
||||
p += gerstnerWave(wave_b, wave_b_dir, original_p, tangent, binormal, time);
|
||||
p += gerstnerWave(wave_c, wave_c_dir, original_p, tangent, binormal, time);
|
||||
|
||||
vec3 normal = normalize(cross(binormal, tangent));
|
||||
|
||||
VERTEX = p;
|
||||
TANGENT = tangent;
|
||||
BINORMAL = binormal;
|
||||
NORMAL = normal;
|
||||
|
||||
CAMERA = CAMERA_MATRIX;
|
||||
wave_height = p.y;
|
||||
}
|
||||
590
buoyancy/ocean/Ocean.tscn
Normal file
590
buoyancy/ocean/Ocean.tscn
Normal file
File diff suppressed because one or more lines are too long
75
buoyancy/ocean/SoundBouy1.gd
Normal file
75
buoyancy/ocean/SoundBouy1.gd
Normal file
|
|
@ -0,0 +1,75 @@
|
|||
extends RigidBody
|
||||
|
||||
export (String, MULTILINE) var patch = ""
|
||||
export (float, 0, 100) var audible_range_max = 10.0
|
||||
export (float, 1, 12) var preset = 1
|
||||
|
||||
var _my_patch = "res://buoyancy/SoundBuoyFloating.pd"
|
||||
var _my_id = 0
|
||||
|
||||
func set_param(param):
|
||||
Global._gdpd.start_message(param.size()+1)
|
||||
Global._gdpd.add_symbol("param")
|
||||
for i in range(param.size()):
|
||||
Global._gdpd.add_float(param[i])
|
||||
Global._gdpd.finish_list("fromGodot" + String(_my_id))
|
||||
|
||||
func set_preset(prs):
|
||||
preset = prs
|
||||
Global._gdpd.start_message(2)
|
||||
Global._gdpd.add_symbol("preset")
|
||||
Global._gdpd.add_float(prs)
|
||||
Global._gdpd.finish_list("fromGodot" + String(_my_id))
|
||||
|
||||
func _ready():
|
||||
# # save patch
|
||||
# # prepare directory
|
||||
# var patch_name = _my_patch.split("/")[-1]
|
||||
# var patch_dir = _my_patch.trim_suffix(patch_name)
|
||||
# var dir = Directory.new()
|
||||
# dir.make_dir_recursive(patch_dir)
|
||||
# # save to file
|
||||
# var file = File.new()
|
||||
# file.open(_my_patch, File.WRITE)
|
||||
# file.store_string(patch)
|
||||
# file.close()
|
||||
# load patch
|
||||
_my_id = Global.load_patch(ProjectSettings.globalize_path(_my_patch))
|
||||
|
||||
# send a 'individual' bang.
|
||||
Global._gdpd.start_message(1)
|
||||
Global._gdpd.add_symbol('bang') # there's no 'add_bang', only 'add_symbol' => add_symbol('bang') is a pseudo-bang
|
||||
Global._gdpd.finish_list("fromGodot" + String(_my_id)) # send msg. individually ($0)
|
||||
|
||||
# listen 'player_transform_updated' event
|
||||
Events.connect("player_transform_updated", self, "_on_Events_player_transform_updated")
|
||||
|
||||
# send 'preset'
|
||||
set_preset(preset)
|
||||
|
||||
|
||||
func _on_Events_player_transform_updated(playerpos, playerheading):
|
||||
var mypos = get_global_translation()
|
||||
var mypos2d = Vector2(mypos.x, mypos.z)
|
||||
var playerpos2d = Vector2(playerpos.x, playerpos.z)
|
||||
# calculate distance
|
||||
var distance = mypos.distance_to(playerpos)
|
||||
# calculate angle
|
||||
var angle = fmod(fmod(playerpos2d.angle_to_point(mypos2d) + playerheading - PI/2, PI*2) + PI*2, PI*2)
|
||||
if angle > PI:
|
||||
angle = angle - PI*2
|
||||
# (check)
|
||||
# print(str(_my_id) +" : ("+ str(distance) +","+ str(angle) +")")
|
||||
# calculate gain
|
||||
var gain = max(1 - distance/audible_range_max, 0)
|
||||
# send to the patch
|
||||
Global._gdpd.start_message(3)
|
||||
Global._gdpd.add_symbol("panvol")
|
||||
Global._gdpd.add_float(gain)
|
||||
Global._gdpd.add_float(angle)
|
||||
Global._gdpd.finish_list("fromGodot" + String(_my_id))
|
||||
|
||||
|
||||
func _exit_tree():
|
||||
Global.close_patch(_my_id)
|
||||
pass
|
||||
24
buoyancy/ocean/Water.tres
Normal file
24
buoyancy/ocean/Water.tres
Normal file
|
|
@ -0,0 +1,24 @@
|
|||
[gd_resource type="ShaderMaterial" load_steps=4 format=2]
|
||||
|
||||
[ext_resource path="res://buoyancy/ocean/Ocean.shader" type="Shader" id=1]
|
||||
|
||||
[sub_resource type="OpenSimplexNoise" id=1]
|
||||
|
||||
[sub_resource type="NoiseTexture" id=2]
|
||||
seamless = true
|
||||
as_normalmap = true
|
||||
noise = SubResource( 1 )
|
||||
|
||||
[resource]
|
||||
shader = ExtResource( 1 )
|
||||
shader_param/water_colour = Color( 0.611765, 0.823529, 0.890196, 0.0980392 )
|
||||
shader_param/deep_water_colour = Color( 0.521569, 0.117647, 0.647059, 0.45098 )
|
||||
shader_param/wave_a = Vector3( 0.189, 0.477, 33 )
|
||||
shader_param/wave_a_dir = Vector2( 1, 0 )
|
||||
shader_param/wave_b = Vector3( 0.885, 0.25, 20 )
|
||||
shader_param/wave_b_dir = Vector2( 1, 1 )
|
||||
shader_param/wave_c = Vector3( 1, 0.15, 14 )
|
||||
shader_param/wave_c_dir = Vector2( 1, 0.5 )
|
||||
shader_param/foam_level = 0.4
|
||||
shader_param/time = 116.641
|
||||
shader_param/noise = SubResource( 2 )
|
||||
9
buoyancy/ocean/Water.tscn
Normal file
9
buoyancy/ocean/Water.tscn
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
[gd_scene load_steps=2 format=2]
|
||||
|
||||
[sub_resource type="PlaneMesh" id=1]
|
||||
size = Vector2( 20, 20 )
|
||||
subdivide_width = 20
|
||||
subdivide_depth = 20
|
||||
|
||||
[node name="Water" type="MeshInstance"]
|
||||
mesh = SubResource( 1 )
|
||||
83
buoyancy/project.godot.off
Normal file
83
buoyancy/project.godot.off
Normal file
|
|
@ -0,0 +1,83 @@
|
|||
; Engine configuration file.
|
||||
; It's best edited using the editor UI and not directly,
|
||||
; since the parameters that go here are not all obvious.
|
||||
;
|
||||
; Format:
|
||||
; [section] ; section goes between []
|
||||
; param=value ; assign values to parameters
|
||||
|
||||
config_version=4
|
||||
|
||||
_global_script_classes=[ {
|
||||
"base": "Spatial",
|
||||
"class": "Floater",
|
||||
"language": "GDScript",
|
||||
"path": "res://buoyancy/ocean/Floater.gd"
|
||||
} ]
|
||||
_global_script_class_icons={
|
||||
"Floater": ""
|
||||
}
|
||||
|
||||
[application]
|
||||
|
||||
config/name="Buoyancy and Waves"
|
||||
run/main_scene="res://buoyancy/ocean/Ocean.tscn"
|
||||
config/icon="res://buoyancy/icon.png"
|
||||
|
||||
[autoload]
|
||||
|
||||
Global="*res://buoyancy/autoload/Global.tscn"
|
||||
Events="*res://buoyancy/autoload/Events.tscn"
|
||||
|
||||
[input]
|
||||
|
||||
forward={
|
||||
"deadzone": 0.5,
|
||||
"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":87,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
|
||||
]
|
||||
}
|
||||
left={
|
||||
"deadzone": 0.5,
|
||||
"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":65,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
|
||||
]
|
||||
}
|
||||
right={
|
||||
"deadzone": 0.5,
|
||||
"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":68,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
|
||||
]
|
||||
}
|
||||
backward={
|
||||
"deadzone": 0.5,
|
||||
"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":83,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
|
||||
]
|
||||
}
|
||||
pause={
|
||||
"deadzone": 0.5,
|
||||
"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777217,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
|
||||
]
|
||||
}
|
||||
jump={
|
||||
"deadzone": 0.5,
|
||||
"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":32,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
|
||||
]
|
||||
}
|
||||
sprint={
|
||||
"deadzone": 0.5,
|
||||
"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777237,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
|
||||
]
|
||||
}
|
||||
interact={
|
||||
"deadzone": 0.5,
|
||||
"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":69,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
|
||||
]
|
||||
}
|
||||
|
||||
[physics]
|
||||
|
||||
common/physics_fps=144
|
||||
common/physics_jitter_fix=0.191
|
||||
common/enable_pause_aware_picking=true
|
||||
|
||||
[rendering]
|
||||
|
||||
environment/default_environment="res://buoyancy/default_env.tres"
|
||||
79
cosmic/Player.gd
Normal file
79
cosmic/Player.gd
Normal file
|
|
@ -0,0 +1,79 @@
|
|||
extends KinematicBody
|
||||
|
||||
var camera_angle = 0
|
||||
var mouse_sensitivity = 0.3
|
||||
var camera_change = Vector2()
|
||||
|
||||
var velocity = Vector3()
|
||||
var direction = Vector3()
|
||||
|
||||
#fly variables
|
||||
#const FLY_SPEED = 20
|
||||
#const FLY_ACCEL = 4
|
||||
const FLY_SPEED = 8
|
||||
const FLY_ACCEL = 4
|
||||
|
||||
var mouse_captured = true
|
||||
|
||||
func _ready():
|
||||
Input.set_mouse_mode(Input.MOUSE_MODE_CAPTURED)
|
||||
|
||||
func _physics_process(delta):
|
||||
|
||||
if mouse_captured:
|
||||
aim()
|
||||
fly(delta)
|
||||
|
||||
if Input.is_action_just_pressed('toggle_mouse'):
|
||||
if mouse_captured:
|
||||
mouse_captured = false
|
||||
Input.set_mouse_mode(Input.MOUSE_MODE_VISIBLE)
|
||||
else:
|
||||
mouse_captured = true
|
||||
Input.set_mouse_mode(Input.MOUSE_MODE_CAPTURED)
|
||||
|
||||
# emit signal - playerinfo_updated
|
||||
Events.emit_signal("player_transform_updated", $Head/Camera.get_global_translation(), $Head.global_rotation.y)
|
||||
|
||||
|
||||
func _input(event):
|
||||
if event is InputEventMouseMotion:
|
||||
camera_change = event.relative
|
||||
|
||||
func fly(delta):
|
||||
# reset the direction of the player
|
||||
direction = Vector3()
|
||||
|
||||
# get the rotation of the camera
|
||||
var aim = $Head/Camera.get_global_transform().basis
|
||||
|
||||
# check input and change direction
|
||||
if Input.is_action_pressed("move_forward"):
|
||||
direction -= aim.z
|
||||
if Input.is_action_pressed("move_backward"):
|
||||
direction += aim.z
|
||||
if Input.is_action_pressed("move_left"):
|
||||
direction -= aim.x
|
||||
if Input.is_action_pressed("move_right"):
|
||||
direction += aim.x
|
||||
|
||||
direction = direction.normalized()
|
||||
|
||||
# where would the player go at max speed
|
||||
var target = direction * FLY_SPEED
|
||||
|
||||
# calculate a portion of the distance to go
|
||||
velocity = velocity.linear_interpolate(target, FLY_ACCEL * delta)
|
||||
|
||||
# move
|
||||
move_and_slide(velocity)
|
||||
|
||||
func aim():
|
||||
if camera_change.length() > 0:
|
||||
$Head.rotate_y(deg2rad(-camera_change.x * mouse_sensitivity))
|
||||
|
||||
var change = -camera_change.y * mouse_sensitivity
|
||||
if change + camera_angle < 90 and change + camera_angle > -90:
|
||||
$Head/Camera.rotate_x(deg2rad(change))
|
||||
camera_angle += change
|
||||
camera_change = Vector2()
|
||||
23
cosmic/Player.tscn
Normal file
23
cosmic/Player.tscn
Normal file
|
|
@ -0,0 +1,23 @@
|
|||
[gd_scene load_steps=3 format=2]
|
||||
|
||||
[ext_resource path="res://cosmic/Player.gd" type="Script" id=1]
|
||||
|
||||
[sub_resource type="CapsuleShape" id=1]
|
||||
radius = 0.6
|
||||
height = 2.0
|
||||
|
||||
[node name="Player" type="KinematicBody"]
|
||||
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 3.52113, 0.98772 )
|
||||
collision_layer = 2
|
||||
script = ExtResource( 1 )
|
||||
|
||||
[node name="Capsule" type="CollisionShape" parent="."]
|
||||
transform = Transform( 1, 0, 0, 0, -4.37114e-08, -1, 0, 1, -4.37114e-08, 0, 0, 0 )
|
||||
shape = SubResource( 1 )
|
||||
|
||||
[node name="Head" type="Spatial" parent="."]
|
||||
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.5, 0 )
|
||||
|
||||
[node name="Camera" type="Camera" parent="Head"]
|
||||
current = true
|
||||
far = 10000.0
|
||||
61
cosmic/Region.gd
Normal file
61
cosmic/Region.gd
Normal file
|
|
@ -0,0 +1,61 @@
|
|||
extends Spatial
|
||||
|
||||
var sub = load("res://cosmic/osc.tscn")
|
||||
|
||||
var _rot_speed_origin
|
||||
|
||||
var gain1 = 40 # for $main
|
||||
var range1 = 80 # for $main
|
||||
|
||||
var gain2 = 0.1 # for osc
|
||||
var range2 = 20 # for osc
|
||||
|
||||
var ratio = 0.4
|
||||
|
||||
func _ready():
|
||||
# 'main' at center.
|
||||
$main.set_size(rand_range(10, 15))
|
||||
$main.audible_range_max = range1
|
||||
$main.set_freq(rand_range(100, 300))
|
||||
$main.set_gain(gain1)
|
||||
|
||||
# listen 'player_transform_updated' event
|
||||
Events.connect("player_transform_updated", self, "_on_Events_player_transform_updated")
|
||||
|
||||
#
|
||||
_rot_speed_origin = $main._rot_speed
|
||||
|
||||
func _spawn(nsatellites, yrange):
|
||||
# many 'sub' surrounds 'main' like satellites
|
||||
for i in range(nsatellites):
|
||||
var s = sub.instance()
|
||||
$main.add_child(s)
|
||||
s.set_size(rand_range(0.2, 1.2))
|
||||
s.set_color(Color.black)
|
||||
var d = polar2cartesian(rand_range(20, 54), rand_range(0, 2*PI))
|
||||
s.translate(Vector3(d.x, rand_range(yrange[0], yrange[1]), d.y))
|
||||
s.audible_range_max = range2
|
||||
s.set_freq(rand_range(200, 2000))
|
||||
s.set_gain(gain2)
|
||||
|
||||
func _on_Events_player_transform_updated(playerpos, playerheading):
|
||||
var mypos = $main.get_global_translation()
|
||||
var mypos2d = Vector2(mypos.x, mypos.z)
|
||||
var playerpos2d = Vector2(playerpos.x, playerpos.z)
|
||||
# calculate distance
|
||||
var distance = mypos.distance_to(playerpos)
|
||||
if distance < $main/CollisionShape.shape.radius:
|
||||
$main._rot_speed = _rot_speed_origin * pow(distance/$main/CollisionShape.shape.radius, 2)
|
||||
for c in $main.get_children():
|
||||
if c.is_in_group('sounders'):
|
||||
c.audible_range_max = range2 * pow($main/CollisionShape.shape.radius/(distance + 0.1), 2)
|
||||
c.set_gain(gain2 * pow(distance/$main/CollisionShape.shape.radius, 2))
|
||||
$main.set_gain(gain1 * pow(distance/$main/CollisionShape.shape.radius, ratio))
|
||||
else:
|
||||
$main._rot_speed = _rot_speed_origin
|
||||
for c in $main.get_children():
|
||||
if c.is_in_group('sounders'):
|
||||
c.audible_range_max = range2
|
||||
c.set_gain(gain2)
|
||||
$main.set_gain(gain1)
|
||||
|
||||
9
cosmic/Region.tscn
Normal file
9
cosmic/Region.tscn
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
[gd_scene load_steps=3 format=2]
|
||||
|
||||
[ext_resource path="res://cosmic/Region.gd" type="Script" id=1]
|
||||
[ext_resource path="res://cosmic/main.tscn" type="PackedScene" id=2]
|
||||
|
||||
[node name="Region" type="Spatial" groups=["regions"]]
|
||||
script = ExtResource( 1 )
|
||||
|
||||
[node name="main" parent="." instance=ExtResource( 2 )]
|
||||
31
cosmic/Scene.gd
Normal file
31
cosmic/Scene.gd
Normal file
|
|
@ -0,0 +1,31 @@
|
|||
extends Node
|
||||
|
||||
func _ready():
|
||||
for r in get_tree().get_nodes_in_group('regions'):
|
||||
r.get_node('main')._rot_speed = r._rot_speed_origin
|
||||
r.get_node('main/center').material_override = SpatialMaterial.new()
|
||||
r.get_node('main/center').material_override.albedo_color = Color.from_hsv((randi() % 12) / 12.0, 1, 1)
|
||||
|
||||
$Region._rot_speed_origin = rand_range(0.002, 0.005)
|
||||
$Region.ratio = 3
|
||||
$Region/main.audible_range_max = 30
|
||||
$Region._spawn(18, [-2, 2])
|
||||
for c in $Region/main.get_children():
|
||||
if c.is_in_group('sounders'):
|
||||
c.set_freq(rand_range(20, 200))
|
||||
|
||||
$Region3._rot_speed_origin = rand_range(-0.01, -0.1)
|
||||
$Region3._spawn(18, [-2, 2])
|
||||
for c in $Region3/main.get_children():
|
||||
if c.is_in_group('sounders'):
|
||||
c.set_freq(rand_range(200, 2000))
|
||||
|
||||
$Region2._rot_speed_origin = rand_range(0.01, 0.1)
|
||||
$Region2._spawn(150, [-20, 20])
|
||||
for c in $Region2/main.get_children():
|
||||
if c.is_in_group('sounders'):
|
||||
c.set_freq(rand_range(2000, 20000))
|
||||
$Region2.gain1 = 5
|
||||
$Region2.gain2 = 0.01
|
||||
$Region2.ratio = 3
|
||||
# $Region2/main.set_freq(rand_range(20, 80))
|
||||
45
cosmic/Scene.tscn
Normal file
45
cosmic/Scene.tscn
Normal file
|
|
@ -0,0 +1,45 @@
|
|||
[gd_scene load_steps=7 format=2]
|
||||
|
||||
[ext_resource path="res://cosmic/Region.tscn" type="PackedScene" id=1]
|
||||
[ext_resource path="res://cosmic/Player.tscn" type="PackedScene" id=2]
|
||||
[ext_resource path="res://cosmic/Scene.gd" type="Script" id=3]
|
||||
|
||||
[sub_resource type="BoxShape" id=1]
|
||||
extents = Vector3( 300, 1, 300 )
|
||||
|
||||
[sub_resource type="CubeMesh" id=2]
|
||||
size = Vector3( 600, 2, 600 )
|
||||
|
||||
[sub_resource type="Environment" id=3]
|
||||
fog_enabled = true
|
||||
|
||||
[node name="Scene" type="Node"]
|
||||
script = ExtResource( 3 )
|
||||
|
||||
[node name="StaticBody" type="StaticBody" parent="."]
|
||||
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -1, 0 )
|
||||
|
||||
[node name="CollisionShape" type="CollisionShape" parent="StaticBody"]
|
||||
shape = SubResource( 1 )
|
||||
|
||||
[node name="MeshInstance" type="MeshInstance" parent="StaticBody"]
|
||||
mesh = SubResource( 2 )
|
||||
|
||||
[node name="DirectionalLight" type="DirectionalLight" parent="."]
|
||||
transform = Transform( 1, 0, 0, 0, 0.158589, 0.987345, 0, -0.987345, 0.158589, 0, 57.3999, 0 )
|
||||
shadow_enabled = true
|
||||
|
||||
[node name="Player" parent="." instance=ExtResource( 2 )]
|
||||
transform = Transform( -1, 0, 5.96046e-08, 0, 1, 0, -5.96046e-08, 0, -1, -46.6135, 49.5715, -99.5295 )
|
||||
|
||||
[node name="WorldEnvironment" type="WorldEnvironment" parent="."]
|
||||
environment = SubResource( 3 )
|
||||
|
||||
[node name="Region" parent="." instance=ExtResource( 1 )]
|
||||
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 30, 0 )
|
||||
|
||||
[node name="Region2" parent="." instance=ExtResource( 1 )]
|
||||
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -115.897, 63.8199, 95.9651 )
|
||||
|
||||
[node name="Region3" parent="." instance=ExtResource( 1 )]
|
||||
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 67.7793, 64.9703, -27.1477 )
|
||||
104
cosmic/main.gd
Normal file
104
cosmic/main.gd
Normal file
|
|
@ -0,0 +1,104 @@
|
|||
extends RigidBody
|
||||
|
||||
export (float, 0, 100) var audible_range_max = 10.0
|
||||
export (int, 1, 12) var preset = 1
|
||||
|
||||
export (bool) var use_embeded_patch = false
|
||||
export (String, MULTILINE) var patch = ""
|
||||
|
||||
var _my_patch = "user://cosmic/main.pd"
|
||||
var _my_id = 0
|
||||
|
||||
var _rot_speed = 0.1
|
||||
|
||||
func set_size(size):
|
||||
$CollisionShape.shape.radius = size
|
||||
$MeshInstance.mesh.radius = size
|
||||
$MeshInstance.mesh.height = size * 2
|
||||
|
||||
func set_freq(freq):
|
||||
Global._gdpd.start_message(2)
|
||||
Global._gdpd.add_symbol('freq')
|
||||
Global._gdpd.add_float(freq)
|
||||
Global._gdpd.finish_list("fromGodot" + String(_my_id))
|
||||
|
||||
func set_gain(gain):
|
||||
Global._gdpd.start_message(2)
|
||||
Global._gdpd.add_symbol('gain')
|
||||
Global._gdpd.add_float(gain)
|
||||
Global._gdpd.finish_list("fromGodot" + String(_my_id))
|
||||
|
||||
func set_param(param):
|
||||
Global._gdpd.start_message(param.size()+1)
|
||||
Global._gdpd.add_symbol("param")
|
||||
for i in range(param.size()):
|
||||
Global._gdpd.add_float(param[i])
|
||||
Global._gdpd.finish_list("fromGodot" + String(_my_id))
|
||||
|
||||
func set_preset(prs):
|
||||
preset = prs
|
||||
Global._gdpd.start_message(2)
|
||||
Global._gdpd.add_symbol("preset")
|
||||
Global._gdpd.add_float(prs)
|
||||
Global._gdpd.finish_list("fromGodot" + String(_my_id))
|
||||
|
||||
func set_color(color):
|
||||
$MeshInstance.material_override = SpatialMaterial.new()
|
||||
$MeshInstance.material_override.albedo_color = color
|
||||
|
||||
func _ready():
|
||||
# save patch (for export)
|
||||
if use_embeded_patch:
|
||||
assert(_my_patch.substr(0, 7) == "user://", "use userpath with embeded_patch enabled !")
|
||||
assert(patch != "", "patch is empty?")
|
||||
_save_patch()
|
||||
|
||||
# load patch
|
||||
_my_id = Global.load_patch(ProjectSettings.globalize_path(_my_patch))
|
||||
|
||||
# listen 'player_transform_updated' event
|
||||
Events.connect("player_transform_updated", self, "_on_Events_player_transform_updated")
|
||||
|
||||
# send 'preset'
|
||||
set_preset(preset)
|
||||
|
||||
func _integrate_forces(state):
|
||||
state.set_angular_velocity(Vector3.UP * (_rot_speed / state.get_step()))
|
||||
|
||||
func _on_Events_player_transform_updated(playerpos, playerheading):
|
||||
var mypos = get_global_translation()
|
||||
var mypos2d = Vector2(mypos.x, mypos.z)
|
||||
var playerpos2d = Vector2(playerpos.x, playerpos.z)
|
||||
# calculate distance
|
||||
var distance = mypos.distance_to(playerpos)
|
||||
# calculate angle
|
||||
var angle = fmod(fmod(playerpos2d.angle_to_point(mypos2d) + playerheading - PI/2, PI*2) + PI*2, PI*2)
|
||||
if angle > PI:
|
||||
angle = angle - PI*2
|
||||
# (check)
|
||||
# print(str(_my_id) +" : ("+ str(distance) +","+ str(angle) +")")
|
||||
# calculate gain
|
||||
var gain = 1 - distance/audible_range_max
|
||||
# send to the patch
|
||||
Global._gdpd.start_message(3)
|
||||
Global._gdpd.add_symbol("panvol")
|
||||
Global._gdpd.add_float(gain)
|
||||
Global._gdpd.add_float(angle)
|
||||
Global._gdpd.finish_list("fromGodot" + String(_my_id))
|
||||
|
||||
|
||||
func _exit_tree():
|
||||
Global.close_patch(_my_id)
|
||||
|
||||
func _save_patch():
|
||||
# save patch
|
||||
# prepare directory
|
||||
var patch_name = _my_patch.split("/")[-1]
|
||||
var patch_dir = _my_patch.trim_suffix(patch_name)
|
||||
var dir = Directory.new()
|
||||
dir.make_dir_recursive(patch_dir)
|
||||
# save to file
|
||||
var file = File.new()
|
||||
file.open(_my_patch, File.WRITE)
|
||||
file.store_string(patch)
|
||||
file.close()
|
||||
81
cosmic/main.pd
Normal file
81
cosmic/main.pd
Normal file
|
|
@ -0,0 +1,81 @@
|
|||
#N canvas 190 223 456 518 12;
|
||||
#X floatatom 21 198 5 0 0 0 - - - 0;
|
||||
#X obj 21 22 r fromGodot\$0;
|
||||
#X obj 21 46 list trim;
|
||||
#X obj 199 467 dac~ 1 2;
|
||||
#X obj 199 407 *~;
|
||||
#X obj 189 264 line~;
|
||||
#X msg 189 240 \$1 100;
|
||||
#X obj 189 127 unpack f f;
|
||||
#X floatatom 189 177 5 0 0 0 - - - 0;
|
||||
#X obj 21 256 noise~;
|
||||
#X obj 21 286 bp~ 500 1000;
|
||||
#X obj 21 70 route freq gain panvol;
|
||||
#X obj 21 316 *~;
|
||||
#X obj 132 310 switch~;
|
||||
#X obj 132 286 tgl 19 0 empty empty empty 0 -10 0 12 #fcfcfc #000000 #000000 0 1;
|
||||
#X obj 132 262 change;
|
||||
#X text 89 155 switch on/off before 0 to stop startup pops, f 12;
|
||||
#X obj 189 216 max 0;
|
||||
#X obj 132 238 > -0.3;
|
||||
#X obj 303 253 hsl 100 20 -1 1 0 0 empty empty empty -2 -10 0 12 #fcfcfc #000000 #000000 0 1;
|
||||
#X obj 300 349 line~;
|
||||
#X msg 300 325 \$1 100;
|
||||
#X obj 300 278 expr ($f1 + 1)/8;
|
||||
#X floatatom 300 302 5 0 0 0 - - - 0;
|
||||
#N canvas 68 97 450 300 pan2~ 0;
|
||||
#X obj 51 98 cos~;
|
||||
#X obj 111 98 cos~;
|
||||
#X obj 33 128 *~;
|
||||
#X obj 93 128 *~;
|
||||
#X obj 33 158 outlet~;
|
||||
#X obj 93 158 outlet~;
|
||||
#X obj 33 24 inlet~;
|
||||
#X obj 111 24 inlet~;
|
||||
#X obj 111 74 +~ 0.75;
|
||||
#X connect 0 0 2 1;
|
||||
#X connect 1 0 3 1;
|
||||
#X connect 2 0 4 0;
|
||||
#X connect 3 0 5 0;
|
||||
#X connect 6 0 2 0;
|
||||
#X connect 6 0 3 0;
|
||||
#X connect 7 0 8 0;
|
||||
#X connect 7 0 0 0;
|
||||
#X connect 8 0 1 0;
|
||||
#X restore 199 437 pd pan2~;
|
||||
#X floatatom 296 159 5 0 0 0 - - - 0;
|
||||
#X obj 296 182 sin;
|
||||
#X floatatom 296 206 5 0 0 0 - - - 0;
|
||||
#X obj 203 336 *~;
|
||||
#X connect 0 0 10 1;
|
||||
#X connect 1 0 2 0;
|
||||
#X connect 2 0 11 0;
|
||||
#X connect 4 0 24 0;
|
||||
#X connect 5 0 28 0;
|
||||
#X connect 5 0 28 1;
|
||||
#X connect 6 0 5 0;
|
||||
#X connect 7 0 8 0;
|
||||
#X connect 7 1 25 0;
|
||||
#X connect 8 0 17 0;
|
||||
#X connect 8 0 18 0;
|
||||
#X connect 9 0 10 0;
|
||||
#X connect 10 0 12 0;
|
||||
#X connect 11 0 0 0;
|
||||
#X connect 11 1 12 1;
|
||||
#X connect 11 2 7 0;
|
||||
#X connect 12 0 4 0;
|
||||
#X connect 14 0 13 0;
|
||||
#X connect 15 0 14 0;
|
||||
#X connect 17 0 6 0;
|
||||
#X connect 18 0 15 0;
|
||||
#X connect 19 0 22 0;
|
||||
#X connect 20 0 24 1;
|
||||
#X connect 21 0 20 0;
|
||||
#X connect 22 0 23 0;
|
||||
#X connect 23 0 21 0;
|
||||
#X connect 24 0 3 0;
|
||||
#X connect 24 1 3 1;
|
||||
#X connect 25 0 26 0;
|
||||
#X connect 26 0 27 0;
|
||||
#X connect 27 0 19 0;
|
||||
#X connect 28 0 4 1;
|
||||
136
cosmic/main.tscn
Normal file
136
cosmic/main.tscn
Normal file
|
|
@ -0,0 +1,136 @@
|
|||
[gd_scene load_steps=10 format=2]
|
||||
|
||||
[ext_resource path="res://cosmic/main.gd" type="Script" id=1]
|
||||
|
||||
[sub_resource type="PhysicsMaterial" id=3]
|
||||
|
||||
[sub_resource type="SphereShape" id=5]
|
||||
|
||||
[sub_resource type="SpatialMaterial" id=4]
|
||||
|
||||
[sub_resource type="SphereMesh" id=2]
|
||||
resource_local_to_scene = true
|
||||
material = SubResource( 4 )
|
||||
radius = 20.0
|
||||
height = 40.0
|
||||
|
||||
[sub_resource type="SpatialMaterial" id=6]
|
||||
albedo_color = Color( 0.894118, 1, 0, 1 )
|
||||
|
||||
[sub_resource type="SphereMesh" id=7]
|
||||
material = SubResource( 6 )
|
||||
radius = 0.1
|
||||
height = 0.2
|
||||
|
||||
[sub_resource type="SpatialMaterial" id=8]
|
||||
|
||||
[sub_resource type="CylinderMesh" id=9]
|
||||
material = SubResource( 8 )
|
||||
top_radius = 0.003
|
||||
bottom_radius = 0.003
|
||||
height = 0.5
|
||||
|
||||
[node name="main" type="RigidBody" groups=["sounders"]]
|
||||
collision_layer = 4
|
||||
collision_mask = 0
|
||||
physics_material_override = SubResource( 3 )
|
||||
gravity_scale = 0.0
|
||||
script = ExtResource( 1 )
|
||||
use_embeded_patch = true
|
||||
patch = "#N canvas 190 223 456 518 12;
|
||||
#X floatatom 21 198 5 0 0 0 - - - 0;
|
||||
#X obj 21 22 r fromGodot\\$0;
|
||||
#X obj 21 46 list trim;
|
||||
#X obj 199 467 dac~ 1 2;
|
||||
#X obj 199 407 *~;
|
||||
#X obj 189 264 line~;
|
||||
#X msg 189 240 \\$1 100;
|
||||
#X obj 189 127 unpack f f;
|
||||
#X floatatom 189 177 5 0 0 0 - - - 0;
|
||||
#X obj 21 256 noise~;
|
||||
#X obj 21 286 bp~ 500 1000;
|
||||
#X obj 21 70 route freq gain panvol;
|
||||
#X obj 21 316 *~;
|
||||
#X obj 132 310 switch~;
|
||||
#X obj 132 286 tgl 19 0 empty empty empty 0 -10 0 12 #fcfcfc #000000 #000000 0 1;
|
||||
#X obj 132 262 change;
|
||||
#X text 89 155 switch on/off before 0 to stop startup pops, f 12;
|
||||
#X obj 189 216 max 0;
|
||||
#X obj 132 238 > -0.3;
|
||||
#X obj 303 253 hsl 100 20 -1 1 0 0 empty empty empty -2 -10 0 12 #fcfcfc #000000 #000000 0 1;
|
||||
#X obj 300 349 line~;
|
||||
#X msg 300 325 \\$1 100;
|
||||
#X obj 300 278 expr ($f1 + 1)/8;
|
||||
#X floatatom 300 302 5 0 0 0 - - - 0;
|
||||
#N canvas 68 97 450 300 pan2~ 0;
|
||||
#X obj 51 98 cos~;
|
||||
#X obj 111 98 cos~;
|
||||
#X obj 33 128 *~;
|
||||
#X obj 93 128 *~;
|
||||
#X obj 33 158 outlet~;
|
||||
#X obj 93 158 outlet~;
|
||||
#X obj 33 24 inlet~;
|
||||
#X obj 111 24 inlet~;
|
||||
#X obj 111 74 +~ 0.75;
|
||||
#X connect 0 0 2 1;
|
||||
#X connect 1 0 3 1;
|
||||
#X connect 2 0 4 0;
|
||||
#X connect 3 0 5 0;
|
||||
#X connect 6 0 2 0;
|
||||
#X connect 6 0 3 0;
|
||||
#X connect 7 0 8 0;
|
||||
#X connect 7 0 0 0;
|
||||
#X connect 8 0 1 0;
|
||||
#X restore 199 437 pd pan2~;
|
||||
#X floatatom 296 159 5 0 0 0 - - - 0;
|
||||
#X obj 296 182 sin;
|
||||
#X floatatom 296 206 5 0 0 0 - - - 0;
|
||||
#X obj 203 336 *~;
|
||||
#X connect 0 0 10 1;
|
||||
#X connect 1 0 2 0;
|
||||
#X connect 2 0 11 0;
|
||||
#X connect 4 0 24 0;
|
||||
#X connect 5 0 28 0;
|
||||
#X connect 5 0 28 1;
|
||||
#X connect 6 0 5 0;
|
||||
#X connect 7 0 8 0;
|
||||
#X connect 7 1 25 0;
|
||||
#X connect 8 0 17 0;
|
||||
#X connect 8 0 18 0;
|
||||
#X connect 9 0 10 0;
|
||||
#X connect 10 0 12 0;
|
||||
#X connect 11 0 0 0;
|
||||
#X connect 11 1 12 1;
|
||||
#X connect 11 2 7 0;
|
||||
#X connect 12 0 4 0;
|
||||
#X connect 14 0 13 0;
|
||||
#X connect 15 0 14 0;
|
||||
#X connect 17 0 6 0;
|
||||
#X connect 18 0 15 0;
|
||||
#X connect 19 0 22 0;
|
||||
#X connect 20 0 24 1;
|
||||
#X connect 21 0 20 0;
|
||||
#X connect 22 0 23 0;
|
||||
#X connect 23 0 21 0;
|
||||
#X connect 24 0 3 0;
|
||||
#X connect 24 1 3 1;
|
||||
#X connect 25 0 26 0;
|
||||
#X connect 26 0 27 0;
|
||||
#X connect 27 0 19 0;
|
||||
#X connect 28 0 4 1;
|
||||
"
|
||||
|
||||
[node name="CollisionShape" type="CollisionShape" parent="."]
|
||||
shape = SubResource( 5 )
|
||||
|
||||
[node name="MeshInstance" type="MeshInstance" parent="."]
|
||||
mesh = SubResource( 2 )
|
||||
|
||||
[node name="center" type="MeshInstance" parent="."]
|
||||
mesh = SubResource( 7 )
|
||||
|
||||
[node name="pin" type="MeshInstance" parent="center"]
|
||||
mesh = SubResource( 9 )
|
||||
|
||||
[node name="DirectionalLight" type="DirectionalLight" parent="."]
|
||||
transform = Transform( 1, 0, 0, 0, -4.37114e-08, 1, 0, -1, -4.37114e-08, 0, 1, 0 )
|
||||
99
cosmic/osc.gd
Normal file
99
cosmic/osc.gd
Normal file
|
|
@ -0,0 +1,99 @@
|
|||
extends RigidBody
|
||||
|
||||
export (float, 0, 100) var audible_range_max = 10.0
|
||||
export (int, 1, 12) var preset = 1
|
||||
|
||||
export (bool) var use_embeded_patch = false
|
||||
export (String, MULTILINE) var patch = ""
|
||||
|
||||
var _my_patch = "user://cosmic/osc.pd"
|
||||
var _my_id = 0
|
||||
|
||||
func set_size(size):
|
||||
$CollisionShape.shape.radius = size
|
||||
$MeshInstance.mesh.radius = size
|
||||
$MeshInstance.mesh.height = size * 2
|
||||
|
||||
func set_freq(freq):
|
||||
Global._gdpd.start_message(2)
|
||||
Global._gdpd.add_symbol('freq')
|
||||
Global._gdpd.add_float(freq)
|
||||
Global._gdpd.finish_list("fromGodot" + String(_my_id))
|
||||
|
||||
func set_gain(gain):
|
||||
Global._gdpd.start_message(2)
|
||||
Global._gdpd.add_symbol('gain')
|
||||
Global._gdpd.add_float(gain)
|
||||
Global._gdpd.finish_list("fromGodot" + String(_my_id))
|
||||
|
||||
func set_param(param):
|
||||
Global._gdpd.start_message(param.size()+1)
|
||||
Global._gdpd.add_symbol("param")
|
||||
for i in range(param.size()):
|
||||
Global._gdpd.add_float(param[i])
|
||||
Global._gdpd.finish_list("fromGodot" + String(_my_id))
|
||||
|
||||
func set_preset(prs):
|
||||
preset = prs
|
||||
Global._gdpd.start_message(2)
|
||||
Global._gdpd.add_symbol("preset")
|
||||
Global._gdpd.add_float(prs)
|
||||
Global._gdpd.finish_list("fromGodot" + String(_my_id))
|
||||
|
||||
func set_color(color):
|
||||
$MeshInstance.material_override = SpatialMaterial.new()
|
||||
$MeshInstance.material_override.albedo_color = color
|
||||
|
||||
func _ready():
|
||||
# save patch (for export)
|
||||
if use_embeded_patch:
|
||||
assert(_my_patch.substr(0, 7) == "user://", "use userpath with embeded_patch enabled !")
|
||||
assert(patch != "", "patch is empty?")
|
||||
_save_patch()
|
||||
|
||||
# load patch
|
||||
_my_id = Global.load_patch(ProjectSettings.globalize_path(_my_patch))
|
||||
|
||||
# listen 'player_transform_updated' event
|
||||
Events.connect("player_transform_updated", self, "_on_Events_player_transform_updated")
|
||||
|
||||
# send 'preset'
|
||||
set_preset(preset)
|
||||
|
||||
func _on_Events_player_transform_updated(playerpos, playerheading):
|
||||
var mypos = get_global_translation()
|
||||
var mypos2d = Vector2(mypos.x, mypos.z)
|
||||
var playerpos2d = Vector2(playerpos.x, playerpos.z)
|
||||
# calculate distance
|
||||
var distance = mypos.distance_to(playerpos)
|
||||
# calculate angle
|
||||
var angle = fmod(fmod(playerpos2d.angle_to_point(mypos2d) + playerheading - PI/2, PI*2) + PI*2, PI*2)
|
||||
if angle > PI:
|
||||
angle = angle - PI*2
|
||||
# (check)
|
||||
# print(str(_my_id) +" : ("+ str(distance) +","+ str(angle) +")")
|
||||
# calculate gain
|
||||
var gain = 1 - distance/audible_range_max
|
||||
# send to the patch
|
||||
Global._gdpd.start_message(3)
|
||||
Global._gdpd.add_symbol("panvol")
|
||||
Global._gdpd.add_float(gain)
|
||||
Global._gdpd.add_float(angle)
|
||||
Global._gdpd.finish_list("fromGodot" + String(_my_id))
|
||||
|
||||
|
||||
func _exit_tree():
|
||||
Global.close_patch(_my_id)
|
||||
|
||||
func _save_patch():
|
||||
# save patch
|
||||
# prepare directory
|
||||
var patch_name = _my_patch.split("/")[-1]
|
||||
var patch_dir = _my_patch.trim_suffix(patch_name)
|
||||
var dir = Directory.new()
|
||||
dir.make_dir_recursive(patch_dir)
|
||||
# save to file
|
||||
var file = File.new()
|
||||
file.open(_my_patch, File.WRITE)
|
||||
file.store_string(patch)
|
||||
file.close()
|
||||
79
cosmic/osc.pd
Normal file
79
cosmic/osc.pd
Normal file
|
|
@ -0,0 +1,79 @@
|
|||
#N canvas 116 274 456 518 12;
|
||||
#X obj 50 277 osc~ 440;
|
||||
#X floatatom 21 198 5 0 0 0 - - - 0;
|
||||
#X obj 21 22 r fromGodot\$0;
|
||||
#X obj 21 46 list trim;
|
||||
#X obj 199 467 dac~ 1 2;
|
||||
#X obj 199 407 *~;
|
||||
#X obj 189 127 unpack f f;
|
||||
#X obj 21 70 route freq gain panvol;
|
||||
#X obj 50 301 *~;
|
||||
#X obj 189 264 line~;
|
||||
#X msg 189 240 \$1 100;
|
||||
#X floatatom 189 177 5 0 0 0 - - - 0;
|
||||
#X obj 132 310 switch~;
|
||||
#X obj 132 286 tgl 19 0 empty empty empty 0 -10 0 12 #fcfcfc #000000 #000000 0 1;
|
||||
#X obj 132 262 change;
|
||||
#X text 89 155 switch on/off before 0 to stop startup pops, f 12;
|
||||
#X obj 189 216 max 0;
|
||||
#X obj 303 253 hsl 100 20 -1 1 0 0 empty empty empty -2 -10 0 12 #fcfcfc #000000 #000000 0 1;
|
||||
#X obj 300 349 line~;
|
||||
#X msg 300 325 \$1 100;
|
||||
#X obj 300 278 expr ($f1 + 1)/8;
|
||||
#X floatatom 300 302 5 0 0 0 - - - 0;
|
||||
#N canvas 68 97 450 300 pan2~ 0;
|
||||
#X obj 51 98 cos~;
|
||||
#X obj 111 98 cos~;
|
||||
#X obj 33 128 *~;
|
||||
#X obj 93 128 *~;
|
||||
#X obj 33 158 outlet~;
|
||||
#X obj 93 158 outlet~;
|
||||
#X obj 33 24 inlet~;
|
||||
#X obj 111 24 inlet~;
|
||||
#X obj 111 74 +~ 0.75;
|
||||
#X connect 0 0 2 1;
|
||||
#X connect 1 0 3 1;
|
||||
#X connect 2 0 4 0;
|
||||
#X connect 3 0 5 0;
|
||||
#X connect 6 0 2 0;
|
||||
#X connect 6 0 3 0;
|
||||
#X connect 7 0 8 0;
|
||||
#X connect 7 0 0 0;
|
||||
#X connect 8 0 1 0;
|
||||
#X restore 199 437 pd pan2~;
|
||||
#X floatatom 296 159 5 0 0 0 - - - 0;
|
||||
#X obj 296 182 sin;
|
||||
#X floatatom 296 206 5 0 0 0 - - - 0;
|
||||
#X obj 132 238 1;
|
||||
#X obj 203 336 *~;
|
||||
#X connect 0 0 8 0;
|
||||
#X connect 1 0 0 0;
|
||||
#X connect 2 0 3 0;
|
||||
#X connect 3 0 7 0;
|
||||
#X connect 5 0 22 0;
|
||||
#X connect 6 0 11 0;
|
||||
#X connect 6 1 23 0;
|
||||
#X connect 7 0 1 0;
|
||||
#X connect 7 1 8 1;
|
||||
#X connect 7 2 6 0;
|
||||
#X connect 8 0 5 0;
|
||||
#X connect 9 0 27 0;
|
||||
#X connect 9 0 27 1;
|
||||
#X connect 10 0 9 0;
|
||||
#X connect 11 0 16 0;
|
||||
#X connect 11 0 26 0;
|
||||
#X connect 13 0 12 0;
|
||||
#X connect 14 0 13 0;
|
||||
#X connect 16 0 10 0;
|
||||
#X connect 17 0 20 0;
|
||||
#X connect 18 0 22 1;
|
||||
#X connect 19 0 18 0;
|
||||
#X connect 20 0 21 0;
|
||||
#X connect 21 0 19 0;
|
||||
#X connect 22 0 4 0;
|
||||
#X connect 22 1 4 1;
|
||||
#X connect 23 0 24 0;
|
||||
#X connect 24 0 25 0;
|
||||
#X connect 25 0 17 0;
|
||||
#X connect 26 0 14 0;
|
||||
#X connect 27 0 5 1;
|
||||
104
cosmic/osc.tscn
Normal file
104
cosmic/osc.tscn
Normal file
|
|
@ -0,0 +1,104 @@
|
|||
[gd_scene load_steps=5 format=2]
|
||||
|
||||
[ext_resource path="res://cosmic/osc.gd" type="Script" id=1]
|
||||
|
||||
[sub_resource type="PhysicsMaterial" id=3]
|
||||
|
||||
[sub_resource type="SphereShape" id=1]
|
||||
|
||||
[sub_resource type="SphereMesh" id=2]
|
||||
resource_local_to_scene = true
|
||||
|
||||
[node name="osc" type="RigidBody" groups=["sounders"]]
|
||||
collision_layer = 4
|
||||
collision_mask = 0
|
||||
physics_material_override = SubResource( 3 )
|
||||
gravity_scale = 0.0
|
||||
script = ExtResource( 1 )
|
||||
use_embeded_patch = true
|
||||
patch = "#N canvas 116 274 456 518 12;
|
||||
#X obj 50 277 osc~ 440;
|
||||
#X floatatom 21 198 5 0 0 0 - - - 0;
|
||||
#X obj 21 22 r fromGodot\\$0;
|
||||
#X obj 21 46 list trim;
|
||||
#X obj 199 467 dac~ 1 2;
|
||||
#X obj 199 407 *~;
|
||||
#X obj 189 127 unpack f f;
|
||||
#X obj 21 70 route freq gain panvol;
|
||||
#X obj 50 301 *~;
|
||||
#X obj 189 264 line~;
|
||||
#X msg 189 240 \\$1 100;
|
||||
#X floatatom 189 177 5 0 0 0 - - - 0;
|
||||
#X obj 132 310 switch~;
|
||||
#X obj 132 286 tgl 19 0 empty empty empty 0 -10 0 12 #fcfcfc #000000 #000000 0 1;
|
||||
#X obj 132 262 change;
|
||||
#X text 89 155 switch on/off before 0 to stop startup pops, f 12;
|
||||
#X obj 189 216 max 0;
|
||||
#X obj 303 253 hsl 100 20 -1 1 0 0 empty empty empty -2 -10 0 12 #fcfcfc #000000 #000000 0 1;
|
||||
#X obj 300 349 line~;
|
||||
#X msg 300 325 \\$1 100;
|
||||
#X obj 300 278 expr ($f1 + 1)/8;
|
||||
#X floatatom 300 302 5 0 0 0 - - - 0;
|
||||
#N canvas 68 97 450 300 pan2~ 0;
|
||||
#X obj 51 98 cos~;
|
||||
#X obj 111 98 cos~;
|
||||
#X obj 33 128 *~;
|
||||
#X obj 93 128 *~;
|
||||
#X obj 33 158 outlet~;
|
||||
#X obj 93 158 outlet~;
|
||||
#X obj 33 24 inlet~;
|
||||
#X obj 111 24 inlet~;
|
||||
#X obj 111 74 +~ 0.75;
|
||||
#X connect 0 0 2 1;
|
||||
#X connect 1 0 3 1;
|
||||
#X connect 2 0 4 0;
|
||||
#X connect 3 0 5 0;
|
||||
#X connect 6 0 2 0;
|
||||
#X connect 6 0 3 0;
|
||||
#X connect 7 0 8 0;
|
||||
#X connect 7 0 0 0;
|
||||
#X connect 8 0 1 0;
|
||||
#X restore 199 437 pd pan2~;
|
||||
#X floatatom 296 159 5 0 0 0 - - - 0;
|
||||
#X obj 296 182 sin;
|
||||
#X floatatom 296 206 5 0 0 0 - - - 0;
|
||||
#X obj 132 238 1;
|
||||
#X obj 203 336 *~;
|
||||
#X connect 0 0 8 0;
|
||||
#X connect 1 0 0 0;
|
||||
#X connect 2 0 3 0;
|
||||
#X connect 3 0 7 0;
|
||||
#X connect 5 0 22 0;
|
||||
#X connect 6 0 11 0;
|
||||
#X connect 6 1 23 0;
|
||||
#X connect 7 0 1 0;
|
||||
#X connect 7 1 8 1;
|
||||
#X connect 7 2 6 0;
|
||||
#X connect 8 0 5 0;
|
||||
#X connect 9 0 27 0;
|
||||
#X connect 9 0 27 1;
|
||||
#X connect 10 0 9 0;
|
||||
#X connect 11 0 16 0;
|
||||
#X connect 11 0 26 0;
|
||||
#X connect 13 0 12 0;
|
||||
#X connect 14 0 13 0;
|
||||
#X connect 16 0 10 0;
|
||||
#X connect 17 0 20 0;
|
||||
#X connect 18 0 22 1;
|
||||
#X connect 19 0 18 0;
|
||||
#X connect 20 0 21 0;
|
||||
#X connect 21 0 19 0;
|
||||
#X connect 22 0 4 0;
|
||||
#X connect 22 1 4 1;
|
||||
#X connect 23 0 24 0;
|
||||
#X connect 24 0 25 0;
|
||||
#X connect 25 0 17 0;
|
||||
#X connect 26 0 14 0;
|
||||
#X connect 27 0 5 1;
|
||||
"
|
||||
|
||||
[node name="CollisionShape" type="CollisionShape" parent="."]
|
||||
shape = SubResource( 1 )
|
||||
|
||||
[node name="MeshInstance" type="MeshInstance" parent="."]
|
||||
mesh = SubResource( 2 )
|
||||
106
crickets/Player.gd
Normal file
106
crickets/Player.gd
Normal file
|
|
@ -0,0 +1,106 @@
|
|||
extends KinematicBody
|
||||
|
||||
#const GRAVITY = -24.8
|
||||
const GRAVITY = -10
|
||||
var vel = Vector3()
|
||||
const MAX_SPEED = 5
|
||||
#const JUMP_SPEED = 18
|
||||
const JUMP_SPEED = 6
|
||||
#const ACCEL = 4.5
|
||||
const ACCEL = 2
|
||||
|
||||
var dir = Vector3()
|
||||
|
||||
const DEACCEL= 16
|
||||
const MAX_SLOPE_ANGLE = 40
|
||||
|
||||
var camera
|
||||
var rotation_helper
|
||||
|
||||
var MOUSE_SENSITIVITY = 0.05
|
||||
|
||||
func _ready():
|
||||
camera = $Rotation_Helper/Camera
|
||||
rotation_helper = $Rotation_Helper
|
||||
|
||||
Input.set_mouse_mode(Input.MOUSE_MODE_CAPTURED)
|
||||
|
||||
func _physics_process(delta):
|
||||
process_input(delta)
|
||||
process_movement(delta)
|
||||
|
||||
func process_input(delta):
|
||||
|
||||
# ----------------------------------
|
||||
# Walking
|
||||
dir = Vector3()
|
||||
var cam_xform = camera.get_global_transform()
|
||||
|
||||
var input_movement_vector = Vector2()
|
||||
|
||||
if Input.is_action_pressed("move_forward"):
|
||||
input_movement_vector.y += 1
|
||||
if Input.is_action_pressed("move_backward"):
|
||||
input_movement_vector.y -= 1
|
||||
if Input.is_action_pressed("move_left"):
|
||||
input_movement_vector.x -= 1
|
||||
if Input.is_action_pressed("move_right"):
|
||||
input_movement_vector.x += 1
|
||||
|
||||
input_movement_vector = input_movement_vector.normalized()
|
||||
|
||||
# Basis vectors are already normalized.
|
||||
dir += -cam_xform.basis.z * input_movement_vector.y
|
||||
dir += cam_xform.basis.x * input_movement_vector.x
|
||||
# ----------------------------------
|
||||
|
||||
# ----------------------------------
|
||||
# Jumping
|
||||
# if is_on_floor():
|
||||
if Input.is_action_just_pressed("jump"):
|
||||
vel.y = JUMP_SPEED
|
||||
# ----------------------------------
|
||||
|
||||
# ----------------------------------
|
||||
# Capturing/Freeing the cursor
|
||||
if Input.is_action_just_pressed("ui_cancel"):
|
||||
if Input.get_mouse_mode() == Input.MOUSE_MODE_VISIBLE:
|
||||
Input.set_mouse_mode(Input.MOUSE_MODE_CAPTURED)
|
||||
else:
|
||||
Input.set_mouse_mode(Input.MOUSE_MODE_VISIBLE)
|
||||
# ----------------------------------
|
||||
|
||||
func process_movement(delta):
|
||||
dir.y = 0
|
||||
dir = dir.normalized()
|
||||
|
||||
vel.y += delta * GRAVITY
|
||||
|
||||
var hvel = vel
|
||||
hvel.y = 0
|
||||
|
||||
var target = dir
|
||||
target *= MAX_SPEED
|
||||
|
||||
var accel
|
||||
if dir.dot(hvel) > 0:
|
||||
accel = ACCEL
|
||||
else:
|
||||
accel = DEACCEL
|
||||
|
||||
hvel = hvel.linear_interpolate(target, accel * delta)
|
||||
vel.x = hvel.x
|
||||
vel.z = hvel.z
|
||||
vel = move_and_slide(vel, Vector3(0, 1, 0), 0.05, 4, deg2rad(MAX_SLOPE_ANGLE))
|
||||
|
||||
# emit signal - playerinfo_updated
|
||||
Events.emit_signal("player_transform_updated", $Rotation_Helper/Camera.get_global_translation(), $Rotation_Helper.global_rotation.y)
|
||||
|
||||
func _input(event):
|
||||
if event is InputEventMouseMotion and Input.get_mouse_mode() == Input.MOUSE_MODE_CAPTURED:
|
||||
rotation_helper.rotate_x(deg2rad(event.relative.y * MOUSE_SENSITIVITY))
|
||||
self.rotate_y(deg2rad(event.relative.x * MOUSE_SENSITIVITY * -1))
|
||||
|
||||
var camera_rot = rotation_helper.rotation_degrees
|
||||
camera_rot.x = clamp(camera_rot.x, -70, 70)
|
||||
rotation_helper.rotation_degrees = camera_rot
|
||||
22
crickets/Player.tscn
Normal file
22
crickets/Player.tscn
Normal file
|
|
@ -0,0 +1,22 @@
|
|||
[gd_scene load_steps=3 format=2]
|
||||
|
||||
[ext_resource path="res://crickets/Player.gd" type="Script" id=1]
|
||||
|
||||
[sub_resource type="CapsuleShape" id=1]
|
||||
radius = 0.6
|
||||
height = 2.0
|
||||
|
||||
[node name="Player" type="KinematicBody"]
|
||||
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 3.52113, 0.98772 )
|
||||
script = ExtResource( 1 )
|
||||
|
||||
[node name="Capsule" type="CollisionShape" parent="."]
|
||||
transform = Transform( 1, 0, 0, 0, -4.37114e-08, -1, 0, 1, -4.37114e-08, 0, 0, 0 )
|
||||
shape = SubResource( 1 )
|
||||
|
||||
[node name="Rotation_Helper" type="Spatial" parent="."]
|
||||
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.1, 0 )
|
||||
|
||||
[node name="Camera" type="Camera" parent="Rotation_Helper"]
|
||||
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -1, 0 )
|
||||
far = 10000.0
|
||||
323
crickets/cricket.pd
Normal file
323
crickets/cricket.pd
Normal file
|
|
@ -0,0 +1,323 @@
|
|||
#N canvas 0 82 1045 747 12;
|
||||
#X obj 21 22 r fromGodot\$0;
|
||||
#X obj 21 46 list trim;
|
||||
#X obj 303 253 hsl 100 20 -1 1 0 0 empty empty empty -2 -10 0 12 #fcfcfc #000000 #000000 0 1;
|
||||
#X obj 300 349 line~;
|
||||
#X msg 300 325 \$1 100;
|
||||
#X obj 300 278 expr ($f1 + 1)/8;
|
||||
#X floatatom 300 302 5 0 0 0 - - - 0;
|
||||
#N canvas 68 97 450 300 pan2~ 0;
|
||||
#X obj 51 98 cos~;
|
||||
#X obj 111 98 cos~;
|
||||
#X obj 33 128 *~;
|
||||
#X obj 93 128 *~;
|
||||
#X obj 33 158 outlet~;
|
||||
#X obj 93 158 outlet~;
|
||||
#X obj 33 24 inlet~;
|
||||
#X obj 111 24 inlet~;
|
||||
#X obj 111 74 +~ 0.75;
|
||||
#X connect 0 0 2 1;
|
||||
#X connect 1 0 3 1;
|
||||
#X connect 2 0 4 0;
|
||||
#X connect 3 0 5 0;
|
||||
#X connect 6 0 2 0;
|
||||
#X connect 6 0 3 0;
|
||||
#X connect 7 0 8 0;
|
||||
#X connect 7 0 0 0;
|
||||
#X connect 8 0 1 0;
|
||||
#X restore 199 437 pd pan2~;
|
||||
#X obj 199 467 dac~ 1 2;
|
||||
#X obj 199 407 *~;
|
||||
#X obj 189 127 unpack f f;
|
||||
#X floatatom 296 159 5 0 0 0 - - - 0;
|
||||
#X obj 296 182 sin;
|
||||
#X floatatom 296 206 5 0 0 0 - - - 0;
|
||||
#X obj 21 120 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000 #000000;
|
||||
#X obj 361 21 loadbang;
|
||||
#X obj 21 70 route bang panvol param preset;
|
||||
#X obj 20 470 *~;
|
||||
#X obj 38 446 vline~;
|
||||
#X msg 38 422 0 \, 1 1000 300;
|
||||
#X obj 38 398 loadbang;
|
||||
#X msg 361 51 \; pd dsp 1;
|
||||
#N canvas 0 23 1440 807 synth 0;
|
||||
#X obj 334 43 inlet;
|
||||
#X obj 254 630 +~ 1;
|
||||
#X obj 254 658 *~ 50;
|
||||
#X obj 572 671 *~;
|
||||
#X obj 95 350 metro 0.5 120 permin;
|
||||
#X obj 95 380 bng 16 250 50 0 empty empty empty 0 -12 0 16 #fcfcfc #000000 #000000;
|
||||
#X obj 21 192 tgl 24 0 empty empty empty 0 -12 0 16 #fcfcfc #000000 #000000 0 1;
|
||||
#X msg 95 310 tempo \$1 permin;
|
||||
#X floatatom 95 281 5 0 0 1 bpm - - 0;
|
||||
#X obj 95 407 f;
|
||||
#X obj 141 407 + 1;
|
||||
#X floatatom 95 437 5 0 0 0 - - - 0;
|
||||
#X obj 95 526 bng 16 250 50 0 empty empty empty 0 -16 0 24 #fcfcfc #000000 #000000;
|
||||
#X obj 122 526 bng 16 250 50 0 empty empty empty 0 -16 0 24 #fcfcfc #000000 #000000;
|
||||
#X obj 149 526 bng 16 250 50 0 empty empty empty 0 -16 0 24 #fcfcfc #000000 #000000;
|
||||
#X floatatom 95 563 5 0 0 0 - - - 0;
|
||||
#X obj 95 602 sel 0;
|
||||
#X obj 127 632 mtof;
|
||||
#X obj 127 750 line~;
|
||||
#X msg 127 721 \$1 \$2;
|
||||
#X obj 127 694 pack;
|
||||
#X floatatom 127 668 5 0 0 0 - - - 0;
|
||||
#X floatatom 171 606 5 0 0 1 ramp - - 0;
|
||||
#X floatatom 458 475 5 0 0 1 AM - - 0;
|
||||
#X obj 404 594 expr~ ($v1+1)/2;
|
||||
#X obj 404 622 expr~ 1-$v1;
|
||||
#X obj 404 649 *~;
|
||||
#X floatatom 275 476 5 0 3 1 VolAM - - 0;
|
||||
#X obj 493 721 *~;
|
||||
#X obj 404 561 osc~;
|
||||
#X obj 254 605 osc~ 440;
|
||||
#X obj 275 452 line;
|
||||
#X msg 95 243 10;
|
||||
#X msg 133 244 20;
|
||||
#X msg 170 243 30;
|
||||
#X msg 210 243 40;
|
||||
#X obj 275 315 random 3;
|
||||
#X obj 275 339 sel 0 1 2;
|
||||
#X obj 95 171 random 4;
|
||||
#X obj 95 209 sel 0 1 2 3;
|
||||
#X obj 95 111 tgl 19 0 empty empty empty 0 -10 0 12 #fcfcfc #000000 #000000 0 1;
|
||||
#X obj 95 140 metro 3000;
|
||||
#X msg 238 513 1 200;
|
||||
#X msg 315 415 0 1800;
|
||||
#X obj 180 526 bng 16 250 50 0 empty empty empty 0 -16 0 24 #fcfcfc #000000 #000000;
|
||||
#X floatatom 200 563 5 0 0 0 - - - 0;
|
||||
#X obj 95 496 sel 0 1 2 3 4 5;
|
||||
#X obj 95 466 mod 6;
|
||||
#X obj 430 225 osc~;
|
||||
#X obj 430 253 +~ 1;
|
||||
#X obj 430 309 snapshot~;
|
||||
#X obj 504 266 metro 100;
|
||||
#X obj 506 231 tgl 20 0 empty empty empty 0 -16 0 24 #fcfcfc #000000 #000000 0 1;
|
||||
#X obj 433 338 hsl 100 18 0 300 0 0 empty empty empty -2 -16 0 24 #fcfcfc #000000 #000000 0 1;
|
||||
#X floatatom 430 367 5 0 0 0 - - - 0;
|
||||
#X floatatom 404 537 5 0 0 0 - - - 0;
|
||||
#X obj 404 513 +;
|
||||
#X obj 430 279 *~ 150;
|
||||
#X obj 20 136 loadbang;
|
||||
#X msg 21 159 1;
|
||||
#X obj 95 11 loadbang;
|
||||
#X msg 95 51 1;
|
||||
#X obj 507 170 loadbang;
|
||||
#X msg 508 193 1;
|
||||
#X floatatom 388 117 5 0 0 0 - - - 0;
|
||||
#X floatatom 430 117 5 0 0 0 - - - 0;
|
||||
#X floatatom 305 117 5 0 0 0 - - - 0;
|
||||
#X floatatom 347 117 5 0 0 0 - - - 0;
|
||||
#X obj 334 74 unpack f f f f f;
|
||||
#X floatatom 589 117 5 0 0 0 - - - 0;
|
||||
#X obj 206 40 tgl 19 0 empty empty empty 0 -10 0 12 #fcfcfc #000000 #000000 0 1;
|
||||
#X obj 206 88 t b b;
|
||||
#X obj 341 225 +;
|
||||
#X floatatom 341 249 5 0 0 0 - - - 0;
|
||||
#X obj 206 136 * 10;
|
||||
#X obj 206 112 random 4;
|
||||
#X obj 206 64 metro 3000;
|
||||
#X obj 254 691 tabread~ \$0-shaping;
|
||||
#N canvas 0 22 450 278 (subpatch) 0;
|
||||
#X array \$0-shaping 100 float 1;
|
||||
#A 0 0.159999 0.159999 0.159999 0.159999 0.159999 0.159999 0.159999 0.159999 0.159999 0.15 0.14 0.14 0.13 0.12 0.110001 0.110001 0.110001 0.100001 0.100001 0.100001 0.100001 0.100001 0.0900012 0.0900012 0.0900012 0.0800015 0.060002 0.0500022 7.15256e-07 -0.0399983 -0.0599978 -0.0899971 -0.119996 -0.134996 -0.159995 -0.189995 -0.209994 -0.229994 -0.249993 -0.269993 -0.299992 -0.339991 -0.35999 -0.38999 -0.429989 -0.479987 -0.509987 -0.519986 -0.489987 -0.459988 -0.439988 -0.419989 -0.37999 -0.329991 -0.299992 -0.269993 -0.249993 -0.219994 -0.199994 -0.179995 -0.169995 -0.159995 -0.129996 -0.109997 -0.0799973 -0.0699975 -0.049998 -0.0399983 -0.0199988 7.15256e-07 0.0100005 0.0200002 0.03 0.03 0.03 0.0399997 0.0399997 0.0399997 0.0399997 0.0399997 0.0399997 0.0399997 0.0399997 0.0399997 0.0399997 0.0399997 0.0399997 0.0399997 0.0399997 0.0399997 0.0399997 0.03 0.03 0.0200002 0.0100005 0.0100005 7.15256e-07 -0.00999904 -0.00999904 -0.00999904;
|
||||
#X coords 0 -1 100 1 200 200 1 0 0;
|
||||
#X restore 676 38 graph;
|
||||
#X obj 394 43 r \$0-preset;
|
||||
#X obj 697 720 s \$0-preset;
|
||||
#X obj 630 241 inlet;
|
||||
#X obj 630 265 sel 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16;
|
||||
#X msg 275 367 0 2200;
|
||||
#X msg 295 391 0 2000;
|
||||
#X msg 770 305 1 -2 3596 30 0.5;
|
||||
#X msg 770 329 -1 1 2789 80 0.6;
|
||||
#X msg 770 353 2 -5 1839 30 0.4;
|
||||
#X msg 770 377 2 -5 1220 60 0.5;
|
||||
#X msg 770 401 -3 2 1615 10 0.5;
|
||||
#X msg 770 425 4 -7 2380 100 0.5;
|
||||
#X msg 770 449 -7 -2 3996 30 0.7;
|
||||
#X msg 769 473 1 7 11086 390 0.6;
|
||||
#X msg 771 498 1 -9 9 10 0.5;
|
||||
#X msg 770 521 2 4 12644 1962 0.7;
|
||||
#X msg 770 545 -1 -11 11200 120 0.7;
|
||||
#X msg 770 569 -1 -1 -11111 90 0.6;
|
||||
#X msg 770 593 -2 2 1 -10 0.5;
|
||||
#X msg 770 617 -1 -2 -20 60 0.6;
|
||||
#X msg 770 641 1 -2 100 10 0.4;
|
||||
#X msg 770 665 1 7 11086 390 0.6;
|
||||
#X obj 571 724 outlet~;
|
||||
#X connect 0 0 68 0;
|
||||
#X connect 1 0 2 0;
|
||||
#X connect 2 0 77 0;
|
||||
#X connect 3 0 101 0;
|
||||
#X connect 4 0 5 0;
|
||||
#X connect 5 0 9 0;
|
||||
#X connect 6 0 4 0;
|
||||
#X connect 7 0 4 0;
|
||||
#X connect 8 0 7 0;
|
||||
#X connect 9 0 10 0;
|
||||
#X connect 9 0 11 0;
|
||||
#X connect 10 0 9 1;
|
||||
#X connect 11 0 47 0;
|
||||
#X connect 12 0 15 0;
|
||||
#X connect 13 0 36 0;
|
||||
#X connect 15 0 16 0;
|
||||
#X connect 16 1 17 0;
|
||||
#X connect 17 0 21 0;
|
||||
#X connect 18 0 30 0;
|
||||
#X connect 19 0 18 0;
|
||||
#X connect 20 0 19 0;
|
||||
#X connect 21 0 20 0;
|
||||
#X connect 22 0 20 1;
|
||||
#X connect 23 0 56 1;
|
||||
#X connect 24 0 25 0;
|
||||
#X connect 25 0 26 0;
|
||||
#X connect 26 0 28 1;
|
||||
#X connect 27 0 26 1;
|
||||
#X connect 28 0 3 0;
|
||||
#X connect 29 0 24 0;
|
||||
#X connect 30 0 1 0;
|
||||
#X connect 31 0 27 0;
|
||||
#X connect 32 0 8 0;
|
||||
#X connect 33 0 8 0;
|
||||
#X connect 34 0 8 0;
|
||||
#X connect 35 0 8 0;
|
||||
#X connect 36 0 37 0;
|
||||
#X connect 37 0 83 0;
|
||||
#X connect 37 1 84 0;
|
||||
#X connect 37 2 43 0;
|
||||
#X connect 38 0 39 0;
|
||||
#X connect 39 0 32 0;
|
||||
#X connect 39 1 33 0;
|
||||
#X connect 39 2 34 0;
|
||||
#X connect 39 3 35 0;
|
||||
#X connect 40 0 41 0;
|
||||
#X connect 41 0 38 0;
|
||||
#X connect 42 0 31 0;
|
||||
#X connect 43 0 31 0;
|
||||
#X connect 44 0 45 0;
|
||||
#X connect 44 0 42 0;
|
||||
#X connect 45 0 16 0;
|
||||
#X connect 46 0 12 0;
|
||||
#X connect 46 1 13 0;
|
||||
#X connect 46 2 14 0;
|
||||
#X connect 46 5 44 0;
|
||||
#X connect 47 0 46 0;
|
||||
#X connect 48 0 49 0;
|
||||
#X connect 49 0 57 0;
|
||||
#X connect 50 0 53 0;
|
||||
#X connect 51 0 50 0;
|
||||
#X connect 52 0 51 0;
|
||||
#X connect 53 0 54 0;
|
||||
#X connect 54 0 56 0;
|
||||
#X connect 55 0 29 0;
|
||||
#X connect 56 0 55 0;
|
||||
#X connect 57 0 50 0;
|
||||
#X connect 58 0 59 0;
|
||||
#X connect 59 0 6 0;
|
||||
#X connect 60 0 61 0;
|
||||
#X connect 60 0 70 0;
|
||||
#X connect 61 0 40 0;
|
||||
#X connect 62 0 63 0;
|
||||
#X connect 63 0 52 0;
|
||||
#X connect 64 0 56 1;
|
||||
#X connect 64 0 72 0;
|
||||
#X connect 65 0 48 0;
|
||||
#X connect 66 0 15 0;
|
||||
#X connect 67 0 45 0;
|
||||
#X connect 68 0 66 0;
|
||||
#X connect 68 1 67 0;
|
||||
#X connect 68 2 64 0;
|
||||
#X connect 68 3 65 0;
|
||||
#X connect 68 4 69 0;
|
||||
#X connect 69 0 3 1;
|
||||
#X connect 70 0 76 0;
|
||||
#X connect 71 0 75 0;
|
||||
#X connect 71 1 64 0;
|
||||
#X connect 72 0 73 0;
|
||||
#X connect 73 0 56 1;
|
||||
#X connect 74 0 72 1;
|
||||
#X connect 75 0 74 0;
|
||||
#X connect 76 0 71 0;
|
||||
#X connect 77 0 28 0;
|
||||
#X connect 79 0 68 0;
|
||||
#X connect 81 0 82 0;
|
||||
#X connect 82 0 85 0;
|
||||
#X connect 82 1 86 0;
|
||||
#X connect 82 2 87 0;
|
||||
#X connect 82 3 88 0;
|
||||
#X connect 82 4 89 0;
|
||||
#X connect 82 5 90 0;
|
||||
#X connect 82 6 91 0;
|
||||
#X connect 82 7 92 0;
|
||||
#X connect 82 8 94 0;
|
||||
#X connect 82 9 95 0;
|
||||
#X connect 82 10 96 0;
|
||||
#X connect 82 11 97 0;
|
||||
#X connect 82 12 98 0;
|
||||
#X connect 82 13 99 0;
|
||||
#X connect 82 14 100 0;
|
||||
#X connect 82 15 93 0;
|
||||
#X connect 83 0 31 0;
|
||||
#X connect 84 0 31 0;
|
||||
#X connect 85 0 80 0;
|
||||
#X connect 86 0 80 0;
|
||||
#X connect 87 0 80 0;
|
||||
#X connect 88 0 80 0;
|
||||
#X connect 89 0 80 0;
|
||||
#X connect 90 0 80 0;
|
||||
#X connect 91 0 80 0;
|
||||
#X connect 92 0 80 0;
|
||||
#X connect 93 0 80 0;
|
||||
#X connect 94 0 80 0;
|
||||
#X connect 95 0 80 0;
|
||||
#X connect 96 0 80 0;
|
||||
#X connect 97 0 80 0;
|
||||
#X connect 98 0 80 0;
|
||||
#X connect 99 0 80 0;
|
||||
#X connect 100 0 80 0;
|
||||
#X restore 40 300 pd synth;
|
||||
#X obj 203 339 *~;
|
||||
#X obj 189 264 line~;
|
||||
#X msg 189 240 \$1 100;
|
||||
#X floatatom 189 177 5 0 0 0 - - - 0;
|
||||
#X obj 132 310 switch~;
|
||||
#X obj 132 286 tgl 19 0 empty empty empty 0 -10 0 12 #fcfcfc #000000 #000000 0 1;
|
||||
#X obj 132 262 change;
|
||||
#X text 89 155 switch on/off before 0 to stop startup pops, f 12;
|
||||
#X obj 189 216 max 0;
|
||||
#X obj 132 238 > -0.3;
|
||||
#X connect 0 0 1 0;
|
||||
#X connect 1 0 16 0;
|
||||
#X connect 2 0 5 0;
|
||||
#X connect 3 0 7 1;
|
||||
#X connect 4 0 3 0;
|
||||
#X connect 5 0 6 0;
|
||||
#X connect 6 0 4 0;
|
||||
#X connect 7 0 8 0;
|
||||
#X connect 7 1 8 1;
|
||||
#X connect 9 0 7 0;
|
||||
#X connect 10 0 26 0;
|
||||
#X connect 10 1 11 0;
|
||||
#X connect 11 0 12 0;
|
||||
#X connect 12 0 13 0;
|
||||
#X connect 13 0 2 0;
|
||||
#X connect 16 0 14 0;
|
||||
#X connect 16 1 10 0;
|
||||
#X connect 16 2 22 0;
|
||||
#X connect 16 3 22 1;
|
||||
#X connect 18 0 17 1;
|
||||
#X connect 19 0 18 0;
|
||||
#X connect 20 0 19 0;
|
||||
#X connect 22 0 9 0;
|
||||
#X connect 23 0 9 1;
|
||||
#X connect 24 0 23 0;
|
||||
#X connect 24 0 23 1;
|
||||
#X connect 25 0 24 0;
|
||||
#X connect 26 0 31 0;
|
||||
#X connect 26 0 32 0;
|
||||
#X connect 28 0 27 0;
|
||||
#X connect 29 0 28 0;
|
||||
#X connect 31 0 25 0;
|
||||
#X connect 32 0 29 0;
|
||||
8
crickets/default_env.tres
Normal file
8
crickets/default_env.tres
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
[gd_resource type="Environment" load_steps=2 format=2]
|
||||
|
||||
[sub_resource type="ProceduralSky" id=1]
|
||||
sun_color = Color( 0, 0, 0, 1 )
|
||||
|
||||
[resource]
|
||||
background_mode = 2
|
||||
background_sky = SubResource( 1 )
|
||||
87
crickets/project.godot.off
Normal file
87
crickets/project.godot.off
Normal file
|
|
@ -0,0 +1,87 @@
|
|||
; Engine configuration file.
|
||||
; It's best edited using the editor UI and not directly,
|
||||
; since the parameters that go here are not all obvious.
|
||||
;
|
||||
; Format:
|
||||
; [section] ; section goes between []
|
||||
; param=value ; assign values to parameters
|
||||
|
||||
config_version=4
|
||||
|
||||
_global_script_classes=[ {
|
||||
"base": "Spatial",
|
||||
"class": "Branch",
|
||||
"language": "GDScript",
|
||||
"path": "res://crickets/src/Branch.gd"
|
||||
}, {
|
||||
"base": "Spatial",
|
||||
"class": "Branch2",
|
||||
"language": "GDScript",
|
||||
"path": "res://crickets/src/Branch2.gd"
|
||||
}, {
|
||||
"base": "Spatial",
|
||||
"class": "Leaves",
|
||||
"language": "GDScript",
|
||||
"path": "res://crickets/src/Leave.gd"
|
||||
}, {
|
||||
"base": "Spatial",
|
||||
"class": "PolyTree",
|
||||
"language": "GDScript",
|
||||
"path": "res://crickets/src/Tree.gd"
|
||||
}, {
|
||||
"base": "Spatial",
|
||||
"class": "PolyTree2",
|
||||
"language": "GDScript",
|
||||
"path": "res://crickets/src/Tree2.gd"
|
||||
} ]
|
||||
_global_script_class_icons={
|
||||
"Branch": "",
|
||||
"Branch2": "",
|
||||
"Leaves": "",
|
||||
"PolyTree": "",
|
||||
"PolyTree2": ""
|
||||
}
|
||||
|
||||
[application]
|
||||
|
||||
config/name="Procedural Trees"
|
||||
run/main_scene="res://crickets/src/Sandbox.tscn"
|
||||
|
||||
[autoload]
|
||||
|
||||
Global="*res://crickets/Global.tscn"
|
||||
Events="*res://crickets/Events.tscn"
|
||||
|
||||
[input]
|
||||
|
||||
move_forward={
|
||||
"deadzone": 0.5,
|
||||
"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":87,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
|
||||
]
|
||||
}
|
||||
move_backward={
|
||||
"deadzone": 0.5,
|
||||
"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":83,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
|
||||
]
|
||||
}
|
||||
move_left={
|
||||
"deadzone": 0.5,
|
||||
"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":65,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
|
||||
]
|
||||
}
|
||||
move_right={
|
||||
"deadzone": 0.5,
|
||||
"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":68,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
|
||||
]
|
||||
}
|
||||
move_jump={
|
||||
"deadzone": 0.5,
|
||||
"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":32,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
|
||||
]
|
||||
}
|
||||
|
||||
[rendering]
|
||||
|
||||
quality/reflections/texture_array_reflections=false
|
||||
quality/reflections/high_quality_ggx=false
|
||||
environment/default_environment="res://crickets/default_env.tres"
|
||||
66
crickets/src/Branch.gd
Normal file
66
crickets/src/Branch.gd
Normal file
|
|
@ -0,0 +1,66 @@
|
|||
extends Spatial
|
||||
class_name Branch
|
||||
|
||||
func _init(leaves = null):
|
||||
|
||||
var data_tool = MeshDataTool.new()
|
||||
var surface_tool = SurfaceTool.new()
|
||||
var mesh = CylinderMesh.new()
|
||||
|
||||
# Randomizes the meshs properties - modify these to get different outcomes.
|
||||
randomize()
|
||||
mesh.radial_segments = rand_range(10, 20)
|
||||
mesh.height = rand_range(10, 20)
|
||||
mesh.top_radius = rand_range(1, 3)
|
||||
mesh.bottom_radius = rand_range(mesh.top_radius, 4)
|
||||
|
||||
# Provide the MeshDataTool the mesh
|
||||
surface_tool.create_from(mesh, 0)
|
||||
var array_mesh = surface_tool.commit()
|
||||
data_tool.create_from_surface(array_mesh, 0)
|
||||
|
||||
# Move random values. Modify these until u happy bro!
|
||||
var noise = OpenSimplexNoise.new()
|
||||
noise.period = rand_range(32, 128)
|
||||
var ampl = rand_range(0.4, 1.3)
|
||||
|
||||
# Iterate through each vertex in the mesh
|
||||
for i in range(data_tool.get_vertex_count()):
|
||||
var vertex = data_tool.get_vertex(i)
|
||||
|
||||
# Provide a noise value to the vertex
|
||||
var normal = vertex.normalized()
|
||||
var u = normal.x * noise.period
|
||||
var v = normal.y * noise.period
|
||||
var noise_value = noise.get_noise_2d(u, v)
|
||||
vertex = vertex + ((normal * noise_value) * ampl)
|
||||
|
||||
data_tool.set_vertex(i, vertex)
|
||||
|
||||
# Clean up
|
||||
for s in range(array_mesh.get_surface_count()):
|
||||
array_mesh.surface_remove(s)
|
||||
|
||||
# Build the mesh from the MeshDataTool with the SurfaceTool
|
||||
data_tool.commit_to_surface(array_mesh)
|
||||
surface_tool.begin(Mesh.PRIMITIVE_TRIANGLES)
|
||||
surface_tool.create_from(array_mesh, 0)
|
||||
surface_tool.generate_normals()
|
||||
|
||||
# Create the instansiate and add it as well as the leaves
|
||||
var mesh_instance = MeshInstance.new()
|
||||
mesh_instance.mesh = surface_tool.commit()
|
||||
mesh_instance.material_override = generate_random_material()
|
||||
|
||||
if leaves != null:
|
||||
add_child(leaves)
|
||||
leaves.translation = Vector3(0, mesh.height, 0)
|
||||
add_child(mesh_instance)
|
||||
|
||||
mesh_instance.translation = Vector3(0, mesh.height * 0.5, 0)
|
||||
|
||||
# genereates a new material with a random color
|
||||
func generate_random_material():
|
||||
var material = SpatialMaterial.new()
|
||||
material.albedo_color = Color(rand_range(0, 1), rand_range(0, 1), rand_range(0, 1))
|
||||
return material
|
||||
66
crickets/src/Branch2.gd
Normal file
66
crickets/src/Branch2.gd
Normal file
|
|
@ -0,0 +1,66 @@
|
|||
extends Spatial
|
||||
class_name Branch2
|
||||
|
||||
func _init(leaves = null):
|
||||
|
||||
var data_tool = MeshDataTool.new()
|
||||
var surface_tool = SurfaceTool.new()
|
||||
var mesh = CylinderMesh.new()
|
||||
|
||||
# Randomizes the meshs properties - modify these to get different outcomes.
|
||||
randomize()
|
||||
mesh.radial_segments = rand_range(10, 20)
|
||||
mesh.height = rand_range(10, 20)
|
||||
mesh.top_radius = rand_range(3, 7)
|
||||
mesh.bottom_radius = rand_range(mesh.top_radius, 8)
|
||||
|
||||
# Provide the MeshDataTool the mesh
|
||||
surface_tool.create_from(mesh, 0)
|
||||
var array_mesh = surface_tool.commit()
|
||||
data_tool.create_from_surface(array_mesh, 0)
|
||||
|
||||
# Move random values. Modify these until u happy bro!
|
||||
var noise = OpenSimplexNoise.new()
|
||||
noise.period = rand_range(32, 128)
|
||||
var ampl = rand_range(0.4, 1.3)
|
||||
|
||||
# Iterate through each vertex in the mesh
|
||||
for i in range(data_tool.get_vertex_count()):
|
||||
var vertex = data_tool.get_vertex(i)
|
||||
|
||||
# Provide a noise value to the vertex
|
||||
var normal = vertex.normalized()
|
||||
var u = normal.x * noise.period
|
||||
var v = normal.y * noise.period
|
||||
var noise_value = noise.get_noise_2d(u, v)
|
||||
vertex = vertex + ((normal * noise_value) * ampl)
|
||||
|
||||
data_tool.set_vertex(i, vertex)
|
||||
|
||||
# Clean up
|
||||
for s in range(array_mesh.get_surface_count()):
|
||||
array_mesh.surface_remove(s)
|
||||
|
||||
# Build the mesh from the MeshDataTool with the SurfaceTool
|
||||
data_tool.commit_to_surface(array_mesh)
|
||||
surface_tool.begin(Mesh.PRIMITIVE_TRIANGLES)
|
||||
surface_tool.create_from(array_mesh, 0)
|
||||
surface_tool.generate_normals()
|
||||
|
||||
# Create the instansiate and add it as well as the leaves
|
||||
var mesh_instance = MeshInstance.new()
|
||||
mesh_instance.mesh = surface_tool.commit()
|
||||
mesh_instance.material_override = generate_random_material()
|
||||
|
||||
if leaves != null:
|
||||
add_child(leaves)
|
||||
leaves.translation = Vector3(0, mesh.height, 0)
|
||||
add_child(mesh_instance)
|
||||
|
||||
mesh_instance.translation = Vector3(0, mesh.height * 0.5, 0)
|
||||
|
||||
# genereates a new material with a random color
|
||||
func generate_random_material():
|
||||
var material = SpatialMaterial.new()
|
||||
material.albedo_color = Color(rand_range(0, 1), rand_range(0, 1), rand_range(0, 1))
|
||||
return material
|
||||
152
crickets/src/Leave.gd
Normal file
152
crickets/src/Leave.gd
Normal file
|
|
@ -0,0 +1,152 @@
|
|||
extends Spatial
|
||||
class_name Leaves
|
||||
|
||||
# This script is more or less ported from an article written by Peter Winslow on
|
||||
# how to generate procedural planets in unity. Some adjustments has been made to fit
|
||||
# the Godot Engine.
|
||||
|
||||
var polygons = []
|
||||
var m_verticies = []
|
||||
var subdivisions = 1
|
||||
var surface_tool : SurfaceTool = null
|
||||
var noise = null
|
||||
|
||||
func _init(subdivisions):
|
||||
self.subdivisions = subdivisions
|
||||
|
||||
generate_icosphere()
|
||||
subdivide_icosphere()
|
||||
generate_mesh()
|
||||
|
||||
|
||||
func generate_icosphere():
|
||||
|
||||
var t = (1.0 + sqrt(5.0)) / 2
|
||||
|
||||
m_verticies.push_back(Vector3(-1, t, 0).normalized())
|
||||
m_verticies.push_back(Vector3(1, t, 0).normalized())
|
||||
m_verticies.push_back(Vector3(-1, -t, 0).normalized())
|
||||
m_verticies.push_back(Vector3(1, -t, 0).normalized())
|
||||
m_verticies.push_back(Vector3(0, -1, t).normalized())
|
||||
m_verticies.push_back(Vector3(0, 1, t).normalized())
|
||||
m_verticies.push_back(Vector3(0, -1, -t).normalized())
|
||||
m_verticies.push_back(Vector3(0, 1, -t).normalized())
|
||||
m_verticies.push_back(Vector3(t, 0, -1).normalized())
|
||||
m_verticies.push_back(Vector3(t, 0, 1).normalized())
|
||||
m_verticies.push_back(Vector3(-t, 0, -1).normalized())
|
||||
m_verticies.push_back(Vector3(-t, 0, 1).normalized())
|
||||
|
||||
# polygons.push_back(Polygon.new(0, 11, 5))
|
||||
# polygons.push_back(Polygon.new(0, 5, 1))
|
||||
# polygons.push_back(Polygon.new(0, 1, 7))
|
||||
# polygons.push_back(Polygon.new(0, 7, 10))
|
||||
# polygons.push_back(Polygon.new(0, 10, 11))
|
||||
# polygons.push_back(Polygon.new(1, 5, 9))
|
||||
# polygons.push_back(Polygon.new(5, 11, 4))
|
||||
# polygons.push_back(Polygon.new(11, 10, 2))
|
||||
# polygons.push_back(Polygon.new(10, 7, 6))
|
||||
# polygons.push_back(Polygon.new(7, 1, 8))
|
||||
# polygons.push_back(Polygon.new(3, 9, 4))
|
||||
# polygons.push_back(Polygon.new(3, 4, 2))
|
||||
# polygons.push_back(Polygon.new(3, 2, 6))
|
||||
# polygons.push_back(Polygon.new(3, 6, 8))
|
||||
# polygons.push_back(Polygon.new(3, 8, 9))
|
||||
# polygons.push_back(Polygon.new(4, 9, 5))
|
||||
# polygons.push_back(Polygon.new(2, 4, 11))
|
||||
# polygons.push_back(Polygon.new(6, 2, 10))
|
||||
# polygons.push_back(Polygon.new(8, 6, 7))
|
||||
# polygons.push_back(Polygon.new(9, 8, 1))
|
||||
|
||||
|
||||
func subdivide_icosphere():
|
||||
|
||||
var mid_point_cache = {}
|
||||
|
||||
for i in subdivisions:
|
||||
var new_poly = []
|
||||
|
||||
for poly in polygons:
|
||||
var a = poly.verticies[2]
|
||||
var b = poly.verticies[1]
|
||||
var c = poly.verticies[0]
|
||||
|
||||
var ab = get_mid(mid_point_cache, a, b)
|
||||
var bc = get_mid(mid_point_cache, b, c)
|
||||
var ca = get_mid(mid_point_cache, c, a)
|
||||
|
||||
new_poly.push_back(Polygon.new(a, ab, ca))
|
||||
new_poly.push_back(Polygon.new(b, bc, ab))
|
||||
new_poly.push_back(Polygon.new(c, ca, bc))
|
||||
new_poly.push_back(Polygon.new(ab, bc, ca))
|
||||
|
||||
polygons = new_poly
|
||||
|
||||
|
||||
func generate_mesh():
|
||||
|
||||
randomize()
|
||||
noise = OpenSimplexNoise.new()
|
||||
noise.seed = randi()
|
||||
surface_tool = SurfaceTool.new()
|
||||
surface_tool.begin(Mesh.PRIMITIVE_TRIANGLES)
|
||||
for i in polygons.size():
|
||||
var poly = polygons[i]
|
||||
|
||||
for index in poly.verticies.size():
|
||||
var vertex = m_verticies[poly.verticies[(poly.verticies.size() - 1) - index]]
|
||||
|
||||
var normal = vertex.normalized()
|
||||
var u = normal.x * noise.period
|
||||
var v = normal.y * noise.period
|
||||
var noise_value = noise.get_noise_2d(u, v)
|
||||
vertex = vertex + ((normal * noise_value) * 0.8)
|
||||
|
||||
surface_tool.add_vertex(vertex)
|
||||
|
||||
|
||||
surface_tool.index()
|
||||
surface_tool.generate_normals()
|
||||
|
||||
var mesh = surface_tool.commit()
|
||||
var mesh_instance = MeshInstance.new()
|
||||
mesh_instance.material_override = generate_random_material()
|
||||
mesh_instance.mesh = mesh
|
||||
add_child(mesh_instance)
|
||||
|
||||
mesh_instance.scale = Vector3(rand_range(0.5, 1.5),rand_range(0.5, 1.5),rand_range(0.5, 1.5))
|
||||
mesh_instance.scale *= rand_range(1, 1.5)
|
||||
|
||||
|
||||
|
||||
func get_mid(cache : Dictionary, index_a, index_b):
|
||||
var smaller = min(index_a, index_b)
|
||||
var greater = max(index_a, index_b)
|
||||
var key = (smaller << 16) + greater
|
||||
|
||||
if cache.has(key):
|
||||
return cache.get(key)
|
||||
|
||||
var p1 = m_verticies[index_a]
|
||||
var p2 = m_verticies[index_b]
|
||||
var middle = lerp(p1, p2, 0.5).normalized()
|
||||
|
||||
var ret = m_verticies.size()
|
||||
m_verticies.push_back(middle)
|
||||
|
||||
cache[key] = ret
|
||||
return ret
|
||||
|
||||
class Polygon:
|
||||
var verticies = []
|
||||
func _init(a, b, c):
|
||||
verticies.push_back(a)
|
||||
verticies.push_back(b)
|
||||
verticies.push_back(c)
|
||||
|
||||
|
||||
func generate_random_material():
|
||||
var material = SpatialMaterial.new()
|
||||
material.albedo_color = Color(rand_range(0, 1), rand_range(0, 1), rand_range(0, 1))
|
||||
return material
|
||||
|
||||
|
||||
19
crickets/src/Sandbox.gd
Normal file
19
crickets/src/Sandbox.gd
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
extends Spatial
|
||||
|
||||
var tree = null
|
||||
var tree2 = null
|
||||
|
||||
func _ready():
|
||||
randomize()
|
||||
for i in range(32):
|
||||
tree = PolyTree.new()
|
||||
tree.set_preset(floor(i/2)+1)
|
||||
tree.look_at_from_position(Vector3(rand_range(60, 120), -0.7, rand_range(20, 120)), Vector3.ZERO, Vector3.UP)
|
||||
add_child(tree)
|
||||
|
||||
for i in range(16):
|
||||
tree2 = PolyTree2.new()
|
||||
tree2.set_preset(i)
|
||||
tree2.look_at_from_position(Vector3(rand_range(60, 120), -0.7, rand_range(90, 140)), Vector3.ZERO, Vector3.UP)
|
||||
add_child(tree2)
|
||||
|
||||
59
crickets/src/Sandbox.tscn
Normal file
59
crickets/src/Sandbox.tscn
Normal file
|
|
@ -0,0 +1,59 @@
|
|||
[gd_scene load_steps=8 format=2]
|
||||
|
||||
[ext_resource path="res://crickets/Player.tscn" type="PackedScene" id=1]
|
||||
[ext_resource path="res://crickets/src/Sandbox.gd" type="Script" id=2]
|
||||
|
||||
[sub_resource type="SpatialMaterial" id=5]
|
||||
albedo_color = Color( 0.878431, 0.858824, 0.654902, 1 )
|
||||
|
||||
[sub_resource type="CubeMesh" id=6]
|
||||
material = SubResource( 5 )
|
||||
size = Vector3( 10000, 2, 10000 )
|
||||
|
||||
[sub_resource type="BoxShape" id=7]
|
||||
extents = Vector3( 5000, 1, 5000 )
|
||||
|
||||
[sub_resource type="ProceduralSky" id=3]
|
||||
sky_top_color = Color( 0.509804, 0.733333, 0.854902, 1 )
|
||||
sky_horizon_color = Color( 0.137255, 0.290196, 0.372549, 1 )
|
||||
ground_bottom_color = Color( 0.137255, 0.290196, 0.372549, 1 )
|
||||
ground_horizon_color = Color( 0.137255, 0.290196, 0.372549, 1 )
|
||||
|
||||
[sub_resource type="Environment" id=4]
|
||||
background_mode = 2
|
||||
background_sky = SubResource( 3 )
|
||||
fog_color = Color( 0.137255, 0.290196, 0.372549, 1 )
|
||||
fog_sun_amount = 0.14
|
||||
|
||||
[node name="Sandbox" type="Spatial"]
|
||||
script = ExtResource( 2 )
|
||||
|
||||
[node name="StaticBody" type="StaticBody" parent="."]
|
||||
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -1, 0 )
|
||||
|
||||
[node name="MeshInstance" type="MeshInstance" parent="StaticBody"]
|
||||
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 4.88931, -0.187765, -0.937543 )
|
||||
mesh = SubResource( 6 )
|
||||
skeleton = NodePath("../..")
|
||||
|
||||
[node name="CollisionShape" type="CollisionShape" parent="StaticBody"]
|
||||
shape = SubResource( 7 )
|
||||
|
||||
[node name="DirectionalLight" type="DirectionalLight" parent="."]
|
||||
transform = Transform( 1, 0, 0, 0, -0.5, 0.866025, 0, -0.866025, -0.5, 1.33205, 3.53215, -1.68148 )
|
||||
light_color = Color( 0.337255, 0.87451, 0.243137, 1 )
|
||||
light_indirect_energy = 10.0
|
||||
light_negative = true
|
||||
light_specular = 1.38
|
||||
light_bake_mode = 2
|
||||
shadow_enabled = true
|
||||
shadow_color = Color( 0.47451, 0.47451, 0.47451, 1 )
|
||||
shadow_bias = 0.0
|
||||
directional_shadow_blend_splits = true
|
||||
directional_shadow_max_distance = 10.0
|
||||
|
||||
[node name="WorldEnvironment" type="WorldEnvironment" parent="."]
|
||||
environment = SubResource( 4 )
|
||||
|
||||
[node name="Player" parent="." instance=ExtResource( 1 )]
|
||||
transform = Transform( -0.258819, 0, -0.965926, 0, 1, 0, 0.965926, 0, -0.258819, 0, 3.52113, 0.98772 )
|
||||
89
crickets/src/Tree.gd
Normal file
89
crickets/src/Tree.gd
Normal file
|
|
@ -0,0 +1,89 @@
|
|||
extends Spatial
|
||||
class_name PolyTree
|
||||
|
||||
|
||||
|
||||
|
||||
export (String, MULTILINE) var patch = "res://crickets/cricket.pd"
|
||||
export (float, 0, 100) var audible_range_max = 30.0
|
||||
export (float, 1, 32) var preset = 1
|
||||
|
||||
var _my_patch = "res://crickets/cricket.pd"
|
||||
var _my_id = 0
|
||||
|
||||
func set_size(size):
|
||||
$CollisionShape.shape.radius = size
|
||||
$MeshInstance.mesh.radius = size
|
||||
$MeshInstance.mesh.height = size * 2
|
||||
|
||||
func set_freq(freq):
|
||||
Global._gdpd.start_message(2)
|
||||
Global._gdpd.add_symbol('freq')
|
||||
Global._gdpd.add_float(freq)
|
||||
Global._gdpd.finish_list("fromGodot" + String(_my_id))
|
||||
|
||||
func set_gain(gain):
|
||||
Global._gdpd.start_message(2)
|
||||
Global._gdpd.add_symbol('gain')
|
||||
Global._gdpd.add_float(gain)
|
||||
Global._gdpd.finish_list("fromGodot" + String(_my_id))
|
||||
|
||||
func set_param(param):
|
||||
Global._gdpd.start_message(param.size()+1)
|
||||
Global._gdpd.add_symbol("param")
|
||||
for i in range(param.size()):
|
||||
Global._gdpd.add_float(param[i])
|
||||
Global._gdpd.finish_list("fromGodot" + String(_my_id))
|
||||
|
||||
func set_preset(prs):
|
||||
preset = prs
|
||||
Global._gdpd.start_message(2)
|
||||
Global._gdpd.add_symbol("preset")
|
||||
Global._gdpd.add_float(prs)
|
||||
Global._gdpd.finish_list("fromGodot" + String(_my_id))
|
||||
|
||||
func set_color(color):
|
||||
$MeshInstance.material_override = SpatialMaterial.new()
|
||||
$MeshInstance.material_override.albedo_color = color
|
||||
|
||||
func _ready():
|
||||
# save patch (for export)
|
||||
# _save_patch()
|
||||
|
||||
# load patch
|
||||
|
||||
add_child(Branch.new(Leaves.new(2)))
|
||||
|
||||
_my_id = Global.load_patch(ProjectSettings.globalize_path(_my_patch))
|
||||
|
||||
# listen 'player_transform_updated' event
|
||||
Events.connect("player_transform_updated", self, "_on_Events_player_transform_updated")
|
||||
|
||||
# send 'preset'
|
||||
set_preset(preset)
|
||||
|
||||
func _on_Events_player_transform_updated(playerpos, playerheading):
|
||||
var mypos = get_global_translation()
|
||||
var mypos2d = Vector2(mypos.x, mypos.z)
|
||||
var playerpos2d = Vector2(playerpos.x, playerpos.z)
|
||||
# calculate distance
|
||||
var distance = mypos.distance_to(playerpos)
|
||||
# calculate angle
|
||||
var angle = fmod(fmod(playerpos2d.angle_to_point(mypos2d) + playerheading - PI/2, PI*2) + PI*2, PI*2)
|
||||
if angle > PI:
|
||||
angle = angle - PI*2
|
||||
# (check)
|
||||
# print(str(_my_id) +" : ("+ str(distance) +","+ str(angle) +")")
|
||||
# calculate gain
|
||||
var gain = 1 - distance/audible_range_max
|
||||
# send to the patch
|
||||
Global._gdpd.start_message(3)
|
||||
Global._gdpd.add_symbol("panvol")
|
||||
Global._gdpd.add_float(gain)
|
||||
Global._gdpd.add_float(angle)
|
||||
Global._gdpd.finish_list("fromGodot" + String(_my_id))
|
||||
|
||||
|
||||
func _exit_tree():
|
||||
Global.close_patch(_my_id)
|
||||
pass
|
||||
85
crickets/src/Tree2.gd
Normal file
85
crickets/src/Tree2.gd
Normal file
|
|
@ -0,0 +1,85 @@
|
|||
extends Spatial
|
||||
class_name PolyTree2
|
||||
|
||||
|
||||
|
||||
|
||||
export (String, MULTILINE) var patch = "res://crickets/wind.pd"
|
||||
export (float, 0, 100) var audible_range_max = 40.0
|
||||
export (float, 1, 16) var preset = 1
|
||||
|
||||
var _my_patch = "res://crickets/wind.pd"
|
||||
var _my_id = 0
|
||||
|
||||
func set_size(size):
|
||||
$CollisionShape.shape.radius = size
|
||||
$MeshInstance.mesh.radius = size
|
||||
$MeshInstance.mesh.height = size * 2
|
||||
|
||||
func set_freq(freq):
|
||||
Global._gdpd.start_message(2)
|
||||
Global._gdpd.add_symbol('freq')
|
||||
Global._gdpd.add_float(freq)
|
||||
Global._gdpd.finish_list("fromGodot" + String(_my_id))
|
||||
|
||||
func set_gain(gain):
|
||||
Global._gdpd.start_message(2)
|
||||
Global._gdpd.add_symbol('gain')
|
||||
Global._gdpd.add_float(gain)
|
||||
Global._gdpd.finish_list("fromGodot" + String(_my_id))
|
||||
|
||||
func set_param(param):
|
||||
Global._gdpd.start_message(param.size()+1)
|
||||
Global._gdpd.add_symbol("param")
|
||||
for i in range(param.size()):
|
||||
Global._gdpd.add_float(param[i])
|
||||
Global._gdpd.finish_list("fromGodot" + String(_my_id))
|
||||
|
||||
func set_preset(prs):
|
||||
preset = prs
|
||||
Global._gdpd.start_message(2)
|
||||
Global._gdpd.add_symbol("preset")
|
||||
Global._gdpd.add_float(prs)
|
||||
Global._gdpd.finish_list("fromGodot" + String(_my_id))
|
||||
|
||||
func set_color(color):
|
||||
$MeshInstance.material_override = SpatialMaterial.new()
|
||||
$MeshInstance.material_override.albedo_color = color
|
||||
|
||||
func _ready():
|
||||
|
||||
add_child(Branch2.new(Leaves.new(2)))
|
||||
|
||||
_my_id = Global.load_patch(ProjectSettings.globalize_path(_my_patch))
|
||||
|
||||
# listen 'player_transform_updated' event
|
||||
Events.connect("player_transform_updated", self, "_on_Events_player_transform_updated")
|
||||
|
||||
# send 'preset'
|
||||
set_preset(preset)
|
||||
|
||||
func _on_Events_player_transform_updated(playerpos, playerheading):
|
||||
var mypos = get_global_translation()
|
||||
var mypos2d = Vector2(mypos.x, mypos.z)
|
||||
var playerpos2d = Vector2(playerpos.x, playerpos.z)
|
||||
# calculate distance
|
||||
var distance = mypos.distance_to(playerpos)
|
||||
# calculate angle
|
||||
var angle = fmod(fmod(playerpos2d.angle_to_point(mypos2d) + playerheading - PI/2, PI*2) + PI*2, PI*2)
|
||||
if angle > PI:
|
||||
angle = angle - PI*2
|
||||
# (check)
|
||||
# print(str(_my_id) +" : ("+ str(distance) +","+ str(angle) +")")
|
||||
# calculate gain
|
||||
var gain = 1 - distance/audible_range_max
|
||||
# send to the patch
|
||||
Global._gdpd.start_message(3)
|
||||
Global._gdpd.add_symbol("panvol")
|
||||
Global._gdpd.add_float(gain)
|
||||
Global._gdpd.add_float(angle)
|
||||
Global._gdpd.finish_list("fromGodot" + String(_my_id))
|
||||
|
||||
|
||||
func _exit_tree():
|
||||
Global.close_patch(_my_id)
|
||||
pass
|
||||
204
crickets/wind.pd
Normal file
204
crickets/wind.pd
Normal file
|
|
@ -0,0 +1,204 @@
|
|||
#N canvas 0 82 446 513 12;
|
||||
#X obj 21 22 r fromGodot\$0;
|
||||
#X obj 21 46 list trim;
|
||||
#X obj 303 253 hsl 100 20 -1 1 0 0 empty empty empty -2 -10 0 12 #fcfcfc #000000 #000000 0 1;
|
||||
#X obj 300 349 line~;
|
||||
#X msg 300 325 \$1 100;
|
||||
#X obj 300 278 expr ($f1 + 1)/8;
|
||||
#X floatatom 300 302 5 0 0 0 - - - 0;
|
||||
#N canvas 68 97 450 300 pan2~ 0;
|
||||
#X obj 51 98 cos~;
|
||||
#X obj 111 98 cos~;
|
||||
#X obj 33 128 *~;
|
||||
#X obj 93 128 *~;
|
||||
#X obj 33 158 outlet~;
|
||||
#X obj 93 158 outlet~;
|
||||
#X obj 33 24 inlet~;
|
||||
#X obj 111 24 inlet~;
|
||||
#X obj 111 74 +~ 0.75;
|
||||
#X connect 0 0 2 1;
|
||||
#X connect 1 0 3 1;
|
||||
#X connect 2 0 4 0;
|
||||
#X connect 3 0 5 0;
|
||||
#X connect 6 0 2 0;
|
||||
#X connect 6 0 3 0;
|
||||
#X connect 7 0 8 0;
|
||||
#X connect 7 0 0 0;
|
||||
#X connect 8 0 1 0;
|
||||
#X restore 199 437 pd pan2~;
|
||||
#X obj 199 467 dac~ 1 2;
|
||||
#X obj 199 407 *~;
|
||||
#X obj 189 127 unpack f f;
|
||||
#X floatatom 296 159 5 0 0 0 - - - 0;
|
||||
#X obj 296 182 sin;
|
||||
#X floatatom 296 206 5 0 0 0 - - - 0;
|
||||
#X obj 21 120 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000 #000000;
|
||||
#X obj 361 21 loadbang;
|
||||
#X obj 21 70 route bang panvol param preset;
|
||||
#X obj 20 470 *~;
|
||||
#X obj 38 446 vline~;
|
||||
#X msg 38 422 0 \, 1 1000 300;
|
||||
#X obj 38 398 loadbang;
|
||||
#X msg 361 51 \; pd dsp 1;
|
||||
#N canvas 478 23 962 799 synth 0;
|
||||
#X obj 403 110 inlet;
|
||||
#X obj 404 513 +;
|
||||
#X floatatom 457 184 5 0 0 0 - - - 0;
|
||||
#X floatatom 499 184 5 0 0 0 - - - 0;
|
||||
#X floatatom 374 184 5 0 0 0 - - - 0;
|
||||
#X floatatom 416 184 5 0 0 0 - - - 0;
|
||||
#X obj 403 141 unpack f f f f f;
|
||||
#X floatatom 544 184 5 0 0 0 - - - 0;
|
||||
#X obj 463 110 r \$0-preset;
|
||||
#X obj 697 720 s \$0-preset;
|
||||
#X obj 630 241 inlet;
|
||||
#X obj 630 265 sel 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16;
|
||||
#X obj 243 335 mtof;
|
||||
#X floatatom 243 312 5 0 150 0 - \$0-pit - 0;
|
||||
#X obj 234 282 noise~;
|
||||
#X floatatom 243 360 5 0 0 0 - - - 0;
|
||||
#X obj 234 418 bp~;
|
||||
#X text 275 420 band-pass filter;
|
||||
#X text 288 360 <= cutoff (Hertz);
|
||||
#X obj 302 517 *~;
|
||||
#X obj 401 512 hsl 60 19 0 1 0 0 empty empty empty -2 -10 0 12 #fcfcfc #000000 #000000 0 1;
|
||||
#X obj 345 302 line;
|
||||
#X floatatom 299 400 5 0 0 0 - - - 0;
|
||||
#X obj 279 42 tgl 19 0 empty empty empty 0 -10 0 12 #fcfcfc #000000 #000000 0 1;
|
||||
#X obj 280 127 random 3;
|
||||
#X obj 280 151 sel 0 1 2;
|
||||
#X obj 354 238 pack 0 0;
|
||||
#X msg 352 272 \$1 \$2;
|
||||
#X obj 185 157 + 500;
|
||||
#X obj 248 12 loadbang;
|
||||
#X floatatom 403 552 5 0 0 0 - - - 0;
|
||||
#X obj 185 130 random 800;
|
||||
#X obj 280 72 retro 500 2500;
|
||||
#X obj 301 562 outlet~;
|
||||
#X msg 770 305 915 987 1070 290 0.8;
|
||||
#X msg 770 329 103 126 205 10 0.8;
|
||||
#X msg 770 353 260 366 317 61 0.8;
|
||||
#X msg 771 378 123 80 184 22 0.9;
|
||||
#X msg 770 401 1833 1998 2100 272 0.7;
|
||||
#X msg 770 425 415 498 286 323 0.9;
|
||||
#X msg 770 449 1567 1648 1606 323 0.8;
|
||||
#X msg 770 473 195 186 150 102 0.9;
|
||||
#X msg 771 498 219 294 279 269 1;
|
||||
#X msg 770 521 330 305 354 31 0.7;
|
||||
#X msg 770 545 92 55 66 22 0.8;
|
||||
#X msg 770 569 37 43 22 9 0.9;
|
||||
#X msg 770 593 3183 3117 3224 538 0.6;
|
||||
#X msg 770 617 2878 2589 2357 996 0.6;
|
||||
#X msg 770 641 378 396 267 996 0.8;
|
||||
#X msg 770 665 538 567 735 191 0.7;
|
||||
#X connect 0 0 6 0;
|
||||
#X connect 2 0 26 0;
|
||||
#X connect 3 0 22 0;
|
||||
#X connect 4 0 26 0;
|
||||
#X connect 5 0 26 0;
|
||||
#X connect 6 0 4 0;
|
||||
#X connect 6 1 5 0;
|
||||
#X connect 6 2 2 0;
|
||||
#X connect 6 3 3 0;
|
||||
#X connect 6 4 7 0;
|
||||
#X connect 7 0 20 0;
|
||||
#X connect 8 0 6 0;
|
||||
#X connect 10 0 11 0;
|
||||
#X connect 11 0 34 0;
|
||||
#X connect 11 1 35 0;
|
||||
#X connect 11 2 36 0;
|
||||
#X connect 11 3 37 0;
|
||||
#X connect 11 4 38 0;
|
||||
#X connect 11 5 39 0;
|
||||
#X connect 11 6 40 0;
|
||||
#X connect 11 7 41 0;
|
||||
#X connect 11 8 43 0;
|
||||
#X connect 11 9 44 0;
|
||||
#X connect 11 10 45 0;
|
||||
#X connect 11 11 46 0;
|
||||
#X connect 11 12 47 0;
|
||||
#X connect 11 13 48 0;
|
||||
#X connect 11 14 49 0;
|
||||
#X connect 11 15 42 0;
|
||||
#X connect 12 0 15 0;
|
||||
#X connect 13 0 12 0;
|
||||
#X connect 14 0 16 0;
|
||||
#X connect 15 0 16 1;
|
||||
#X connect 16 0 19 0;
|
||||
#X connect 19 0 33 0;
|
||||
#X connect 20 0 19 1;
|
||||
#X connect 20 0 30 0;
|
||||
#X connect 21 0 15 0;
|
||||
#X connect 22 0 16 2;
|
||||
#X connect 23 0 32 0;
|
||||
#X connect 24 0 25 0;
|
||||
#X connect 25 0 4 0;
|
||||
#X connect 25 1 5 0;
|
||||
#X connect 25 2 2 0;
|
||||
#X connect 26 0 27 0;
|
||||
#X connect 27 0 21 0;
|
||||
#X connect 28 0 26 1;
|
||||
#X connect 29 0 23 0;
|
||||
#X connect 31 0 28 0;
|
||||
#X connect 32 0 24 0;
|
||||
#X connect 32 0 31 0;
|
||||
#X connect 34 0 9 0;
|
||||
#X connect 35 0 9 0;
|
||||
#X connect 36 0 9 0;
|
||||
#X connect 37 0 9 0;
|
||||
#X connect 38 0 9 0;
|
||||
#X connect 39 0 9 0;
|
||||
#X connect 40 0 9 0;
|
||||
#X connect 41 0 9 0;
|
||||
#X connect 42 0 9 0;
|
||||
#X connect 43 0 9 0;
|
||||
#X connect 44 0 9 0;
|
||||
#X connect 45 0 9 0;
|
||||
#X connect 46 0 9 0;
|
||||
#X connect 47 0 9 0;
|
||||
#X connect 48 0 9 0;
|
||||
#X connect 49 0 9 0;
|
||||
#X restore 40 300 pd synth;
|
||||
#X obj 208 330 *~;
|
||||
#X obj 189 264 line~;
|
||||
#X msg 189 240 \$1 100;
|
||||
#X floatatom 189 177 5 0 0 0 - - - 0;
|
||||
#X obj 132 310 switch~;
|
||||
#X obj 132 286 tgl 19 0 empty empty empty 0 -10 0 12 #fcfcfc #000000 #000000 0 1;
|
||||
#X obj 132 262 change;
|
||||
#X text 89 155 switch on/off before 0 to stop startup pops, f 12;
|
||||
#X obj 189 216 max 0;
|
||||
#X obj 132 238 > -0.3;
|
||||
#X connect 0 0 1 0;
|
||||
#X connect 1 0 16 0;
|
||||
#X connect 2 0 5 0;
|
||||
#X connect 3 0 7 1;
|
||||
#X connect 4 0 3 0;
|
||||
#X connect 5 0 6 0;
|
||||
#X connect 6 0 4 0;
|
||||
#X connect 7 0 8 0;
|
||||
#X connect 7 1 8 1;
|
||||
#X connect 9 0 7 0;
|
||||
#X connect 10 0 26 0;
|
||||
#X connect 10 1 11 0;
|
||||
#X connect 11 0 12 0;
|
||||
#X connect 12 0 13 0;
|
||||
#X connect 13 0 2 0;
|
||||
#X connect 16 0 14 0;
|
||||
#X connect 16 1 10 0;
|
||||
#X connect 16 2 22 0;
|
||||
#X connect 16 3 22 1;
|
||||
#X connect 18 0 17 1;
|
||||
#X connect 19 0 18 0;
|
||||
#X connect 20 0 19 0;
|
||||
#X connect 22 0 9 0;
|
||||
#X connect 23 0 9 1;
|
||||
#X connect 24 0 23 0;
|
||||
#X connect 24 0 23 1;
|
||||
#X connect 25 0 24 0;
|
||||
#X connect 26 0 31 0;
|
||||
#X connect 26 0 32 0;
|
||||
#X connect 28 0 27 0;
|
||||
#X connect 29 0 28 0;
|
||||
#X connect 31 0 25 0;
|
||||
#X connect 32 0 29 0;
|
||||
73
export_presets.cfg
Normal file
73
export_presets.cfg
Normal file
|
|
@ -0,0 +1,73 @@
|
|||
[preset.0]
|
||||
|
||||
name="Mac OSX"
|
||||
platform="Mac OSX"
|
||||
runnable=true
|
||||
custom_features=""
|
||||
export_filter="all_resources"
|
||||
include_filter=""
|
||||
exclude_filter=""
|
||||
export_path="./Sands and Waves (cosmic runner).dmg"
|
||||
script_export_mode=1
|
||||
script_encryption_key=""
|
||||
|
||||
[preset.0.options]
|
||||
|
||||
custom_template/debug=""
|
||||
custom_template/release=""
|
||||
application/name=""
|
||||
application/info="Made with Godot Engine"
|
||||
application/icon=""
|
||||
application/identifier="org.sandreceive.cosmicrunner"
|
||||
application/signature=""
|
||||
application/app_category="Games"
|
||||
application/short_version="1.0"
|
||||
application/version="1.0"
|
||||
application/copyright=""
|
||||
display/high_res=false
|
||||
privacy/microphone_usage_description=""
|
||||
privacy/camera_usage_description=""
|
||||
privacy/location_usage_description=""
|
||||
privacy/address_book_usage_description=""
|
||||
privacy/calendar_usage_description=""
|
||||
privacy/photos_library_usage_description=""
|
||||
privacy/desktop_folder_usage_description=""
|
||||
privacy/documents_folder_usage_description=""
|
||||
privacy/downloads_folder_usage_description=""
|
||||
privacy/network_volumes_usage_description=""
|
||||
privacy/removable_volumes_usage_description=""
|
||||
codesign/enable=true
|
||||
codesign/identity=""
|
||||
codesign/timestamp=false
|
||||
codesign/hardened_runtime=false
|
||||
codesign/replace_existing_signature=true
|
||||
codesign/entitlements/custom_file=""
|
||||
codesign/entitlements/allow_jit_code_execution=false
|
||||
codesign/entitlements/allow_unsigned_executable_memory=false
|
||||
codesign/entitlements/allow_dyld_environment_variables=false
|
||||
codesign/entitlements/disable_library_validation=true
|
||||
codesign/entitlements/audio_input=false
|
||||
codesign/entitlements/camera=false
|
||||
codesign/entitlements/location=false
|
||||
codesign/entitlements/address_book=false
|
||||
codesign/entitlements/calendars=false
|
||||
codesign/entitlements/photos_library=false
|
||||
codesign/entitlements/apple_events=false
|
||||
codesign/entitlements/debugging=false
|
||||
codesign/entitlements/app_sandbox/enabled=false
|
||||
codesign/entitlements/app_sandbox/network_server=false
|
||||
codesign/entitlements/app_sandbox/network_client=false
|
||||
codesign/entitlements/app_sandbox/device_usb=false
|
||||
codesign/entitlements/app_sandbox/device_bluetooth=false
|
||||
codesign/entitlements/app_sandbox/files_downloads=0
|
||||
codesign/entitlements/app_sandbox/files_pictures=0
|
||||
codesign/entitlements/app_sandbox/files_music=0
|
||||
codesign/entitlements/app_sandbox/files_movies=0
|
||||
codesign/custom_options=PoolStringArray( )
|
||||
notarization/enable=false
|
||||
notarization/apple_id_name=""
|
||||
notarization/apple_id_password=""
|
||||
notarization/apple_team_id=""
|
||||
texture_format/s3tc=true
|
||||
texture_format/etc=false
|
||||
texture_format/etc2=false
|
||||
BIN
icon.png
Normal file
BIN
icon.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 3.2 KiB |
253
mirrors/Dotdots.pd
Normal file
253
mirrors/Dotdots.pd
Normal file
|
|
@ -0,0 +1,253 @@
|
|||
#N canvas 217 167 548 621 12;
|
||||
#X obj 21 22 r fromGodot\$0;
|
||||
#X obj 21 46 list trim;
|
||||
#X obj 303 253 hsl 100 20 -1 1 0 0 empty empty empty -2 -10 0 12 #fcfcfc #000000 #000000 0 1;
|
||||
#X obj 300 349 line~;
|
||||
#X msg 300 325 \$1 100;
|
||||
#X obj 300 278 expr ($f1 + 1)/8;
|
||||
#X floatatom 300 302 5 0 0 0 - - - 0;
|
||||
#N canvas 68 97 450 300 pan2~ 0;
|
||||
#X obj 51 98 cos~;
|
||||
#X obj 111 98 cos~;
|
||||
#X obj 33 128 *~;
|
||||
#X obj 93 128 *~;
|
||||
#X obj 33 158 outlet~;
|
||||
#X obj 93 158 outlet~;
|
||||
#X obj 33 24 inlet~;
|
||||
#X obj 111 24 inlet~;
|
||||
#X obj 111 74 +~ 0.75;
|
||||
#X connect 0 0 2 1;
|
||||
#X connect 1 0 3 1;
|
||||
#X connect 2 0 4 0;
|
||||
#X connect 3 0 5 0;
|
||||
#X connect 6 0 2 0;
|
||||
#X connect 6 0 3 0;
|
||||
#X connect 7 0 8 0;
|
||||
#X connect 7 0 0 0;
|
||||
#X connect 8 0 1 0;
|
||||
#X restore 199 437 pd pan2~;
|
||||
#X obj 199 467 dac~ 1 2;
|
||||
#X obj 199 408 *~;
|
||||
#X obj 189 127 unpack f f;
|
||||
#X floatatom 296 159 5 0 0 0 - - - 0;
|
||||
#X obj 296 182 sin;
|
||||
#X floatatom 296 206 5 0 0 0 - - - 0;
|
||||
#X obj 21 120 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000 #000000;
|
||||
#X obj 361 21 loadbang;
|
||||
#X msg 361 81 \; pd dsp 1;
|
||||
#X obj 21 70 route bang panvol param preset;
|
||||
#X obj 361 45 del 300;
|
||||
#N canvas 404 97 1087 864 Dotdots 0;
|
||||
#X obj 107 15 inlet;
|
||||
#X obj 73 723 outlet~;
|
||||
#X obj 542 128 inlet;
|
||||
#X obj 157 15 r \$0-preset;
|
||||
#X obj 487 678 s \$0-preset;
|
||||
#X obj 76 438 expr~ round($v1/$f2);
|
||||
#X floatatom 225 416 5 0 3 0 - - - 0;
|
||||
#X obj 75 662 *~;
|
||||
#X obj 75 690 *~;
|
||||
#X floatatom 75 386 5 0 0 0 - - - 0;
|
||||
#X obj 280 325 hsl 162 19 1 16 0 0 empty empty empty -2 -10 0 12 #c6ffc7 #000000 #000000 0 1;
|
||||
#X floatatom 276 380 5 0 0 0 - - - 0;
|
||||
#X obj 277 354 int;
|
||||
#X obj 277 406 expr pow (2 \, $f1)-1;
|
||||
#X floatatom 277 430 5 0 0 0 - - - 0;
|
||||
#X text 316 381 bitDepth;
|
||||
#X text 319 430 resolution;
|
||||
#X obj 276 456 expr 1/$f1;
|
||||
#X obj 277 276 snapshot~;
|
||||
#X obj 354 226 metro 100;
|
||||
#X obj 354 201 tgl 19 0 empty empty empty 0 -10 0 12 #fcfcfc #000000 #000000 0 1;
|
||||
#X floatatom 277 300 5 0 0 0 - - - 0;
|
||||
#X floatatom 110 149 5 0 0 0 - - - 0;
|
||||
#X obj 277 252 *~ 8;
|
||||
#X obj 76 412 osc~;
|
||||
#X obj 276 227 phasor~;
|
||||
#X obj 68 301 snapshot~;
|
||||
#X obj 138 384 metro 100;
|
||||
#X obj 136 358 tgl 19 0 empty empty empty 0 -10 0 12 #fcfcfc #000000 #000000 0 1;
|
||||
#X obj 68 228 osc~;
|
||||
#X obj 68 252 +~ 1;
|
||||
#X floatatom 64 149 5 0 0 0 - - - 0;
|
||||
#X obj 355 150 loadbang;
|
||||
#X msg 356 173 1;
|
||||
#X obj 135 310 loadbang;
|
||||
#X msg 136 333 1;
|
||||
#X floatatom 240 146 5 0 0 0 - - - 0;
|
||||
#X obj 78 553 vcf~ 1;
|
||||
#X obj 97 523 sig~;
|
||||
#X floatatom 153 148 5 0 0 0 - - - 0;
|
||||
#X floatatom 197 146 5 0 0 0 - - - 0;
|
||||
#X obj 68 276 *~ 10;
|
||||
#X floatatom 284 146 5 0 0 0 - - - 0;
|
||||
#X obj 134 113 unpack f f f f f f;
|
||||
#X floatatom 674 91 5 0 0 0 - - - 0;
|
||||
#X obj 674 119 s rev_a;
|
||||
#X obj 673 62 line;
|
||||
#X msg 666 7 3 2000;
|
||||
#X msg 732 7 10 2000;
|
||||
#X msg 610 8 0 2000;
|
||||
#X obj 542 168 sel 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23, f 65;
|
||||
#X msg 542 222 27.1 27 516 355.9 1.53 0.11;
|
||||
#X msg 552 246 2.92 500 776 451 3.3 1;
|
||||
#X msg 562 270 95 1208 447 1228 0.84 12;
|
||||
#X msg 572 294 111.1 1 339 372 2.9 15;
|
||||
#X msg 582 318 512 0.78 376 543 0.63 8.56;
|
||||
#X msg 592 342 362.1 0 1620 709 0.75 929;
|
||||
#X msg 602 366 110.1 0.2 388 607.4 7.99 65;
|
||||
#X msg 612 390 3 17 445 1413 -0.32 0.93;
|
||||
#X msg 622 414 11.42 0.16 653 1026 0.52 908.2;
|
||||
#X msg 632 438 980.7 0.53 608 1109 0.56 282.4;
|
||||
#X msg 642 462 486 0.05 135 297 0.75 458;
|
||||
#X msg 652 486 427 0.04 122 384 0.89 66;
|
||||
#X msg 660 510 27.1 27 516 355.9 1.53 0.11;
|
||||
#X msg 671 537 2.92 500 776 451 3.3 1;
|
||||
#X msg 684 563 95 1208 447 1228 0.84 12;
|
||||
#X msg 697 589 111.1 1 339 372 2.9 15;
|
||||
#X msg 704 613 512 0.78 376 543 0.63 8.56;
|
||||
#X msg 712 637 362.1 0 1620 709 0.75 929;
|
||||
#X msg 723 660 110.1 0.2 388 607.4 7.99 65;
|
||||
#X msg 732 684 3 17 445 1413 -0.32 0.93;
|
||||
#X msg 738 709 11.42 0.16 653 1026 0.52 908.2;
|
||||
#X msg 748 734 980.7 0.53 608 1109 0.56 282.4;
|
||||
#X msg 755 758 486 0.05 135 297 0.75 458;
|
||||
#X connect 0 0 43 0;
|
||||
#X connect 2 0 50 0;
|
||||
#X connect 3 0 43 0;
|
||||
#X connect 5 0 37 0;
|
||||
#X connect 6 0 5 1;
|
||||
#X connect 6 0 7 1;
|
||||
#X connect 7 0 8 0;
|
||||
#X connect 8 0 1 0;
|
||||
#X connect 9 0 24 0;
|
||||
#X connect 10 0 12 0;
|
||||
#X connect 11 0 13 0;
|
||||
#X connect 12 0 11 0;
|
||||
#X connect 13 0 14 0;
|
||||
#X connect 14 0 17 0;
|
||||
#X connect 17 0 6 0;
|
||||
#X connect 18 0 21 0;
|
||||
#X connect 19 0 18 0;
|
||||
#X connect 20 0 19 0;
|
||||
#X connect 21 0 10 0;
|
||||
#X connect 22 0 25 0;
|
||||
#X connect 23 0 18 0;
|
||||
#X connect 24 0 5 0;
|
||||
#X connect 25 0 23 0;
|
||||
#X connect 26 0 9 0;
|
||||
#X connect 27 0 26 0;
|
||||
#X connect 28 0 27 0;
|
||||
#X connect 29 0 30 0;
|
||||
#X connect 30 0 41 0;
|
||||
#X connect 31 0 29 0;
|
||||
#X connect 32 0 33 0;
|
||||
#X connect 33 0 20 0;
|
||||
#X connect 34 0 35 0;
|
||||
#X connect 35 0 28 0;
|
||||
#X connect 36 0 8 1;
|
||||
#X connect 37 0 7 0;
|
||||
#X connect 38 0 37 1;
|
||||
#X connect 39 0 38 0;
|
||||
#X connect 40 0 37 2;
|
||||
#X connect 41 0 26 0;
|
||||
#X connect 42 0 41 1;
|
||||
#X connect 43 0 31 0;
|
||||
#X connect 43 1 22 0;
|
||||
#X connect 43 2 39 0;
|
||||
#X connect 43 3 40 0;
|
||||
#X connect 43 4 36 0;
|
||||
#X connect 43 5 42 0;
|
||||
#X connect 44 0 45 0;
|
||||
#X connect 46 0 44 0;
|
||||
#X connect 47 0 46 0;
|
||||
#X connect 48 0 46 0;
|
||||
#X connect 49 0 46 0;
|
||||
#X connect 50 0 51 0;
|
||||
#X connect 50 1 52 0;
|
||||
#X connect 50 2 53 0;
|
||||
#X connect 50 3 54 0;
|
||||
#X connect 50 4 55 0;
|
||||
#X connect 50 5 56 0;
|
||||
#X connect 50 6 57 0;
|
||||
#X connect 50 7 58 0;
|
||||
#X connect 50 8 59 0;
|
||||
#X connect 50 9 60 0;
|
||||
#X connect 50 10 61 0;
|
||||
#X connect 50 11 62 0;
|
||||
#X connect 50 12 63 0;
|
||||
#X connect 50 13 64 0;
|
||||
#X connect 50 14 65 0;
|
||||
#X connect 50 15 66 0;
|
||||
#X connect 50 16 67 0;
|
||||
#X connect 50 17 68 0;
|
||||
#X connect 50 18 69 0;
|
||||
#X connect 50 19 70 0;
|
||||
#X connect 50 20 71 0;
|
||||
#X connect 50 21 72 0;
|
||||
#X connect 50 22 73 0;
|
||||
#X connect 51 0 4 0;
|
||||
#X connect 52 0 4 0;
|
||||
#X connect 53 0 4 0;
|
||||
#X connect 54 0 4 0;
|
||||
#X connect 55 0 4 0;
|
||||
#X connect 56 0 4 0;
|
||||
#X connect 57 0 4 0;
|
||||
#X connect 58 0 4 0;
|
||||
#X connect 59 0 4 0;
|
||||
#X connect 60 0 4 0;
|
||||
#X connect 61 0 4 0;
|
||||
#X connect 62 0 4 0;
|
||||
#X connect 63 0 4 0;
|
||||
#X connect 64 0 4 0;
|
||||
#X connect 65 0 4 0;
|
||||
#X connect 66 0 4 0;
|
||||
#X connect 67 0 4 0;
|
||||
#X connect 68 0 4 0;
|
||||
#X connect 69 0 4 0;
|
||||
#X connect 70 0 4 0;
|
||||
#X connect 71 0 4 0;
|
||||
#X connect 72 0 4 0;
|
||||
#X connect 73 0 4 0;
|
||||
#X restore 20 300 pd Dotdots;
|
||||
#X obj 189 264 line~;
|
||||
#X msg 189 240 \$1 100;
|
||||
#X floatatom 189 177 5 0 0 0 - - - 0;
|
||||
#X obj 132 310 switch~;
|
||||
#X obj 132 286 tgl 19 0 empty empty empty 0 -10 0 12 #fcfcfc #000000 #000000 0 1;
|
||||
#X obj 132 262 change;
|
||||
#X text 89 155 switch on/off before 0 to stop startup pops, f 12;
|
||||
#X obj 189 216 max 0;
|
||||
#X obj 203 336 *~;
|
||||
#X obj 132 238 > -0.1;
|
||||
#X connect 0 0 1 0;
|
||||
#X connect 1 0 17 0;
|
||||
#X connect 2 0 5 0;
|
||||
#X connect 3 0 7 1;
|
||||
#X connect 4 0 3 0;
|
||||
#X connect 5 0 6 0;
|
||||
#X connect 6 0 4 0;
|
||||
#X connect 7 0 8 0;
|
||||
#X connect 7 1 8 1;
|
||||
#X connect 9 0 7 0;
|
||||
#X connect 10 0 22 0;
|
||||
#X connect 10 1 11 0;
|
||||
#X connect 11 0 12 0;
|
||||
#X connect 12 0 13 0;
|
||||
#X connect 13 0 2 0;
|
||||
#X connect 15 0 18 0;
|
||||
#X connect 17 0 14 0;
|
||||
#X connect 17 1 10 0;
|
||||
#X connect 17 3 19 1;
|
||||
#X connect 18 0 16 0;
|
||||
#X connect 19 0 9 0;
|
||||
#X connect 20 0 28 0;
|
||||
#X connect 20 0 28 1;
|
||||
#X connect 21 0 20 0;
|
||||
#X connect 22 0 27 0;
|
||||
#X connect 22 0 29 0;
|
||||
#X connect 24 0 23 0;
|
||||
#X connect 25 0 24 0;
|
||||
#X connect 27 0 21 0;
|
||||
#X connect 28 0 9 1;
|
||||
#X connect 29 0 25 0;
|
||||
25
mirrors/Region.gd
Normal file
25
mirrors/Region.gd
Normal file
|
|
@ -0,0 +1,25 @@
|
|||
extends Spatial
|
||||
|
||||
var main = load("res://mirrors/main.tscn")
|
||||
var sub = load("res://mirrors/osc.tscn")
|
||||
|
||||
func _ready():
|
||||
# 'main' at center.
|
||||
var m = main.instance()
|
||||
add_child(m)
|
||||
m.set_size(rand_range(0.1, 2))
|
||||
m.audible_range_max = 80
|
||||
m.set_preset(randi()%12 + 1)
|
||||
m.set_gain(40)
|
||||
|
||||
# many 'sub' surrounds 'main' like satellites
|
||||
for i in range(25):
|
||||
var s = sub.instance()
|
||||
add_child(s)
|
||||
s.set_preset(wrapi(i, 6, 23)) # get 6 ... 23
|
||||
s.set_size(rand_range(0.1, 1.2))
|
||||
s.set_color(Color.blue)
|
||||
var d = polar2cartesian(rand_range(1, 10), rand_range(0, PI))
|
||||
s.translate(Vector3(d.x, rand_range(-5, 5), d.y))
|
||||
s.set_freq(rand_range(1, 100))
|
||||
s.set_gain(0.3)
|
||||
6
mirrors/Region.tscn
Normal file
6
mirrors/Region.tscn
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
[gd_scene load_steps=2 format=2]
|
||||
|
||||
[ext_resource path="res://mirrors/Region.gd" type="Script" id=1]
|
||||
|
||||
[node name="Region" type="Spatial"]
|
||||
script = ExtResource( 1 )
|
||||
224
mirrors/WooWang.pd
Normal file
224
mirrors/WooWang.pd
Normal file
|
|
@ -0,0 +1,224 @@
|
|||
#N canvas 80 207 548 621 12;
|
||||
#X obj 21 22 r fromGodot\$0;
|
||||
#X obj 21 46 list trim;
|
||||
#X obj 303 253 hsl 100 20 -1 1 0 0 empty empty empty -2 -10 0 12 #fcfcfc #000000 #000000 0 1;
|
||||
#X obj 300 349 line~;
|
||||
#X msg 300 325 \$1 100;
|
||||
#X obj 300 278 expr ($f1 + 1)/8;
|
||||
#X floatatom 300 302 5 0 0 0 - - - 0;
|
||||
#N canvas 68 97 450 300 pan2~ 0;
|
||||
#X obj 51 98 cos~;
|
||||
#X obj 111 98 cos~;
|
||||
#X obj 33 128 *~;
|
||||
#X obj 93 128 *~;
|
||||
#X obj 33 158 outlet~;
|
||||
#X obj 93 158 outlet~;
|
||||
#X obj 33 24 inlet~;
|
||||
#X obj 111 24 inlet~;
|
||||
#X obj 111 74 +~ 0.75;
|
||||
#X connect 0 0 2 1;
|
||||
#X connect 1 0 3 1;
|
||||
#X connect 2 0 4 0;
|
||||
#X connect 3 0 5 0;
|
||||
#X connect 6 0 2 0;
|
||||
#X connect 6 0 3 0;
|
||||
#X connect 7 0 8 0;
|
||||
#X connect 7 0 0 0;
|
||||
#X connect 8 0 1 0;
|
||||
#X restore 199 437 pd pan2~;
|
||||
#X obj 199 467 dac~ 1 2;
|
||||
#X obj 199 407 *~;
|
||||
#X obj 189 127 unpack f f;
|
||||
#X floatatom 296 159 5 0 0 0 - - - 0;
|
||||
#X obj 296 182 sin;
|
||||
#X floatatom 296 206 5 0 0 0 - - - 0;
|
||||
#X obj 21 120 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000 #000000;
|
||||
#X obj 361 21 loadbang;
|
||||
#X msg 361 81 \; pd dsp 1;
|
||||
#X obj 21 70 route bang panvol param preset;
|
||||
#X obj 361 45 del 300;
|
||||
#N canvas 0 23 1014 927 Ww 0;
|
||||
#X obj 542 128 inlet;
|
||||
#X obj 487 678 s \$0-preset;
|
||||
#X obj 542 168 sel 1 2 3 4 5 6 7 8 9 10 11 12, f 65;
|
||||
#X msg 542 222 47.97 62 60 67 0.6 0.3;
|
||||
#X msg 552 246 114 120 158 183 0.55 0.3;
|
||||
#X msg 562 270 223 126 166 217 0.62 0.73;
|
||||
#X msg 572 294 101 399 250 96.57 0.43 1.03;
|
||||
#X msg 582 318 64 108 109 46 0.5 8.99;
|
||||
#X msg 592 342 69 251 281 311 0.22 3.21;
|
||||
#X msg 602 366 387 328 296 378 0.31 0.38;
|
||||
#X msg 612 390 32 120 276.3 74 0.32 0.3;
|
||||
#X msg 622 414 220 251 280 310 0.31 0.35;
|
||||
#X msg 632 438 73 87 97 132 0.37 0.79;
|
||||
#X msg 642 462 595.8 65.23 135 471 0.36 0.22;
|
||||
#X msg 652 486 66 128 112 127 0.3 2.42;
|
||||
#X obj 111 788 *~ 0.1;
|
||||
#X obj 133 490 rpole~;
|
||||
#X obj 133 465 rzero_rev~;
|
||||
#X obj 133 539 rpole~;
|
||||
#X obj 133 514 rzero_rev~;
|
||||
#X obj 133 587 rpole~;
|
||||
#X obj 133 562 rzero_rev~;
|
||||
#X obj 133 636 rpole~;
|
||||
#X obj 133 611 rzero_rev~;
|
||||
#X obj 121 663 +~;
|
||||
#X obj 242 399 phasor~ 0.3;
|
||||
#X obj 242 426 expr~ 1 - 0.03 - 0.6*abs($v1-0.5)*abs($v1-0.5);
|
||||
#X obj 29 207 -~ 0.5;
|
||||
#X obj 28 251 clip~ -0.5 0.5;
|
||||
#X obj 29 279 cos~;
|
||||
#X obj 162 365 hip~ 5;
|
||||
#X obj 29 232 *~ 3;
|
||||
#X obj 28 179 phasor~ 220;
|
||||
#X obj 162 202 -~ 0.5;
|
||||
#X obj 162 251 clip~ -0.5 0.5;
|
||||
#X obj 162 274 cos~;
|
||||
#X obj 162 227 *~ 3;
|
||||
#X obj 297 205 -~ 0.5;
|
||||
#X obj 297 254 clip~ -0.5 0.5;
|
||||
#X obj 297 277 cos~;
|
||||
#X obj 297 230 *~ 3;
|
||||
#X obj 432 205 -~ 0.5;
|
||||
#X obj 432 254 clip~ -0.5 0.5;
|
||||
#X obj 432 277 cos~;
|
||||
#X obj 432 230 *~ 3;
|
||||
#X obj 162 179 phasor~ 251;
|
||||
#X obj 297 182 phasor~ 281;
|
||||
#X obj 432 182 phasor~ 311;
|
||||
#X obj 162 398 *~ 0.2;
|
||||
#X floatatom 29 153 5 0 0 0 - - - 0;
|
||||
#X floatatom 163 153 5 0 0 0 - - - 0;
|
||||
#X floatatom 297 155 5 0 0 0 - - - 0;
|
||||
#X floatatom 433 155 5 0 0 0 - - - 0;
|
||||
#X obj 115 14 inlet;
|
||||
#X floatatom 154 738 5 0 0 0 - - - 0;
|
||||
#X obj 111 760 *~;
|
||||
#X floatatom 235 151 5 0 0 0 - - - 0;
|
||||
#X obj 116 40 unpack f f f f f f;
|
||||
#X obj 164 13 r \$0-preset;
|
||||
#X obj 111 812 outlet~;
|
||||
#X connect 0 0 2 0;
|
||||
#X connect 2 0 3 0;
|
||||
#X connect 2 1 4 0;
|
||||
#X connect 2 2 5 0;
|
||||
#X connect 2 3 6 0;
|
||||
#X connect 2 4 7 0;
|
||||
#X connect 2 5 8 0;
|
||||
#X connect 2 6 9 0;
|
||||
#X connect 2 7 10 0;
|
||||
#X connect 2 8 11 0;
|
||||
#X connect 2 9 12 0;
|
||||
#X connect 2 10 13 0;
|
||||
#X connect 2 11 14 0;
|
||||
#X connect 3 0 1 0;
|
||||
#X connect 4 0 1 0;
|
||||
#X connect 5 0 1 0;
|
||||
#X connect 6 0 1 0;
|
||||
#X connect 7 0 1 0;
|
||||
#X connect 8 0 1 0;
|
||||
#X connect 9 0 1 0;
|
||||
#X connect 10 0 1 0;
|
||||
#X connect 11 0 1 0;
|
||||
#X connect 12 0 1 0;
|
||||
#X connect 13 0 1 0;
|
||||
#X connect 14 0 1 0;
|
||||
#X connect 15 0 59 0;
|
||||
#X connect 16 0 19 0;
|
||||
#X connect 17 0 16 0;
|
||||
#X connect 18 0 21 0;
|
||||
#X connect 19 0 18 0;
|
||||
#X connect 20 0 23 0;
|
||||
#X connect 21 0 20 0;
|
||||
#X connect 22 0 24 1;
|
||||
#X connect 23 0 22 0;
|
||||
#X connect 24 0 55 0;
|
||||
#X connect 25 0 26 0;
|
||||
#X connect 26 0 17 1;
|
||||
#X connect 26 0 16 1;
|
||||
#X connect 26 0 19 1;
|
||||
#X connect 26 0 18 1;
|
||||
#X connect 26 0 21 1;
|
||||
#X connect 26 0 20 1;
|
||||
#X connect 26 0 23 1;
|
||||
#X connect 26 0 22 1;
|
||||
#X connect 27 0 31 0;
|
||||
#X connect 28 0 29 0;
|
||||
#X connect 29 0 30 0;
|
||||
#X connect 30 0 48 0;
|
||||
#X connect 31 0 28 0;
|
||||
#X connect 32 0 27 0;
|
||||
#X connect 33 0 36 0;
|
||||
#X connect 34 0 35 0;
|
||||
#X connect 35 0 30 0;
|
||||
#X connect 36 0 34 0;
|
||||
#X connect 37 0 40 0;
|
||||
#X connect 38 0 39 0;
|
||||
#X connect 39 0 30 0;
|
||||
#X connect 40 0 38 0;
|
||||
#X connect 41 0 44 0;
|
||||
#X connect 42 0 43 0;
|
||||
#X connect 43 0 30 0;
|
||||
#X connect 44 0 42 0;
|
||||
#X connect 45 0 33 0;
|
||||
#X connect 46 0 37 0;
|
||||
#X connect 47 0 41 0;
|
||||
#X connect 48 0 24 0;
|
||||
#X connect 48 0 17 0;
|
||||
#X connect 49 0 32 0;
|
||||
#X connect 50 0 45 0;
|
||||
#X connect 51 0 46 0;
|
||||
#X connect 52 0 47 0;
|
||||
#X connect 53 0 57 0;
|
||||
#X connect 54 0 55 1;
|
||||
#X connect 55 0 15 0;
|
||||
#X connect 56 0 25 0;
|
||||
#X connect 57 0 49 0;
|
||||
#X connect 57 1 50 0;
|
||||
#X connect 57 2 51 0;
|
||||
#X connect 57 3 52 0;
|
||||
#X connect 57 4 54 0;
|
||||
#X connect 57 5 56 0;
|
||||
#X connect 58 0 57 0;
|
||||
#X restore 80 300 pd Ww;
|
||||
#X obj 189 264 line~;
|
||||
#X msg 189 240 \$1 100;
|
||||
#X floatatom 189 177 5 0 0 0 - - - 0;
|
||||
#X obj 132 310 switch~;
|
||||
#X obj 132 286 tgl 19 0 empty empty empty 0 -10 0 12 #fcfcfc #000000 #000000 0 1;
|
||||
#X obj 132 262 change;
|
||||
#X text 89 155 switch on/off before 0 to stop startup pops, f 12;
|
||||
#X obj 189 216 max 0;
|
||||
#X obj 203 336 *~;
|
||||
#X obj 132 238 > -0.1;
|
||||
#X connect 0 0 1 0;
|
||||
#X connect 1 0 17 0;
|
||||
#X connect 2 0 5 0;
|
||||
#X connect 3 0 7 1;
|
||||
#X connect 4 0 3 0;
|
||||
#X connect 5 0 6 0;
|
||||
#X connect 6 0 4 0;
|
||||
#X connect 7 0 8 0;
|
||||
#X connect 7 1 8 1;
|
||||
#X connect 9 0 7 0;
|
||||
#X connect 10 0 22 0;
|
||||
#X connect 10 1 11 0;
|
||||
#X connect 11 0 12 0;
|
||||
#X connect 12 0 13 0;
|
||||
#X connect 13 0 2 0;
|
||||
#X connect 15 0 18 0;
|
||||
#X connect 17 0 14 0;
|
||||
#X connect 17 1 10 0;
|
||||
#X connect 17 3 19 1;
|
||||
#X connect 18 0 16 0;
|
||||
#X connect 19 0 9 0;
|
||||
#X connect 20 0 28 0;
|
||||
#X connect 20 0 28 1;
|
||||
#X connect 21 0 20 0;
|
||||
#X connect 22 0 27 0;
|
||||
#X connect 22 0 29 0;
|
||||
#X connect 24 0 23 0;
|
||||
#X connect 25 0 24 0;
|
||||
#X connect 27 0 21 0;
|
||||
#X connect 28 0 9 1;
|
||||
#X connect 29 0 25 0;
|
||||
463
mirrors/assets/levels/Game.tscn
Normal file
463
mirrors/assets/levels/Game.tscn
Normal file
|
|
@ -0,0 +1,463 @@
|
|||
[gd_scene load_steps=39 format=2]
|
||||
|
||||
[ext_resource path="res://mirrors/assets/scripts/OnReadyWorld.gd" type="Script" id=1]
|
||||
[ext_resource path="res://mirrors/assets/scenes/Player.tscn" type="PackedScene" id=2]
|
||||
[ext_resource path="res://mirrors/default_env.tres" type="Environment" id=3]
|
||||
[ext_resource path="res://mirrors/assets/shaders/BrickMaterial.material" type="Material" id=8]
|
||||
[ext_resource path="res://mirrors/assets/scenes/PortalPair.tscn" type="PackedScene" id=9]
|
||||
|
||||
[sub_resource type="CubeMesh" id=1]
|
||||
size = Vector3( 1, 2, 1.23 )
|
||||
|
||||
[sub_resource type="SpatialMaterial" id=2]
|
||||
albedo_color = Color( 0.243137, 0.305882, 0.54902, 1 )
|
||||
uv1_scale = Vector3( 25, 25, 1 )
|
||||
|
||||
[sub_resource type="ConvexPolygonShape" id=3]
|
||||
points = PoolVector3Array( -1, 1, 1, 1, 1, -1, 1, 1, 1, -1, 1, -1, -1, -1, 1, 1, -1, -1, 1, -1, 1, -1, -1, -1, 1, 1, 1, -1, 1, -1, 1, 1, -1, -1, 1, 1, 1, -1, 1, -1, -1, -1, 1, -1, -1, -1, -1, 1, 1, 1, 1, -1, -1, 1, -1, 1, 1, 1, -1, 1, 1, 1, -1, -1, -1, -1, -1, 1, -1, 1, -1, -1 )
|
||||
|
||||
[sub_resource type="Shader" id=16]
|
||||
resource_local_to_scene = true
|
||||
code = "shader_type spatial;
|
||||
render_mode unshaded;
|
||||
uniform sampler2D texture_albedo : hint_albedo;
|
||||
|
||||
void vertex() {
|
||||
}
|
||||
|
||||
void fragment() {
|
||||
vec2 base_uv = SCREEN_UV;
|
||||
vec4 albedo_tex = texture(texture_albedo,base_uv);
|
||||
ALBEDO = albedo_tex.rgb;
|
||||
ALBEDO = pow(ALBEDO, vec3(2.2));
|
||||
}
|
||||
"
|
||||
|
||||
[sub_resource type="ShaderMaterial" id=17]
|
||||
resource_local_to_scene = true
|
||||
shader = SubResource( 16 )
|
||||
|
||||
[sub_resource type="Shader" id=18]
|
||||
resource_local_to_scene = true
|
||||
code = "shader_type spatial;
|
||||
render_mode unshaded;
|
||||
uniform sampler2D texture_albedo : hint_albedo;
|
||||
|
||||
void vertex() {
|
||||
}
|
||||
|
||||
void fragment() {
|
||||
vec2 base_uv = SCREEN_UV;
|
||||
vec4 albedo_tex = texture(texture_albedo,base_uv);
|
||||
ALBEDO = albedo_tex.rgb;
|
||||
ALBEDO = pow(ALBEDO, vec3(2.2));
|
||||
}
|
||||
"
|
||||
|
||||
[sub_resource type="ShaderMaterial" id=19]
|
||||
resource_local_to_scene = true
|
||||
shader = SubResource( 18 )
|
||||
|
||||
[sub_resource type="SpatialMaterial" id=60]
|
||||
albedo_color = Color( 0.415686, 0.741176, 0.282353, 1 )
|
||||
|
||||
[sub_resource type="Shader" id=20]
|
||||
resource_local_to_scene = true
|
||||
code = "shader_type spatial;
|
||||
render_mode unshaded;
|
||||
uniform sampler2D texture_albedo : hint_albedo;
|
||||
|
||||
void vertex() {
|
||||
}
|
||||
|
||||
void fragment() {
|
||||
vec2 base_uv = SCREEN_UV;
|
||||
vec4 albedo_tex = texture(texture_albedo,base_uv);
|
||||
ALBEDO = albedo_tex.rgb;
|
||||
ALBEDO = pow(ALBEDO, vec3(2.2));
|
||||
}
|
||||
"
|
||||
|
||||
[sub_resource type="ShaderMaterial" id=21]
|
||||
resource_local_to_scene = true
|
||||
shader = SubResource( 20 )
|
||||
|
||||
[sub_resource type="Shader" id=22]
|
||||
resource_local_to_scene = true
|
||||
code = "shader_type spatial;
|
||||
render_mode unshaded;
|
||||
uniform sampler2D texture_albedo : hint_albedo;
|
||||
|
||||
void vertex() {
|
||||
}
|
||||
|
||||
void fragment() {
|
||||
vec2 base_uv = SCREEN_UV;
|
||||
vec4 albedo_tex = texture(texture_albedo,base_uv);
|
||||
ALBEDO = albedo_tex.rgb;
|
||||
ALBEDO = pow(ALBEDO, vec3(2.2));
|
||||
}
|
||||
"
|
||||
|
||||
[sub_resource type="ShaderMaterial" id=23]
|
||||
resource_local_to_scene = true
|
||||
shader = SubResource( 22 )
|
||||
|
||||
[sub_resource type="Shader" id=24]
|
||||
resource_local_to_scene = true
|
||||
code = "shader_type spatial;
|
||||
render_mode unshaded;
|
||||
uniform sampler2D texture_albedo : hint_albedo;
|
||||
|
||||
void vertex() {
|
||||
}
|
||||
|
||||
void fragment() {
|
||||
vec2 base_uv = SCREEN_UV;
|
||||
vec4 albedo_tex = texture(texture_albedo,base_uv);
|
||||
ALBEDO = albedo_tex.rgb;
|
||||
ALBEDO = pow(ALBEDO, vec3(2.2));
|
||||
}
|
||||
"
|
||||
|
||||
[sub_resource type="ShaderMaterial" id=25]
|
||||
resource_local_to_scene = true
|
||||
shader = SubResource( 24 )
|
||||
|
||||
[sub_resource type="Shader" id=26]
|
||||
resource_local_to_scene = true
|
||||
code = "shader_type spatial;
|
||||
render_mode unshaded;
|
||||
uniform sampler2D texture_albedo : hint_albedo;
|
||||
|
||||
void vertex() {
|
||||
}
|
||||
|
||||
void fragment() {
|
||||
vec2 base_uv = SCREEN_UV;
|
||||
vec4 albedo_tex = texture(texture_albedo,base_uv);
|
||||
ALBEDO = albedo_tex.rgb;
|
||||
ALBEDO = pow(ALBEDO, vec3(2.2));
|
||||
}
|
||||
"
|
||||
|
||||
[sub_resource type="ShaderMaterial" id=27]
|
||||
resource_local_to_scene = true
|
||||
shader = SubResource( 26 )
|
||||
|
||||
[sub_resource type="Shader" id=28]
|
||||
resource_local_to_scene = true
|
||||
code = "shader_type spatial;
|
||||
render_mode unshaded;
|
||||
uniform sampler2D texture_albedo : hint_albedo;
|
||||
|
||||
void vertex() {
|
||||
}
|
||||
|
||||
void fragment() {
|
||||
vec2 base_uv = SCREEN_UV;
|
||||
vec4 albedo_tex = texture(texture_albedo,base_uv);
|
||||
ALBEDO = albedo_tex.rgb;
|
||||
ALBEDO = pow(ALBEDO, vec3(2.2));
|
||||
}
|
||||
"
|
||||
|
||||
[sub_resource type="ShaderMaterial" id=29]
|
||||
resource_local_to_scene = true
|
||||
shader = SubResource( 28 )
|
||||
|
||||
[sub_resource type="Shader" id=30]
|
||||
resource_local_to_scene = true
|
||||
code = "shader_type spatial;
|
||||
render_mode unshaded;
|
||||
uniform sampler2D texture_albedo : hint_albedo;
|
||||
|
||||
void vertex() {
|
||||
}
|
||||
|
||||
void fragment() {
|
||||
vec2 base_uv = SCREEN_UV;
|
||||
vec4 albedo_tex = texture(texture_albedo,base_uv);
|
||||
ALBEDO = albedo_tex.rgb;
|
||||
ALBEDO = pow(ALBEDO, vec3(2.2));
|
||||
}
|
||||
"
|
||||
|
||||
[sub_resource type="ShaderMaterial" id=31]
|
||||
resource_local_to_scene = true
|
||||
shader = SubResource( 30 )
|
||||
|
||||
[sub_resource type="QuadMesh" id=32]
|
||||
size = Vector2( 140.08, 39.2 )
|
||||
|
||||
[sub_resource type="SpatialMaterial" id=59]
|
||||
albedo_color = Color( 0.996078, 1, 0.32549, 1 )
|
||||
|
||||
[sub_resource type="ConvexPolygonShape" id=34]
|
||||
points = PoolVector3Array( -56.865, -19.6, 0, -56.865, 19.6, 0, 56.865, 19.6, 0, -56.865, -19.6, 0, 56.865, 19.6, 0, 56.865, -19.6, 0 )
|
||||
|
||||
[sub_resource type="QuadMesh" id=35]
|
||||
size = Vector2( 140.08, 39.2 )
|
||||
|
||||
[sub_resource type="SpatialMaterial" id=33]
|
||||
albedo_color = Color( 0.615686, 0.498039, 0.941176, 1 )
|
||||
uv1_scale = Vector3( 2.5, 1, 1 )
|
||||
|
||||
[sub_resource type="QuadMesh" id=36]
|
||||
size = Vector2( 116.41, 147.4 )
|
||||
|
||||
[sub_resource type="BoxShape" id=37]
|
||||
extents = Vector3( 56.09, 0.01, 70.86 )
|
||||
|
||||
[sub_resource type="CubeMesh" id=47]
|
||||
size = Vector3( 2, 7, 26 )
|
||||
|
||||
[sub_resource type="ConvexPolygonShape" id=48]
|
||||
points = PoolVector3Array( -1, 3.5, 13, 1, 3.5, -13, 1, 3.5, 13, -1, 3.5, -13, -1, -3.5, 13, 1, -3.5, -13, 1, -3.5, 13, -1, -3.5, -13, 1, 3.5, 13, -1, 3.5, -13, 1, 3.5, -13, -1, 3.5, 13, 1, -3.5, 13, -1, -3.5, -13, 1, -3.5, -13, -1, -3.5, 13, 1, 3.5, 13, -1, -3.5, 13, -1, 3.5, 13, 1, -3.5, 13, 1, 3.5, -13, -1, -3.5, -13, -1, 3.5, -13, 1, -3.5, -13 )
|
||||
|
||||
[sub_resource type="CubeMesh" id=49]
|
||||
size = Vector3( 2, 7, 26 )
|
||||
|
||||
[sub_resource type="ConvexPolygonShape" id=50]
|
||||
points = PoolVector3Array( -1, 3.5, 13, 1, 3.5, -13, 1, 3.5, 13, -1, 3.5, -13, -1, -3.5, 13, 1, -3.5, -13, 1, -3.5, 13, -1, -3.5, -13, 1, 3.5, 13, -1, 3.5, -13, 1, 3.5, -13, -1, 3.5, 13, 1, -3.5, 13, -1, -3.5, -13, 1, -3.5, -13, -1, -3.5, 13, 1, 3.5, 13, -1, -3.5, 13, -1, 3.5, 13, 1, -3.5, 13, 1, 3.5, -13, -1, -3.5, -13, -1, 3.5, -13, 1, -3.5, -13 )
|
||||
|
||||
[sub_resource type="CubeMesh" id=51]
|
||||
size = Vector3( 2, 7.98, 26 )
|
||||
|
||||
[sub_resource type="ConvexPolygonShape" id=52]
|
||||
points = PoolVector3Array( -1, 3.99, 13, 1, 3.99, -13, 1, 3.99, 13, -1, 3.99, -13, -1, -3.99, 13, 1, -3.99, -13, 1, -3.99, 13, -1, -3.99, -13, 1, 3.99, 13, -1, 3.99, -13, 1, 3.99, -13, -1, 3.99, 13, 1, -3.99, 13, -1, -3.99, -13, 1, -3.99, -13, -1, -3.99, 13, 1, 3.99, 13, -1, -3.99, 13, -1, 3.99, 13, 1, -3.99, 13, 1, 3.99, -13, -1, -3.99, -13, -1, 3.99, -13, 1, -3.99, -13 )
|
||||
|
||||
[node name="Game" type="Spatial"]
|
||||
script = ExtResource( 1 )
|
||||
|
||||
[node name="World1" type="Spatial" parent="."]
|
||||
|
||||
[node name="Floor" type="MeshInstance" parent="World1"]
|
||||
transform = Transform( 113.7, 0, 0, 0, 1, 0, 0, 0, 113.732, 0, 0, 0 )
|
||||
mesh = SubResource( 1 )
|
||||
material/0 = SubResource( 2 )
|
||||
|
||||
[node name="StaticBody" type="StaticBody" parent="World1/Floor"]
|
||||
|
||||
[node name="CollisionShape" type="CollisionShape" parent="World1/Floor/StaticBody"]
|
||||
shape = SubResource( 3 )
|
||||
|
||||
[node name="Textures" parent="World1" instance=ExtResource( 9 )]
|
||||
|
||||
[node name="PortalA" parent="World1/Textures" index="0"]
|
||||
transform = Transform( -1.13994, 0, -1.70777, 0, 1.18788, 0, 0.334075, 0, -5.82728, -11.0168, 4.488, -9.83145 )
|
||||
|
||||
[node name="MeshInstance" parent="World1/Textures/PortalA" index="2"]
|
||||
material_override = SubResource( 17 )
|
||||
|
||||
[node name="PortalB" parent="World1/Textures" index="1"]
|
||||
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -8.07889, 3.02662, -4.2944 )
|
||||
|
||||
[node name="MeshInstance" parent="World1/Textures/PortalB" index="2"]
|
||||
visible = true
|
||||
material_override = SubResource( 19 )
|
||||
material/0 = SubResource( 60 )
|
||||
|
||||
[node name="Textures2" parent="World1" instance=ExtResource( 9 )]
|
||||
|
||||
[node name="PortalA" parent="World1/Textures2" index="0"]
|
||||
transform = Transform( 0.985025, 0, -0.17241, 0, 1, 0, 0.822905, 0, 4.70148, 8, 4.488, 24.1383 )
|
||||
|
||||
[node name="MeshInstance" parent="World1/Textures2/PortalA" index="2"]
|
||||
material_override = SubResource( 21 )
|
||||
|
||||
[node name="PortalB" parent="World1/Textures2" index="1"]
|
||||
transform = Transform( -1.71379, 0, -1.49824e-07, 0, 1, 0, 8.74228e-08, 0, -1, 5.90367, 4.65802, 17.9699 )
|
||||
|
||||
[node name="MeshInstance" parent="World1/Textures2/PortalB" index="2"]
|
||||
visible = true
|
||||
material_override = SubResource( 23 )
|
||||
|
||||
[node name="Textures3" parent="World1" instance=ExtResource( 9 )]
|
||||
|
||||
[node name="PortalA" parent="World1/Textures3" index="0"]
|
||||
transform = Transform( -1.51927, 0, 1.04851, 0, 1.1786, 0, -5.07458, 0, -7.353, 26.2939, 4.488, -23.435 )
|
||||
|
||||
[node name="MeshInstance" parent="World1/Textures3/PortalA" index="2"]
|
||||
material_override = SubResource( 25 )
|
||||
|
||||
[node name="PortalB" parent="World1/Textures3" index="1"]
|
||||
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 435, 4.488, 15 )
|
||||
|
||||
[node name="MeshInstance" parent="World1/Textures3/PortalB" index="2"]
|
||||
material_override = SubResource( 27 )
|
||||
|
||||
[node name="Textures4" parent="World1" instance=ExtResource( 9 )]
|
||||
|
||||
[node name="PortalA" parent="World1/Textures4" index="0"]
|
||||
transform = Transform( 1.05025, 0, 1.37292, 0, 4.17857, 0, -0.794601, 0, 0.607978, 29.9959, 5.79503, 19.3677 )
|
||||
|
||||
[node name="MeshInstance" parent="World1/Textures4/PortalA" index="2"]
|
||||
material_override = SubResource( 29 )
|
||||
|
||||
[node name="PortalB" parent="World1/Textures4" index="1"]
|
||||
transform = Transform( -1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, -365, 4.488, 16.6594 )
|
||||
|
||||
[node name="MeshInstance" parent="World1/Textures4/PortalB" index="2"]
|
||||
visible = true
|
||||
material_override = SubResource( 31 )
|
||||
|
||||
[node name="Walls" type="Spatial" parent="World1"]
|
||||
|
||||
[node name="MeshInstance" type="MeshInstance" parent="World1/Walls"]
|
||||
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 20, -70 )
|
||||
mesh = SubResource( 32 )
|
||||
material/0 = SubResource( 59 )
|
||||
|
||||
[node name="StaticBody" type="StaticBody" parent="World1/Walls/MeshInstance"]
|
||||
|
||||
[node name="CollisionShape" type="CollisionShape" parent="World1/Walls/MeshInstance/StaticBody"]
|
||||
shape = SubResource( 34 )
|
||||
|
||||
[node name="MeshInstance3" type="MeshInstance" parent="World1/Walls"]
|
||||
transform = Transform( -1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, 0, 20, 70 )
|
||||
mesh = SubResource( 35 )
|
||||
material/0 = SubResource( 33 )
|
||||
|
||||
[node name="StaticBody" type="StaticBody" parent="World1/Walls/MeshInstance3"]
|
||||
|
||||
[node name="CollisionShape" type="CollisionShape" parent="World1/Walls/MeshInstance3/StaticBody"]
|
||||
shape = SubResource( 34 )
|
||||
|
||||
[node name="MeshInstance2" type="MeshInstance" parent="World1/Walls"]
|
||||
transform = Transform( -4.37114e-08, 0, 1, 0, 1, 0, -1, 0, -4.37114e-08, -55, 20, 0 )
|
||||
mesh = SubResource( 32 )
|
||||
material/0 = SubResource( 33 )
|
||||
|
||||
[node name="StaticBody" type="StaticBody" parent="World1/Walls/MeshInstance2"]
|
||||
|
||||
[node name="CollisionShape" type="CollisionShape" parent="World1/Walls/MeshInstance2/StaticBody"]
|
||||
shape = SubResource( 34 )
|
||||
|
||||
[node name="MeshInstance4" type="MeshInstance" parent="World1/Walls"]
|
||||
transform = Transform( 1.31134e-07, 0, -1, 0, 1, 0, 1, 0, 1.31134e-07, 56, 20, 0 )
|
||||
mesh = SubResource( 32 )
|
||||
material/0 = SubResource( 33 )
|
||||
|
||||
[node name="StaticBody" type="StaticBody" parent="World1/Walls/MeshInstance4"]
|
||||
|
||||
[node name="CollisionShape" type="CollisionShape" parent="World1/Walls/MeshInstance4/StaticBody"]
|
||||
shape = SubResource( 34 )
|
||||
|
||||
[node name="Ceiling" type="MeshInstance" parent="World1"]
|
||||
transform = Transform( 1, 0, 0, 0, -4.37114e-08, -1, 0, 1, -4.37114e-08, 0.0658512, 38.1816, -0.0260773 )
|
||||
mesh = SubResource( 36 )
|
||||
|
||||
[node name="StaticBody" type="StaticBody" parent="World1/Ceiling"]
|
||||
input_ray_pickable = false
|
||||
|
||||
[node name="CollisionShape" type="CollisionShape" parent="World1/Ceiling/StaticBody"]
|
||||
transform = Transform( 1, 0, 0, 0, -4.37114e-08, -1, 0, 1, -4.37114e-08, 0, 0, 0 )
|
||||
shape = SubResource( 37 )
|
||||
|
||||
[node name="World4" type="Spatial" parent="."]
|
||||
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 400, 0, 0 )
|
||||
|
||||
[node name="Floor" type="MeshInstance" parent="World4"]
|
||||
transform = Transform( 113.7, 0, 0, 0, 1, 0, 0, 0, 113.732, 0, 0, 0 )
|
||||
mesh = SubResource( 1 )
|
||||
material/0 = SubResource( 2 )
|
||||
|
||||
[node name="StaticBody" type="StaticBody" parent="World4/Floor"]
|
||||
|
||||
[node name="CollisionShape" type="CollisionShape" parent="World4/Floor/StaticBody"]
|
||||
shape = SubResource( 3 )
|
||||
|
||||
[node name="TunnelSmall" type="Spatial" parent="World4"]
|
||||
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 27, 0, 11 )
|
||||
|
||||
[node name="MeshInstance" type="MeshInstance" parent="World4/TunnelSmall"]
|
||||
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 5, 4.49304, 17 )
|
||||
mesh = SubResource( 47 )
|
||||
material/0 = ExtResource( 8 )
|
||||
|
||||
[node name="StaticBody" type="StaticBody" parent="World4/TunnelSmall/MeshInstance"]
|
||||
|
||||
[node name="CollisionShape" type="CollisionShape" parent="World4/TunnelSmall/MeshInstance/StaticBody"]
|
||||
shape = SubResource( 48 )
|
||||
|
||||
[node name="MeshInstance2" type="MeshInstance" parent="World4/TunnelSmall"]
|
||||
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 10.9999, 4.50006, 17 )
|
||||
mesh = SubResource( 49 )
|
||||
material/0 = ExtResource( 8 )
|
||||
|
||||
[node name="StaticBody" type="StaticBody" parent="World4/TunnelSmall/MeshInstance2"]
|
||||
|
||||
[node name="CollisionShape" type="CollisionShape" parent="World4/TunnelSmall/MeshInstance2/StaticBody"]
|
||||
shape = SubResource( 50 )
|
||||
|
||||
[node name="MeshInstance3" type="MeshInstance" parent="World4/TunnelSmall"]
|
||||
transform = Transform( -4.37114e-08, -1, 0, 1, -4.37114e-08, 0, 0, 0, 1, 7.99989, 8.98167, 17 )
|
||||
mesh = SubResource( 51 )
|
||||
material/0 = ExtResource( 8 )
|
||||
|
||||
[node name="StaticBody" type="StaticBody" parent="World4/TunnelSmall/MeshInstance3"]
|
||||
|
||||
[node name="CollisionShape" type="CollisionShape" parent="World4/TunnelSmall/MeshInstance3/StaticBody"]
|
||||
shape = SubResource( 52 )
|
||||
|
||||
[node name="Walls4" type="Spatial" parent="World4"]
|
||||
|
||||
[node name="MeshInstance" type="MeshInstance" parent="World4/Walls4"]
|
||||
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 20, -70 )
|
||||
mesh = SubResource( 32 )
|
||||
material/0 = SubResource( 33 )
|
||||
|
||||
[node name="StaticBody" type="StaticBody" parent="World4/Walls4/MeshInstance"]
|
||||
|
||||
[node name="CollisionShape" type="CollisionShape" parent="World4/Walls4/MeshInstance/StaticBody"]
|
||||
shape = SubResource( 34 )
|
||||
|
||||
[node name="MeshInstance3" type="MeshInstance" parent="World4/Walls4"]
|
||||
transform = Transform( -1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, 0, 20, 70 )
|
||||
mesh = SubResource( 35 )
|
||||
material/0 = SubResource( 33 )
|
||||
|
||||
[node name="StaticBody" type="StaticBody" parent="World4/Walls4/MeshInstance3"]
|
||||
|
||||
[node name="CollisionShape" type="CollisionShape" parent="World4/Walls4/MeshInstance3/StaticBody"]
|
||||
shape = SubResource( 34 )
|
||||
|
||||
[node name="MeshInstance2" type="MeshInstance" parent="World4/Walls4"]
|
||||
transform = Transform( -4.37114e-08, 0, 1, 0, 1, 0, -1, 0, -4.37114e-08, -55, 20, 0 )
|
||||
mesh = SubResource( 32 )
|
||||
material/0 = SubResource( 33 )
|
||||
|
||||
[node name="StaticBody" type="StaticBody" parent="World4/Walls4/MeshInstance2"]
|
||||
|
||||
[node name="CollisionShape" type="CollisionShape" parent="World4/Walls4/MeshInstance2/StaticBody"]
|
||||
shape = SubResource( 34 )
|
||||
|
||||
[node name="MeshInstance4" type="MeshInstance" parent="World4/Walls4"]
|
||||
transform = Transform( 1.31134e-07, 0, -1, 0, 1, 0, 1, 0, 1.31134e-07, 56, 20, 0 )
|
||||
mesh = SubResource( 32 )
|
||||
material/0 = SubResource( 33 )
|
||||
|
||||
[node name="StaticBody" type="StaticBody" parent="World4/Walls4/MeshInstance4"]
|
||||
|
||||
[node name="CollisionShape" type="CollisionShape" parent="World4/Walls4/MeshInstance4/StaticBody"]
|
||||
shape = SubResource( 34 )
|
||||
|
||||
[node name="Player" parent="." instance=ExtResource( 2 )]
|
||||
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 3.52113, -40.8553 )
|
||||
|
||||
[node name="WorldEnvironment" type="WorldEnvironment" parent="."]
|
||||
environment = ExtResource( 3 )
|
||||
|
||||
[editable path="World1/Textures"]
|
||||
[editable path="World1/Textures/PortalA"]
|
||||
[editable path="World1/Textures/PortalB"]
|
||||
[editable path="World1/Textures2"]
|
||||
[editable path="World1/Textures2/PortalA"]
|
||||
[editable path="World1/Textures2/PortalB"]
|
||||
[editable path="World1/Textures3"]
|
||||
[editable path="World1/Textures3/PortalA"]
|
||||
[editable path="World1/Textures3/PortalB"]
|
||||
[editable path="World1/Textures4"]
|
||||
[editable path="World1/Textures4/PortalA"]
|
||||
[editable path="World1/Textures4/PortalB"]
|
||||
16
mirrors/assets/scenes/Player.tscn
Normal file
16
mirrors/assets/scenes/Player.tscn
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
[gd_scene load_steps=2 format=2]
|
||||
|
||||
[ext_resource path="res://mirrors/assets/scripts/Player.gd" type="Script" id=1]
|
||||
|
||||
[node name="Player" type="KinematicBody"]
|
||||
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 3.52113, 0.98772 )
|
||||
script = ExtResource( 1 )
|
||||
|
||||
[node name="Capsule" type="CollisionShape" parent="."]
|
||||
transform = Transform( 1, 0, 0, 0, -4.37114e-08, -1, 0, 1, -4.37114e-08, 0, 0, 0 )
|
||||
|
||||
[node name="Head" type="Spatial" parent="."]
|
||||
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.5, 0 )
|
||||
|
||||
[node name="Camera" type="Camera" parent="Head"]
|
||||
far = 10000.0
|
||||
50
mirrors/assets/scenes/Portal.tscn
Normal file
50
mirrors/assets/scenes/Portal.tscn
Normal file
|
|
@ -0,0 +1,50 @@
|
|||
[gd_scene load_steps=7 format=2]
|
||||
|
||||
[ext_resource path="res://mirrors/Region.tscn" type="PackedScene" id=1]
|
||||
[ext_resource path="res://mirrors/main.tscn" type="PackedScene" id=2]
|
||||
[ext_resource path="res://mirrors/osc.tscn" type="PackedScene" id=3]
|
||||
|
||||
[sub_resource type="Shader" id=1]
|
||||
resource_local_to_scene = true
|
||||
code = "shader_type spatial;
|
||||
render_mode unshaded;
|
||||
uniform sampler2D texture_albedo : hint_albedo;
|
||||
|
||||
void vertex() {
|
||||
}
|
||||
|
||||
void fragment() {
|
||||
vec2 base_uv = SCREEN_UV;
|
||||
vec4 albedo_tex = texture(texture_albedo,base_uv);
|
||||
ALBEDO = albedo_tex.rgb;
|
||||
ALBEDO = pow(ALBEDO, vec3(2.2));
|
||||
}
|
||||
"
|
||||
|
||||
[sub_resource type="ShaderMaterial" id=2]
|
||||
resource_local_to_scene = true
|
||||
shader = SubResource( 1 )
|
||||
|
||||
[sub_resource type="QuadMesh" id=3]
|
||||
size = Vector2( 4, 7 )
|
||||
|
||||
[node name="Portal" type="Spatial" groups=["portals"]]
|
||||
|
||||
[node name="CameraHolder" type="Spatial" parent="."]
|
||||
|
||||
[node name="Viewport" type="Viewport" parent="."]
|
||||
|
||||
[node name="Camera" type="Camera" parent="Viewport"]
|
||||
current = true
|
||||
fov = 60.0
|
||||
far = 500.0
|
||||
|
||||
[node name="MeshInstance" type="MeshInstance" parent="."]
|
||||
material_override = SubResource( 2 )
|
||||
mesh = SubResource( 3 )
|
||||
|
||||
[node name="Region" parent="." instance=ExtResource( 1 )]
|
||||
|
||||
[node name="osc" parent="." instance=ExtResource( 3 )]
|
||||
|
||||
[node name="main" parent="." instance=ExtResource( 2 )]
|
||||
76
mirrors/assets/scenes/PortalPair.tscn
Normal file
76
mirrors/assets/scenes/PortalPair.tscn
Normal file
|
|
@ -0,0 +1,76 @@
|
|||
[gd_scene load_steps=8 format=2]
|
||||
|
||||
[ext_resource path="res://mirrors/assets/scripts/PortalPair.gd" type="Script" id=1]
|
||||
[ext_resource path="res://mirrors/assets/scenes/Portal.tscn" type="PackedScene" id=2]
|
||||
|
||||
[sub_resource type="Shader" id=1]
|
||||
resource_local_to_scene = true
|
||||
code = "shader_type spatial;
|
||||
render_mode unshaded;
|
||||
uniform sampler2D texture_albedo : hint_albedo;
|
||||
|
||||
void vertex() {
|
||||
}
|
||||
|
||||
void fragment() {
|
||||
vec2 base_uv = SCREEN_UV;
|
||||
vec4 albedo_tex = texture(texture_albedo,base_uv);
|
||||
ALBEDO = albedo_tex.rgb;
|
||||
ALBEDO = pow(ALBEDO, vec3(2.2));
|
||||
}
|
||||
"
|
||||
|
||||
[sub_resource type="ShaderMaterial" id=2]
|
||||
resource_local_to_scene = true
|
||||
shader = SubResource( 1 )
|
||||
|
||||
[sub_resource type="Shader" id=3]
|
||||
resource_local_to_scene = true
|
||||
code = "shader_type spatial;
|
||||
render_mode unshaded;
|
||||
uniform sampler2D texture_albedo : hint_albedo;
|
||||
|
||||
void vertex() {
|
||||
}
|
||||
|
||||
void fragment() {
|
||||
vec2 base_uv = SCREEN_UV;
|
||||
vec4 albedo_tex = texture(texture_albedo,base_uv);
|
||||
ALBEDO = albedo_tex.rgb;
|
||||
ALBEDO = pow(ALBEDO, vec3(2.2));
|
||||
}
|
||||
"
|
||||
|
||||
[sub_resource type="ShaderMaterial" id=4]
|
||||
resource_local_to_scene = true
|
||||
shader = SubResource( 3 )
|
||||
|
||||
[sub_resource type="QuadMesh" id=5]
|
||||
size = Vector2( 0, 0 )
|
||||
|
||||
[node name="PortalPair" type="Node"]
|
||||
script = ExtResource( 1 )
|
||||
|
||||
[node name="PortalA" parent="." instance=ExtResource( 2 )]
|
||||
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -4, 0, 0 )
|
||||
|
||||
[node name="Camera" parent="PortalA/Viewport" index="0"]
|
||||
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -4, 0, 0 )
|
||||
|
||||
[node name="MeshInstance" parent="PortalA" index="2"]
|
||||
material_override = SubResource( 2 )
|
||||
|
||||
[node name="PortalB" parent="." instance=ExtResource( 2 )]
|
||||
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 4.41454, 0.27, -0.192314 )
|
||||
|
||||
[node name="Camera" parent="PortalB/Viewport" index="0"]
|
||||
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 4, 0, 0 )
|
||||
|
||||
[node name="MeshInstance" parent="PortalB" index="2"]
|
||||
transform = Transform( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 )
|
||||
visible = false
|
||||
material_override = SubResource( 4 )
|
||||
mesh = SubResource( 5 )
|
||||
|
||||
[editable path="PortalA"]
|
||||
[editable path="PortalB"]
|
||||
26
mirrors/assets/scripts/OnReadyWorld.gd
Normal file
26
mirrors/assets/scripts/OnReadyWorld.gd
Normal file
|
|
@ -0,0 +1,26 @@
|
|||
extends Spatial
|
||||
|
||||
var mouse_captured : bool = false
|
||||
|
||||
func _ready():
|
||||
Input.set_mouse_mode(Input.MOUSE_MODE_CAPTURED)
|
||||
mouse_captured = true
|
||||
OS.set_window_title("Mirrors")
|
||||
var portals = get_tree().get_nodes_in_group("portals")
|
||||
for p in portals:
|
||||
var o = p.get_node('osc')
|
||||
var pre = ceil(rand_range(0, 23))
|
||||
o.set_preset(pre)
|
||||
|
||||
func _process(delta):
|
||||
var current_res = OS.get_screen_size()
|
||||
ProjectSettings.set("display/window/size/width", current_res.x)
|
||||
ProjectSettings.set("display/window/size/height", current_res.y)
|
||||
|
||||
if Input.is_action_just_pressed("toggle_mouse"):
|
||||
if mouse_captured:
|
||||
mouse_captured = false
|
||||
Input.set_mouse_mode(Input.MOUSE_MODE_VISIBLE)
|
||||
else:
|
||||
mouse_captured = true
|
||||
Input.set_mouse_mode(Input.MOUSE_MODE_CAPTURED)
|
||||
75
mirrors/assets/scripts/Player.gd
Normal file
75
mirrors/assets/scripts/Player.gd
Normal file
|
|
@ -0,0 +1,75 @@
|
|||
extends KinematicBody
|
||||
|
||||
var camera_angle = 0
|
||||
var mouse_sensitivity = 0.07
|
||||
var camera_change = Vector2()
|
||||
|
||||
var velocity = Vector3()
|
||||
var direction = Vector3()
|
||||
|
||||
#fly variables
|
||||
const FLY_SPEED = 10
|
||||
const FLY_ACCEL = 4
|
||||
|
||||
var mouse_captured = true
|
||||
|
||||
func _ready():
|
||||
Input.set_mouse_mode(Input.MOUSE_MODE_CAPTURED)
|
||||
|
||||
func _physics_process(delta):
|
||||
|
||||
if mouse_captured:
|
||||
aim()
|
||||
fly(delta)
|
||||
# emit signal - playerinfo_updated
|
||||
Events.emit_signal("player_transform_updated", $Head/Camera.get_global_translation(), $Head.global_rotation.y)
|
||||
|
||||
if Input.is_action_just_pressed('toggle_mouse'):
|
||||
if mouse_captured:
|
||||
mouse_captured = false
|
||||
Input.set_mouse_mode(Input.MOUSE_MODE_VISIBLE)
|
||||
else:
|
||||
mouse_captured = true
|
||||
Input.set_mouse_mode(Input.MOUSE_MODE_CAPTURED)
|
||||
|
||||
func _input(event):
|
||||
if event is InputEventMouseMotion:
|
||||
camera_change = event.relative
|
||||
|
||||
func fly(delta):
|
||||
# reset the direction of the player
|
||||
direction = Vector3()
|
||||
|
||||
# get the rotation of the camera
|
||||
var aim = $Head/Camera.get_global_transform().basis
|
||||
|
||||
# check input and change direction
|
||||
if Input.is_action_pressed("move_forward"):
|
||||
direction -= aim.z
|
||||
if Input.is_action_pressed("move_backward"):
|
||||
direction += aim.z
|
||||
if Input.is_action_pressed("move_left"):
|
||||
direction -= aim.x
|
||||
if Input.is_action_pressed("move_right"):
|
||||
direction += aim.x
|
||||
|
||||
direction = direction.normalized()
|
||||
|
||||
# where would the player go at max speed
|
||||
var target = direction * FLY_SPEED
|
||||
|
||||
# calculate a portion of the distance to go
|
||||
velocity = velocity.linear_interpolate(target, FLY_ACCEL * delta)
|
||||
|
||||
# move
|
||||
move_and_slide(velocity)
|
||||
|
||||
func aim():
|
||||
if camera_change.length() > 0:
|
||||
$Head.rotate_y(deg2rad(-camera_change.x * mouse_sensitivity))
|
||||
|
||||
var change = -camera_change.y * mouse_sensitivity
|
||||
if change + camera_angle < 90 and change + camera_angle > -90:
|
||||
$Head/Camera.rotate_x(deg2rad(change))
|
||||
camera_angle += change
|
||||
camera_change = Vector2()
|
||||
78
mirrors/assets/scripts/PlayerAlt.gd
Normal file
78
mirrors/assets/scripts/PlayerAlt.gd
Normal file
|
|
@ -0,0 +1,78 @@
|
|||
extends KinematicBody
|
||||
|
||||
var camera_angle = 0
|
||||
var mouse_sensitivity = 0.3
|
||||
var camera_change = Vector2()
|
||||
|
||||
var velocity = Vector3()
|
||||
var direction = Vector3()
|
||||
|
||||
#fly variables
|
||||
const FLY_SPEED = 20
|
||||
const FLY_ACCEL = 4
|
||||
|
||||
var mouse_captured = true
|
||||
|
||||
func _ready():
|
||||
Input.set_mouse_mode(Input.MOUSE_MODE_CAPTURED)
|
||||
|
||||
func _physics_process(delta):
|
||||
|
||||
if mouse_captured:
|
||||
aim()
|
||||
fly(delta)
|
||||
# emit signal - playerinfo_updated
|
||||
var tf = $Head/Camera.get_global_transform_interpolated()
|
||||
if tf != Events.player_tf_old:
|
||||
Events.emit_signal("player_transform_updated", $Head/Camera.get_global_translation(), $Head.global_rotation.y)
|
||||
Events.player_tf_old = tf
|
||||
|
||||
if Input.is_action_just_pressed('toggle_mouse'):
|
||||
if mouse_captured:
|
||||
mouse_captured = false
|
||||
Input.set_mouse_mode(Input.MOUSE_MODE_VISIBLE)
|
||||
else:
|
||||
mouse_captured = true
|
||||
Input.set_mouse_mode(Input.MOUSE_MODE_CAPTURED)
|
||||
|
||||
func _input(event):
|
||||
if event is InputEventMouseMotion:
|
||||
camera_change = event.relative
|
||||
|
||||
func fly(delta):
|
||||
# reset the direction of the player
|
||||
direction = Vector3()
|
||||
|
||||
# get the rotation of the camera
|
||||
var aim = $Head/Camera.get_global_transform().basis
|
||||
|
||||
# check input and change direction
|
||||
if Input.is_action_pressed("move_forward"):
|
||||
direction -= aim.z
|
||||
if Input.is_action_pressed("move_backward"):
|
||||
direction += aim.z
|
||||
if Input.is_action_pressed("move_left"):
|
||||
direction -= aim.x
|
||||
if Input.is_action_pressed("move_right"):
|
||||
direction += aim.x
|
||||
|
||||
direction = direction.normalized()
|
||||
|
||||
# where would the player go at max speed
|
||||
var target = direction * FLY_SPEED
|
||||
|
||||
# calculate a portion of the distance to go
|
||||
velocity = velocity.linear_interpolate(target, FLY_ACCEL * delta)
|
||||
|
||||
# move
|
||||
move_and_slide(velocity)
|
||||
|
||||
func aim():
|
||||
if camera_change.length() > 0:
|
||||
$Head.rotate_y(deg2rad(-camera_change.x * mouse_sensitivity))
|
||||
|
||||
var change = -camera_change.y * mouse_sensitivity
|
||||
if change + camera_angle < 90 and change + camera_angle > -90:
|
||||
$Head/Camera.rotate_x(deg2rad(change))
|
||||
camera_angle += change
|
||||
camera_change = Vector2()
|
||||
51
mirrors/assets/scripts/PortalPair.gd
Normal file
51
mirrors/assets/scripts/PortalPair.gd
Normal file
|
|
@ -0,0 +1,51 @@
|
|||
extends Node
|
||||
|
||||
onready var portals := [$PortalA, $PortalB]
|
||||
onready var links := {
|
||||
$PortalA: $PortalB,
|
||||
$PortalB: $PortalA,
|
||||
}
|
||||
|
||||
func init_portal(portal: Node) -> void:
|
||||
# Connect the mesh material shader to the viewport of the linked portal
|
||||
var linked: Node = links[portal]
|
||||
var link_viewport: Viewport = linked.get_node("Viewport")
|
||||
var tex := link_viewport.get_texture()
|
||||
var mat = portal.get_node("MeshInstance").material_override
|
||||
mat.set_shader_param("texture_albedo", tex)
|
||||
|
||||
# Init portals
|
||||
func _ready() -> void:
|
||||
for portal in portals:
|
||||
init_portal(portal)
|
||||
|
||||
func get_camera() -> Camera:
|
||||
return get_viewport().get_camera()
|
||||
|
||||
# Move the camera to a location near the linked portal; this is done by
|
||||
# taking the position of the player relative to the linked portal, and
|
||||
# rotating it pi radians
|
||||
func move_camera(portal: Node) -> void:
|
||||
var linked: Node = links[portal]
|
||||
var trans: Transform = linked.global_transform.inverse() \
|
||||
* get_camera().global_transform
|
||||
var up := Vector3(0, 1, 0)
|
||||
trans = trans.rotated(up, PI)
|
||||
portal.get_node("CameraHolder").transform = trans
|
||||
var cam_pos: Transform = portal.get_node("CameraHolder").global_transform
|
||||
portal.get_node("Viewport/Camera").global_transform = cam_pos
|
||||
|
||||
# Sync the viewport size with the window size
|
||||
func sync_viewport(portal: Node) -> void:
|
||||
portal.get_node("Viewport").size = get_viewport().size
|
||||
|
||||
# warning-ignore:unused_argument
|
||||
func _process(delta: float) -> void:
|
||||
for portal in portals:
|
||||
move_camera(portal)
|
||||
sync_viewport(portal)
|
||||
|
||||
# Return whether the position is in front of a portal
|
||||
func in_front_of_portal(portal: Node, pos: Transform) -> bool:
|
||||
var portal_pos = portal.global_transform
|
||||
return portal_pos.xform_inv(pos.origin).z < 0
|
||||
BIN
mirrors/assets/shaders/BrickMaterial.material
Normal file
BIN
mirrors/assets/shaders/BrickMaterial.material
Normal file
Binary file not shown.
7
mirrors/default_env.tres
Normal file
7
mirrors/default_env.tres
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
[gd_resource type="Environment" load_steps=2 format=2]
|
||||
|
||||
[sub_resource type="ProceduralSky" id=1]
|
||||
|
||||
[resource]
|
||||
background_mode = 2
|
||||
background_sky = SubResource( 1 )
|
||||
95
mirrors/main.gd
Normal file
95
mirrors/main.gd
Normal file
|
|
@ -0,0 +1,95 @@
|
|||
extends RigidBody
|
||||
|
||||
export (String, MULTILINE) var patch = ""
|
||||
export (float, 0, 100) var audible_range_max = 10.0
|
||||
export (float, 1, 12) var preset = 0
|
||||
|
||||
var _my_patch = "res://mirrors/WooWang.pd"
|
||||
var _my_id = 0
|
||||
|
||||
func set_size(size):
|
||||
$CollisionShape.shape.radius = size
|
||||
$MeshInstance.mesh.radius = size
|
||||
$MeshInstance.mesh.height = size * 2
|
||||
|
||||
func set_freq(freq):
|
||||
Global._gdpd.start_message(2)
|
||||
Global._gdpd.add_symbol('freq')
|
||||
Global._gdpd.add_float(freq)
|
||||
Global._gdpd.finish_list("fromGodot" + String(_my_id))
|
||||
|
||||
func set_gain(gain):
|
||||
Global._gdpd.start_message(2)
|
||||
Global._gdpd.add_symbol('gain')
|
||||
Global._gdpd.add_float(gain)
|
||||
Global._gdpd.finish_list("fromGodot" + String(_my_id))
|
||||
|
||||
func set_param(param):
|
||||
Global._gdpd.start_message(param.size()+1)
|
||||
Global._gdpd.add_symbol("param")
|
||||
for i in range(param.size()):
|
||||
Global._gdpd.add_float(param[i])
|
||||
Global._gdpd.finish_list("fromGodot" + String(_my_id))
|
||||
|
||||
func set_preset(prs):
|
||||
preset = prs
|
||||
Global._gdpd.start_message(2)
|
||||
Global._gdpd.add_symbol("preset")
|
||||
Global._gdpd.add_float(prs)
|
||||
Global._gdpd.finish_list("fromGodot" + String(_my_id))
|
||||
|
||||
func set_color(color):
|
||||
$MeshInstance.material_override = SpatialMaterial.new()
|
||||
$MeshInstance.material_override.albedo_color = color
|
||||
|
||||
func _ready():
|
||||
# save patch (for export)
|
||||
# _save_patch()
|
||||
|
||||
# load patch
|
||||
_my_id = Global.load_patch(ProjectSettings.globalize_path(_my_patch))
|
||||
|
||||
# listen 'player_transform_updated' event
|
||||
Events.connect("player_transform_updated", self, "_on_Events_player_transform_updated")
|
||||
|
||||
# send 'preset'
|
||||
# set_preset(preset)
|
||||
|
||||
func _on_Events_player_transform_updated(playerpos, playerheading):
|
||||
var mypos = get_global_translation()
|
||||
var mypos2d = Vector2(mypos.x, mypos.z)
|
||||
var playerpos2d = Vector2(playerpos.x, playerpos.z)
|
||||
# calculate distance
|
||||
var distance = mypos.distance_to(playerpos)
|
||||
# calculate angle
|
||||
var angle = fmod(fmod(playerpos2d.angle_to_point(mypos2d) + playerheading - PI/2, PI*2) + PI*2, PI*2)
|
||||
if angle > PI:
|
||||
angle = angle - PI*2
|
||||
# (check)
|
||||
# print(str(_my_id) +" : ("+ str(distance) +","+ str(angle) +")")
|
||||
# calculate gain
|
||||
var gain = 1 - distance/audible_range_max
|
||||
# send to the patch
|
||||
Global._gdpd.start_message(3)
|
||||
Global._gdpd.add_symbol("panvol")
|
||||
Global._gdpd.add_float(gain)
|
||||
Global._gdpd.add_float(angle)
|
||||
Global._gdpd.finish_list("fromGodot" + String(_my_id))
|
||||
|
||||
|
||||
func _exit_tree():
|
||||
Global.close_patch(_my_id)
|
||||
pass
|
||||
|
||||
#func _save_patch():
|
||||
# # save patch
|
||||
# # prepare directory
|
||||
# var patch_name = _my_patch.split("/")[-1]
|
||||
# var patch_dir = _my_patch.trim_suffix(patch_name)
|
||||
# var dir = Directory.new()
|
||||
# dir.make_dir_recursive(patch_dir)
|
||||
# # save to file
|
||||
# var file = File.new()
|
||||
# file.open(_my_patch, File.WRITE)
|
||||
# file.store_string(patch)
|
||||
# file.close()
|
||||
83
mirrors/main.pd
Normal file
83
mirrors/main.pd
Normal file
|
|
@ -0,0 +1,83 @@
|
|||
#N canvas 647 210 456 518 12;
|
||||
#X obj 361 21 loadbang;
|
||||
#X msg 361 51 \; pd dsp 1;
|
||||
#X floatatom 21 198 5 0 0 0 - - - 0;
|
||||
#X obj 21 22 r fromGodot\$0;
|
||||
#X obj 21 46 list trim;
|
||||
#X obj 303 253 hsl 100 20 -1 1 0 0 empty empty empty -2 -10 0 12 #fcfcfc #000000 #000000 0 1;
|
||||
#X obj 300 349 line~;
|
||||
#X msg 300 325 \$1 100;
|
||||
#X obj 300 278 expr ($f1 + 1)/8;
|
||||
#X floatatom 300 302 5 0 0 0 - - - 0;
|
||||
#N canvas 68 97 450 300 pan2~ 0;
|
||||
#X obj 51 98 cos~;
|
||||
#X obj 111 98 cos~;
|
||||
#X obj 33 128 *~;
|
||||
#X obj 93 128 *~;
|
||||
#X obj 33 158 outlet~;
|
||||
#X obj 93 158 outlet~;
|
||||
#X obj 33 24 inlet~;
|
||||
#X obj 111 24 inlet~;
|
||||
#X obj 111 74 +~ 0.75;
|
||||
#X connect 0 0 2 1;
|
||||
#X connect 1 0 3 1;
|
||||
#X connect 2 0 4 0;
|
||||
#X connect 3 0 5 0;
|
||||
#X connect 6 0 2 0;
|
||||
#X connect 6 0 3 0;
|
||||
#X connect 7 0 8 0;
|
||||
#X connect 7 0 0 0;
|
||||
#X connect 8 0 1 0;
|
||||
#X restore 199 437 pd pan2~;
|
||||
#X obj 199 467 dac~ 1 2;
|
||||
#X obj 199 407 *~;
|
||||
#X obj 189 127 unpack f f;
|
||||
#X floatatom 296 159 5 0 0 0 - - - 0;
|
||||
#X obj 296 182 sin;
|
||||
#X floatatom 296 206 5 0 0 0 - - - 0;
|
||||
#X obj 21 256 noise~;
|
||||
#X obj 21 286 bp~ 500 1000;
|
||||
#X obj 21 70 route freq gain panvol;
|
||||
#X obj 21 316 *~;
|
||||
#X obj 189 264 line~;
|
||||
#X msg 189 240 \$1 100;
|
||||
#X floatatom 189 177 5 0 0 0 - - - 0;
|
||||
#X obj 132 310 switch~;
|
||||
#X obj 132 286 tgl 19 0 empty empty empty 0 -10 0 12 #fcfcfc #000000 #000000 0 1;
|
||||
#X obj 132 262 change;
|
||||
#X text 89 155 switch on/off before 0 to stop startup pops, f 12;
|
||||
#X obj 189 216 max 0;
|
||||
#X obj 203 336 *~;
|
||||
#X obj 132 238 > -0.1;
|
||||
#X connect 2 0 18 1;
|
||||
#X connect 3 0 4 0;
|
||||
#X connect 4 0 19 0;
|
||||
#X connect 5 0 8 0;
|
||||
#X connect 6 0 10 1;
|
||||
#X connect 7 0 6 0;
|
||||
#X connect 8 0 9 0;
|
||||
#X connect 9 0 7 0;
|
||||
#X connect 10 0 11 0;
|
||||
#X connect 10 1 11 1;
|
||||
#X connect 12 0 10 0;
|
||||
#X connect 13 0 23 0;
|
||||
#X connect 13 1 14 0;
|
||||
#X connect 14 0 15 0;
|
||||
#X connect 15 0 16 0;
|
||||
#X connect 16 0 5 0;
|
||||
#X connect 17 0 18 0;
|
||||
#X connect 18 0 20 0;
|
||||
#X connect 19 0 2 0;
|
||||
#X connect 19 1 20 1;
|
||||
#X connect 19 2 13 0;
|
||||
#X connect 20 0 12 0;
|
||||
#X connect 21 0 29 0;
|
||||
#X connect 21 0 29 1;
|
||||
#X connect 22 0 21 0;
|
||||
#X connect 23 0 28 0;
|
||||
#X connect 23 0 30 0;
|
||||
#X connect 25 0 24 0;
|
||||
#X connect 26 0 25 0;
|
||||
#X connect 28 0 22 0;
|
||||
#X connect 29 0 12 1;
|
||||
#X connect 30 0 26 0;
|
||||
27
mirrors/main.tscn
Normal file
27
mirrors/main.tscn
Normal file
|
|
@ -0,0 +1,27 @@
|
|||
[gd_scene load_steps=6 format=2]
|
||||
|
||||
[ext_resource path="res://mirrors/main.gd" type="Script" id=1]
|
||||
|
||||
[sub_resource type="PhysicsMaterial" id=3]
|
||||
|
||||
[sub_resource type="SphereShape" id=1]
|
||||
|
||||
[sub_resource type="SphereMesh" id=2]
|
||||
resource_local_to_scene = true
|
||||
|
||||
[sub_resource type="SpatialMaterial" id=6]
|
||||
albedo_color = Color( 0.101961, 0.027451, 1, 1 )
|
||||
|
||||
[node name="main" type="RigidBody" groups=["sounders"]]
|
||||
collision_layer = 4
|
||||
collision_mask = 0
|
||||
physics_material_override = SubResource( 3 )
|
||||
gravity_scale = 0.0
|
||||
script = ExtResource( 1 )
|
||||
|
||||
[node name="CollisionShape" type="CollisionShape" parent="."]
|
||||
shape = SubResource( 1 )
|
||||
|
||||
[node name="MeshInstance" type="MeshInstance" parent="."]
|
||||
mesh = SubResource( 2 )
|
||||
material/0 = SubResource( 6 )
|
||||
96
mirrors/osc.gd
Normal file
96
mirrors/osc.gd
Normal file
|
|
@ -0,0 +1,96 @@
|
|||
extends RigidBody
|
||||
|
||||
export (String, MULTILINE) var patch = ""
|
||||
export (float, 0, 100) var audible_range_max = 10.0
|
||||
export (float, 1, 23) var preset = 1
|
||||
|
||||
var _my_patch = "res://mirrors/Dotdots.pd"
|
||||
var _my_id = 0
|
||||
|
||||
func set_size(size):
|
||||
$CollisionShape.shape.radius = size
|
||||
$MeshInstance.mesh.radius = size
|
||||
$MeshInstance.mesh.height = size * 2
|
||||
|
||||
func set_freq(freq):
|
||||
Global._gdpd.start_message(2)
|
||||
Global._gdpd.add_symbol('freq')
|
||||
Global._gdpd.add_float(freq)
|
||||
Global._gdpd.finish_list("fromGodot" + String(_my_id))
|
||||
|
||||
func set_gain(gain):
|
||||
Global._gdpd.start_message(2)
|
||||
Global._gdpd.add_symbol('gain')
|
||||
Global._gdpd.add_float(gain)
|
||||
Global._gdpd.finish_list("fromGodot" + String(_my_id))
|
||||
|
||||
func set_param(param):
|
||||
Global._gdpd.start_message(param.size()+1)
|
||||
Global._gdpd.add_symbol("param")
|
||||
for i in range(param.size()):
|
||||
Global._gdpd.add_float(param[i])
|
||||
Global._gdpd.finish_list("fromGodot" + String(_my_id))
|
||||
|
||||
func set_preset(prs):
|
||||
preset = prs
|
||||
Global._gdpd.start_message(2)
|
||||
Global._gdpd.add_symbol("preset")
|
||||
Global._gdpd.add_float(prs)
|
||||
Global._gdpd.finish_list("fromGodot" + String(_my_id))
|
||||
|
||||
func set_color(color):
|
||||
$MeshInstance.material_override = SpatialMaterial.new()
|
||||
$MeshInstance.material_override.albedo_color = color
|
||||
|
||||
func _ready():
|
||||
# save patch (for export)
|
||||
# _save_patch()
|
||||
|
||||
# load patch
|
||||
_my_id = Global.load_patch(ProjectSettings.globalize_path(_my_patch))
|
||||
|
||||
# listen 'player_transform_updated' event
|
||||
Events.connect("player_transform_updated", self, "_on_Events_player_transform_updated")
|
||||
|
||||
# send 'preset'
|
||||
# set_preset(preset)
|
||||
set_preset(ceil(rand_range(0, 23)))
|
||||
|
||||
func _on_Events_player_transform_updated(playerpos, playerheading):
|
||||
var mypos = get_global_translation()
|
||||
var mypos2d = Vector2(mypos.x, mypos.z)
|
||||
var playerpos2d = Vector2(playerpos.x, playerpos.z)
|
||||
# calculate distance
|
||||
var distance = mypos.distance_to(playerpos)
|
||||
# calculate angle
|
||||
var angle = fmod(fmod(playerpos2d.angle_to_point(mypos2d) + playerheading - PI/2, PI*2) + PI*2, PI*2)
|
||||
if angle > PI:
|
||||
angle = angle - PI*2
|
||||
# (check)
|
||||
# print(str(_my_id) +" : ("+ str(distance) +","+ str(angle) +")")
|
||||
# calculate gain
|
||||
var gain = 1 - distance/audible_range_max
|
||||
# send to the patch
|
||||
Global._gdpd.start_message(3)
|
||||
Global._gdpd.add_symbol("panvol")
|
||||
Global._gdpd.add_float(gain)
|
||||
Global._gdpd.add_float(angle)
|
||||
Global._gdpd.finish_list("fromGodot" + String(_my_id))
|
||||
|
||||
|
||||
func _exit_tree():
|
||||
Global.close_patch(_my_id)
|
||||
pass
|
||||
|
||||
#func _save_patch():
|
||||
# # save patch
|
||||
# # prepare directory
|
||||
# var patch_name = _my_patch.split("/")[-1]
|
||||
# var patch_dir = _my_patch.trim_suffix(patch_name)
|
||||
# var dir = Directory.new()
|
||||
# dir.make_dir_recursive(patch_dir)
|
||||
# # save to file
|
||||
# var file = File.new()
|
||||
# file.open(_my_patch, File.WRITE)
|
||||
# file.store_string(patch)
|
||||
# file.close()
|
||||
23
mirrors/osc.tscn
Normal file
23
mirrors/osc.tscn
Normal file
|
|
@ -0,0 +1,23 @@
|
|||
[gd_scene load_steps=5 format=2]
|
||||
|
||||
[ext_resource path="res://mirrors/osc.gd" type="Script" id=1]
|
||||
|
||||
[sub_resource type="PhysicsMaterial" id=3]
|
||||
|
||||
[sub_resource type="SphereShape" id=1]
|
||||
|
||||
[sub_resource type="SphereMesh" id=2]
|
||||
resource_local_to_scene = true
|
||||
|
||||
[node name="osc" type="RigidBody" groups=["sounders"]]
|
||||
collision_layer = 4
|
||||
collision_mask = 0
|
||||
physics_material_override = SubResource( 3 )
|
||||
gravity_scale = 0.0
|
||||
script = ExtResource( 1 )
|
||||
|
||||
[node name="CollisionShape" type="CollisionShape" parent="."]
|
||||
shape = SubResource( 1 )
|
||||
|
||||
[node name="MeshInstance" type="MeshInstance" parent="."]
|
||||
mesh = SubResource( 2 )
|
||||
130
mirrors/project.godot.off
Normal file
130
mirrors/project.godot.off
Normal file
|
|
@ -0,0 +1,130 @@
|
|||
; Engine configuration file.
|
||||
; It's best edited using the editor UI and not directly,
|
||||
; since the parameters that go here are not all obvious.
|
||||
;
|
||||
; Format:
|
||||
; [section] ; section goes between []
|
||||
; param=value ; assign values to parameters
|
||||
|
||||
config_version=4
|
||||
|
||||
_global_script_classes=[ ]
|
||||
_global_script_class_icons={
|
||||
}
|
||||
|
||||
[application]
|
||||
|
||||
config/name="Mirrors"
|
||||
run/main_scene="res://mirrors/assets/levels/Game.tscn"
|
||||
config/icon="res://mirrors/icon.png"
|
||||
|
||||
[autoload]
|
||||
|
||||
Events="*res://mirrors/autoload/Events.tscn"
|
||||
Global="*res://mirrors/autoload/Global.tscn"
|
||||
|
||||
[input]
|
||||
|
||||
ui_left={
|
||||
"deadzone": 0.5,
|
||||
"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":65,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
|
||||
, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":14,"pressure":0.0,"pressed":false,"script":null)
|
||||
]
|
||||
}
|
||||
ui_right={
|
||||
"deadzone": 0.5,
|
||||
"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":68,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
|
||||
, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":15,"pressure":0.0,"pressed":false,"script":null)
|
||||
]
|
||||
}
|
||||
ui_up={
|
||||
"deadzone": 0.5,
|
||||
"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":87,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
|
||||
, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":12,"pressure":0.0,"pressed":false,"script":null)
|
||||
]
|
||||
}
|
||||
ui_down={
|
||||
"deadzone": 0.5,
|
||||
"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":83,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
|
||||
, Object(InputEventJoypadButton,"resource_local_to_scene":false,"resource_name":"","device":0,"button_index":13,"pressure":0.0,"pressed":false,"script":null)
|
||||
]
|
||||
}
|
||||
move_fd={
|
||||
"deadzone": 0.5,
|
||||
"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":87,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
|
||||
, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777232,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
|
||||
]
|
||||
}
|
||||
move_bk={
|
||||
"deadzone": 0.5,
|
||||
"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777234,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
|
||||
, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":83,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
|
||||
]
|
||||
}
|
||||
move_left={
|
||||
"deadzone": 0.5,
|
||||
"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":65,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
|
||||
, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777231,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
|
||||
]
|
||||
}
|
||||
move_right={
|
||||
"deadzone": 0.5,
|
||||
"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":68,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
|
||||
, Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777233,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
|
||||
]
|
||||
}
|
||||
jump={
|
||||
"deadzone": 0.5,
|
||||
"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":32,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
|
||||
]
|
||||
}
|
||||
use={
|
||||
"deadzone": 0.5,
|
||||
"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":69,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
|
||||
]
|
||||
}
|
||||
FlyCheat={
|
||||
"deadzone": 0.5,
|
||||
"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":true,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":51,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
|
||||
]
|
||||
}
|
||||
fullscreen_toggle={
|
||||
"deadzone": 0.5,
|
||||
"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":true,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777221,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
|
||||
]
|
||||
}
|
||||
add={
|
||||
"deadzone": 0.5,
|
||||
"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777349,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
|
||||
]
|
||||
}
|
||||
sub={
|
||||
"deadzone": 0.5,
|
||||
"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777347,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
|
||||
]
|
||||
}
|
||||
reset_speed={
|
||||
"deadzone": 0.5,
|
||||
"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777345,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
|
||||
]
|
||||
}
|
||||
reload_scene={
|
||||
"deadzone": 0.5,
|
||||
"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":82,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
|
||||
]
|
||||
}
|
||||
toggle_help={
|
||||
"deadzone": 0.5,
|
||||
"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777244,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
|
||||
]
|
||||
}
|
||||
toggle_mouse={
|
||||
"deadzone": 0.5,
|
||||
"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777217,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
|
||||
]
|
||||
}
|
||||
mouse_toggle={
|
||||
"deadzone": 0.5,
|
||||
"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":74,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
|
||||
]
|
||||
}
|
||||
206
pantyTunnel/Clicks.pd
Normal file
206
pantyTunnel/Clicks.pd
Normal file
|
|
@ -0,0 +1,206 @@
|
|||
#N canvas 199 278 446 513 12;
|
||||
#X obj 21 22 r fromGodot\$0;
|
||||
#X obj 21 46 list trim;
|
||||
#X obj 303 253 hsl 100 20 -1 1 0 0 empty empty empty -2 -10 0 12 #fcfcfc #000000 #000000 0 1;
|
||||
#X obj 300 349 line~;
|
||||
#X msg 300 325 \$1 100;
|
||||
#X obj 300 278 expr ($f1 + 1)/8;
|
||||
#X floatatom 300 302 5 0 0 0 - - - 0;
|
||||
#N canvas 68 97 450 300 pan2~ 0;
|
||||
#X obj 51 98 cos~;
|
||||
#X obj 111 98 cos~;
|
||||
#X obj 33 128 *~;
|
||||
#X obj 93 128 *~;
|
||||
#X obj 33 158 outlet~;
|
||||
#X obj 93 158 outlet~;
|
||||
#X obj 33 24 inlet~;
|
||||
#X obj 111 24 inlet~;
|
||||
#X obj 111 74 +~ 0.75;
|
||||
#X connect 0 0 2 1;
|
||||
#X connect 1 0 3 1;
|
||||
#X connect 2 0 4 0;
|
||||
#X connect 3 0 5 0;
|
||||
#X connect 6 0 2 0;
|
||||
#X connect 6 0 3 0;
|
||||
#X connect 7 0 8 0;
|
||||
#X connect 7 0 0 0;
|
||||
#X connect 8 0 1 0;
|
||||
#X restore 199 437 pd pan2~;
|
||||
#X obj 199 467 dac~ 1 2;
|
||||
#X obj 199 407 *~;
|
||||
#X obj 189 127 unpack f f;
|
||||
#X floatatom 296 159 5 0 0 0 - - - 0;
|
||||
#X obj 296 182 sin;
|
||||
#X floatatom 296 206 5 0 0 0 - - - 0;
|
||||
#X obj 21 120 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000 #000000;
|
||||
#X obj 361 21 loadbang;
|
||||
#X obj 21 70 route bang panvol param preset;
|
||||
#X msg 359 58 \; pd dsp 1;
|
||||
#N canvas 590 23 1243 806 Clicks 0;
|
||||
#X obj 96 599 outlet~;
|
||||
#X obj 265 49 r \$0-preset;
|
||||
#X obj 665 540 s \$0-preset;
|
||||
#X obj 609 53 inlet;
|
||||
#X obj 217 47 inlet;
|
||||
#X floatatom 220 179 5 0 0 0 - - - 0;
|
||||
#X floatatom 264 181 5 0 0 0 - - - 0;
|
||||
#X floatatom 172 180 5 0 0 0 - - - 0;
|
||||
#X floatatom 306 181 5 0 0 0 - - - 0;
|
||||
#X obj 98 540 cos~;
|
||||
#X obj 99 566 *~ 0.1;
|
||||
#X obj 98 504 expr~ if($v1 == 0 \, $v2 \, $v3);
|
||||
#X obj 98 471 expr~ $v1 < $v2;
|
||||
#X obj 100 382 wrap~;
|
||||
#X obj 116 427 expr~ $v3*$v1/$v2;
|
||||
#X obj 257 425 expr~ (1-$v3)*($v1-$v2)/(1-$v2)+$v3;
|
||||
#X floatatom 439 246 5 0 0 0 - - - 0;
|
||||
#X floatatom 274 292 5 0 2 0 - - - 0;
|
||||
#X obj 100 355 *~;
|
||||
#X obj 181 307 samphold~;
|
||||
#X obj 101 318 +~;
|
||||
#X obj 102 290 phasor~;
|
||||
#X obj 211 272 *~;
|
||||
#X obj 213 243 phasor~;
|
||||
#X floatatom 213 211 5 0 0 0 - - - 0;
|
||||
#X floatatom 103 240 5 0 0 0 - - - 0;
|
||||
#X floatatom 310 211 5 0 0 0 - - - 0;
|
||||
#X obj 317 262 / 100;
|
||||
#X text 353 326 d (0~+1);
|
||||
#X text 260 210 Slave;
|
||||
#X floatatom 350 182 5 0 0 0 - - - 0;
|
||||
#X obj 229 136 unpack f f f f f;
|
||||
#X obj 610 79 sel 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16;
|
||||
#X msg 613 109 1.25 1000 1.01 11.5 1.83;
|
||||
#X msg 634 137 4.25 177 0.86 12.5 1.96;
|
||||
#X msg 658 165 19.25 21 0.49 105.5 0.96;
|
||||
#X msg 682 191 348.2 -2 1.49 1317 1.04;
|
||||
#X msg 706 215 290.2 0 -0.04 1156 1.24;
|
||||
#X msg 729 238 285.2 0 -0.03 512.6 1.68;
|
||||
#X msg 752 267 0.25 13 0.89 2000 1.78;
|
||||
#X msg 771 293 -0.05 13 0.89 2000 1.78;
|
||||
#X msg 792 321 -0.01 11.16 0.89 5000 0.69;
|
||||
#X msg 809 353 0.14 82.16 0.58 4141 1.05;
|
||||
#X msg 828 381 596.1 7 1.81 1000 1.07;
|
||||
#X msg 844 412 9.87 440.7 2.01 18.5 25.83;
|
||||
#X msg 864 437 1.87 225.7 0.13 18.38 22.83;
|
||||
#X msg 878 463 16.87 55 20.5 -18.9 22.76;
|
||||
#X msg 896 491 -0.05 21.69 2.35 3.58 22.76;
|
||||
#X msg 914 516 19.95 21.69 2.35 0.58 27.76;
|
||||
#X text 350 212 comment, f 2;
|
||||
#X text 39 240 comment;
|
||||
#N canvas 0 22 450 278 (subpatch) 0;
|
||||
#X array scope 100 float 3;
|
||||
#A 0 0.791709 0.792441 0.793172 0.793933 0.794694 0.795425 0.79618 0.7969 0.79762 0.798368 0.799088 0.799808 0.800557 0.801276 0.801996 0.92 0.92 0.92 0.92 0.91 0.900001 0.890001 0.880001 0.864001 0.848002 0.832002 0.816003 0.800003 0.784003 0.768004 0.752004 0.736005 0.720005 0.700005 0.680006 0.660006 0.640007 0.620007 0.600008 0.580008 0.560009 0.542867 0.525724 0.508582 0.491439 0.474297 0.457154 0.440012 0.42287 0.405727 0.388585 0.371442 0.3543 0.337157 0.320015 0.305729 0.291444 0.277159 0.262873 0.248588 0.234303 0.220017 0.205732 0.191447 0.177161 0.162876 0.148591 0.134305 0.12002 0.0933539 0.0666878 0.0400218 0.0133558 -0.0133102 -0.0399762 -0.0599757 -0.0799752 -0.0999747 -0.119974 -0.139974 -0.159973 -0.179973 -0.199972 -0.219972 -0.239971 -0.27997 -0.319969 -0.359968 -0.399967 -0.439966 -0.639961 -0.659961 -0.67996 2.87994 2.91994 2.95994 3.01994 3.07993 3.13993 3.43993;
|
||||
#X coords 0 1 100 -1 150 50 1 0 0;
|
||||
#X restore 211 568 graph;
|
||||
#X connect 1 0 31 0;
|
||||
#X connect 3 0 32 0;
|
||||
#X connect 4 0 31 0;
|
||||
#X connect 5 0 24 0;
|
||||
#X connect 6 0 17 0;
|
||||
#X connect 7 0 25 0;
|
||||
#X connect 8 0 26 0;
|
||||
#X connect 9 0 10 0;
|
||||
#X connect 10 0 0 0;
|
||||
#X connect 11 0 9 0;
|
||||
#X connect 12 0 11 0;
|
||||
#X connect 13 0 12 0;
|
||||
#X connect 13 0 14 0;
|
||||
#X connect 13 0 15 0;
|
||||
#X connect 14 0 11 1;
|
||||
#X connect 15 0 11 2;
|
||||
#X connect 16 0 15 2;
|
||||
#X connect 16 0 14 2;
|
||||
#X connect 17 0 14 1;
|
||||
#X connect 17 0 15 1;
|
||||
#X connect 17 0 12 1;
|
||||
#X connect 18 0 13 0;
|
||||
#X connect 19 0 18 1;
|
||||
#X connect 20 0 18 0;
|
||||
#X connect 21 0 20 0;
|
||||
#X connect 21 0 19 1;
|
||||
#X connect 22 0 19 0;
|
||||
#X connect 23 0 22 0;
|
||||
#X connect 24 0 23 0;
|
||||
#X connect 25 0 21 0;
|
||||
#X connect 26 0 27 0;
|
||||
#X connect 27 0 22 1;
|
||||
#X connect 30 0 16 0;
|
||||
#X connect 31 0 7 0;
|
||||
#X connect 31 1 5 0;
|
||||
#X connect 31 2 6 0;
|
||||
#X connect 31 3 8 0;
|
||||
#X connect 31 4 30 0;
|
||||
#X connect 32 0 33 0;
|
||||
#X connect 32 1 34 0;
|
||||
#X connect 32 2 35 0;
|
||||
#X connect 32 3 36 0;
|
||||
#X connect 32 4 37 0;
|
||||
#X connect 32 5 38 0;
|
||||
#X connect 32 6 39 0;
|
||||
#X connect 32 7 40 0;
|
||||
#X connect 32 8 41 0;
|
||||
#X connect 32 9 42 0;
|
||||
#X connect 32 10 43 0;
|
||||
#X connect 32 11 44 0;
|
||||
#X connect 32 12 45 0;
|
||||
#X connect 32 13 46 0;
|
||||
#X connect 32 14 47 0;
|
||||
#X connect 32 15 48 0;
|
||||
#X connect 33 0 2 0;
|
||||
#X connect 34 0 2 0;
|
||||
#X connect 35 0 2 0;
|
||||
#X connect 36 0 2 0;
|
||||
#X connect 37 0 2 0;
|
||||
#X connect 38 0 2 0;
|
||||
#X connect 39 0 2 0;
|
||||
#X connect 40 0 2 0;
|
||||
#X connect 41 0 2 0;
|
||||
#X connect 42 0 2 0;
|
||||
#X connect 43 0 2 0;
|
||||
#X connect 44 0 2 0;
|
||||
#X connect 45 0 2 0;
|
||||
#X connect 46 0 2 0;
|
||||
#X connect 47 0 2 0;
|
||||
#X connect 48 0 2 0;
|
||||
#X restore 30 300 pd Clicks;
|
||||
#X obj 189 264 line~;
|
||||
#X msg 189 240 \$1 100;
|
||||
#X floatatom 189 177 5 0 0 0 - - - 0;
|
||||
#X obj 132 310 switch~;
|
||||
#X obj 132 286 tgl 19 0 empty empty empty 0 -10 0 12 #fcfcfc #000000 #000000 0 1;
|
||||
#X obj 132 262 change;
|
||||
#X text 89 155 switch on/off before 0 to stop startup pops, f 12;
|
||||
#X obj 189 216 max 0;
|
||||
#X obj 203 336 *~;
|
||||
#X obj 132 238 > -0.3;
|
||||
#X connect 0 0 1 0;
|
||||
#X connect 1 0 16 0;
|
||||
#X connect 2 0 5 0;
|
||||
#X connect 3 0 7 1;
|
||||
#X connect 4 0 3 0;
|
||||
#X connect 5 0 6 0;
|
||||
#X connect 6 0 4 0;
|
||||
#X connect 7 0 8 0;
|
||||
#X connect 7 1 8 1;
|
||||
#X connect 9 0 8 0;
|
||||
#X connect 9 0 8 1;
|
||||
#X connect 10 0 21 0;
|
||||
#X connect 10 1 11 0;
|
||||
#X connect 11 0 12 0;
|
||||
#X connect 12 0 13 0;
|
||||
#X connect 13 0 2 0;
|
||||
#X connect 16 0 14 0;
|
||||
#X connect 16 1 10 0;
|
||||
#X connect 16 3 18 1;
|
||||
#X connect 18 0 9 0;
|
||||
#X connect 19 0 27 0;
|
||||
#X connect 19 0 27 1;
|
||||
#X connect 20 0 19 0;
|
||||
#X connect 21 0 26 0;
|
||||
#X connect 21 0 28 0;
|
||||
#X connect 23 0 22 0;
|
||||
#X connect 24 0 23 0;
|
||||
#X connect 26 0 20 0;
|
||||
#X connect 27 0 9 1;
|
||||
#X connect 28 0 24 0;
|
||||
106
pantyTunnel/Player.gd
Normal file
106
pantyTunnel/Player.gd
Normal file
|
|
@ -0,0 +1,106 @@
|
|||
extends KinematicBody
|
||||
|
||||
#const GRAVITY = -24.8
|
||||
const GRAVITY = -10
|
||||
var vel = Vector3()
|
||||
const MAX_SPEED = 6
|
||||
#const JUMP_SPEED = 18
|
||||
const JUMP_SPEED = 6
|
||||
#const ACCEL = 4.5
|
||||
const ACCEL = 2
|
||||
|
||||
var dir = Vector3()
|
||||
|
||||
const DEACCEL= 16
|
||||
const MAX_SLOPE_ANGLE = 40
|
||||
|
||||
var camera
|
||||
var rotation_helper
|
||||
|
||||
var MOUSE_SENSITIVITY = 0.05
|
||||
|
||||
func _ready():
|
||||
camera = $Rotation_Helper/Camera
|
||||
rotation_helper = $Rotation_Helper
|
||||
|
||||
Input.set_mouse_mode(Input.MOUSE_MODE_CAPTURED)
|
||||
|
||||
func _physics_process(delta):
|
||||
process_input(delta)
|
||||
process_movement(delta)
|
||||
|
||||
func process_input(delta):
|
||||
|
||||
# ----------------------------------
|
||||
# Walking
|
||||
dir = Vector3()
|
||||
var cam_xform = camera.get_global_transform()
|
||||
|
||||
var input_movement_vector = Vector3()
|
||||
|
||||
if Input.is_action_pressed("move_forward"):
|
||||
input_movement_vector.y += 1
|
||||
if Input.is_action_pressed("move_backward"):
|
||||
input_movement_vector.y -= 1
|
||||
if Input.is_action_pressed("move_left"):
|
||||
input_movement_vector.x -= 1
|
||||
if Input.is_action_pressed("move_right"):
|
||||
input_movement_vector.x += 1
|
||||
|
||||
input_movement_vector = input_movement_vector.normalized()
|
||||
|
||||
# Basis vectors are already normalized.
|
||||
dir += -cam_xform.basis.z * input_movement_vector.y
|
||||
dir += cam_xform.basis.x * input_movement_vector.x
|
||||
# ----------------------------------
|
||||
|
||||
# ----------------------------------
|
||||
# Jumping
|
||||
if is_on_floor():
|
||||
if Input.is_action_just_pressed("jump"):
|
||||
vel.y = JUMP_SPEED
|
||||
# ----------------------------------
|
||||
|
||||
# ----------------------------------
|
||||
# Capturing/Freeing the cursor
|
||||
if Input.is_action_just_pressed("ui_cancel"):
|
||||
if Input.get_mouse_mode() == Input.MOUSE_MODE_VISIBLE:
|
||||
Input.set_mouse_mode(Input.MOUSE_MODE_CAPTURED)
|
||||
else:
|
||||
Input.set_mouse_mode(Input.MOUSE_MODE_VISIBLE)
|
||||
# ----------------------------------
|
||||
|
||||
func process_movement(delta):
|
||||
dir.y = 0
|
||||
dir = dir.normalized()
|
||||
|
||||
vel.y += delta * GRAVITY
|
||||
|
||||
var hvel = vel
|
||||
hvel.y = 0
|
||||
|
||||
var target = dir
|
||||
target *= MAX_SPEED
|
||||
|
||||
var accel
|
||||
if dir.dot(hvel) > 0:
|
||||
accel = ACCEL
|
||||
else:
|
||||
accel = DEACCEL
|
||||
|
||||
hvel = hvel.linear_interpolate(target, accel * delta)
|
||||
vel.x = hvel.x
|
||||
vel.z = hvel.z
|
||||
vel = move_and_slide(vel, Vector3(0, 1, 0), 0.05, 4, deg2rad(MAX_SLOPE_ANGLE))
|
||||
|
||||
# emit signal - playerinfo_updated
|
||||
Events.emit_signal("player_transform_updated", $Rotation_Helper/Camera.get_global_translation(), $Rotation_Helper.global_rotation.y)
|
||||
|
||||
func _input(event):
|
||||
if event is InputEventMouseMotion and Input.get_mouse_mode() == Input.MOUSE_MODE_CAPTURED:
|
||||
rotation_helper.rotate_x(deg2rad(event.relative.y * MOUSE_SENSITIVITY))
|
||||
self.rotate_y(deg2rad(event.relative.x * MOUSE_SENSITIVITY * -1))
|
||||
|
||||
var camera_rot = rotation_helper.rotation_degrees
|
||||
camera_rot.x = clamp(camera_rot.x, -70, 70)
|
||||
rotation_helper.rotation_degrees = camera_rot
|
||||
33
pantyTunnel/Player.tscn
Normal file
33
pantyTunnel/Player.tscn
Normal file
|
|
@ -0,0 +1,33 @@
|
|||
[gd_scene load_steps=3 format=2]
|
||||
|
||||
[ext_resource path="res://pantyTunnel/Player.gd" type="Script" id=1]
|
||||
|
||||
[sub_resource type="CapsuleShape" id=1]
|
||||
radius = 0.6
|
||||
height = 2.0
|
||||
|
||||
[node name="Player" type="KinematicBody"]
|
||||
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 3.52113, 0.98772 )
|
||||
script = ExtResource( 1 )
|
||||
|
||||
[node name="Capsule" type="CollisionShape" parent="."]
|
||||
transform = Transform( 1, 0, 0, 0, -4.37114e-08, -1, 0, 1, -4.37114e-08, 0, 0, 0 )
|
||||
shape = SubResource( 1 )
|
||||
|
||||
[node name="Rotation_Helper" type="Spatial" parent="."]
|
||||
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.5, 0 )
|
||||
|
||||
[node name="Camera" type="Camera" parent="Rotation_Helper"]
|
||||
far = 10000.0
|
||||
|
||||
[node name="SpotLight" type="SpotLight" parent="Rotation_Helper/Camera"]
|
||||
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.0473127, 0 )
|
||||
light_color = Color( 0.992157, 0.905882, 0.913725, 1 )
|
||||
light_energy = 2.468
|
||||
shadow_enabled = true
|
||||
shadow_color = Color( 0.396078, 0.854902, 0.937255, 1 )
|
||||
shadow_bias = 0.191
|
||||
spot_range = 18.298
|
||||
spot_attenuation = 1.86607
|
||||
spot_angle = 33.44
|
||||
spot_angle_attenuation = 2.63902
|
||||
12
pantyTunnel/Scene.gd
Normal file
12
pantyTunnel/Scene.gd
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
extends Node
|
||||
|
||||
var morae = load("res://pantyTunnel/morae.tscn")
|
||||
|
||||
func _ready():
|
||||
randomize()
|
||||
for i in range(120):
|
||||
var mr = morae.instance()
|
||||
mr.set_preset(i%16 + 1)
|
||||
mr.audible_range_max = 20
|
||||
add_child(mr)
|
||||
mr.look_at_from_position(Vector3(rand_range(-13, -700), rand_range(10, 0), rand_range(-13, 13)), Vector3.ZERO, Vector3.UP)
|
||||
67
pantyTunnel/Scene.tscn
Normal file
67
pantyTunnel/Scene.tscn
Normal file
|
|
@ -0,0 +1,67 @@
|
|||
[gd_scene load_steps=8 format=2]
|
||||
|
||||
[ext_resource path="res://pantyTunnel/Player.tscn" type="PackedScene" id=2]
|
||||
[ext_resource path="res://pantyTunnel/Scene.gd" type="Script" id=3]
|
||||
|
||||
[sub_resource type="Environment" id=12]
|
||||
background_mode = 1
|
||||
background_color = Color( 1, 0.827451, 0.807843, 1 )
|
||||
background_energy = 0.0
|
||||
|
||||
[sub_resource type="CubeMesh" id=2]
|
||||
size = Vector3( 30, 1, 30 )
|
||||
|
||||
[sub_resource type="ConvexPolygonShape" id=5]
|
||||
points = PoolVector3Array( -15.1145, -0.617995, -15.1181, 15.1152, 0.562877, 15.1181, -15.1145, 0.562877, 15.1181, 15.1152, -0.617995, 15.1181, 15.1152, 0.562877, -15.1181, -15.1145, -0.617995, 15.1181, -15.1145, 0.562877, -15.1181, 15.1152, -0.617995, -15.1181 )
|
||||
|
||||
[sub_resource type="ConvexPolygonShape" id=6]
|
||||
points = PoolVector3Array( -15.1145, -0.617995, -15.1181, 15.1152, 0.562877, 15.1181, -15.1145, 0.562877, 15.1181, 15.1152, -0.617995, 15.1181, 15.1152, 0.562877, -15.1181, -15.1145, -0.617995, 15.1181, -15.1145, 0.562877, -15.1181, 15.1152, -0.617995, -15.1181 )
|
||||
|
||||
[sub_resource type="ConvexPolygonShape" id=7]
|
||||
points = PoolVector3Array( -15.1145, -0.617995, -15.1181, 15.1152, 0.562877, 15.1181, -15.1145, 0.562877, 15.1181, 15.1152, -0.617995, 15.1181, 15.1152, 0.562877, -15.1181, -15.1145, -0.617995, 15.1181, -15.1145, 0.562877, -15.1181, 15.1152, -0.617995, -15.1181 )
|
||||
|
||||
[node name="Scene" type="Node"]
|
||||
script = ExtResource( 3 )
|
||||
|
||||
[node name="WorldEnvironment" type="WorldEnvironment" parent="."]
|
||||
environment = SubResource( 12 )
|
||||
|
||||
[node name="Player" parent="." instance=ExtResource( 2 )]
|
||||
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -209.703, 4.44058, 1.41403 )
|
||||
collision_layer = 2
|
||||
|
||||
[node name="wall1" type="StaticBody" parent="."]
|
||||
transform = Transform( -4.37114e-08, 1, 0, -0.866025, -3.78552e-08, 0.5, 0.5, 2.18557e-08, 0.866025, -270, 0, -6 )
|
||||
collision_mask = 0
|
||||
|
||||
[node name="MeshInstance" type="MeshInstance" parent="wall1"]
|
||||
transform = Transform( 1, -3.88235e-23, 3.39406e-29, 0, -4.37114e-08, -20, 3.88235e-23, 1, -8.74228e-07, 9.53674e-07, -213, 15 )
|
||||
mesh = SubResource( 2 )
|
||||
|
||||
[node name="CollisionShape" type="CollisionShape" parent="wall1"]
|
||||
transform = Transform( 0.915719, 0.40182, -2.77601e-07, -3.68402e-09, -2.61473e-08, -20, -0.40182, 0.915719, -4.49265e-07, -2.86102e-06, -213, 15 )
|
||||
shape = SubResource( 5 )
|
||||
|
||||
[node name="wall2" type="StaticBody" parent="."]
|
||||
transform = Transform( -4.37114e-08, 1, 0, -0.866025, -3.78552e-08, -0.5, -0.5, -2.18557e-08, 0.866025, -270, 0, 6 )
|
||||
collision_mask = 0
|
||||
|
||||
[node name="MeshInstance" type="MeshInstance" parent="wall2"]
|
||||
transform = Transform( 1, 0, 0, 0, -4.37114e-08, -20, 0, 1, -8.74228e-07, 0, -211, -15 )
|
||||
mesh = SubResource( 2 )
|
||||
|
||||
[node name="CollisionShape" type="CollisionShape" parent="wall2"]
|
||||
transform = Transform( 0.842124, -0.539285, 6.09479e-07, -6.901e-09, -6.72843e-08, -20, 0.539285, 0.842124, -1.20767e-06, -9.53674e-07, -211, -15 )
|
||||
shape = SubResource( 6 )
|
||||
|
||||
[node name="floor" type="StaticBody" parent="."]
|
||||
transform = Transform( -0.00315908, 0.999995, 0, -0.999995, -0.00315908, 0, 0, 0, 1, -274.978, 17.1167, 0 )
|
||||
collision_mask = 0
|
||||
|
||||
[node name="MeshInstance" type="MeshInstance" parent="floor"]
|
||||
transform = Transform( -4.37114e-08, -1, 8.74228e-07, 0, -4.37114e-08, -20, 1, -4.37114e-08, 3.82137e-14, 15, -207, 0 )
|
||||
mesh = SubResource( 2 )
|
||||
|
||||
[node name="CollisionShape" type="CollisionShape" parent="floor"]
|
||||
transform = Transform( -4.37114e-08, -1, 8.74228e-07, 0, -4.37114e-08, -20, 1, -4.37114e-08, 3.82137e-14, 15, -207, 0 )
|
||||
shape = SubResource( 7 )
|
||||
8
pantyTunnel/default_env.tres
Normal file
8
pantyTunnel/default_env.tres
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
[gd_resource type="Environment" load_steps=2 format=2]
|
||||
|
||||
[sub_resource type="ProceduralSky" id=1]
|
||||
sun_energy = 0.0
|
||||
|
||||
[resource]
|
||||
background_mode = 2
|
||||
background_sky = SubResource( 1 )
|
||||
89
pantyTunnel/morae.gd
Normal file
89
pantyTunnel/morae.gd
Normal file
|
|
@ -0,0 +1,89 @@
|
|||
extends RigidBody
|
||||
|
||||
export (float, 0, 120) var audible_range_max = 20.0
|
||||
export (float, 1, 16) var preset = 1
|
||||
|
||||
export (bool) var use_embeded_patch = false
|
||||
export (String, MULTILINE) var patch = ""
|
||||
|
||||
var _my_patch = "user://Clicks.pd"
|
||||
var _my_id = 0
|
||||
|
||||
func set_param(param):
|
||||
Global._gdpd.start_message(param.size()+1)
|
||||
Global._gdpd.add_symbol("param")
|
||||
for i in range(param.size()):
|
||||
Global._gdpd.add_float(param[i])
|
||||
Global._gdpd.finish_list("fromGodot" + String(_my_id))
|
||||
|
||||
func set_preset(prs):
|
||||
preset = prs
|
||||
Global._gdpd.start_message(2)
|
||||
Global._gdpd.add_symbol("preset")
|
||||
Global._gdpd.add_float(prs)
|
||||
Global._gdpd.finish_list("fromGodot" + String(_my_id))
|
||||
|
||||
func set_color(color):
|
||||
$MeshInstance.material_override = SpatialMaterial.new()
|
||||
$MeshInstance.material_override.albedo_color = color
|
||||
|
||||
func relocate(center, radius_range):
|
||||
# relocate randomly into a circular zone
|
||||
var rr = radius_range[1] - radius_range[0]
|
||||
var displacement = polar2cartesian(randf()*rr+radius_range[0], randf()*2*PI)
|
||||
var loc = center + displacement
|
||||
look_at_from_position(Vector3(loc.x, randf()*2 + 1, loc.y), Vector3.FORWARD, Vector3.UP)
|
||||
|
||||
func _ready():
|
||||
# save patch (for export)
|
||||
if use_embeded_patch:
|
||||
assert(_my_patch.substr(0, 7) == "user://", "use userpath with embeded_patch enabled !")
|
||||
assert(patch != "", "patch is empty?")
|
||||
_save_patch()
|
||||
|
||||
# load patch
|
||||
_my_id = Global.load_patch(ProjectSettings.globalize_path(_my_patch))
|
||||
|
||||
# listen 'player_transform_updated' event
|
||||
Events.connect("player_transform_updated", self, "_on_Events_player_transform_updated")
|
||||
|
||||
# send 'preset'
|
||||
set_preset(preset)
|
||||
|
||||
func _on_Events_player_transform_updated(playerpos, playerheading):
|
||||
var mypos = get_global_translation()
|
||||
var mypos2d = Vector2(mypos.x, mypos.z)
|
||||
var playerpos2d = Vector2(playerpos.x, playerpos.z)
|
||||
# calculate distance
|
||||
var distance = mypos.distance_to(playerpos)
|
||||
# calculate angle
|
||||
var angle = fmod(fmod(playerpos2d.angle_to_point(mypos2d) + playerheading - PI/2, PI*2) + PI*2, PI*2)
|
||||
if angle > PI:
|
||||
angle = angle - PI*2
|
||||
# (check)
|
||||
# print(str(_my_id) +" : ("+ str(distance) +","+ str(angle) +")")
|
||||
# calculate gain
|
||||
var gain = 1 - distance/audible_range_max
|
||||
# send to the patch
|
||||
Global._gdpd.start_message(3)
|
||||
Global._gdpd.add_symbol("panvol")
|
||||
Global._gdpd.add_float(gain)
|
||||
Global._gdpd.add_float(angle)
|
||||
Global._gdpd.finish_list("fromGodot" + String(_my_id))
|
||||
|
||||
|
||||
func _exit_tree():
|
||||
Global.close_patch(_my_id)
|
||||
|
||||
func _save_patch():
|
||||
# save patch
|
||||
# prepare directory
|
||||
var patch_name = _my_patch.split("/")[-1]
|
||||
var patch_dir = _my_patch.trim_suffix(patch_name)
|
||||
var dir = Directory.new()
|
||||
dir.make_dir_recursive(patch_dir)
|
||||
# save to file
|
||||
var file = File.new()
|
||||
file.open(_my_patch, File.WRITE)
|
||||
file.store_string(patch)
|
||||
file.close()
|
||||
244
pantyTunnel/morae.tscn
Normal file
244
pantyTunnel/morae.tscn
Normal file
|
|
@ -0,0 +1,244 @@
|
|||
[gd_scene load_steps=8 format=2]
|
||||
|
||||
[ext_resource path="res://pantyTunnel/morae.gd" type="Script" id=1]
|
||||
|
||||
[sub_resource type="CapsuleShape" id=1]
|
||||
|
||||
[sub_resource type="Gradient" id=4]
|
||||
colors = PoolColorArray( 0.551183, 0.669772, 0.874865, 1, 0.759774, 0.917833, 0.372567, 1 )
|
||||
|
||||
[sub_resource type="GradientTexture" id=5]
|
||||
gradient = SubResource( 4 )
|
||||
|
||||
[sub_resource type="SpatialMaterial" id=6]
|
||||
render_priority = 1
|
||||
albedo_texture = SubResource( 5 )
|
||||
metallic = 0.46
|
||||
|
||||
[sub_resource type="CapsuleMesh" id=2]
|
||||
material = SubResource( 6 )
|
||||
radius = 0.542
|
||||
|
||||
[sub_resource type="SpatialMaterial" id=3]
|
||||
albedo_color = Color( 0.996078, 0.894118, 0.0666667, 1 )
|
||||
|
||||
[node name="morae" type="RigidBody"]
|
||||
transform = Transform( 1, 0, 0, 0, -4.37114e-08, -1, 0, 1, -4.37114e-08, 0, 0, 0 )
|
||||
script = ExtResource( 1 )
|
||||
use_embeded_patch = true
|
||||
patch = "#N canvas 199 278 446 513 12;
|
||||
#X obj 21 22 r fromGodot\\$0;
|
||||
#X obj 21 46 list trim;
|
||||
#X obj 303 253 hsl 100 20 -1 1 0 0 empty empty empty -2 -10 0 12 #fcfcfc #000000 #000000 0 1;
|
||||
#X obj 300 349 line~;
|
||||
#X msg 300 325 \\$1 100;
|
||||
#X obj 300 278 expr ($f1 + 1)/8;
|
||||
#X floatatom 300 302 5 0 0 0 - - - 0;
|
||||
#N canvas 68 97 450 300 pan2~ 0;
|
||||
#X obj 51 98 cos~;
|
||||
#X obj 111 98 cos~;
|
||||
#X obj 33 128 *~;
|
||||
#X obj 93 128 *~;
|
||||
#X obj 33 158 outlet~;
|
||||
#X obj 93 158 outlet~;
|
||||
#X obj 33 24 inlet~;
|
||||
#X obj 111 24 inlet~;
|
||||
#X obj 111 74 +~ 0.75;
|
||||
#X connect 0 0 2 1;
|
||||
#X connect 1 0 3 1;
|
||||
#X connect 2 0 4 0;
|
||||
#X connect 3 0 5 0;
|
||||
#X connect 6 0 2 0;
|
||||
#X connect 6 0 3 0;
|
||||
#X connect 7 0 8 0;
|
||||
#X connect 7 0 0 0;
|
||||
#X connect 8 0 1 0;
|
||||
#X restore 199 437 pd pan2~;
|
||||
#X obj 199 467 dac~ 1 2;
|
||||
#X obj 199 407 *~;
|
||||
#X obj 189 127 unpack f f;
|
||||
#X floatatom 296 159 5 0 0 0 - - - 0;
|
||||
#X obj 296 182 sin;
|
||||
#X floatatom 296 206 5 0 0 0 - - - 0;
|
||||
#X obj 21 120 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000 #000000;
|
||||
#X obj 361 21 loadbang;
|
||||
#X obj 21 70 route bang panvol param preset;
|
||||
#X msg 359 58 \\; pd dsp 1;
|
||||
#N canvas 590 23 1243 806 Clicks 0;
|
||||
#X obj 96 599 outlet~;
|
||||
#X obj 265 49 r \\$0-preset;
|
||||
#X obj 665 540 s \\$0-preset;
|
||||
#X obj 609 53 inlet;
|
||||
#X obj 217 47 inlet;
|
||||
#X floatatom 220 179 5 0 0 0 - - - 0;
|
||||
#X floatatom 264 181 5 0 0 0 - - - 0;
|
||||
#X floatatom 172 180 5 0 0 0 - - - 0;
|
||||
#X floatatom 306 181 5 0 0 0 - - - 0;
|
||||
#X obj 98 540 cos~;
|
||||
#X obj 99 566 *~ 0.1;
|
||||
#X obj 98 504 expr~ if($v1 == 0 \\, $v2 \\, $v3);
|
||||
#X obj 98 471 expr~ $v1 < $v2;
|
||||
#X obj 100 382 wrap~;
|
||||
#X obj 116 427 expr~ $v3*$v1/$v2;
|
||||
#X obj 257 425 expr~ (1-$v3)*($v1-$v2)/(1-$v2)+$v3;
|
||||
#X floatatom 439 246 5 0 0 0 - - - 0;
|
||||
#X floatatom 274 292 5 0 2 0 - - - 0;
|
||||
#X obj 100 355 *~;
|
||||
#X obj 181 307 samphold~;
|
||||
#X obj 101 318 +~;
|
||||
#X obj 102 290 phasor~;
|
||||
#X obj 211 272 *~;
|
||||
#X obj 213 243 phasor~;
|
||||
#X floatatom 213 211 5 0 0 0 - - - 0;
|
||||
#X floatatom 103 240 5 0 0 0 - - - 0;
|
||||
#X floatatom 310 211 5 0 0 0 - - - 0;
|
||||
#X obj 317 262 / 100;
|
||||
#X text 353 326 d (0~+1);
|
||||
#X text 260 210 Slave;
|
||||
#X floatatom 350 182 5 0 0 0 - - - 0;
|
||||
#X obj 229 136 unpack f f f f f;
|
||||
#X obj 610 79 sel 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16;
|
||||
#X msg 613 109 1.25 1000 1.01 11.5 1.83;
|
||||
#X msg 634 137 4.25 177 0.86 12.5 1.96;
|
||||
#X msg 658 165 19.25 21 0.49 105.5 0.96;
|
||||
#X msg 682 191 348.2 -2 1.49 1317 1.04;
|
||||
#X msg 706 215 290.2 0 -0.04 1156 1.24;
|
||||
#X msg 729 238 285.2 0 -0.03 512.6 1.68;
|
||||
#X msg 752 267 0.25 13 0.89 2000 1.78;
|
||||
#X msg 771 293 -0.05 13 0.89 2000 1.78;
|
||||
#X msg 792 321 -0.01 11.16 0.89 5000 0.69;
|
||||
#X msg 809 353 0.14 82.16 0.58 4141 1.05;
|
||||
#X msg 828 381 596.1 7 1.81 1000 1.07;
|
||||
#X msg 844 412 9.87 440.7 2.01 18.5 25.83;
|
||||
#X msg 864 437 1.87 225.7 0.13 18.38 22.83;
|
||||
#X msg 878 463 16.87 55 20.5 -18.9 22.76;
|
||||
#X msg 896 491 -0.05 21.69 2.35 3.58 22.76;
|
||||
#X msg 914 516 19.95 21.69 2.35 0.58 27.76;
|
||||
#X text 350 212 comment, f 2;
|
||||
#X text 39 240 comment;
|
||||
#N canvas 0 22 450 278 (subpatch) 0;
|
||||
#X array scope 100 float 3;
|
||||
#A 0 0.791709 0.792441 0.793172 0.793933 0.794694 0.795425 0.79618 0.7969 0.79762 0.798368 0.799088 0.799808 0.800557 0.801276 0.801996 0.92 0.92 0.92 0.92 0.91 0.900001 0.890001 0.880001 0.864001 0.848002 0.832002 0.816003 0.800003 0.784003 0.768004 0.752004 0.736005 0.720005 0.700005 0.680006 0.660006 0.640007 0.620007 0.600008 0.580008 0.560009 0.542867 0.525724 0.508582 0.491439 0.474297 0.457154 0.440012 0.42287 0.405727 0.388585 0.371442 0.3543 0.337157 0.320015 0.305729 0.291444 0.277159 0.262873 0.248588 0.234303 0.220017 0.205732 0.191447 0.177161 0.162876 0.148591 0.134305 0.12002 0.0933539 0.0666878 0.0400218 0.0133558 -0.0133102 -0.0399762 -0.0599757 -0.0799752 -0.0999747 -0.119974 -0.139974 -0.159973 -0.179973 -0.199972 -0.219972 -0.239971 -0.27997 -0.319969 -0.359968 -0.399967 -0.439966 -0.639961 -0.659961 -0.67996 2.87994 2.91994 2.95994 3.01994 3.07993 3.13993 3.43993;
|
||||
#X coords 0 1 100 -1 150 50 1 0 0;
|
||||
#X restore 211 568 graph;
|
||||
#X connect 1 0 31 0;
|
||||
#X connect 3 0 32 0;
|
||||
#X connect 4 0 31 0;
|
||||
#X connect 5 0 24 0;
|
||||
#X connect 6 0 17 0;
|
||||
#X connect 7 0 25 0;
|
||||
#X connect 8 0 26 0;
|
||||
#X connect 9 0 10 0;
|
||||
#X connect 10 0 0 0;
|
||||
#X connect 11 0 9 0;
|
||||
#X connect 12 0 11 0;
|
||||
#X connect 13 0 12 0;
|
||||
#X connect 13 0 14 0;
|
||||
#X connect 13 0 15 0;
|
||||
#X connect 14 0 11 1;
|
||||
#X connect 15 0 11 2;
|
||||
#X connect 16 0 15 2;
|
||||
#X connect 16 0 14 2;
|
||||
#X connect 17 0 14 1;
|
||||
#X connect 17 0 15 1;
|
||||
#X connect 17 0 12 1;
|
||||
#X connect 18 0 13 0;
|
||||
#X connect 19 0 18 1;
|
||||
#X connect 20 0 18 0;
|
||||
#X connect 21 0 20 0;
|
||||
#X connect 21 0 19 1;
|
||||
#X connect 22 0 19 0;
|
||||
#X connect 23 0 22 0;
|
||||
#X connect 24 0 23 0;
|
||||
#X connect 25 0 21 0;
|
||||
#X connect 26 0 27 0;
|
||||
#X connect 27 0 22 1;
|
||||
#X connect 30 0 16 0;
|
||||
#X connect 31 0 7 0;
|
||||
#X connect 31 1 5 0;
|
||||
#X connect 31 2 6 0;
|
||||
#X connect 31 3 8 0;
|
||||
#X connect 31 4 30 0;
|
||||
#X connect 32 0 33 0;
|
||||
#X connect 32 1 34 0;
|
||||
#X connect 32 2 35 0;
|
||||
#X connect 32 3 36 0;
|
||||
#X connect 32 4 37 0;
|
||||
#X connect 32 5 38 0;
|
||||
#X connect 32 6 39 0;
|
||||
#X connect 32 7 40 0;
|
||||
#X connect 32 8 41 0;
|
||||
#X connect 32 9 42 0;
|
||||
#X connect 32 10 43 0;
|
||||
#X connect 32 11 44 0;
|
||||
#X connect 32 12 45 0;
|
||||
#X connect 32 13 46 0;
|
||||
#X connect 32 14 47 0;
|
||||
#X connect 32 15 48 0;
|
||||
#X connect 33 0 2 0;
|
||||
#X connect 34 0 2 0;
|
||||
#X connect 35 0 2 0;
|
||||
#X connect 36 0 2 0;
|
||||
#X connect 37 0 2 0;
|
||||
#X connect 38 0 2 0;
|
||||
#X connect 39 0 2 0;
|
||||
#X connect 40 0 2 0;
|
||||
#X connect 41 0 2 0;
|
||||
#X connect 42 0 2 0;
|
||||
#X connect 43 0 2 0;
|
||||
#X connect 44 0 2 0;
|
||||
#X connect 45 0 2 0;
|
||||
#X connect 46 0 2 0;
|
||||
#X connect 47 0 2 0;
|
||||
#X connect 48 0 2 0;
|
||||
#X restore 30 300 pd Clicks;
|
||||
#X obj 189 264 line~;
|
||||
#X msg 189 240 \\$1 100;
|
||||
#X floatatom 189 177 5 0 0 0 - - - 0;
|
||||
#X obj 132 310 switch~;
|
||||
#X obj 132 286 tgl 19 0 empty empty empty 0 -10 0 12 #fcfcfc #000000 #000000 0 1;
|
||||
#X obj 132 262 change;
|
||||
#X text 89 155 switch on/off before 0 to stop startup pops, f 12;
|
||||
#X obj 189 216 max 0;
|
||||
#X obj 203 336 *~;
|
||||
#X obj 132 238 > -0.3;
|
||||
#X connect 0 0 1 0;
|
||||
#X connect 1 0 16 0;
|
||||
#X connect 2 0 5 0;
|
||||
#X connect 3 0 7 1;
|
||||
#X connect 4 0 3 0;
|
||||
#X connect 5 0 6 0;
|
||||
#X connect 6 0 4 0;
|
||||
#X connect 7 0 8 0;
|
||||
#X connect 7 1 8 1;
|
||||
#X connect 9 0 8 0;
|
||||
#X connect 9 0 8 1;
|
||||
#X connect 10 0 21 0;
|
||||
#X connect 10 1 11 0;
|
||||
#X connect 11 0 12 0;
|
||||
#X connect 12 0 13 0;
|
||||
#X connect 13 0 2 0;
|
||||
#X connect 16 0 14 0;
|
||||
#X connect 16 1 10 0;
|
||||
#X connect 16 3 18 1;
|
||||
#X connect 18 0 9 0;
|
||||
#X connect 19 0 27 0;
|
||||
#X connect 19 0 27 1;
|
||||
#X connect 20 0 19 0;
|
||||
#X connect 21 0 26 0;
|
||||
#X connect 21 0 28 0;
|
||||
#X connect 23 0 22 0;
|
||||
#X connect 24 0 23 0;
|
||||
#X connect 26 0 20 0;
|
||||
#X connect 27 0 9 1;
|
||||
#X connect 28 0 24 0;
|
||||
"
|
||||
|
||||
[node name="CollisionShape" type="CollisionShape" parent="."]
|
||||
transform = Transform( 1, 0, 0, 0, -4.37114e-08, -1, 0, 1, -4.37114e-08, 0, 0, 0 )
|
||||
shape = SubResource( 1 )
|
||||
|
||||
[node name="MeshInstance" type="MeshInstance" parent="."]
|
||||
transform = Transform( 1, 0, 0, 0, -4.37114e-08, -1, 0, 1, -4.37114e-08, 0, 0, 0 )
|
||||
mesh = SubResource( 2 )
|
||||
material/0 = SubResource( 3 )
|
||||
75
pantyTunnel/project.godot.off
Normal file
75
pantyTunnel/project.godot.off
Normal file
|
|
@ -0,0 +1,75 @@
|
|||
; Engine configuration file.
|
||||
; It's best edited using the editor UI and not directly,
|
||||
; since the parameters that go here are not all obvious.
|
||||
;
|
||||
; Format:
|
||||
; [section] ; section goes between []
|
||||
; param=value ; assign values to parameters
|
||||
|
||||
config_version=4
|
||||
|
||||
[application]
|
||||
|
||||
config/name="Sands and Waves (panty tunnel)"
|
||||
run/main_scene="res://pantyTunnel/Scene.tscn"
|
||||
config/icon="res://pantyTunnel/icon.png"
|
||||
|
||||
[autoload]
|
||||
|
||||
Global="*res://pantyTunnel/autoload/Global.tscn"
|
||||
Events="*res://pantyTunnel/autoload/Events.tscn"
|
||||
|
||||
[display]
|
||||
|
||||
window/size/fullscreen=true
|
||||
|
||||
[gui]
|
||||
|
||||
common/drop_mouse_on_gui_input_disabled=true
|
||||
|
||||
[input]
|
||||
|
||||
move_right={
|
||||
"deadzone": 0.5,
|
||||
"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":68,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
|
||||
]
|
||||
}
|
||||
move_left={
|
||||
"deadzone": 0.5,
|
||||
"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":65,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
|
||||
]
|
||||
}
|
||||
move_forward={
|
||||
"deadzone": 0.5,
|
||||
"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":87,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
|
||||
]
|
||||
}
|
||||
move_backward={
|
||||
"deadzone": 0.5,
|
||||
"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":83,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
|
||||
]
|
||||
}
|
||||
toggle_mouse={
|
||||
"deadzone": 0.5,
|
||||
"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777217,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
|
||||
]
|
||||
}
|
||||
move_jump={
|
||||
"deadzone": 0.5,
|
||||
"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":32,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
|
||||
]
|
||||
}
|
||||
|
||||
[layer_names]
|
||||
|
||||
3d_physics/layer_1="world"
|
||||
3d_physics/layer_2="player"
|
||||
3d_physics/layer_3="sounder"
|
||||
|
||||
[physics]
|
||||
|
||||
common/enable_pause_aware_picking=true
|
||||
|
||||
[rendering]
|
||||
|
||||
environment/default_environment="res://pantyTunnel/default_env.tres"
|
||||
151
project.godot
Normal file
151
project.godot
Normal file
|
|
@ -0,0 +1,151 @@
|
|||
; Engine configuration file.
|
||||
; It's best edited using the editor UI and not directly,
|
||||
; since the parameters that go here are not all obvious.
|
||||
;
|
||||
; Format:
|
||||
; [section] ; section goes between []
|
||||
; param=value ; assign values to parameters
|
||||
|
||||
config_version=4
|
||||
|
||||
_global_script_classes=[ {
|
||||
"base": "Spatial",
|
||||
"class": "Branch",
|
||||
"language": "GDScript",
|
||||
"path": "res://crickets/src/Branch.gd"
|
||||
}, {
|
||||
"base": "Spatial",
|
||||
"class": "Branch2",
|
||||
"language": "GDScript",
|
||||
"path": "res://crickets/src/Branch2.gd"
|
||||
}, {
|
||||
"base": "Spatial",
|
||||
"class": "Floater",
|
||||
"language": "GDScript",
|
||||
"path": "res://buoyancy/ocean/Floater.gd"
|
||||
}, {
|
||||
"base": "Spatial",
|
||||
"class": "Leaves",
|
||||
"language": "GDScript",
|
||||
"path": "res://crickets/src/Leave.gd"
|
||||
}, {
|
||||
"base": "Spatial",
|
||||
"class": "PolyTree",
|
||||
"language": "GDScript",
|
||||
"path": "res://crickets/src/Tree.gd"
|
||||
}, {
|
||||
"base": "Spatial",
|
||||
"class": "PolyTree2",
|
||||
"language": "GDScript",
|
||||
"path": "res://crickets/src/Tree2.gd"
|
||||
} ]
|
||||
_global_script_class_icons={
|
||||
"Branch": "",
|
||||
"Branch2": "",
|
||||
"Floater": "",
|
||||
"Leaves": "",
|
||||
"PolyTree": "",
|
||||
"PolyTree2": ""
|
||||
}
|
||||
|
||||
[application]
|
||||
|
||||
config/name="Sand and Receive"
|
||||
run/main_scene="res://tenniscourts/src/Sandbox.tscn"
|
||||
config/icon="res://icon.png"
|
||||
|
||||
[autoload]
|
||||
|
||||
Global="*res://autoload/Global.tscn"
|
||||
Events="*res://autoload/Events.tscn"
|
||||
|
||||
[display]
|
||||
|
||||
window/size/fullscreen=true
|
||||
|
||||
[gui]
|
||||
|
||||
common/drop_mouse_on_gui_input_disabled=true
|
||||
|
||||
[input]
|
||||
|
||||
move_right={
|
||||
"deadzone": 0.5,
|
||||
"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":68,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
|
||||
]
|
||||
}
|
||||
move_left={
|
||||
"deadzone": 0.5,
|
||||
"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":65,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
|
||||
]
|
||||
}
|
||||
move_forward={
|
||||
"deadzone": 0.5,
|
||||
"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":87,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
|
||||
]
|
||||
}
|
||||
move_backward={
|
||||
"deadzone": 0.5,
|
||||
"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":83,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
|
||||
]
|
||||
}
|
||||
toggle_mouse={
|
||||
"deadzone": 0.5,
|
||||
"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777217,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
|
||||
]
|
||||
}
|
||||
jump={
|
||||
"deadzone": 0.5,
|
||||
"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":32,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
|
||||
]
|
||||
}
|
||||
sprint={
|
||||
"deadzone": 0.5,
|
||||
"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":16777237,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
|
||||
]
|
||||
}
|
||||
guide={
|
||||
"deadzone": 0.5,
|
||||
"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":71,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
|
||||
]
|
||||
}
|
||||
scene1={
|
||||
"deadzone": 0.5,
|
||||
"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":49,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
|
||||
]
|
||||
}
|
||||
scene2={
|
||||
"deadzone": 0.5,
|
||||
"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":50,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
|
||||
]
|
||||
}
|
||||
scene3={
|
||||
"deadzone": 0.5,
|
||||
"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":51,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
|
||||
]
|
||||
}
|
||||
scene4={
|
||||
"deadzone": 0.5,
|
||||
"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":52,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
|
||||
]
|
||||
}
|
||||
scene5={
|
||||
"deadzone": 0.5,
|
||||
"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":53,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
|
||||
]
|
||||
}
|
||||
scene6={
|
||||
"deadzone": 0.5,
|
||||
"events": [ Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"alt":false,"shift":false,"control":false,"meta":false,"command":false,"pressed":false,"scancode":54,"physical_scancode":0,"unicode":0,"echo":false,"script":null)
|
||||
]
|
||||
}
|
||||
|
||||
[layer_names]
|
||||
|
||||
3d_physics/layer_1="world"
|
||||
3d_physics/layer_2="player"
|
||||
3d_physics/layer_3="sounder"
|
||||
|
||||
[physics]
|
||||
|
||||
common/enable_pause_aware_picking=true
|
||||
BIN
tenniscourts/GodoM.otf
Normal file
BIN
tenniscourts/GodoM.otf
Normal file
Binary file not shown.
106
tenniscourts/Player.gd
Normal file
106
tenniscourts/Player.gd
Normal file
|
|
@ -0,0 +1,106 @@
|
|||
extends KinematicBody
|
||||
|
||||
#const GRAVITY = -24.8
|
||||
const GRAVITY = -10
|
||||
var vel = Vector3()
|
||||
const MAX_SPEED = 5
|
||||
#const JUMP_SPEED = 18
|
||||
const JUMP_SPEED = 6
|
||||
#const ACCEL = 4.5
|
||||
const ACCEL = 2
|
||||
|
||||
var dir = Vector3()
|
||||
|
||||
const DEACCEL= 16
|
||||
const MAX_SLOPE_ANGLE = 40
|
||||
|
||||
var camera
|
||||
var rotation_helper
|
||||
|
||||
var MOUSE_SENSITIVITY = 0.05
|
||||
|
||||
func _ready():
|
||||
camera = $Rotation_Helper/Camera
|
||||
rotation_helper = $Rotation_Helper
|
||||
|
||||
Input.set_mouse_mode(Input.MOUSE_MODE_CAPTURED)
|
||||
|
||||
func _physics_process(delta):
|
||||
process_input(delta)
|
||||
process_movement(delta)
|
||||
|
||||
func process_input(delta):
|
||||
|
||||
# ----------------------------------
|
||||
# Walking
|
||||
dir = Vector3()
|
||||
var cam_xform = camera.get_global_transform()
|
||||
|
||||
var input_movement_vector = Vector2()
|
||||
|
||||
if Input.is_action_pressed("move_forward"):
|
||||
input_movement_vector.y += 1
|
||||
if Input.is_action_pressed("move_backward"):
|
||||
input_movement_vector.y -= 1
|
||||
if Input.is_action_pressed("move_left"):
|
||||
input_movement_vector.x -= 1
|
||||
if Input.is_action_pressed("move_right"):
|
||||
input_movement_vector.x += 1
|
||||
|
||||
input_movement_vector = input_movement_vector.normalized()
|
||||
|
||||
# Basis vectors are already normalized.
|
||||
dir += -cam_xform.basis.z * input_movement_vector.y
|
||||
dir += cam_xform.basis.x * input_movement_vector.x
|
||||
# ----------------------------------
|
||||
|
||||
# ----------------------------------
|
||||
# Jumping
|
||||
# if is_on_floor():
|
||||
if Input.is_action_just_pressed("jump"):
|
||||
vel.y = JUMP_SPEED
|
||||
# ----------------------------------
|
||||
|
||||
# ----------------------------------
|
||||
# Capturing/Freeing the cursor
|
||||
if Input.is_action_just_pressed("ui_cancel"):
|
||||
if Input.get_mouse_mode() == Input.MOUSE_MODE_VISIBLE:
|
||||
Input.set_mouse_mode(Input.MOUSE_MODE_CAPTURED)
|
||||
else:
|
||||
Input.set_mouse_mode(Input.MOUSE_MODE_VISIBLE)
|
||||
# ----------------------------------
|
||||
|
||||
func process_movement(delta):
|
||||
dir.y = 0
|
||||
dir = dir.normalized()
|
||||
|
||||
vel.y += delta * GRAVITY
|
||||
|
||||
var hvel = vel
|
||||
hvel.y = 0
|
||||
|
||||
var target = dir
|
||||
target *= MAX_SPEED
|
||||
|
||||
var accel
|
||||
if dir.dot(hvel) > 0:
|
||||
accel = ACCEL
|
||||
else:
|
||||
accel = DEACCEL
|
||||
|
||||
hvel = hvel.linear_interpolate(target, accel * delta)
|
||||
vel.x = hvel.x
|
||||
vel.z = hvel.z
|
||||
vel = move_and_slide(vel, Vector3(0, 1, 0), 0.05, 4, deg2rad(MAX_SLOPE_ANGLE))
|
||||
|
||||
# emit signal - playerinfo_updated
|
||||
Events.emit_signal("player_transform_updated", $Rotation_Helper/Camera.get_global_translation(), $Rotation_Helper.global_rotation.y)
|
||||
|
||||
func _input(event):
|
||||
if event is InputEventMouseMotion and Input.get_mouse_mode() == Input.MOUSE_MODE_CAPTURED:
|
||||
rotation_helper.rotate_x(deg2rad(event.relative.y * MOUSE_SENSITIVITY))
|
||||
self.rotate_y(deg2rad(event.relative.x * MOUSE_SENSITIVITY * -1))
|
||||
|
||||
var camera_rot = rotation_helper.rotation_degrees
|
||||
camera_rot.x = clamp(camera_rot.x, -70, 70)
|
||||
rotation_helper.rotation_degrees = camera_rot
|
||||
22
tenniscourts/Player.tscn
Normal file
22
tenniscourts/Player.tscn
Normal file
|
|
@ -0,0 +1,22 @@
|
|||
[gd_scene load_steps=3 format=2]
|
||||
|
||||
[ext_resource path="res://tenniscourts/Player.gd" type="Script" id=1]
|
||||
|
||||
[sub_resource type="CapsuleShape" id=1]
|
||||
radius = 0.6
|
||||
height = 2.0
|
||||
|
||||
[node name="Player" type="KinematicBody"]
|
||||
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 3.52113, 0.98772 )
|
||||
script = ExtResource( 1 )
|
||||
|
||||
[node name="Capsule" type="CollisionShape" parent="."]
|
||||
transform = Transform( 1, 0, 0, 0, -4.37114e-08, -1, 0, 1, -4.37114e-08, 0, 0, 0 )
|
||||
shape = SubResource( 1 )
|
||||
|
||||
[node name="Rotation_Helper" type="Spatial" parent="."]
|
||||
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.1, 0 )
|
||||
|
||||
[node name="Camera" type="Camera" parent="Rotation_Helper"]
|
||||
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -1, 0 )
|
||||
far = 10000.0
|
||||
BIN
tenniscourts/Screen Shot 2022-11-15 at 2.51.10 PM.png
Normal file
BIN
tenniscourts/Screen Shot 2022-11-15 at 2.51.10 PM.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 136 KiB |
138
tenniscourts/TennisCourt.tscn
Normal file
138
tenniscourts/TennisCourt.tscn
Normal file
|
|
@ -0,0 +1,138 @@
|
|||
[gd_scene load_steps=15 format=2]
|
||||
|
||||
[ext_resource path="res://tenniscourts/shaders/tennis_bounce.gdshader" type="Shader" id=1]
|
||||
[ext_resource path="res://tenniscourts/shaders/depth_map.gdshader" type="Shader" id=2]
|
||||
[ext_resource path="res://tenniscourts/meshes/tennis_launcher.mesh" type="ArrayMesh" id=3]
|
||||
[ext_resource path="res://tenniscourts/TennisRamp.gd" type="Script" id=4]
|
||||
|
||||
[sub_resource type="ViewportTexture" id=44]
|
||||
viewport_path = NodePath("TennisParticles/DepthMap")
|
||||
|
||||
[sub_resource type="ShaderMaterial" id=45]
|
||||
resource_local_to_scene = true
|
||||
shader = ExtResource( 1 )
|
||||
shader_param/direction = Vector3( 0, -1, 0 )
|
||||
shader_param/spread = 5.0
|
||||
shader_param/flatness = 0.0
|
||||
shader_param/initial_linear_velocity = 20.0
|
||||
shader_param/initial_angle = 0.0
|
||||
shader_param/angular_velocity = 0.0
|
||||
shader_param/orbit_velocity = 0.0
|
||||
shader_param/linear_accel = 0.0
|
||||
shader_param/radial_accel = 0.0
|
||||
shader_param/tangent_accel = 0.0
|
||||
shader_param/damping = 0.0
|
||||
shader_param/scale = 1.0
|
||||
shader_param/hue_variation = 0.0
|
||||
shader_param/anim_speed = 0.0
|
||||
shader_param/anim_offset = 0.0
|
||||
shader_param/initial_linear_velocity_random = 0.2
|
||||
shader_param/initial_angle_random = 0.0
|
||||
shader_param/angular_velocity_random = 0.0
|
||||
shader_param/orbit_velocity_random = 0.0
|
||||
shader_param/linear_accel_random = 0.0
|
||||
shader_param/radial_accel_random = 0.0
|
||||
shader_param/tangent_accel_random = 0.0
|
||||
shader_param/damping_random = 0.0
|
||||
shader_param/scale_random = 0.0
|
||||
shader_param/hue_variation_random = 0.0
|
||||
shader_param/anim_speed_random = 0.0
|
||||
shader_param/anim_offset_random = 0.0
|
||||
shader_param/lifetime_randomness = 0.0
|
||||
shader_param/emission_box_extents = Vector3( 8, 0, 8 )
|
||||
shader_param/color_value = Color( 1, 1, 1, 1 )
|
||||
shader_param/trail_divisor = 1
|
||||
shader_param/gravity = Vector3( 0, -9.8, 0 )
|
||||
shader_param/occlusion_margin = 0.04
|
||||
shader_param/depth_cam_size = 16.0
|
||||
shader_param/example_normal = Vector3( -0.342, 0.94, 0 )
|
||||
shader_param/depth_map = SubResource( 44 )
|
||||
|
||||
[sub_resource type="SpatialMaterial" id=37]
|
||||
albedo_color = Color( 0.615686, 1, 0, 1 )
|
||||
metallic_specular = 1.0
|
||||
|
||||
[sub_resource type="SphereMesh" id=46]
|
||||
material = SubResource( 37 )
|
||||
radius = 0.065
|
||||
height = 0.13
|
||||
radial_segments = 8
|
||||
rings = 4
|
||||
|
||||
[sub_resource type="ShaderMaterial" id=42]
|
||||
resource_local_to_scene = true
|
||||
shader = ExtResource( 2 )
|
||||
|
||||
[sub_resource type="PlaneMesh" id=47]
|
||||
resource_local_to_scene = true
|
||||
material = SubResource( 42 )
|
||||
size = Vector2( 16, 16 )
|
||||
|
||||
[sub_resource type="ConvexPolygonShape" id=50]
|
||||
points = PoolVector3Array( 30.1523, 1.28426, 7.57614, -30.1523, -1.15228, -7.65228, -30.1523, -1.15228, 7.57614, -30.1523, 1.28426, -7.65228, 30.1523, -1.15228, -7.65228, -30.1523, 1.28426, 7.57614, 30.1523, -1.15228, 7.57614, 30.1523, 1.28426, -7.65228 )
|
||||
|
||||
[sub_resource type="NoiseTexture" id=48]
|
||||
|
||||
[sub_resource type="SpatialMaterial" id=39]
|
||||
roughness = 0.0
|
||||
clearcoat_enabled = true
|
||||
clearcoat = 1.0
|
||||
clearcoat_gloss = 1.0
|
||||
clearcoat_texture = SubResource( 48 )
|
||||
|
||||
[sub_resource type="CubeMesh" id=49]
|
||||
material = SubResource( 39 )
|
||||
size = Vector3( 60, 2, 15 )
|
||||
|
||||
[node name="Tennis" type="Spatial"]
|
||||
|
||||
[node name="TennisParticles" type="Particles" parent="."]
|
||||
transform = Transform( -4.37114e-08, -1, 0, 1, -4.37114e-08, 0, 0, 0, 1, -20, 3, 11.9878 )
|
||||
amount = 64
|
||||
lifetime = 12.0
|
||||
visibility_aabb = AABB( -25.0795, -42.2433, -10.4403, 32.4784, 42.5881, 20.8805 )
|
||||
local_coords = false
|
||||
process_material = SubResource( 45 )
|
||||
draw_pass_1 = SubResource( 46 )
|
||||
|
||||
[node name="RemoteTransform" type="RemoteTransform" parent="TennisParticles"]
|
||||
transform = Transform( 1, 0, 0, 0, -4.37114e-08, 1, 0, -1, -4.37114e-08, 0, 0, 0 )
|
||||
remote_path = NodePath("../DepthMap/Camera")
|
||||
|
||||
[node name="DepthMap" type="Viewport" parent="TennisParticles"]
|
||||
size = Vector2( 256, 256 )
|
||||
keep_3d_linear = true
|
||||
render_target_v_flip = true
|
||||
render_target_update_mode = 3
|
||||
|
||||
[node name="Camera" type="Camera" parent="TennisParticles/DepthMap"]
|
||||
transform = Transform( -4.37114e-08, 4.37114e-08, -1, 1, 1.91069e-15, -4.37114e-08, 0, -1, -4.37114e-08, -20, 3, 11.9878 )
|
||||
cull_mask = 2
|
||||
projection = 1
|
||||
current = true
|
||||
size = 16.0
|
||||
|
||||
[node name="Texture" type="MeshInstance" parent="TennisParticles/DepthMap/Camera"]
|
||||
transform = Transform( 1, -1.27992e-16, 5.59471e-24, 0, -4.37114e-08, -1, 1.27992e-16, 1, -4.37114e-08, 4.76837e-07, -2.84217e-14, -0.1 )
|
||||
layers = 2
|
||||
mesh = SubResource( 47 )
|
||||
skeleton = NodePath("../..")
|
||||
|
||||
[node name="TennisLauncher" type="MeshInstance" parent="TennisParticles"]
|
||||
transform = Transform( 1.91069e-15, 1, -4.37114e-08, 4.37114e-08, -4.37114e-08, -1, -1, 0, -4.37114e-08, 0, 2, 0 )
|
||||
layers = 3
|
||||
mesh = ExtResource( 3 )
|
||||
skeleton = NodePath("../..")
|
||||
|
||||
[node name="StaticBody" type="StaticBody" parent="TennisParticles"]
|
||||
transform = Transform( 0.34202, 0.939693, 0, -0.939693, 0.34202, 0, 0, 0, 1, 4, -40, 0 )
|
||||
|
||||
[node name="CollisionShape" type="CollisionShape" parent="TennisParticles/StaticBody"]
|
||||
shape = SubResource( 50 )
|
||||
|
||||
[node name="TennisRamp" type="MeshInstance" parent="TennisParticles/StaticBody"]
|
||||
layers = 3
|
||||
mesh = SubResource( 49 )
|
||||
skeleton = NodePath("../../..")
|
||||
script = ExtResource( 4 )
|
||||
audible_range_max = 50.0
|
||||
68
tenniscourts/TennisRamp.gd
Normal file
68
tenniscourts/TennisRamp.gd
Normal file
|
|
@ -0,0 +1,68 @@
|
|||
extends MeshInstance
|
||||
|
||||
|
||||
var _my_patch = "res://tenniscourts/bouncing.pd"
|
||||
var _my_id = 0
|
||||
|
||||
export (String, MULTILINE) var patch = ""
|
||||
export (float, 0, 100) var audible_range_max = 10.0
|
||||
export (Array, float) var parameters = [-7, -2, 3996, 30, 0.7]
|
||||
|
||||
func set_param(param):
|
||||
parameters = param
|
||||
|
||||
func set_color(color):
|
||||
$MeshInstance.material_override = SpatialMaterial.new()
|
||||
$MeshInstance.material_override.albedo_color = color
|
||||
|
||||
func relocate(center, radius_range):
|
||||
# relocate randomly into a circular zone
|
||||
var rr = radius_range[1] - radius_range[0]
|
||||
var displacement = polar2cartesian(randf()*rr+radius_range[0], randf()*2*PI)
|
||||
var loc = center + displacement
|
||||
look_at_from_position(Vector3(loc.x, randf()*2 + 1, loc.y), Vector3.FORWARD, Vector3.UP)
|
||||
|
||||
func _ready():
|
||||
# load patch
|
||||
_my_id = Global.load_patch(ProjectSettings.globalize_path(_my_patch))
|
||||
|
||||
# listen 'player_transform_updated' event
|
||||
Events.connect("player_transform_updated", self, "_on_Events_player_transform_updated")
|
||||
|
||||
# send to the patch
|
||||
Global._gdpd.start_message(6)
|
||||
Global._gdpd.add_symbol("param")
|
||||
Global._gdpd.add_float(parameters[0])
|
||||
Global._gdpd.add_float(parameters[1])
|
||||
Global._gdpd.add_float(parameters[2])
|
||||
Global._gdpd.add_float(parameters[3])
|
||||
Global._gdpd.add_float(parameters[4])
|
||||
Global._gdpd.finish_list("fromGodot" + String(_my_id))
|
||||
|
||||
func _on_Events_player_transform_updated(playerpos, playerheading):
|
||||
var mypos = get_global_translation()
|
||||
var mypos2d = Vector2(mypos.x, mypos.z)
|
||||
var playerpos2d = Vector2(playerpos.x, playerpos.z)
|
||||
# calculate distance
|
||||
var distance = mypos.distance_to(playerpos)
|
||||
# calculate angle
|
||||
var angle = fmod(fmod(playerpos2d.angle_to_point(mypos2d) + playerheading - PI/2, PI*2) + PI*2, PI*2)
|
||||
if angle > PI:
|
||||
angle = angle - PI*2
|
||||
# (check)
|
||||
# print(str(_my_id) +" : ("+ str(playerpos) +","+ str(mypos) +")")
|
||||
# print(str(_my_id) +" : ("+ str(distance) +","+ str(angle) +")")
|
||||
# calculate gain
|
||||
var gain = max(1 - distance/audible_range_max, 0)
|
||||
# send to the patch
|
||||
Global._gdpd.start_message(3)
|
||||
Global._gdpd.add_symbol("panvol")
|
||||
Global._gdpd.add_float(gain)
|
||||
Global._gdpd.add_float(angle)
|
||||
Global._gdpd.finish_list("fromGodot" + String(_my_id))
|
||||
|
||||
|
||||
func _exit_tree():
|
||||
Global.close_patch(_my_id)
|
||||
|
||||
|
||||
341
tenniscourts/bouncing.pd
Normal file
341
tenniscourts/bouncing.pd
Normal file
|
|
@ -0,0 +1,341 @@
|
|||
#N canvas 652 105 446 513 12;
|
||||
#X obj 21 22 r fromGodot\$0;
|
||||
#X obj 21 46 list trim;
|
||||
#X obj 303 253 hsl 100 20 -1 1 0 0 empty empty empty -2 -10 0 12 #fcfcfc #000000 #000000 0 1;
|
||||
#X obj 300 349 line~;
|
||||
#X msg 300 325 \$1 100;
|
||||
#X obj 300 278 expr ($f1 + 1)/8;
|
||||
#X floatatom 300 302 5 0 0 0 - - - 0;
|
||||
#N canvas 68 97 450 300 pan2~ 0;
|
||||
#X obj 51 98 cos~;
|
||||
#X obj 111 98 cos~;
|
||||
#X obj 33 128 *~;
|
||||
#X obj 93 128 *~;
|
||||
#X obj 33 158 outlet~;
|
||||
#X obj 93 158 outlet~;
|
||||
#X obj 33 24 inlet~;
|
||||
#X obj 111 24 inlet~;
|
||||
#X obj 111 74 +~ 0.75;
|
||||
#X connect 0 0 2 1;
|
||||
#X connect 1 0 3 1;
|
||||
#X connect 2 0 4 0;
|
||||
#X connect 3 0 5 0;
|
||||
#X connect 6 0 2 0;
|
||||
#X connect 6 0 3 0;
|
||||
#X connect 7 0 8 0;
|
||||
#X connect 7 0 0 0;
|
||||
#X connect 8 0 1 0;
|
||||
#X restore 199 437 pd pan2~;
|
||||
#X obj 199 467 dac~ 1 2;
|
||||
#X obj 199 407 *~;
|
||||
#X obj 189 230 line~;
|
||||
#X msg 189 206 \$1 100;
|
||||
#X obj 189 127 unpack f f;
|
||||
#X floatatom 296 159 5 0 0 0 - - - 0;
|
||||
#X obj 296 182 sin;
|
||||
#X floatatom 296 206 5 0 0 0 - - - 0;
|
||||
#X floatatom 189 177 5 0 0 0 - - - 0;
|
||||
#X obj 21 120 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000 #000000;
|
||||
#X obj 361 21 loadbang;
|
||||
#X obj 21 70 route bang panvol param preset;
|
||||
#X obj 20 470 *~;
|
||||
#X obj 38 446 vline~;
|
||||
#X msg 38 422 0 \, 1 1000 300;
|
||||
#X obj 38 398 loadbang;
|
||||
#X msg 361 51 \; pd dsp 1;
|
||||
#N canvas 197 23 962 799 synth 0;
|
||||
#X obj 162 801 outlet~;
|
||||
#X obj -89 390 vline~;
|
||||
#X obj -89 656 osc~;
|
||||
#X obj -119 680 *~;
|
||||
#X obj -119 424 *~;
|
||||
#X obj -89 632 +~;
|
||||
#X obj -89 303 metro 500;
|
||||
#X obj -71 611 *~;
|
||||
#X obj -89 346 f;
|
||||
#X msg -89 368 1 1 0 \, 0 \$1 1;
|
||||
#X obj -73 325 * 200;
|
||||
#X obj -12 721 *~;
|
||||
#X obj -57 253 line;
|
||||
#X obj 6 446 sig~;
|
||||
#X obj -89 522 *~;
|
||||
#X obj -89 230 t b a;
|
||||
#X msg -89 208 1 \, 0 3000;
|
||||
#X obj -89 458 *~;
|
||||
#X obj -29 279 * 3000;
|
||||
#X obj -89 544 +~ 30;
|
||||
#X obj -52 586 *~ 100;
|
||||
#X floatatom 66 535 5 0 0 0 - - - 0;
|
||||
#X obj -72 131 bng 16 250 50 0 empty empty empty 0 -8 0 10 #fcfcfc #000000 #000000;
|
||||
#X floatatom 185 361 5 0 0 0 - - - 0;
|
||||
#X obj 176 288 random 9;
|
||||
#X obj -71 497 *~ 30;
|
||||
#X obj 34 292 mtof;
|
||||
#X obj 94 320 mtof;
|
||||
#X obj -54 172 t b b b b;
|
||||
#X obj 93 287 + 10;
|
||||
#X obj 76 742 *~;
|
||||
#X obj 300 392 vline~;
|
||||
#X obj 300 658 osc~;
|
||||
#X obj 270 682 *~;
|
||||
#X obj 270 426 *~;
|
||||
#X obj 300 634 +~;
|
||||
#X obj 300 305 metro 500;
|
||||
#X obj 318 613 *~;
|
||||
#X obj 300 348 f;
|
||||
#X msg 300 370 1 1 0 \, 0 \$1 1;
|
||||
#X obj 316 327 * 200;
|
||||
#X obj 377 723 *~;
|
||||
#X obj 332 255 line;
|
||||
#X obj 395 448 sig~;
|
||||
#X obj 300 524 *~;
|
||||
#X obj 300 232 t b a;
|
||||
#X msg 300 210 1 \, 0 3000;
|
||||
#X obj 300 460 *~;
|
||||
#X obj 360 281 * 3000;
|
||||
#X obj 300 546 +~ 30;
|
||||
#X obj 337 588 *~ 100;
|
||||
#X floatatom 455 537 5 0 0 0 - - - 0;
|
||||
#X obj 317 133 bng 16 250 50 0 empty empty empty 0 -8 0 10 #fcfcfc #000000 #000000;
|
||||
#X floatatom 574 363 5 0 0 0 - - - 0;
|
||||
#X obj 565 290 random 9;
|
||||
#X obj 319 567 osc~ 70;
|
||||
#X obj 318 499 *~ 30;
|
||||
#X obj 423 294 mtof;
|
||||
#X obj 483 322 mtof;
|
||||
#X obj 335 174 t b b b b;
|
||||
#X obj 482 289 + 10;
|
||||
#X obj 329 750 *~;
|
||||
#X obj 55 140 bng 16 250 50 0 empty empty empty 0 -8 0 10 #fcfcfc #000000 #000000;
|
||||
#X obj 33 259 + 10;
|
||||
#X obj 422 261 + 10;
|
||||
#X obj 29 235 random 60;
|
||||
#X obj 418 237 random 60;
|
||||
#X obj 89 263 random 50;
|
||||
#X obj 478 265 random 50;
|
||||
#X obj -70 566 osc~ 700;
|
||||
#X floatatom 431 340 5 0 0 0 - - - 0;
|
||||
#X obj 179 335 / 14;
|
||||
#X obj 44 55 loadbang;
|
||||
#X obj 276 77 loadbang;
|
||||
#X obj 55 95 retro 800 2000;
|
||||
#X obj 349 110 retro 500 1200;
|
||||
#X obj 649 393 vline~;
|
||||
#X obj 649 659 osc~;
|
||||
#X obj 619 683 *~;
|
||||
#X obj 619 427 *~;
|
||||
#X obj 649 635 +~;
|
||||
#X obj 649 306 metro 500;
|
||||
#X obj 667 614 *~;
|
||||
#X obj 649 349 f;
|
||||
#X msg 649 371 1 1 0 \, 0 \$1 1;
|
||||
#X obj 665 328 * 200;
|
||||
#X obj 726 724 *~;
|
||||
#X obj 681 256 line;
|
||||
#X obj 744 449 sig~;
|
||||
#X obj 649 525 *~;
|
||||
#X obj 649 233 t b a;
|
||||
#X msg 649 211 1 \, 0 3000;
|
||||
#X obj 649 461 *~;
|
||||
#X obj 709 282 * 3000;
|
||||
#X obj 649 547 +~ 30;
|
||||
#X obj 686 589 *~ 100;
|
||||
#X floatatom 804 538 5 0 0 0 - - - 0;
|
||||
#X obj 666 134 bng 16 250 50 0 empty empty empty 0 -8 0 10 #fcfcfc #000000 #000000;
|
||||
#X floatatom 923 364 5 0 0 0 - - - 0;
|
||||
#X obj 914 291 random 9;
|
||||
#X obj 668 568 osc~ 70;
|
||||
#X obj 667 500 *~ 30;
|
||||
#X obj 772 295 mtof;
|
||||
#X obj 832 323 mtof;
|
||||
#X obj 684 175 t b b b b;
|
||||
#X obj 831 290 + 10;
|
||||
#X obj 678 751 *~;
|
||||
#X obj 771 262 + 10;
|
||||
#X obj 767 238 random 60;
|
||||
#X obj 827 266 random 50;
|
||||
#X floatatom 780 341 5 0 0 0 - - - 0;
|
||||
#X obj 625 78 loadbang;
|
||||
#X obj 698 111 retro 500 1000;
|
||||
#X obj 916 336 / 60;
|
||||
#X obj 565 311 + 4;
|
||||
#X obj 914 312 + 5;
|
||||
#X obj 567 335 / 20;
|
||||
#X obj 176 309 + 5;
|
||||
#X connect 1 0 4 0;
|
||||
#X connect 1 0 4 1;
|
||||
#X connect 2 0 3 1;
|
||||
#X connect 3 0 11 0;
|
||||
#X connect 4 0 3 0;
|
||||
#X connect 4 0 17 0;
|
||||
#X connect 4 0 17 1;
|
||||
#X connect 5 0 2 0;
|
||||
#X connect 6 0 8 0;
|
||||
#X connect 7 0 5 1;
|
||||
#X connect 8 0 9 0;
|
||||
#X connect 9 0 1 0;
|
||||
#X connect 10 0 8 1;
|
||||
#X connect 11 0 30 0;
|
||||
#X connect 12 0 10 0;
|
||||
#X connect 12 0 13 0;
|
||||
#X connect 12 0 18 0;
|
||||
#X connect 13 0 11 1;
|
||||
#X connect 13 0 20 0;
|
||||
#X connect 13 0 25 0;
|
||||
#X connect 14 0 19 0;
|
||||
#X connect 15 0 6 0;
|
||||
#X connect 15 1 12 0;
|
||||
#X connect 16 0 15 0;
|
||||
#X connect 17 0 14 0;
|
||||
#X connect 18 0 6 1;
|
||||
#X connect 19 0 5 0;
|
||||
#X connect 20 0 7 1;
|
||||
#X connect 21 0 20 1;
|
||||
#X connect 22 0 28 0;
|
||||
#X connect 23 0 30 1;
|
||||
#X connect 24 0 117 0;
|
||||
#X connect 25 0 14 1;
|
||||
#X connect 26 0 19 1;
|
||||
#X connect 26 0 69 1;
|
||||
#X connect 27 0 21 0;
|
||||
#X connect 28 0 16 0;
|
||||
#X connect 28 1 65 0;
|
||||
#X connect 28 2 67 0;
|
||||
#X connect 28 3 24 0;
|
||||
#X connect 29 0 27 0;
|
||||
#X connect 30 0 0 0;
|
||||
#X connect 31 0 34 0;
|
||||
#X connect 31 0 34 1;
|
||||
#X connect 32 0 33 1;
|
||||
#X connect 33 0 41 0;
|
||||
#X connect 34 0 33 0;
|
||||
#X connect 34 0 47 0;
|
||||
#X connect 34 0 47 1;
|
||||
#X connect 35 0 32 0;
|
||||
#X connect 36 0 38 0;
|
||||
#X connect 37 0 35 1;
|
||||
#X connect 38 0 39 0;
|
||||
#X connect 39 0 31 0;
|
||||
#X connect 40 0 38 1;
|
||||
#X connect 41 0 61 0;
|
||||
#X connect 42 0 40 0;
|
||||
#X connect 42 0 43 0;
|
||||
#X connect 42 0 48 0;
|
||||
#X connect 43 0 41 1;
|
||||
#X connect 43 0 50 0;
|
||||
#X connect 43 0 56 0;
|
||||
#X connect 44 0 49 0;
|
||||
#X connect 45 0 36 0;
|
||||
#X connect 45 1 42 0;
|
||||
#X connect 46 0 45 0;
|
||||
#X connect 47 0 44 0;
|
||||
#X connect 48 0 36 1;
|
||||
#X connect 49 0 35 0;
|
||||
#X connect 50 0 37 1;
|
||||
#X connect 51 0 50 1;
|
||||
#X connect 52 0 59 0;
|
||||
#X connect 53 0 61 1;
|
||||
#X connect 54 0 114 0;
|
||||
#X connect 55 0 37 0;
|
||||
#X connect 56 0 44 1;
|
||||
#X connect 57 0 49 1;
|
||||
#X connect 57 0 70 0;
|
||||
#X connect 57 0 55 1;
|
||||
#X connect 58 0 51 0;
|
||||
#X connect 59 0 46 0;
|
||||
#X connect 59 1 66 0;
|
||||
#X connect 59 2 68 0;
|
||||
#X connect 59 3 54 0;
|
||||
#X connect 60 0 58 0;
|
||||
#X connect 61 0 0 0;
|
||||
#X connect 62 0 28 0;
|
||||
#X connect 63 0 26 0;
|
||||
#X connect 64 0 57 0;
|
||||
#X connect 65 0 63 0;
|
||||
#X connect 66 0 64 0;
|
||||
#X connect 67 0 29 0;
|
||||
#X connect 68 0 60 0;
|
||||
#X connect 69 0 7 0;
|
||||
#X connect 71 0 23 0;
|
||||
#X connect 72 0 74 0;
|
||||
#X connect 73 0 75 0;
|
||||
#X connect 74 0 62 0;
|
||||
#X connect 75 0 59 0;
|
||||
#X connect 76 0 79 0;
|
||||
#X connect 76 0 79 1;
|
||||
#X connect 77 0 78 1;
|
||||
#X connect 78 0 86 0;
|
||||
#X connect 79 0 78 0;
|
||||
#X connect 79 0 92 0;
|
||||
#X connect 79 0 92 1;
|
||||
#X connect 80 0 77 0;
|
||||
#X connect 81 0 83 0;
|
||||
#X connect 82 0 80 1;
|
||||
#X connect 83 0 84 0;
|
||||
#X connect 84 0 76 0;
|
||||
#X connect 85 0 83 1;
|
||||
#X connect 86 0 106 0;
|
||||
#X connect 87 0 85 0;
|
||||
#X connect 87 0 88 0;
|
||||
#X connect 87 0 93 0;
|
||||
#X connect 88 0 86 1;
|
||||
#X connect 88 0 95 0;
|
||||
#X connect 88 0 101 0;
|
||||
#X connect 89 0 94 0;
|
||||
#X connect 90 0 81 0;
|
||||
#X connect 90 1 87 0;
|
||||
#X connect 91 0 90 0;
|
||||
#X connect 92 0 89 0;
|
||||
#X connect 93 0 81 1;
|
||||
#X connect 94 0 80 0;
|
||||
#X connect 95 0 82 1;
|
||||
#X connect 96 0 95 1;
|
||||
#X connect 97 0 104 0;
|
||||
#X connect 98 0 106 1;
|
||||
#X connect 99 0 115 0;
|
||||
#X connect 100 0 82 0;
|
||||
#X connect 101 0 89 1;
|
||||
#X connect 102 0 94 1;
|
||||
#X connect 102 0 110 0;
|
||||
#X connect 102 0 100 1;
|
||||
#X connect 103 0 96 0;
|
||||
#X connect 104 0 91 0;
|
||||
#X connect 104 1 108 0;
|
||||
#X connect 104 2 109 0;
|
||||
#X connect 104 3 99 0;
|
||||
#X connect 105 0 103 0;
|
||||
#X connect 107 0 102 0;
|
||||
#X connect 108 0 107 0;
|
||||
#X connect 109 0 105 0;
|
||||
#X connect 111 0 112 0;
|
||||
#X connect 112 0 104 0;
|
||||
#X connect 113 0 98 0;
|
||||
#X connect 114 0 116 0;
|
||||
#X connect 115 0 113 0;
|
||||
#X connect 116 0 53 0;
|
||||
#X connect 117 0 71 0;
|
||||
#X restore 80 300 pd synth;
|
||||
#X connect 0 0 1 0;
|
||||
#X connect 1 0 19 0;
|
||||
#X connect 2 0 5 0;
|
||||
#X connect 3 0 7 1;
|
||||
#X connect 4 0 3 0;
|
||||
#X connect 5 0 6 0;
|
||||
#X connect 6 0 4 0;
|
||||
#X connect 7 0 8 0;
|
||||
#X connect 7 1 8 1;
|
||||
#X connect 9 0 7 0;
|
||||
#X connect 10 0 9 1;
|
||||
#X connect 11 0 10 0;
|
||||
#X connect 12 0 16 0;
|
||||
#X connect 12 1 13 0;
|
||||
#X connect 13 0 14 0;
|
||||
#X connect 14 0 15 0;
|
||||
#X connect 15 0 2 0;
|
||||
#X connect 16 0 11 0;
|
||||
#X connect 19 0 17 0;
|
||||
#X connect 19 1 12 0;
|
||||
#X connect 21 0 20 1;
|
||||
#X connect 22 0 21 0;
|
||||
#X connect 23 0 22 0;
|
||||
#X connect 25 0 9 0;
|
||||
7
tenniscourts/default_env.tres
Normal file
7
tenniscourts/default_env.tres
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
[gd_resource type="Environment" load_steps=2 format=2]
|
||||
|
||||
[sub_resource type="ProceduralSky" id=1]
|
||||
|
||||
[resource]
|
||||
background_mode = 2
|
||||
background_sky = SubResource( 1 )
|
||||
152
tenniscourts/guide.pd
Normal file
152
tenniscourts/guide.pd
Normal file
|
|
@ -0,0 +1,152 @@
|
|||
#N canvas 22 179 583 567 12;
|
||||
#X obj 21 22 r fromGodot\$0;
|
||||
#X obj 21 46 list trim;
|
||||
#X obj 303 253 hsl 100 20 -1 1 0 0 empty empty empty -2 -10 0 12 #fcfcfc #000000 #000000 0 1;
|
||||
#X obj 300 349 line~;
|
||||
#X msg 300 325 \$1 100;
|
||||
#X obj 300 278 expr ($f1 + 1)/8;
|
||||
#X floatatom 300 302 5 0 0 0 - - - 0;
|
||||
#N canvas 68 97 450 300 pan2~ 0;
|
||||
#X obj 51 98 cos~;
|
||||
#X obj 111 98 cos~;
|
||||
#X obj 33 128 *~;
|
||||
#X obj 93 128 *~;
|
||||
#X obj 33 158 outlet~;
|
||||
#X obj 93 158 outlet~;
|
||||
#X obj 33 24 inlet~;
|
||||
#X obj 111 24 inlet~;
|
||||
#X obj 111 74 +~ 0.75;
|
||||
#X connect 0 0 2 1;
|
||||
#X connect 1 0 3 1;
|
||||
#X connect 2 0 4 0;
|
||||
#X connect 3 0 5 0;
|
||||
#X connect 6 0 2 0;
|
||||
#X connect 6 0 3 0;
|
||||
#X connect 7 0 8 0;
|
||||
#X connect 7 0 0 0;
|
||||
#X connect 8 0 1 0;
|
||||
#X restore 199 437 pd pan2~;
|
||||
#X obj 199 467 dac~ 1 2;
|
||||
#X obj 195 409 *~;
|
||||
#X obj 189 127 unpack f f;
|
||||
#X floatatom 296 159 5 0 0 0 - - - 0;
|
||||
#X obj 296 182 sin;
|
||||
#X floatatom 296 206 5 0 0 0 - - - 0;
|
||||
#X obj 21 120 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000 #000000;
|
||||
#X obj 361 21 loadbang;
|
||||
#X obj 20 470 *~;
|
||||
#X obj 38 446 vline~;
|
||||
#X msg 38 422 0 \, 1 1000 300;
|
||||
#X obj 38 398 loadbang;
|
||||
#X msg 361 51 \; pd dsp 1;
|
||||
#N canvas 567 23 873 806 synth 0;
|
||||
#X obj 197 70 r \$0-preset;
|
||||
#X obj 519 680 s \$0-preset;
|
||||
#X obj 566 305 inlet;
|
||||
#X obj 126 73 inlet;
|
||||
#X floatatom 124 137 5 0 0 0 - - - 0;
|
||||
#X floatatom 166 137 5 0 0 0 - - - 0;
|
||||
#X text 36 135 center frequency (in;
|
||||
#X text 35 155 tenths of fundamental);
|
||||
#X obj 121 593 *~;
|
||||
#X obj 644 39 loadbang;
|
||||
#X obj 126 104 unpack f f f;
|
||||
#X msg 637 374 10 27 21;
|
||||
#X msg 636 542 5 12 46;
|
||||
#X msg 636 423 2 52 2;
|
||||
#X msg 636 447 9 11 78;
|
||||
#X msg 636 471 7 16 38;
|
||||
#X msg 636 495 28 -20 15;
|
||||
#X msg 636 519 1 -12 41;
|
||||
#X msg 635 397 17 28 46;
|
||||
#X obj 595 332 sel 1 2 3 4 5 6 7 8 9 10 11 12;
|
||||
#X msg 638 567 21 14 19;
|
||||
#X msg 639 614 14 -16 49;
|
||||
#X msg 639 638 4 10 40;
|
||||
#X msg 638 591 61 31 25;
|
||||
#X obj 125 482 osc~;
|
||||
#X obj 224 463 vline~;
|
||||
#X obj 200 349 bng 19 250 50 0 empty empty empty 0 -10 0 12 #fcfcfc #000000 #000000;
|
||||
#X obj 210 192 tgl 19 0 empty empty empty 0 -10 0 12 #fcfcfc #000000 #000000 0 1;
|
||||
#X msg 138 393 420;
|
||||
#X obj 197 268 metro 4000;
|
||||
#X obj 147 703 outlet~;
|
||||
#X obj 238 153 r guide;
|
||||
#X msg 227 422 0.3 60 0 \, 0.1 100 200 \, 0 2000 200;
|
||||
#X connect 0 0 10 0;
|
||||
#X connect 2 0 19 0;
|
||||
#X connect 3 0 10 0;
|
||||
#X connect 8 0 30 0;
|
||||
#X connect 10 1 4 0;
|
||||
#X connect 10 2 5 0;
|
||||
#X connect 11 0 1 0;
|
||||
#X connect 12 0 1 0;
|
||||
#X connect 13 0 1 0;
|
||||
#X connect 14 0 1 0;
|
||||
#X connect 15 0 1 0;
|
||||
#X connect 16 0 1 0;
|
||||
#X connect 17 0 1 0;
|
||||
#X connect 18 0 1 0;
|
||||
#X connect 19 0 11 0;
|
||||
#X connect 19 1 12 0;
|
||||
#X connect 19 2 13 0;
|
||||
#X connect 19 3 14 0;
|
||||
#X connect 19 4 15 0;
|
||||
#X connect 19 5 16 0;
|
||||
#X connect 19 6 17 0;
|
||||
#X connect 19 7 18 0;
|
||||
#X connect 19 8 20 0;
|
||||
#X connect 19 9 23 0;
|
||||
#X connect 19 10 21 0;
|
||||
#X connect 19 11 22 0;
|
||||
#X connect 20 0 1 0;
|
||||
#X connect 21 0 1 0;
|
||||
#X connect 22 0 1 0;
|
||||
#X connect 23 0 1 0;
|
||||
#X connect 24 0 8 0;
|
||||
#X connect 25 0 8 1;
|
||||
#X connect 26 0 28 0;
|
||||
#X connect 26 0 32 0;
|
||||
#X connect 27 0 29 0;
|
||||
#X connect 28 0 24 0;
|
||||
#X connect 29 0 26 0;
|
||||
#X connect 31 0 27 0;
|
||||
#X connect 32 0 25 0;
|
||||
#X restore 16 286 pd synth;
|
||||
#X obj 204 329 *~;
|
||||
#X floatatom 266 103 5 0 0 0 - - - 0;
|
||||
#X obj 189 276 line~;
|
||||
#X msg 189 252 \$1 100;
|
||||
#X floatatom 189 189 5 0 0 0 - - - 0;
|
||||
#X obj 21 70 route bang panvol param preset guide;
|
||||
#X text 64 155 comment, f 12;
|
||||
#X obj 346 133 s guide;
|
||||
#X connect 0 0 1 0;
|
||||
#X connect 1 0 27 0;
|
||||
#X connect 2 0 5 0;
|
||||
#X connect 3 0 7 1;
|
||||
#X connect 4 0 3 0;
|
||||
#X connect 5 0 6 0;
|
||||
#X connect 6 0 4 0;
|
||||
#X connect 7 0 8 0;
|
||||
#X connect 7 1 8 1;
|
||||
#X connect 9 0 7 0;
|
||||
#X connect 10 0 26 0;
|
||||
#X connect 10 1 11 0;
|
||||
#X connect 11 0 12 0;
|
||||
#X connect 12 0 13 0;
|
||||
#X connect 13 0 2 0;
|
||||
#X connect 17 0 16 1;
|
||||
#X connect 18 0 17 0;
|
||||
#X connect 19 0 18 0;
|
||||
#X connect 21 0 9 0;
|
||||
#X connect 22 0 9 1;
|
||||
#X connect 23 0 29 0;
|
||||
#X connect 24 0 22 0;
|
||||
#X connect 24 0 22 1;
|
||||
#X connect 25 0 24 0;
|
||||
#X connect 26 0 25 0;
|
||||
#X connect 27 0 14 0;
|
||||
#X connect 27 1 10 0;
|
||||
#X connect 27 3 21 1;
|
||||
#X connect 27 4 23 0;
|
||||
BIN
tenniscourts/meshes/tennis_array.png
Normal file
BIN
tenniscourts/meshes/tennis_array.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 1.4 KiB |
BIN
tenniscourts/meshes/tennis_launcher.mesh
Normal file
BIN
tenniscourts/meshes/tennis_launcher.mesh
Normal file
Binary file not shown.
88
tenniscourts/morae.gd
Normal file
88
tenniscourts/morae.gd
Normal file
|
|
@ -0,0 +1,88 @@
|
|||
extends RigidBody
|
||||
|
||||
export (String, MULTILINE) var patch = ""
|
||||
export (float, 0, 100) var audible_range_max = 10.0
|
||||
export (float, 1, 12) var preset = 1
|
||||
|
||||
var _my_patch = "res://tenniscourts/morae.pd"
|
||||
var _my_id = 0
|
||||
|
||||
func set_param(param):
|
||||
Global._gdpd.start_message(param.size()+1)
|
||||
Global._gdpd.add_symbol("param")
|
||||
for i in range(param.size()):
|
||||
Global._gdpd.add_float(param[i])
|
||||
Global._gdpd.finish_list("fromGodot" + String(_my_id))
|
||||
|
||||
func set_preset(prs):
|
||||
preset = prs
|
||||
Global._gdpd.start_message(2)
|
||||
Global._gdpd.add_symbol("preset")
|
||||
Global._gdpd.add_float(prs)
|
||||
Global._gdpd.finish_list("fromGodot" + String(_my_id))
|
||||
|
||||
func set_rev(v):
|
||||
Global._gdpd.start_message(2)
|
||||
Global._gdpd.add_symbol("rev")
|
||||
Global._gdpd.add_float(v)
|
||||
Global._gdpd.finish_list("fromGodot" + String(_my_id))
|
||||
|
||||
func set_color(color):
|
||||
$MeshInstance.material_override = SpatialMaterial.new()
|
||||
$MeshInstance.material_override.albedo_color = color
|
||||
|
||||
func relocate(center, radius_range):
|
||||
# relocate randomly into a circular zone
|
||||
var rr = radius_range[1] - radius_range[0]
|
||||
var displacement = polar2cartesian(randf()*rr+radius_range[0], randf()*2*PI)
|
||||
var loc = center + displacement
|
||||
look_at_from_position(Vector3(loc.x, randf()*2 + 1, loc.y), Vector3.FORWARD, Vector3.UP)
|
||||
|
||||
func _ready():
|
||||
# save patch
|
||||
# prepare directory
|
||||
# var patch_name = _my_patch.split("/")[-1]
|
||||
# var patch_dir = _my_patch.trim_suffix(patch_name)
|
||||
# var dir = Directory.new()
|
||||
# dir.make_dir_recursive(patch_dir)
|
||||
# # save to file
|
||||
# var file = File.new()
|
||||
# file.open(_my_patch, File.WRITE)
|
||||
# file.store_string(patch)
|
||||
# file.close()
|
||||
# load patch
|
||||
_my_id = Global.load_patch(ProjectSettings.globalize_path(_my_patch))
|
||||
|
||||
# listen 'player_transform_updated' event
|
||||
Events.connect("player_transform_updated", self, "_on_Events_player_transform_updated")
|
||||
|
||||
# send 'preset'
|
||||
set_preset(preset)
|
||||
|
||||
func _on_Events_player_transform_updated(playerpos, playerheading):
|
||||
var mypos = get_global_translation()
|
||||
var mypos2d = Vector2(mypos.x, mypos.z)
|
||||
var playerpos2d = Vector2(playerpos.x, playerpos.z)
|
||||
# calculate distance
|
||||
var distance = mypos.distance_to(playerpos)
|
||||
# if distance < 60:
|
||||
# set_rev(5)
|
||||
# else:
|
||||
# set_rev(0)
|
||||
# calculate angle
|
||||
var angle = fmod(fmod(playerpos2d.angle_to_point(mypos2d) + playerheading - PI/2, PI*2) + PI*2, PI*2)
|
||||
if angle > PI:
|
||||
angle = angle - PI*2
|
||||
# calculate gain
|
||||
var gain = 1 - distance/audible_range_max
|
||||
# send to the patch
|
||||
Global._gdpd.start_message(3)
|
||||
Global._gdpd.add_symbol("panvol")
|
||||
Global._gdpd.add_float(gain)
|
||||
Global._gdpd.add_float(angle)
|
||||
Global._gdpd.finish_list("fromGodot" + String(_my_id))
|
||||
|
||||
|
||||
func _exit_tree():
|
||||
Global.close_patch(_my_id)
|
||||
pass
|
||||
278
tenniscourts/morae.pd
Normal file
278
tenniscourts/morae.pd
Normal file
|
|
@ -0,0 +1,278 @@
|
|||
#N canvas 11 263 583 567 12;
|
||||
#X obj 21 22 r fromGodot\$0;
|
||||
#X obj 21 46 list trim;
|
||||
#X obj 303 253 hsl 100 20 -1 1 0 0 empty empty empty -2 -10 0 12 #fcfcfc #000000 #000000 0 1;
|
||||
#X obj 300 349 line~;
|
||||
#X msg 300 325 \$1 100;
|
||||
#X obj 300 278 expr ($f1 + 1)/8;
|
||||
#X floatatom 300 302 5 0 0 0 - - - 0;
|
||||
#N canvas 68 97 450 300 pan2~ 0;
|
||||
#X obj 51 98 cos~;
|
||||
#X obj 111 98 cos~;
|
||||
#X obj 33 128 *~;
|
||||
#X obj 93 128 *~;
|
||||
#X obj 33 158 outlet~;
|
||||
#X obj 93 158 outlet~;
|
||||
#X obj 33 24 inlet~;
|
||||
#X obj 111 24 inlet~;
|
||||
#X obj 111 74 +~ 0.75;
|
||||
#X connect 0 0 2 1;
|
||||
#X connect 1 0 3 1;
|
||||
#X connect 2 0 4 0;
|
||||
#X connect 3 0 5 0;
|
||||
#X connect 6 0 2 0;
|
||||
#X connect 6 0 3 0;
|
||||
#X connect 7 0 8 0;
|
||||
#X connect 7 0 0 0;
|
||||
#X connect 8 0 1 0;
|
||||
#X restore 199 437 pd pan2~;
|
||||
#X obj 199 467 dac~ 1 2;
|
||||
#X obj 195 409 *~;
|
||||
#X obj 189 127 unpack f f;
|
||||
#X floatatom 296 159 5 0 0 0 - - - 0;
|
||||
#X obj 296 182 sin;
|
||||
#X floatatom 296 206 5 0 0 0 - - - 0;
|
||||
#X obj 21 120 bng 15 250 50 0 empty empty empty 17 7 0 10 #fcfcfc #000000 #000000;
|
||||
#X obj 361 21 loadbang;
|
||||
#X obj 20 470 *~;
|
||||
#X obj 38 446 vline~;
|
||||
#X msg 38 422 0 \, 1 1000 300;
|
||||
#X obj 38 398 loadbang;
|
||||
#X msg 361 51 \; pd dsp 1;
|
||||
#N canvas 478 23 873 806 synth 0;
|
||||
#X obj 3 447 noise~;
|
||||
#X obj -13 491 *~;
|
||||
#X obj -29 375 sig~ 1;
|
||||
#X obj -29 403 /~;
|
||||
#X obj 20 353 *~;
|
||||
#X obj 20 323 *~;
|
||||
#X obj -29 515 +~;
|
||||
#X obj 20 375 +~ 1;
|
||||
#X obj -13 426 *~ 0.4;
|
||||
#X obj 3 469 bp~ 700 1;
|
||||
#X obj 20 274 osc~ 12;
|
||||
#X obj 29 696 outlet~;
|
||||
#X obj 197 70 r \$0-preset;
|
||||
#X obj 519 680 s \$0-preset;
|
||||
#X obj 566 305 inlet;
|
||||
#X obj 126 73 inlet;
|
||||
#X floatatom 124 137 5 0 0 0 - - - 0;
|
||||
#X floatatom 166 137 5 0 0 0 - - - 0;
|
||||
#X obj 436 165 del;
|
||||
#X obj 436 215 spigot;
|
||||
#X obj 397 62 tgl 15 0 empty empty empty 17 7 0 10 #0400fc #f8fc00 #000000 0 1;
|
||||
#X obj 544 122 expr \$2-\$1;
|
||||
#X obj 510 184 random;
|
||||
#X obj 544 72 loadbang;
|
||||
#X obj 475 189 tgl 15 0 empty empty empty 17 7 0 10 #fcfcfc #000000 #000000 0 1;
|
||||
#X obj 428 110 t b f;
|
||||
#X obj 478 159 t b b;
|
||||
#X obj 451 139 bng 10 250 50 0 empty empty empty 17 7 0 10 #f8fc00 #0400fc #000000;
|
||||
#X obj 653 101 unpack f f;
|
||||
#X obj 669 130 expr $f2-$f1;
|
||||
#X floatatom 543 157 5 0 0 0 range - - 0;
|
||||
#X floatatom 598 183 5 0 0 0 start - - 0;
|
||||
#X obj 599 153 f \$1;
|
||||
#X obj 510 210 +;
|
||||
#X obj 544 97 t b b;
|
||||
#X floatatom 510 239 5 0 0 1 r - - 0;
|
||||
#X msg 651 65 500 3500;
|
||||
#X obj 157 481 cos~;
|
||||
#X floatatom 205 270 4 0 100 0 - - - 0;
|
||||
#X obj 204 294 / 10;
|
||||
#X obj 157 451 *~;
|
||||
#X obj 204 366 line~;
|
||||
#X obj 204 318 max 0;
|
||||
#X floatatom 107 373 4 0 0 0 - - - 0;
|
||||
#X text 86 325 fundamental;
|
||||
#X text 86 344 frequency;
|
||||
#X obj 199 481 cos~;
|
||||
#X obj 240 394 wrap~;
|
||||
#X obj 204 421 -~;
|
||||
#X obj 199 451 +~;
|
||||
#X obj 199 526 -~;
|
||||
#X obj 222 576 *~;
|
||||
#X obj 204 616 +~;
|
||||
#X obj 204 342 pack 0 50;
|
||||
#X obj 107 397 phasor~ 100;
|
||||
#X text 36 135 center frequency (in;
|
||||
#X text 35 155 tenths of fundamental);
|
||||
#X obj 204 662 hip~ 5;
|
||||
#X obj 225 703 *~;
|
||||
#X obj 296 718 vline~;
|
||||
#X floatatom 451 363 5 0 0 0 - - - 0;
|
||||
#X msg 294 690 \$1 1000;
|
||||
#X obj 421 265 random 8;
|
||||
#X obj 644 39 loadbang;
|
||||
#X obj 72 597 vline~;
|
||||
#X obj 126 104 unpack f f f;
|
||||
#X obj 382 30 loadbang;
|
||||
#X obj 2 607 *~;
|
||||
#X msg 637 374 10 27 21;
|
||||
#X msg 636 542 5 12 46;
|
||||
#X msg 636 423 2 52 2;
|
||||
#X msg 636 447 9 11 78;
|
||||
#X msg 636 471 7 16 38;
|
||||
#X floatatom 49 210 5 0 0 0 - - - 0;
|
||||
#X msg 636 495 28 -20 15;
|
||||
#X msg 636 519 1 -12 41;
|
||||
#X msg 635 397 17 28 46;
|
||||
#X obj 595 332 sel 1 2 3 4 5 6 7 8 9 10 11 12;
|
||||
#X msg 638 567 21 14 19;
|
||||
#X msg 639 614 14 -16 49;
|
||||
#X msg 639 638 4 10 40;
|
||||
#X msg 638 591 61 31 25;
|
||||
#X obj 435 299 / 10;
|
||||
#X obj 446 323 + 0.5;
|
||||
#X connect 0 0 9 0;
|
||||
#X connect 1 0 6 1;
|
||||
#X connect 2 0 3 0;
|
||||
#X connect 3 0 6 0;
|
||||
#X connect 3 0 8 0;
|
||||
#X connect 4 0 7 0;
|
||||
#X connect 5 0 4 0;
|
||||
#X connect 5 0 4 1;
|
||||
#X connect 6 0 67 0;
|
||||
#X connect 7 0 3 1;
|
||||
#X connect 8 0 1 0;
|
||||
#X connect 9 0 1 1;
|
||||
#X connect 10 0 5 0;
|
||||
#X connect 12 0 65 0;
|
||||
#X connect 14 0 77 0;
|
||||
#X connect 15 0 65 0;
|
||||
#X connect 16 0 43 0;
|
||||
#X connect 17 0 38 0;
|
||||
#X connect 18 0 19 0;
|
||||
#X connect 19 0 27 0;
|
||||
#X connect 19 0 62 0;
|
||||
#X connect 20 0 25 0;
|
||||
#X connect 21 0 30 0;
|
||||
#X connect 22 0 33 0;
|
||||
#X connect 23 0 34 0;
|
||||
#X connect 24 0 19 1;
|
||||
#X connect 25 0 27 0;
|
||||
#X connect 25 1 24 0;
|
||||
#X connect 26 0 18 0;
|
||||
#X connect 26 1 22 0;
|
||||
#X connect 27 0 26 0;
|
||||
#X connect 28 0 31 0;
|
||||
#X connect 29 0 30 0;
|
||||
#X connect 30 0 22 1;
|
||||
#X connect 31 0 33 1;
|
||||
#X connect 32 0 31 0;
|
||||
#X connect 33 0 18 1;
|
||||
#X connect 33 0 35 0;
|
||||
#X connect 34 0 21 0;
|
||||
#X connect 34 1 32 0;
|
||||
#X connect 36 0 28 0;
|
||||
#X connect 36 0 29 0;
|
||||
#X connect 37 0 50 1;
|
||||
#X connect 37 0 52 0;
|
||||
#X connect 38 0 39 0;
|
||||
#X connect 39 0 42 0;
|
||||
#X connect 40 0 37 0;
|
||||
#X connect 40 0 49 0;
|
||||
#X connect 41 0 48 0;
|
||||
#X connect 41 0 47 0;
|
||||
#X connect 42 0 53 0;
|
||||
#X connect 43 0 54 0;
|
||||
#X connect 46 0 50 0;
|
||||
#X connect 47 0 48 1;
|
||||
#X connect 47 0 51 1;
|
||||
#X connect 48 0 40 1;
|
||||
#X connect 49 0 46 0;
|
||||
#X connect 50 0 51 0;
|
||||
#X connect 51 0 52 1;
|
||||
#X connect 52 0 57 0;
|
||||
#X connect 53 0 41 0;
|
||||
#X connect 54 0 40 0;
|
||||
#X connect 54 0 49 1;
|
||||
#X connect 57 0 58 0;
|
||||
#X connect 58 0 11 0;
|
||||
#X connect 59 0 58 1;
|
||||
#X connect 60 0 61 0;
|
||||
#X connect 61 0 59 0;
|
||||
#X connect 61 0 64 0;
|
||||
#X connect 62 0 82 0;
|
||||
#X connect 63 0 36 0;
|
||||
#X connect 64 0 67 1;
|
||||
#X connect 65 0 73 0;
|
||||
#X connect 65 1 16 0;
|
||||
#X connect 65 2 17 0;
|
||||
#X connect 66 0 20 0;
|
||||
#X connect 67 0 11 0;
|
||||
#X connect 68 0 13 0;
|
||||
#X connect 69 0 13 0;
|
||||
#X connect 70 0 13 0;
|
||||
#X connect 71 0 13 0;
|
||||
#X connect 72 0 13 0;
|
||||
#X connect 73 0 5 1;
|
||||
#X connect 74 0 13 0;
|
||||
#X connect 75 0 13 0;
|
||||
#X connect 76 0 13 0;
|
||||
#X connect 77 0 68 0;
|
||||
#X connect 77 1 69 0;
|
||||
#X connect 77 2 70 0;
|
||||
#X connect 77 3 71 0;
|
||||
#X connect 77 4 72 0;
|
||||
#X connect 77 5 74 0;
|
||||
#X connect 77 6 75 0;
|
||||
#X connect 77 7 76 0;
|
||||
#X connect 77 8 78 0;
|
||||
#X connect 77 9 81 0;
|
||||
#X connect 77 10 79 0;
|
||||
#X connect 77 11 80 0;
|
||||
#X connect 78 0 13 0;
|
||||
#X connect 79 0 13 0;
|
||||
#X connect 80 0 13 0;
|
||||
#X connect 81 0 13 0;
|
||||
#X connect 82 0 83 0;
|
||||
#X connect 83 0 60 0;
|
||||
#X restore 16 286 pd synth;
|
||||
#X obj 204 329 *~;
|
||||
#X obj 21 70 route bang panvol param preset rev;
|
||||
#X floatatom 266 103 5 0 0 0 - - - 0;
|
||||
#X obj 331 117 s rev_v;
|
||||
#X obj 189 276 line~;
|
||||
#X msg 189 252 \$1 100;
|
||||
#X floatatom 189 189 5 0 0 0 - - - 0;
|
||||
#X obj 132 322 switch~;
|
||||
#X obj 132 298 tgl 19 0 empty empty empty 0 -10 0 12 #fcfcfc #000000 #000000 0 1;
|
||||
#X obj 132 274 change;
|
||||
#X text 89 167 switch on/off before 0 to stop startup pops, f 12;
|
||||
#X obj 189 228 max 0;
|
||||
#X obj 132 250 > -0.3;
|
||||
#X connect 0 0 1 0;
|
||||
#X connect 1 0 23 0;
|
||||
#X connect 2 0 5 0;
|
||||
#X connect 3 0 7 1;
|
||||
#X connect 4 0 3 0;
|
||||
#X connect 5 0 6 0;
|
||||
#X connect 6 0 4 0;
|
||||
#X connect 7 0 8 0;
|
||||
#X connect 7 1 8 1;
|
||||
#X connect 9 0 7 0;
|
||||
#X connect 10 0 28 0;
|
||||
#X connect 10 1 11 0;
|
||||
#X connect 11 0 12 0;
|
||||
#X connect 12 0 13 0;
|
||||
#X connect 13 0 2 0;
|
||||
#X connect 17 0 16 1;
|
||||
#X connect 18 0 17 0;
|
||||
#X connect 19 0 18 0;
|
||||
#X connect 21 0 9 0;
|
||||
#X connect 22 0 9 1;
|
||||
#X connect 23 0 14 0;
|
||||
#X connect 23 1 10 0;
|
||||
#X connect 23 3 21 1;
|
||||
#X connect 23 4 24 0;
|
||||
#X connect 24 0 25 0;
|
||||
#X connect 26 0 22 0;
|
||||
#X connect 26 0 22 1;
|
||||
#X connect 27 0 26 0;
|
||||
#X connect 28 0 33 0;
|
||||
#X connect 28 0 34 0;
|
||||
#X connect 30 0 29 0;
|
||||
#X connect 31 0 30 0;
|
||||
#X connect 33 0 27 0;
|
||||
#X connect 34 0 31 0;
|
||||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue