public BlockInstanceOptions(Block block) { positionZ = 0; GenerateRenderer = true; GenerateCollider = true; IsTrigger = false; Blocks = null; BlockType = block; Data = null; IsStatic = false; GameObject = null; }
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(); } }
public void SetData <T>(T data) where T : BlockInstanceData => this.data = data;