Пример #1
0
    // Update is called once per frame
    void Update()
    {
        RaycastHit?hitInfo;

        if (inWorm)
        {
            transform.localRotation = localRotationOnWormHit;
            hitInfo = PlanetObj.GetEpicenter(transform.position);
            if (hitInfo.HasValue)
            {
                if ((transform.position - PlanetObj.position).magnitude <
                    (hitInfo.Value.point - PlanetObj.position).magnitude - transform.lossyScale.x * 20)
                {
                    var v = -Time.deltaTime / 100f;
                    if (transform.localScale.z + v <= 0.01f)
                    {
                        Destroy(this.gameObject);
                    }
                    else
                    {
                        transform.localScale += new Vector3(0, 0, v);
                    }
                }
            }
        }
        else
        {
            var diff = transform.position - PlanetObj.position;
            GetComponent <Rigidbody>().velocity += diff.normalized * -gravityValue;
            if (inGround)
            {
                dieTimer -= Time.deltaTime;
                if (dieTimer <= 0)
                {
                    Destroy(this.gameObject);
                }
                else
                {
                    var mrm = transform.FindChild("default").GetComponent <MeshRenderer>().material;
                    mrm.color = new Color(mrm.color.r, mrm.color.g, mrm.color.b, Mathf.Min(dieTimer * 3 / dieTimerMax, 1));
                }
            }
            else
            {
                transform.LookAt(transform.position + GetComponent <Rigidbody>().velocity);
            }

            hitInfo = PlanetObj.GetEpicenter(transform.position);
            if (hitInfo.HasValue)
            {
                var epicenter = hitInfo.Value.point;

                if (diff.magnitude < (epicenter - PlanetObj.position).magnitude)
                {
                    GetComponent <Rigidbody>().velocity = Vector3.zero;
                    inGround = true;
                }
            }
        }
    }
Пример #2
0
    void UpdateSpeed()
    {
        if (ragdoll)
        {
            ySpeed -= gravityValue;
            if (or.underground)
            {
                ySpeed = Mathf.Abs(ySpeed) * 0.25f;
                if (ySpeed < 1)
                {
                    rb_e.transform.SetParent(transform);
                    Destroy(this.gameObject); //Destroy self if we are underground after being hit
                }
            }
            var epicenter_e = PlanetObj.GetEpicenter(rb_e.transform.position);
            if (epicenter_e.HasValue && (rb_e.transform.position - PlanetObj.position).sqrMagnitude <= (epicenter_e.Value.point - PlanetObj.position).sqrMagnitude)
            {
                var proj     = Vector3.Project(rb_e.velocity, or.up);
                var dot      = Vector3.Dot(proj, or.up); //This will be positive if the projection is in the same general direction as the up vector
                var ySpeed_e = proj.magnitude;
                if (dot > 0)
                {
                }
                else
                {
                    rb_e.velocity -= 1.25f * ySpeed_e * or.up; //Invert ySpeed of e
                    if (ySpeed_e < 1)
                    {
                        rb_e.transform.SetParent(transform);
                        Destroy(this.gameObject);
                    }
                }
            }
            rb.velocity   += ySpeed * or.up;
            rb_e.velocity += -gravityValue * or.up;
        }
        else
        {
            groundSpeed = groundSpeedNormal;
            var t = transform.position;
            var s = target ? target.transform.position : PlanetObj.player.transform.position;
            var d = (s - t - Vector3.Project(s - t, t - PlanetObj.position)).normalized;


            if (or.depth > -0.3f * transform.lossyScale.y)
            {
                ySpeed = hopSpeedY;
            }
            else
            {
                ySpeed -= gravityValue;
            }
            rb.velocity = ySpeed * or.up + new Vector3(groundSpeed * d.x, groundSpeed * d.y, groundSpeed * d.z);
        }

        //Debug.DrawRay(epicenter.Value, rb.velocity, Color.black);
    }
Пример #3
0
        public IActionResult Index(int id)
        {
            PlanetObj planet = _getPlanetRepository.GetPlanet(id);
            PlanetDetailsViewModel Planet = new PlanetDetailsViewModel
            {
                Planet = planet
            };

            return(View(Planet));
        }
Пример #4
0
 public void SetExplicitDateTime(DateTime explicitTime)
 {
     Debug.Log("Setting Explicit DateTime in OrreryManager");
     foreach (GameObject PlanetObj in Planets)
     {
         OrbitingBodyBackgroundGameObject OBBGO
             = PlanetObj.GetComponent <OrbitingBodyBackgroundGameObject>();
         MyContract.RequireFieldNotNull(
             OBBGO, "OrbitingBodyBackgroundGameObject"
             );
         OBBGO.UseExplicitDateTime(explicitTime);
     }
 }
Пример #5
0
        public PlanetObj GetPlanet(int id)
        {
            PlanetObj planet = new PlanetObj();

            try
            {
                planet = _dBcontext.PlanetObjs.Where(i => i.PlanetObjId == id).FirstOrDefault();
            }
            catch (Exception ex)
            {
                throw ex;
            }
            return(planet);
        }
Пример #6
0
 // Use this for initialization
 void Start()
 {
     transform.localScale *= (Random.value * 0.5f + 0.75f);
     distanceDown         *= transform.localScale.x;
     leaves            = new List <Transform>();
     leavesOffsetStart = new List <Vector3>();
     leavesOffset      = new List <Vector3>();
     foreach (Transform t in transform)
     {
         if (t.name.Contains("Leaves"))
         {
             leaves.Add(t);
             leavesOffsetStart.Add(t.localPosition);
             leavesOffset.Add(Vector3.zero);
         }
     }
     epicenter          = PlanetObj.GetEpicenter(transform.position).Value;
     transform.position = epicenter.point;
 }
Пример #7
0
    public void Update()
    {
        var rb   = o.GetComponent <Rigidbody>();
        var diff = o.transform.position - PlanetObj.position;

        dCenter = diff.magnitude;
        up      = diff.normalized;
        facing  = rb.velocity.sqrMagnitude == 0 ? Vector3.forward : rb.velocity.normalized;
        forward = (facing - Vector3.Project(facing, up)).normalized;
        right   = Vector3.Cross(up, facing);
        quatUp  = Quaternion.LookRotation(forward, normalIsUp ? normal.Value : up);

        RaycastHit?hitInfo = PlanetObj.GetEpicenter(o.transform.position);

        if (hitInfo != null)
        {
            epicenter  = hitInfo.Value.point;
            normal     = hitInfo.Value.normal;
            dEpicenter = (epicenter.Value - PlanetObj.position).magnitude;
        }
    }
Пример #8
0
    private Point calculateAccel(int indexOfStar)
    {
        Point     acceleration = new Point(0, 0, 0);
        PlanetObj starTarget   = planets[indexOfStar];
        int       count        = 0;

        foreach (PlanetObj star in planets)
        {
            if (indexOfStar != count)
            {
                float r = (float)(Math.Pow((starTarget.x - star.x), 2) +
                                  Math.Pow((starTarget.y - star.y), 2) +
                                  Math.Pow((starTarget.z - star.z), 2));
                r = (float)Math.Sqrt(r);

                float temp = G_CONST * star.mass / (float)Math.Pow(r, 3);
                acceleration.x += temp * (star.x - starTarget.x);
                acceleration.y += temp * (star.y - starTarget.y);
                acceleration.z += temp * (star.z - starTarget.z);
            }
            count += 1;
        }
        return(acceleration);
    }
Пример #9
0
    /*
     *
     *  sun = {"location":point(0,0,0), "mass":2e30, "velocity":point(0,0,0)}
     *  mercury = {"location":point(0,5.7e10,0), "mass":3.285e23, "velocity":point(47000,0,0)}
     *  venus = {"location":point(0,1.1e11,0), "mass":4.8e24, "velocity":point(35000,0,0)}
     *  earth = {"location":point(0,1.5e11,0), "mass":6e24, "velocity":point(30000,0,0)}
     *  mars = {"location":point(0,2.2e11,0), "mass":2.4e24, "velocity":point(24000,0,0)}
     *  jupiter = {"location":point(0,7.7e11,0), "mass":1e28, "velocity":point(13000,0,0)}
     *  saturn = {"location":point(0,1.4e12,0), "mass":5.7e26, "velocity":point(9000,0,0)}
     *  uranus = {"location":point(0,2.8e12,0), "mass":8.7e25, "velocity":point(6835,0,0)}
     *  neptune = {"location":point(0,4.5e12,0), "mass":1e26, "velocity":point(5477,0,0)}
     *  pluto = {"location":point(0,3.7e12,0), "mass":1.3e22, "velocity":point(4748,0,0)}
     *
     */
    // Use this for initialization
    void Start()
    {
        G_CONST = G_CONST * scaleFactor;
        int[]     planetDiams = new int[] { 1391016, 4879, 12104, 12756, 6792, 142984, 120536, 51118, 49528, 2370 };
        PlanetObj sun         = new PlanetObj(0, 0, 0);

        sun.velocity = new Point(0, 0, 0);
        sun.mass     = 2e30f * scaleFactor1;
        sun.color    = Color.yellow;
        planets.Add(sun);

        PlanetObj mercury = new PlanetObj(0, 5.7e10f * scaleFactor, 0);

        mercury.velocity = new Point(47000 * scaleFactor1, 0, 0);
        mercury.mass     = 3.285e23f * scaleFactor1;
        mercury.color    = Color.grey;
        planets.Add(mercury);

        PlanetObj venus = new PlanetObj(0, 1.1e11f * scaleFactor, 0);

        venus.velocity = new Point(35000 * scaleFactor1, 0, 0);
        venus.mass     = 4.8e24f * scaleFactor1;
        venus.color    = Color.red;
        planets.Add(venus);

        PlanetObj earth = new PlanetObj(0, 1.5e11f * scaleFactor, 0);

        earth.velocity = new Point(30000 * scaleFactor1, 0, 0);
        earth.mass     = 6e24f * scaleFactor1;
        earth.color    = Color.green;
        planets.Add(earth);

        PlanetObj mars = new PlanetObj(0, 2.2e11f * scaleFactor, 0);

        mars.velocity = new Point(24000 * scaleFactor1, 0, 0);
        Debug.Log(mars.velocity.x);
        mars.mass  = 2.4e24f * scaleFactor1;
        mars.color = Color.red;
        planets.Add(mars);

        PlanetObj jupiter = new PlanetObj(0, 7.7e11f * scaleFactor, 0);

        jupiter.velocity = new Point(13000 * scaleFactor1, 0, 0);
        jupiter.mass     = 1e28f * scaleFactor1;
        jupiter.color    = Color.yellow;
        planets.Add(jupiter);

        PlanetObj saturn = new PlanetObj(0, 1.4e12f * scaleFactor, 0);

        saturn.velocity = new Point(9000 * scaleFactor1, 0, 0);
        saturn.mass     = 5.7e26f * scaleFactor1;
        saturn.color    = Color.red;
        planets.Add(saturn);

        PlanetObj uranus = new PlanetObj(0, 2.8e12f * scaleFactor, 0);

        uranus.velocity = new Point(6835 * scaleFactor1, 0, 0);
        uranus.mass     = 8.7e25f * scaleFactor1;
        uranus.color    = Color.grey;
        planets.Add(uranus);

        PlanetObj neptune = new PlanetObj(0, 4.5e12f * scaleFactor, 0);

        neptune.velocity = new Point(5477 * scaleFactor1, 0, 0);
        neptune.mass     = 1e26f * scaleFactor1;
        neptune.color    = Color.blue;
        planets.Add(neptune);

        PlanetObj pluto = new PlanetObj(0, 3.7e12f * scaleFactor, 0);

        pluto.velocity = new Point(4748 * scaleFactor1, 0, 0);
        pluto.mass     = 1.3e22f * scaleFactor1;
        pluto.color    = Color.red;
        planets.Add(pluto);

        int count = 0;

        foreach (int diam in planetDiams)
        {
            float f;
            if (count == 0)
            {
                f = diam / 2000;
            }
            else
            {
                f = diam / 100;
            }
            PlanetObj planet = planets[count];
            planet.diameter     = f;
            planet.planetSphere = GameObject.CreatePrimitive(
                PrimitiveType.Sphere);
            planet.planetSphere.transform.position = new Vector3(planet.x,
                                                                 planet.y,
                                                                 planet.z);
            planet.planetSphere.transform.localScale = new Vector3(f, f, f);
            planet.planetSphere.GetComponent <Renderer>().material.color = planet.color;
            count += 1;
        }
    }
Пример #10
0
 // Use this for initialization
 void Awake()
 {
     S          = this;
     safeHeight = Mathf.Max(transform.localScale.x, transform.localScale.y, transform.localScale.z) / 2 + 1000000;
 }