Exemple #1
0
        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;
                }
            }
        }
Exemple #2
0
        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);
        }
Exemple #3
0
        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;
        }