@@ -0,0 +1,1468 @@
+package de.mycrobase.ssim.ed.app;%0A%0Aimport com.jme3.app.Application;%0Aimport com.jme3.app.state.AppStateManager;%0Aimport com.jme3.math.Vector3f;%0Aimport com.jme3.shadow.BasicShadowRenderer;%0A%0Aimport de.mycrobase.ssim.ed.util.TempVars;%0A%0Apublic class ShadowAppState extends BasicAppState %7B%0A%0A    private static final float UpdateInterval = 30f; // in seconds%0A    %0A    // exists only while AppState is attached%0A    private BasicShadowRenderer bsr;%0A    %0A    public ShadowAppState() %7B%0A        super(UpdateInterval);%0A    %7D%0A    %0A    @Override%0A    public void initialize(AppStateManager stateManager, Application baseApp) %7B%0A        super.initialize(stateManager, baseApp);%0A        %0A        bsr = new BasicShadowRenderer(getApp().getAssetManager(), 256);%0A        updateLightDir();%0A        getApp().getViewPort().addProcessor(bsr);%0A    %7D%0A    %0A    @Override%0A    protected void intervalUpdate() %7B%0A        updateLightDir();%0A    %7D%0A    %0A    @Override%0A    public void cleanup() %7B%0A        super.cleanup();%0A        %0A        getApp().getViewPort().removeProcessor(bsr);%0A        %0A        bsr = null;%0A    %7D%0A    %0A    private void updateLightDir() %7B%0A        TempVars vars = TempVars.get();%0A        %0A        Vector3f sunPosition = getSkyAppState().getSun().getSunPosition(vars.vect1);%0A        sunPosition.negateLocal();%0A        bsr.setDirection(sunPosition);%0A        %0A        vars.release();%0A    %7D%0A    %0A    private SkyAppState getSkyAppState() %7B%0A        return getState(SkyAppState.class);%0A    %7D%0A%7D%0A

Add basic shadow AppState