コード例 #1
0
        public void OnNucleonCollisionEnter(NucleonCollision Collision)
        {
            if (!TouchingFaces.ContainsKey(Collision.OtherCollider.GetInstanceID()))
            {
                TouchingFaces.Add(Collision.OtherCollider.GetInstanceID(), new bool[0]);
            }
            bool[] FacesArray = { Collision.TouchingMinX, Collision.TouchingMaxX, Collision.TouchingMinY, Collision.TouchingMaxY, Collision.TouchingMinZ, Collision.TouchingMaxZ };
            TouchingFaces[Collision.OtherCollider.GetInstanceID()] = FacesArray;

            transform.position = (Vector3)PrepareDetunnel(FacesArray, Collision);

            if (Collision.CollisionDirection.y < (sfloat)0 && !FacesArray[0] && !FacesArray[1] && !FacesArray[4] && !FacesArray[5])
            {
                Grounded = true;
                Ground   = Collision.OtherCollider;
                CalculationVelocity.y = 0;
                GravityTimer          = (sfloat)0;
                transform.position    = (Vector3) new svector3(
                    (sfloat)transform.position.x,
                    (((sfloat)transform.localScale.y + (sfloat)Collision.SelfCollider.Scale.y) / (sfloat)2) + Collision.OtherCollider.CubeModel.MaxY - (sfloat)Collision.SelfCollider.CollisionOverlapThreshold - (sfloat)Collision.SelfCollider.Position.y,
                    (sfloat)transform.position.z);
            }
        }
コード例 #2
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));
        }