init
This commit is contained in:
68
koboldspawner.gd
Normal file
68
koboldspawner.gd
Normal file
@@ -0,0 +1,68 @@
|
||||
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
|
||||
|
||||
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
|
||||
|
||||
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):
|
||||
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
|
||||
Reference in New Issue
Block a user