extends Spatial #export var textureset = ["9","13","16","21","22","23","28"] var kobcount = 200 var kobolds = [] var skip = 1 # physics skip var lskip = 4 # lighting skip var sc = 0 var lsc = 0 var lights var texsize = 128 var abusi var abusc var abuss var bval2 = 0.0 var lbval2 = 0.0 var dbval2 = 0.0 var rms = 0.0 var arms = 0.0 var rpeak = 0.0 func _ready(): #for i in len(textureset): # textureset[i] = load("res://textures/kobolds/%s.png" % textureset[i]) var ktex = load("res://textures/kobolds/atlas.png") for i in kobcount: var kobold = Sprite3D.new() kobold.texture = ktex kobold.pixel_size = 0.768/texsize #0.0015 kobold.billboard = 2 kobold.region_enabled = true var texid = randi()%7 kobold.region_rect = Rect2(texid%4*texsize,floor(texid/4)*texsize,texsize,texsize) add_child(kobold) kobolds.append([Vector3(rand_range(-2,2),2,rand_range(-3,3)),Vector3.ZERO,kobold]) lights = get_parent().lights abusi = AudioServer.get_bus_index("Input") abusc = AudioServer.get_bus_effect(abusi,0) abuss = AudioServer.get_bus_effect_instance(abusi,1) abusc.buffer_length = 0.1 const bouncemin = 1 const bouncemax = 2 const hdeviation = 0.5 var bounceboost = 2 # real physics simulation was too expensive, so approximation will have to do :3 var velocity = Vector3.ZERO func _physics_process(delta): rms = 0 var adata = abusc.get_buffer(int(AudioServer.get_mix_rate()*delta)+1) for v in adata: rms += pow(v.x+v.y,2) arms = arms*0.9 + rms*0.1 rpeak = clamp(rms/max(arms*2,1)-0.5,0,1) #lbval2 = bval2 #bval2 = abuss.get_magnitude_for_frequency_range(18000,20000).length()*100 #dbval2 = (bval2-lbval2)*delta*1000 bounceboost = 1 + rpeak + clamp(rms/250,0,1) $"/root/Spatial/DebugText".text = "%0.4f\n%0.4f\n%0.4f\n%d\n%d" % [rms,arms,rpeak,abusc.get_buffer_length_frames(),abusc.get_frames_available()] #print(rms) for i in range(sc,kobcount,skip): var kobold = kobolds[i] kobold[1].y -= 9.81*delta*skip if kobold[0].y < 0: kobold[1].y = 0 kobold[0].y = 0 kobold[1] += Vector3(rand_range(-hdeviation,hdeviation),rand_range(bouncemin,bouncemax),rand_range(-hdeviation,hdeviation))*bounceboost if kobold[0].x < -2: kobold[0].x = -2 kobold[1].x = 0 if kobold[0].x > 2: kobold[0].x = 2 kobold[1].x = 0 if kobold[0].z < -3: kobold[0].z = -3 kobold[1].z = 0 if kobold[0].z > 3: kobold[0].z = 3 kobold[1].z = 0 kobold[0] += kobold[1] * delta*skip kobold[2].position = kobold[0]+Vector3(0,0.25,0) for i in range(lsc,kobcount,lskip): var kobold = kobolds[i] var lum = Vector3.ZERO for light in lights: lum += light[1]/max(light[0].distance_squared_to(to_global(kobold[0]))/2,1) kobold[2].modulate = Color(lum.x,lum.y,lum.z) sc = (sc + 1) % skip lsc = (lsc + 1) % lskip