Пример #1
0
    public override void Begin()
    {
        lintu = new PyO(40, 20, Shape.Circle);
        Add(lintu);

        maa = Level.CreateBottomBorder();
        Gravity = new Vector(0, -800);

        LuoPutket();

        AddCollisionHandler(lintu, AloitaAlusta);
        Keyboard.Listen(Key.Space,BS.Released,Flap,"");
        Keyboard.Listen(Key.Escape,BS.Released,Exit,"");
    }
Пример #2
0
    void LuoPutki(double x, double y)
    {
        double ht = Screen.Height;

        PyO putki = new PyO(10, ht);

        // Painovoima ei vaikuta
        putki.IgnoresPhysicsLogics = true;
        putki.CanRotate = false;
        // Ei törmäile maahan
        putki.CollisionIgnoreGroup = 1;

        putki.Position = new Vector(x, y);
        Add(putki);

        // Pistä putket tulemaan lintua kohti
        Vec movePos = new Vec(-ht, y);
        putki.MoveTo(movePos, 100);
    }
Пример #3
0
 void AloitaAlusta(PyO lintu, PyO kohde)
 {
     ClearAll();
     Begin();
 }
Пример #4
0
 /// <summary>
 /// Määrää, mihin aliohjelmaan siirrytään kun
 /// fysiikkaolio <code>obj</code> törmää fysiikkarakenteeseen, jolla on tietty tagi <code>tag</code>.
 /// </summary>
 /// <param name="obj">Törmäävä olio.</param>
 /// <param name="tag">Törmättävän olion tagi.</param>
 /// <param name="handler">Metodi, joka käsittelee törmäyksen (ei parametreja).</param>
 public void AddCollisionHandler(PhysicsObject obj, object tag, CollisionHandler <PhysicsObject, PhysicsStructure> handler)
 {
     AddCollisionHandler <PhysicsObject, PhysicsStructure>(obj, tag, handler);
 }
Пример #5
0
 /// <summary>
 /// Määrää, mihin aliohjelmaan siirrytään kun fysiikkaolio <code>obj</code> törmää johonkin toiseen fysiikkaolioon.
 /// </summary>
 /// <param name="obj">Törmäävä olio</param>
 /// <param name="handler">Törmäyksen käsittelevä aliohjelma.</param>
 public void AddCollisionHandler(PhysicsObject obj, CollisionHandler <PhysicsObject, PhysicsObject> handler)
 {
     AddCollisionHandler <PhysicsObject, PhysicsObject>(obj, handler);
 }
Пример #6
0
 /// <summary>
 /// Heittää kappaleen hahmon rintamasuuntaa kohti.
 /// </summary>
 /// <param name="obj">Heitettävä kappale</param>
 /// <param name="angle">Suhteellinen kulma (0 astetta suoraan, 90 ylös)</param>
 /// <param name="force">Heiton voimakkuus</param>
 /// <param name="distOffset">Offset ammuksen etäisyydelle</param>
 /// <param name="layer">Pelimaailman kerros</param>
 /// <param name="axialOffset">Offset ammuksen akselin suuntaiselle paikalle</param>
 public void Throw(PhysicsObject obj, Angle angle, double force, double distOffset = 0, int layer = 0, double axialOffset = 0)
 {
     PrepareThrowable(obj, angle, force, distOffset, axialOffset);
     Game.Add(obj, layer);
 }
Пример #7
0
        private void PaintPhysicsOutlines(Canvas canvas, PhysicsObject obj)
        {
            if (obj.Body == null || obj.Body.Shape == null || obj.Body.Shape.Cache == null)
            {
                return;
            }

            var    vertexes = obj.Body.Shape.Cache.OutlineVertices;
            double wmul     = obj.Body.Shape.IsUnitSize ? obj.Width : 1;
            double hmul     = obj.Body.Shape.IsUnitSize ? obj.Height : 1;

            canvas.BrushColor = (obj is GameObject && Mouse.IsCursorOn((GameObject)obj)) ? Color.Salmon : Color.DarkRed;

            Vector3 center    = (Vector3)Camera.WorldToScreen(obj.Body.Position, obj.Layer);
            Matrix  transform = Matrix.CreateRotationZ((float)obj.Body.Angle) * Matrix.CreateTranslation(center);

            for (int j = 0; j < vertexes.Length - 1; j++)
            {
                double x1 = wmul * vertexes[j].X;
                double y1 = hmul * vertexes[j].Y;
                double x2 = wmul * vertexes[j + 1].X;
                double y2 = hmul * vertexes[j + 1].Y;

                var t1 = Vector2.Transform(new Vector2((float)x1, (float)y1), transform);
                var t2 = Vector2.Transform(new Vector2((float)x2, (float)y2), transform);

                canvas.DrawLine(t1.X, t1.Y, t2.X, t2.Y);
            }

            if (vertexes.Length > 2)
            {
                double x1 = wmul * vertexes[vertexes.Length - 1].X;
                double y1 = hmul * vertexes[vertexes.Length - 1].Y;
                double x2 = wmul * vertexes[0].X;
                double y2 = hmul * vertexes[0].Y;

                var t1 = Vector2.Transform(new Vector2((float)x1, (float)y1), transform);
                var t2 = Vector2.Transform(new Vector2((float)x2, (float)y2), transform);

                canvas.DrawLine(t1.X, t1.Y, t2.X, t2.Y);
            }

            /*var vertexes = obj.Body.Shape.Cache.OutlineVertices;
             * var center = Camera.WorldToScreen( obj.Body.Position, obj.Layer );
             * double wmul = obj.Body.Shape.IsUnitSize ? obj.Width : 1;
             * double hmul = obj.Body.Shape.IsUnitSize ? obj.Height : 1;
             *
             * canvas.BrushColor = ( obj is GameObject && Mouse.IsCursorOn( (GameObject)obj ) ) ? Color.Salmon : Color.DarkRed;
             *
             * for ( int j = 0; j < vertexes.Length - 1; j++ )
             * {
             *  double x1 = center.X + wmul * vertexes[j].X;
             *  double y1 = center.Y + hmul * vertexes[j].Y;
             *  double x2 = center.X + wmul * vertexes[j + 1].X;
             *  double y2 = center.Y + hmul * vertexes[j + 1].Y;
             *
             *  canvas.DrawLine( x1, y1, x2, y2 );
             * }
             *
             * if ( vertexes.Length > 2 )
             * {
             *  double x1 = center.X + wmul * vertexes[vertexes.Length - 1].X;
             *  double y1 = center.Y + hmul * vertexes[vertexes.Length - 1].Y;
             *  double x2 = center.X + wmul * vertexes[0].X;
             *  double y2 = center.Y + hmul * vertexes[0].Y;
             *
             *  canvas.DrawLine( x1, y1, x2, y2 );
             * }*/
        }