Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package station;
- import java.io.InputStream;
- import java.io.InputStreamReader;
- import java.util.List;
- import java.util.Scanner;
- import com.jme3.bounding.BoundingBox;
- import com.jme3.bullet.util.CollisionShapeFactory;
- import com.jme3.light.AmbientLight;
- import com.jme3.material.Material;
- import com.jme3.math.ColorRGBA;
- import com.jme3.math.FastMath;
- import com.jme3.math.Vector3f;
- import com.jme3.renderer.queue.RenderQueue.ShadowMode;
- import com.jme3.scene.Node;
- import com.jme3.scene.Spatial;
- import com.jme3.ui.Picture;
- import celestial.support.SpaceObject;
- import mainpkg.CPU;
- import mainpkg.screen.hud.Arrow;
- import mainpkg.screen.hud.Arrow.Color;
- import module.templates.Mod;
- import screengui.GUI;
- import setup.MakeWorld;
- import station.misc.Commercials;
- import station.misc.MessageSending;
- import station.misc.StatMod;
- import station.misc.Worker;
- import station.misc.panels.DisplaysIcon;
- import util.Const;
- import util.control.OriginControl;
- public class SpaceStation extends Node implements SpaceObject{
- public enum Corp{
- Oyster, Valdez
- }
- public MessageSending msg;
- public Corp skin;
- public String name;
- public long seed;
- public OriginControl ctrl;
- public Vector3f size3f;
- private Vector3f cog;
- private Picture icon;
- private Arrow hudarrow;
- private Node COGSlider;
- private float mass = 500;
- private int type = 0;
- public boolean recalculate = false;
- private AmbientLight ambientlight;
- static Material oyster, valdez;
- public static void load(){
- oyster = new Material(CPU.game.getAssetManager(),MakeWorld.masklighted);
- oyster.setTexture("DiffuseMap",Mod.loadTexture("assets/models_station/texture/OYST/stationtex.png"));
- oyster.setTexture("NormalMap",Mod.loadTexture("assets/models_station/texture/OYST/stationnormal.jpg"));
- oyster.setTexture("GlowMask",Mod.loadTexture("assets/models_station/texture/OYST/stationglow.jpg"));
- valdez = new Material(CPU.game.getAssetManager(),MakeWorld.masklighted);
- valdez.setTexture("DiffuseMap",Mod.loadTexture("assets/models_station/texture/VALD/stationtex.png"));
- valdez.setTexture("NormalMap",Mod.loadTexture("assets/models_station/texture/VALD/stationnormal.jpg"));
- valdez.setTexture("GlowMask",Mod.loadTexture("assets/models_station/texture/VALD/stationglow.jpg"));
- }
- public SpaceStation(Vector3f loc){
- this(loc,FastMath.rand.nextBoolean()? Corp.Oyster : Corp.Oyster,FastMath.rand.nextLong());
- }
- public SpaceStation(Vector3f loc, Corp skin){
- this(loc,skin,FastMath.rand.nextLong());
- }
- public SpaceStation(Vector3f loc, Corp skin, long seed){
- super();
- setLocalTranslation(loc);
- this.skin = skin;
- this.seed = seed;
- name = generateName();
- setName(name);
- msg = new MessageSending(this);
- type = FastMath.nextRandomInt(0, 6);
- if(type == 3)
- type = FastMath.nextRandomInt(0, 6);
- }
- @Override
- public void enable() {
- setShadowMode(ShadowMode.Inherit);
- COGSlider = new Node();
- attachChild(COGSlider);
- Material mat = null;
- switch(skin){
- case Valdez:mat = valdez;break;
- default: mat = oyster;
- }
- switch(type){
- case 0: addSections0(mat);
- break;
- case 1: addSections1(mat);
- break;
- case 2: addSections2(mat);
- break;
- case 3: addSections3(mat);
- break;
- case 4: addSections4(mat);
- break;
- case 5: addSections5(mat);
- break;
- case 6: addSections6(mat);
- break;
- }
- getLocalRotation().fromAngleAxis(-FastMath.nextRandomInt(0, 360)*FastMath.DEG_TO_RAD, Vector3f.UNIT_Y);
- update();
- setUpPhysics();
- }
- private void addSections0(Material mat){
- COGSlider.attachChild(new Core(mat,Vector3f.ZERO, Const.DEFAULT));
- COGSlider.attachChild(new Gas(mat,Vector3f.UNIT_Z.mult(60+18+10), Const.LEFT));
- COGSlider.attachChild(new Truss(mat,Vector3f.UNIT_Z.mult(-21-18), Const.RIGHT));
- COGSlider.attachChild(new Truss(mat,Vector3f.UNIT_Z.mult(21+18), Const.LEFT));
- COGSlider.attachChild(new Terminal(mat,Vector3f.UNIT_Z.mult(-60-18-10), Const.LEFT));
- COGSlider.attachChild(new Core(mat,Vector3f.UNIT_Z.mult(-60-18-80), Const.DEFAULT));
- for (int i = 1; i < 3; i++) {
- COGSlider.attachChild(new Truss(mat,Vector3f.UNIT_X.mult(-21-i*18), Const.DEFAULT));
- }
- COGSlider.attachChild(new Build(mat,Vector3f.UNIT_X.mult(-96), Const.DEFAULT));
- COGSlider.attachChild(new Build(mat,Vector3f.UNIT_X.mult(60), Const.BACK));
- }
- private void addSections1(Material mat){
- COGSlider.attachChild(new Core(mat,Vector3f.ZERO, Const.DEFAULT));
- COGSlider.attachChild(new Terminal(mat,Vector3f.UNIT_Z.mult(-60-10), Const.LEFT));
- COGSlider.attachChild(new Gas(mat,Vector3f.UNIT_Z.mult(60+10), Const.RIGHT));
- COGSlider.attachChild(new Build(mat,Vector3f.UNIT_X.mult(60), Const.BACK));
- COGSlider.attachChild(new Build(mat,Vector3f.UNIT_X.mult(-60), Const.DEFAULT));
- }
- private void addSections2(Material mat){
- COGSlider.attachChild(new Core(mat,Vector3f.ZERO, Const.DEFAULT));
- COGSlider.attachChild(new Core(mat,new Vector3f(60+18+18,0,0), Const.LEFT));
- COGSlider.attachChild(new Core(mat,new Vector3f(0,0,18+18+60), Const.RIGHT));
- COGSlider.attachChild(new Core(mat,new Vector3f(60+18+18,0,18+60+18), Const.BACK));
- for (int i = 1; i < 3; i++) {
- for (int j = 0; j < 2; j++) {
- COGSlider.attachChild(new Truss(mat,new Vector3f(21+i*18,0,j*(60+18+18)), Const.DEFAULT));
- }
- }
- for (int i = 1; i < 3; i++) {
- for (int j = 0; j < 2; j++) {
- COGSlider.attachChild(new Truss(mat,new Vector3f(j*(60+18+18),0,21+i*18), Const.LEFT));
- }
- }
- COGSlider.attachChild(new Build(mat,Vector3f.UNIT_X.mult(-60), Const.DEFAULT));
- COGSlider.attachChild(new Build(mat,Vector3f.UNIT_X.mult(60+18+18+60), Const.BACK));
- COGSlider.attachChild(new Gas(mat,new Vector3f(60+18+18,0,18+60+18+60+10), Const.RIGHT));
- COGSlider.attachChild(new Terminal(mat,new Vector3f(0,0,18+60+18+60+10), Const.LEFT));
- }
- private void addSections3(Material mat){
- COGSlider.attachChild(new Build(mat,Vector3f.UNIT_X.mult(60+10), Const.BACK));
- COGSlider.attachChild(new Terminal(mat,Vector3f.ZERO, Const.DEFAULT));
- COGSlider.attachChild(new Gas(mat,Vector3f.UNIT_X.mult(-60-20), Const.DEFAULT));
- COGSlider.attachChild(new Build(mat,Vector3f.UNIT_X.mult(-20-60-60-10), Const.DEFAULT));
- }
- private void addSections4(Material mat){
- COGSlider.attachChild(new Core(mat,Vector3f.ZERO, Const.DEFAULT));
- COGSlider.attachChild(new Build(mat,Vector3f.UNIT_X.mult(-60), Const.DEFAULT));
- COGSlider.attachChild(new Build(mat,Vector3f.UNIT_X.mult(60), Const.BACK));
- COGSlider.attachChild(new Build(mat,Vector3f.UNIT_Z.mult(60), Const.LEFT));
- COGSlider.attachChild(new Terminal(mat,Vector3f.UNIT_Z.mult(-60-10), Const.LEFT));
- COGSlider.attachChild(new Gas(mat,Vector3f.UNIT_Z.mult(-60-10-60-10-10), Const.LEFT));
- }
- private void addSections5(Material mat){
- COGSlider.attachChild(new Core(mat,Vector3f.ZERO, Const.DEFAULT));
- COGSlider.attachChild(new Core(mat,Vector3f.UNIT_Z.mult(60+18), Const.LEFT));
- COGSlider.attachChild(new Core(mat,Vector3f.UNIT_Z.mult(-60-18), Const.RIGHT));
- COGSlider.attachChild(new Truss(mat,Vector3f.UNIT_Z.mult(21+18), Const.LEFT));
- COGSlider.attachChild(new Truss(mat,Vector3f.UNIT_Z.mult(-21-18), Const.LEFT));
- COGSlider.attachChild(new Build(mat,new Vector3f(-60-18,0,60+18), Const.DEFAULT));
- COGSlider.attachChild(new Gas(mat,new Vector3f(-60-10,0,-60-18), Const.DEFAULT));
- COGSlider.attachChild(new Terminal(mat,new Vector3f(-60-10,0,0), Const.DEFAULT));
- COGSlider.attachChild(new Truss(mat,new Vector3f(-21-18,0,60+18), Const.DEFAULT));
- }
- private void addSections6(Material mat){
- COGSlider.attachChild(new Core(mat,Vector3f.ZERO, Const.DEFAULT));
- COGSlider.attachChild(new Core(mat,new Vector3f(60+18+18+18+18+18,0,0), Const.LEFT));
- COGSlider.attachChild(new Core(mat,new Vector3f(0,0,60+80), Const.RIGHT));
- COGSlider.attachChild(new Core(mat,new Vector3f(60+18+18+18+18+18,0,60+80), Const.BACK));
- for (int i = 1; i < 6; i++) {
- COGSlider.attachChild(new Truss(mat,new Vector3f(21+i*18,0,0), Const.DEFAULT));
- }
- COGSlider.attachChild(new Terminal(mat,new Vector3f(60+18+18+18+18+18,0,60+10), Const.RIGHT));
- COGSlider.attachChild(new Gas(mat,new Vector3f(0,0,60+10), Const.LEFT));
- COGSlider.attachChild(new Build(mat,new Vector3f(18+18+18+18+18,0,60+80), Const.DEFAULT));
- COGSlider.attachChild(new Build(mat,new Vector3f(60,0,60+80), Const.BACK));
- }
- private void setUpPhysics(){
- ctrl = new OriginControl(500);
- addControl(ctrl);
- ctrl.setPhysicsLocation(getLocalTranslation());
- ctrl.setCollisionShape(CollisionShapeFactory.createMeshShape(this));
- ctrl.setAngularDamping(0.5f);
- ctrl.setLinearDamping(0.3f);
- ctrl.setMass(mass);
- CPU.physics.getPhysicsSpace().add(ctrl);
- ambientlight = new AmbientLight();
- ambientlight.setColor(new ColorRGBA(0.35f,0.35f,0.35f,0));
- addLight(ambientlight);
- hudarrow = new Arrow(name,this, Color.Blue);
- icon = new Picture("point");
- icon.setImage(CPU.game.getAssetManager(),"assets/img/mapicons/station.png", true);
- icon.setWidth(16);
- icon.setHeight(16);
- icon.setPosition(-20, -20);
- CPU.icons.attachChild(icon);
- }
- public void setShape(){
- CPU.physics.getPhysicsSpace().remove(ctrl);
- ctrl.setCollisionShape(CollisionShapeFactory.createMeshShape(this));
- update();
- CPU.physics.getPhysicsSpace().add(ctrl);
- }
- @Override
- public void disable() {
- setCullHint(CullHint.Always);
- setShadowMode(ShadowMode.Off);
- removeLight(ambientlight);
- ambientlight = null;
- if(COGSlider != null){
- for (Spatial s : COGSlider.getChildren()) {
- if(s instanceof StatMod)
- ((StatMod) s).remove();
- }
- }
- detachAllChildren();
- if(ctrl != null){
- CPU.physics.getPhysicsSpace().remove(ctrl);
- CPU.icons.detachChild(icon);
- CPU.hud.arrows.detachChild(hudarrow);
- hudarrow = null;
- icon = null;
- ctrl = null;
- COGSlider = null;
- }
- }
- @Override
- public float getSize() {
- return 500;
- }
- public void update(){
- mass = 0;
- BoundingBox b = (BoundingBox) getWorldBound();
- size3f = b.getExtent(new Vector3f());
- cog = new Vector3f();
- float dividablemass = 0;
- for (Spatial s : COGSlider.getChildren())
- {
- StatMod mod = ((StatMod)s);
- mass += mod.getMass();
- cog = cog.add(mod.getLocalTranslation().mult(mod.getMass()));
- dividablemass+=mod.getMass();
- }
- cog = cog.divide(dividablemass).negate();
- if(!Vector3f.isValidVector(cog))
- cog = Vector3f.ZERO.clone();
- COGSlider.setLocalTranslation(cog);
- }
- @Override
- public void cycle(float tpf) {
- float dist = getWorldTranslation().length();
- if(dist < 10000){
- for (Spatial s : COGSlider.getChildren()) {
- if(s instanceof Worker)
- ((Worker) s).cycle(tpf);
- }
- }
- if(dist < 800){
- for (Spatial s : COGSlider.getChildren()) {
- if(s instanceof DisplaysIcon)
- ((DisplaysIcon) s).showIcon();;
- }
- }
- else if(dist > 800 && dist < 8000){
- for (Spatial s : COGSlider.getChildren()) {
- if(s instanceof DisplaysIcon)
- ((DisplaysIcon) s).hideIcon();;
- }
- }
- if(getWorldTranslation().length() < 1000 && !msg.intruduced){
- msg.sendIntro();
- msg.intruduced = true;
- }
- if(getWorldTranslation().length() > 20000)
- setCullHint(CullHint.Always);
- else
- setCullHint(CullHint.Inherit);
- }
- public void moveIcon(){
- //if(CPU.game.getCamera().getLocation().distance(getWorldTranslation()) < CPU.dlsr.getShadowZExtend() && ambientlight.getColor().toVector4f().length() < 1f)
- //ambientlight.setColor(new ColorRGBA(1.5f,1.5f,1.5f,0));
- //else if (CPU.game.getCamera().getLocation().distance(getWorldTranslation()) > CPU.dlsr.getShadowZExtend() && ambientlight.getColor().toVector4f().length() > 1.5f)
- //ambientlight.setColor(new ColorRGBA(0.7f,0.7f,0.7f,0));
- Vector3f wts = getWorldTranslation();
- Vector3f on = CPU.game.getCamera().getScreenCoordinates(wts);
- Vector3f enm = getWorldTranslation().subtract(CPU.game.getCamera().getLocation()).normalize();
- Vector3f cam = CPU.game.getCamera().getDirection();
- if(on.x > 0 && on.x < GUI.wid && on.y > 0 && on.y < GUI.hei && enm.dot(cam)>=-0.5f){
- icon.setPosition((int)on.x-8, (int)on.y-8);
- if(CPU.hud.arrows.hasChild(hudarrow))
- CPU.hud.arrows.detachChild(hudarrow);
- }else{
- icon.setPosition(-140, 140);
- if(!CPU.hud.arrows.hasChild(hudarrow))
- CPU.hud.arrows.attachChild(hudarrow);
- }
- }
- private String generateName(){
- InputStream inp = Commercials.class.getResourceAsStream("/assets/texts/stationNames.txt");
- String name = "Monkey";
- int n = 0;
- for(Scanner sc = new Scanner(new InputStreamReader(inp)); sc.hasNext();){
- ++n;
- String line = sc.nextLine();
- if(FastMath.nextRandomInt(0, n) == 0)
- name = line;
- }
- int rand = FastMath.nextRandomInt(0,99);
- return name + " Station " + ((rand == 0)?"":Integer.toString(rand));
- }
- public List<Spatial> getModules(){
- return COGSlider.getChildren();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement