Exemple #1
0
 /** Rebuild this trail from the set of points */
 public void Rebuild(nGLine[] points)
 {
     if (_sprites != null) {
     var count = _sprites.Length < points.Length ? _sprites.Length : points.Length;
     if (count > 0) {
       for (var i = 0; i < count; ++i) {
     var offset1 = 1.0f - ((float)i) / points.Length;
     var offset2 = 1.0f - ((float)(i + 1)) / points.Length;
     RebuildSegment(_sprites[i], points[i], offset1, offset2);
       }
     }
     for (var i = count; i < _sprites.Length; ++i) {
       _sprites [i].Color [3] = 0f;
     }
       }
 }
Exemple #2
0
        /** Reset the ball position and start again */
        public void NewGame()
        {
            PlayerPaddle = new Paddle(this);
              AiPaddle = new Paddle(this);
              Ball = new Ball(this);
              Field =  new Field(this, Camera());
              Sparkle = new Sparkle(this);
              RainbowTrail = new RainbowTrail(this);
              Flare = new Ps.Model.Object.Flare(this);
              Collectables = new Collectables(this);

              /* actions */
              SetupActions();
              _input = new GameInput(this);
              Game.SoundReset(); // reload

              /* Set initial paddle positions */
              PlayerPaddle.Position[0] = 0f;
              PlayerPaddle.Position[1] = Field.Bounds[1] + nLayout.DistanceInWorld(14f, nAxis.Y, _camera);;
              AiPaddle.Position[0] = 0f;
              AiPaddle.Position[1] = Field.Bounds[3] - AiPaddle.Size[1] - nLayout.DistanceInWorld(7f, nAxis.Y, _camera);

              var direction = new nGLine() {
            P1 = new float[2] { 0, 0 },
            P2 = new float[2] { nRand.Float(0f, 1f), nRand.Float(1f, 0.3f) }
              };
              var unit = direction.Unit;
              Ball.Position[0] = 0;
              Ball.Position[1] = 0;
              Ball.Velocity[0] = unit[0] * 35f;
              Ball.Velocity[1] = unit[1] * 35f;

              /* reset paddles */
              AiPaddle.Ai = new EasyAiProfile();
              AiPaddle.Speed = AiPaddle.Ai.Speed;
              PlayerPaddle.Speed = Config.PlayerSpeed;
              AiPaddle.Position[0] = 0;
              PlayerPaddle.Position[0] = 0;

              /* ai */
              Activated = false;
              Camera().Pipe.Drawables.Clear();
              Camera().Pipe.Render();
        }
Exemple #3
0
        /** Return a set of line segments that describe this line. */
        public nGLine[] Points()
        {
            var size = _lastSeg ? _segments.Count : _segments.Count + 1;
              var rtn = new nGLine[size];
              var offset = 0;

              foreach (var s in _segments) {
            rtn [offset] = s;
            ++offset;
              }

              /* Extra segment for the last point? */
              if (!_lastSeg) {
            rtn[offset] = new nGLine() {
              P1 = new float[2] { _plast[0], _plast[1] },
              P2 = new float[2] { _last[0], _last[1] }
            };
              }

              return rtn;
        }
Exemple #4
0
        /** Check if the new point on the current line segment */
        /*private bool Inline(float x, float y) {
          if ((_start == null) || (_start.Next == null))
        return false;
          float ux, uy = 0f;
          Unit(_start.Next.X, _start.Next.Y, _start.X, _start.Y, out ux, out uy);
          var k1 = x / ux;
          var k2 = y / uy;
          var tolerance = 0.001f;
          if ((k1 >= (k2 - tolerance)) && (k1 <= k2 + tolerance))
        return true;
          return false;
        }*/
        /** Add some new segments */
        private void AddNewSegments(int count, float x, float y)
        {
            //nLog.Debug("Request to add {0} new segments", count);
              float ux, uy;
              Unit(_plast[0], _plast [1], x, y, out ux, out uy);
              var prev = new float[2] { _plast[0], _plast[1] };
              for (var i = 0; i < count; ++i) {
            var segment = new nGLine() {
              P1 = new float[2] {
            prev[0],
            prev[1],
              },
              P2 = new float[2] {
            _plast[0] + (i + 1) * ux * SegmentSize,
            _plast[1] + (i + 1) * uy * SegmentSize
              }
            };
            _segments.Enqueue(segment);
            prev[0] = segment.P2[0];
            prev[1] = segment.P2[1];

            /* Save a marker for next time */
            if (i == (count - 1)) {
              _plast[0] = segment.P2[0];
              _plast[1] = segment.P2[1];
              //nLog.Debug("The new plast is updated to {0},{1}", _plast[0], _plast[1]);
              if ((segment.P2[0] == x) && (segment.P2[1] == y)) {
            _lastSeg = true;
              }
            }
              }
              //nLog.Debug("Added segment, new count is " + _segments.Count);
        }
Exemple #5
0
 /** Create a line segment */
 private void RebuildSegment(nSprite s, nGLine l, float offset1, float offset2)
 {
     var w1 = MinWidth + (MaxWidth - MinWidth) * offset1;
       var w2 = MinWidth + (MaxWidth - MinWidth) * offset2;
       var pnts = l.SPoints(w1, w2);
       s.Points.Set(pnts);
       s.Color[3] = (1.0f - offset1) * 0.2f;
 }