Advertisement
Guest User

Spacestation.java

a guest
Jan 4th, 2017
52
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 13.14 KB | None | 0 0
  1. package station;
  2.  
  3. import java.io.InputStream;
  4. import java.io.InputStreamReader;
  5. import java.util.List;
  6. import java.util.Scanner;
  7.  
  8. import com.jme3.bounding.BoundingBox;
  9. import com.jme3.bullet.util.CollisionShapeFactory;
  10. import com.jme3.light.AmbientLight;
  11. import com.jme3.material.Material;
  12. import com.jme3.math.ColorRGBA;
  13. import com.jme3.math.FastMath;
  14. import com.jme3.math.Vector3f;
  15. import com.jme3.renderer.queue.RenderQueue.ShadowMode;
  16. import com.jme3.scene.Node;
  17. import com.jme3.scene.Spatial;
  18. import com.jme3.ui.Picture;
  19.  
  20. import celestial.support.SpaceObject;
  21. import mainpkg.CPU;
  22. import mainpkg.screen.hud.Arrow;
  23. import mainpkg.screen.hud.Arrow.Color;
  24. import module.templates.Mod;
  25. import screengui.GUI;
  26. import setup.MakeWorld;
  27. import station.misc.Commercials;
  28. import station.misc.MessageSending;
  29. import station.misc.StatMod;
  30. import station.misc.Worker;
  31. import station.misc.panels.DisplaysIcon;
  32. import util.Const;
  33. import util.control.OriginControl;
  34.  
  35. public class SpaceStation extends Node implements SpaceObject{
  36.    
  37.     public enum Corp{
  38.         Oyster, Valdez
  39.     }
  40.    
  41.     public MessageSending msg;
  42.    
  43.     public Corp skin;
  44.     public String name;
  45.     public long seed;
  46.     public OriginControl ctrl;
  47.     public Vector3f size3f;
  48.    
  49.     private Vector3f cog;
  50.     private Picture icon;
  51.     private Arrow hudarrow;
  52.     private Node COGSlider;
  53.    
  54.     private float mass = 500;
  55.     private int type = 0;
  56.    
  57.     public boolean recalculate = false;
  58.    
  59.     private AmbientLight ambientlight;
  60.    
  61.     static Material oyster, valdez;
  62.    
  63.     public static void load(){
  64.         oyster = new Material(CPU.game.getAssetManager(),MakeWorld.masklighted);
  65.         oyster.setTexture("DiffuseMap",Mod.loadTexture("assets/models_station/texture/OYST/stationtex.png"));
  66.         oyster.setTexture("NormalMap",Mod.loadTexture("assets/models_station/texture/OYST/stationnormal.jpg"));
  67.         oyster.setTexture("GlowMask",Mod.loadTexture("assets/models_station/texture/OYST/stationglow.jpg"));
  68.        
  69.         valdez = new Material(CPU.game.getAssetManager(),MakeWorld.masklighted);
  70.         valdez.setTexture("DiffuseMap",Mod.loadTexture("assets/models_station/texture/VALD/stationtex.png"));
  71.         valdez.setTexture("NormalMap",Mod.loadTexture("assets/models_station/texture/VALD/stationnormal.jpg"));
  72.         valdez.setTexture("GlowMask",Mod.loadTexture("assets/models_station/texture/VALD/stationglow.jpg"));
  73.     }
  74.    
  75.     public SpaceStation(Vector3f loc){
  76.         this(loc,FastMath.rand.nextBoolean()? Corp.Oyster : Corp.Oyster,FastMath.rand.nextLong());
  77.     }
  78.    
  79.     public SpaceStation(Vector3f loc, Corp skin){
  80.         this(loc,skin,FastMath.rand.nextLong());
  81.     }
  82.    
  83.     public SpaceStation(Vector3f loc, Corp skin, long seed){
  84.         super();
  85.         setLocalTranslation(loc);
  86.         this.skin = skin;
  87.         this.seed = seed;
  88.         name = generateName();
  89.         setName(name);
  90.         msg = new MessageSending(this);
  91.         type = FastMath.nextRandomInt(0, 6);
  92.         if(type == 3)
  93.             type = FastMath.nextRandomInt(0, 6);
  94.     }
  95.    
  96.     @Override
  97.     public void enable() {
  98.         setShadowMode(ShadowMode.Inherit);
  99.        
  100.         COGSlider = new Node();
  101.         attachChild(COGSlider);
  102.        
  103.         Material mat = null;
  104.         switch(skin){
  105.             case Valdez:mat = valdez;break;
  106.             default:    mat = oyster;
  107.         }
  108.        
  109.         switch(type){
  110.             case 0: addSections0(mat);
  111.                     break;
  112.             case 1: addSections1(mat);
  113.                     break;
  114.             case 2: addSections2(mat);
  115.                     break;
  116.             case 3: addSections3(mat);
  117.                     break;
  118.             case 4: addSections4(mat);
  119.                     break;
  120.             case 5: addSections5(mat);
  121.                     break;
  122.             case 6: addSections6(mat);
  123.                     break; 
  124.         }
  125.        
  126.         getLocalRotation().fromAngleAxis(-FastMath.nextRandomInt(0, 360)*FastMath.DEG_TO_RAD, Vector3f.UNIT_Y);
  127.         update();
  128.         setUpPhysics();
  129.     }
  130.    
  131.     private void addSections0(Material mat){
  132.         COGSlider.attachChild(new Core(mat,Vector3f.ZERO, Const.DEFAULT));
  133.         COGSlider.attachChild(new Gas(mat,Vector3f.UNIT_Z.mult(60+18+10), Const.LEFT));
  134.         COGSlider.attachChild(new Truss(mat,Vector3f.UNIT_Z.mult(-21-18), Const.RIGHT));
  135.         COGSlider.attachChild(new Truss(mat,Vector3f.UNIT_Z.mult(21+18), Const.LEFT));
  136.         COGSlider.attachChild(new Terminal(mat,Vector3f.UNIT_Z.mult(-60-18-10), Const.LEFT));
  137.         COGSlider.attachChild(new Core(mat,Vector3f.UNIT_Z.mult(-60-18-80), Const.DEFAULT));
  138.         for (int i = 1; i < 3; i++) {
  139.             COGSlider.attachChild(new Truss(mat,Vector3f.UNIT_X.mult(-21-i*18), Const.DEFAULT));
  140.         }
  141.         COGSlider.attachChild(new Build(mat,Vector3f.UNIT_X.mult(-96), Const.DEFAULT));
  142.         COGSlider.attachChild(new Build(mat,Vector3f.UNIT_X.mult(60), Const.BACK));
  143.     }
  144.    
  145.     private void addSections1(Material mat){
  146.         COGSlider.attachChild(new Core(mat,Vector3f.ZERO, Const.DEFAULT));
  147.         COGSlider.attachChild(new Terminal(mat,Vector3f.UNIT_Z.mult(-60-10), Const.LEFT));
  148.         COGSlider.attachChild(new Gas(mat,Vector3f.UNIT_Z.mult(60+10), Const.RIGHT));
  149.         COGSlider.attachChild(new Build(mat,Vector3f.UNIT_X.mult(60), Const.BACK));
  150.         COGSlider.attachChild(new Build(mat,Vector3f.UNIT_X.mult(-60), Const.DEFAULT));
  151.     }
  152.    
  153.     private void addSections2(Material mat){
  154.         COGSlider.attachChild(new Core(mat,Vector3f.ZERO, Const.DEFAULT));
  155.         COGSlider.attachChild(new Core(mat,new Vector3f(60+18+18,0,0), Const.LEFT));
  156.         COGSlider.attachChild(new Core(mat,new Vector3f(0,0,18+18+60), Const.RIGHT));
  157.         COGSlider.attachChild(new Core(mat,new Vector3f(60+18+18,0,18+60+18), Const.BACK));
  158.         for (int i = 1; i < 3; i++) {
  159.             for (int j = 0; j < 2; j++) {
  160.                 COGSlider.attachChild(new Truss(mat,new Vector3f(21+i*18,0,j*(60+18+18)), Const.DEFAULT));
  161.             }
  162.         }
  163.         for (int i = 1; i < 3; i++) {
  164.             for (int j = 0; j < 2; j++) {
  165.                 COGSlider.attachChild(new Truss(mat,new Vector3f(j*(60+18+18),0,21+i*18), Const.LEFT));
  166.             }
  167.         }
  168.         COGSlider.attachChild(new Build(mat,Vector3f.UNIT_X.mult(-60), Const.DEFAULT));
  169.         COGSlider.attachChild(new Build(mat,Vector3f.UNIT_X.mult(60+18+18+60), Const.BACK));
  170.         COGSlider.attachChild(new Gas(mat,new Vector3f(60+18+18,0,18+60+18+60+10), Const.RIGHT));
  171.         COGSlider.attachChild(new Terminal(mat,new Vector3f(0,0,18+60+18+60+10), Const.LEFT));
  172.     }
  173.    
  174.     private void addSections3(Material mat){
  175.         COGSlider.attachChild(new Build(mat,Vector3f.UNIT_X.mult(60+10), Const.BACK));
  176.         COGSlider.attachChild(new Terminal(mat,Vector3f.ZERO, Const.DEFAULT));
  177.         COGSlider.attachChild(new Gas(mat,Vector3f.UNIT_X.mult(-60-20), Const.DEFAULT));
  178.         COGSlider.attachChild(new Build(mat,Vector3f.UNIT_X.mult(-20-60-60-10), Const.DEFAULT));
  179.     }
  180.    
  181.     private void addSections4(Material mat){
  182.         COGSlider.attachChild(new Core(mat,Vector3f.ZERO, Const.DEFAULT));
  183.         COGSlider.attachChild(new Build(mat,Vector3f.UNIT_X.mult(-60), Const.DEFAULT));
  184.         COGSlider.attachChild(new Build(mat,Vector3f.UNIT_X.mult(60), Const.BACK));
  185.         COGSlider.attachChild(new Build(mat,Vector3f.UNIT_Z.mult(60), Const.LEFT));
  186.         COGSlider.attachChild(new Terminal(mat,Vector3f.UNIT_Z.mult(-60-10), Const.LEFT));
  187.         COGSlider.attachChild(new Gas(mat,Vector3f.UNIT_Z.mult(-60-10-60-10-10), Const.LEFT));
  188.     }
  189.    
  190.     private void addSections5(Material mat){
  191.         COGSlider.attachChild(new Core(mat,Vector3f.ZERO, Const.DEFAULT));
  192.         COGSlider.attachChild(new Core(mat,Vector3f.UNIT_Z.mult(60+18), Const.LEFT));
  193.         COGSlider.attachChild(new Core(mat,Vector3f.UNIT_Z.mult(-60-18), Const.RIGHT));
  194.        
  195.         COGSlider.attachChild(new Truss(mat,Vector3f.UNIT_Z.mult(21+18), Const.LEFT));
  196.         COGSlider.attachChild(new Truss(mat,Vector3f.UNIT_Z.mult(-21-18), Const.LEFT));
  197.        
  198.         COGSlider.attachChild(new Build(mat,new Vector3f(-60-18,0,60+18), Const.DEFAULT));
  199.         COGSlider.attachChild(new Gas(mat,new Vector3f(-60-10,0,-60-18), Const.DEFAULT));
  200.         COGSlider.attachChild(new Terminal(mat,new Vector3f(-60-10,0,0), Const.DEFAULT));
  201.        
  202.         COGSlider.attachChild(new Truss(mat,new Vector3f(-21-18,0,60+18), Const.DEFAULT));
  203.     }
  204.    
  205.     private void addSections6(Material mat){
  206.         COGSlider.attachChild(new Core(mat,Vector3f.ZERO, Const.DEFAULT));
  207.         COGSlider.attachChild(new Core(mat,new Vector3f(60+18+18+18+18+18,0,0), Const.LEFT));
  208.         COGSlider.attachChild(new Core(mat,new Vector3f(0,0,60+80), Const.RIGHT));
  209.         COGSlider.attachChild(new Core(mat,new Vector3f(60+18+18+18+18+18,0,60+80), Const.BACK));
  210.         for (int i = 1; i < 6; i++) {
  211.             COGSlider.attachChild(new Truss(mat,new Vector3f(21+i*18,0,0), Const.DEFAULT));
  212.         }
  213.         COGSlider.attachChild(new Terminal(mat,new Vector3f(60+18+18+18+18+18,0,60+10), Const.RIGHT));
  214.         COGSlider.attachChild(new Gas(mat,new Vector3f(0,0,60+10), Const.LEFT));
  215.        
  216.         COGSlider.attachChild(new Build(mat,new Vector3f(18+18+18+18+18,0,60+80), Const.DEFAULT));
  217.         COGSlider.attachChild(new Build(mat,new Vector3f(60,0,60+80), Const.BACK));
  218.     }
  219.    
  220.     private void setUpPhysics(){
  221.         ctrl = new OriginControl(500);
  222.         addControl(ctrl);
  223.        
  224.         ctrl.setPhysicsLocation(getLocalTranslation());
  225.         ctrl.setCollisionShape(CollisionShapeFactory.createMeshShape(this));
  226.         ctrl.setAngularDamping(0.5f);
  227.         ctrl.setLinearDamping(0.3f);
  228.         ctrl.setMass(mass);
  229.         CPU.physics.getPhysicsSpace().add(ctrl);
  230.        
  231.         ambientlight = new AmbientLight();
  232.         ambientlight.setColor(new ColorRGBA(0.35f,0.35f,0.35f,0));
  233.         addLight(ambientlight);
  234.        
  235.         hudarrow = new Arrow(name,this, Color.Blue);
  236.        
  237.         icon = new Picture("point");
  238.         icon.setImage(CPU.game.getAssetManager(),"assets/img/mapicons/station.png", true);
  239.         icon.setWidth(16);
  240.         icon.setHeight(16);
  241.         icon.setPosition(-20, -20);
  242.         CPU.icons.attachChild(icon);
  243.     }
  244.    
  245.     public void setShape(){
  246.         CPU.physics.getPhysicsSpace().remove(ctrl);
  247.         ctrl.setCollisionShape(CollisionShapeFactory.createMeshShape(this));
  248.         update();
  249.         CPU.physics.getPhysicsSpace().add(ctrl);
  250.     }
  251.  
  252.     @Override
  253.     public void disable() {
  254.         setCullHint(CullHint.Always);
  255.         setShadowMode(ShadowMode.Off);
  256.        
  257.         removeLight(ambientlight);
  258.         ambientlight = null;
  259.        
  260.         if(COGSlider != null){
  261.             for (Spatial s : COGSlider.getChildren()) {
  262.                 if(s instanceof StatMod)
  263.                     ((StatMod) s).remove();
  264.             }
  265.         }
  266.         detachAllChildren();
  267.         if(ctrl != null){
  268.             CPU.physics.getPhysicsSpace().remove(ctrl);
  269.             CPU.icons.detachChild(icon);
  270.             CPU.hud.arrows.detachChild(hudarrow);
  271.             hudarrow = null;
  272.             icon = null;
  273.             ctrl = null;
  274.             COGSlider = null;
  275.         }
  276.     }
  277.  
  278.     @Override
  279.     public float getSize() {
  280.         return 500;
  281.     }
  282.    
  283.     public void update(){
  284.         mass = 0;
  285.        
  286.         BoundingBox b = (BoundingBox) getWorldBound();
  287.         size3f = b.getExtent(new Vector3f());
  288.        
  289.         cog = new Vector3f();
  290.         float dividablemass = 0;       
  291.         for (Spatial s : COGSlider.getChildren())
  292.         {
  293.             StatMod mod = ((StatMod)s);
  294.            
  295.             mass += mod.getMass();
  296.            
  297.            
  298.             cog = cog.add(mod.getLocalTranslation().mult(mod.getMass()));
  299.             dividablemass+=mod.getMass();
  300.         }
  301.        
  302.         cog = cog.divide(dividablemass).negate();
  303.         if(!Vector3f.isValidVector(cog))
  304.             cog = Vector3f.ZERO.clone();
  305.        
  306.         COGSlider.setLocalTranslation(cog);
  307.     }
  308.  
  309.     @Override
  310.     public void cycle(float tpf) {
  311.         float dist = getWorldTranslation().length();
  312.        
  313.         if(dist < 10000){
  314.             for (Spatial s : COGSlider.getChildren()) {
  315.                 if(s instanceof Worker)
  316.                     ((Worker) s).cycle(tpf);
  317.             }
  318.         }
  319.        
  320.         if(dist < 800){
  321.             for (Spatial s : COGSlider.getChildren()) {
  322.                 if(s instanceof DisplaysIcon)
  323.                     ((DisplaysIcon) s).showIcon();;
  324.             }
  325.         }
  326.         else if(dist > 800 && dist < 8000){
  327.             for (Spatial s : COGSlider.getChildren()) {
  328.                 if(s instanceof DisplaysIcon)
  329.                     ((DisplaysIcon) s).hideIcon();;
  330.             }
  331.         }
  332.        
  333.         if(getWorldTranslation().length() < 1000 && !msg.intruduced){
  334.             msg.sendIntro();
  335.             msg.intruduced = true;
  336.         }
  337.        
  338.         if(getWorldTranslation().length() > 20000)
  339.             setCullHint(CullHint.Always);
  340.         else
  341.             setCullHint(CullHint.Inherit);
  342.     }
  343.    
  344.     public void moveIcon(){    
  345.         //if(CPU.game.getCamera().getLocation().distance(getWorldTranslation()) < CPU.dlsr.getShadowZExtend() && ambientlight.getColor().toVector4f().length() < 1f)
  346.             //ambientlight.setColor(new ColorRGBA(1.5f,1.5f,1.5f,0));
  347.         //else if (CPU.game.getCamera().getLocation().distance(getWorldTranslation()) > CPU.dlsr.getShadowZExtend() && ambientlight.getColor().toVector4f().length() > 1.5f)
  348.             //ambientlight.setColor(new ColorRGBA(0.7f,0.7f,0.7f,0));
  349.        
  350.         Vector3f wts = getWorldTranslation();
  351.         Vector3f on = CPU.game.getCamera().getScreenCoordinates(wts);
  352.         Vector3f enm = getWorldTranslation().subtract(CPU.game.getCamera().getLocation()).normalize();
  353.         Vector3f cam = CPU.game.getCamera().getDirection();    
  354.         if(on.x > 0 && on.x < GUI.wid && on.y > 0 && on.y < GUI.hei && enm.dot(cam)>=-0.5f){
  355.             icon.setPosition((int)on.x-8, (int)on.y-8);
  356.             if(CPU.hud.arrows.hasChild(hudarrow))
  357.                 CPU.hud.arrows.detachChild(hudarrow);
  358.         }else{
  359.             icon.setPosition(-140, 140);
  360.             if(!CPU.hud.arrows.hasChild(hudarrow))
  361.                 CPU.hud.arrows.attachChild(hudarrow);
  362.         }
  363.     }
  364.    
  365.     private String generateName(){     
  366.         InputStream inp = Commercials.class.getResourceAsStream("/assets/texts/stationNames.txt");
  367.         String name = "Monkey";
  368.         int n = 0;
  369.         for(Scanner sc = new Scanner(new InputStreamReader(inp)); sc.hasNext();){
  370.             ++n;
  371.             String line = sc.nextLine();
  372.             if(FastMath.nextRandomInt(0, n) == 0)
  373.                 name = line;        
  374.         }
  375.        
  376.         int rand = FastMath.nextRandomInt(0,99);
  377.         return name + " Station " + ((rand == 0)?"":Integer.toString(rand));
  378.        
  379.     }
  380.    
  381.     public List<Spatial> getModules(){
  382.         return COGSlider.getChildren();
  383.     }
  384. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement