示例#1
0
 // Token: 0x06000DC5 RID: 3525 RVA: 0x0003DD10 File Offset: 0x0003BF10
 private void LateUpdate()
 {
     if (this.skinnedMeshRenderer)
     {
         this.age += Time.deltaTime;
         for (int i = 0; i < this.bones.Length; i++)
         {
             JitterBones.BoneInfo boneInfo = this.bones[i];
             if (!boneInfo.isRoot)
             {
                 float   num    = this.age * this.perlinNoiseFrequency;
                 float   num2   = (float)i;
                 Vector3 vector = new Vector3(Mathf.PerlinNoise(num, num2), Mathf.PerlinNoise(num + 4f, num2 + 3f), Mathf.PerlinNoise(num + 6f, num2 - 7f));
                 vector  = HGMath.Remap(vector, this.perlinNoiseMinimumCutoff, this.perlinNoiseMaximumCutoff, -1f, 1f);
                 vector  = HGMath.Clamp(vector, 0f, 1f);
                 vector *= this.perlinNoiseStrength;
                 if (this.headBonusStrength >= 0f && boneInfo.isHead)
                 {
                     vector *= this.headBonusStrength;
                 }
                 boneInfo.transform.rotation *= Quaternion.Euler(vector);
             }
         }
     }
 }
示例#2
0
            // Token: 0x06002280 RID: 8832 RVA: 0x000A3594 File Offset: 0x000A1794
            private bool FindBestHeadPoint(out Vector3 result, out float approximateRadius)
            {
                IEnumerable <Transform> source = from bone in this.boneList
                                                 where string.Equals(bone.name, "head", StringComparison.OrdinalIgnoreCase)
                                                 select bone;

                if (!source.Any <Transform>())
                {
                    source = from bone in this.boneList
                             where bone.name.ToLower().Contains("head")
                             select bone;
                }
                Vector3[] array = (from bone in source
                                   select bone.position).ToArray <Vector3>();
                result            = HGMath.Average <Vector3[]>(array);
                approximateRadius = 1f;
                IEnumerable <float> source2 = from hurtBox in (from bone in source
                                                               select bone.GetComponentInChildren <HurtBox>() into hurtBox
                                                               where hurtBox
                                                               select hurtBox).Distinct <HurtBox>()
                                              select Util.SphereVolumeToRadius(hurtBox.volume);

                if (source2.Any <float>())
                {
                    approximateRadius = source2.Max();
                }
                Transform transform = this.boneList.Find((Transform bone) => string.Equals(bone.name, "chest", StringComparison.OrdinalIgnoreCase));

                if (transform)
                {
                    approximateRadius = Mathf.Max(Vector3.Distance(transform.position, result), approximateRadius);
                    result            = (result + transform.position) / 2f;
                }
                return(array.Length != 0);
            }
示例#3
0
 private void RpcDeductLunarCoins(uint count)
 {
     if (this.localUser == null)
     {
         return;
     }
     this.localUser.userProfile.coins = HGMath.UintSafeSubtact(this.localUser.userProfile.coins, count);
     this.SyncLunarCoinsToServer();
 }
示例#4
0
 private void RpcAwardLunarCoins(uint count)
 {
     if (this.localUser == null)
     {
         return;
     }
     this.localUser.userProfile.coins = HGMath.UintSafeAdd(this.localUser.userProfile.coins, count);
     this.localUser.userProfile.totalCollectedCoins = HGMath.UintSafeAdd(this.localUser.userProfile.totalCollectedCoins, count);
     this.SyncLunarCoinsToServer();
 }
示例#5
0
 public void AwardLunarCoins(uint count)
 {
     if (!NetworkServer.active)
     {
         Debug.LogWarning("[Server] function 'System.Void RoR2.NetworkUser::AwardLunarCoins(System.UInt32)' called on client");
         return;
     }
     this.NetworknetLunarCoins = HGMath.UintSafeAdd(this.netLunarCoins, count);
     this.CallRpcAwardLunarCoins(count);
 }
        // Token: 0x0600235B RID: 9051 RVA: 0x0009A8A0 File Offset: 0x00098AA0
        private void CalculateLayoutValues(out ItemInventoryDisplay.LayoutValues v)
        {
            Rect rect = this.rectTransform.rect;

            v.width       = rect.width;
            v.iconSize    = this.iconWidth * this.currentIconScale;
            v.iconsPerRow = Math.Max((int)v.width / (int)v.iconSize, 1);
            v.rowWidth    = (float)v.iconsPerRow * v.iconSize;
            float num = (v.width - v.rowWidth) * 0.5f;

            v.rowCount       = HGMath.IntDivCeil(this.itemIcons.Count, v.iconsPerRow);
            v.iconLocalScale = new Vector3(this.currentIconScale, this.currentIconScale, 1f);
            v.topLeftCorner  = new Vector3(rect.xMin + num, rect.yMax);
        }
        private void UpdateClient()
        {
            if (!NetworkClient.active)
            {
                Debug.LogWarning("[Client] function 'System.Void RoR2.LaserTurbineController::UpdateClient()' called on server");
                return;
            }
            float num = HGMath.CircleAreaToRadius(this.charge * HGMath.CircleRadiusToArea(1f));

            this.chargeIndicator.localScale = new Vector3(num, num, num);
            Vector3 localEulerAngles = this.spinIndicator.localEulerAngles;

            localEulerAngles.y += this.spin * Time.deltaTime * this.visualSpinRate;
            this.spinIndicator.localEulerAngles = localEulerAngles;
            AkSoundEngine.SetRTPCValue(this.spinRtpc, this.spin * this.spinRtpcScale, base.gameObject);
        }
示例#8
0
            // Token: 0x0600227F RID: 8831 RVA: 0x000A34E4 File Offset: 0x000A16E4
            private bool FindBestEyePoint(out Vector3 result, out float approximateEyeRadius)
            {
                approximateEyeRadius = 1f;
                IEnumerable <Transform> source = from bone in this.boneList
                                                 where bone.name.Equals("eye", StringComparison.OrdinalIgnoreCase) || bone.name.Equals("eyeball.1", StringComparison.OrdinalIgnoreCase)
                                                 select bone;

                if (!source.Any <Transform>())
                {
                    source = from bone in this.boneList
                             where bone.name.ToLower().Contains("eye")
                             select bone;
                }
                Vector3[] array = (from bone in source
                                   select bone.position).ToArray <Vector3>();
                result = HGMath.Average <Vector3[]>(array);
                return(array.Length != 0);
            }
 // Token: 0x06001EB6 RID: 7862 RVA: 0x00084C08 File Offset: 0x00082E08
 protected override void FixedUpdateBehavior()
 {
     base.FixedUpdateBehavior();
     if (base.rigidbody)
     {
         this.returnSpeed       += this.returnSpeedAcceleration * Time.fixedDeltaTime;
         base.rigidbody.velocity = (this.aimOrigin - this.position).normalized * this.returnSpeed;
         if (NetworkServer.active)
         {
             Vector3 endPosition = this.position + base.rigidbody.velocity * Time.fixedDeltaTime;
             if (HGMath.Overshoots(this.position, endPosition, this.aimOrigin))
             {
                 EntityState.Destroy(base.gameObject);
                 return;
             }
         }
     }
 }
示例#10
0
            // Token: 0x060023EA RID: 9194 RVA: 0x0009D410 File Offset: 0x0009B610
            private bool FindBestEyePoint(out Vector3 result, out float approximateEyeRadius)
            {
                approximateEyeRadius = 1f;
                IEnumerable <Transform> source = this.boneList.Where(new Func <Transform, bool>(ModelPanel.CameraFramingCalculator.< > c.< > 9. < FindBestEyePoint > g__FirstChoice | 10_0));

                if (!source.Any <Transform>())
                {
                    source = this.boneList.Where(new Func <Transform, bool>(ModelPanel.CameraFramingCalculator.< > c.< > 9. < FindBestEyePoint > g__SecondChoice | 10_1));
                }
                Vector3[] array = (from bone in source
                                   select bone.position).ToArray <Vector3>();
                result = HGMath.Average <Vector3[]>(array);
                for (int i = 0; i < array.Length; i++)
                {
                    float magnitude = (array[i] - result).magnitude;
                    if (magnitude > approximateEyeRadius)
                    {
                        approximateEyeRadius = magnitude;
                    }
                }
                return(array.Length != 0);
            }
        // Token: 0x06002358 RID: 9048 RVA: 0x0009A7DC File Offset: 0x000989DC
        private float CalculateIconScale(int iconCount)
        {
            int num  = (int)this.rectTransform.rect.width;
            int num2 = (int)this.maxHeight;
            int num3 = (int)this.iconWidth;
            int num4 = num3;
            int num5 = num3 / 8;
            int num6 = Math.Max(num / num4, 1);
            int num7 = HGMath.IntDivCeil(iconCount, num6);

            while (num4 * num7 > num2)
            {
                num6++;
                num4 = Math.Min(num / num6, num3);
                num7 = HGMath.IntDivCeil(iconCount, num6);
                if (num4 <= num5)
                {
                    num4 = num5;
                    break;
                }
            }
            return((float)num4 / (float)num3);
        }
示例#12
0
            // Token: 0x060023F0 RID: 9200 RVA: 0x0009D6F8 File Offset: 0x0009B8F8
            private bool TryCalcBoneBounds(Transform bone, float weightThreshold, out Bounds bounds, out float approximateRadius)
            {
                SkinnedMeshRenderer[] componentsInChildren = this.modelInstance.GetComponentsInChildren <SkinnedMeshRenderer>();
                SkinnedMeshRenderer   skinnedMeshRenderer  = null;
                Mesh       mesh = null;
                int        num  = -1;
                List <int> list = new List <int>();

                foreach (SkinnedMeshRenderer skinnedMeshRenderer in componentsInChildren)
                {
                    mesh = skinnedMeshRenderer.sharedMesh;
                    if (mesh)
                    {
                        num = ModelPanel.CameraFramingCalculator.FindBoneIndex(skinnedMeshRenderer, bone);
                        if (num != -1)
                        {
                            BoneWeight[] boneWeights = mesh.boneWeights;
                            for (int j = 0; j < boneWeights.Length; j++)
                            {
                                if (ModelPanel.CameraFramingCalculator.GetWeightForBone(ref boneWeights[j], num) > weightThreshold)
                                {
                                    list.Add(j);
                                }
                            }
                            if (list.Count == 0)
                            {
                                num = -1;
                            }
                        }
                        if (num != -1)
                        {
                            break;
                        }
                    }
                }
                if (num == -1)
                {
                    bounds            = default(Bounds);
                    approximateRadius = 0f;
                    return(false);
                }
                Mesh mesh2 = new Mesh();

                skinnedMeshRenderer.BakeMesh(mesh2);
                Vector3[] vertices = mesh2.vertices;
                UnityEngine.Object.Destroy(mesh2);
                if (mesh2.vertexCount != mesh.vertexCount)
                {
                    Debug.LogWarningFormat("Baked mesh vertex count differs from the original mesh vertex count! baked={0} original={1}", new object[]
                    {
                        mesh2.vertexCount,
                        mesh.vertexCount
                    });
                    vertices = mesh.vertices;
                }
                Vector3[]  array     = new Vector3[list.Count];
                Transform  transform = skinnedMeshRenderer.transform;
                Vector3    position  = transform.position;
                Quaternion rotation  = transform.rotation;

                for (int k = 0; k < list.Count; k++)
                {
                    int     num2   = list[k];
                    Vector3 point  = vertices[num2];
                    Vector3 vector = position + rotation * point;
                    array[k] = vector;
                }
                bounds = new Bounds(HGMath.Average <Vector3[]>(array), Vector3.zero);
                float num3 = 0f;

                for (int l = 0; l < array.Length; l++)
                {
                    bounds.Encapsulate(array[l]);
                    float num4 = Vector3.Distance(bounds.center, array[l]);
                    if (num4 > num3)
                    {
                        num3 = num4;
                    }
                }
                approximateRadius = num3;
                return(true);
            }
示例#13
0
        // Token: 0x06002B85 RID: 11141 RVA: 0x000B79E4 File Offset: 0x000B5BE4
        private void RootPulse()
        {
            Vector3 position = base.transform.position;

            foreach (HurtBox hurtBox in new SphereSearch
            {
                origin = position,
                radius = TreebotFlower2Projectile.radius,
                mask = LayerIndex.entityPrecise.mask
            }.RefreshCandidates().FilterCandidatesByHurtBoxTeam(TeamMask.AllExcept(this.teamIndex)).OrderCandidatesByDistance().FilterCandidatesByDistinctHurtBoxEntities().GetHurtBoxes())
            {
                CharacterBody body = hurtBox.healthComponent.body;
                if (!this.rootedBodies.Contains(body))
                {
                    this.rootedBodies.Add(body);
                    body.AddBuff(BuffIndex.Entangle);
                    body.RecalculateStats();
                    Vector3   a         = hurtBox.transform.position - position;
                    float     magnitude = a.magnitude;
                    Vector3   a2        = a / magnitude;
                    Rigidbody component = hurtBox.healthComponent.GetComponent <Rigidbody>();
                    float     num       = component ? component.mass : 1f;
                    float     num2      = magnitude - TreebotFlower2Projectile.yankIdealDistance;
                    float     num3      = TreebotFlower2Projectile.yankSuitabilityCurve.Evaluate(num);
                    Vector3   vector    = component ? component.velocity : Vector3.zero;
                    if (HGMath.IsVectorNaN(vector))
                    {
                        vector = Vector3.zero;
                    }
                    Vector3 a3 = -vector;
                    if (num2 > 0f)
                    {
                        a3 = a2 * -Trajectory.CalculateInitialYSpeedForHeight(num2, -body.acceleration);
                    }
                    Vector3    force      = a3 * (num * num3);
                    DamageInfo damageInfo = new DamageInfo
                    {
                        attacker         = this.owner,
                        inflictor        = base.gameObject,
                        crit             = this.crit,
                        damage           = this.damage,
                        damageColorIndex = DamageColorIndex.Default,
                        damageType       = this.damageType,
                        force            = force,
                        position         = hurtBox.transform.position,
                        procChainMask    = this.procChainMask,
                        procCoefficient  = this.procCoefficient
                    };
                    hurtBox.healthComponent.TakeDamage(damageInfo);
                    HurtBox      hurtBoxReference = hurtBox;
                    HurtBoxGroup hurtBoxGroup     = hurtBox.hurtBoxGroup;
                    int          num4             = 0;
                    while ((float)num4 < Mathf.Min(4f, body.radius * 2f))
                    {
                        EffectData effectData = new EffectData
                        {
                            scale        = 1f,
                            origin       = position,
                            genericFloat = Mathf.Max(0.2f, TreebotFlower2Projectile.duration - base.fixedAge)
                        };
                        effectData.SetHurtBoxReference(hurtBoxReference);
                        EffectManager.SpawnEffect(Resources.Load <GameObject>("Prefabs/Effects/OrbEffects/EntangleOrbEffect"), effectData, true);
                        hurtBoxReference = hurtBoxGroup.hurtBoxes[UnityEngine.Random.Range(0, hurtBoxGroup.hurtBoxes.Length)];
                        num4++;
                    }
                }
            }
        }