示例#1
0
        public StarlingGameSpriteWithTestDrivers()
        {
            var textures_ped = new StarlingGameSpriteWithPedTextures(this.new_tex_crop, this.new_texsprite_crop);
            // ??
            //<Reference Include="FlashHeatZeeker.UnitHindControl">
            //  <HintPath>..\packages\FlashHeatZeeker.UnitHindControl.1.0.0.0\lib\FlashHeatZeeker.UnitHindControl.dll</HintPath>
            //</Reference>
            // "X:\jsc.svn\examples\actionscript\svg\FlashHeatZeeker\packages\FlashHeatZeeker.UnitHindControl.1.0.0.0\lib\FlashHeatZeeker.UnitHindControl.dll"
            // "X:\jsc.svn\examples\actionscript\svg\FlashHeatZeeker\packages\FlashHeatZeeker.UnitHind.1.0.0.0\lib\FlashHeatZeeker.UnitHind.dll"
            var textures_hind   = new StarlingGameSpriteWithHindTextures(this.new_tex_crop);
            var textures_jeep   = new StarlingGameSpriteWithJeepTextures(this.new_tex_crop);
            var textures_tank   = new StarlingGameSpriteWithTankTextures(this.new_texsprite_crop);
            var textures_cannon = new StarlingGameSpriteWithCannonTextures(this.new_tex_crop);
            var textures_bunker = new StarlingGameSpriteWithBunkerTextures(this.new_tex_crop);
            var textures_map    = new StarlingGameSpriteWithMapTextures(new_tex_crop);
            var textures_rocket = new StarlingGameSpriteWithRocketTextures(this.new_tex_crop);

            this.disablephysicsdiagnostics = true;

            this.onbeforefirstframe += (stage, s) =>
            {
                var hud = new Image(textures_ped.hud_look()).AttachTo(this);


                for (int i = 0; i < 32; i++)
                {
                    new Image(textures_map.hill1()).AttachTo(Content).With(
                        hill =>
                    {
                        hill.x = 2048.Random();
                        hill.y = 2048.Random();
                    }
                        );

                    new Image(textures_map.hole1()).AttachTo(Content).With(
                        hill =>
                    {
                        hill.x = 2048.Random();
                        hill.y = 2048.Random();
                    }
                        );

                    new Image(textures_map.grass1()).AttachTo(Content).With(
                        hill =>
                    {
                        hill.x = 2048.Random();

                        var y  = -2048.Random() - 512 - 256;
                        hill.y = y;
                    }
                        );
                }

                for (int i = 0; i < 128; i++)
                {
                    var x = 2048.Random();
                    var y = -2048.Random() - 512 - 256;

                    new Image(textures_map.tree0_shadow()).AttachTo(Content).MoveTo(x + 16, y + 16);
                    new Image(textures_map.tree0()).AttachTo(Content).MoveTo(x, y);
                }
                for (int i = -12; i < 12; i++)
                {
                    new Image(textures_map.road0()).AttachTo(Content).x = 256 * i;
                }

                new Image(textures_map.touchdown()).AttachTo(Content).MoveTo(256, -256);
                new Image(textures_map.touchdown()).AttachTo(Content).y = 256;

                new PhysicalHindWeaponized(textures_hind, textures_rocket, this)
                {
                    AutomaticTakeoff = true
                }.SetPositionAndAngle((128 + 256) / 16, -128 * 1.5 / 16);
                new PhysicalTank(textures_tank, this).SetPositionAndAngle(128 / 16, 128 * 3 / 16);

                new Image(textures_map.tree0_shadow()).AttachTo(Content).y = 128 + 16;
                new Image(textures_map.tree0()).AttachTo(Content).y        = 128;

                // can I have
                // new ped, hind, jeep, tank
                current = new PhysicalPed(textures_ped, this);


                // 12 = 34FPS
                #region other units
                for (int i = 3; i < 9; i++)
                {
                    var cannon2 = new PhysicalCannon(textures_cannon, this);

                    cannon2.SetPositionAndAngle(
                        i * 16, -32, random.NextDouble()
                        );



                    if (i % 3 == 0)
                    {
                        new PhysicalBunker(textures_bunker, this).SetPositionAndAngle(
                            i * 16, -16, random.NextDouble()
                            );
                    }
                    else if (i % 3 == 1)
                    {
                        new PhysicalWatertower(textures_bunker, this).SetPositionAndAngle(
                            i * 16, -16, random.NextDouble()
                            );
                    }
                    else
                    {
                        new PhysicalSilo(textures_bunker, this).SetPositionAndAngle(
                            i * 16, -16, random.NextDouble()
                            );
                    }

                    var hind2 = new PhysicalHindWeaponized(textures_hind, textures_rocket, this)
                    {
                        AutomaticTakeoff = true
                    };

                    hind2.SetPositionAndAngle(
                        i * 16, 8, random.NextDouble()
                        );


                    var jeep2 = new PhysicalJeep(textures_jeep, this);


                    jeep2.SetPositionAndAngle(
                        i * 16, 16, random.NextDouble()
                        );



                    var tank2 = new PhysicalTank(textures_tank, this);

                    tank2.SetPositionAndAngle(
                        i * 16, 24, random.NextDouble()
                        );


                    var ped2 = new PhysicalPed(textures_ped, this);

                    ped2.SetPositionAndAngle(
                        i * 16, 32, random.NextDouble()
                        );
                }
                #endregion



                #region __keyDown

                stage.keyDown +=
                    e =>
                {
                    // http://circlecube.com/2008/08/actionscript-key-listener-tutorial/
                    if (e.altKey)
                    {
                        __keyDown[System.Windows.Forms.Keys.Alt] = true;
                    }

                    __keyDown[(System.Windows.Forms.Keys)e.keyCode] = true;
                };

                stage.keyUp +=
                    e =>
                {
                    if (!e.altKey)
                    {
                        __keyDown[System.Windows.Forms.Keys.Alt] = false;
                    }

                    __keyDown[(System.Windows.Forms.Keys)e.keyCode] = false;
                };

                #endregion

                bool entermode_changepending = false;
                bool mode_changepending      = false;

                onframe +=
                    delegate
                {
                    #region hud
                    {
                        var cm = new Matrix();

                        cm.scale(0.5, 0.5);
                        cm.translate(16, stage.stageHeight - 64 - 24);

                        hud.transformationMatrix = cm;
                    }
                    #endregion
                };

                onsyncframe +=
                    delegate
                {
                    #region entermode_changepending
                    if (!__keyDown[System.Windows.Forms.Keys.Enter])
                    {
                        // space is not down.
                        entermode_changepending = true;
                    }
                    else
                    {
                        if (entermode_changepending)
                        {
                            entermode_changepending = false;

                            // enter another vehicle?

                            var candidatedriver = current as PhysicalPed;
                            if (candidatedriver != null)
                            {
                                var target =
                                    from candidatevehicle in units
                                    where candidatevehicle.driverseat != null

                                    // can enter if the seat is full.
                                    // unless we kick them out before ofcourse
                                    where candidatevehicle.driverseat.driver == null

                                    let distance = new __vec2(
                                        (float)(candidatedriver.body.GetPosition().x - candidatevehicle.body.GetPosition().x),
                                        (float)(candidatedriver.body.GetPosition().y - candidatevehicle.body.GetPosition().y)
                                        ).GetLength()

                                                   where distance < 6

                                                   orderby distance ascending
                                                   select new { candidatevehicle, distance };

                                target.FirstOrDefault().With(
                                    x =>
                                {
                                    Console.WriteLine(new { x.distance });

                                    //current.loc.visible = false;
                                    current.body.SetActive(false);


                                    x.candidatevehicle.driverseat.driver = candidatedriver;
                                    candidatedriver.seatedvehicle        = x.candidatevehicle;

                                    current = x.candidatevehicle;

                                    if (current.body.GetType() == Box2D.Dynamics.b2Body.b2_dynamicBody)
                                    {
                                        hud.texture = textures_ped.hud_look_goggles();
                                    }
                                    else
                                    {
                                        hud.texture = textures_ped.hud_look_building();
                                    }

                                    //switchto(x.x);
                                }
                                    );
                            }
                            else
                            {
                                (current.driverseat.driver as PhysicalPed).With(
                                    driver =>
                                {
                                    current.driverseat.driver = null;
                                    driver.seatedvehicle      = null;
                                    current.SetVelocityFromInput(new KeySample());

                                    // crashland?
                                    (current as PhysicalHind).With(
                                        hind => hind.VerticalVelocity = -1
                                        );


                                    current = driver;
                                    current.body.SetActive(true);
                                    hud.texture = textures_ped.hud_look();
                                }
                                    );
                            }
                        }
                    }
                    #endregion



                    #region mode
                    if (!__keyDown[System.Windows.Forms.Keys.Space])
                    {
                        // space is not down.
                        mode_changepending = true;
                    }
                    else
                    {
                        if (mode_changepending)
                        {
                            (current as PhysicalHind).With(
                                hind1 =>
                            {
                                if (hind1.visual.Altitude == 0)
                                {
                                    hind1.VerticalVelocity = 1.0;
                                }
                                else
                                {
                                    hind1.VerticalVelocity = -0.4;
                                }
                            }
                                );

                            (current as PhysicalPed).With(
                                physical0 =>
                            {
                                if (physical0.visual.LayOnTheGround)
                                {
                                    physical0.visual.LayOnTheGround = false;
                                }
                                else
                                {
                                    physical0.visual.LayOnTheGround = true;
                                }
                            }
                                );



                            mode_changepending = false;
                        }
                    }
                    #endregion


                    current.SetVelocityFromInput(__keyDown);



                    #region simulate a weapone!
                    if (__keyDown[System.Windows.Forms.Keys.ControlKey])
                    {
                        if (syncframeid % 3 == 0)
                        {
                            (this.current as PhysicalHindWeaponized).With(
                                h =>
                            {
                                //sb.snd_missleLaunch.play();

                                h.FireRocket();
                            }
                                );
                        }
                    }
                    #endregion
                };
            };
        }
        public StarlingGameSpriteWithMap()
        {
            var textures            = new StarlingGameSpriteWithTankTextures(new_texsprite_crop);
            var textures_map        = new StarlingGameSpriteWithMapTextures(new_tex_crop);
            var textures_explosions = new StarlingGameSpriteWithMapExplosionsTextures(new_tex96);



            this.onbeforefirstframe += (stage, s) =>
            {
                new Image(textures_map.hill1()).AttachTo(Content).y  = -256;
                new Image(textures_map.hole1()).AttachTo(Content).y  = -512;
                new Image(textures_map.grass1()).AttachTo(Content).y = -512 - 256;

                new Image(textures_map.road0()).AttachTo(Content).x = -256;
                new Image(textures_map.road0()).AttachTo(Content).x = 0;
                new Image(textures_map.road0()).AttachTo(Content).x = 256;

                new Image(textures_map.touchdown()).AttachTo(Content).y    = 256;
                new Image(textures_map.tree0_shadow()).AttachTo(Content).y = 128 + 16;
                new Image(textures_map.tree0()).AttachTo(Content).y        = 128;

                var exp = new Image(textures_explosions.explosions[0]()).AttachTo(Content);

                #region __keyDown
                var __keyDown = new KeySample();

                stage.keyDown +=
                    e =>
                {
                    // http://circlecube.com/2008/08/actionscript-key-listener-tutorial/
                    if (e.altKey)
                    {
                        __keyDown[Keys.Alt] = true;
                    }

                    __keyDown[(Keys)e.keyCode] = true;
                };

                stage.keyUp +=
                    e =>
                {
                    if (!e.altKey)
                    {
                        __keyDown[Keys.Alt] = false;
                    }

                    __keyDown[(Keys)e.keyCode] = false;
                };

                #endregion



                var tank1 = new PhysicalTank(textures, this);
                current = tank1;

                onsyncframe += delegate
                {
                    exp.texture = textures_explosions.explosions[this.syncframeid % textures_explosions.explosions.Length]();


                    tank1.SetVelocityFromInput(__keyDown);



                    this.Text = new { this.syncframeid, this.syncframetime }.ToString();
                };
            };
        }
示例#3
0
        public StarlingGameSpriteWithTestGamePad()
        {
            var textures_ped    = new StarlingGameSpriteWithPedTextures(new_tex_crop, this.new_texsprite_crop);
            var textures_tank   = new StarlingGameSpriteWithTankTextures(this.new_texsprite_crop);
            var textures_hind   = new StarlingGameSpriteWithHindTextures(this.new_tex_crop);
            var textures_jeep   = new StarlingGameSpriteWithJeepTextures(new_tex_crop);
            var textures_cannon = new StarlingGameSpriteWithCannonTextures(new_tex_crop);
            var textures_bunker = new StarlingGameSpriteWithBunkerTextures(new_tex_crop);

            disablephysicsdiagnostics = true;
            disable_movezoom_and_altitude_for_scale = true;

            internalscale     = 1.7;
            internal_center_y = 0.5;

            this.onbeforefirstframe += (stage, s) =>
            {
                #region __keyDown

                stage.keyDown +=
                    e =>
                {
                    // http://circlecube.com/2008/08/actionscript-key-listener-tutorial/
                    if (e.altKey)
                    {
                        __keyDown[Keys.Alt] = true;
                    }

                    __keyDown[(Keys)e.keyCode] = true;
                };

                stage.keyUp +=
                    e =>
                {
                    if (!e.altKey)
                    {
                        __keyDown[Keys.Alt] = false;
                    }

                    __keyDown[(Keys)e.keyCode] = false;
                };

                #endregion


                var tank1 = new PhysicalTank(textures_tank, this);
                tank1.SetPositionAndAngle(random.NextDouble() * 4000, 100);

                // half speed!
                //tank1.AngularVelocityMultiplier = 0.5;
                //tank1.speed = 10;

                //tank1.SetPositionAndAngle(100, 100);



                var cannon1 = new PhysicalCannon(textures_cannon, this);
                cannon1.SetPositionAndAngle(random.NextDouble() * 4000, 100);

                var physical0 = new PhysicalPed(textures_ped, this);
                physical0.SetPositionAndAngle(random.NextDouble() * 4000, 100);

                current = physical0;

                var hind0 = new PhysicalHind(textures_hind, this);
                hind0.SetPositionAndAngle(random.NextDouble() * 4000, 100);

                var jeep = new PhysicalJeep(textures_jeep, this);
                jeep.SetPositionAndAngle(random.NextDouble() * 4000, 100);

                var bunker0 = new PhysicalBunker(textures_bunker, this);
                bunker0.SetPositionAndAngle(random.NextDouble() * 4000, 100);

                var silo0 = new PhysicalSilo(textures_bunker, this);

                __switchto +=
                    type =>
                {
                    if (type == "ped")
                    {
                        current = physical0;
                    }

                    if (type == "tank")
                    {
                        current = tank1;
                    }

                    if (type == "hind")
                    {
                        current = hind0;
                    }

                    if (type == "jeep")
                    {
                        current = jeep;
                    }

                    if (type == "cannon")
                    {
                        current = cannon1;
                    }

                    if (type == "bunker")
                    {
                        current = bunker0;
                    }

                    if (type == "silo")
                    {
                        current = silo0;
                    }
                };

                onsyncframe += delegate
                {
                    current.SetVelocityFromInput(__keyDown);


                    while (Content_layer0_tracks.numChildren > 5)
                    {
                        Content_layer0_tracks.removeChildAt(0);
                    }
                };
            };
        }
示例#4
0
        public StarlingGameSpriteWithTankSync()
        {
            var textures_tank = new StarlingGameSpriteWithTankTextures(new_texsprite_crop);


            this.onbeforefirstframe += (stage, s) =>
            {
                #region __keyDown
                var __keyDown = new KeySample();

                stage.keyDown +=
                    e =>
                {
                    // http://circlecube.com/2008/08/actionscript-key-listener-tutorial/
                    if (e.altKey)
                    {
                        __keyDown[System.Windows.Forms.Keys.Alt] = true;
                    }

                    __keyDown[(System.Windows.Forms.Keys)e.keyCode] = true;
                };

                stage.keyUp +=
                    e =>
                {
                    if (!e.altKey)
                    {
                        __keyDown[System.Windows.Forms.Keys.Alt] = false;
                    }

                    __keyDown[(System.Windows.Forms.Keys)e.keyCode] = false;
                };

                #endregion

                #region ego
                var ego = new PhysicalTank(textures_tank, this)
                {
                    Identity = sessionid + ":ego"
                };

                ego.SetPositionAndAngle(
                    random.NextDouble() * -20 - 4,
                    random.NextDouble() * -20 - 4,
                    random.NextDouble() * Math.PI
                    );

                current = ego;
                #endregion



                #region other
                Func <string, RemoteGame> other = __egoid =>
                {
                    // that other game has sent us a sync frame!

                    var already_known_other = others.FirstOrDefault(k => k.__egoid == __egoid);

                    if (already_known_other == null)
                    {
                        already_known_other = new RemoteGame
                        {
                            __egoid = __egoid,

                            // this
                            __syncframeid = this.syncframeid
                        };

                        others.Add(already_known_other);
                    }


                    return(already_known_other);
                };
                #endregion


                #region __at_sync
                __at_sync += __egoid =>
                {
                    // that other game has sent us a sync frame!

                    var o = other(__egoid);

                    o.__syncframeid++;
                    // move on!
                };
                #endregion

                #region __at_SetVelocityFromInput
                __at_SetVelocityFromInput +=
                    (
                        string __egoid,
                        string __identity,
                        string __KeySample,
                        string __fixup_x,
                        string __fixup_y,
                        string __fixup_angle

                    ) =>
                {
                    var o = other(__egoid);



                    if (o.ego == null)
                    {
                        o.ego = new PhysicalTank(textures_tank, this)
                        {
                            Identity            = __identity,
                            RemoteGameReference = o
                        };

                        o.ego.SetPositionAndAngle(
                            double.Parse(__fixup_x),
                            double.Parse(__fixup_y),
                            double.Parse(__fixup_angle)
                            );
                    }


                    // set the input!


                    o.ego.SetVelocityFromInput(
                        new KeySample
                    {
                        value = int.Parse(__KeySample),

                        fixup = true,

                        x     = double.Parse(__fixup_x),
                        y     = double.Parse(__fixup_y),
                        angle = double.Parse(__fixup_angle)
                    }
                        );
                };
                #endregion



                onsyncframe += delegate
                {
                    current.SetVelocityFromInput(__keyDown);



                    __raise_SetVelocityFromInput(
                        "" + sessionid,
                        current.Identity,
                        "" + current.CurrentInput.value,
                        "" + current.body.GetPosition().x,
                        "" + current.body.GetPosition().y,
                        "" + current.body.GetAngle()

                        );


                    // tell others this sync frame ended for us
                    __raise_sync("" + sessionid);
                };
            };
        }