📄 player.java.svn-base
字号:
/*
* Player.java
*
* Created on 16. Dezember 2006, 18:35
*
* To change this template, choose Tools | Template Manager
* and open the template in the editor.
*/
package kanjitori;
import com.jme.bounding.BoundingBox;
import com.jme.math.Vector3f;
import com.jme.renderer.Camera;
import com.jme.renderer.ColorRGBA;
import com.jme.scene.CameraNode;
import com.jme.scene.Node;
import com.jme.scene.shape.Box;
import com.jme.system.DisplaySystem;
import java.awt.Point;
import java.util.List;
import kanjitori.event.BotKilledEventManager;
import kanjitori.event.AbstractEventManager;
import kanjitori.event.EntrySolvedEventManager;
import kanjitori.event.EventManager;
import kanjitori.event.ItemCollectedEventManager;
import kanjitori.event.Listener;
import kanjitori.event.PlayerHurtEventManager;
import kanjitori.event.PlayerRelocateEventManager;
import kanjitori.graphics.Thing;
import kanjitori.graphics.bot.Bot;
import kanjitori.graphics.hud.AbstractHud;
import kanjitori.graphics.hud.Hud;
import kanjitori.graphics.item.Item;
import kanjitori.lesson.Entry;
import kanjitori.map.Map;
import kanjitori.util.Boom;
import kanjitori.util.SkyboxProvider;
/**
*
* @author Pirx
*/
public class Player implements Thing {
private static Player INSTANCE;
private Node playerNode;
private Node collisionNode;
private CameraNode camNode;
private Entry entry;
private Map map;
private int health = 100;
private int teleporter = 0;
private int defChange = 0;
/** Creates a new instance of Player */
public Player(Node rootNode, Map map) {
this.map = map;
INSTANCE = this;
DisplaySystem display = DisplaySystem.getDisplaySystem();
Camera cam = display.getRenderer().getCamera();
cam.setFrustumPerspective(50.0f, (float) display.getWidth() / (float) display.getHeight(), 0.25f, 500);
camNode = new CameraNode("camera", cam);
camNode.updateWorldData( 0 );
playerNode = new Node();
rootNode.attachChild(playerNode);
Box collisionBox = new Box("pbox", new Vector3f(), 0.5f, 0.5f, 0.5f);
collisionBox.setCullMode(Box.CULL_ALWAYS);
collisionBox.setModelBound(new BoundingBox());
collisionBox.updateModelBound();
collisionNode = new Node("collisionNode");
collisionNode.attachChild(collisionBox);
playerNode.attachChild(SkyboxProvider.getProvider().getSkybox(map.getSkyboxTextures()));
playerNode.attachChild(camNode);
playerNode.attachChild(collisionNode);
Boom.setExplosion(playerNode, new ColorRGBA(0.5f, 0.3f, 0.3f, 0.8f), new ColorRGBA(1f, 0f, 0f, 0.4f), 15f, 20f, 50f, 80);
relocate();
AbstractHud.getHud().showHealth(health);
AbstractHud.getHud().showTeleporters(teleporter);
AbstractHud.getHud().showChange(defChange);
ItemCollectedEventManager.getManager().register(new Listener<Item>(){
public void notify(Item item) {
itemCollected(item);
}
});
PlayerHurtEventManager.getManager().register(new Listener<Bot>(){
public void notify(Bot bot) {
playerHurt(bot);
}
});
BotKilledEventManager.getManager().register(new Listener<Bot>(){
public void notify(Bot bot) {
botKilled();
}
});
}
public Entry getEntry() {
return entry;
}
public void setEntry(Entry entry) {
this.entry = entry;
Hud hud = AbstractHud.getHud();
if (hud != null) {
hud.showDefinition(entry.getKey());
}
}
public CameraNode getCamNode() {
return camNode;
}
public Node getCollisionNode() {
return collisionNode;
}
private void relocate() {
Point freePos = map.findFreePos();
Vector3f position = new Vector3f(freePos.x*2, 0, freePos.y*2);
playerNode.setLocalTranslation(position);
playerNode.updateWorldVectors();
playerNode.updateRenderState();
PlayerRelocateEventManager.getManager().fireEvent(this);
Boom.explode(playerNode);
}
private void die() {
Main.getMain().die();
}
public void itemCollected(Item item) {
switch (item.getType()) {
case HEALTH : changeHealth(5); break;
case TELEPORT: changeTeleporters(1); break;
case DEF_CHANGE: changeDef(1); break;
}
}
public void useItem(Item.Type type) {
switch (type) {
case TELEPORT:
if (teleporter > 0) {
changeTeleporters(-1);
relocate();
}
break;
case DEF_CHANGE:
if (defChange > 0) {
if (entry.isDirty()) {
break;
}
Entry newEntry = entry;
List<Entry> activeEntries = Level.getLevel().getActiveEntries();
if (activeEntries.size() == 1) {
break;
}
changeDef(-1);
while(newEntry.equals(entry)) {
newEntry = activeEntries.get(Level.RANDOM.nextInt(activeEntries.size()));
}
entry = newEntry;
AbstractHud.getHud().showDefinition(entry.getKey());
}
break;
}
}
public void changeTeleporters(int amount) {
teleporter += amount;
if (teleporter > 3) {
teleporter = 3;
}
if (teleporter < 0) {
teleporter = 0;
}
AbstractHud.getHud().showTeleporters(teleporter);
}
public void changeDef(int amount) {
defChange += amount;
if (defChange > 3) {
defChange = 3;
}
if (defChange < 0) {
defChange = 0;
}
AbstractHud.getHud().showChange(defChange);
}
public void changeHealth(int amount) {
health += amount;
if (health > 100) {
health = 100;
}
if (health < 0) {
die();
}
AbstractHud.getHud().showHealth(health);
}
private void playerHurt(Bot bot) {
changeHealth(-15);
if (health >= 0) {
relocate();
}
}
private void botKilled() {
changeHealth(2);
}
public void entrySolved() {
setEntry(Level.getLevel().getNextEntry());
}
public static Player getPlayer() {
return INSTANCE;
}
public Node getNode() {
return playerNode;
}
public boolean checkPlayerCollision() {
return false;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -