public override void Attached() { CoopConstructionExToken coopConstructionExToken = (CoopConstructionExToken)this.entity.attachToken; for (int i = 0; i < coopConstructionExToken.Architects.Length; i++) { ICoopStructure coopStructure = (ICoopStructure)this.Architects[i]; coopStructure.CustomToken = coopConstructionExToken.Architects[i].CustomToken; coopStructure.MultiPointsCount = coopConstructionExToken.Architects[i].PointsCount; coopStructure.MultiPointsPositions = coopConstructionExToken.Architects[i].PointsPositions.ToList <Vector3>(); coopStructure.WasPlaced = true; if (coopStructure is FoundationArchitect && coopConstructionExToken.Architects[i].AboveGround) { ((FoundationArchitect)coopStructure)._aboveGround = true; } if (coopConstructionExToken.Architects[i].Support) { IStructureSupport structureSupport = coopConstructionExToken.Architects[i].Support.GetComponentInChildren(typeof(IStructureSupport)) as IStructureSupport; if (structureSupport != null) { if (coopStructure is RoofArchitect) { (coopStructure as RoofArchitect).CurrentSupport = structureSupport; } if (coopStructure is FloorArchitect) { (coopStructure as FloorArchitect).CurrentSupport = structureSupport; } } } } this.entity.SendMessage("OnDeserialized"); base.Attached(); }
private bool TryAddTarget(PrefabIdentifier pi, Collider c) { if (pi) { IHoleStructure holeStructure = (IHoleStructure)pi.GetComponent(typeof(IHoleStructure)); if (holeStructure != null) { if (!this._targets.Contains(holeStructure) && holeStructure.HoleCount < 20) { Hole item; if (holeStructure is FloorArchitect) { if (!this._previewFloor || !(holeStructure as FloorArchitect).WasBuilt) { return false; } FloorArchitect floorArchitect = holeStructure as FloorArchitect; FloorArchitect floorArchitect2 = UnityEngine.Object.Instantiate<FloorArchitect>(this._previewFloor, floorArchitect.transform.position, floorArchitect.transform.rotation); floorArchitect.OnBuilt(floorArchitect2.gameObject); floorArchitect2._wasBuilt = false; this._previews.Add(floorArchitect2); item = floorArchitect2.AddSquareHole(base.transform.position, base.transform.rotation.y, this._holeSize); } else if (holeStructure is RoofArchitect) { if (!this._previewRoof || !(holeStructure as RoofArchitect).WasBuilt) { return false; } RoofArchitect roofArchitect = holeStructure as RoofArchitect; RoofArchitect roofArchitect2 = UnityEngine.Object.Instantiate<RoofArchitect>(this._previewRoof, roofArchitect.transform.position, roofArchitect.transform.rotation); roofArchitect.OnBuilt(roofArchitect2.gameObject); roofArchitect2._wasBuilt = false; this._previews.Add(roofArchitect2); item = roofArchitect2.AddSquareHole(base.transform.position, base.transform.rotation.y, this._holeSize); } else { if (holeStructure is CraneArchitect) { return false; } if (!(holeStructure is RaftArchitect) || !(holeStructure as RaftArchitect).WasBuilt) { UnityEngine.Debug.LogError("Trying to cut IHS '" + pi.name + "' which isn't roof, floor or raft. Please report this to guillaume."); return false; } if (!this._previewRaft || !(base.transform.root != pi.transform.root)) { return false; } RaftArchitect raftArchitect = holeStructure as RaftArchitect; RaftArchitect raftArchitect2 = UnityEngine.Object.Instantiate<RaftArchitect>(this._previewRaft, raftArchitect.transform.position, raftArchitect.transform.rotation); raftArchitect.OnBuilt(raftArchitect2.gameObject); this._previews.Add(raftArchitect2); item = raftArchitect2.AddSquareHole(base.transform.position, base.transform.rotation.y, this._holeSize); } this._targets.Add(holeStructure); this._holes.Add(item); this.CheckCanPlace(); return true; } } else { BuildingBlueprint blueprintByPrefabId = Prefabs.Instance.Constructions.GetBlueprintByPrefabId(pi.ClassId); if (blueprintByPrefabId != null && !blueprintByPrefabId._preventHoleCutting) { FloorHoleArchitect.DestroyTarget destroyTarget; if (!this._destroyTargets.TryGetValue(pi.gameObject, out destroyTarget)) { destroyTarget = new FloorHoleArchitect.DestroyTarget(); destroyTarget._go = pi.gameObject; destroyTarget._bh = pi.GetComponent<BuildingHealth>(); ICoopStructure component = pi.GetComponent<ICoopStructure>(); if (component != null) { IProceduralStructure component2 = pi.GetComponent<IProceduralStructure>(); if (component2 == null) { return false; } destroyTarget._ghost = component2.SpawnStructure().gameObject; } else { destroyTarget._ghost = UnityEngine.Object.Instantiate<GameObject>(blueprintByPrefabId._ghostPrefab, pi.transform.position, pi.transform.rotation); } destroyTarget._ghost.transform.parent = pi.transform; int layer = LayerMask.NameToLayer("TransparentFX"); Renderer component3 = destroyTarget._ghost.GetComponent<Renderer>(); if (component3) { destroyTarget._ghost.layer = layer; component3.sharedMaterial = this._overlayMaterial; } else { Craft_Structure componentInChildren = destroyTarget._ghost.GetComponentInChildren<Craft_Structure>(); if (componentInChildren && componentInChildren._requiredIngredients.Count > 0) { for (int i = 0; i < componentInChildren._requiredIngredients.Count; i++) { Craft_Structure.BuildIngredients buildIngredients = componentInChildren._requiredIngredients[i]; buildIngredients.SetGhostMaterial(this._overlayMaterial); } } else { Renderer[] componentsInChildren = destroyTarget._ghost.GetComponentsInChildren<Renderer>(); foreach (Renderer renderer in componentsInChildren) { renderer.gameObject.layer = layer; renderer.sharedMaterial = this._overlayMaterial; } } } Transform transform = destroyTarget._ghost.transform.Find("Trigger"); if (transform) { UnityEngine.Object.Destroy(transform.gameObject); } LastBuiltLocation component4 = destroyTarget._ghost.GetComponent<LastBuiltLocation>(); if (component4) { UnityEngine.Object.Destroy(component4.gameObject); } LastBuiltLocation component5 = destroyTarget._ghost.GetComponent<LastBuiltLocation>(); if (component5) { UnityEngine.Object.Destroy(component5.gameObject); } UnityEngine.Object.Destroy(destroyTarget._ghost.GetComponent<PrefabIdentifier>()); UnityEngine.Object.Destroy(destroyTarget._ghost.GetComponent<SingleAnchorStructure>()); this._destroyTargets.Add(pi.gameObject, destroyTarget); } if (c && !destroyTarget._colliders.Contains(c)) { destroyTarget._colliders.Add(c); } this.CheckCanPlace(); return true; } } } return false; }