358 lines
7.6 KiB
GDScript
358 lines
7.6 KiB
GDScript
extends Node
|
|
|
|
#Global Node Reference
|
|
var main = null
|
|
var spriteEdit = null
|
|
var fail = null
|
|
var mouse = null
|
|
var spriteList = null
|
|
var chain = null
|
|
|
|
var animationTick = 0
|
|
|
|
var filtering = false
|
|
|
|
#Object Selection
|
|
var heldSprite = null
|
|
var lastArray = []
|
|
var i = 0
|
|
|
|
var reparentMode = false
|
|
var scrollSelection = 0
|
|
|
|
var backgroundColor = Color(0.0,0.0,0.0,0.0)
|
|
|
|
#Blink
|
|
var blinkSpeed = 1.0
|
|
var blinkChance = 200
|
|
var blink = false
|
|
var blinkTick = 0
|
|
|
|
#Audio Listener
|
|
|
|
var currentMicrophone = null
|
|
|
|
var speaking = false
|
|
var spectrum
|
|
var volume = 0
|
|
var volumeSensitivity = 0.0
|
|
|
|
var volumeLimit = 0.0
|
|
var senseLimit = 0.0
|
|
|
|
#Speak Signals
|
|
signal startSpeaking
|
|
signal stopSpeaking
|
|
|
|
var micResetTime = 180
|
|
|
|
var updatePusherNode = null
|
|
|
|
var rand = RandomNumberGenerator.new()
|
|
|
|
func _ready():
|
|
spectrum = AudioServer.get_bus_effect_instance(1, 1)
|
|
|
|
if !Saving.settings.has("useStreamDeck"):
|
|
Saving.settings["useStreamDeck"] = false
|
|
|
|
if Saving.settings.has("secondsToMicReset"):
|
|
Global.micResetTime = Saving.settings["secondsToMicReset"]
|
|
else:
|
|
Saving.settings["secondsToMicReset"] = 180
|
|
|
|
createMicrophone()
|
|
|
|
func createMicrophone():
|
|
var playa = AudioStreamPlayer.new()
|
|
var mic = AudioStreamMicrophone.new()
|
|
playa.stream = mic
|
|
playa.autoplay = true
|
|
playa.bus = "MIC"
|
|
add_child(playa)
|
|
currentMicrophone = playa
|
|
await get_tree().create_timer(micResetTime).timeout
|
|
if currentMicrophone != playa:
|
|
return
|
|
deleteAllMics()
|
|
currentMicrophone = null
|
|
await get_tree().create_timer(0.25).timeout
|
|
createMicrophone()
|
|
|
|
func deleteAllMics():
|
|
for child in get_children():
|
|
child.queue_free()
|
|
|
|
|
|
func _process(delta):
|
|
animationTick += 1
|
|
|
|
volume = spectrum.get_magnitude_for_frequency_range(20, 20000).length()
|
|
if currentMicrophone != null:
|
|
volumeSensitivity = lerp(volumeSensitivity,0.0,delta*2)
|
|
|
|
if volume>volumeLimit:
|
|
volumeSensitivity = 1.0
|
|
|
|
var prev = speaking
|
|
speaking = volumeSensitivity > senseLimit
|
|
|
|
if prev != speaking:
|
|
if speaking:
|
|
emit_signal("startSpeaking")
|
|
else:
|
|
emit_signal("stopSpeaking")
|
|
|
|
if main != null and heldSprite != null:
|
|
if Input.is_action_just_pressed("zDown"):
|
|
heldSprite.z -= 1
|
|
heldSprite.setZIndex()
|
|
pushUpdate("Moved sprite layer.")
|
|
if Input.is_action_just_pressed("zUp"):
|
|
heldSprite.z += 1
|
|
heldSprite.setZIndex()
|
|
pushUpdate("Moved sprite layer.")
|
|
if main.editMode:
|
|
if Input.is_action_just_pressed("reparent"):
|
|
reparentMode = !reparentMode
|
|
Global.chain.enable(reparentMode)
|
|
|
|
else:
|
|
reparentMode = false
|
|
Global.chain.enable(reparentMode)
|
|
|
|
if main.editMode:
|
|
if reparentMode:
|
|
RenderingServer.set_default_clear_color(Color.POWDER_BLUE)
|
|
else:
|
|
RenderingServer.set_default_clear_color(Color.GRAY)
|
|
|
|
|
|
blinking()
|
|
scrollSprites()
|
|
|
|
|
|
if !main.fileSystemOpen:
|
|
|
|
if Input.is_action_just_pressed("refresh"):
|
|
refresh()
|
|
if Input.is_action_just_pressed("unlink"):
|
|
unlinkSprite()
|
|
|
|
if Input.is_action_pressed("control"):
|
|
if Input.is_action_just_pressed("saveImages"):
|
|
saveImagesFromData()
|
|
|
|
|
|
func select(areas):
|
|
|
|
if main.fileSystemOpen:
|
|
return
|
|
|
|
for area in areas:
|
|
if area.is_in_group("penis"):
|
|
return
|
|
|
|
var prevSpr = heldSprite
|
|
if areas.size() <= 0:
|
|
heldSprite = null
|
|
i = 0
|
|
lastArray = []
|
|
return
|
|
|
|
if areas != lastArray:
|
|
heldSprite = areas[0].get_parent().get_parent().get_parent()
|
|
i = 0
|
|
else:
|
|
i += 1
|
|
|
|
if i >= areas.size():
|
|
i = 0
|
|
|
|
heldSprite = areas[i].get_parent().get_parent().get_parent()
|
|
|
|
var count = heldSprite.path.get_slice_count("/") - 1
|
|
var i1 = heldSprite.path.get_slice("/",count)
|
|
pushUpdate("Selected sprite \"" + i1 + "\"" + ".")
|
|
|
|
heldSprite.set_physics_process(true)
|
|
|
|
if reparentMode:
|
|
if prevSpr == heldSprite:
|
|
reparentMode = false
|
|
return
|
|
if heldSprite.parentId == prevSpr.id:
|
|
return
|
|
|
|
linkSprite(prevSpr,heldSprite)
|
|
Global.chain.enable(reparentMode)
|
|
|
|
lastArray = areas.duplicate()
|
|
|
|
spriteEdit.setImage()
|
|
|
|
func linkSprite(sprite,newParent):
|
|
if sprite == newParent:
|
|
reparentMode = false
|
|
|
|
return
|
|
if newParent.parentId == sprite.id:
|
|
reparentMode = false
|
|
return
|
|
|
|
if sprite.is_ancestor_of(newParent):
|
|
pushUpdate("Can't link to own child sprite!")
|
|
reparentMode = false
|
|
return
|
|
|
|
sprite.reparent(newParent.sprite,true)
|
|
|
|
sprite.parentId = newParent.id
|
|
sprite.parentSprite = newParent
|
|
|
|
reparentMode = false
|
|
|
|
Global.spriteList.updateData()
|
|
|
|
var count = sprite.path.get_slice_count("/") - 1
|
|
var i1 = sprite.path.get_slice("/",count)
|
|
|
|
count = newParent.path.get_slice_count("/") - 1
|
|
var i2 = newParent.path.get_slice("/",count)
|
|
|
|
pushUpdate("Linked sprite \"" + i1 + "\" to sprite \"" + i2 + "\".")
|
|
newParent.set_physics_process(true)
|
|
|
|
func scrollSprites():
|
|
|
|
if Input.is_action_pressed("control"):
|
|
return
|
|
|
|
if !main.editMode:
|
|
return
|
|
|
|
if main.fileSystemOpen:
|
|
return
|
|
|
|
for area in mouse.area.get_overlapping_areas():
|
|
if area.is_in_group("penis"):
|
|
return
|
|
|
|
var scroll = 0
|
|
|
|
if heldSprite == null:
|
|
scrollSelection = 0
|
|
|
|
if Input.is_action_just_pressed("scrollUp"):
|
|
scroll-=1
|
|
if Input.is_action_just_pressed("scrollDown"):
|
|
scroll+=1
|
|
|
|
if scroll == 0:
|
|
return
|
|
|
|
|
|
var obj = get_tree().get_nodes_in_group("saved")
|
|
|
|
if obj.size() <= 0:
|
|
return
|
|
|
|
scrollSelection += scroll
|
|
if scrollSelection >= obj.size():
|
|
scrollSelection = 0
|
|
elif scrollSelection < 0:
|
|
scrollSelection = obj.size() - 1
|
|
|
|
heldSprite = obj[scrollSelection]
|
|
|
|
var count = heldSprite.path.get_slice_count("/") - 1
|
|
var i1 = heldSprite.path.get_slice("/",count)
|
|
pushUpdate("Selected sprite \"" + i1 + "\"" + ".")
|
|
|
|
heldSprite.set_physics_process(true)
|
|
|
|
spriteEdit.setImage()
|
|
|
|
func blinking():
|
|
blinkTick += 1
|
|
if blinkTick == 0:
|
|
blink = false
|
|
if rand.randf_range(-1.0,1.0) > 0.5:
|
|
blinkTick = (420 * blinkSpeed) + 1
|
|
if blinkTick > 420 * blinkSpeed:
|
|
if rand.randi() % int(blinkChance) == 0:
|
|
blink = true
|
|
|
|
blinkTick = -12
|
|
|
|
func epicFail(err):
|
|
print(fail)
|
|
if fail == null:
|
|
return
|
|
|
|
fail.get_node("type").text = ""
|
|
match err:
|
|
ERR_FILE_CORRUPT:
|
|
fail.get_node("type").text = "FILE CORRUPT"
|
|
ERR_FILE_NOT_FOUND:
|
|
fail.get_node("type").text = "FILE NOT FOUND"
|
|
ERR_FILE_CANT_OPEN:
|
|
fail.get_node("type").text = "FILE CANT OPEN"
|
|
ERR_FILE_ALREADY_IN_USE:
|
|
fail.get_node("type").text = "FILE IN USE"
|
|
ERR_FILE_NO_PERMISSION:
|
|
fail.get_node("type").text = "MISSING PERMISSION"
|
|
ERR_INVALID_DATA:
|
|
fail.get_node("type").text = "DATA INVALID"
|
|
ERR_FILE_CANT_READ:
|
|
fail.get_node("type").text = "CANT READ FILE"
|
|
|
|
fail.visible = true
|
|
await get_tree().create_timer(2.5).timeout
|
|
fail.visible = false
|
|
|
|
func refresh():
|
|
var objs = get_tree().get_nodes_in_group("saved")
|
|
for object in objs:
|
|
object.replaceSprite(object.path)
|
|
object.sprite.frame = 0
|
|
object.remadePolygon = false
|
|
pushUpdate("Refreshed all sprites.")
|
|
|
|
func unlinkSprite():
|
|
if heldSprite == null:
|
|
return
|
|
if heldSprite.parentId == null:
|
|
return
|
|
|
|
var glob = heldSprite.global_position
|
|
glob = Vector2(int(glob.x),int(glob.y))
|
|
|
|
heldSprite.get_parent().remove_child(heldSprite)
|
|
main.origin.add_child(heldSprite)
|
|
heldSprite.set_owner(main.origin)
|
|
heldSprite.parentId = null
|
|
heldSprite.parentSprite = null
|
|
heldSprite.position = glob - main.origin.position
|
|
|
|
Global.spriteList.updateData()
|
|
pushUpdate("Unlinked sprite.")
|
|
|
|
func saveImagesFromData():
|
|
var sprites = get_tree().get_nodes_in_group("saved")
|
|
if sprites.size() <= 0:
|
|
return
|
|
for sprite in sprites:
|
|
var img = sprite.imageData
|
|
var array = sprite.path.split("/",false)
|
|
var length = sprite.path.length() - array[array.size()-1].length()
|
|
|
|
DirAccess.make_dir_recursive_absolute(sprite.path.left(length-1))
|
|
img.save_png(sprite.path)
|
|
|
|
pushUpdate("Saved all avatar images to computer.")
|
|
|
|
func pushUpdate(text):
|
|
if is_instance_valid(updatePusherNode):
|
|
updatePusherNode.pushUpdate(text)
|