Ejemplo n.º 1
0
 public static EnvLineArea3DSE.PlayInfo Convert(
     EnvLineArea3DSE.EnvironmentSEInfo envInfo)
 {
     EnvLineArea3DSE.PlayInfo playInfo = new EnvLineArea3DSE.PlayInfo();
     playInfo.FirstPlaying = true;
     playInfo.Roots.Clear();
     playInfo.Roots.AddRange((IEnumerable <Transform>)envInfo.Roots);
     playInfo.ClipID           = envInfo.ClipID;
     playInfo.IsMooning        = envInfo.IsMooning;
     playInfo.IsNoon           = envInfo.IsNoon;
     playInfo.IsNight          = envInfo.IsNight;
     playInfo.IsClear          = envInfo.IsClear;
     playInfo.IsCloud          = envInfo.IsCloud;
     playInfo.IsRain           = envInfo.IsRain;
     playInfo.IsFog            = envInfo.IsFog;
     playInfo.Decay            = envInfo.Decay;
     playInfo.IsLoop           = envInfo.IsLoop;
     playInfo.Interval         = envInfo.Interval;
     playInfo.Audio            = (AudioSource)null;
     playInfo.FadePlayer       = (FadePlayer)null;
     playInfo.ElapsedTime      = 0.0f;
     playInfo.DelayTime        = 0.0f;
     playInfo.IsPlay           = false;
     playInfo.IsEnableDistance = false;
     playInfo.PlayEnable       = false;
     playInfo.LoadSuccess      = false;
     playInfo.NearLine         = new EnvLineArea3DSE.LineT();
     if (!envInfo.Roots.IsNullOrEmpty <Transform>() && 2 <= envInfo.Roots.Count)
     {
         for (int index = 0; index < envInfo.Roots.Count - 1; ++index)
         {
             EnvLineArea3DSE.LineT lineT = new EnvLineArea3DSE.LineT()
             {
                 P1 = envInfo.Roots[index],
                 P2 = envInfo.Roots[index + 1]
             };
             playInfo.Lines.Add(lineT);
         }
     }
     return(playInfo);
 }
Ejemplo n.º 2
0
            public bool TryGetNearPoint(out Vector3 getHitPoint, out EnvLineArea3DSE.LineT getHitLine)
            {
                getHitPoint = Vector3.get_zero();
                getHitLine  = new EnvLineArea3DSE.LineT();
                if (!Singleton <Resources> .IsInstance() || !Singleton <Manager.Map> .IsInstance() || this.Lines.IsNullOrEmpty <EnvLineArea3DSE.LineT>())
                {
                    return(false);
                }
                Transform transform = ((Component)Singleton <Manager.Map> .Instance.Player?.CameraControl?.CameraComponent)?.get_transform();

                if (Object.op_Equality((Object)transform, (Object)null))
                {
                    return(false);
                }
                Vector3 position1 = transform.get_position();
                int     index1    = -1;
                float   num1      = float.MaxValue;

                for (int index2 = 0; index2 < this.Lines.Count; ++index2)
                {
                    EnvLineArea3DSE.LineT line = this.Lines[index2];
                    if (!Object.op_Equality((Object)line.P1, (Object)null) && !Object.op_Equality((Object)line.P2, (Object)null))
                    {
                        Vector3 position2   = line.P1.get_position();
                        Vector3 position3   = line.P2.get_position();
                        float   maxDistance = Vector3.SqrMagnitude(Vector3.op_Subtraction(position3, position2));
                        line.HitPoint    = this.NearPointOnLine(position1, position2, position3, maxDistance);
                        line.Distance    = Vector3.Distance(line.HitPoint, position1);
                        line.SqrDistance = line.Distance * line.Distance;
                        if ((double)line.SqrDistance < (double)num1)
                        {
                            num1   = line.SqrDistance;
                            index1 = index2;
                        }
                        this.Lines[index2] = line;
                    }
                }
                if (0 > index1)
                {
                    return(false);
                }
                float areaSeBlendDistance = Singleton <Resources> .Instance.SoundPack.EnviroInfo.LineAreaSEBlendDistance;

                getHitLine = this.Lines[index1];
                if (this.Lines.Count == 1)
                {
                    getHitPoint = getHitLine.HitPoint;
                    return(true);
                }
                if (index1 == 0)
                {
                    EnvLineArea3DSE.LineT line1 = this.Lines[0];
                    EnvLineArea3DSE.LineT line2 = this.Lines[1];
                    float num2 = Mathf.Abs(line1.Distance - line2.Distance);
                    if ((double)num2 <= (double)areaSeBlendDistance)
                    {
                        float num3 = Mathf.InverseLerp(0.0f, areaSeBlendDistance, num2);
                        getHitPoint = Vector3.Lerp(Vector3.op_Division(Vector3.op_Addition(line1.HitPoint, line2.HitPoint), 2f), line1.HitPoint, num3);
                        return(true);
                    }
                }
                else if (index1 == this.Lines.Count - 1)
                {
                    int index2 = this.Lines.Count - 1;
                    EnvLineArea3DSE.LineT line1 = this.Lines[index2];
                    EnvLineArea3DSE.LineT line2 = this.Lines[index2 - 1];
                    float num2 = Mathf.Abs(line1.Distance - line2.Distance);
                    if ((double)num2 <= (double)areaSeBlendDistance)
                    {
                        float num3 = Mathf.InverseLerp(0.0f, areaSeBlendDistance, num2);
                        getHitPoint = Vector3.Lerp(Vector3.op_Division(Vector3.op_Addition(line1.HitPoint, line2.HitPoint), 2f), line1.HitPoint, num3);
                        return(true);
                    }
                }
                else
                {
                    EnvLineArea3DSE.LineT line  = this.Lines[index1];
                    EnvLineArea3DSE.LineT lineT = (double)this.Lines[index1 - 1].Distance > (double)this.Lines[index1 + 1].Distance ? this.Lines[index1 + 1] : this.Lines[index1 - 1];
                    float num2 = Mathf.Abs(line.Distance - lineT.Distance);
                    if ((double)num2 <= (double)areaSeBlendDistance)
                    {
                        float num3 = Mathf.InverseLerp(0.0f, areaSeBlendDistance, num2);
                        getHitPoint = Vector3.Lerp(Vector3.op_Division(Vector3.op_Addition(line.HitPoint, lineT.HitPoint), 2f), line.HitPoint, num3);
                        return(true);
                    }
                }
                getHitPoint = getHitLine.HitPoint;
                return(true);
            }