public void Add(PhysicalObject2D child) { if (child != null && _children != null && !_children.Contains(child)) { _children.Add(child); child.LayerDepth = 0.3f; } }
public override bool CanCollideWith(PhysicalObject2D sprite) { if (sprite.GetType() == typeof(DeadlyPlatform)) return false; if (sprite.GetType() == typeof(Character)) return false; if (sprite.GetType() == typeof(Particle)) return false; return base.CanCollideWith(sprite); }
public bool IsPointingAt(PhysicalObject2D target, Screen screen) { //TODO fix VectorRectangle bounds = target.Bounds; return ( bounds.Left < Position.X && bounds.Right > Position.X && bounds.Top < Position.Y && bounds.Bottom > Position.Y ); }
public ParticleFountain(IParent parent, PhysicalObject2D stuckTo, float angle, float radius, float spawnDelay, float lifeTime, float particleLifeTime, Color color) : base(parent) { Vector2 randomPosition = Vector2.Zero; this._stuckTo = stuckTo; this._particleLifeTime = particleLifeTime; this._lifeTime = lifeTime; this._angle = angle; this._spawnDelay = spawnDelay; this._spawnTimer = 0f; this._radius = radius; this._color = color; }
public override void OnDecollision(PhysicalObject2D secondSprite) { base.OnDecollision(secondSprite); if (secondSprite is Character) { Character c = (Character)secondSprite; if (c.Head.Velocity.Y < -5 && CanCollideWith(secondSprite)) { c.Velocity *= Bouncyness; new ParticleFountain(Parent, c.Body, NumberFactory.HalfPi, 10f, new Vector2(c.Width / 2, c.Height), 5, 500, 300, c.Color); //Collidable = false; } } }
public void DoConventionalCollisionCheck(PhysicalObject2D firstSprite, List<PhysicalObject2D> allSprites) { foreach (PhysicalObject2D secondSprite in allSprites) { if (secondSprite != firstSprite) { VectorRectangle firstBounds = firstSprite.Bounds; VectorRectangle secondBounds = secondSprite.Bounds; if (firstBounds.Intersects(secondBounds)) { if (!firstSprite.CollidesWith(secondSprite)) { VectorRectangle overlap = VectorRectangle.CalculateIntersect(firstBounds, secondBounds); Collision collision1 = new Collision(firstSprite, secondSprite, overlap); firstSprite.OnCollision(collision1); Collision collision2 = new Collision(secondSprite, firstSprite, overlap); secondSprite.OnCollision(collision2); } } else { Collision oldCollision = firstSprite.GetCollisionWith(secondSprite); if (oldCollision != null) { VectorRectangle first = oldCollision.FirstObject.Bounds, second = oldCollision.SecondObject.Bounds; if ( (first.Bottom + 1 < second.Top) || (first.Top > second.Bottom + 1) || (first.Left > second.Right + 1) || (first.Right + 1 < second.Left) // TODO not +1 when two sides are free ) { firstSprite.OnDecollision(secondSprite); secondSprite.OnDecollision(firstSprite); } } } } } }
public ParticleFountain(IParent parent, PhysicalObject2D stuckTo, float angle, float radius, Vector2 offset, float spawnDelay, float lifeTime, float particleLifeTime, Color color, float layerDepth = 0.5f) : base(parent) { Vector2 randomPosition = Vector2.Zero; this._stuckTo = stuckTo; this._particleLifeTime = particleLifeTime; this._lifeTime = lifeTime; this._angle = angle; this._spawnDelay = spawnDelay; this._spawnTimer = 0f; this._radius = radius; Color = color; this._offset = offset; this._layerDepth = layerDepth; this._hasLifetime = _lifeTime != -1; Children.Add(new Sprite(null, "blood")); }
public TextBalloon( IParent parent, PhysicalObject2D talkingObject, Vector2 offset, int fontSize, FunctionCall whenDone = null, bool repeatAction = false ) : base(parent) { TalkingObject = talkingObject; Offset = offset; _currentRow = 0; _started = false; _visible = false; _charTimer = 0; _currentChar = 0; _currentRow = 0; _fontSize = fontSize; WhenDone = whenDone; this.RepeatAction = repeatAction; }
public override bool CanCollideWith(PhysicalObject2D sprite) { if (sprite is MovingPlatform) return false; if (base.CanCollideWith(sprite)) { if (sprite is IColored) { return _colorBehaviour.CanCollideWith((IColored)sprite); } else { return true; } } return false; }
public void OnMouseUp() { // TODO check menus first //Console.WriteLine("Damn, click"); if (_draggingSelectedObject) { _draggingSelectedObject = false; return; } _selectedObject = null; foreach (PhysicalObject2D obj in CurrentLevel.Children) { if (Crosshair.IsPointingAt(obj, Screen)) { _selectedObject = obj; break; } } }
public void Add(PhysicalObject2D child) { if (!Children.Contains(child)) Children.Add(child); }
public void Add(PhysicalObject2D child, Vector2 position) { WeldBehaviour weldBehaviour = new WeldBehaviour(); weldBehaviour.WeldOrigin = position; weldBehaviour.AnchorObject = this; child.MovableBehaviour = weldBehaviour; child.Parent = this; AddWeld(weldBehaviour); }
public MovableBehaviour(PhysicalObject2D parent = null) { Parent = parent; }
public void Remove(PhysicalObject2D child) { _objectsToBeRemoved.Add(child); }
public void Draw( Texture2D texture, PhysicalObject2D obj, Vector2 scale = default(Vector2) ) { if (scale == default(Vector2)) scale = new Vector2(1); Draw( texture: texture, position: obj.Position, objectScale: scale, rotationAngle: obj.RotationAngle, rotationOrigin: obj.RotationOrigin, effects: obj.SpriteEffect, layerDepth: obj.LayerDepth ); }
public void Add(PhysicalObject2D child) { }
public void OnKeyPress(PhysicalObject2D player) { Rectangle tmpRect = TalkingObject.Bounds.ToRectangle(); tmpRect.Location -= new Point(20, 20); tmpRect.Size += new Point(40, 40); if (player != null && tmpRect.Intersects(player.Bounds.ToRectangle())) { if (!_started) { Start(); } else { NextRow(); } } }
public void OnDelete() { if (_selectedObject == null) return; if (_copyObject == _selectedObject) _copyObject = null; if (_selectedObject is Teleporter) { ((Teleporter)_selectedObject).LinkedTeleporter.Destroy(); } foreach (PhysicalObject2D p in CurrentLevel.Children) { if (p is TextBalloon) { if (((TextBalloon)p).TalkingObject == _selectedObject) { p.Destroy(); break; } } } _selectedObject.Destroy(); _selectedObject = null; _draggingSelectedObject = false; }
public void SelectObjectForCopy() { if (_selectedObject != null) _copyObject = _selectedObject; }
public override bool CanCollideWith(PhysicalObject2D sprite) { if (sprite is Platform) return false; return base.CanCollideWith(sprite); }
public void Remove(PhysicalObject2D child) { _children.Remove(child); }
public void OnMovableBehaviourChange(PhysicalObject2D physicalObject2D) { }
public void Add(PhysicalObject2D child) { if (!Children.Contains(child)) { Children.Add(child); if (child is PlayerCheckpoint) { PlayerCheckpoint checkpoint = (PlayerCheckpoint)child; Checkpoints.Add(checkpoint); if (FirstCheckpoint == null) FirstCheckpoint = checkpoint; } } }
public void Remove(PhysicalObject2D child) { }
public void Remove(PhysicalObject2D child) { Children.Remove(child); if (child is PlayerCheckpoint) { PlayerCheckpoint checkpoint = (PlayerCheckpoint)child; Checkpoints.Remove(checkpoint); if (FirstCheckpoint == checkpoint) { if (Checkpoints.Count > 0) FirstCheckpoint = Checkpoints.First(); else FirstCheckpoint = null; } } }
public override bool CollidesWith(PhysicalObject2D secondSprite) { return base.CollidesWith(secondSprite); }
public override void OnDecollision(PhysicalObject2D secondSprite) { base.OnDecollision(secondSprite); if (CollisionObject != null) { if (!CollisionObject.Bounds.Intersects(Bounds)) { Active = true; CollisionObject = null; } } }
public override Collision GetCollisionWith(PhysicalObject2D secondSprite) { return base.GetCollisionWith(secondSprite); }
public void InitializeObject(PhysicalObject2D newObject) { newObject.Initialize(); newObject.SetCenterPosition(Crosshair.Position); _selectedObject = newObject; }