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