// Token: 0x06000054 RID: 84 RVA: 0x000056A8 File Offset: 0x000038A8 public static DungeonFlow CreateRoomTypeSampleFlow(Dungeon dungeon) { DungeonFlow dungeonFlow = SampleFlow.CreateNewFlow(dungeon); dungeonFlow.name = "type_sample_flow"; DungeonFlowNode dungeonFlowNode = SampleFlow.NodeFromAssetName(dungeonFlow, "elevator entrance"); dungeonFlow.FirstNode = dungeonFlowNode; dungeonFlow.AddNodeToFlow(dungeonFlowNode, null); DungeonFlowNode parent = dungeonFlow.FirstNode; DungeonMaterial[] roomMaterialDefinitions = dungeon.roomMaterialDefinitions; Tools.Print <int?>((roomMaterialDefinitions != null) ? new int?(roomMaterialDefinitions.Length) : null, "FFFFFF", false); for (int i = 0; i < dungeon.roomMaterialDefinitions.Length; i++) { bool flag = dungeon.name == OfficialFlows.dungeonPrefabNames[3] && i == 5; if (!flag) { PrototypeDungeonRoom prototypeDungeonRoom = RoomFactory.CreateEmptyRoom(14, 14); prototypeDungeonRoom.overrideRoomVisualType = i; DungeonFlowNode dungeonFlowNode2 = new DungeonFlowNode(dungeonFlow) { overrideExactRoom = prototypeDungeonRoom }; dungeonFlow.AddNodeToFlow(dungeonFlowNode2, parent); parent = dungeonFlowNode2; } } dungeonFlow.AddNodeToFlow(SampleFlow.NodeFromAssetName(dungeonFlow, "exit_room_basic"), parent); dungeon = null; return(dungeonFlow); }
// Token: 0x06000053 RID: 83 RVA: 0x000055AC File Offset: 0x000037AC public static DungeonFlow CreateDebugFlow(Dungeon dungeon) { DungeonFlow dungeonFlow = SampleFlow.CreateEntranceExitFlow(dungeon); dungeonFlow.name = "debug_flow"; DungeonFlowNode dungeonFlowNode = new DungeonFlowNode(dungeonFlow) { overrideExactRoom = RoomFactory.CreateEmptyRoom(12, 12) }; DungeonFlowNode parent = dungeonFlowNode; dungeonFlow.AddNodeToFlow(dungeonFlowNode, dungeonFlow.FirstNode); foreach (RoomFactory.RoomData roomData in RoomFactory.rooms.Values) { string str = "Adding room to flow: "; PrototypeDungeonRoom room = roomData.room; Tools.Log <string>(str + ((room != null) ? room.ToString() : null)); DungeonFlowNode dungeonFlowNode2 = new DungeonFlowNode(dungeonFlow) { overrideExactRoom = roomData.room }; dungeonFlow.AddNodeToFlow(dungeonFlowNode2, parent); dungeonFlowNode = new DungeonFlowNode(dungeonFlow) { overrideExactRoom = RoomFactory.CreateEmptyRoom(12, 12) }; dungeonFlow.AddNodeToFlow(dungeonFlowNode, dungeonFlowNode2); parent = dungeonFlowNode; } dungeon = null; return(dungeonFlow); }
public static DungeonFlow CreateRoomTypeSampleFlow(Dungeon dungeon) { var flow = CreateNewFlow(dungeon); flow.name = "type_sample_flow"; var entrance = NodeFromAssetName(flow, "elevator entrance"); flow.FirstNode = entrance; flow.AddNodeToFlow(entrance, null); //one room for each visual definition DungeonFlowNode lastNode = flow.FirstNode; Tools.Print(dungeon.roomMaterialDefinitions?.Length); for (int i = 0; i < dungeon.roomMaterialDefinitions.Length; i++) { if (dungeon.name == OfficialFlows.dungeonPrefabNames[3] && i == 5) { continue; } var room = RoomFactory.CreateEmptyRoom(14, 14); room.overrideRoomVisualType = i; var shrineNode = new DungeonFlowNode(flow) { overrideExactRoom = room }; flow.AddNodeToFlow(shrineNode, lastNode); lastNode = shrineNode; } //exit flow.AddNodeToFlow(NodeFromAssetName(flow, "exit_room_basic"), lastNode); dungeon = null; return(flow); }
public static DungeonFlow CreateDebugFlow(Dungeon dungeon) { var flow = SampleFlow.CreateEntranceExitFlow(dungeon); flow.name = "debug_flow"; DungeonFlowNode customRoom, hub = new DungeonFlowNode(flow) { overrideExactRoom = RoomFactory.CreateEmptyRoom() }, lastNode = hub; flow.AddNodeToFlow(hub, flow.FirstNode); foreach (var room in RoomFactory.rooms.Values) { Tools.Log("Adding room to flow: " + room.room); customRoom = new DungeonFlowNode(flow) { overrideExactRoom = room.room }; flow.AddNodeToFlow(customRoom, lastNode); hub = new DungeonFlowNode(flow) { overrideExactRoom = RoomFactory.CreateEmptyRoom() }; flow.AddNodeToFlow(hub, customRoom); lastNode = hub; } dungeon = null; return(flow); }
// Token: 0x06000046 RID: 70 RVA: 0x00004038 File Offset: 0x00002238 public static RoomFactory.RoomData CreateEmptyRoomData(int width = 12, int height = 12) { return(new RoomFactory.RoomData { room = RoomFactory.CreateEmptyRoom(width, height), category = "NORMAL", weight = DungeonHandler.GlobalRoomWeight }); }
// Token: 0x0600003D RID: 61 RVA: 0x00003B08 File Offset: 0x00001D08 public static PrototypeDungeonRoom Build(Texture2D texture, RoomFactory.RoomData roomData) { try { PrototypeDungeonRoom prototypeDungeonRoom = RoomFactory.CreateRoomFromTexture(texture); RoomFactory.ApplyRoomData(prototypeDungeonRoom, roomData); prototypeDungeonRoom.UpdatePrecalculatedData(); return(prototypeDungeonRoom); } catch (Exception e) { Tools.PrintError <string>("Failed to build room!", "FF0000"); Tools.PrintException(e, "FF0000"); } return(RoomFactory.CreateEmptyRoom(12, 12)); }
// Token: 0x06000017 RID: 23 RVA: 0x00003680 File Offset: 0x00001880 public GameObject Build() { GameObject result; try { Texture2D textureFromResource = ResourceExtractor.GetTextureFromResource(this.spritePath); GameObject gameObject = SpriteBuilder.SpriteFromResource(this.spritePath, null); string text = (this.modID + ":" + this.name).ToLower().Replace(" ", "_"); //string roomPath = this.roomPath; gameObject.name = text; tk2dSprite component = gameObject.GetComponent <tk2dSprite>(); component.IsPerpendicular = true; component.PlaceAtPositionByAnchor(this.offset, tk2dBaseSprite.Anchor.LowerCenter); Transform transform = new GameObject("talkpoint").transform; transform.position = gameObject.transform.position + this.talkPointOffset; transform.SetParent(gameObject.transform); bool flag = !this.usesCustomColliderOffsetAndSize; bool flag2 = flag; if (flag2) { IntVector2 intVector = new IntVector2(textureFromResource.width, textureFromResource.height); this.colliderOffset = new IntVector2(0, 0); this.colliderSize = new IntVector2(intVector.x, intVector.y / 2); } SpeculativeRigidbody speculativeRigidbody = component.SetUpSpeculativeRigidbody(this.colliderOffset, this.colliderSize); speculativeRigidbody.PixelColliders.Add(new PixelCollider { ColliderGenerationMode = PixelCollider.PixelColliderGeneration.Manual, CollisionLayer = CollisionLayer.PlayerBlocker, IsTrigger = false, BagleUseFirstFrameOnly = false, SpecifyBagelFrame = string.Empty, BagelColliderNumber = 0, ManualOffsetX = this.colliderOffset.x, ManualOffsetY = this.colliderOffset.y, ManualWidth = this.colliderSize.x, ManualHeight = this.colliderSize.y, ManualDiameter = 0, ManualLeftX = 0, ManualLeftY = 0, ManualRightX = 0, ManualRightY = 0, }); speculativeRigidbody.PixelColliders.Add(new PixelCollider { ColliderGenerationMode = PixelCollider.PixelColliderGeneration.Manual, CollisionLayer = CollisionLayer.EnemyBlocker, IsTrigger = false, BagleUseFirstFrameOnly = false, SpecifyBagelFrame = string.Empty, BagelColliderNumber = 0, ManualOffsetX = this.colliderOffset.x, ManualOffsetY = this.colliderOffset.y, ManualWidth = this.colliderSize.x, ManualHeight = this.colliderSize.y, ManualDiameter = 0, ManualLeftX = 0, ManualLeftY = 0, ManualRightX = 0, ManualRightY = 0, }); speculativeRigidbody.PixelColliders.Add(new PixelCollider { ColliderGenerationMode = PixelCollider.PixelColliderGeneration.Manual, CollisionLayer = CollisionLayer.BulletBlocker, IsTrigger = false, BagleUseFirstFrameOnly = false, SpecifyBagelFrame = string.Empty, BagelColliderNumber = 0, ManualOffsetX = this.colliderOffset.x, ManualOffsetY = this.colliderOffset.y, ManualWidth = this.colliderSize.x, ManualHeight = this.colliderSize.y, ManualDiameter = 0, ManualLeftX = 0, ManualLeftY = 0, ManualRightX = 0, ManualRightY = 0, }); speculativeRigidbody.PixelColliders.Add(new PixelCollider { ColliderGenerationMode = PixelCollider.PixelColliderGeneration.Manual, CollisionLayer = CollisionLayer.EnemyBulletBlocker, IsTrigger = false, BagleUseFirstFrameOnly = false, SpecifyBagelFrame = string.Empty, BagelColliderNumber = 0, ManualOffsetX = this.colliderOffset.x, ManualOffsetY = this.colliderOffset.y, ManualWidth = this.colliderSize.x, ManualHeight = this.colliderSize.y, ManualDiameter = 0, ManualLeftX = 0, ManualLeftY = 0, ManualRightX = 0, ManualRightY = 0, }); speculativeRigidbody.PixelColliders.Add(new PixelCollider { ColliderGenerationMode = PixelCollider.PixelColliderGeneration.Manual, CollisionLayer = CollisionLayer.BeamBlocker, IsTrigger = false, BagleUseFirstFrameOnly = false, SpecifyBagelFrame = string.Empty, BagelColliderNumber = 0, ManualOffsetX = this.colliderOffset.x, ManualOffsetY = this.colliderOffset.y, ManualWidth = this.colliderSize.x, ManualHeight = this.colliderSize.y, ManualDiameter = 0, ManualLeftX = 0, ManualLeftY = 0, ManualRightX = 0, ManualRightY = 0, }); OldShrineFactory.CustomShrineController customShrineController = gameObject.AddComponent <OldShrineFactory.CustomShrineController>(); customShrineController.ID = text; customShrineController.roomStyles = this.roomStyles; customShrineController.isBreachShrine = true; customShrineController.offset = this.offset; customShrineController.pixelColliders = speculativeRigidbody.specRigidbody.PixelColliders; customShrineController.factory = this; customShrineController.OnAccept = this.OnAccept; customShrineController.OnDecline = this.OnDecline; customShrineController.CanUse = this.CanUse; bool flag3 = this.interactableComponent != null; bool flag4 = flag3; IPlayerInteractable item; if (flag4) { item = (gameObject.AddComponent(this.interactableComponent) as IPlayerInteractable); } else { SimpleShrine simpleShrine = gameObject.AddComponent <SimpleShrine>(); simpleShrine.isToggle = this.isToggle; simpleShrine.OnAccept = this.OnAccept; simpleShrine.OnDecline = this.OnDecline; simpleShrine.CanUse = this.CanUse; simpleShrine.text = this.text; simpleShrine.acceptText = this.acceptText; simpleShrine.declineText = this.declineText; simpleShrine.talkPoint = transform; item = simpleShrine; } GameObject gameObject2 = ShrineFakePrefab.Clone(gameObject); gameObject2.GetComponent <OldShrineFactory.CustomShrineController>().Copy(customShrineController); gameObject2.name = text; bool flag5 = this.isBreachShrine; bool flag6 = flag5; if (flag6) { bool flag7 = !RoomHandler.unassignedInteractableObjects.Contains(item); bool flag8 = flag7; if (flag8) { RoomHandler.unassignedInteractableObjects.Add(item); } } else { bool flag9 = !this.room; bool flag10 = flag9; if (flag10) { this.room = RoomFactory.CreateEmptyRoom(12, 12); } OldShrineFactory.RegisterShrineRoom(gameObject2, this.room, text, this.offset, this.RoomWeight); } OldShrineFactory.builtShrines.Add(text, gameObject2); result = gameObject; } catch (Exception e) { Tools.PrintException(e, "FF0000"); result = null; } return(result); }
///maybe add some value proofing here (name != null, collider != IntVector2.Zero) public GameObject Build() { try { //Get texture and create sprite Texture2D tex = ResourceExtractor.GetTextureFromResource(spritePath); var shrine = GungeonAPI.SpriteBuilder.SpriteFromResource(spritePath, null, false); //Add (hopefully) unique ID to shrine for tracking string ID = $"{modID}:{name}".ToLower().Replace(" ", "_"); shrine.name = ID; //Position sprite var shrineSprite = shrine.GetComponent <tk2dSprite>(); shrineSprite.IsPerpendicular = true; shrineSprite.PlaceAtPositionByAnchor(offset, tk2dBaseSprite.Anchor.LowerCenter); //Add speech bubble origin var talkPoint = new GameObject("talkpoint").transform; talkPoint.position = shrine.transform.position + talkPointOffset; talkPoint.SetParent(shrine.transform); //Set up collider if (!usesCustomColliderOffsetAndSize) { IntVector2 spriteDimensions = new IntVector2(tex.width, tex.height); colliderOffset = new IntVector2(0, 0); colliderSize = new IntVector2(spriteDimensions.x, spriteDimensions.y / 2); } var body = ItemAPI.SpriteBuilder.SetUpSpeculativeRigidbody(shrineSprite, colliderOffset, colliderSize); //if (!string.IsNullOrEmpty(shadowSpritePath)) //{ // var shadow = ((GameObject)UnityEngine.Object.Instantiate(ResourceCache.Acquire("DefaultShadowSprite"))).GetComponent<tk2dSprite>(); // var shadowSprite = ItemAPI.SpriteBuilder.SpriteFromResource(shadowSpritePath, null, false).GetComponent<tk2dSprite>(); // Tools.Print($"Shadow material: {shadow.renderer.material.name}"); // Tools.Print($"\tShadow color: {shadow.color}"); // Tools.Print($"\tShadow material: {shadowSprite.renderer.material.name}"); // Tools.Print($"\tShadow color: {shadowSprite.color}"); // Tools.ExportTexture(shadow.renderer.material.mainTexture.GetReadable()); // //Tools.ExportTexture(shadowSprite.renderer.material.mainTexture.GetReadable()); // shrineSprite.AttachRenderer(shadow); // shadow.PlaceAtPositionByAnchor(shrineSprite.WorldBottomCenter, tk2dBaseSprite.Anchor.UpperCenter); // //shadow.color = new Color(1, 1, 1, .5f); // //shadow.HeightOffGround = -0.1f; // //shadow.renderer.material = defaultSprite.renderer.material; // DepthLookupManager.ProcessRenderer(shadow.GetComponent<Renderer>(), DepthLookupManager.GungeonSortingLayer.BACKGROUND); // //Tools.LogPropertiesAndFields(defaultSprite); //} var data = shrine.AddComponent <CustomShrineController>(); data.ID = ID; data.roomStyles = roomStyles; data.isBreachShrine = true; data.offset = offset; data.pixelColliders = body.specRigidbody.PixelColliders; data.factory = this; data.OnAccept = OnAccept; data.OnDecline = OnDecline; data.CanUse = CanUse; data.text = text; data.acceptText = acceptText; data.declineText = declineText; if (interactableComponent == null) { var simpInt = shrine.AddComponent <SimpleShrine>(); simpInt.isToggle = this.isToggle; simpInt.OnAccept = this.OnAccept; simpInt.OnDecline = this.OnDecline; simpInt.CanUse = CanUse; simpInt.text = this.text; simpInt.acceptText = this.acceptText; simpInt.declineText = this.declineText; simpInt.talkPoint = talkPoint; } else { shrine.AddComponent(interactableComponent); } shrine.name = ID; if (!isBreachShrine) { if (!room) { room = RoomFactory.CreateEmptyRoom(); } RegisterShrineRoom(shrine, room, ID, offset); } registeredShrines.Add(ID, shrine); FakePrefab.MarkAsFakePrefab(shrine); Tools.Print("Added shrine: " + ID); return(shrine); } catch (Exception e) { Tools.PrintException(e); return(null); } }
// Token: 0x0600009A RID: 154 RVA: 0x00008084 File Offset: 0x00006284 public GameObject Build() { GameObject result; try { Texture2D textureFromResource = ResourceExtractor.GetTextureFromResource(this.spritePath); GameObject gameObject = SpriteBuilder.SpriteFromResource(this.spritePath, null); string text = (this.modID + ":" + this.name).ToLower().Replace(" ", "_"); gameObject.name = text; tk2dSprite component = gameObject.GetComponent <tk2dSprite>(); component.IsPerpendicular = true; component.PlaceAtPositionByAnchor(this.offset, tk2dBaseSprite.Anchor.LowerCenter); Transform transform = new GameObject("talkpoint").transform; transform.position = gameObject.transform.position + this.talkPointOffset; transform.SetParent(gameObject.transform); bool flag = !this.usesCustomColliderOffsetAndSize; bool flag2 = flag; bool flag3 = flag2; if (flag3) { IntVector2 intVector = new IntVector2(textureFromResource.width, textureFromResource.height); this.colliderOffset = new IntVector2(0, 0); this.colliderSize = new IntVector2(intVector.x, intVector.y / 2); } SpeculativeRigidbody speculativeRigidbody = component.SetUpSpeculativeRigidbody(this.colliderOffset, this.colliderSize); ShrineFactory.CustomShrineController customShrineController = gameObject.AddComponent <ShrineFactory.CustomShrineController>(); customShrineController.ID = text; customShrineController.roomStyles = this.roomStyles; customShrineController.isBreachShrine = true; customShrineController.offset = this.offset; customShrineController.pixelColliders = speculativeRigidbody.specRigidbody.PixelColliders; customShrineController.factory = this; customShrineController.OnAccept = this.OnAccept; customShrineController.OnDecline = this.OnDecline; customShrineController.CanUse = this.CanUse; customShrineController.text = this.text; customShrineController.acceptText = this.acceptText; customShrineController.declineText = this.declineText; bool flag4 = this.interactableComponent == null; bool flag5 = flag4; bool flag6 = flag5; if (flag6) { SimpleShrine simpleShrine = gameObject.AddComponent <SimpleShrine>(); simpleShrine.isToggle = this.isToggle; simpleShrine.OnAccept = this.OnAccept; simpleShrine.OnDecline = this.OnDecline; simpleShrine.CanUse = this.CanUse; simpleShrine.text = this.text; simpleShrine.acceptText = this.acceptText; simpleShrine.declineText = this.declineText; simpleShrine.talkPoint = transform; } else { gameObject.AddComponent(this.interactableComponent); } gameObject.name = text; bool flag7 = !this.isBreachShrine; bool flag8 = flag7; bool flag9 = flag8; if (flag9) { bool flag10 = !this.room; bool flag11 = flag10; bool flag12 = flag11; if (flag12) { this.room = RoomFactory.CreateEmptyRoom(12, 12); } ShrineFactory.RegisterShrineRoom(gameObject, this.room, text, this.offset, this.RoomWeight); } ShrineFactory.registeredShrines.Add(text, gameObject); FakePrefab.MarkAsFakePrefab(gameObject); result = gameObject; } catch (Exception e) { Tools.PrintException(e, "FF0000"); result = null; } return(result); }
///maybe add some value proofing here (name != null, collider != IntVector2.Zero) public GameObject Build() { try { //Get texture and create sprite Texture2D tex = ResourceExtractor.GetTextureFromResource(spritePath); var shrine = SpecialItemPack.ItemAPI.SpriteBuilder.SpriteFromResource(spritePath, null, false); //Add (hopefully) unique ID to shrine for tracking string ID = $"{modID}:{name}".ToLower().Replace(" ", "_"); shrine.name = ID; //Position sprite var sprite = shrine.GetComponent <tk2dSprite>(); sprite.IsPerpendicular = true; sprite.PlaceAtPositionByAnchor(offset, tk2dBaseSprite.Anchor.LowerCenter); //Add speech bubble origin var talkPoint = new GameObject("talkpoint").transform; talkPoint.position = shrine.transform.position + talkPointOffset; talkPoint.SetParent(shrine.transform); //Set up collider if (!usesCustomColliderOffsetAndSize) { IntVector2 spriteDimensions = new IntVector2(tex.width, tex.height); colliderOffset = new IntVector2(0, 0); colliderSize = new IntVector2(spriteDimensions.x, spriteDimensions.y / 2); } var body = ItemAPI.SpriteBuilder.SetUpSpeculativeRigidbody(sprite, colliderOffset, colliderSize); var data = shrine.AddComponent <CustomShrineController>(); data.ID = ID; data.roomStyles = roomStyles; data.isBreachShrine = true; data.offset = offset; data.pixelColliders = body.specRigidbody.PixelColliders; data.factory = this; data.OnAccept = OnAccept; data.OnDecline = OnDecline; data.CanUse = CanUse; IPlayerInteractable interactable; //Register as interactable if (interactableComponent != null) { interactable = shrine.AddComponent(interactableComponent) as IPlayerInteractable; } else { var simpInt = shrine.AddComponent <SimpleInteractable>(); simpInt.isToggle = this.isToggle; simpInt.OnAccept = this.OnAccept; simpInt.OnDecline = this.OnDecline; simpInt.CanUse = CanUse; simpInt.text = this.text; simpInt.acceptText = this.acceptText; simpInt.declineText = this.declineText; simpInt.talkPoint = talkPoint; interactable = simpInt as IPlayerInteractable; } var prefab = FakePrefab.Clone(shrine); prefab.GetComponent <CustomShrineController>().Copy(data); prefab.name = ID; if (isBreachShrine) { if (!RoomHandler.unassignedInteractableObjects.Contains(interactable)) { RoomHandler.unassignedInteractableObjects.Add(interactable); } } else { if (!room) { room = RoomFactory.CreateEmptyRoom(); } RegisterShrineRoom(prefab, room, ID, offset); } builtShrines.Add(ID, prefab); Tools.Print("Added shrine: " + ID); return(shrine); } catch (Exception e) { Tools.PrintException(e); return(null); } }