125 lines
3.3 KiB
GDScript
125 lines
3.3 KiB
GDScript
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)
|