Esempio n. 1
0
 private void UpdateMovement()
 {
     if (Attacker != null)
     {
         if (relateToAttacker)
         {
             if (TempTransform.parent == null)
             {
                 Transform damageLaunchTransform;
                 Attacker.GetDamageLaunchTransform(isLeftHandWeapon, out damageLaunchTransform);
                 TempTransform.SetParent(damageLaunchTransform);
             }
             var baseAngles = attacker.TempTransform.eulerAngles;
             TempTransform.rotation = Quaternion.Euler(baseAngles.x + addRotationX, baseAngles.y + addRotationY, baseAngles.z);
             TempRigidbody.velocity = Attacker.TempRigidbody.velocity + GetForwardVelocity();
         }
         else
         {
             TempRigidbody.velocity = GetForwardVelocity();
         }
     }
     else
     {
         TempRigidbody.velocity = GetForwardVelocity();
     }
 }
Esempio n. 2
0
 protected void Awake()
 {
     foreach (var t in GetComponentsInChildren <Transform>())
     {
         t.gameObject.layer = Constants.shipItemLayer;
     }
     _tempTransform = AddMyComponent <TempTransform>();
 }
Esempio n. 3
0
    // Use this for initialization
    public override void Start()
    {
        transform = GetComponent <TempTransform>();

        radius      = behaviour.transform.localScale.x;
        force       = Constants.worldGravity * radius;
        maxDistance = force / .1f;

        ships = new GravityList(this);
    }
Esempio n. 4
0
    void Awake()
    {
        tempTransform = AddMyComponent <TempTransform>();
        rigidBody     = GetComponent <Rigidbody>();
        //rigidBody.isKinematic = true;
        //rigidBody.freezeRotation = true;
        rigidBody.useGravity = false;

        offenders = new List <Offender>();
        // shipDriver turns it true
        enabled = false;
    }
Esempio n. 5
0
    public void SetTransform(Vector3 pos, Quaternion rot)
    {
        isReady = true;

        PreviousTransform = currentTransform;
        currentTransform  = new TempTransform(pos, rot);

        currentLocalTransform = currentTransform;

        time_sinceLastTransformUpdate = Time.time - timePoint_prevTransformUpdate;
        timePoint_prevTransformUpdate = Time.time;
        // No scales at the moment..
    }
Esempio n. 6
0
    public static TempTransform Clone(this Transform transform)
    {
        TempTransform td = new TempTransform();

        td.position      = transform.position;
        td.localPosition = transform.localPosition;

        td.rotation      = transform.rotation;
        td.localRotation = transform.localRotation;

        td.localScale = transform.localScale;

        return(td);
    }
Esempio n. 7
0
    private void InitTransform()
    {
        if (Attacker == null)
        {
            return;
        }

        if (relateToAttacker)
        {
            Transform damageLaunchTransform;
            Attacker.GetDamageLaunchTransform(isLeftHandWeapon, out damageLaunchTransform);
            TempTransform.SetParent(damageLaunchTransform);
            var baseAngles = attacker.TempTransform.eulerAngles;
            TempTransform.rotation = Quaternion.Euler(baseAngles.x + addRotationX, baseAngles.y + addRotationY, baseAngles.z);
        }
    }
Esempio n. 8
0
    TempTransform UpdatePos(Transform dstTarget = null)
    {
        TempTransform newTransform = new TempTransform();
        Vector3       tgt          = GetTarget(dstTarget);

        //DOS Modified tweaked this to be selectable
        if (Input.GetMouseButton((int)mouseButtonToUse) && Input.touchCount == 0)
        {
            x += Input.GetAxis("Mouse X") * xSpeed * 0.04f;
            y -= Input.GetAxis("Mouse Y") * ySpeed * 0.02f;
        }
        else if (Input.touchCount == 1 && EventSystem.current.IsPointerOverGameObject(Input.GetTouch(0).fingerId) == false)
        {
            Touch touchZero = Input.GetTouch(0);
            x += touchZero.deltaPosition.x * (xSpeed / 5) /* * distance */ * 0.04f;
            y -= touchZero.deltaPosition.y * (ySpeed / 5) * 0.02f;
        }

        if (EventSystem.current.currentSelectedGameObject == null || AlwaysOn == true)
        {
            if (Input.touchCount == 2)
            {
                // Store both touches.
                Touch touchZero = Input.GetTouch(0);
                Touch touchOne  = Input.GetTouch(1);

                // Find the position in the previous frame of each touch.
                Vector2 touchZeroPrevPos = touchZero.position - touchZero.deltaPosition;
                Vector2 touchOnePrevPos  = touchOne.position - touchOne.deltaPosition;

                // Find the magnitude of the vector (the distance) between the touches in each frame.
                float prevTouchDeltaMag = (touchZeroPrevPos - touchOnePrevPos).magnitude;
                float touchDeltaMag     = (touchZero.position - touchOne.position).magnitude;

                // Find the difference in the distances between each frame. Flip it so it goes the right way
                float deltaMagnitudeDiff = (prevTouchDeltaMag - touchDeltaMag) * -1;
                distance = Mathf.Clamp(distance - (deltaMagnitudeDiff / 10) * (scrollrate / 10), distanceMin, distanceMax);
            }
            else
            {
                distance = Mathf.Clamp(distance - Input.GetAxis("Mouse ScrollWheel") * scrollrate, distanceMin, distanceMax);
            }
        }


        y = ClampAngle(y, yMinLimit, yMaxLimit);


        Quaternion rotation = Quaternion.Euler(y, x, 0);

        if (Clip)
        {
            RaycastHit hit;
            if (Physics.Linecast(tgt, transform.position, out hit))
            {
                distance -= hit.distance;
            }
        }
        Vector3 negDistance = new Vector3(0.0f, 0.0f, -distance);
        Vector3 position    = rotation * negDistance + tgt;

        newTransform.rotation = rotation;
        newTransform.position = position;
        if (dstTarget == null)
        {
            transform.rotation = rotation;
            transform.position = position;
        }
        return(newTransform);
    }
Esempio n. 9
0
        internal static bool Apply(CameraUpdate update, NiTransform transform, NiPoint3 result)
        {
            init();

            if (update == null || transform == null || result == null)
            {
                return(false);
            }

            if (update.Values.CollisionEnabled.CurrentValue < 0.5)
            {
                return(false);
            }

            var actor = update.Target.Actor;

            if (actor == null)
            {
                return(false);
            }

            var cell = actor.ParentCell;

            if (cell == null)
            {
                return(false);
            }

            float safety = (float)(update.Values.NearClip.CurrentValue + 1.0);

            if (safety < 1.0f)
            {
                safety = 1.0f;
            }

            float safety2 = Math.Max(0.0f, Settings.Instance.CameraCollisionSafety);

            var tpos = transform.Position;

            TempPoint1.CopyFrom(actor.Position);
            TempPoint1.Z = tpos.Z;

            if (safety2 > 0.0f)
            {
                TempSafety.Y = -safety2 * 0.5f;
                TempTransform.CopyFrom(transform);
                TempTransform.Position.CopyFrom(TempPoint1);
                TempTransform.Translate(TempSafety, TempPoint1);
            }

            TempNormal.X = tpos.X - TempPoint1.X;
            TempNormal.Y = tpos.Y - TempPoint1.Y;
            TempNormal.Z = tpos.Z - TempPoint1.Z;

            float len = TempNormal.Length;

            if (len <= 0.0f)
            {
                return(false);
            }

            TempNormal.Normalize(TempNormal);
            TempNormal.Multiply(len + safety + safety2, TempNormal);

            TempPoint2.X = TempPoint1.X + TempNormal.X;
            TempPoint2.Y = TempPoint1.Y + TempNormal.Y;
            TempPoint2.Z = TempPoint1.Z + TempNormal.Z;

            var ls = TESObjectCELL.RayCast(new RayCastParameters()
            {
                Cell  = cell,
                Begin = new float[] { TempPoint1.X, TempPoint1.Y, TempPoint1.Z },
                End   = new float[] { TempPoint2.X, TempPoint2.Y, TempPoint2.Z }
            });

            if (ls == null || ls.Count == 0)
            {
                return(false);
            }

            RayCastResult     best     = null;
            float             bestDist = 0.0f;
            List <NiAVObject> ignore   = new List <NiAVObject>(3);

            {
                var sk = actor.GetSkeletonNode(true);
                if (sk != null)
                {
                    ignore.Add(sk);
                }
            }
            {
                var sk = actor.GetSkeletonNode(false);
                if (sk != null)
                {
                    ignore.Add(sk);
                }
            }
            if (update.CachedMounted)
            {
                var mount = actor.GetMount();
                if (mount != null)
                {
                    var sk = mount.GetSkeletonNode(false);
                    if (sk != null)
                    {
                        ignore.Add(sk);
                    }
                }
            }

            foreach (var r in ls)
            {
                if (!IsValid(r, ignore))
                {
                    continue;
                }

                float dist = r.Fraction;
                if (best == null)
                {
                    best     = r;
                    bestDist = dist;
                }
                else if (dist < bestDist)
                {
                    best     = r;
                    bestDist = dist;
                }
            }

            if (best == null)
            {
                return(false);
            }

            bestDist *= len + safety + safety2;
            bestDist -= safety + safety2;
            bestDist /= len + safety + safety2;

            // Negative is ok!

            result.X = (TempPoint2.X - TempPoint1.X) * bestDist + TempPoint1.X;
            result.Y = (TempPoint2.Y - TempPoint1.Y) * bestDist + TempPoint1.Y;
            result.Z = (TempPoint2.Z - TempPoint1.Z) * bestDist + TempPoint1.Z;

            return(true);
        }
Esempio n. 10
0
    protected void Awake()
    {
        tempTransform = AddMyComponent <TempTransform>();

        OnAwake();
    }