public override void Update(float mFrameTime) { Targets.Clear(); var thisPoint = new SSVector2F(_cBody.Position); foreach (var target in Manager.GetEntitiesByTag(TargetTag)) { var body = target.GetComponentUnSafe <CBody>(); SSVector2I[] targetPoints = { new SSVector2I(body.X, body.Y), new SSVector2I(body.Left, body.Top), new SSVector2I(body.Left, body.Bottom), new SSVector2I(body.Right, body.Top), new SSVector2I(body.Right, body.Bottom) }; foreach (var targetPoint in targetPoints) { var angleVector = Utils.Math.Angles.ToVectorDegrees(180 + Angle); var spanVector = thisPoint - targetPoint; var checkAngle = Math.Abs(angleVector.GetAngleBetween(spanVector)); if (double.IsNaN(checkAngle) || checkAngle > Amplitude) { continue; } var polygons = _cShadower.ShadowCaster.Polygons; if (polygons.Any(x => x.IsIntersecting(targetPoint, 100))) { continue; } Targets.Add(new Tuple <Entity, SSVector2I>(target, targetPoint)); break; } } }
public void Draw() { var p0 = new SSVector2F(_cBody.X.ToPixels(), _cBody.Y.ToPixels()); var p1 = p0 + Utils.Math.Angles.ToVectorDegrees(Angle - Amplitude) * 66; var p2 = p0 + Utils.Math.Angles.ToVectorDegrees(Angle + Amplitude) * 66; var v0 = new Vertex(new Vector2f(p0.X, p0.Y)) { Color = new Color(255, 0, 0, 125) }; var v1 = new Vertex(new Vector2f(p1.X, p1.Y)) { Color = new Color(255, 0, 0, 1) }; var v2 = new Vertex(new Vector2f(p2.X, p2.Y)) { Color = new Color(255, 0, 0, 1) }; _game.GameWindow.RenderWindow.Draw(new[] { v0, v1, v2 }, PrimitiveType.Triangles); }
public override void Update(float mFrameTime) { var speed = _cStats.Speed.Total; var nextX = _game.NextX; var nextY = _game.NextY; var nextAction = _game.NextAction; _fireDelay -= 1 * mFrameTime; if (_fireDelay < 0 && nextAction == 1) { var fireAngle = Utils.Math.Angles.TowardsDegrees( new SSVector2F(_cBody.Position.X, _cBody.Position.Y), new SSVector2F(_game.GameWindow.Camera.MousePosition.X * SPUtils.Divisor, _game.GameWindow.Camera.MousePosition.Y * SPUtils.Divisor)); _game.Factory.Bullet(_cBody.Position.X, _cBody.Position.Y, fireAngle, 500, false); _fireDelay = 4; _cRender.Animation = Assets.GetAnimation("charfiring"); } if (nextAction == 0) { _cRender.Animation = Assets.GetAnimation("charidle"); } if (nextX == 0 && nextY == 0) { _cMovement.Stop(); return; } var angle = new SSVector2F(_game.NextX, _game.NextY).ToAngleDegrees(); _cMovement.Angle = angle; _cMovement.Speed = speed; }