/// <summary> /// /// </summary> /// <param name="blocks"></param> /// <returns></returns> public bool SpawnBlock(Defs.Blocks[,] blocks) { int posY = 0, posX = 2; if (!IsPlaceBlocks(posX, posY, blocks)) { return(false); } for (int y = 0; y < blocks.GetLength(0); ++y) { for (int x = 0, max = blocks.GetLength(1); x < max; ++x) { FieldBlocks[y + posY, x + posX] = blocks[y, x]; } } ActiveBlocks = new BlocksObject(blocks, 2, 0); BlocksList.Add(blocks); return(true); }
/// <summary> /// /// </summary> /// <param name="blocks"></param> public Defs.Blocks[,] SwapActiveBlocks(Defs.Blocks[,] blocks) { if (!HasActiveBlock) { return(null); } var prevBlocks = ActiveBlocks.Blocks; ClearBlock(ActiveBlocks.Blocks, ActiveBlocks.X, ActiveBlocks.Y); if (blocks == null) { ActiveBlocks = null; } else { ActiveBlocks = new BlocksObject(blocks, 2, 0); } return(prevBlocks); }
public virtual void UpdateInstance(BlockInstanceOptions options) { /*if (Collider) * Destroy(Collider);*/ if (BlocksObject != null) { BlocksObject.ForEach(block => Destroy(block)); } Blocks = options.Blocks; BlockType = options.BlockType; data = options.Data; IsStatic = options.IsStatic; gameObject.transform.position = options.Blocks.Bound.center.Set(z: options.positionZ); if (options.GenerateCollider && options.BlockType.MergeMode == BlockMergeMode.Both) { var composite = gameObject.GetOrAddComponent <CompositeCollider2D>(); composite.geometryType = CompositeCollider2D.GeometryType.Polygons; composite.offsetDistance = 0.01f; composite.isTrigger = options.IsTrigger; if (!(Collider is CompositeCollider2D)) { Destroy(Collider); } Collider = composite; } else if (options.GenerateCollider) { BoxCollider = gameObject.GetOrAddComponent <BoxCollider2D>(); BoxCollider.size = options.Blocks.Bound.size.ToVector2(); BoxCollider.isTrigger = options.IsTrigger; if (!(Collider is BoxCollider2D)) { Destroy(Collider); } Collider = BoxCollider; } if (options.GenerateCollider || options.GenerateRenderer) { BlocksObject = options.Blocks.Select(block => { var obj = new GameObject(); obj.layer = 11; obj.name = $"Block-{block.Position.x},{block.Position.y}"; obj.transform.parent = transform; obj.transform.position = block.Position.ToVector3(transform.position.z) + new Vector3(.5f, .5f, 0); if (options.GenerateRenderer) { var renderer = obj.AddComponent <SpriteRenderer>(); renderer.sprite = block.BlockType.sprite; } if (options.GenerateCollider && options.BlockType.MergeMode == BlockMergeMode.Both) { var collider = obj.AddComponent <BoxCollider2D>(); collider.offset = Vector2.zero; collider.size = Vector2.one; collider.usedByComposite = true; } if (!options.IsStatic) { options.BlockType.OnBlockObjectCreated(this, obj, block); } return(obj); }).ToList(); } }