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); } }
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)); }