public void Remove(Component component) { Debug.WarnIf(_componentsToRemove.Contains(component), "You are trying to remove a Component ({0}) that you already removed", component); // this may not be a live Component so we have to watch out for if it hasnt been processed yet but it is being removed in the same frame if (_componentsToAdd.Contains(component)) { _componentsToAdd.Remove(component); return; } _componentsToRemove.Add(component); }
/// <summary> /// removes an Entity from the list. All lifecycle methods will be called in the next frame. /// </summary> /// <param name="entity">Entity.</param> public void Remove(Entity entity) { Debug.WarnIf(_entitiesToRemove.Contains(entity), "You are trying to remove an entity ({0}) that you already removed", entity.Name); // guard against adding and then removing an Entity in the same frame if (_entitiesToAdd.Contains(entity)) { _entitiesToAdd.Remove(entity); return; } if (!_entitiesToRemove.Contains(entity)) { _entitiesToRemove.Add(entity); } }
public override void OnAddedToEntity() { if (_colliderRequiresAutoSizing) { // we only deal with boxes and circles here Insist.IsTrue(this is BoxCollider || this is CircleCollider, "Only box and circle colliders can be created automatically"); var renderable = Entity.GetComponent <RenderableComponent>(); Debug.WarnIf(renderable == null, "Collider has no shape and no RenderableComponent. Can't figure out how to size it."); if (renderable != null) { var renderableBounds = renderable.Bounds; // we need the size * inverse scale here because when we autosize the Collider it needs to be without a scaled Renderable var width = renderableBounds.Width / Entity.Transform.Scale.X; var height = renderableBounds.Height / Entity.Transform.Scale.Y; // circle colliders need special care with the origin if (this is CircleCollider) { var circleCollider = this as CircleCollider; circleCollider.Radius = Math.Max(width, height) * 0.5f; // fetch the Renderable's center, transfer it to local coordinates and use that as the localOffset of our collider LocalOffset = renderableBounds.Center - Entity.Transform.Position; } else { var boxCollider = this as BoxCollider; boxCollider.Width = width; boxCollider.Height = height; // fetch the Renderable's center, transfer it to local coordinates and use that as the localOffset of our collider LocalOffset = renderableBounds.Center - Entity.Transform.Position; } } } _isParentEntityAddedToScene = true; RegisterColliderWithPhysicsSystem(); }
public override void OnAddedToEntity() { _collider = Entity.GetComponent <Collider>(); Debug.WarnIf(_collider == null, "ProjectileMover has no Collider. ProjectilMover requires a Collider!"); }
public override void OnAddedToEntity() { _collider = Entity.GetComponent <Collider>(); Debug.WarnIf(_collider == null, "ArcadeRigidbody has no Collider. ArcadeRigidbody requires a Collider!"); }
public override void OnAddedToEntity() { _collider = Entity.GetComponent <Collider>(); Debug.WarnIf(_collider == null, "Collision Listener has no collider, CollisionListener requires a Collider to work!"); base.OnAddedToEntity(); }