extends SceneTree class GameStub extends Node3D: var headless := false var is_host := false func _initialize() -> void: call_deferred("run") func run() -> void: root.size = Vector2i(1200,700) var game := GameStub.new() root.add_child(game) var camera := Camera3D.new() game.add_child(camera) camera.position = Vector3(0,0.8,1.35) camera.look_at(Vector3(0,0,0)) var light := DirectionalLight3D.new() game.add_child(light) light.rotation_degrees = Vector3(-40,-30,0) light.light_energy = 2 var environment := WorldEnvironment.new() environment.environment = Environment.new() environment.environment.background_mode = Environment.BG_COLOR environment.environment.background_color = Color("424b55") environment.environment.ambient_light_source = Environment.AMBIENT_SOURCE_COLOR environment.environment.ambient_light_color = Color.WHITE environment.environment.ambient_light_energy = 0.6 game.add_child(environment) for i in 2: var grenade := FragGrenade.new() grenade.name = str(i+1) grenade.game = game grenade.kind = "frag" if i == 0 else "flash" grenade.position = Vector3(-0.4+i*0.3,0,0) game.add_child(grenade) assert(grenade.get_node("StylooEquipment").get_meta("asset_id") == ("nade_low" if i == 0 else "flashbang_low")) assert(grenade.freeze) var drops := AmmoDrops.new() drops.game = game game.add_child(drops) drops.sync([{"id":1,"p":Vector3(0.3,0.15,0),"left":30.0}]) assert(drops.visuals.size() == 1) assert(drops.visuals[1].get_node("StylooEquipment").get_meta("asset_id") == "ammobox_low") await create_timer(0.5).timeout await RenderingServer.frame_post_draw root.get_texture().get_image().save_png("res://logs/styloo-equipment.png") drops.clear() assert(drops.visuals.is_empty()) game.queue_free() await process_frame print("STYLOO FRAG / FLASH / AMMO SPAWN AND CLEANUP PASS") quit()