Package com.googlecode.jumpnevolve.game

Source Code of com.googlecode.jumpnevolve.game.DemoLevel

/*
* Copyright (C) 2010 Erik Wagner and Niklas Fiekas
*
* This program is free software; you can redistribute it and/or modify it under
* the terms of the GNU General Public License as published by the Free Software
* Foundation; either version 3 of the License, or (at your option) any later
* version.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
* details.
*
* You should have received a copy of the GNU General Public License along with
* this program; if not, see <http://www.gnu.org/licenses/>.
*/

package com.googlecode.jumpnevolve.game;

import net.phys2d.math.ROVector2f;
import net.phys2d.math.Vector2f;
import net.phys2d.raw.Body;
import net.phys2d.raw.World;

import org.newdawn.slick.Color;
import org.newdawn.slick.Graphics;
import org.newdawn.slick.Input;
import org.newdawn.slick.geom.Rectangle;

import com.googlecode.jumpnevolve.graphics.Drawable;
import com.googlecode.jumpnevolve.graphics.DrawablePollable;
import com.googlecode.jumpnevolve.graphics.ResourceManager;
import com.googlecode.jumpnevolve.graphics.effects.FogEmitterFactory;
import com.googlecode.jumpnevolve.graphics.effects.ParticleEffect;
import com.googlecode.jumpnevolve.graphics.effects.WaterfallEmitterFactory;
import com.googlecode.jumpnevolve.graphics.world.Camera;
import com.googlecode.jumpnevolve.graphics.world.SimulatedWorld;
import com.googlecode.jumpnevolve.graphics.world.WorldFactory;

/**
* Ein einfaches Level zur Demonstration des Programms.
*
* @author Niklas Fiekas
*/
public class DemoLevel implements WorldFactory {

  private LevelWorldFactory factory;
 
  private SimulatedWorld simulatedWorld;

  public DemoLevel(LevelWorldFactory world) {
    // Damit die Welt auf Anfrage zurückgeliefert werden kann
    this.factory = world;

    // Es folgt der Code, in dem Elemente in die Welt eingefügt werden.
    // Die WorldFactory Klassen sind geschachtelt:
    // - WorldFactory liefert keine Methoden
    // - BasicWorldFactory liefert einfache, allgemeine Methoden
    // - LevelWorldFactory liefert spielspezifische Methoden
    // - Diese Klasse erzeugt ein spezielles Level zur Demonstration
   
    // #1
    world.addWood(0, 0, 5f, 1.0f);
   
    // #2
    world.addWood(4.0f, 2.0f, 1.0f, 5.0f);
    world.addWood(5.0f, 6.0f, 3.0f, 1.0f);
    world.addWood(8.0f, 2.0f, 1.0f, 5.0f);
   
    // #3
    world.addWood(7.0f, 0.0f, 10.0f, 1.0f);
    world.addWood(7.0f, -3.2f, 5.0f, 1.0f);
    world.addSimpleFootSoldier(16.0f, 0.0f, SimpleFootSoldier.LEFT, 7.5f, 16.5f);
    world.addSimpleFootSoldier(11.0f, -3.2f);
   
    // #4
    world.addWood(17.0f, -2.0f, 1.0f, 1.0f);
    world.addWood(22.0f, -2.0f, 3.0f, 1.0f);
    world.addWood(26.0f, -2.0f, 1.0f, 1.0f);
   
    // #5
    world.addWood(29.0f, 0.0f, 5.0f, 1.0f);
    world.addSimpleFootSoldier(29.0f, 0.0f, SimpleFootSoldier.RIGHT, 29.5f, 33.5f);
    world.addSimpleFootSoldier(32.0f, 0.0f, SimpleFootSoldier.LEFT, 29.5f, 33.5f);
    world.addVerticalSlider(35.0f, 1.0f, 3.0f, 0.3f, 1.0f, 13.0f);
   
    // #6
    world.addWood(34.0f, -3.0f, 1.0f, 1.0f);
    world.addWood(35.5f, -4.0f, 1.0f, 1.0f);
    world.addWood(39.0f, -5.0f, 1.0f, 1.0f);
   
    // #7
    world.addStone(30.0f, 15.0f, 5.0f, 1.0f);
    world.addStone(37.0f, 18.0f, 1.0f, 1.0f);
    world.addStone(39.0f, 14.0f, 6.0f, 1.0f);
    world.addSimpleFootSoldier(39.0f, 14.0f, SimpleFootSoldier.RIGHT, 39.5f, 44.5f);
    world.addSimpleFootSoldier(44.0f, 14.0f, SimpleFootSoldier.LEFT, 39.5f, 44.5f);
    world.addStone(39.0f, 15.0f, 1.0f, 3.0f);
    world.addStone(44.5f, 18.0f, 1.0f, 1.0f);
    world.addHorizontalSlider(39.0f, 20.0f, 7.0f, 1.0f, HorizontalSlider.LEFT, 32.0f, 45.0f);
   
    // #8
    world.addStone(47.0f, 16.0f, 4.0f, 1.0f);
    world.addStone(53.0f, 15.0f, 2.0f, 2.0f);
    world.addStone(57.0f, 12.0f, 2.0f, 5.0f);
   
    // #9
    world.addStone(63.0f, 12.0f, 10.0f, 1.0f);
    world.addSimpleFootSoldier(63.0f, 12.0f, SimpleFootSoldier.RIGHT, 63.5f, null);
    world.addSimpleFootSoldier(67.0f, 12.0f);
    world.addStone(66.0f, 10.5f, 1.5f, 1.5f);
    world.addStone(70.0f, 10.5f, 2.5f, 1.5f);
    world.addStone(72.5f, 7.3f, 0.5f, 4.7f);
    world.addStone(79.0f, 12.0f, 1.0f, 1.0f);
    world.addStone(83.0f, 12.0f, 1.0f, 1.0f);
   
    // #10
    world.addStone(88.0f, 17.0f, 10.0f, 1.0f);
    world.addHorizontalSlider(73.0f, 20.0f, 4.0f, 1.0f, HorizontalSlider.LEFT, 73.0f, 90.0f);
   
    // #11
    world.addWood(40.0f, 0.0f, 4.0f, 1.0f);
    world.addWood(47.0f, -1.0f, 12.0f, 1.0f);
   
    // #12
    world.addWood(63.0f, -1.5f, 6.0f, 1.0f);
    world.addSimpleFootSoldier(63.0f, -1.5f, SimpleFootSoldier.RIGHT, 63.5f, null);
    world.addWood(68.0f, -2.5f, 2.0f, 1.0f);
    world.addWood(69.0f, -3.5f, 2.0f, 1.0f);
    world.addSimpleFootSoldier(69.0f, -3.5f, SimpleFootSoldier.RIGHT, 69.3f, null);
    world.addWood(70.0f, -4.5f, 3.0f, 1.0f);
   
    // #13
    world.addWood(76.0f, -4.5f, 4.0f, 1.0f);
    world.addWood(79.0f, -3.5f, 1.0f, 4.5f);
    world.addWood(79.0f, 1.0f, 6.0f, 1.0f);
    world.addWood(85.0f, -3.0f, 1.0f, 5.0f);
    world.addWood(85.0f, -4.0f, 12.0f, 1.0f);
   
    // #14
    world.addStone(97.0f, -1.0f, 1.0f, 1.0f);
    world.addVerticalSlider(98.0f, 15.0f, 2.0f, 0.3f, -1.0f, 17.0f);
    world.addSimpleFootSoldier(98.0f, -2.0f, SimpleFootSoldier.RIGHT, 98.5f, 99.5f);
   
    // #15
    world.addWood(98.0f, -4.0f, 4.0f, 1.0f);
    world.addWood(104.0f, -2.0f, 1.0f, 1.0f);
    world.addSimpleFootSoldier(104.0f, -2.0f, SimpleFootSoldier.RIGHT, 104.4f, 104.6f);
    world.addWood(106.0f, 0.0f, 1.0f, 1.0f);
    world.addWood(108.0f, 2.0f, 1.0f, 1.0f);
    world.addHorizontalSlider(108.0f, 1.0f, 4.0f, 1.0f, HorizontalSlider.LEFT, 110.0f, 130.0f);
   
    // #16
    world.addWood(117.0f, 5.0f, 1.0f, 4.0f);
    world.addWood(118.0f, 8.0f, 4.0f, 1.0f);
    world.addWood(122.0f, 5.0f, 1.0f, 4.0f);
    world.addWood(123.0f, 2.0f, 1.0f, 1.0f);
    world.addSimpleFootSoldier(119.0f, 4.0f, SimpleFootSoldier.RIGHT, null, null);
    world.addSimpleFootSoldier(122.0f, 4.0f, SimpleFootSoldier.RIGHT, null, null);
   
    // #17 - Ziel
    world.addWood(132.0f, 1.0f, 5.0f, 1.0f);
    world.addWood(133.0f, 0.0f, 4.0f, 1.0f);
    world.addJumpingSoldier(133.0f, 0.0f);
   
    // #18
    world.addHorizontalSlider(40.0f, -7.0f, 2.0f, 1.0f, HorizontalSlider.RIGHT, 40.0f, 46.0f);
    world.addWood(46.0f, -8.0f, 4.0f, 1.0f);
   
    // # 19
    world.addWood(48.0f, -11.0f, 1.5f, 1.0f);
    world.addWood(50.0f, -14.0f, 1.0f, 2.0f);
    world.addWood(51.0f, -13.0f, 4.0f, 1.0f);
    world.addJumpingSoldier(51.2f, -13.0f);
    world.addWood(58.0f, -13.0f, 4.0f, 1.0f);
    world.addVerticalSlider(61.0f, -14.0f, 1.0f, 0.3f, -23.0f, 0.0f);
    world.addSimpleFootSoldier(61.0f, -14.1f, SimpleFootSoldier.RIGHT, 61.4f, 61.6f);
   
    // #20
    world.addWood(62.0f, -25.0f, 18.0f, 1.0f);
    world.addWood(65.0f, -27.0f, 1.0f, 2.0f);
    world.addWood(79.0f, -28.0f, 1.0f, 3.0f);
    world.addSimpleFootSoldier(66.0f, -25.0f);
    world.addSimpleFootSoldier(68.0f, -25.0f);
    world.addSimpleFootSoldier(75.0f, -25.0f);
    world.addSimpleFootSoldier(78.0f, -25.0f);
   
    // #21
    world.addWood(85.0f, -26.0f, 1.0f, 1.0f);
    world.addWood(88.0f, -26.0f, 2.0f, 1.0f);
    world.addSimpleFootSoldier(88.0f, -26.0f, SimpleFootSoldier.RIGHT, 88.5f, 89.5f);
    world.addWood(93.0f, -27.0f, 2.0f, 1.0f);
    // Wasserfall
    world.setPosition(new Vector2f(97.5f, -40.0f));
    world.addDrop();
    world.setPosition(new Vector2f(97.6f, -41.0f));
    world.addDrop();
   
    final Body figure = world.addFigure(0, 0);
   
    // Nachdem die Einstellungen für die physikalische Welt erledigt sind,
    // kommen nun Einstellungen für das Level
    this.simulatedWorld = new SimulatedWorld(this);
   
    // Wasserfalleffekt einfügen
    this.simulatedWorld.add(new ParticleEffect(new Vector2f(97.5f, -1.0f), new FogEmitterFactory()));
    this.simulatedWorld.add(new ParticleEffect(new Vector2f(97.5f, -40.0f), new WaterfallEmitterFactory(36.0f)));
   
    // Unteres Wasser hinzufügen
    this.simulatedWorld.add(new DrawablePollable() {
      private float y = 0.0f;
      private float timeout = 0.0f;
      public void draw(Graphics g) {
        Color oldColor = g.getColor();
        g.setColor(new Color(0.0f, 0.0f, 1.0f, 0.4f));
        g.fillRect(-50.0f, 20.2f + this.y, 200.0f, 3.0f);
        g.setColor(oldColor);
      }

      public void poll(Input input, float secounds) {
        this.timeout -= secounds;
        if(this.timeout <= 0) {
          this.timeout = 0.2f;
          this.y = (float) ((Math.random() - 0.5) * 0.1);
        }
      }
    });
   
    // Hintergrund hinzufügen
    this.simulatedWorld.addBackground(new Drawable() {
      public void draw(Graphics g) {
        g.pushTransform();
        DemoLevel.this.simulatedWorld.doCameraTranslation(g);
         g.texture(new Rectangle(-50.0f, -40.0f, 200.0f, 60.0f), ResourceManager.getInstance().getImage("landscape.png"), true);
         g.popTransform();
      }
    });
   
    // Spielfigur
   
    // final Body figure = world.addFigure(117.0f, -30.0f);
   
    // Kamera Einstellung
    this.simulatedWorld.setCamera(new Camera() {
      public ROVector2f getPosition() {
        return figure.getPosition();
      }

      public void poll(Input input, float secounds) { }
    });
  }
 
  public SimulatedWorld getSimulatedWorld() {
    return this.simulatedWorld;
  }
 
  public World getWorld() {
    return this.factory.getWorld();
  }
}
TOP

Related Classes of com.googlecode.jumpnevolve.game.DemoLevel

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.