Begin visual console.

This commit is contained in:
Lubos Lenco 2016-07-21 17:45:39 +02:00
parent 63338a29ea
commit a2488719b1
9 changed files with 106 additions and 38 deletions

View file

@ -1,6 +1,6 @@
package armory.renderpipeline;
import iron.node.RenderPath;
import iron.resource.RenderPath;
class FFT {

View file

@ -4,7 +4,7 @@
package armory.renderpipeline;
import kha.math.FastVector3;
import iron.node.RenderPath;
import iron.resource.RenderPath;
import iron.resource.WorldResource;
class HosekWilkieRadianceData {

View file

@ -20,6 +20,8 @@ class FlyCamera extends Trait {
var strafeForward = false;
var strafeBackward = false;
static inline var speed = 2.5;
public function new() {
super();
@ -41,7 +43,7 @@ class FlyCamera extends Trait {
function update() {
if (Input.occupied) return;
var d = Time.delta * 5 / 2;
var d = Time.delta * speed;
if (moveForward) {
camera.move(camera.look(), d);

View file

@ -0,0 +1,52 @@
package armory.trait.internal;
import iron.Trait;
#if WITH_PROFILE
import iron.resource.RenderPath;
import iron.node.CameraNode;
import zui.Zui;
import zui.Id;
#end
class Console extends Trait {
#if (!WITH_PROFILE)
public function new() { super(); }
#else
var ui:Zui;
var path:RenderPath;
public function new() {
super();
var font = kha.Assets.fonts.droid_sans;
ui = new Zui(font, 17, 16, 0, 1.0);
notifyOnAdd(add);
notifyOnRender2D(render2D);
}
function add() {
path = cast(node, CameraNode).renderPath;
}
function render2D(g:kha.graphics2.Graphics) {
g.end();
ui.begin(g);
if (ui.window(Id.window(), 0, 0, 200, 200)) {
// ui.window(Id.window(), 0, 0, 200, 200);
ui.text("frame ms: " + Math.round(RenderPath.frameTimeAvg * 10000) / 10);
ui.text("phys ms: " + Math.round(PhysicsWorld.physTimeAvg * 10000) / 10);
// ui.text("game ms: " + Math.round(App.updateTimeAvg * 10000) / 10);
// ui.text("anim ms: " + Math.round(Animation.animTimeAvg * 10000) / 10);
ui.text("draw calls: " + RenderPath.drawCalls);
// ui.text("delta: " + RenderPath.frameDeltaAvg);
}
ui.end();
g.begin(false);
}
#end
}

View file

@ -23,6 +23,12 @@ class PhysicsWorld extends Trait {
public function new(gravity:Array<Float> = null) { super(); }
#else
#if WITH_PROFILE
var frames = 0;
var physTime = 0.0;
public static var physTimeAvg = 0.0;
#end
public var world:BtDiscreteDynamicsWorldPointer;
var dispatcher:BtCollisionDispatcherPointer;
@ -99,8 +105,22 @@ class PhysicsWorld extends Trait {
}
public function update() {
#if WITH_PROFILE
var time = kha.Scheduler.realTime();
#end
world.ptr.stepSimulation(timeStep, 1, fixedStep);
updateContacts();
#if WITH_PROFILE
frames++;
physTime += kha.Scheduler.realTime() - time;
if (frames >= 60) {
physTimeAvg = physTime / 60;
frames = 0;
physTime = 0;
}
#end
}
function updateContacts() {

View file

@ -1508,7 +1508,7 @@ class ArmoryExporter(bpy.types.Operator, ExportHelper):
else:
parento['nodes'].append(o)
self.cb_export_node(node, o)
self.cb_export_node(node, o, type)
if not hasattr(o, 'nodes'):
o['nodes'] = []
@ -2340,7 +2340,7 @@ class ArmoryExporter(bpy.types.Operator, ExportHelper):
po['material_refs'] = [o['material_refs'][0] + '_decal'] # Will fetch a proper context used in render path
break
def cb_export_node(self, node, o):
def cb_export_node(self, node, o, type):
#return
# Export traits
o['traits'] = []
@ -2411,6 +2411,14 @@ class ArmoryExporter(bpy.types.Operator, ExportHelper):
x['parameters'].append(rb.collision_margin)
o['traits'].append(x)
# Debug console enabled, attach console overlay to each camera
if type == kNodeTypeCamera:
console_trait = {}
console_trait['type'] = 'Script'
console_trait['class_name'] = 'armory.trait.internal.Console'
console_trait['parameters'] = []
o['traits'].append(console_trait)
# Map objects to game objects
self.objectToGameObjectDict[node] = o

View file

@ -1,16 +0,0 @@
import http.server
import socketserver
import bpy
import os
# Can't use multiprocessing on Windows
#p = Process(target=run_server)
#p.start()
#atexit.register(p.terminate)
def run_server():
Handler = http.server.SimpleHTTPRequestHandler
httpd = socketserver.TCPServer(("", 8040), Handler)
httpd.serve_forever()
run_server()

View file

@ -9,11 +9,19 @@ import traits
import props
import lib.drop_to_ground
import bpy
import utils
import subprocess
import atexit
import threading
import os
import http.server
import socketserver
def run_server():
Handler = http.server.SimpleHTTPRequestHandler
try:
httpd = socketserver.TCPServer(("", 8040), Handler)
httpd.serve_forever()
except:
print('Server already running')
def register():
props.register()
@ -28,14 +36,10 @@ def register():
lib.drop_to_ground.register()
# Start server
user_preferences = bpy.context.user_preferences
addon_prefs = user_preferences.addons['armory'].preferences
scripts_path = addon_prefs.sdk_path + '/armory/blender/'
os.chdir(utils.get_fp())
blender_path = bpy.app.binary_path
blend_path = bpy.data.filepath
register.p = subprocess.Popen([blender_path, blend_path, '-b', '-P', scripts_path + 'lib/server.py', '&'])
atexit.register(register.p.terminate)
t = threading.Thread(name='localserver', target=run_server)
t.daemon = True
t.start()
def unregister():
project.unregister()
@ -48,6 +52,3 @@ def unregister():
traits.unregister()
props.unregister()
lib.drop_to_ground.unregister()
# Stop server
register.p.terminate()

View file

@ -28,10 +28,9 @@ project.addAssets('Assets/**');
f.write('project.addLibrary("../' + bpy.path.relpath(sdk_path + '/armory')[2:] + '");\n')
f.write('project.addLibrary("../' + bpy.path.relpath(sdk_path + '/iron')[2:] + '");\n')
f.write('project.addLibrary("../' + bpy.path.relpath(sdk_path + '/zui')[2:] + '");\n')
if bpy.data.worlds[0].CGPhysics != 'Disabled':
f.write("\nproject.addDefine('WITH_PHYSICS')\n")
f.write("project.addDefine('WITH_PHYSICS')\n")
f.write('project.addLibrary("../' + bpy.path.relpath(sdk_path + '/haxebullet')[2:] + '");\n')
for ref in shader_references: # Shaders
@ -42,10 +41,12 @@ project.addAssets('Assets/**');
f.write("project.addAssets('" + ref + "');\n")
if bpy.data.worlds[0].CGPlayConsole:
f.write("\nproject.addDefine('WITH_PROFILE')\n")
f.write("project.addDefine('WITH_PROFILE')\n")
f.write('project.addLibrary("../' + bpy.path.relpath(sdk_path + '/zui')[2:] + '");\n')
f.write('project.addAssets("' + sdk_path + '/armory/Assets/droid_sans.ttf");\n')
if bpy.data.worlds[0].CGMinimize == False:
f.write("\nproject.addDefine('WITH_JSON')\n")
f.write("project.addDefine('WITH_JSON')\n")
config_text = bpy.data.worlds[0]['CGKhafileConfig']
if config_text != '':