Exemplo n.º 1
0
        public void Show(IStructureSupport ghost, IStructureSupport support, Collider supportCol, float offsetWithSupport)
        {
            Transform transform  = (ghost as MonoBehaviour).transform;
            Transform transform2 = (support as MonoBehaviour).transform;

            if (support is WallChunkArchitect)
            {
                if (this._showHorizontalGrid)
                {
                    WallChunkArchitect wallChunkArchitect = (WallChunkArchitect)support;
                    Vector3            position           = transform2.position;
                    position.y = support.GetLevel() + offsetWithSupport;
                    this._horizontal.position            = position;
                    this._horizontal.rotation            = Quaternion.LookRotation(transform2.forward);
                    this._horizontal.localScale          = new Vector3(1f, 1f, Vector3.Distance(wallChunkArchitect.P1, wallChunkArchitect.P2));
                    this._horizontalMat.mainTextureScale = new Vector2(6.25f, 5f * this._horizontal.localScale.z);
                    this._horizontal.gameObject.SetActive(true);
                }
                if (this._showVerticalGrid)
                {
                    Vector3 position2 = transform.position;
                    position2.y          = support.GetLevel();
                    this._edge1.position = position2;
                    int count = ghost.GetMultiPointsPositions(true).Count;
                    if (count > 0)
                    {
                        Vector3 forward = ghost.GetMultiPointsPositions(true).Last <Vector3>() - position2;
                        forward.y            = 0f;
                        this._edge1.rotation = Quaternion.LookRotation(forward);
                    }
                    else
                    {
                        this._edge1.rotation = this._horizontal.rotation;
                    }
                    this._edge1.gameObject.SetActive(true);
                    if (count > 1)
                    {
                        this._edge2.position = position2;
                        Vector3 forward2 = ghost.GetMultiPointsPositions(true).First <Vector3>() - position2;
                        forward2.y           = 0f;
                        this._edge2.rotation = Quaternion.LookRotation(forward2);
                        this._edge2.gameObject.SetActive(true);
                    }
                    else
                    {
                        this._edge2.gameObject.SetActive(false);
                    }
                }
            }
        }
Exemplo n.º 2
0
        private void InitSupport(IStructureSupport support)
        {
            List <Vector3> multiPointsPositions = support.GetMultiPointsPositions(true);

            if (multiPointsPositions != null && multiPointsPositions.Count > 1)
            {
                if (!this._autofillmode && this._canScriptToggleAutofillmode && this._multiPointsPositions.Count == 0)
                {
                    this._autofillmode = true;
                }
                this.CurrentSupport = support;
                this.UpdateAutoFill(false);
            }
        }
Exemplo n.º 3
0
 private bool IsPlayerPositionValid(Vector3 testPos, IStructureSupport floor, IStructureSupport ceiling)
 {
     return(testPos.y > floor.GetLevel() && testPos.y < ceiling.GetLevel() && MathEx.IsPointInPolygon(testPos, floor.GetMultiPointsPositions(true)) && MathEx.IsPointInPolygon(testPos, ceiling.GetMultiPointsPositions(true)));
 }
Exemplo n.º 4
0
        private void SpawnRepairTrigger()
        {
            if (this._repairTrigger || !this._canBeRepaired)
            {
                return;
            }
            if (BoltNetwork.isRunning && base.entity && base.entity.isAttached && base.entity.isOwner)
            {
                base.state.repairTrigger = true;
            }
            this._repairTrigger                  = UnityEngine.Object.Instantiate <BuildingRepair>(Prefabs.Instance.BuildingRepairTriggerPrefab);
            this._repairTrigger._target          = this;
            this._repairTrigger.transform.parent = base.transform;
            IStructureSupport structureSupport = (IStructureSupport)base.GetComponent(typeof(IStructureSupport));

            if (structureSupport != null)
            {
                if (structureSupport is WallChunkArchitect)
                {
                    WallChunkArchitect wallChunkArchitect = (WallChunkArchitect)structureSupport;
                    this._repairTrigger.transform.position = Vector3.Lerp(wallChunkArchitect.P1, wallChunkArchitect.P2, 0.5f) + base.transform.right + base.transform.TransformDirection(this._repairTriggerOffset);
                    this._repairTrigger.transform.rotation = Quaternion.LookRotation(base.transform.right);
                }
                else
                {
                    this._repairTrigger.transform.position = MultipointUtils.CenterOf(structureSupport.GetMultiPointsPositions(true)) + base.transform.TransformDirection(this._repairTriggerOffset);
                }
            }
            else
            {
                this._repairTrigger.transform.position = base.transform.position + base.transform.TransformDirection(this._repairTriggerOffset);
            }
        }
Exemplo n.º 5
0
 protected virtual IEnumerator OnDeserialized()
 {
     if (!this._initialized)
     {
         this._initialized = true;
         if (this._forceWasBuilt)
         {
             this._wasBuilt = true;
         }
         if (this._p1 == Vector3.zero)
         {
             this._p1 = base.transform.position;
         }
         if (this._p2 == Vector3.zero)
         {
             PrefabIdentifier pi = base.GetComponent <PrefabIdentifier>();
             if (pi && !pi.Components.Contains(base.GetType().FullName))
             {
                 pi.Components.Add(base.GetType().FullName);
             }
             Transform parentStructure = base.transform.parent;
             while (parentStructure && parentStructure.parent)
             {
                 parentStructure = parentStructure.parent;
                 yield return(null);
             }
             IStructureSupport support = (!base.transform.parent) ? null : base.transform.parent.GetComponent <IStructureSupport>();
             if (support != null)
             {
                 this.CurrentSupport = support;
                 List <Vector3> multiPointsPositions = support.GetMultiPointsPositions(true);
                 if (multiPointsPositions != null && multiPointsPositions.Count > 1)
                 {
                     Vector3 p = this._p1;
                     p.y = multiPointsPositions[0].y;
                     int num = -1;
                     int i;
                     for (i = 1; i < multiPointsPositions.Count; i++)
                     {
                         Vector3 a    = MathEx.ProjectPointOnLineSegment(multiPointsPositions[i], multiPointsPositions[i - 1], p);
                         float   num2 = Vector3.Distance(a, p);
                         if (num2 < 0.025f)
                         {
                             if (Vector3.Dot(multiPointsPositions[i] - multiPointsPositions[i - 1], base.transform.forward) > 0.98f)
                             {
                                 num = i - 1;
                                 break;
                             }
                             if (Vector3.Dot(multiPointsPositions[i] - multiPointsPositions[(i + 1) % multiPointsPositions.Count], base.transform.forward) > 0.98f)
                             {
                                 num = (i - 1) % multiPointsPositions.Count;
                                 break;
                             }
                         }
                     }
                     if (num > -1)
                     {
                         Vector3 a2        = multiPointsPositions[i] - multiPointsPositions[num];
                         float   magnitude = Vector3.Scale(a2, new Vector3(1f, 0f, 1f)).magnitude;
                         int     num3      = Mathf.CeilToInt(magnitude / this._architect.MaxSegmentHorizontalLength);
                         float   d         = magnitude / (float)num3;
                         this._p2 = this._p1 + base.transform.forward * d;
                     }
                 }
             }
             if (this._p2 == Vector3.zero)
             {
                 this._p2 = this._p1 + base.transform.forward * this._architect.MaxSegmentHorizontalLength * 0.95f;
             }
         }
         if (this._height == 0f)
         {
             this._height = 5f;
         }
         if (this._multiPointsPositions == null)
         {
             this._multiPointsPositions = new List <Vector3>
             {
                 this._p1,
                 this._p2
             };
             this._multiPointsPositionsCount = 2;
         }
         else if (this._multiPointsPositionsCount == 0)
         {
             this._multiPointsPositionsCount = this._multiPointsPositions.Skip(1).IndexOf(this._multiPointsPositions[0]);
             if (this._multiPointsPositionsCount < 0)
             {
                 this._multiPointsPositionsCount = this._multiPointsPositions.Count;
             }
             else
             {
                 this._multiPointsPositionsCount += 2;
             }
         }
         if (this._multiPointsPositions.Count > this._multiPointsPositionsCount)
         {
             this._multiPointsPositions.RemoveRange(this._multiPointsPositionsCount, this._multiPointsPositions.Count - this._multiPointsPositionsCount);
         }
         if (this._wasBuilt)
         {
             this.CreateStructure(false);
             this._wallRoot.transform.parent = base.transform;
         }
         else
         {
             this.CreateStructure(false);
             base.StartCoroutine(this.OnPlaced());
         }
     }
     yield break;
 }