I guess that I should explain my problem in more detail.
I’ve created a mini-map on the HUD with a picture and then I positioned a star at the position of the player.
Every time the player moves it attaches a new star on the calculated position.
This results in a path
I tried to remove the old stars, but I haven’t made it.
[java]public class Main extends SimpleApplication {
private PlayerMarker playerPositionOnMap;
public static void main(String[] args) {
}
@Override
public void simpleInitApp() {
miniMap = new MiniMap(assetManager, settings, guiNode);
miniMap.setPosition(10, settings.getHeight() - 170 - 10, 1);
miniMap.showMiniMap();
playerPositionOnMap = new PlayerMarker(guiNode, assetManager, settings, guiFont, miniMap);
playerPositionOnMap.showPlayerPositionOnMap();
}
@Override
public void simpleUpdate(float tpf) {
Vector3f positionOfPlayer = playerNode.getLocalTranslation();
playerPositionOnMap.update(positionOfPlayer);
}
}[/java]
[java]public class MiniMap {
private final AssetManager assetManager;
private Node guiNode;
private AppSettings settings;
private int xCoord = 0;
private int yCoord = 0;
private int zCoord = 0;
public MiniMap(AssetManager inAssetManager, AppSettings inAppSettings, Node inGuiNode){
assetManager = inAssetManager;
settings = inAppSettings;
guiNode = inGuiNode;
}
private void initMiniMap() {
Picture minimapPicture = new Picture("MinimapPicture");
Material minimapMat = new Material(assetManager, "Common/MatDefs/Misc/Unshaded.j3md");
minimapMat.setTexture("ColorMap", assetManager.loadTexture("Materials/Pictures/minimap.png"));
minimapMat.getAdditionalRenderState().setBlendMode(RenderState.BlendMode.Alpha);
minimapPicture.setMaterial(minimapMat);
minimapPicture.setHeight(170);
minimapPicture.setWidth(170);
minimapPicture.setLocalTranslation(xCoord, yCoord, zCoord);
guiNode.attachChild(minimapPicture);
}
public void showMiniMap() {
initMiniMap();
}
public void setPosition(int inXCoord, int inYCoord, int inZCoord) {
xCoord = inXCoord;
yCoord = inYCoord;
zCoord = inZCoord;
}
public int getXCoord() {
return xCoord;
}
public int getYCoord() {
return yCoord;
}
public int getZCoord() {
return zCoord;
}
}[/java]
[java]public class PlayerMarker {
private Node guiNode;
private final AssetManager assetManager;
private AppSettings settings;
private BitmapFont guiFont;
private Vector3f middlePoint;
private MiniMap miniMap;
public PlayerMarker(Node inGuiNode, AssetManager inAssetManager, AppSettings inAppSettings, BitmapFont inGuiFont, MiniMap inMiniMap) {
guiNode = inGuiNode;
assetManager = inAssetManager;
settings = inAppSettings;
guiFont = inGuiFont;
miniMap = inMiniMap;
middlePoint = new Vector3f(miniMap.getXCoord() + 80, miniMap.getYCoord() + 95, 2);
}
private void showMarkerPositionOnMiniMap(Vector3f inPositionOfStar) {
guiFont = assetManager.loadFont("Interface/Fonts/Default.fnt");
BitmapText playerPositionOnMap = new BitmapText(guiFont, false);
playerPositionOnMap.setSize(guiFont.getCharSet().getRenderedSize() * 1);
playerPositionOnMap.setText("*");
playerPositionOnMap.setLocalTranslation(inPositionOfStar);
guiNode.attachChild(playerPositionOnMap);
}
public void showPlayerPositionOnMap() {
showMarkerPositionOnMiniMap(middlePoint);
}
public void update(Vector3f inPosition) {
Vector3f positionOfMap = calculatePosition(inPosition);
showMarkerPositionOnMiniMap(positionOfMap);
}
private Vector3f calculatePosition(Vector3f inPosition) {
float newXPositionOnMiniMap = (float) (inPosition.x * 0.5 + middlePoint.x);
float newZPositionOnMiniMap = (float) (-inPosition.z * 0.5 + middlePoint.y);
return new Vector3f(newXPositionOnMiniMap, newZPositionOnMiniMap, middlePoint.z);
}
}[/java]