Ejemplo n.º 1
0
        /// <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);
        }
Ejemplo n.º 2
0
        /// <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);
        }
Ejemplo n.º 3
0
        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();
            }
        }