com.jme3.app.StatsView Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of jme3-core Show documentation
Show all versions of jme3-core Show documentation
jMonkeyEngine is a 3-D game engine for adventurous Java developers
The newest version!
/*
* Copyright (c) 2009-2021 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.app;
import com.jme3.asset.AssetManager;
import com.jme3.font.BitmapFont;
import com.jme3.font.BitmapText;
import com.jme3.renderer.RenderManager;
import com.jme3.renderer.Statistics;
import com.jme3.renderer.ViewPort;
import com.jme3.renderer.queue.RenderQueue.Bucket;
import com.jme3.scene.Node;
import com.jme3.scene.Spatial;
import com.jme3.scene.control.Control;
import com.jme3.util.clone.Cloner;
import com.jme3.util.clone.JmeCloneable;
/**
* The StatsView
provides a heads-up display (HUD) of various
* statistics of rendering. The data is retrieved every frame from a
* {@link com.jme3.renderer.Statistics} and then displayed on screen.
*
* To use the stats view, you need to retrieve the
* {@link com.jme3.renderer.Statistics} from the
* {@link com.jme3.renderer.Renderer} used by the application. Then, attach
* the StatsView
to the scene graph.
*
* Statistics stats = renderer.getStatistics();
* StatsView statsView = new StatsView("MyStats", assetManager, stats);
* rootNode.attachChild(statsView);
*
*/
public class StatsView extends Node implements Control, JmeCloneable {
private final BitmapText statText;
private final Statistics statistics;
private final String[] statLabels;
private final int[] statData;
private boolean enabled = true;
private final StringBuilder stringBuilder = new StringBuilder();
public StatsView(String name, AssetManager manager, Statistics stats) {
super(name);
setQueueBucket(Bucket.Gui);
setCullHint(CullHint.Never);
statistics = stats;
statistics.setEnabled(enabled);
statLabels = statistics.getLabels();
statData = new int[statLabels.length];
BitmapFont font = manager.loadFont("Interface/Fonts/Console.fnt");
statText = new BitmapText(font);
statText.setLocalTranslation(0, statText.getLineHeight() * statLabels.length, 0);
attachChild(statText);
addControl(this);
}
public float getHeight() {
return statText.getLineHeight() * statLabels.length;
}
@Override
public void update(float tpf) {
if (!isEnabled()) {
return;
}
statistics.getData(statData);
stringBuilder.setLength(0);
// Need to walk through it backwards, as the first label
// should appear at the bottom, not the top.
for (int i = statLabels.length - 1; i >= 0; i--) {
stringBuilder.append(statLabels[i]).append(" = ").append(statData[i]).append('\n');
}
statText.setText(stringBuilder);
// Moved to ResetStatsState to make sure it is
// done even if there is no StatsView or the StatsView
// is disabled.
//statistics.clearFrame();
}
@Deprecated
@Override
public Control cloneForSpatial(Spatial spatial) {
throw new UnsupportedOperationException();
}
@Override
public StatsView jmeClone() {
throw new UnsupportedOperationException("Not yet implemented.");
}
@Override
public void cloneFields(Cloner cloner, Object original) {
throw new UnsupportedOperationException("Not yet implemented.");
}
@Override
public void setSpatial(Spatial spatial) {
}
public void setEnabled(boolean enabled) {
this.enabled = enabled;
statistics.setEnabled(enabled);
}
public boolean isEnabled() {
return enabled;
}
@Override
public void render(RenderManager rm, ViewPort vp) {
}
}
© 2015 - 2024 Weber Informatics LLC | Privacy Policy