public void OnEnteredRange(PlayerController interactor) { if (!this | m_InUse | m_IsRecievingPlayer | m_WaitingForPlayer | m_IsLocked | m_Disabled) { return; } SpriteOutlineManager.RemoveOutlineFromSprite(m_doorLightSprite, false); SpriteOutlineManager.AddOutlineToSprite(m_doorLightSprite, Color.white, 0.1f, 0f, SpriteOutlineManager.OutlineType.NORMAL); m_doorLightSprite.UpdateZDepth(); }
private void GiveItem(PlayerController player) { m_Interacted = true; PickupObject itemToGive = PickupObjectDatabase.GetById(ItemID); if (itemToGive) { LootEngine.GivePrefabToPlayer(PickupObjectDatabase.GetById(ItemID).gameObject, player); if (itemToGive is Gun) { AkSoundEngine.PostEvent("Play_OBJ_weapon_pickup_01", gameObject); } else { AkSoundEngine.PostEvent("Play_OBJ_item_pickup_01", gameObject); } GameObject VFXObject = Instantiate((GameObject)ResourceCache.Acquire("Global VFX/VFX_Item_Pickup")); if (VFXObject) { tk2dSprite component = VFXObject.GetComponent <tk2dSprite>(); if (component) { component.PlaceAtPositionByAnchor(m_ItemSprite.WorldCenter, tk2dBaseSprite.Anchor.MiddleCenter); component.HeightOffGround = 6f; component.UpdateZDepth(); } } if (m_ParentRoom != null) { m_ParentRoom.DeregisterInteractable(this); } Destroy(m_SubSpriteObject); Destroy(this); } }
public void createManualCrosshairForController(PlayerController playerOwner) { if (BraveInput.GetInstanceForPlayer(playerOwner.PlayerIDX).IsKeyboardAndMouse(false)) { Debug.LogError("Clicker: Attempted to create a crosshair for a user playing on keyboard and mouse."); return; } GameObject newSprite = new GameObject("Controller_Crosshair", new Type[] { typeof(tk2dSprite) }) { layer = 0 }; newSprite.transform.position = (playerOwner.transform.position + new Vector3(0.5f, 2)); tk2dSprite m_ItemSprite = newSprite.AddComponent <tk2dSprite>(); m_ItemSprite.SetSprite(clickerCollection, crosshairSpriteID); m_ItemSprite.PlaceAtPositionByAnchor(newSprite.transform.position, tk2dBaseSprite.Anchor.MiddleCenter); m_ItemSprite.transform.localPosition = m_ItemSprite.transform.localPosition.Quantize(0.0625f); if (m_ItemSprite) { playerOwner.sprite.AttachRenderer(m_ItemSprite); m_ItemSprite.depthUsesTrimmedBounds = true; m_ItemSprite.UpdateZDepth(); } m_extantReticleQuad = m_ItemSprite; }
protected override void OnTrigger(Vector2 damageDirection) { if (m_hasTriggered) { return; } m_hasTriggered = true; if (!gameObject.GetComponent <tk2dSprite>()) { return; } GameObject TossedSpriteVFX = new GameObject(gameObject.name + "Sprite Toss VFX") { layer = LayerMask.NameToLayer("FG_Critical") }; tk2dSprite newSprite = TossedSpriteVFX.AddComponent <tk2dSprite>(); newSprite.Collection = sprite.Collection; newSprite.SetSprite(gameObject.GetComponent <tk2dSprite>().spriteId); newSprite.HeightOffGround = 4; TossedSpriteVFX.transform.position = transform.position; TossedSpriteVFX.transform.rotation = transform.rotation; newSprite.UpdateZDepth(); TossedSpriteVFX.AddComponent <ExpandTossVFX>().Init(); AkSoundEngine.PostEvent("Play_EX_PowBlock_EnemyDeath", TossedSpriteVFX); aiActor.procedurallyOutlined = false; sprite.renderer.enabled = false; // Destroy(gameObject); }
private void AddHat() { if (extantSprites.Count > 0) { for (int i = extantSprites.Count - 1; i >= 0; i--) { UnityEngine.Object.Destroy(extantSprites[i].gameObject); } extantSprites.Clear(); } GameObject newSprite = new GameObject("Hat", new Type[] { typeof(tk2dSprite) }) { layer = Owner.gameObject.layer + 1 }; newSprite.transform.position = (Owner.sprite.WorldCenter + new Vector2(0, .1f)); newSprite.transform.position += new Vector3(0, 0, 10f); tk2dSprite m_ItemSprite = newSprite.AddComponent <tk2dSprite>(); extantSprites.Add(newSprite); m_ItemSprite.SetSprite(HatVFXCollection, Hat1ID); m_ItemSprite.PlaceAtPositionByAnchor(newSprite.transform.position, tk2dBaseSprite.Anchor.LowerCenter); m_ItemSprite.transform.localPosition = m_ItemSprite.transform.localPosition.Quantize(0.0625f); newSprite.transform.parent = Owner.transform; if (m_ItemSprite) { Owner.sprite.AttachRenderer(m_ItemSprite); m_ItemSprite.depthUsesTrimmedBounds = true; m_ItemSprite.IsPerpendicular = true; m_ItemSprite.UpdateZDepth(); m_ItemSprite.HeightOffGround = 0.1f; } Owner.sprite.UpdateZDepth(); }
private void CreateOrbital(PlayerController player) { psiGun = SpriteBuilder.SpriteFromResource("Items/Resources/psi_gun_idle_001.png"); ItemAPI.FakePrefab.MarkAsFakePrefab(psiGun); DontDestroyOnLoad(psiGun); tk2dSprite sprite = psiGun.GetComponent <tk2dSprite>(); sprite.HeightOffGround = .1f; sprite.UpdateZDepth(); sprite.PlaceAtPositionByAnchor(player.CenterPosition, tk2dBaseSprite.Anchor.MiddleCenter); SpecialOrbital specialOrbital = psiGun.AddComponent <SpecialOrbital>(); specialOrbital.owner = player; specialOrbital.shouldRotate = true; specialOrbital.orbitingMode = cachedOrbitingMode; specialOrbital.perfectOrbitFactor = 10; specialOrbital.canShoot = true; specialOrbital.doesBurstshot = false; specialOrbital.burstAmount = 3; specialOrbital.timeBetweenBurstShots = .08f; specialOrbital.canShootEnemyOrbiter = true; specialOrbital.doesReload = false; specialOrbital.reloadTime = 1.2f; specialOrbital.doesPostProcess = true; specialOrbital.fireCooldown = .6f; specialOrbital.damageAffectedByPlayerStats = true; specialOrbital.cooldownAffectedByPlayerStats = true; Projectile proj = Instantiate <Projectile>(psiGunProj); specialOrbital.projectile = proj; //Fix orbital shooting }
protected override void OnTrigger(Vector2 damageDirection) { if (m_hasTriggered) { return; } m_hasTriggered = true; if (!gameObject.GetComponent <tk2dSprite>()) { return; } if (aiActor) { aiActor.SetOutlines(false); } GameObject TossedSpriteVFX = new GameObject(gameObject.name + "Sprite Toss VFX") { layer = LayerMask.NameToLayer("Unoccluded") }; tk2dSprite newSprite = TossedSpriteVFX.AddComponent <tk2dSprite>(); if (!string.IsNullOrEmpty(specificSpriteName)) { newSprite.SetSprite(sprite.Collection, specificSpriteName); } else { newSprite.SetSprite(sprite.Collection, gameObject.GetComponent <tk2dSprite>().spriteId); } newSprite.HeightOffGround = 4; TossedSpriteVFX.SetLayerRecursively(LayerMask.NameToLayer("Unoccluded")); TossedSpriteVFX.transform.position = transform.position; TossedSpriteVFX.transform.localScale = transform.localScale; if (applyRotation) { TossedSpriteVFX.transform.rotation = transform.rotation; } newSprite.UpdateZDepth(); ExpandTossVFX tossVFX = TossedSpriteVFX.AddComponent <ExpandTossVFX>(); tossVFX.DoRotation = applyRotation; tossVFX.MovementSpeed1 = PopupSpeed; tossVFX.MovementSpeed2 = DropSpeed; tossVFX.Init(); if (isPowBlockDeath) { AkSoundEngine.PostEvent("Play_EX_PowBlock_EnemyDeath", TossedSpriteVFX); } sprite.renderer.enabled = false; }
private IEnumerator DepthLerp(DungeonDoorController self, tk2dSprite targetSprite, float targetDepth, float duration, DungeonDoorController.DoorModule m = null, bool isSpecialHorizontalTopCase = false) { bool m_open = ReflectionHelpers.ReflectGetField <bool>(typeof(DungeonDoorController), "m_open", self); if (m != null) { if (!m_open) { targetSprite.IsPerpendicular = true; } m.isLerping = true; } float elapsed = 0f; float startingDepth = targetSprite.HeightOffGround; while (elapsed < duration) { elapsed += BraveTime.DeltaTime; float t = elapsed / duration; targetSprite.HeightOffGround = Mathf.Lerp(startingDepth, targetDepth, t); if (ReflectionHelpers.ReflectGetField <bool>(typeof(DungeonDoorController), "m_open", self) && isSpecialHorizontalTopCase) { targetSprite.depthUsesTrimmedBounds = false; targetSprite.HeightOffGround = -5.25f; } targetSprite.UpdateZDepth(); yield return(null); } targetSprite.HeightOffGround = (targetSprite.depthUsesTrimmedBounds ? targetDepth : -5.25f); targetSprite.UpdateZDepth(); if (m != null) { if (ReflectionHelpers.ReflectGetField <bool>(typeof(DungeonDoorController), "m_open", self)) { targetSprite.IsPerpendicular = m.openPerpendicular; } m.isLerping = false; } yield break; }
private void SpawnNewShadow() { if (this.m_inactiveShadows.Count == 0) { this.CreateInactiveShadow(); } LinkedListNode <ImprovedAfterImage.Shadow> first = this.m_inactiveShadows.First; tk2dSprite sprite = first.Value.sprite; this.m_inactiveShadows.RemoveFirst(); if (!sprite || !sprite.renderer) { return; } first.Value.timer = this.shadowLifetime; sprite.SetSprite(base.sprite.Collection, base.sprite.spriteId); sprite.transform.position = base.sprite.transform.position; sprite.transform.rotation = base.sprite.transform.rotation; sprite.scale = base.sprite.scale; sprite.usesOverrideMaterial = true; sprite.IsPerpendicular = true; if (sprite.renderer && IsRandomShader) { sprite.renderer.enabled = true; sprite.renderer.material.shader = shaders[(int)UnityEngine.Random.Range(0, shaders.Count)]; if (sprite.renderer.material.shader == shaders[3]) { sprite.renderer.sharedMaterial.SetFloat("_EmissivePower", this.minEmission); sprite.renderer.sharedMaterial.SetFloat("_Opacity", 1f); sprite.renderer.sharedMaterial.SetColor("_DashColor", Color.HSVToRGB(UnityEngine.Random.value, 1.0f, 1.0f)); } if (sprite.renderer.material.shader == shaders[0]) { sprite.renderer.sharedMaterial.SetFloat("_AllColorsToggle", 1f); } } else if (sprite.renderer) { sprite.renderer.enabled = true; sprite.renderer.material.shader = (this.OverrideImageShader ?? ShaderCache.Acquire("Brave/Internal/HighPriestAfterImage")); sprite.renderer.sharedMaterial.SetFloat("_EmissivePower", this.minEmission); sprite.renderer.sharedMaterial.SetFloat("_Opacity", 1f); sprite.renderer.sharedMaterial.SetColor("_DashColor", this.dashColor); sprite.renderer.sharedMaterial.SetFloat("_AllColorsToggle", 1f); } sprite.HeightOffGround = this.targetHeight; sprite.UpdateZDepth(); this.m_activeShadows.AddLast(first); }
private void TestOrbital(PlayerController player) { GameObject newOBJ = SpriteBuilder.SpriteFromResource("Items/Resources/hat_i_stole.png"); ItemAPI.FakePrefab.MarkAsFakePrefab(newOBJ); tk2dSprite sprite = newOBJ.GetComponent <tk2dSprite>(); sprite.HeightOffGround = .1f; sprite.UpdateZDepth(); sprite.PlaceAtPositionByAnchor(player.CenterPosition, tk2dBaseSprite.Anchor.MiddleCenter); SpecialOrbital specialOrbital = newOBJ.AddComponent <SpecialOrbital>(); specialOrbital.owner = player; specialOrbital.orbitingMode = SpecialOrbital.OrbitingMode.ENEMY; }
private PickupObject OpenS(PlayerController user) { PickupObject.ItemQuality itemQuality = PickupObject.ItemQuality.S; PickupObject itemOfTypeAndQuality = (UnityEngine.Random.value >= 0.5f) ? LootEngine.GetItemOfTypeAndQuality <PickupObject>(itemQuality, GameManager.Instance.RewardManager.GunsLootTable, false) : LootEngine.GetItemOfTypeAndQuality <PickupObject>(itemQuality, GameManager.Instance.RewardManager.ItemsLootTable, false); DebrisObject debrisObject = LootEngine.SpawnItem(itemOfTypeAndQuality.gameObject, user.CenterPosition, Vector2.up, 1f, true, true, false); if (debrisObject) { Vector2 v = (!debrisObject.sprite) ? (debrisObject.transform.position.XY() + new Vector2(0.5f, 0.5f)) : debrisObject.sprite.WorldCenter; GameObject gameObject = SpawnManager.SpawnVFX((GameObject)BraveResources.Load("Global VFX/VFX_BlackPhantomDeath", ".prefab"), v, Quaternion.identity, false); if (gameObject && gameObject.GetComponent <tk2dSprite>()) { tk2dSprite component = gameObject.GetComponent <tk2dSprite>(); component.HeightOffGround = 5f; component.UpdateZDepth(); } return(debrisObject.GetComponentInChildren <PickupObject>()); } return(null); }
public void ConfigureOnPlacement(RoomHandler room) { m_ParentRoom = room; if (PickupObjectDatabase.GetById(ItemID) && (PickupObjectDatabase.GetById(ItemID).sprite as tk2dSprite) != null) { m_SubSpriteObject = new GameObject("Item Display Object", new Type[] { typeof(tk2dSprite) }) { layer = 0 }; m_SubSpriteObject.transform.position = (transform.position + new Vector3(0.95f, 1)); m_ItemSprite = m_SubSpriteObject.GetComponent <tk2dSprite>(); ExpandUtility.DuplicateSprite(m_ItemSprite, (PickupObjectDatabase.GetById(ItemID).sprite as tk2dSprite)); if (m_ParentRoom != null) { m_SubSpriteObject.transform.parent = m_ParentRoom.hierarchyParent; } if (AddOutline) { SpriteOutlineManager.AddOutlineToSprite(m_ItemSprite, BaseOutlineColor, 0.1f, 0f, SpriteOutlineManager.OutlineType.NORMAL); } } sprite.HeightOffGround = -2; if (m_ItemSprite) { sprite.AttachRenderer(m_ItemSprite); if (AddOutline) { SpriteOutlineManager.AddOutlineToSprite(m_ItemSprite, BaseOutlineColor, 0.1f, 0f, SpriteOutlineManager.OutlineType.NORMAL); } m_ItemSprite.HeightOffGround = 0.5f; m_ItemSprite.depthUsesTrimmedBounds = true; m_ItemSprite.UpdateZDepth(); } sprite.UpdateZDepth(); }
private void GiveItem(PlayerController player) { m_Interacted = true; if (minimapIconInstance != null) { Minimap.Instance.DeregisterRoomIcon(m_ParentRoom, minimapIconInstance); } if (contents) { LootEngine.GivePrefabToPlayer(contents.gameObject, player); if (contents is Gun) { AkSoundEngine.PostEvent("Play_OBJ_weapon_pickup_01", gameObject); } else { AkSoundEngine.PostEvent("Play_OBJ_item_pickup_01", gameObject); } GameObject VFXObject = Instantiate((GameObject)ResourceCache.Acquire("Global VFX/VFX_Item_Pickup")); if (VFXObject) { tk2dSprite component = VFXObject.GetComponent <tk2dSprite>(); if (component) { component.PlaceAtPositionByAnchor(m_itemDisplaySprite.WorldCenter, tk2dBaseSprite.Anchor.MiddleCenter); component.HeightOffGround = 6f; component.UpdateZDepth(); } } } if (m_ParentRoom != null) { m_ParentRoom.DeregisterInteractable(this); } Destroy(m_itemDisplaySprite); Destroy(spawnTransform.gameObject); Destroy(this); }
public void ShowSprite(tk2dSpriteCollectionData encounterIconCollection, int spriteID) { if (!encounterIconCollection) { return; } if (base.gameActor) { if (extantSprite) { Destroy(extantSprite); } extantSprite = new GameObject("Item Hologram", new Type[] { typeof(tk2dSprite) }) { layer = 0 }; extantSprite.transform.position = (transform.position + new Vector3(0.5f, 2)); m_ItemSprite = extantSprite.AddComponent <tk2dSprite>(); // CloningAndDuplication.DuplicateSprite(m_ItemSprite, sprite as tk2dSprite); m_ItemSprite.SetSprite(encounterIconCollection, spriteID); m_ItemSprite.PlaceAtPositionByAnchor(extantSprite.transform.position, tk2dBaseSprite.Anchor.LowerCenter); m_ItemSprite.transform.localPosition = m_ItemSprite.transform.localPosition.Quantize(0.0625f); if (base.gameActor != null) { extantSprite.transform.parent = base.gameActor.transform; } if (m_ItemSprite) { sprite.AttachRenderer(m_ItemSprite); m_ItemSprite.depthUsesTrimmedBounds = true; m_ItemSprite.UpdateZDepth(); } sprite.UpdateZDepth(); ApplyHologramShader(m_ItemSprite, hologramIsGreen); } }
public static void BuildPrefab(AssetBundle expandSharedAssets1) { ExpandPrefabs.EXBootlegRoomObject = expandSharedAssets1.LoadAsset <GameObject>("BootlegRoomPrefab"); ExpandPrefabs.EXBootlegRoomDoorTriggers = expandSharedAssets1.LoadAsset <GameObject>("BootlegRoomDoorTriggers"); GameObject m_BorderObject_West = expandSharedAssets1.LoadAsset <GameObject>("BootlegRoomBorder_West"); GameObject m_BorderObject_East = expandSharedAssets1.LoadAsset <GameObject>("BootlegRoomBorder_East"); GameObject m_BorderObject_North = expandSharedAssets1.LoadAsset <GameObject>("BootlegRoomBorder_North"); GameObject m_BorderObject_South = expandSharedAssets1.LoadAsset <GameObject>("BootlegRoomBorder_South"); GameObject m_DoorFrameObject = expandSharedAssets1.LoadAsset <GameObject>("BootlegRoomDoorFramesTop"); GameObject m_DoorObject = expandSharedAssets1.LoadAsset <GameObject>("BootlegRoomDoorFrames"); GameObject m_DoorBlockObject_West = expandSharedAssets1.LoadAsset <GameObject>("BootlegRoomDoorBlocker_West"); GameObject m_DoorBlockObject_East = expandSharedAssets1.LoadAsset <GameObject>("BootlegRoomDoorBlocker_East"); GameObject m_DoorBlockObject_South = expandSharedAssets1.LoadAsset <GameObject>("BootlegRoomDoorBlocker_South"); GameObject m_DoorBlockObject_North = expandSharedAssets1.LoadAsset <GameObject>("BootlegRoomDoorBlocker_North"); m_BorderObject_West.transform.SetParent(ExpandPrefabs.EXBootlegRoomObject.transform); m_BorderObject_East.transform.SetParent(ExpandPrefabs.EXBootlegRoomObject.transform); m_BorderObject_North.transform.SetParent(ExpandPrefabs.EXBootlegRoomObject.transform); m_BorderObject_South.transform.SetParent(ExpandPrefabs.EXBootlegRoomObject.transform); m_DoorFrameObject.transform.SetParent(ExpandPrefabs.EXBootlegRoomObject.transform); m_BorderObject_West.transform.localPosition -= new Vector3(3, 3); m_BorderObject_East.transform.localPosition -= new Vector3(3, 3); m_BorderObject_North.transform.localPosition -= new Vector3(3, 3); m_BorderObject_South.transform.localPosition -= new Vector3(3, 3); m_DoorObject.transform.SetParent(ExpandPrefabs.EXBootlegRoomDoorTriggers.transform); m_DoorBlockObject_West.transform.SetParent(ExpandPrefabs.EXBootlegRoomDoorTriggers.transform); m_DoorBlockObject_East.transform.SetParent(ExpandPrefabs.EXBootlegRoomDoorTriggers.transform); m_DoorBlockObject_South.transform.SetParent(ExpandPrefabs.EXBootlegRoomDoorTriggers.transform); m_DoorBlockObject_North.transform.SetParent(ExpandPrefabs.EXBootlegRoomDoorTriggers.transform); // ExpandPrefabs.EXBootlegRoomObject.SetActive(false); // ExpandPrefabs.EXBootlegRoomDoorTriggers.SetActive(false); ItemBuilder.AddSpriteToObject(ExpandPrefabs.EXBootlegRoomObject, expandSharedAssets1.LoadAsset <Texture2D>("BootlegRoom_BottomLayer"), false, false); ItemBuilder.AddSpriteToObject(m_BorderObject_West, expandSharedAssets1.LoadAsset <Texture2D>("BootlegRoom_ExitTiles_West.png"), false, false); ItemBuilder.AddSpriteToObject(m_BorderObject_East, expandSharedAssets1.LoadAsset <Texture2D>("BootlegRoom_ExitTiles_East.png"), false, false); ItemBuilder.AddSpriteToObject(m_BorderObject_North, expandSharedAssets1.LoadAsset <Texture2D>("BootlegRoom_ExitTiles_North.png"), false, false); ItemBuilder.AddSpriteToObject(m_BorderObject_South, expandSharedAssets1.LoadAsset <Texture2D>("BootlegRoom_ExitTiles_South.png"), false, false); ItemBuilder.AddSpriteToObject(m_DoorFrameObject, expandSharedAssets1.LoadAsset <Texture2D>("BootlegRoom_TopLayer"), false, false); ItemBuilder.AddSpriteToObject(m_DoorObject, expandSharedAssets1.LoadAsset <Texture2D>("BootlegRoom_Doors"), false, false); ItemBuilder.AddSpriteToObject(m_DoorBlockObject_West, expandSharedAssets1.LoadAsset <Texture2D>("BootlegRoom_DoorBlock_West"), false, false); ItemBuilder.AddSpriteToObject(m_DoorBlockObject_East, expandSharedAssets1.LoadAsset <Texture2D>("BootlegRoom_DoorBlock_East"), false, false); ItemBuilder.AddSpriteToObject(m_DoorBlockObject_South, expandSharedAssets1.LoadAsset <Texture2D>("BootlegRoom_DoorBlock_South"), false, false); ItemBuilder.AddSpriteToObject(m_DoorBlockObject_North, expandSharedAssets1.LoadAsset <Texture2D>("BootlegRoom_DoorBlock_North"), false, false); tk2dSprite m_BootlegRoomSprite = ExpandPrefabs.EXBootlegRoomObject.GetComponent <tk2dSprite>(); m_BootlegRoomSprite.HeightOffGround = -3f; m_BootlegRoomSprite.UpdateZDepth(); tk2dSprite m_BorderSprite_West = m_BorderObject_West.GetComponent <tk2dSprite>(); m_BorderSprite_West.HeightOffGround = -3f; m_BorderSprite_West.UpdateZDepth(); tk2dSprite m_BorderSprite_East = m_BorderObject_East.GetComponent <tk2dSprite>(); m_BorderSprite_East.HeightOffGround = -3f; m_BorderSprite_East.UpdateZDepth(); tk2dSprite m_BorderSprite_North = m_BorderObject_North.GetComponent <tk2dSprite>(); m_BorderSprite_North.HeightOffGround = -3f; m_BorderSprite_North.UpdateZDepth(); tk2dSprite m_BorderSprite_South = m_BorderObject_South.GetComponent <tk2dSprite>(); m_BorderSprite_South.HeightOffGround = -3f; m_BorderSprite_South.UpdateZDepth(); tk2dSprite m_DoorSprites = m_DoorObject.GetComponent <tk2dSprite>(); m_DoorSprites.HeightOffGround = -2.5f; m_DoorSprites.UpdateZDepth(); ExpandUtility.GenerateOrAddToRigidBody(ExpandPrefabs.EXBootlegRoomObject, CollisionLayer.HighObstacle, PixelCollider.PixelColliderGeneration.Manual, dimensions: new IntVector2(1, 6)); ExpandUtility.GenerateOrAddToRigidBody(ExpandPrefabs.EXBootlegRoomObject, CollisionLayer.HighObstacle, PixelCollider.PixelColliderGeneration.Manual, dimensions: new IntVector2(1, 6), offset: new IntVector2(0, 8)); ExpandUtility.GenerateOrAddToRigidBody(ExpandPrefabs.EXBootlegRoomObject, CollisionLayer.HighObstacle, PixelCollider.PixelColliderGeneration.Manual, dimensions: new IntVector2(1, 6), offset: new IntVector2(19, 0)); ExpandUtility.GenerateOrAddToRigidBody(ExpandPrefabs.EXBootlegRoomObject, CollisionLayer.HighObstacle, PixelCollider.PixelColliderGeneration.Manual, dimensions: new IntVector2(1, 6), offset: new IntVector2(19, 8)); ExpandUtility.GenerateOrAddToRigidBody(ExpandPrefabs.EXBootlegRoomObject, CollisionLayer.HighObstacle, PixelCollider.PixelColliderGeneration.Manual, dimensions: new IntVector2(8, 1), offset: new IntVector2(1, 0)); ExpandUtility.GenerateOrAddToRigidBody(ExpandPrefabs.EXBootlegRoomObject, CollisionLayer.HighObstacle, PixelCollider.PixelColliderGeneration.Manual, dimensions: new IntVector2(8, 1), offset: new IntVector2(11, 0)); ExpandUtility.GenerateOrAddToRigidBody(ExpandPrefabs.EXBootlegRoomObject, CollisionLayer.HighObstacle, PixelCollider.PixelColliderGeneration.Manual, dimensions: new IntVector2(8, 1), offset: new IntVector2(1, 13)); ExpandUtility.GenerateOrAddToRigidBody(ExpandPrefabs.EXBootlegRoomObject, CollisionLayer.HighObstacle, PixelCollider.PixelColliderGeneration.Manual, dimensions: new IntVector2(8, 1), offset: new IntVector2(11, 13)); ExpandUtility.GenerateOrAddToRigidBody(ExpandPrefabs.EXBootlegRoomObject, CollisionLayer.LowObstacle, PixelCollider.PixelColliderGeneration.Manual, UsesPixelsAsUnitSize: true, dimensions: new IntVector2(8, 80), offset: new IntVector2(16, 16)); ExpandUtility.GenerateOrAddToRigidBody(ExpandPrefabs.EXBootlegRoomObject, CollisionLayer.LowObstacle, PixelCollider.PixelColliderGeneration.Manual, UsesPixelsAsUnitSize: true, dimensions: new IntVector2(8, 80), offset: new IntVector2(16, 128)); ExpandUtility.GenerateOrAddToRigidBody(ExpandPrefabs.EXBootlegRoomObject, CollisionLayer.LowObstacle, PixelCollider.PixelColliderGeneration.Manual, UsesPixelsAsUnitSize: true, dimensions: new IntVector2(8, 80), offset: new IntVector2(296, 16)); ExpandUtility.GenerateOrAddToRigidBody(ExpandPrefabs.EXBootlegRoomObject, CollisionLayer.LowObstacle, PixelCollider.PixelColliderGeneration.Manual, UsesPixelsAsUnitSize: true, dimensions: new IntVector2(8, 80), offset: new IntVector2(296, 128)); ExpandUtility.GenerateOrAddToRigidBody(ExpandPrefabs.EXBootlegRoomObject, CollisionLayer.LowObstacle, PixelCollider.PixelColliderGeneration.Manual, UsesPixelsAsUnitSize: true, dimensions: new IntVector2(120, 8), offset: new IntVector2(24, 16)); ExpandUtility.GenerateOrAddToRigidBody(ExpandPrefabs.EXBootlegRoomObject, CollisionLayer.LowObstacle, PixelCollider.PixelColliderGeneration.Manual, UsesPixelsAsUnitSize: true, dimensions: new IntVector2(120, 8), offset: new IntVector2(176, 16)); ExpandUtility.GenerateOrAddToRigidBody(ExpandPrefabs.EXBootlegRoomObject, CollisionLayer.LowObstacle, PixelCollider.PixelColliderGeneration.Manual, UsesPixelsAsUnitSize: true, dimensions: new IntVector2(120, 8), offset: new IntVector2(24, 200)); ExpandUtility.GenerateOrAddToRigidBody(ExpandPrefabs.EXBootlegRoomObject, CollisionLayer.LowObstacle, PixelCollider.PixelColliderGeneration.Manual, UsesPixelsAsUnitSize: true, dimensions: new IntVector2(120, 8), offset: new IntVector2(176, 200)); /*ExpandUtility.GenerateOrAddToRigidBody(ExpandPrefabs.EXBootlegRoomObject, CollisionLayer.EnemyBlocker, PixelCollider.PixelColliderGeneration.Manual, UsesPixelsAsUnitSize: true, dimensions: new IntVector2(8, 80), offset: new IntVector2(16, 16)); * ExpandUtility.GenerateOrAddToRigidBody(ExpandPrefabs.EXBootlegRoomObject, CollisionLayer.EnemyBlocker, PixelCollider.PixelColliderGeneration.Manual, UsesPixelsAsUnitSize: true, dimensions: new IntVector2(8, 80), offset: new IntVector2(16, 128)); * ExpandUtility.GenerateOrAddToRigidBody(ExpandPrefabs.EXBootlegRoomObject, CollisionLayer.EnemyBlocker, PixelCollider.PixelColliderGeneration.Manual, UsesPixelsAsUnitSize: true, dimensions: new IntVector2(8, 80), offset: new IntVector2(296, 16)); * ExpandUtility.GenerateOrAddToRigidBody(ExpandPrefabs.EXBootlegRoomObject, CollisionLayer.EnemyBlocker, PixelCollider.PixelColliderGeneration.Manual, UsesPixelsAsUnitSize: true, dimensions: new IntVector2(8, 80), offset: new IntVector2(296, 128)); * ExpandUtility.GenerateOrAddToRigidBody(ExpandPrefabs.EXBootlegRoomObject, CollisionLayer.EnemyBlocker, PixelCollider.PixelColliderGeneration.Manual, UsesPixelsAsUnitSize: true, dimensions: new IntVector2(120, 8), offset: new IntVector2(24, 16)); * ExpandUtility.GenerateOrAddToRigidBody(ExpandPrefabs.EXBootlegRoomObject, CollisionLayer.EnemyBlocker, PixelCollider.PixelColliderGeneration.Manual, UsesPixelsAsUnitSize: true, dimensions: new IntVector2(120, 8), offset: new IntVector2(176, 16)); * ExpandUtility.GenerateOrAddToRigidBody(ExpandPrefabs.EXBootlegRoomObject, CollisionLayer.EnemyBlocker, PixelCollider.PixelColliderGeneration.Manual, UsesPixelsAsUnitSize: true, dimensions: new IntVector2(120, 8), offset: new IntVector2(24, 200)); * ExpandUtility.GenerateOrAddToRigidBody(ExpandPrefabs.EXBootlegRoomObject, CollisionLayer.EnemyBlocker, PixelCollider.PixelColliderGeneration.Manual, UsesPixelsAsUnitSize: true, dimensions: new IntVector2(120, 8), offset: new IntVector2(176, 200));*/ ExpandUtility.GenerateOrAddToRigidBody(ExpandPrefabs.EXBootlegRoomDoorTriggers, CollisionLayer.Trap, PixelCollider.PixelColliderGeneration.Manual, IsTrigger: true, dimensions: new IntVector2(16, 10), offset: new IntVector2(2, 2)); ExpandBootlegRoomPlaceable m_BootlegRoomPlacable = ExpandPrefabs.EXBootlegRoomObject.AddComponent <ExpandBootlegRoomPlaceable>(); m_BootlegRoomPlacable.ExitTiles_West = m_BorderObject_West; m_BootlegRoomPlacable.ExitTiles_East = m_BorderObject_East; m_BootlegRoomPlacable.ExitTiles_North = m_BorderObject_North; m_BootlegRoomPlacable.ExitTiles_South = m_BorderObject_South; m_BootlegRoomPlacable.DoorFrames = m_DoorFrameObject; ExpandBootlegRoomDoorsPlacables m_BootlegDoorBlockersPlacable = ExpandPrefabs.EXBootlegRoomDoorTriggers.AddComponent <ExpandBootlegRoomDoorsPlacables>(); m_BootlegDoorBlockersPlacable.Doors = m_DoorObject; m_BootlegDoorBlockersPlacable.DoorBlocker_West = m_DoorBlockObject_West; m_BootlegDoorBlockersPlacable.DoorBlocker_East = m_DoorBlockObject_East; m_BootlegDoorBlockersPlacable.DoorBlocker_South = m_DoorBlockObject_South; m_BootlegDoorBlockersPlacable.DoorBlocker_North = m_DoorBlockObject_North; /*FakePrefab.MarkAsFakePrefab(ExpandPrefabs.EXBootlegRoomObject); * FakePrefab.MarkAsFakePrefab(ExpandPrefabs.EXBootlegRoomDoorTriggers); * DontDestroyOnLoad(ExpandPrefabs.EXBootlegRoomObject); * DontDestroyOnLoad(ExpandPrefabs.EXBootlegRoomDoorTriggers);*/ }
private IEnumerator ShowChargeLevel(GameActor gunOwner, int chargeLevel) { if (extantSprites.Count > 0) { for (int i = extantSprites.Count - 1; i >= 0; i--) { UnityEngine.Object.Destroy(extantSprites[i].gameObject); } extantSprites.Clear(); } GameObject newSprite = new GameObject("Level Popup", new Type[] { typeof(tk2dSprite) }) { layer = 0 }; newSprite.transform.position = (gunOwner.transform.position + new Vector3(0.5f, 2)); tk2dSprite m_ItemSprite = newSprite.AddComponent <tk2dSprite>(); extantSprites.Add(newSprite); int spriteID = -1; switch (chargeLevel) { case 1: spriteID = Meter1ID; break; case 2: spriteID = Meter2ID; break; case 3: spriteID = Meter3ID; break; case 4: spriteID = Meter4ID; break; case 5: spriteID = Meter5ID; break; } m_ItemSprite.SetSprite(PumpChargeShotgun.GunVFXCollection, spriteID); m_ItemSprite.PlaceAtPositionByAnchor(newSprite.transform.position, tk2dBaseSprite.Anchor.LowerCenter); m_ItemSprite.transform.localPosition = m_ItemSprite.transform.localPosition.Quantize(0.0625f); newSprite.transform.parent = gunOwner.transform; if (m_ItemSprite) { sprite.AttachRenderer(m_ItemSprite); m_ItemSprite.depthUsesTrimmedBounds = true; m_ItemSprite.UpdateZDepth(); } sprite.UpdateZDepth(); yield return(new WaitForSeconds(2)); if (newSprite) { extantSprites.Remove(newSprite); Destroy(newSprite.gameObject); } yield break; }
public void PlaceCorruptTiles(Dungeon dungeon, RoomHandler roomHandler = null, GameObject parentObject = null, bool corruptWallsOnly = false, bool isLeadKeyRoom = false) { bool m_CorruptedSecretRoomsPresent = false; if (roomHandler == null) { foreach (RoomHandler room in dungeon.data.rooms) { if (room.GetRoomName() != null) { if (room.GetRoomName().ToLower().StartsWith("expand apache corrupted secret")) { m_CorruptedSecretRoomsPresent = true; break; } } } } if (roomHandler == null && dungeon.IsGlitchDungeon) { if (StaticReferenceManager.AllNpcs != null && StaticReferenceManager.AllNpcs.Count > 0) { foreach (TalkDoerLite npc in StaticReferenceManager.AllNpcs) { npc.SpeaksGleepGlorpenese = true; } } } else if (roomHandler != null && StaticReferenceManager.AllNpcs != null && StaticReferenceManager.AllNpcs.Count > 0) { foreach (TalkDoerLite npc in StaticReferenceManager.AllNpcs) { if (npc.GetAbsoluteParentRoom() == roomHandler) { npc.SpeaksGleepGlorpenese = true; if (npc.GetAbsoluteParentRoom() != null && !string.IsNullOrEmpty(npc.GetAbsoluteParentRoom().GetRoomName())) { if (npc.GetAbsoluteParentRoom().GetRoomName().ToLower().StartsWith("expand apache corrupted secret")) { ExpandShaders.Instance.ApplyGlitchShader(npc.GetComponent <tk2dBaseSprite>()); } } } } } if (!dungeon.IsGlitchDungeon && roomHandler == null && !m_CorruptedSecretRoomsPresent) { return; } if (dungeon.IsGlitchDungeon | roomHandler != null) { m_CorruptedSecretRoomsPresent = false; } tk2dSpriteCollectionData dungeonCollection = dungeon.tileIndices.dungeonCollection; // Used for debug read out information int CorruptWallTilesPlaced = 0; int CorruptOpenAreaTilesPlaced = 0; int iterations = 0; GameObject GlitchedTileObject = new GameObject("GlitchTile_" + UnityEngine.Random.Range(1000000, 9999999)) { layer = 22 }; if (parentObject != null) { GlitchedTileObject.transform.parent = parentObject.transform; } GlitchedTileObject.AddComponent <tk2dSprite>(); tk2dSprite glitchSprite = GlitchedTileObject.GetComponent <tk2dSprite>(); glitchSprite.Collection = dungeonCollection; glitchSprite.SetSprite(glitchSprite.Collection, 22); glitchSprite.ignoresTiltworldDepth = false; glitchSprite.depthUsesTrimmedBounds = false; glitchSprite.allowDefaultLayer = false; glitchSprite.OverrideMaterialMode = tk2dBaseSprite.SpriteMaterialOverrideMode.NONE; glitchSprite.independentOrientation = false; glitchSprite.hasOffScreenCachedUpdate = false; glitchSprite.CachedPerpState = tk2dBaseSprite.PerpendicularState.PERPENDICULAR; glitchSprite.SortingOrder = 2; glitchSprite.IsBraveOutlineSprite = false; glitchSprite.IsZDepthDirty = false; glitchSprite.ApplyEmissivePropertyBlock = false; glitchSprite.GenerateUV2 = false; glitchSprite.LockUV2OnFrameOne = false; glitchSprite.StaticPositions = false; List <int> CurrentFloorWallIDs = new List <int>(); List <int> CurrentFloorFloorIDs = new List <int>(); List <int> CurrentFloorMiscIDs = new List <int>(); // Select Sprite ID lists based on tileset. (IDs corrispond to different sprites depending on tileset dungeonCollection) if (dungeon.tileIndices.tilesetId == GlobalDungeonData.ValidTilesets.CASTLEGEON) { CurrentFloorWallIDs = ExpandLists.CastleWallIDs; CurrentFloorFloorIDs = ExpandLists.CastleFloorIDs; CurrentFloorMiscIDs = ExpandLists.CastleMiscIDs; } else if (dungeon.tileIndices.tilesetId == GlobalDungeonData.ValidTilesets.GUNGEON) { CurrentFloorWallIDs = ExpandLists.GungeonWallIDs; CurrentFloorFloorIDs = ExpandLists.GungeonFloorIDs; CurrentFloorMiscIDs = ExpandLists.GungeonMiscIDs; } else if (dungeon.tileIndices.tilesetId == GlobalDungeonData.ValidTilesets.MINEGEON) { CurrentFloorWallIDs = ExpandLists.MinesWallIDs; CurrentFloorFloorIDs = ExpandLists.MinesFloorIDs; CurrentFloorMiscIDs = ExpandLists.MinesMiscIDs; } else if (dungeon.tileIndices.tilesetId == GlobalDungeonData.ValidTilesets.CATACOMBGEON) { CurrentFloorWallIDs = ExpandLists.HollowsWallIDs; CurrentFloorFloorIDs = ExpandLists.HollowsFloorIDs; CurrentFloorMiscIDs = ExpandLists.HollowsMiscIDs; } else if (dungeon.tileIndices.tilesetId == GlobalDungeonData.ValidTilesets.FORGEGEON) { CurrentFloorWallIDs = ExpandLists.ForgeWallIDs; CurrentFloorFloorIDs = ExpandLists.ForgeFloorIDs; CurrentFloorMiscIDs = ExpandLists.ForgeMiscIDs; } else if (dungeon.tileIndices.tilesetId == GlobalDungeonData.ValidTilesets.HELLGEON) { CurrentFloorWallIDs = ExpandLists.BulletHell_WallIDs; CurrentFloorFloorIDs = ExpandLists.BulletHell_FloorIDs; CurrentFloorMiscIDs = ExpandLists.BulletHell_MiscIDs; } else if (dungeon.tileIndices.tilesetId == GlobalDungeonData.ValidTilesets.SEWERGEON) { CurrentFloorWallIDs = ExpandLists.SewerWallIDs; CurrentFloorFloorIDs = ExpandLists.SewerFloorIDs; CurrentFloorMiscIDs = ExpandLists.SewerMiscIDs; } else if (dungeon.tileIndices.tilesetId == GlobalDungeonData.ValidTilesets.CATHEDRALGEON) { CurrentFloorWallIDs = ExpandLists.AbbeyWallIDs; CurrentFloorFloorIDs = ExpandLists.AbbeyFloorIDs; CurrentFloorMiscIDs = ExpandLists.AbbeyMiscIDs; } else if (dungeon.tileIndices.tilesetId == GlobalDungeonData.ValidTilesets.RATGEON | dungeon.tileIndices.tilesetId == GlobalDungeonData.ValidTilesets.JUNGLEGEON) { CurrentFloorWallIDs = ExpandLists.RatDenWallIDs; CurrentFloorFloorIDs = ExpandLists.RatDenFloorIDs; CurrentFloorMiscIDs = ExpandLists.RatDenMiscIDs; } else if (dungeon.tileIndices.tilesetId == GlobalDungeonData.ValidTilesets.OFFICEGEON) { foreach (int id in ExpandLists.Nakatomi_OfficeWallIDs) { CurrentFloorWallIDs.Add(id); } foreach (int id in ExpandLists.Nakatomi_OfficeFloorIDs) { CurrentFloorFloorIDs.Add(id); } foreach (int id in ExpandLists.Nakatomi_OfficeMiscIDs) { CurrentFloorMiscIDs.Add(id); } // This floor stores both Office and Future tilesets it uses into the same sprite collection atlas. // Each section has a specific size and and the ID of the last tileset will be subtracted from entries from the next. // Office tileset IDs end at id 703 // Future tileset IDs start at id 704 // Future tileset IDs have 704 added to them to get the correct ID in the main sprite collection. foreach (int id in ExpandLists.Nakatomi_FutureWallIDs) { CurrentFloorWallIDs.Add(id + 704); } foreach (int id in ExpandLists.Nakatomi_FutureFloorIDs) { CurrentFloorFloorIDs.Add(id + 704); } foreach (int id in ExpandLists.Nakatomi_FutureMiscIDs) { CurrentFloorMiscIDs.Add(id + 704); } } else { // Unkown Tilesets will use Gungeon as placeholder Dungeon tempDungeonPrefab = DungeonDatabase.GetOrLoadByName("Base_Gungeon"); dungeonCollection = tempDungeonPrefab.tileIndices.dungeonCollection; CurrentFloorWallIDs = ExpandLists.GungeonWallIDs; CurrentFloorFloorIDs = ExpandLists.GungeonFloorIDs; CurrentFloorMiscIDs = ExpandLists.GungeonMiscIDs; tempDungeonPrefab = null; } List <int> roomList = Enumerable.Range(0, dungeon.data.rooms.Count).ToList(); roomList = roomList.Shuffle(); if (roomHandler != null) { roomList = new List <int>() { 0 }; } List <IntVector2> cachedWallTiles = new List <IntVector2>(); List <IntVector2> validWalls = new List <IntVector2>(); List <IntVector2> validOpenAreas = new List <IntVector2>(); RoomHandler RoomBeingWorkedOn = null; while (iterations < roomList.Count) { try { RoomHandler currentRoom = null; if (roomHandler == null) { currentRoom = dungeon.data.rooms[roomList[iterations]]; } else { currentRoom = roomHandler; } if (currentRoom == null) { break; } RoomBeingWorkedOn = currentRoom; if (string.IsNullOrEmpty(currentRoom.GetRoomName())) { currentRoom.area.PrototypeRoomName = ("ProceduralRoom_" + UnityEngine.Random.Range(100000, 999999)); } if (!m_CorruptedSecretRoomsPresent || (currentRoom.GetRoomName().ToLower().StartsWith("expand apache corrupted secret") | dungeon.IsGlitchDungeon | roomHandler != null)) { bool isCorruptedSecretRoom = false; if (currentRoom.GetRoomName().ToLower().StartsWith("expand apache corrupted secret") && !isLeadKeyRoom) { GameObject m_CorruptionMarkerObject = new GameObject("CorruptionAmbienceMarkerObject") { layer = 0 }; m_CorruptionMarkerObject.transform.position = currentRoom.area.Center; m_CorruptionMarkerObject.transform.parent = currentRoom.hierarchyParent; ExpandStaticReferenceManager.AllCorruptionSoundObjects.Add(m_CorruptionMarkerObject); isCorruptedSecretRoom = true; } if (m_CorruptedSecretRoomsPresent | isLeadKeyRoom) { foreach (TalkDoerLite npc in StaticReferenceManager.AllNpcs) { if (npc.GetAbsoluteParentRoom() != null && npc.GetAbsoluteParentRoom() == currentRoom) { npc.SpeaksGleepGlorpenese = true; ExpandShaders.Instance.ApplyGlitchShader(npc.GetComponent <tk2dBaseSprite>()); } } } validWalls.Clear(); validOpenAreas.Clear(); for (int Width = -1; Width <= currentRoom.area.dimensions.x + 3; Width++) { for (int Height = -1; Height <= currentRoom.area.dimensions.y + 3; Height++) { int X = currentRoom.area.basePosition.x + Width; int Y = currentRoom.area.basePosition.y + Height; if (!cachedWallTiles.Contains(new IntVector2(X, Y)) && ( dungeon.data.isWall(X, Y) | dungeon.data.isAnyFaceWall(X, Y) | dungeon.data.isWall(X, Y - 1)) ) { validWalls.Add(new IntVector2(X, Y)); } } } int WallCorruptionIntensity = (validWalls.Count / UnityEngine.Random.Range(2, 4)); if (roomHandler == null && !isCorruptedSecretRoom && UnityEngine.Random.value <= 0.1f) { WallCorruptionIntensity = 0; } if (WallCorruptionIntensity > 0) { for (int C = 0; C < WallCorruptionIntensity; C++) { if (validWalls.Count > 0) { IntVector2 WallPosition = BraveUtility.RandomElement(validWalls); cachedWallTiles.Add(WallPosition); float RandomIntervalFloat = UnityEngine.Random.Range(0.02f, 0.06f); float RandomDispFloat = UnityEngine.Random.Range(0.07f, 0.09f); float RandomDispIntensityFloat = UnityEngine.Random.Range(0.085f, 0.2f); float RandomColorProbFloat = UnityEngine.Random.Range(0.04f, 0.15f); float RandomColorIntensityFloat = UnityEngine.Random.Range(0.08f, 0.14f); GameObject m_GlitchTile = Instantiate(GlitchedTileObject, (WallPosition.ToVector2()), Quaternion.identity); m_GlitchTile.name += ("_" + UnityEngine.Random.Range(100000, 999999).ToString()); m_GlitchTile.layer = 22; if (parentObject != null) { m_GlitchTile.transform.parent = parentObject.transform; } else { m_GlitchTile.transform.parent = currentRoom.hierarchyParent; } tk2dSprite m_GlitchSprite = m_GlitchTile.GetComponent <tk2dSprite>(); int TileType = UnityEngine.Random.Range(1, 3); List <int> spriteIDs = new List <int>(); if (TileType == 1) { spriteIDs = CurrentFloorWallIDs; } if (TileType == 2) { spriteIDs = CurrentFloorFloorIDs; } if (TileType == 3) { spriteIDs = CurrentFloorMiscIDs; } m_GlitchSprite.SetSprite(BraveUtility.RandomElement(spriteIDs)); if (dungeon.data.isFaceWallLower(WallPosition.x, WallPosition.y) && !dungeon.data.isWall(WallPosition.x, WallPosition.y - 1)) { DepthLookupManager.ProcessRenderer(m_GlitchSprite.renderer, DepthLookupManager.GungeonSortingLayer.BACKGROUND); m_GlitchSprite.IsPerpendicular = false; m_GlitchSprite.HeightOffGround = 0; m_GlitchSprite.UpdateZDepth(); } else { m_GlitchSprite.HeightOffGround = 3; m_GlitchSprite.UpdateZDepth(); m_GlitchTile.SetLayerRecursively(LayerMask.NameToLayer("FG_Critical")); } if (roomHandler != null && !isCorruptedSecretRoom && !isLeadKeyRoom) { m_GlitchTile.AddComponent <DebrisObject>(); DebrisObject m_GlitchDebris = m_GlitchTile.GetComponent <DebrisObject>(); m_GlitchDebris.angularVelocity = 0; m_GlitchDebris.angularVelocityVariance = 0; m_GlitchDebris.animatePitFall = false; m_GlitchDebris.bounceCount = 0; m_GlitchDebris.breakOnFallChance = 0; m_GlitchDebris.breaksOnFall = false; m_GlitchDebris.canRotate = false; m_GlitchDebris.changesCollisionLayer = false; m_GlitchDebris.collisionStopsBullets = false; m_GlitchDebris.followupBehavior = DebrisObject.DebrisFollowupAction.None; m_GlitchDebris.IsAccurateDebris = true; m_GlitchDebris.IsCorpse = false; m_GlitchDebris.motionMultiplier = 0; m_GlitchDebris.pitFallSplash = false; m_GlitchDebris.playAnimationOnTrigger = false; m_GlitchDebris.PreventAbsorption = true; m_GlitchDebris.PreventFallingInPits = true; m_GlitchDebris.Priority = EphemeralObject.EphemeralPriority.Ephemeral; m_GlitchDebris.shouldUseSRBMotion = false; m_GlitchDebris.usesDirectionalFallAnimations = false; m_GlitchDebris.lifespanMax = 600; m_GlitchDebris.lifespanMin = 500; m_GlitchDebris.usesLifespan = true; } else { m_GlitchTile.AddComponent <ExpandCorruptedObjectDummyComponent>(); ExpandCorruptedObjectDummyComponent dummyComponent = m_GlitchTile.GetComponent <ExpandCorruptedObjectDummyComponent>(); dummyComponent.Init(); } if (UnityEngine.Random.value <= 0.5f) { ExpandShaders.Instance.ApplyGlitchShader(m_GlitchSprite, true, RandomIntervalFloat, RandomDispFloat, RandomDispIntensityFloat, RandomColorProbFloat, RandomColorIntensityFloat); } CorruptWallTilesPlaced++; validWalls.Remove(WallPosition); } } } for (int Width = -1; Width <= currentRoom.area.dimensions.x; Width++) { for (int Height = -1; Height <= currentRoom.area.dimensions.y; Height++) { int X = currentRoom.area.basePosition.x + Width; int Y = currentRoom.area.basePosition.y + Height; if (!dungeon.data.isWall(X, Y) && !dungeon.data.isAnyFaceWall(X, Y)) { validOpenAreas.Add(new IntVector2(X, Y)); } } } int OpenAreaCorruptionIntensity = (validOpenAreas.Count / UnityEngine.Random.Range(5, 10)); if (UnityEngine.Random.value <= 0.2f | isCorruptedSecretRoom) { if (isCorruptedSecretRoom) { OpenAreaCorruptionIntensity = (validOpenAreas.Count / UnityEngine.Random.Range(2, 5)); } else { OpenAreaCorruptionIntensity = (validOpenAreas.Count / UnityEngine.Random.Range(3, 6)); } } if ((roomHandler == null && !isCorruptedSecretRoom && UnityEngine.Random.value <= 0.15f) | corruptWallsOnly) { OpenAreaCorruptionIntensity = 0; } if (OpenAreaCorruptionIntensity > 0 && !currentRoom.IsShop && currentRoom.area.PrototypeRoomCategory != PrototypeDungeonRoom.RoomCategory.BOSS) { for (int S = 0; S <= OpenAreaCorruptionIntensity; S++) { IntVector2 OpenAreaPosition = BraveUtility.RandomElement(validOpenAreas); float RandomIntervalFloat = UnityEngine.Random.Range(0.02f, 0.06f); float RandomDispFloat = UnityEngine.Random.Range(0.07f, 0.09f); float RandomDispIntensityFloat = UnityEngine.Random.Range(0.085f, 0.2f); float RandomColorProbFloat = UnityEngine.Random.Range(0.04f, 0.15f); float RandomColorIntensityFloat = UnityEngine.Random.Range(0.08f, 0.14f); GameObject m_GlitchTile = Instantiate(GlitchedTileObject, (OpenAreaPosition.ToVector2()), Quaternion.identity); m_GlitchTile.name += ("_" + UnityEngine.Random.Range(100000, 999999).ToString()); if (parentObject != null) { m_GlitchTile.transform.parent = parentObject.transform; } else { m_GlitchTile.transform.parent = currentRoom.hierarchyParent; } tk2dSprite m_GlitchSprite = m_GlitchTile.GetComponent <tk2dSprite>(); int TileType = UnityEngine.Random.Range(1, 3); List <int> spriteIDs = new List <int>(); if (TileType == 1) { spriteIDs = CurrentFloorWallIDs; } if (TileType == 2) { spriteIDs = CurrentFloorFloorIDs; } if (TileType == 3) { spriteIDs = CurrentFloorMiscIDs; } m_GlitchSprite.SetSprite(BraveUtility.RandomElement(spriteIDs)); if (UnityEngine.Random.value <= 0.3f) { ExpandShaders.Instance.ApplyGlitchShader(m_GlitchSprite, true, RandomIntervalFloat, RandomDispFloat, RandomDispIntensityFloat, RandomColorProbFloat, RandomColorIntensityFloat); } DepthLookupManager.ProcessRenderer(m_GlitchSprite.renderer, DepthLookupManager.GungeonSortingLayer.BACKGROUND); m_GlitchSprite.IsPerpendicular = false; m_GlitchSprite.HeightOffGround = -4f; m_GlitchSprite.SortingOrder = 2; m_GlitchSprite.UpdateZDepth(); if (roomHandler != null && !isCorruptedSecretRoom) { m_GlitchTile.AddComponent <DebrisObject>(); DebrisObject m_GlitchDebris = m_GlitchTile.GetComponent <DebrisObject>(); m_GlitchDebris.angularVelocity = 0; m_GlitchDebris.angularVelocityVariance = 0; m_GlitchDebris.animatePitFall = false; m_GlitchDebris.bounceCount = 0; m_GlitchDebris.breakOnFallChance = 0; m_GlitchDebris.breaksOnFall = false; m_GlitchDebris.canRotate = false; m_GlitchDebris.changesCollisionLayer = false; m_GlitchDebris.collisionStopsBullets = false; m_GlitchDebris.followupBehavior = DebrisObject.DebrisFollowupAction.None; m_GlitchDebris.IsAccurateDebris = true; m_GlitchDebris.IsCorpse = false; m_GlitchDebris.motionMultiplier = 0; m_GlitchDebris.pitFallSplash = false; m_GlitchDebris.playAnimationOnTrigger = false; m_GlitchDebris.PreventAbsorption = true; m_GlitchDebris.PreventFallingInPits = true; m_GlitchDebris.Priority = EphemeralObject.EphemeralPriority.Ephemeral; m_GlitchDebris.shouldUseSRBMotion = false; m_GlitchDebris.usesDirectionalFallAnimations = false; if (!isCorruptedSecretRoom && roomHandler != null) { m_GlitchDebris.lifespanMax = 600; m_GlitchDebris.lifespanMin = 500; m_GlitchDebris.usesLifespan = true; } else { m_GlitchDebris.usesLifespan = false; } } else { m_GlitchTile.AddComponent <ExpandCorruptedObjectDummyComponent>(); ExpandCorruptedObjectDummyComponent dummyComponent = m_GlitchTile.GetComponent <ExpandCorruptedObjectDummyComponent>(); dummyComponent.Init(); } CorruptOpenAreaTilesPlaced++; validOpenAreas.Remove(OpenAreaPosition); } } } iterations++; } catch (Exception ex) { if (ExpandStats.debugMode) { if (RoomBeingWorkedOn != null && !string.IsNullOrEmpty(RoomBeingWorkedOn.GetRoomName())) { ETGModConsole.Log("[DEBUG] Exception occured in Dungeon.PlaceWallMimics with room: " + RoomBeingWorkedOn.GetRoomName()); Debug.Log("Exception caught in Dungeon.PlaceWallMimics with room: " + RoomBeingWorkedOn.GetRoomName()); } else { ETGModConsole.Log("[DEBUG] Exception occured in Dungeon.PlaceWallMimics!"); Debug.Log("Exception caught in Dungeon.PlaceWallMimics!"); } Debug.LogException(ex); } if (CorruptWallTilesPlaced > 0) { if (ExpandStats.debugMode) { ETGModConsole.Log("[DEBUG] Number of corrupted wall tiles succesfully placed: " + CorruptWallTilesPlaced, false); ETGModConsole.Log("[DEBUG] Number of corrupted ppen area tiles succesfully placed: " + CorruptOpenAreaTilesPlaced, false); } } if (RoomBeingWorkedOn != null) { RoomBeingWorkedOn = null; } iterations++; } } if (CorruptWallTilesPlaced > 0) { if (ExpandStats.debugMode) { ETGModConsole.Log("[DEBUG] Number of Valid Corrupted Wall Tile locations: " + CorruptWallTilesPlaced, false); ETGModConsole.Log("[DEBUG] Number of Valid Corrupted locations: " + CorruptOpenAreaTilesPlaced, false); } } Destroy(GlitchedTileObject); return; }
// Token: 0x06004CAC RID: 19628 RVA: 0x001999F8 File Offset: 0x00197BF8 private void DestroyCrystals(RuntimeGameActorEffectData effectData, bool playVfxExplosion = true) { if (effectData.vfxObjects == null || effectData.vfxObjects.Count == 0) { return; } Vector2 vector = Vector2.zero; GameActor actor = effectData.actor; if (actor) { vector = ((!actor.specRigidbody) ? actor.sprite.WorldCenter : actor.specRigidbody.HitboxPixelCollider.UnitCenter); } else { int num = 0; for (int i = 0; i < effectData.vfxObjects.Count; i++) { if (effectData.vfxObjects[i].First) { vector += effectData.vfxObjects[i].First.transform.position.XY(); num++; } } if (num == 0) { return; } vector /= (float)num; } if (playVfxExplosion && this.vfxExplosion) { GameObject gameObject = SpawnManager.SpawnVFX(this.vfxExplosion, vector, Quaternion.identity); tk2dSprite component = gameObject.GetComponent <tk2dSprite>(); if (actor && component) { actor.sprite.AttachRenderer(component); component.HeightOffGround = 0.1f; component.UpdateZDepth(); } } for (int j = 0; j < effectData.vfxObjects.Count; j++) { GameObject first = effectData.vfxObjects[j].First; if (first) { first.transform.parent = SpawnManager.Instance.VFX; DebrisObject orAddComponent = first.GetOrAddComponent <DebrisObject>(); if (actor) { actor.sprite.AttachRenderer(orAddComponent.sprite); } orAddComponent.sprite.IsPerpendicular = true; orAddComponent.DontSetLayer = true; orAddComponent.gameObject.SetLayerRecursively(LayerMask.NameToLayer("FG_Critical")); orAddComponent.angularVelocity = Mathf.Sign(UnityEngine.Random.value - 0.5f) * 125f; orAddComponent.angularVelocityVariance = 60f; orAddComponent.decayOnBounce = 0.5f; orAddComponent.bounceCount = 1; orAddComponent.canRotate = true; float num2 = effectData.vfxObjects[j].Second + UnityEngine.Random.Range(-this.debrisAngleVariance, this.debrisAngleVariance); if (orAddComponent.name.Contains("tilt", true)) { num2 += 45f; } Vector2 vector2 = BraveMathCollege.DegreesToVector(num2, 1f) * (float)UnityEngine.Random.Range(this.debrisMinForce, this.debrisMaxForce); Vector3 startingForce = new Vector3(vector2.x, (vector2.y >= 0f) ? 0f : vector2.y, (vector2.y <= 0f) ? 0f : vector2.y); float startingHeight = (!actor) ? 0.75f : (first.transform.position.y - actor.specRigidbody.HitboxPixelCollider.UnitBottom); if (orAddComponent.minorBreakable) { orAddComponent.minorBreakable.enabled = true; } orAddComponent.Trigger(startingForce, startingHeight, 1f); } } effectData.vfxObjects.Clear(); }
private void Start() { // Delay initial configuration for ItemCrate version to avoid possible misalignment since GameObjects get instantiated initially from zero position. // Item crate object comes with this controller pre-attached. So position may not be correct frame 1. ;) if (!Configured && IsItemCrate) { StartCoroutine(DelayedAutoConfiguration()); return; } m_ParentEnemy = aiActor; m_CachedRotation = transform.rotation; m_cachedPosition = transform.position; m_CachedLayer = gameObject.layer; m_CachedSpriteZDepth = sprite.HeightOffGround; m_maxSway = MaxSwayAngle; if (knockbackDoer) { knockbackDoer.SetImmobile(true, "Paradrop Protection"); } if (m_ParentEnemy) { m_cachedScale = m_ParentEnemy.EnemyScale; } else { m_cachedScale = Vector2.one; } if (m_ParentEnemy && m_ParentEnemy.HasShadow && m_ParentEnemy.ShadowObject) { m_ParentEnemy.ShadowObject.GetComponent <tk2dSprite>().renderer.enabled = false; } if (m_ParentEnemy) { m_ParentEnemy.behaviorSpeculator.enabled = false; if (m_ParentEnemy.aiAnimator) { m_ParentEnemy.aiAnimator.FacingDirection = -90; } if (m_ParentEnemy.aiShooter) { m_ParentEnemy.aiShooter.AimAtPoint(m_ParentEnemy.CenterPosition - new Vector2(0, 2)); m_ParentEnemy.aiShooter.ToggleGunAndHandRenderers(false, "ParaDrop"); } } if (specRigidbody && !IsItemCrate) { specRigidbody.CollideWithOthers = false; } if (healthHaver) { healthHaver.PreventAllDamage = true; healthHaver.IsVulnerable = false; } if (ParentObjectExplodyBarrel && !IsItemCrate) { m_CachedExplosionData = ExpandUtility.GenerateExplosionData(); } // MeshRenderer pre-disabled via added components in Unity Editor for The Item Drop host object. if (!IsItemCrate) { sprite.renderer.enabled = false; } m_Parachute = Instantiate(ExpandPrefabs.EX_Parachute, Vector3.zero, Quaternion.identity); m_ParachuteSpriteAnimator = m_Parachute.GetComponent <tk2dSpriteAnimator>(); m_ParachuteSprite = m_Parachute.GetComponent <tk2dSprite>(); m_ParachuteSprite.renderer.enabled = false; if (IsItemCrate) { m_ParachuteSprite.HeightOffGround += 3f; m_ParachuteSprite.UpdateZDepth(); } // Despite my absolute shit math skills I somehow got this right. :P // (this correctly sets the parachute above the host object's sprite) float ParachuteXSize = (m_ParachuteSprite.GetBounds().size.x / 2); float ObjectUnitCenterX = m_cachedPosition.x; float ObjectUnitCenterY = m_cachedPosition.y; if (UseObjectSizeOverride) { ObjectUnitCenterX += OverrideObjectSize.x; ObjectUnitCenterY += OverrideObjectSize.y; } else if (specRigidbody) { specRigidbody.Reinitialize(); // Make sure rigidbody colliders are at current object's position ObjectUnitCenterX = specRigidbody.GetPixelCollider(ColliderType.HitBox).UnitCenter.x; ObjectUnitCenterY = specRigidbody.GetPixelCollider(ColliderType.HitBox).UnitTopCenter.y; } m_Parachute.transform.position = new Vector2((ObjectUnitCenterX - ParachuteXSize), ObjectUnitCenterY); m_Parachute.layer = gameObject.layer; if (IsItemCrate) { GameObject EXItemBoxAnchor = new GameObject("EX ItemBox Anchor") { layer = gameObject.layer }; EXItemBoxAnchor.transform.position = m_ParachuteSprite.WorldBottomCenter; m_ItemBoxAnchor = EXItemBoxAnchor; EXItemBoxAnchor.transform.SetParent(m_Parachute.transform); gameObject.transform.SetParent(EXItemBoxAnchor.transform); } else { gameObject.transform.SetParent(m_Parachute.transform); } // m_Anchor = Instantiate(ExpandPrefabs.EX_ParadropAnchor, m_ParachuteSprite.WorldBottomCenter, Quaternion.identity).transform; m_Anchor = new GameObject("EXParaDropAnchor") { layer = gameObject.layer }.transform; m_Anchor.transform.position = m_ParachuteSprite.WorldBottomCenter; m_Parachute.transform.SetParent(m_Anchor); m_CachedPositionOffset = (m_Anchor.position - m_cachedPosition.ToVector3ZUp()); switchState = State.PopIntoAir; m_Initialized = true; }
public static void SetupHatSprites(List <string> spritePaths, GameObject hatObj, int fps, Vector2 hatSize) { Hat hatness = hatObj.GetComponent <Hat>(); if (hatness) { string collectionName = hatness.hatName; collectionName = collectionName.Replace(" ", "_"); tk2dSpriteCollectionData HatSpriteCollection = SpriteBuilder.ConstructCollection(hatObj, (collectionName + "_Collection")); int spriteID = SpriteBuilder.AddSpriteToCollection(spritePaths[0], HatSpriteCollection); tk2dSprite hatBaseSprite = hatObj.GetOrAddComponent <tk2dSprite>(); hatBaseSprite.SetSprite(HatSpriteCollection, spriteID); tk2dSpriteDefinition def = hatBaseSprite.GetCurrentSpriteDef(); def.colliderVertices = new Vector3[] { new Vector3(0f, 0f, 0f), new Vector3((hatSize.x / 16), (hatSize.y / 16), 0f) }; hatBaseSprite.PlaceAtPositionByAnchor(hatObj.transform.position, tk2dBaseSprite.Anchor.LowerCenter); hatBaseSprite.depthUsesTrimmedBounds = true; hatBaseSprite.IsPerpendicular = true; hatBaseSprite.UpdateZDepth(); hatBaseSprite.HeightOffGround = 0.2f; List <string> SouthAnimation = new List <string>(); List <string> NorthAnimation = new List <string>(); List <string> EastAnimation = new List <string>(); List <string> WestAnimation = new List <string>(); List <string> NorthWestAnimation = new List <string>(); List <string> NorthEastAnimation = new List <string>(); List <string> SouthEastAnimation = new List <string>(); List <string> SouthWestAnimation = new List <string>(); switch (hatness.hatDirectionality) { case Hat.HatDirectionality.EIGHTWAY: foreach (string path in spritePaths) { if (path.ToLower().Contains("_north_")) { NorthAnimation.Add(path); } if (path.ToLower().Contains("_south_")) { SouthAnimation.Add(path); } if (path.ToLower().Contains("_west_")) { WestAnimation.Add(path); } if (path.ToLower().Contains("_east_")) { EastAnimation.Add(path); } if (path.ToLower().Contains("_northwest_")) { NorthWestAnimation.Add(path); } if (path.ToLower().Contains("_northeast_")) { NorthEastAnimation.Add(path); } if (path.ToLower().Contains("_southwest_")) { SouthWestAnimation.Add(path); } if (path.ToLower().Contains("_southeast_")) { SouthEastAnimation.Add(path); } } break; case Hat.HatDirectionality.SIXWAY: foreach (string path in spritePaths) { if (path.ToLower().Contains("_north_")) { NorthAnimation.Add(path); } if (path.ToLower().Contains("_south_")) { SouthAnimation.Add(path); } if (path.ToLower().Contains("_west_")) { WestAnimation.Add(path); } if (path.ToLower().Contains("_east_")) { EastAnimation.Add(path); } if (path.ToLower().Contains("_northwest_")) { NorthWestAnimation.Add(path); } if (path.ToLower().Contains("_northeast_")) { NorthEastAnimation.Add(path); } } break; case Hat.HatDirectionality.FOURWAY: foreach (string path in spritePaths) { if (path.ToLower().Contains("_west_")) { WestAnimation.Add(path); } if (path.ToLower().Contains("_east_")) { EastAnimation.Add(path); } if (path.ToLower().Contains("_north_")) { NorthAnimation.Add(path); } if (path.ToLower().Contains("_south_")) { SouthAnimation.Add(path); } } break; case Hat.HatDirectionality.TWOWAYHORIZONTAL: foreach (string path in spritePaths) { if (path.ToLower().Contains("_west_")) { WestAnimation.Add(path); } if (path.ToLower().Contains("_east_")) { EastAnimation.Add(path); } } break; case Hat.HatDirectionality.TWOWAYVERTICAL: foreach (string path in spritePaths) { if (path.ToLower().Contains("_north_")) { NorthAnimation.Add(path); } if (path.ToLower().Contains("_south_")) { SouthAnimation.Add(path); } } break; case Hat.HatDirectionality.NONE: foreach (string path in spritePaths) { if (path.ToLower().Contains("_south_")) { SouthAnimation.Add(path); } } break; } //SET UP THE ANIMATOR AND THE ANIMATION tk2dSpriteAnimator animator = hatObj.GetOrAddComponent <tk2dSpriteAnimator>(); tk2dSpriteAnimation animation = hatObj.GetOrAddComponent <tk2dSpriteAnimation>(); animation.clips = new tk2dSpriteAnimationClip[0]; animator.Library = animation; //SOUTH ANIMATION if (SouthAnimation != null) { tk2dSpriteAnimationClip clip = new tk2dSpriteAnimationClip() { name = "hat_south", frames = new tk2dSpriteAnimationFrame[0], fps = fps }; List <tk2dSpriteAnimationFrame> frames = new List <tk2dSpriteAnimationFrame>(); foreach (string path in SouthAnimation) { tk2dSpriteCollectionData collection = HatSpriteCollection; int frameSpriteId = SpriteBuilder.AddSpriteToCollection(path, collection); tk2dSpriteDefinition frameDef = collection.spriteDefinitions[frameSpriteId]; frameDef.colliderVertices = def.colliderVertices; frameDef.ConstructOffsetsFromAnchor(tk2dBaseSprite.Anchor.LowerCenter); frames.Add(new tk2dSpriteAnimationFrame { spriteId = frameSpriteId, spriteCollection = collection }); } clip.frames = frames.ToArray(); animation.clips = animation.clips.Concat(new tk2dSpriteAnimationClip[] { clip }).ToArray(); } //NORTH ANIMATIONS if (NorthAnimation != null) { tk2dSpriteAnimationClip clip = new tk2dSpriteAnimationClip() { name = "hat_north", frames = new tk2dSpriteAnimationFrame[0], fps = fps }; List <tk2dSpriteAnimationFrame> frames = new List <tk2dSpriteAnimationFrame>(); foreach (string path in NorthAnimation) { tk2dSpriteCollectionData collection = HatSpriteCollection; int frameSpriteId = SpriteBuilder.AddSpriteToCollection(path, collection); tk2dSpriteDefinition frameDef = collection.spriteDefinitions[frameSpriteId]; frameDef.colliderVertices = def.colliderVertices; frameDef.ConstructOffsetsFromAnchor(tk2dBaseSprite.Anchor.LowerCenter); frames.Add(new tk2dSpriteAnimationFrame { spriteId = frameSpriteId, spriteCollection = collection }); } clip.frames = frames.ToArray(); animation.clips = animation.clips.Concat(new tk2dSpriteAnimationClip[] { clip }).ToArray(); } //WEST ANIMATIONS if (WestAnimation != null) { tk2dSpriteAnimationClip clip = new tk2dSpriteAnimationClip() { name = "hat_west", frames = new tk2dSpriteAnimationFrame[0], fps = fps }; List <tk2dSpriteAnimationFrame> frames = new List <tk2dSpriteAnimationFrame>(); foreach (string path in WestAnimation) { tk2dSpriteCollectionData collection = HatSpriteCollection; int frameSpriteId = SpriteBuilder.AddSpriteToCollection(path, collection); tk2dSpriteDefinition frameDef = collection.spriteDefinitions[frameSpriteId]; frameDef.colliderVertices = def.colliderVertices; frameDef.ConstructOffsetsFromAnchor(tk2dBaseSprite.Anchor.LowerCenter); frames.Add(new tk2dSpriteAnimationFrame { spriteId = frameSpriteId, spriteCollection = collection }); } clip.frames = frames.ToArray(); animation.clips = animation.clips.Concat(new tk2dSpriteAnimationClip[] { clip }).ToArray(); } //EAST ANIMATIONS if (EastAnimation != null) { tk2dSpriteAnimationClip clip = new tk2dSpriteAnimationClip() { name = "hat_east", frames = new tk2dSpriteAnimationFrame[0], fps = fps }; List <tk2dSpriteAnimationFrame> frames = new List <tk2dSpriteAnimationFrame>(); foreach (string path in EastAnimation) { tk2dSpriteCollectionData collection = HatSpriteCollection; int frameSpriteId = SpriteBuilder.AddSpriteToCollection(path, collection); tk2dSpriteDefinition frameDef = collection.spriteDefinitions[frameSpriteId]; frameDef.colliderVertices = def.colliderVertices; frameDef.ConstructOffsetsFromAnchor(tk2dBaseSprite.Anchor.LowerCenter); frames.Add(new tk2dSpriteAnimationFrame { spriteId = frameSpriteId, spriteCollection = collection }); } clip.frames = frames.ToArray(); animation.clips = animation.clips.Concat(new tk2dSpriteAnimationClip[] { clip }).ToArray(); } //NORTHEAST if (NorthEastAnimation != null) { tk2dSpriteAnimationClip clip = new tk2dSpriteAnimationClip() { name = "hat_northeast", frames = new tk2dSpriteAnimationFrame[0], fps = fps }; List <tk2dSpriteAnimationFrame> frames = new List <tk2dSpriteAnimationFrame>(); foreach (string path in NorthEastAnimation) { tk2dSpriteCollectionData collection = HatSpriteCollection; int frameSpriteId = SpriteBuilder.AddSpriteToCollection(path, collection); tk2dSpriteDefinition frameDef = collection.spriteDefinitions[frameSpriteId]; frameDef.colliderVertices = def.colliderVertices; frameDef.ConstructOffsetsFromAnchor(tk2dBaseSprite.Anchor.LowerCenter); frames.Add(new tk2dSpriteAnimationFrame { spriteId = frameSpriteId, spriteCollection = collection }); } clip.frames = frames.ToArray(); animation.clips = animation.clips.Concat(new tk2dSpriteAnimationClip[] { clip }).ToArray(); } //NORTHWEST ANIMATION if (NorthWestAnimation != null) { tk2dSpriteAnimationClip clip = new tk2dSpriteAnimationClip() { name = "hat_northwest", frames = new tk2dSpriteAnimationFrame[0], fps = fps }; List <tk2dSpriteAnimationFrame> frames = new List <tk2dSpriteAnimationFrame>(); foreach (string path in NorthWestAnimation) { tk2dSpriteCollectionData collection = HatSpriteCollection; int frameSpriteId = SpriteBuilder.AddSpriteToCollection(path, collection); tk2dSpriteDefinition frameDef = collection.spriteDefinitions[frameSpriteId]; frameDef.colliderVertices = def.colliderVertices; frameDef.ConstructOffsetsFromAnchor(tk2dBaseSprite.Anchor.LowerCenter); frames.Add(new tk2dSpriteAnimationFrame { spriteId = frameSpriteId, spriteCollection = collection }); } clip.frames = frames.ToArray(); animation.clips = animation.clips.Concat(new tk2dSpriteAnimationClip[] { clip }).ToArray(); } //SOUTHWEST ANIMATION if (SouthWestAnimation != null) { tk2dSpriteAnimationClip clip = new tk2dSpriteAnimationClip() { name = "hat_southwest", frames = new tk2dSpriteAnimationFrame[0], fps = fps }; List <tk2dSpriteAnimationFrame> frames = new List <tk2dSpriteAnimationFrame>(); foreach (string path in SouthWestAnimation) { tk2dSpriteCollectionData collection = HatSpriteCollection; int frameSpriteId = SpriteBuilder.AddSpriteToCollection(path, collection); tk2dSpriteDefinition frameDef = collection.spriteDefinitions[frameSpriteId]; frameDef.colliderVertices = def.colliderVertices; frameDef.ConstructOffsetsFromAnchor(tk2dBaseSprite.Anchor.LowerCenter); frames.Add(new tk2dSpriteAnimationFrame { spriteId = frameSpriteId, spriteCollection = collection }); } clip.frames = frames.ToArray(); animation.clips = animation.clips.Concat(new tk2dSpriteAnimationClip[] { clip }).ToArray(); } //SOUTHEAST ANIMATION if (SouthEastAnimation != null) { tk2dSpriteAnimationClip clip = new tk2dSpriteAnimationClip() { name = "hat_southeast", frames = new tk2dSpriteAnimationFrame[0], fps = fps }; List <tk2dSpriteAnimationFrame> frames = new List <tk2dSpriteAnimationFrame>(); foreach (string path in SouthEastAnimation) { tk2dSpriteCollectionData collection = HatSpriteCollection; int frameSpriteId = SpriteBuilder.AddSpriteToCollection(path, collection); tk2dSpriteDefinition frameDef = collection.spriteDefinitions[frameSpriteId]; frameDef.colliderVertices = def.colliderVertices; frameDef.ConstructOffsetsFromAnchor(tk2dBaseSprite.Anchor.LowerCenter); frames.Add(new tk2dSpriteAnimationFrame { spriteId = frameSpriteId, spriteCollection = collection }); } clip.frames = frames.ToArray(); animation.clips = animation.clips.Concat(new tk2dSpriteAnimationClip[] { clip }).ToArray(); } } }