// Start is called before the first frame update
    void Start()
    {
        buildings = new GameObject[size * size];

        transform.LookAt(originController.GetOrigin());
        transform.position = Quaternion.LookRotation(transform.forward) * new Vector3(0, 0, -10);
        transform.Rotate(new Vector3(-90, 0, 0), Space.Self);
        for (int i = 0; i < size * size; i++)
        {
            buildings[i] = GameObject.Instantiate(buildingPrefabs[Random.Range(0, buildingPrefabs.Length)], transform.position, transform.rotation);
            buildings[i].transform.localScale = new Vector3(Random.Range(10, 20), Random.Range(5, 10), Random.Range(10, 20));
        }
    }
Example #2
0
    // Update is called once per frame
    void Update()
    {
        if (first)
        {
            target   = GameObject.FindGameObjectWithTag("Player");
            targetRB = target.GetComponent <Rigidbody>();
            first    = false;
        }

        origin = originController.GetOrigin();
        if (prevOrigin != origin)
        {
            transform.position += (origin - prevOrigin);
            prevOrigin          = origin;
        }
    }
Example #3
0
        public async Task GetOriginValidIdReturnsOk200WithObject()
        {
            var origin = await _controller.GetOrigin(1) as OkNegotiatedContentResult <Origin>;

            Assert.IsInstanceOf <OkNegotiatedContentResult <Origin> >(origin);
        }
    void FixedUpdate()
    {
        Vector3 vel     = rb.velocity;
        Vector3 velNorm = rb.velocity.normalized;

        float aoa        = Vector3.Angle(rb.velocity.normalized, transform.rotation * Vector3.forward);
        float aoaDot     = Vector3.Dot(velNorm, transform.rotation * Vector3.back); //angle of attack where 1 is parallel and 0 is perpendicular.
        float dynamPress = (density * vel.sqrMagnitude) / 2;

        float   dragCoef = dragCoefBase + -Mathf.Cos(2 * Mathf.Deg2Rad * aoa) + 1;
        float   drag     = dragCoef * dynamPress * area;
        Vector3 dragDir  = -velNorm;

        float liftCoef = 0.1f * aoa;

        if (liftCoef > 2)
        {
            liftCoef = 2;
        }
        float   lift    = liftCoef * dynamPress * area;
        Vector3 liftDir = Vector3.ProjectOnPlane(transform.rotation * Vector3.forward, velNorm);

        float   momentCoef = 0.00004f * Mathf.Pow(aoa, 2);
        float   moment     = momentCoef * dynamPress * area * chord;
        Vector3 momentDir  = Vector3.Cross(transform.forward, velNorm);

        rb.AddForce(drag * dragDir);
        rb.AddForce(lift * liftDir);
        rb.AddForce(transform.rotation * Vector3.forward * thrust);
        rb.AddForce(mass * 9.8f * Vector3.forward);
        rb.AddTorque(moment * momentDir - 20000 * rb.angularVelocity.normalized * rb.angularVelocity.sqrMagnitude); // Combination of natural aerodynamic stabilization and computer-aided-flight stabilization.


        if (photonView.IsMine)
        {
            float speed = 1f;
            if (Input.GetKey(KeyCode.LeftShift))
            {
                speed = 10;
            }
            if (Input.GetKey(KeyCode.LeftControl))
            {
                speed = 100;
            }

            if (Input.GetKey(KeyCode.W))
            {
                player.transform.Translate(Vector3.forward * speed);
            }
            if (Input.GetKey(KeyCode.S))
            {
                player.transform.Translate(Vector3.back * speed);
            }
            if (Input.GetKey(KeyCode.A))
            {
                player.transform.Translate(Vector3.left * speed);
            }
            if (Input.GetKey(KeyCode.D))
            {
                player.transform.Translate(Vector3.right * speed);
            }
            if (Input.GetKey(KeyCode.Space))
            {
                player.transform.Translate(Vector3.up * speed);
                //rb.AddForce(Vector3.up * speed);
            }
            if (Input.GetKey(KeyCode.C))
            {
                player.transform.Translate(Vector3.down * speed);
            }

            if (Input.GetKey(KeyCode.Q))
            {
                player.transform.Rotate(Vector3.forward);
            }
            if (Input.GetKey(KeyCode.E))
            {
                player.transform.Rotate(Vector3.back);
            }
            if (Input.GetKey(KeyCode.UpArrow))
            {
                //player.transform.Rotate(Vector3.right);
                rb.AddTorque(transform.right * 0.01f * dynamPress * area * chord);
            }
            if (Input.GetKey(KeyCode.DownArrow))
            {
                //player.transform.Rotate(Vector3.left);
                rb.AddTorque(-transform.right * 0.01f * dynamPress * area * chord);
            }
            if (Input.GetKey(KeyCode.LeftArrow))
            {
                player.transform.Rotate(Vector3.down);
            }
            if (Input.GetKey(KeyCode.RightArrow))
            {
                player.transform.Rotate(Vector3.up);
            }
            if (shareCounter > 4)
            {
                shareCounter = 0;
            }
            if (shareCounter == 0)
            {
                photonView.RPC("SharePosition", RpcTarget.All, transform.position - originController.GetOrigin(), transform.rotation);
            }
        }
        else // photonView is not mine, this is not the local player.
        {
            print("origin: " + originController.GetOrigin());
            transform.position = originController.GetOrigin() + sharedPos;
            transform.rotation = sharedRot;
        }
    }