mirror of
				https://athene2.informatik.unibw-muenchen.de/progproj/gruppen-ht24/Gruppe-02.git
				synced 2025-11-04 13:56:22 +01:00 
			
		
		
		
	Compare commits
	
		
			2 Commits
		
	
	
		
			7cbf000c44
			...
			7b82b20736
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					7b82b20736 | ||
| 
						 | 
					698937e77c | 
@@ -3,6 +3,9 @@ package pp.monopoly.client;
 | 
			
		||||
import com.jme3.app.Application;
 | 
			
		||||
import com.jme3.app.state.AppStateManager;
 | 
			
		||||
import com.jme3.asset.AssetManager;
 | 
			
		||||
import com.jme3.effect.ParticleEmitter;
 | 
			
		||||
import com.jme3.effect.ParticleMesh;
 | 
			
		||||
import com.jme3.effect.shapes.EmitterSphereShape;
 | 
			
		||||
import com.jme3.light.AmbientLight;
 | 
			
		||||
import com.jme3.light.DirectionalLight;
 | 
			
		||||
import com.jme3.material.Material;
 | 
			
		||||
@@ -203,10 +206,10 @@ public class BoardAppState extends MonopolyAppState {
 | 
			
		||||
        final float x = board.getWidth();
 | 
			
		||||
        final float y = board.getHeight();
 | 
			
		||||
        final Box seaMesh = new Box(y, 0.1f, x);
 | 
			
		||||
        final Geometry seaGeo = new Geometry("sea", seaMesh); //NONs-NLS
 | 
			
		||||
        final Geometry seaGeo = new Geometry("sea", seaMesh); //NON-NLS
 | 
			
		||||
        seaGeo.setLocalTranslation(new Vector3f(0, -0.1f, 0));
 | 
			
		||||
        Quaternion rotation = new com.jme3.math.Quaternion();
 | 
			
		||||
        rotation.fromAngleAxis(FastMath.HALF_PI, com.jme3.math.Vector3f.UNIT_Y);
 | 
			
		||||
        Quaternion rotation = new Quaternion();
 | 
			
		||||
        rotation.fromAngleAxis(FastMath.HALF_PI, Vector3f.UNIT_Y);
 | 
			
		||||
        seaGeo.setLocalRotation(rotation);
 | 
			
		||||
        final Material seaMat = new Material(getApp().getAssetManager(), "Common/MatDefs/Light/Lighting.j3md");
 | 
			
		||||
        Texture texture = getApp().getAssetManager().loadTexture("Pictures/board2.png");
 | 
			
		||||
@@ -214,8 +217,12 @@ public class BoardAppState extends MonopolyAppState {
 | 
			
		||||
        seaGeo.setMaterial(seaMat);
 | 
			
		||||
        seaGeo.setShadowMode(ShadowMode.CastAndReceive);
 | 
			
		||||
        TangentBinormalGenerator.generate(seaGeo);
 | 
			
		||||
    
 | 
			
		||||
        sceneNode.attachChild(createCardDeck());
 | 
			
		||||
        sceneNode.attachChild(seaGeo);
 | 
			
		||||
    
 | 
			
		||||
        // Schneefall hinzufügen
 | 
			
		||||
        addSnowEffect(sceneNode);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private Node createCardDeck() {
 | 
			
		||||
@@ -237,5 +244,34 @@ public class BoardAppState extends MonopolyAppState {
 | 
			
		||||
 | 
			
		||||
    public Vector3f getCurrentTarget(){
 | 
			
		||||
        return currentTarget;
 | 
			
		||||
}
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private void addSnowEffect(Node parentNode) {
 | 
			
		||||
        // ParticleEmitter für Schnee
 | 
			
		||||
        ParticleEmitter snowEmitter = new ParticleEmitter("Snow", ParticleMesh.Type.Triangle, 5000);
 | 
			
		||||
        Material snowMat = new Material(getApp().getAssetManager(), "Common/MatDefs/Misc/Particle.j3md");
 | 
			
		||||
        snowMat.setTexture("Texture", getApp().getAssetManager().loadTexture("Textures/snowflake.png")); // Schneeflocken-Textur
 | 
			
		||||
        snowEmitter.setMaterial(snowMat);
 | 
			
		||||
 | 
			
		||||
        // Eigenschaften für Schneepartikel
 | 
			
		||||
        snowEmitter.setImagesX(1);
 | 
			
		||||
        snowEmitter.setImagesY(1);
 | 
			
		||||
        snowEmitter.setEndColor(new ColorRGBA(1f, 1f, 1f, 0.5f)); // Weiß, halbtransparent
 | 
			
		||||
        snowEmitter.setStartColor(new ColorRGBA(1f, 1f, 1f, 1f)); // Vollweiß
 | 
			
		||||
        snowEmitter.setStartSize(0.1f);
 | 
			
		||||
        snowEmitter.setEndSize(0.2f);
 | 
			
		||||
        snowEmitter.setGravity(0, 0.5f, 0); // Langsames Fallen
 | 
			
		||||
        snowEmitter.setLowLife(3f);
 | 
			
		||||
        snowEmitter.setHighLife(15f);
 | 
			
		||||
        snowEmitter.getParticleInfluencer().setInitialVelocity(new Vector3f(0, -1, 0));
 | 
			
		||||
        snowEmitter.getParticleInfluencer().setVelocityVariation(0.3f);
 | 
			
		||||
 | 
			
		||||
        // Spawn-Bereich für Schneeflocken definieren
 | 
			
		||||
        snowEmitter.setParticlesPerSec(200);
 | 
			
		||||
        snowEmitter.setLocalTranslation(0, 10, 0);
 | 
			
		||||
        snowEmitter.setShape(new EmitterSphereShape(new Vector3f(0, 0, 0), 15)); // Bereich von -15 bis 15
 | 
			
		||||
 | 
			
		||||
        // Emitter zur Szene hinzufügen
 | 
			
		||||
        parentNode.attachChild(snowEmitter);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -106,6 +106,26 @@ public class MonopolyAppConfig extends MonopolyClientConfig {
 | 
			
		||||
    @Property("overlay.top.color") //NON-NLS
 | 
			
		||||
    private ColorRGBA topColor = ColorRGBA.White;
 | 
			
		||||
 | 
			
		||||
    private ColorRGBA applyGammaCorrection(ColorRGBA color) {
 | 
			
		||||
        return new ColorRGBA(
 | 
			
		||||
            correctGamma(color.r),
 | 
			
		||||
            correctGamma(color.g),
 | 
			
		||||
            correctGamma(color.b),
 | 
			
		||||
            color.a // Alpha bleibt unverändert
 | 
			
		||||
        );
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    private float correctGamma(float channel) {
 | 
			
		||||
        // Formel: ((RGB / 255)^2.2) * 255
 | 
			
		||||
        float normalized = channel / 255.0f; // RGB normalisieren (0-1)
 | 
			
		||||
        float gammaCorrected = (float) Math.pow(normalized, 2.2); // ^2.2
 | 
			
		||||
        return gammaCorrected * 255.0f; // Zurückskalieren auf 0-255
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    private float correctGamma(float channel, float gamma) {
 | 
			
		||||
        return (float) Math.pow(channel, gamma);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Creates a default {@code MonopolyAppConfig} with predefined values.
 | 
			
		||||
     */
 | 
			
		||||
 
 | 
			
		||||
@@ -3,6 +3,9 @@ package pp.monopoly.client.gui;
 | 
			
		||||
import com.jme3.material.Material;
 | 
			
		||||
import com.jme3.material.RenderState.BlendMode;
 | 
			
		||||
import com.jme3.math.ColorRGBA;
 | 
			
		||||
import com.jme3.math.FastMath;
 | 
			
		||||
import com.jme3.math.Quaternion;
 | 
			
		||||
import com.jme3.math.Vector3f;
 | 
			
		||||
import com.jme3.renderer.queue.RenderQueue.ShadowMode;
 | 
			
		||||
import com.jme3.scene.Geometry;
 | 
			
		||||
import com.jme3.scene.Node;
 | 
			
		||||
@@ -42,8 +45,10 @@ public class BobTheBuilder extends GameBoardSynchronizer {
 | 
			
		||||
        // Setze die Position basierend auf der Feld-ID
 | 
			
		||||
        node.setLocalTranslation(figure.getPos());
 | 
			
		||||
 | 
			
		||||
        // Setze die Rotation basierend auf der Feld-ID
 | 
			
		||||
        node.setLocalRotation(figure.getRot().toQuaternion());
 | 
			
		||||
        // Setze die Anfangsrotation auf 90 Grad nach links
 | 
			
		||||
        Quaternion initialRotation = new Quaternion().fromAngleAxis(FastMath.HALF_PI, Vector3f.UNIT_Y);
 | 
			
		||||
        node.setLocalRotation(initialRotation);
 | 
			
		||||
 | 
			
		||||
        node.addControl(new  FigureControl(node, figure, app));
 | 
			
		||||
        return node;
 | 
			
		||||
    }
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +1,7 @@
 | 
			
		||||
package pp.monopoly.client.gui;
 | 
			
		||||
 | 
			
		||||
import com.jme3.math.FastMath;
 | 
			
		||||
import com.jme3.math.Quaternion;
 | 
			
		||||
import com.jme3.math.Vector3f;
 | 
			
		||||
import com.jme3.renderer.RenderManager;
 | 
			
		||||
import com.jme3.renderer.ViewPort;
 | 
			
		||||
@@ -50,14 +51,30 @@ public class FigureControl extends AbstractControl implements GameEventListener
 | 
			
		||||
                return; // Warte, bis die Verzögerung abgeschlossen ist
 | 
			
		||||
            }
 | 
			
		||||
            delayTime = 0; // Verzögerung abgeschlossen
 | 
			
		||||
            LOGGER.log(Level.DEBUG, "Delay completed. Starting animation...");
 | 
			
		||||
            System.out.println("Delay completed. Starting animation...");
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (currentTarget == null && !path.isEmpty()) {
 | 
			
		||||
            // Hole das nächste Ziel aus dem Pfad
 | 
			
		||||
            currentTarget = path.poll();
 | 
			
		||||
            animationTime = 0f;
 | 
			
		||||
            LOGGER.log(Level.DEBUG, "Next target: {0}", currentTarget);
 | 
			
		||||
 | 
			
		||||
            // Prüfe, ob eine Drehung erforderlich ist (Felder 0, 10, 20, 30)
 | 
			
		||||
            int currentField = figure.getCurrentFieldID();
 | 
			
		||||
            int nextField = nextField(currentField);
 | 
			
		||||
            
 | 
			
		||||
            if ((nextField(currentField) == 10) ||
 | 
			
		||||
                (nextField(currentField) ==  20) ||
 | 
			
		||||
                (nextField(currentField) ==  30) ||
 | 
			
		||||
                (nextField(currentField) ==  0)) {
 | 
			
		||||
                
 | 
			
		||||
                Quaternion rotation = spatial.getLocalRotation();
 | 
			
		||||
                Quaternion turnRight = new Quaternion().fromAngleAxis(-FastMath.HALF_PI, Vector3f.UNIT_Y);
 | 
			
		||||
                spatial.setLocalRotation(rotation.mult(turnRight));
 | 
			
		||||
                
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            System.out.println("Next target: " + currentTarget);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (currentTarget != null) {
 | 
			
		||||
@@ -71,7 +88,7 @@ public class FigureControl extends AbstractControl implements GameEventListener
 | 
			
		||||
 | 
			
		||||
            // Hüpfeffekt hinzufügen
 | 
			
		||||
            float hopHeight = 0.5f * FastMath.sin(FastMath.PI * (animationTime / durationPerField));
 | 
			
		||||
            interpolatedPosition.setY(hopHeight + 1);
 | 
			
		||||
            interpolatedPosition.setY(hopHeight );
 | 
			
		||||
            spatial.setLocalTranslation(interpolatedPosition);
 | 
			
		||||
 | 
			
		||||
            // Ziel erreicht
 | 
			
		||||
@@ -80,17 +97,15 @@ public class FigureControl extends AbstractControl implements GameEventListener
 | 
			
		||||
                figure.moveTo(currentTarget); // Synchronisiere die interne Position
 | 
			
		||||
                currentTarget = null; // Setze Ziel zurück
 | 
			
		||||
 | 
			
		||||
                LOGGER.log(Level.DEBUG, "Target reached. Remaining path: {0}", path.size());
 | 
			
		||||
                System.out.println("Target reached.");
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    // Beispiel: Berechnung des nächsten Feldes
 | 
			
		||||
    private int nextField() {
 | 
			
		||||
        int currentField = figure.getCurrentFieldID();
 | 
			
		||||
        return (currentField + 1) % 40; // Weiter zum nächsten Feld
 | 
			
		||||
    private int nextField(int currentField) {
 | 
			
		||||
        return (currentField + 1) % 40;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    
 | 
			
		||||
 
 | 
			
		||||
@@ -65,7 +65,7 @@ public class StartMenu extends Dialog {
 | 
			
		||||
        app.getGuiNode().attachChild(centerMenu);
 | 
			
		||||
 | 
			
		||||
        // Load the Monopoly logo as a texture
 | 
			
		||||
        Texture logoTexture = app.getAssetManager().loadTexture("Pictures/logo-monopoly.png");
 | 
			
		||||
        Texture logoTexture = app.getAssetManager().loadTexture("Pictures/logo-monopolyw.png");
 | 
			
		||||
 | 
			
		||||
        // Create a container for the logo
 | 
			
		||||
        Container logoContainer = new Container();
 | 
			
		||||
 
 | 
			
		||||
										
											Binary file not shown.
										
									
								
							| 
		 After Width: | Height: | Size: 588 KiB  | 
										
											Binary file not shown.
										
									
								
							| 
		 After Width: | Height: | Size: 3.5 KiB  | 
		Reference in New Issue
	
	Block a user