Exemple #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();
                    }
                }
            }
        }
Exemple #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),
            };
        }
Exemple #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;
        }
        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));
        }
 private void Awake()
 {
     Velocity         = svector3.Zero();
     AbsoluteVelocity = svector3.Zero();
 }
        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);
        }