예제 #1
0
 // activate/deactivate the character when going into the store. The GUIManager will manage the preview
 public void ShowStore(bool show)
 {
     // ensure the correct character is used
     if (!show)
     {
         SpawnCharacter();
     }
     InfiniteRunnerStarterPackUtility.ActiveRecursively(character.transform, !show);
 }
예제 #2
0
        private Vector3 GetCurvePoint(float distance, bool updateMapIndex)
        {
            int   index           = curveDistanceMapIndex;
            float segmentDistance = platformObject.curveIndexDistanceMap[index];

            if (distance > segmentDistance && index < platformObject.curveIndexDistanceMap.Count - 1)
            {
                index++;
                if (updateMapIndex)
                {
                    curveDistanceMapIndex = index;
                }
            }
            float time = 0;

            if (index > 0)
            {
                float prevDistance = platformObject.curveIndexDistanceMap[index - 1];
                time = (distance - prevDistance) / (platformObject.curveIndexDistanceMap[index] - prevDistance);
            }
            else
            {
                time = distance / platformObject.curveIndexDistanceMap[index];
            }
            time = Mathf.Clamp01(time);

            Vector3 p0, p1, p2;

            if (index == 0)
            {
                p0 = platformObject.controlPoints[index];
            }
            else
            {
                p0 = (platformObject.controlPoints[index] + platformObject.controlPoints[index + 1]) / 2;
            }
            p1 = platformObject.controlPoints[index + 1];
            if (index + 2 == platformObject.controlPoints.Count - 1)
            {
                p2 = platformObject.controlPoints[index + 2];
            }
            else
            {
                p2 = (platformObject.controlPoints[index + 1] + platformObject.controlPoints[index + 2]) / 2;
            }

            return(platformObject.GetTransform().TransformPoint(InfiniteRunnerStarterPackUtility.CalculateBezierPoint(p0, p1, p2, time)));
        }
예제 #3
0
 public virtual void Activate()
 {
     if (optimizeDeactivation)
     {
         for (int i = 0; i < childRenderers.Length; ++i)
         {
             childRenderers[i].enabled = transform;
         }
         for (int i = 0; i < childColliders.Length; ++i)
         {
             childColliders[i].enabled = transform;
         }
         enabled = true;
     }
     else
     {
         InfiniteRunnerStarterPackUtility.ActiveRecursively(thisTransform, true);
     }
 }
예제 #4
0
        public virtual void Deactivate()
        {
            if (destroyOnDeactivation)
            {
                // don't destroy the collision particle effect
                ParticleSystem[] particleSystems = GetComponentsInChildren <ParticleSystem>();
                if (PlayerController.instance)
                {
                    ParticleSystem collisionParticleSystem = PlayerController.instance.collisionParticleSystem;
                    for (int i = 0; i < particleSystems.Length; ++i)
                    {
                        if (particleSystems[i] == collisionParticleSystem)
                        {
                            particleSystems[i].transform.parent = null;
                        }
                    }
                }
                Destroy(gameObject);
                return;
            }

            thisTransform.parent = startParent;
            infiniteObjectParent = null;
            if (optimizeDeactivation)
            {
                foreach (Renderer child in childRenderers)
                {
                    child.enabled = false;
                }
                foreach (Collider child in childColliders)
                {
                    child.enabled = false;
                }
                enabled = false;
            }
            else
            {
                InfiniteRunnerStarterPackUtility.ActiveRecursively(thisTransform, false);
            }
        }
        private void ComputeBezierCurve(bool draw /*if false, will compute length*/)
        {
            PlatformObject platformObject = (PlatformObject)target;

            if (platformObject.controlPoints == null || platformObject.controlPoints.Count < 3)
            {
                platformObject.curveLength = 0;
                EditorUtility.SetDirty(target);
                return;
            }

            if (!draw)
            {
                platformObject.curveIndexDistanceMap = new List <float>();
            }

            Vector3 p0, p1, p2;
            Vector3 q0, q1;
            float   t;
            float   length = 0;

            Handles.color = Color.white;
            Vector3 platformPosition = platformObject.transform.position;

            for (int i = 0; i < platformObject.controlPoints.Count - 2; ++i)
            {
                if (i == 0)
                {
                    p0 = platformObject.controlPoints[i];
                }
                else
                {
                    p0 = (platformObject.controlPoints[i] + platformObject.controlPoints[i + 1]) / 2;
                }
                p1 = platformObject.controlPoints[i + 1];
                if (i + 2 == platformObject.controlPoints.Count - 1)
                {
                    p2 = platformObject.controlPoints[i + 2];
                }
                else
                {
                    p2 = (platformObject.controlPoints[i + 1] + platformObject.controlPoints[i + 2]) / 2;
                }

                t  = 0;
                q0 = InfiniteRunnerStarterPackUtility.CalculateBezierPoint(p0, p1, p2, t);
                for (int j = 1; j <= StepCount; j++)
                {
                    t  = j / (float)StepCount;
                    q1 = InfiniteRunnerStarterPackUtility.CalculateBezierPoint(p0, p1, p2, t);
                    if (draw)
                    {
                        Handles.DrawLine(platformPosition + q0, platformPosition + q1);
                    }
                    else
                    {
                        length += Vector3.Distance(q0, q1);
                    }
                    q0 = q1;
                }
                if (!draw)
                {
                    platformObject.curveIndexDistanceMap.Add(length);
                }
            }

            if (!draw)
            {
                platformObject.curveLength = length;
                EditorUtility.SetDirty(target);
            }
        }