Пример #1
0
        public void FetchCollisions()
        {
            CubeModel.UpdateBounds(transform, (svector3)Position, (svector3)Scale);
            Colliding     = ActiveCollisions.Count > 0;
            DeltaPosition = ((svector3)transform.position + (svector3)Position) - LastPosition;
            LastPosition  = ((svector3)transform.position + (svector3)Position);

            for (int i = 0; i < NucleonManager.Colliders.Length; i++)
            {
                NucleonBoxCollider BoxCollider = (NucleonBoxCollider)NucleonManager.Colliders[i];
                if (BoxCollider != this)
                {
                    bool Colliding = intersector.CC_I(CubeModel, BoxCollider.CubeModel);
                    CollisionCheck(Colliding, BoxCollider);

                    if (Colliding && DebugCollisionVertices)
                    {
                        List <svector3> CollidingPointsFetchList = new List <svector3>();
                        foreach (svector3 Vertice in CubeModel.Vertices)
                        {
                            if (intersector.PC_I(Vertice, BoxCollider.CubeModel))
                            {
                                CollidingPointsFetchList.Add(Vertice);
                            }
                        }
                        CollidingPoints = CollidingPointsFetchList;
                    }
                    if (!Colliding && DebugCollisionVertices)
                    {
                        CollidingPoints.Clear();
                    }
                }
            }
        }
Пример #2
0
        public void UpdateBounds(Transform transform, svector3 Position, svector3 Scale)
        {
            this.transform = transform;
            this.Position  = Position;
            this.Scale     = Scale;

            MaxX = ((sfloat)transform.position.x + Position.x + ((sfloat)transform.localScale.x + Scale.x) / (sfloat)2);
            MinX = ((sfloat)transform.position.x + Position.x + ((sfloat)transform.localScale.x + Scale.x) / -(sfloat)2);
            MaxY = ((sfloat)transform.position.y + Position.y + ((sfloat)transform.localScale.y + Scale.y) / (sfloat)2);
            MinY = ((sfloat)transform.position.y + Position.y + ((sfloat)transform.localScale.y + Scale.y) / -(sfloat)2);
            MaxZ = ((sfloat)transform.position.z + Position.z + ((sfloat)transform.localScale.z + Scale.z) / (sfloat)2);
            MinZ = ((sfloat)transform.position.z + Position.z + ((sfloat)transform.localScale.z + Scale.z) / -(sfloat)2);

            Vertices = new[]
            {
                new svector3(MaxX, MaxY, MaxZ),
                new svector3(MinX, MinY, MinZ),

                new svector3(MaxX, MinY, MinZ),
                new svector3(MinX, MaxY, MinZ),
                new svector3(MinX, MinY, MaxZ),

                new svector3(MaxX, MinY, MaxZ),
                new svector3(MinX, MaxY, MaxZ),
                new svector3(MaxX, MaxY, MinZ),
            };
        }
Пример #3
0
        void Awake()
        {
            DeltaPosition = svector3.Zero();
            LastPosition  = svector3.Zero();

            try
            {
                Body = GetComponent <NucleonRigidbody>();
            }
            catch { }

            CubeModel = new CubeModel();

            ActiveCollisions = new List <NucleonCollider>();
            CollidingPoints  = new List <svector3>();

            UpdateInterval = (sfloat)1f / (sfloat)UpdatesPerSecond;
        }
Пример #4
0
        private svector3 PrepareDetunnel(bool[] FacesArray, NucleonCollision Collision)
        {
            svector3 DetunneledPosition = new svector3(0, 0, 0);

            if (FacesArray[0] && Collision.SelfCollider.DeltaPosition.x != (sfloat)0)
            {
                DetunneledPosition.x = Collision.SelfCollider.CubeModel.MaxX - Collision.OtherCollider.CubeModel.MinX;
            }
            if (FacesArray[1] && Collision.SelfCollider.DeltaPosition.x != (sfloat)0)
            {
                DetunneledPosition.x = Collision.SelfCollider.CubeModel.MinX - Collision.OtherCollider.CubeModel.MaxX;
            }

            if (FacesArray[4] && Collision.SelfCollider.DeltaPosition.z != (sfloat)0)
            {
                DetunneledPosition.z = Collision.SelfCollider.CubeModel.MaxZ - Collision.OtherCollider.CubeModel.MinZ;
            }
            if (FacesArray[5] && Collision.SelfCollider.DeltaPosition.z != (sfloat)0)
            {
                DetunneledPosition.z = Collision.SelfCollider.CubeModel.MinZ - Collision.OtherCollider.CubeModel.MaxZ;
            }
            return(new svector3((sfloat)transform.position.x - DetunneledPosition.x, (sfloat)transform.position.y, (sfloat)transform.position.z - DetunneledPosition.z));
        }
Пример #5
0
 private void Awake()
 {
     Velocity         = svector3.Zero();
     AbsoluteVelocity = svector3.Zero();
 }
Пример #6
0
        public void AddForce(sfloat Force, svector3 Direction)
        {
            sfloat Acceleration = Force / (sfloat)Mass;

            CalculationVelocity += (Vector3) new svector3(Direction.x * Acceleration, Direction.y * Acceleration, Direction.z * Acceleration);
        }