public bool Build(MapAsset asset) { SabData utilData = AssetDB.sabs[asset.type]; // Object GameObject obj = new GameObject(asset.type); // Sprite Renderer SpriteRenderer spriteRenderer = obj.AddComponent <SpriteRenderer>(); spriteRenderer.sprite = utilData.SpriteRenderer.sprite; spriteRenderer.material = utilData.SpriteRenderer.material; // Console SystemConsole origConsole = utilData.GameObj.GetComponent <SystemConsole>(); SystemConsole console = obj.AddComponent <SystemConsole>(); console.Image = spriteRenderer; console.FreeplayOnly = origConsole.FreeplayOnly; console.onlyFromBelow = origConsole.onlyFromBelow; console.usableDistance = origConsole.usableDistance; console.MinigamePrefab = origConsole.MinigamePrefab; console.useIcon = origConsole.useIcon; // Box Collider if (utilData.GameObj.GetComponent <CircleCollider2D>() != null) { CircleCollider2D origBox = utilData.GameObj.GetComponent <CircleCollider2D>(); CircleCollider2D box = obj.AddComponent <CircleCollider2D>(); box.radius = origBox.radius; box.offset = origBox.offset; box.isTrigger = true; } else { BoxCollider2D origBox = utilData.GameObj.GetComponent <BoxCollider2D>(); BoxCollider2D box = obj.AddComponent <BoxCollider2D>(); box.size = origBox.size; box.offset = origBox.offset; box.isTrigger = true; } // Button PassiveButton origBtn = utilData.GameObj.GetComponent <PassiveButton>(); PassiveButton btn = obj.AddComponent <PassiveButton>(); btn.ClickMask = origBtn.ClickMask; btn.OnMouseOver = new UnityEvent(); btn.OnMouseOut = new UnityEvent(); Action action = console.Use; btn.OnClick.AddListener(action); polus.Add(obj, asset); return(true); }
public bool PreBuild(MapAsset asset) { if (!SAB_SYSTEMS.ContainsKey(asset.type)) { return(true); } SystemTypes sys = SAB_SYSTEMS[asset.type]; // GameObject SabData sabData = AssetDB.sabs[asset.type]; GameObject obj = new GameObject(asset.type); // Sprite Renderer SpriteRenderer spriteRenderer = obj.AddComponent <SpriteRenderer>(); spriteRenderer.sprite = sabData.SpriteRenderer.sprite; spriteRenderer.material = sabData.SpriteRenderer.material; obj.layer = (int)Layer.ShortObjects; // Console Console origConsole = sabData.GameObj.GetComponent <Console>(); Console console = obj.AddComponent <Console>(); console.ConsoleId = origConsole.ConsoleId; console.AllowImpostor = true; console.checkWalls = false; console.GhostsIgnored = true; console.Image = spriteRenderer; console.onlyFromBelow = false; console.onlySameRoom = false; console.usableDistance = 1; console.Room = sys; console.TaskTypes = origConsole.TaskTypes; console.ValidTasks = origConsole.ValidTasks; polus.shipStatus.AllConsoles = AssetHelper.AddToArr(polus.shipStatus.AllConsoles, console); // Box Collider if (sabData.GameObj.GetComponent <CircleCollider2D>() != null) { CircleCollider2D origBox = sabData.GameObj.GetComponent <CircleCollider2D>(); CircleCollider2D box = obj.AddComponent <CircleCollider2D>(); box.radius = origBox.radius; box.offset = origBox.offset; box.isTrigger = true; } else if (sabData.GameObj.GetComponent <BoxCollider2D>() != null) { BoxCollider2D origBox = sabData.GameObj.GetComponent <BoxCollider2D>(); BoxCollider2D box = obj.AddComponent <BoxCollider2D>(); box.size = origBox.size; box.offset = origBox.offset; box.isTrigger = true; } else if (sabData.GameObj.GetComponent <PolygonCollider2D>() != null) { PolygonCollider2D origBox = sabData.GameObj.GetComponent <PolygonCollider2D>(); PolygonCollider2D box = obj.AddComponent <PolygonCollider2D>(); box.points = origBox.points; box.pathCount = origBox.pathCount; box.offset = origBox.offset; box.isTrigger = true; } // Task SabotageTask task = null; StringNames name = StringNames.ExitButton; GameObject sabHolder = new GameObject(asset.id.ToString()); sabHolder.transform.SetParent(sabMgr.transform); if (asset.type == "sab-comms") { task = sabHolder.AddComponent <HudOverrideTask>(); HudOverrideTask castTask = task.Cast <HudOverrideTask>(); HudOverrideTask taskClone = sabData.Behavior.Cast <HudOverrideTask>(); castTask.even = taskClone.even; castTask.isComplete = taskClone.isComplete; castTask.system = polus.shipStatus.Systems[sys].Cast <HudOverrideSystemType>(); name = StringNames.FixComms; } else if (asset.type == "sab-electric") { task = sabHolder.AddComponent <ElectricTask>(); ElectricTask castTask = task.Cast <ElectricTask>(); ElectricTask taskClone = sabData.Behavior.Cast <ElectricTask>(); castTask.even = taskClone.even; castTask.isComplete = taskClone.isComplete; castTask.system = polus.shipStatus.Systems[sys].Cast <SwitchSystem>(); name = StringNames.FixLights; } else if (asset.type == "sab-reactorleft") { task = sabHolder.AddComponent <ReactorTask>(); ReactorTask castTask = task.Cast <ReactorTask>(); ReactorTask taskClone = sabData.Behavior.Cast <ReactorTask>(); castTask.even = taskClone.even; castTask.isComplete = taskClone.isComplete; castTask.reactor = polus.shipStatus.Systems[sys].Cast <ICriticalSabotage>(); name = StringNames.Laboratory; } if (name != StringNames.ExitButton) { SabotageTask origTask = sabData.Behavior.Cast <SabotageTask>(); task.Arrows = new UnhollowerBaseLib.Il2CppReferenceArray <ArrowBehaviour>(2); task.Arrows[0] = sabArrow1; task.Arrows[1] = sabArrow2; task.didContribute = origTask.didContribute; task.Id = origTask.Id; task.Index = origTask.Index; task.LocationDirty = origTask.LocationDirty; task.HasLocation = origTask.HasLocation; task.MinigamePrefab = origTask.MinigamePrefab; task.StartAt = sys; task.TaskType = origTask.TaskType; task.Owner = PlayerControl.LocalPlayer; polus.shipStatus.SpecialTasks = AssetHelper.AddToArr(polus.shipStatus.SpecialTasks, task); List <StringNames> list = new List <StringNames>(polus.shipStatus.SystemNames); list.Add(name); polus.shipStatus.SystemNames = list.ToArray(); SabGenerator.AddSabotage(asset); } // Add to Polus AssetHelper.BuildColliders(asset, obj); polus.Add(obj, asset); return(true); }