Jelajahi Sumber

updating debug transforms every update.
adding license.

rickard 2 tahun lalu
induk
melakukan
65e555aa41

+ 55 - 10
jme3-core/src/com/jme3/gde/core/scene/state/NormalViewState.java

@@ -1,7 +1,33 @@
 /*
- * To change this license header, choose License Headers in Project Properties.
- * To change this template file, choose Tools | Templates
- * and open the template in the editor.
+ *  Copyright (c) 2009-2022 jMonkeyEngine
+ *  All rights reserved.
+ * 
+ *  Redistribution and use in source and binary forms, with or without
+ *  modification, are permitted provided that the following conditions are
+ *  met:
+ * 
+ *  * Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 
+ *  * Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 
+ *  * Neither the name of 'jMonkeyEngine' nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ * 
+ *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ *  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ *  TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ *  PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ *  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ *  EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ *  PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ *  PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ *  LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ *  NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ *  SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 package com.jme3.gde.core.scene.state;
 
@@ -24,16 +50,19 @@ import jme3tools.optimize.GeometryBatchFactory;
  *
  * @author rickard
  */
-public class NormalViewState extends BaseAppState {
+public final class NormalViewState extends BaseAppState {
 
     private final Node debugNode = new Node("Normals debug");
+    private final float normalLength = 0.2f;
 
     @Override
-    protected void initialize(Application arg0) {
+    protected void initialize(final Application app) {
+        // not used
     }
 
     @Override
-    protected void cleanup(Application arg0) {
+    protected void cleanup(final Application app) {
+        // not used
     }
 
     @Override
@@ -41,12 +70,13 @@ public class NormalViewState extends BaseAppState {
         final SceneApplication app = (SceneApplication) getApplication();
         final List<Geometry> geometries = new ArrayList<>();
         GeometryBatchFactory.gatherGeoms(app.getRootNode(), geometries);
-        final Material debugMat = app.getAssetManager().loadMaterial("Common/Materials/VertexColor.j3m");
+        final Material debugMat = app.getAssetManager().loadMaterial(
+                "Common/Materials/VertexColor.j3m");
 
-        for (Geometry geometry : geometries) {
-            Geometry debug = new Geometry("Debug normals",
+        for (final Geometry geometry : geometries) {
+            final Geometry debug = new Geometry(geometry.getName(),
                     TangentBinormalGenerator.genNormalLines(geometry.getMesh(),
-                            0.2f));
+                            normalLength));
             debug.setMaterial(debugMat);
             debug.setCullHint(Spatial.CullHint.Never);
             debug.setLocalTransform(geometry.getWorldTransform());
@@ -55,6 +85,21 @@ public class NormalViewState extends BaseAppState {
         app.getRootNode().attachChild(debugNode);
     }
 
+    @Override
+    public void update(float tpf) {
+        super.update(tpf);
+
+        final Node rootNode = ((SceneApplication) getApplication()).getRootNode();
+        for (final Spatial debug : debugNode.getChildren()) {
+            final Spatial original = rootNode.getChild(debug.getName());
+            if (original == null) {
+                debug.removeFromParent();
+                continue;
+            }
+            debug.setLocalTransform(original.getWorldTransform());
+        }
+    }
+
     @Override
     protected void onDisable() {
         debugNode.removeFromParent();