コード例 #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
ファイル: CubeModel.cs プロジェクト: Cyboron/NucleonEngine
        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);
        }