public static BlockInstance CreateBlockInstance <T>(BlockInstanceOptions options) where T : BlockInstance { options.positionZ = Instance.InstanceBlocks.transform.position.z; var instance = BlockInstance.CreateInstance <T>(options); instance.transform.parent = Instance.InstanceBlocks.transform; return(instance); }
public static T CreateInstance <T>(BlockInstanceOptions options) where T : BlockInstance { var gameobject = options.GameObject ?? new GameObject($"{options.BlockType.name}{options.Blocks.Bound.center.x},{options.Blocks.Bound.center.y}"); var instance = gameobject.AddComponent <T>(); instance.UpdateInstance(options); return(instance); }
public override void UpdateInstance(BlockInstanceOptions options) { base.UpdateInstance(options); BoxCollider.usedByEffector = true; platformEffector = gameObject.GetOrAddComponent <PlatformEffector2D>(); platformEffector.useColliderMask = false; platformEffector.sideArc = 0; platformEffector.surfaceArc = 170; GetComponent <Rigidbody2D>().bodyType = RigidbodyType2D.Static; }
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 static BlockInstance CreateInstance(BlockInstanceOptions options) { return(CreateInstance <BlockInstance>(options)); }