public override void Update(int t)
        {
            var world = The.World;

            _angle = XY.DirectionAngle(_p, The.Player.Position);
            _r     = XY.Distance(_p, The.Player.Position);
            for (int i = 0; i < 8; i++)
            {
                world.Spawn(
                    new DeathRay(
                        _p,
                        0 + Mathf.PI / _danmakuInterval * t + Mathf.PI / 4 * i,
                        3,
                        Color.Red
                        )
                    );
            }
            if (t % 6 == 0)
            {
                for (int i = 0; i < 8; i++)
                {
                    The.World.Spawn(
                        new FadePetalBullet(
                            new XY(_p.X + Mathf.Cos(Mathf.PI / _danmakuInterval * t + i * Mathf.PI / 4) * _r, _p.Y + Mathf.Sin(Mathf.PI / _danmakuInterval * t + i * Mathf.PI / 4) * _r),
                            XY.DirectionAngle(_p, new XY(_p.X + Mathf.Cos(Mathf.PI / _danmakuInterval * t + i * Mathf.PI / 4) * _r, _p.Y + Mathf.Sin(Mathf.PI / _danmakuInterval * t + i * Mathf.PI / 4) * _r)),
                            Color.Red,
                            Mathf.PI / 4 / (Mathf.PI / _danmakuInterval)
                            )
                        );
                }
            }
        }
        protected override void Update(int t)
        {
            if (t == 0)
            {
                for (int i = 0; i <= _n; i++)
                {
                    if (XY.Distance(new XY(_p.X + Mathf.Cos(i * 2 * Mathf.PI / _n + _random) * _r, _p.Y + Mathf.Sin(i * 2 * Mathf.PI / _n + _random) * _r), _.Player.Position) > 12)
                    {
                        _.World.Spawn(
                            new DelayedLinearRoundBullet(
                                new XY(_p.X + Mathf.Cos(i * 2 * Mathf.PI / _n + _random) * _r, _p.Y + Mathf.Sin(i * 2 * Mathf.PI / _n + _random) * _r),
                                new XY(Mathf.Cos(i * (2 * Mathf.PI / _n) + _random), Mathf.Sin(i * (2 * Mathf.PI / _n) + _random)),
                                Color.Blue,
                                Color.Blue,
                                5,
                                _delay
                                )
                            );
                    }
                }
            }

            if (t == _delay)
            {
                _.World.Spawn(new Blast(_p, _r, _delay));
                Despawn();
            }
        }
Example #3
0
        protected override void Update(int t)
        {
            if (_r > XY.Distance(_p, _.Player.Position))
            {
                _r = _r - 0.9f;
            }
            else
            {
                _r = _r + 0.9f;
            }
            var world = _.World;

            if (t % 6 == 0)
            {
                world.Spawn(new Blast(new XY(_p.X + _r * Mathf.Cos(_angle), _p.Y + _r * Mathf.Sin(_angle)),
                                      _radius,
                                      150));
            }
            if (t % 18 == 0)
            {
                foreach (var v in Danmaku.Cloud(1f, 5))
                {
                    world.Spawn(new LinearRoundBullet(
                                    new XY(_p.X + _r * Mathf.Cos(_angle), _p.Y + _r * Mathf.Sin(_angle)),
                                    v,
                                    Color.Yellow,
                                    Color.Red,
                                    5
                                    )
                                );
                }
            }
            _angle = _angle + _deltaAngle;
        }
Example #4
0
    // Get the center of the closest room inside this QuadTree
    XY GetClosestRoomCenter(XY closeToThis)
    {
        // Check room
        if (room != null)
        {
            return(room.boundary.center);
        }

        // Take a random child
        if (HasChildren() == false)
        {
            return(null);
        }
        float dist1 = XY.Distance(northWest.GetClosestRoomCenter(closeToThis), closeToThis);
        float dist2 = XY.Distance(northEast.GetClosestRoomCenter(closeToThis), closeToThis);
        float dist3 = XY.Distance(southWest.GetClosestRoomCenter(closeToThis), closeToThis);
        float dist4 = XY.Distance(southEast.GetClosestRoomCenter(closeToThis), closeToThis);

        int   r       = 1;
        float closest = dist1;

        if (dist2 < closest)
        {
            r       = 2;
            closest = dist2;
        }
        if (dist3 < closest)
        {
            r       = 3;
            closest = dist3;
        }
        if (dist4 < closest)
        {
            r       = 4;
            closest = dist4;
        }

        switch (r)
        {
        case 1:
            return(northWest.GetClosestRoomCenter(closeToThis));

        case 2:
            return(northEast.GetClosestRoomCenter(closeToThis));

        case 3:
            return(southWest.GetClosestRoomCenter(closeToThis));

        case 4:
            return(southEast.GetClosestRoomCenter(closeToThis));
        }
        return(null);
    }
Example #5
0
        private bool Check(XY a, int index)
        {
            for (int i = 0; i < _n; i++)
            {
                if (XY.Distance(a, coordinate[i]) < 2 * _r)
                {
                    return(false);
                }
            }

            coordinate[index] = a;
            return(true);
        }
Example #6
0
 protected override void Update(int t)
 {
     P = P + _v * (1 + A * t);
     if (XY.Distance(P, _p) < XY.Distance(_.Player.Position, _p))
     {
         _v = new XY((_.Player.Position - _p).Angle);
     }
     if (t % 3 == 0)
     {
         _.World.Spawn(new Blast
                       (
                           P + P.Rotated90CW().Normalized *_.Random.Float(-35, 35),
                           _.Random.Float(3, 10),
                           120));
     }
     if (t > 30 && !Geom.CircleOverBox(new Circle(P, 1), World.Box))
     {
         Despawn();
     }
 }
Example #7
0
 public DemomanSignWormblasterTheFirst(XY p)
 {
     _p = p;
     _r = XY.Distance(_p, _.Player.Position);
 }
Example #8
0
        public DelayedExplosin()
        {
            var world = _.World;

            for (int i = 0; i < _n; i++)
            {
                coordinate[i] = new XY(-9000, -9000);
            }

            for (int i = 0; i < _n; i++)
            {
                bool g        = false;
                int  attempts = 0;
                while (g == false && attempts < 25)
                {
                    var a = _.Random.Point(World.Box);
                    g = Check(a, i);
                    attempts++;
                }
            }

            for (int j = 0; j < _n; j++)
            {
                world.Spawn(new DDEBullet(_.Player.Position,
                                          new XY(XY.DirectionAngle(_.Player.Position,
                                                                   coordinate[j])).WithLength(XY.Distance(_.Player.Position, coordinate[j])) / 60));
            }
        }