private void Init() { gates = new Dictionary <Vector3, GameObject>(); gates.Add(Vector3.up, new GameObject("GateUp")); gates.Add(Vector3.down, new GameObject("GateDown")); gates.Add(Vector3.left, new GameObject("GateLeft")); gates.Add(Vector3.right, new GameObject("GateRight")); gateSizes = new Dictionary <Vector3, Vector2>(); gateSizes.Add(Vector3.up, new Vector2(1f, gateThiccness)); gateSizes.Add(Vector3.down, new Vector2(1f, gateThiccness)); gateSizes.Add(Vector3.left, new Vector2(gateThiccness, 1f)); gateSizes.Add(Vector3.right, new Vector2(gateThiccness, 1f)); int i = 0; foreach (KeyValuePair <Vector3, GameObject> gate in gates) { gate.Value.layer = LayerUtilities.LayerNumber(gateLayer); gate.Value.transform.parent = transform; BoxCollider2D collider = gate.Value.AddComponent <BoxCollider2D>(); collider.size = gateSizes[gate.Key]; gate.Value.AddComponent <Tilemap>(); gate.Value.AddComponent <TilemapRenderer>(); gate.Value.GetComponent <Tilemap>().tileAnchor = new Vector3(0, 0, 0); i++; } }
public void UpdatePalettes(string paletteName = "") { if (!paletteName.Equals("")) { paletteTypes[paletteName]++; if (paletteTypes[paletteName] > PaletteType.Danger) { paletteTypes[paletteName] = PaletteType.Collidable; } } TilemapCollider2D collider; PlatformEffector2D effector; foreach (KeyValuePair <string, PaletteType> entry in paletteTypes) { collider = tilemaps[entry.Key].gameObject.GetComponent <TilemapCollider2D>(); effector = tilemaps[entry.Key].gameObject.GetComponent <PlatformEffector2D>(); if (entry.Value == PaletteType.Collidable) { int[] layers = { 8, 9, 14 }; tilemaps[entry.Key].GetComponent <PlatformEffector2D>().colliderMask = LayerUtilities.LayerNumbersToMask(layers); tilemaps[entry.Key].GetComponent <CompositeCollider2D>().isTrigger = false; tilemaps[entry.Key].gameObject.layer = LayerUtilities.LayerNumber(SafeCollidableLayer); SwitchTilePhysicsShape(entry.Key, "full"); collider.enabled = true; effector.surfaceArc = 360f; } else if (entry.Value == PaletteType.Noncollidable) { collider.enabled = false; } else if (entry.Value == PaletteType.Semisolid) { int[] layers = { 8, 9 }; tilemaps[entry.Key].GetComponent <PlatformEffector2D>().colliderMask = LayerUtilities.LayerNumbersToMask(layers); effector.surfaceArc = 1f; collider.enabled = true; tilemaps[entry.Key].gameObject.layer = LayerUtilities.LayerNumber(SemisolidCollidableLayer); SwitchTilePhysicsShape(entry.Key, "semisolid"); } else if (entry.Value == PaletteType.IdolFilter) { int[] layers = { 9, 14 }; tilemaps[entry.Key].GetComponent <PlatformEffector2D>().colliderMask = LayerUtilities.LayerNumbersToMask(layers); tilemaps[entry.Key].gameObject.layer = LayerUtilities.LayerNumber(IdolFilterLayer); SwitchTilePhysicsShape(entry.Key, "full"); effector.surfaceArc = 360f; } else if (entry.Value == PaletteType.Danger) { int[] layers = { 8, 9, 14 }; tilemaps[entry.Key].GetComponent <PlatformEffector2D>().colliderMask = LayerUtilities.LayerNumbersToMask(layers); tilemaps[entry.Key].GetComponent <CompositeCollider2D>().isTrigger = true; tilemaps[entry.Key].gameObject.layer = LayerUtilities.LayerNumber(DangerCollidableLayer); SwitchTilePhysicsShape(entry.Key, "outline"); } } }
public void FillLayerSelector(List <IILayer> previoslySelected) { layerTreeView.Nodes.Clear(); List <IILayer> rootLayers = LayerUtilities.RootLayers(); for (int i = 0; i < rootLayers.Count; i++) { IILayer layer = rootLayers[i]; TreeNode layerNode = layerTreeView.Nodes.Add(layer.Name); if (previoslySelected != null && previoslySelected.Contains(layer)) { layerNode.Checked = true; } BuildLayerTreeRecusively(layer, i, layerTreeView.Nodes); } }
void FixedUpdate() { if (isCarried) { collisionDownLayer = collisionUpLayer; gameObject.layer = LayerUtilities.LayerNumber(carriedIdolLayer); } else { collisionDownLayer = layer; gameObject.layer = LayerUtilities.LayerNumber(idolLayer); } speedStretchX = m_Rigidbody.velocity.x * Time.fixedDeltaTime; speedStretchY = m_Rigidbody.velocity.y * Time.fixedDeltaTime; if (speedStretchY > -0.05f) { speedStretchY = -0.05f; } collisionDownEnter = collisionDown; collisionDown = CollisionUtilities.GetCollision(this.gameObject, Vector3.down * -speedStretchY + Vector3.right * speedStretchX, new Vector2(0.25f, 0.6f), collisionDownLayer, true) || (m_Velocity.y > yVelocityBuffer && yVelocityBuffer <= 0f && !isCarried); collisionDownEnter = collisionDown != collisionDownEnter; speedStretchY = m_Rigidbody.velocity.y * Time.fixedDeltaTime; if (speedStretchY < 0.05f) { speedStretchY = 0.05f; } collisionUpEnter = collisionUp; collisionUp = CollisionUtilities.GetCollision(this.gameObject, Vector3.up * (m_boxCollider.size.y / 2f + 0.05f), new Vector2(0.25f, (speedStretchY + 0.05f) * 2f), collisionUpLayer, true); collisionUpEnter = collisionUp != collisionUpEnter; collisionLeft = CollisionUtilities.GetCollision(this.gameObject, Vector3.left * (m_boxCollider.size.x / 2f) + Vector3.down * 0.05f, new Vector2(0.1f, 0.5f), collisionUpLayer); collisionRight = CollisionUtilities.GetCollision(this.gameObject, Vector3.right * (m_boxCollider.size.x / 2f) + Vector3.down * 0.05f, new Vector2(0.1f, 0.5f), collisionUpLayer); collisionDanger = CollisionUtilities.GetCollision(this.gameObject, Vector3.zero, new Vector2(0.3f, 0.6f), dangerLayer); collisionCarryPlayer = CollisionUtilities.GetCollisionDistance(player.gameObject, Vector2.zero, Vector2.up, carryHeight + 0.6f, player.GetCollisionUpLayer()); collisionCarry = CollisionUtilities.GetCollisionDistance(player.gameObject, new Vector2(m_Rigidbody.position.x - playerRigidbody.position.x, 0f), Vector2.up, carryHeight + 0.6f, collisionUpLayer); collisionTeleport = CollisionUtilities.GetCollision(this.gameObject, Vector3.up * 0.35f + Vector3.left * 0.225f, new Vector2(0.15f, 1.1f), collisionUpLayer) && CollisionUtilities.GetCollision(this.gameObject, Vector3.up * 0.35f + Vector3.right * 0.225f, new Vector2(0.15f, 1.1f), collisionUpLayer); float n; if (teleportRechargeTimer < 0) { n = 0; } else { n = teleportRechargeTimer; ///// } CollisionUtilities.GetCollision(this.gameObject, Vector3.right * 0.5f, new Vector2(0.1f, n * 3f), layer, true); teleportTimer -= Time.fixedDeltaTime; teleportRechargeTimer -= Time.fixedDeltaTime; rechargeIndicator.SetFill(teleportRechargeTimer / teleportRechargeDuration); yVelocityBuffer = m_Velocity.y; }
private void LoadTiles() { Tile tile; Sprite tileSprite; char[] splitter = { '/', '\\' }; string[] fileArray; string[] splitFileName; string fileName; for (int i = 0; i < tileTypes.Length; i++) { fileArray = Directory.GetFiles(Application.dataPath + "/Resources/Tiles/" + tileTypes[i], "*.png", SearchOption.AllDirectories); for (int j = 0; j < fileArray.Length; j++) { splitFileName = fileArray[j].Split(splitter); fileName = splitFileName[splitFileName.Length - 1].Split('.')[0]; tileSprite = Resources.Load <Sprite>("Tiles/" + tileTypes[i] + "/" + fileName); string tempName = tileSprite.name; float spriteWidth = tileSprite.rect.width; float spriteHeight = tileSprite.rect.height; tileSprite = Sprite.Create(tileSprite.texture, tileSprite.rect, new Vector2(((tileSprite.pivot.x + ((spriteWidth % 200 == 0) ? -50 : 0)) / spriteWidth), ((tileSprite.pivot.y + ((spriteHeight % 200 == 0) ? -50 : 0)) / spriteHeight))); tileSprite.name = tempName; tileSprite.OverridePhysicsShape(TilePicker.GeneratePhysicsShape(tileSizes[tileTypes[i]], tileSprite, "full")); tile = ScriptableObject.CreateInstance("Tile") as Tile; tile.sprite = Instantiate(tileSprite); loadedTilesFull.Add(fileName, Instantiate(tile)); tileSprite.OverridePhysicsShape(TilePicker.GeneratePhysicsShape(tileSizes[tileTypes[i]], tileSprite, "semisolid")); tile = ScriptableObject.CreateInstance("Tile") as Tile; tile.sprite = Instantiate(tileSprite); loadedTilesSemisolid.Add(fileName, Instantiate(tile)); tileSprite.OverridePhysicsShape(TilePicker.GeneratePhysicsShape(tileSizes[tileTypes[i]], tileSprite, "outline")); tile = ScriptableObject.CreateInstance("Tile") as Tile; tile.sprite = Instantiate(tileSprite); loadedTilesOutline.Add(fileName, Instantiate(tile)); } } tileNames = new List <string>(loadedTilesFull.Keys); GameObject tilemap = new GameObject(); tilemap.layer = LayerUtilities.LayerNumber(SafeCollidableLayer); tilemap.AddComponent <Tilemap>(); tilemap.AddComponent <TilemapRenderer>(); tilemap.AddComponent <TilemapCollider2D>(); tilemap.AddComponent <CompositeCollider2D>(); tilemap.AddComponent <PlatformEffector2D>(); tilemap.GetComponent <TilemapCollider2D>().usedByComposite = true; tilemap.GetComponent <PlatformEffector2D>().surfaceArc = 360f; tilemap.GetComponent <CompositeCollider2D>().usedByEffector = true; tilemap.GetComponent <CompositeCollider2D>().geometryType = CompositeCollider2D.GeometryType.Polygons; tilemap.GetComponent <Rigidbody2D>().isKinematic = true; GameObject currentMap; player.transform.position = Vector3.zero; layers.Add("Player", player); for (int i = 0; i < tileTypes.Length; i++) { currentMap = Instantiate(tilemap, transform); currentMap.name = tileTypes[i]; currentMap.transform.position = Vector3.forward * (i + 1) + new Vector3(-0.5f, -0.5f, 0); tilemaps.Add(tileTypes[i], currentMap.GetComponent <Tilemap>()); layers.Add(tileTypes[i], currentMap); //tilemapPhysicsShapes.Add(tileTypes[i], "full"); paletteTypes.Add(tileTypes[i], PaletteType.Collidable); tiles.Add(tileTypes[i], new List <Vector3Int>()); } Destroy(tilemap); }