Exemplo n.º 1
0
        public void ImportLightWeight(int[] data)
        {
            bool flag = false;
            int  num  = Mathf.Min(this._chunks.Length * 3, 320);

            for (int i = 0; i < num; i++)
            {
                bool flag2 = this._chunks[i / 3]._tiers[i % 3]._hp > 0f;
                bool flag3 = (data[i / 32] & 1 << i % 32) != 0;
                if (flag2 != flag3)
                {
                    this._chunks[i / 3]._tiers[i % 3]._hp = ((!flag3) ? 0f : (this._chunkTierHP + (float)this._bonusHp));
                    if (!flag3)
                    {
                        FoundationChunkTier chunk = this._foundation.GetChunk(i);
                        if (chunk)
                        {
                            this.TierDestroyed_Actual(chunk);
                        }
                    }
                    else
                    {
                        flag = true;
                    }
                }
            }
            if (flag)
            {
                this.RespawnFoundation(true);
            }
        }
Exemplo n.º 2
0
 public void TierDestroyed(FoundationChunkTier tier, Vector3 position)
 {
     if (!this._collapsing && !BoltNetwork.isClient)
     {
         this.TierDestroyed_Actual(tier);
     }
 }
Exemplo n.º 3
0
 public void TierDestroyed_Actual(FoundationChunkTier tier)
 {
     if (!PlayerPreferences.NoDestruction)
     {
         try
         {
             if (!this._collapsing)
             {
                 int num = tier._segmentNum + this._foundation.Edges.Take(tier._edgeNum).Sum((FoundationArchitect.Edge e) => e._segments.Length);
                 this._chunks[num]._tiers[tier._tierNum]._hp = -42f;
                 Transform exists = this._foundation.FoundationRoot.transform.Find("Edge" + tier._edgeNum);
                 if (exists)
                 {
                     Renderer[] componentsInChildren = tier.GetComponentsInChildren <Renderer>();
                     for (int i = 0; i < componentsInChildren.Length; i++)
                     {
                         Transform  transform  = componentsInChildren[i].transform;
                         GameObject gameObject = transform.gameObject;
                         transform.parent = null;
                         gameObject.layer = 31;
                         CapsuleCollider capsuleCollider = gameObject.AddComponent <CapsuleCollider>();
                         capsuleCollider.radius    = 0.5f;
                         capsuleCollider.height    = 4.5f;
                         capsuleCollider.direction = 2;
                         Rigidbody rigidbody = gameObject.AddComponent <Rigidbody>();
                         if (rigidbody)
                         {
                             rigidbody.AddForce((transform.position - tier.transform.position).normalized * 2.5f, ForceMode.Impulse);
                             rigidbody.AddRelativeTorque(Vector3.up * 2f, ForceMode.Impulse);
                         }
                         destroyAfter destroyAfter = gameObject.AddComponent <destroyAfter>();
                         destroyAfter.destroyTime = 1.75f;
                         this._collapsedLogs++;
                     }
                 }
                 Collider component = tier.GetComponent <Collider>();
                 if (component && !component.isTrigger)
                 {
                     UnityEngine.Object.Destroy(component);
                 }
                 if (BoltNetwork.isServer)
                 {
                     this.PublishDestroyedTierData(this.LightWeightExport());
                 }
                 this.IntegrityCheck(num, tier._tierNum);
                 if (!this._collapsing)
                 {
                     this.CheckSpawnRepairTrigger();
                 }
             }
         }
         catch (Exception exception)
         {
             Debug.LogException(exception);
         }
     }
 }
Exemplo n.º 4
0
 public void OnExplodeFoundationTier(Explode.Data explodeData, FoundationChunkTier tier)
 {
     FoundationHealth component = base.GetComponent<FoundationHealth>();
     if (component)
     {
         component.LocalizedTierHit(new LocalizedHitData
         {
             _damage = explodeData.explode.damage * this.GetDamageRatio(explodeData.distance, explodeData.explode.radius),
             _position = explodeData.explode.transform.position,
             _distortRatio = 2.5f
         }, tier);
     }
 }
Exemplo n.º 5
0
        public void OnExplodeFoundationTier(Explode.Data explodeData, FoundationChunkTier tier)
        {
            FoundationHealth component = base.GetComponent <FoundationHealth>();

            if (component)
            {
                component.LocalizedTierHit(new LocalizedHitData
                {
                    _damage       = explodeData.explode.damage * this.GetDamageRatio(explodeData.distance, explodeData.explode.radius),
                    _position     = explodeData.explode.transform.position,
                    _distortRatio = 2.5f
                }, tier);
            }
        }
Exemplo n.º 6
0
 public void LocalizedTierHit(LocalizedHitData data, FoundationChunkTier tier)
 {
     if (!PlayerPreferences.NoDestruction && !BoltNetwork.isClient)
     {
         this._lastHit = Time.realtimeSinceStartup;
         FoundationArchitect.Edge edge = this._foundation.Edges[tier._edgeNum];
         int num  = this._foundation.Edges.Take(tier._edgeNum).Sum((FoundationArchitect.Edge e) => e._segments.Length);
         int num2 = tier._segmentNum + num;
         this._chunks[num2]._tiers[tier._tierNum]._hp -= data._damage;
         float hp = this._chunks[num2]._tiers[tier._tierNum]._hp;
         if (hp <= 0f)
         {
             if (tier.transform.parent)
             {
                 tier.transform.parent = null;
                 Renderer[] componentsInChildren = tier.GetComponentsInChildren <Renderer>();
                 for (int i = 0; i < componentsInChildren.Length; i++)
                 {
                     Transform  transform  = componentsInChildren[i].transform;
                     GameObject gameObject = transform.gameObject;
                     transform.parent = null;
                     gameObject.layer = 31;
                     CapsuleCollider capsuleCollider = gameObject.AddComponent <CapsuleCollider>();
                     capsuleCollider.radius    = 0.5f;
                     capsuleCollider.height    = 4.5f;
                     capsuleCollider.direction = 0;
                     Rigidbody rigidbody = gameObject.AddComponent <Rigidbody>();
                     if (rigidbody)
                     {
                         rigidbody.AddForce((transform.position - data._position).normalized * 2f, ForceMode.Impulse);
                         rigidbody.AddRelativeTorque(Vector3.up * 2f, ForceMode.Impulse);
                     }
                     destroyAfter destroyAfter = gameObject.AddComponent <destroyAfter>();
                     destroyAfter.destroyTime = 1.75f;
                     this._collapsedLogs++;
                 }
                 if (LocalPlayer.Sfx)
                 {
                     LocalPlayer.Sfx.PlayStructureBreak(base.gameObject, 0.2f);
                 }
                 UnityEngine.Object.Destroy(tier.gameObject);
                 if (BoltNetwork.isServer)
                 {
                     this.PublishDestroyedTierData(this.LightWeightExport());
                 }
                 this.IntegrityCheck(num2, tier._tierNum);
             }
         }
         else
         {
             if (BoltNetwork.isServer && base.entity && base.entity.isAttached)
             {
                 this.CalcTotalRepairMaterial();
             }
             this.Distort(data);
         }
         if (!this._collapsing)
         {
             this.CheckSpawnRepairTrigger();
         }
         Prefabs.Instance.SpawnHitPS(HitParticles.Wood, data._position, Quaternion.LookRotation(tier.transform.right));
     }
 }