示例#1
0
    public override void Begin()
    {
#if DEBUG
        // One of the most typical mobile screen sizes
        SetWindowSize(800, 600);
#endif
        // Controls and event listeners
        PhoneBackButton.Listen(ConfirmExit, "Lopeta peli");
        Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli");

        Mouse.Listen(MouseButton.Left, ButtonState.Down, CheckForDragStart, "Raahaa tuloja ja menoja paikoilleen");
        Mouse.Listen(MouseButton.Left, ButtonState.Up, CheckForDragEnd, "");

        // Time meter bar
        Widget      topLevelWidget = new Widget(new VerticalLayout());
        Meter       timeMeter      = new DoubleMeter(18, 0, 24);
        ProgressBar availableTime  = new ProgressBar(Screen.Width * 0.75, 20, timeMeter);
        topLevelWidget.Add(availableTime);
        Add(topLevelWidget);
        // -----------------------------------
        // Income |  Snakey diagram | Expenses
        Widget sectionsWidget = new Widget(new HorizontalLayout());
        incomeTransactionWidget = CreateListWidget(DataModel.defaultIncomes, Direction.Left);
        sectionsWidget.Add(incomeTransactionWidget);
        sectionsWidget.Add(new Label(50, 250, "SNAKEY TBD"));
        expenseTransactionWidget = CreateListWidget(DataModel.defaultExpenses, Direction.Right);
        sectionsWidget.Add(expenseTransactionWidget);
        topLevelWidget.Add(sectionsWidget);
        // -----------------------------------
    }
示例#2
0
    /// <summary>
    /// Palauttaa humalakertoimen avulla kerrotun arvon. Arvo voi kasvaa,
    /// pienentya, tai pysya ennallaan.
    /// </summary>
    /// <returns>Muutettu arvo.</returns>
    /// <param name="arvo">Arvo jota muututaan.</param>
    public static double HumalaKerroin(double arvo, DoubleMeter taso)
    {
        int    mitenMuuttuu = RandomGen.NextInt(-1, 1);
        double muutettuArvo = arvo + taso.Value * mitenMuuttuu * arvo;

        return(muutettuArvo);
    }
示例#3
0
 /// <summary>
 /// Lisää mittarin arvoa halutulla määrällä.
 /// Voit myös vähentää käyttämällä negatiivista lukua.
 /// </summary>
 /// <param name="meter">Mittari</param>
 /// <param name="value">Kuinka paljon lisätään</param>
 /// <returns></returns>
 public static CollisionHandler <PhysicsObject, PhysicsObject> AddMeterValue(DoubleMeter meter, double value)
 {
     return(delegate(PhysicsObject collidingObject, PhysicsObject targetObject)
     {
         meter.Value += value;
     });
 }
示例#4
0
 private void CreateInnerMeter()
 {
     Bound = false;
     UnsetChangedEvent();
     Meter = new DoubleMeter(0, 0, 100);
     SetChangedEvent();
     AddedToGame += UpdateValue;
 }
示例#5
0
 private void CreateInnerMeter()
 {
     Bound = false;
     UnsetChangedEvent();
     Meter = new DoubleMeter(0, 0, 100);
     SetChangedEvent();
     Game.AssertInitialized(UpdateValue);
 }
示例#6
0
 /// <summary>
 /// Luo uuden aseen.
 /// </summary>
 /// <param name="width">Leveys.</param>
 /// <param name="height">Korkeus.</param>
 public Weapon(double width, double height)
     : base(width, height)
 {
     Shape           = Shape.Rectangle;
     Power           = new DoubleMeter(0);
     Power.MinValue  = 0;
     Ammo            = new IntMeter(Int32.MaxValue, 0, Int32.MaxValue);
     Ammo.MinValue   = 0;
     MaxAmmoLifetime = TimeSpan.MaxValue;
 }
示例#7
0
    void CreateFpsIndicator()
    {
        lastTick = Game.Time;
        fps      = new DoubleMeter(0.0);
        Label timeDisplay = new Label("fps");

        timeDisplay.TextColor     = Color.White;
        timeDisplay.DecimalPlaces = 1;
        timeDisplay.Y             = Screen.Height / 2 - 80;
        timeDisplay.BindTo(fps);
        Add(timeDisplay);
    }
示例#8
0
    void luoVoimaMittari()
    {
        voimaMittari          = new DoubleMeter(0);
        voimaMittari.MaxValue = 30000;
        BarGauge voimaPalkki = new BarGauge(10, 0.2 * Screen.HeightSafe);

        voimaPalkki.BorderColor = Color.Black;
        voimaPalkki.BindTo(voimaMittari);
        voimaPalkki.X = (0.95 * Screen.LeftSafe);
        voimaPalkki.Y = (0.05 * Screen.Height);
        Add(voimaPalkki);
    }
示例#9
0
    /// <summary>
    /// Luo DoubleMeter aikalaskurin, jota käytetään laskettaessa jäljellä olevaa peliaikaa.
    /// Kutsutaan myös LaskeAlaspain-ohjelmaa jokaisen timeoutin jälkeen.
    /// Luo myös Label-olion, johon aikalaskuri sijoitetaan loppukäyttäjän pällisteltäväksi.
    /// Lisäksi kutsutaan silmukassa LuoSiemen-aliohjelmaa auringonkukansiementen generoimiseksi pelikentälle.
    /// </summary>
    /// <param name="x">Label-olion x-koordinaatti</param>
    /// <param name="y">Label-olion y-koordinaatti</param>
    private void LuoAikaLaskuri(double x, double y)
    {
        alaspainLaskuri = new DoubleMeter(pelinAsetuksiaInt[1]);

        aikaLaskuri = new Timer
        {
            Interval = 0.1
        };
        aikaLaskuri.Timeout += LaskeAlaspain;
        aikaLaskuri.Start();


        Label aikaNaytto = new Label
        {
            TextColor     = Color.White,
            DecimalPlaces = 1,
            X             = x + 10,
            Y             = y
        };

        aikaNaytto.BindTo(alaspainLaskuri);
        Add(aikaNaytto);

        Timer kokonaisKesto = new Timer();

        kokonaisKesto.Start();

        Label pisteTeksti = new Label("Vuodenaikaa jäljellä: ")
        {
            TextColor = Color.White,
            X         = x - 120,
            Y         = y
        };

        Add(pisteTeksti);

        Label aikaNaytto2 = new Label
        {
            TextColor     = Color.White,
            DecimalPlaces = 1,
            X             = x,
            Y             = y - 25
        };

        aikaNaytto2.BindTo(kokonaisKesto.SecondCounter);
        Add(aikaNaytto2);

        for (int i = 0; i < kenttienOliot[0, 0]; i++)
        {
            LuoSiemen();
        }
    }
示例#10
0
    void LuoElamaLaskuri()
    {
        elamaLaskuri             = new DoubleMeter(10);
        elamaLaskuri.MaxValue    = 10;
        elamaLaskuri.LowerLimit += ElamaLoppui;

        ProgressBar elamaPalkki = new ProgressBar(150, 20);

        elamaPalkki.X = Screen.Left + 500;
        elamaPalkki.Y = Screen.Top - 50;
        elamaPalkki.BindTo(elamaLaskuri);
        Add(elamaPalkki);
    }
示例#11
0
    /// <summary>
    /// Luo humalapalkin, joka sidotaan nayttamaan humalamittarin tila.
    /// </summary>
    public void LuoHumalaPalkki()
    {
        humalataso          = new DoubleMeter(0);
        humalataso.MaxValue = 2.0;
        ProgressBar humalaPalkki = new ProgressBar(200, 30);

        humalaPalkki.BindTo(humalataso);
        humalaPalkki.X           = Screen.Left + 170;
        humalaPalkki.Y           = Screen.Top - 40;
        humalaPalkki.BarColor    = Color.Red;
        humalaPalkki.BorderColor = Color.Black;
        Add(humalaPalkki);
    }
示例#12
0
    /// <summary>
    /// Tässä osiossa olevat aliohjelmat luovat laskurit(piste- ja aika-) sekä maalin
    /// </summary>
    //#################################################################################
    //#                     !! LUO LASKURIT JA MAALI !!                               #
    //#################################################################################


    /// <summary>
    /// Aliohjelma, joka luo pistelaskurin
    /// </summary>
    public void LuoPistelaskuri()
    {
        pisteLaskuri = new DoubleMeter(0);

        Label pisteNaytto = new Label();

        pisteNaytto.Position  = NayttoPaikat[0];
        pisteNaytto.TextColor = Color.Black;
        pisteNaytto.Color     = Color.White;
        pisteNaytto.Title     = "Pisteet";

        pisteNaytto.BindTo(pisteLaskuri);
        Add(pisteNaytto);
    }
示例#13
0
    /// <summary>
    /// Elämien määrä, josta visuaalisesti näkee montako elämää on jäljellä.
    /// </summary>
    private void LuoElamaLaskuri()
    {
        elamaLaskuri             = new DoubleMeter(5);
        elamaLaskuri.MaxValue    = 5;
        elamaLaskuri.LowerLimit += ElamaLoppui;

        ProgressBar elamaPalkki = new ProgressBar(150, 30);

        elamaPalkki.X = Screen.Center.X;
        elamaPalkki.Y = Screen.Top - 20;
        elamaPalkki.BindTo(elamaLaskuri);
        elamaPalkki.Image    = LoadImage("emptyHearts.png");
        elamaPalkki.BarImage = LoadImage("fullHearts.png");
        Add(elamaPalkki);
    }
示例#14
0
    /// <summary>
    /// Kerätessä karkkeja karkkipalkki täyttyy. Kun karkkipalkki on täynnä saa yhden elämän lisää.
    /// </summary>
    private void LuoKarkkiLaskuri()
    {
        karkkiLaskuri             = new DoubleMeter(0);
        karkkiLaskuri.MaxValue    = 5;
        karkkiLaskuri.UpperLimit += ViisiKarkkia;

        ProgressBar karkkiPalkki = new ProgressBar(150, 30);

        karkkiPalkki.X = Screen.Center.X;
        karkkiPalkki.Y = Screen.Top - 60;
        karkkiPalkki.BindTo(karkkiLaskuri);
        karkkiPalkki.Image    = LoadImage("tyhjatKarkit.png");
        karkkiPalkki.BarImage = LoadImage("taydetKarkit.png");
        Add(karkkiPalkki);
    }
示例#15
0
 /// <summary>
 /// Alustaa uuden auton.
 /// </summary>
 /// <param name="width">Auton leveys (X-suunnassa).</param>
 /// <param name="height">Auton korkeus (Y-suunnassa).</param>
 public Automobile(double width, double height)
     : base(width, height, Shape.Rectangle)
 {
     SpeedMeter        = new DoubleMeter(0);
     TopSpeed          = 1000;
     Acceleration      = 100;
     BrakeDeceleration = 200;
     Maneuverability   = Angle.FromDegrees(20);
     if (commonImage == null)
     {
         commonImage = Game.LoadImageFromResources("Auto.png");
     }
     Image     = commonImage;// Image.Color( commonImage, Color ); // TODO: Image coloring.
     IsUpdated = true;
 }
示例#16
0
    void LisaaTykinVoimaPalkki()
    {
        voimaMittari          = new DoubleMeter(0);
        voimaMittari.MaxValue = 150000.0;
        voimaMittari.MinValue = 0.0;

        BarGauge voimaPalkki = new BarGauge(20, 300);

        voimaPalkki.Y      = Screen.BottomSafe + 60;
        voimaPalkki.Angle -= Angle.FromRadians(Math.PI / 2);
        voimaPalkki.BindTo(voimaMittari);
        voimaPalkki.BorderColor = Color.Black;
        voimaPalkki.Color       = Color.Black;
        voimaPalkki.BarColor    = Color.Green;

        Add(voimaPalkki);
    }
示例#17
0
文件: Peli.cs 项目: Anttifer/Jypeli
    void LisaaHpPalkki()
    {
        hpMittari             = new DoubleMeter(100);
        hpMittari.MaxValue    = 100.0;
        hpMittari.MinValue    = 0.0;
        hpMittari.LowerLimit += HpLoppu;

        BarGauge hpPalkki = new BarGauge(40, 300);

        hpPalkki.Y      = Screen.BottomSafe + 40;
        hpPalkki.Angle -= Angle.FromRadians(Math.PI / 2);
        hpPalkki.BindTo(hpMittari);
        hpPalkki.BorderColor = Color.Black;
        hpPalkki.Color       = Color.Black;
        hpPalkki.BarColor    = Color.Red;

        Add(hpPalkki);
    }
示例#18
0
    /// <summary>
    /// Tätä kutsuttaessa luodaan ja alustetaan elämälaskuri. Lisäksi luodaan ProgressBar olio,
    /// johon elämämittari upotetaan loppukäyttäjälle näytettäväksi.
    /// Määritellään myös mitä tapahtuu kun elämäpisteet loppuvat: silloin kutsutaan ElamaLoppui-funktiota.
    /// </summary>
    private void LuoElamaLaskuri()
    {
        elamaLaskuri = new DoubleMeter(4)
        {
            MaxValue = 6
        };
        elamaLaskuri.LowerLimit += ElamaLoppui;

        ProgressBar elamaPalkki = new ProgressBar(260, 60)
        {
            X        = Screen.Right - 165,
            Y        = Screen.Top - 40,
            Image    = elamaTyhja,
            BarImage = elamaTaysi
        };

        elamaPalkki.BindTo(elamaLaskuri);
        Add(elamaPalkki);
    }
示例#19
0
    /// <summary>
    /// Luo aikalaskurin pelille.
    /// </summary>
    private void LuoAikaLaskuri()
    {
        laskevaLaskuri = new DoubleMeter(400);

        aikaLaskuri          = new Timer();
        aikaLaskuri.Interval = 0.1;
        aikaLaskuri.Timeout += LaskeAlas;
        aikaLaskuri.Start();

        Label aikaNaytto = new Label();

        aikaNaytto.TextColor     = Color.BloodRed;
        aikaNaytto.X             = Screen.Right - 100;
        aikaNaytto.Y             = Screen.Top - 100;
        aikaNaytto.DecimalPlaces = 1;
        aikaNaytto.Title         = "Aika";
        aikaNaytto.BindTo(laskevaLaskuri);
        Add(aikaNaytto);
    }
示例#20
0
        /// <summary>
        /// Ase-luokan ainut konstruktori. Ottaa parametreinaan pelin alussa ladatut peligrafiikat ja ääniefektit. Kutsuu yläluokan konstruktoria, joka luo oliosta oikean kokoisen ja muotoisen.
        /// </summary>
        /// <param name="peli">Peli, johon ase kuuluuu</param>
        /// <param name="asePeruskuvat">Taulukko, joka sisältää aseen normaalin kuvan sekä laukauksen aukaisen kuvan</param>
        /// <param name="aseLatauskuvat">Taulukko, joka sisältää kuvasarjan aseen lataamisesta</param>
        /// <param name="aseAanet">Taulukko, joka sisältää aseeseen liittyvät äänitehosteet</param>
        public Ase(Peli peli) : base(450, 400)
        {
            this.peli = peli;

            LataaGrafiikkaJaAanet();
            this.Image = asePerusKuvat[0];

            this.Y = -384;
            this.X = 384;
            peli.Add(this, 3);

            //Luodaan ammustilannetta seuraava mittari. Käyttöliittymä kuuntelee suoraan muutoksia mittarin arvoihin.
            Ammukset             = new IntMeter(6);
            Ammukset.LowerLimit += LataaAse;

            //Luodaan bonuksen aktivoituessa käynnistyvä ajastin
            bonusAjastin          = new Timer();
            bonusLaskuri          = new DoubleMeter(0);
            bonusLaskuri.MaxValue = 5;
        }
示例#21
0
    /// <summary>
    /// Lisää tasoon ajastimen, joka laskee alaspäin 50:stä. Kun päässään nollaan, peli loppuu.
    /// </summary>
    public void TasonAikaLaskuri()
    {
        alaspainLaskuri = new DoubleMeter(50);
        tasonAika       = new Timer();

        tasonAika.Interval = 0.1;
        tasonAika.Timeout += AikaLoppui;
        tasonAika.Start();

        Label AikaNaytto = new Label(100, 65);

        AikaNaytto.TextColor     = Color.White;
        AikaNaytto.DecimalPlaces = 1;
        AikaNaytto.BindTo(alaspainLaskuri);
        AikaNaytto.X           = Screen.Left + 50;
        AikaNaytto.Y           = Screen.Top - 30;
        AikaNaytto.Font        = Font.DefaultLarge;
        AikaNaytto.BorderColor = Color.BlueGray;
        Add(AikaNaytto);
    }
示例#22
0
    /*   void lv()
     * {
     *     Surfaces aweryq = Level.CreateBorders();
     *     for (int i = 0; i < 30; i++)
     *     {
     *         luolentsikka(new Vector(RandomGen.NextInt(-300, 300), Screen.Bottom));
     *
     *     }
     *     Timer.SingleShot(32, delegate { puhdista(aweryq); });
     * }
     *
     * /*  void luolentsikka(Vector paikka)
     * {
     *     PhysicsObject lentsikka = new PhysicsObject(50, 50);
     *     //lentsikka.Position = paikka;
     *     Add(lentsikka);
     *
     *     lentsikka.Image = lentokuva;
     *     Vector ljk = new Vector(Screen.Center.X, Screen.Top);
     *
     *
     *     RandomMoverBrain satunnaisAivot = new RandomMoverBrain(200);
     *     satunnaisAivot.ChangeMovementSeconds = 3;
     *     lentsikka.Brain = satunnaisAivot;
     *
     *     lentsikka.LifetimeLeft = TimeSpan.FromSeconds(30);
     * }
     * void puhdista(Surfaces areusure)
     * {
     *     areusure.Left.Destroy();
     *     areusure.Right.Destroy();
     *     areusure.Top.Destroy();
     *     areusure.Bottom.Destroy();
     * }
     */
    void voimamittari()
    {
        voimaMittari          = new DoubleMeter(0);
        voimaMittari.MaxValue = 50;
        ProgressBar voimaPalkki = new ProgressBar(150, 10);

        voimaPalkki.X = Screen.Left + 150;
        voimaPalkki.Y = Screen.Top - 70;


        voimaMittari.Value      = 0;
        voimaPalkki.BorderColor = Color.Aqua;
        voimaPalkki.BindTo(voimaMittari);
        //voimaPalkki.Image = LoadImage("palkki tyhj");
        //voimaPalkki.BarImage = LoadImage("palkki sini");

        Add(voimaPalkki);

        voimaMittari.UpperLimit += VoimaMittariTaynna;
    }
示例#23
0
    /// <summary>
    /// Voimamittari esimerkki on tässä, mutta sille ei ole mitään ihmeellistä käyttöä vielä.
    /// </summary>
    private void VoimaMittari()
    {
        voimaMittari          = new DoubleMeter(10);
        voimaMittari.MaxValue = 10;
        BarGauge voimaPalkki = new BarGauge(10, 150);

        voimaPalkki.BindTo(voimaMittari);
        Add(voimaPalkki);

        voimaPalkki.X           = Screen.Right - 150;
        voimaPalkki.Y           = Screen.Top - 20;
        voimaPalkki.BarColor    = Color.Green;
        voimaPalkki.BorderColor = Color.White;
        voimaPalkki.Angle       = Angle.FromDegrees(90);

        // Kun voima loppuu, kutsutaan VoimaLoppui-aliohjelmaa
        voimaMittari.LowerLimit += VoimaLoppui;

        Keyboard.Listen(Key.Space, ButtonState.Pressed,
                        VahennaVoimia, "Vähennä pelaajan voimia");
    }
    public void LuoPeliAika()
    {
        aikaMittari          = new DoubleMeter(60);
        aikaMittari.MaxValue = 60;

        ProgressBar aikaPalkki = new ProgressBar(400, 10);

        aikaPalkki.X           = Screen.Left + 230;
        aikaPalkki.Y           = Screen.Top - 60;
        aikaPalkki.Color       = Color.Transparent;
        aikaPalkki.BarColor    = Color.Red;
        aikaPalkki.BorderColor = Color.Black;
        aikaPalkki.BindTo(aikaMittari);
        Add(aikaPalkki);

        Label aikaTeksti = new Label();

        aikaTeksti.TextColor = Color.Wheat;
        aikaTeksti.Color     = Color.Transparent;
        aikaTeksti.Text      = "Jäljellä oleva aika: ";
        aikaTeksti.X         = Screen.Left + 120;
        aikaTeksti.Y         = Screen.Top - 40;
        Add(aikaTeksti);
    }
示例#25
0
 /// <summary>
 /// Luo uudet polunseuraaja-aivot.
 /// </summary>
 public PathFollowerBrain()
     : base()
 {
     Path = new Vector[] { };
     DistanceToWaypoint = new DoubleMeter(double.PositiveInfinity, 0, double.PositiveInfinity);
 }
示例#26
0
 public void setPower(DoubleMeter power)
 {
     this.Power = power;
 }
示例#27
0
文件: bbd.cs 项目: EA99/sejypeli
 void LisaaPelaaja(Vector paikka, double leveys, double korkeus)
 {
     pelaaja1 = new PlatformCharacter(35,75);
     pelaaja1.Position = paikka;
     pelaaja1.Mass = 2.0;
     pelaaja1.Image = pelaajanKuva;
     Add(pelaaja1);
     pelaaja1Elama = new DoubleMeter(100);
     pelaaja1Elama.MaxValue = 100;
     pelaaja1Elama.LowerLimit += delegate { pelaaja1.Destroy(); };
     BarGauge pelaaja1ElamaPalkki = new BarGauge(20, Screen.Width / 3);
     pelaaja1ElamaPalkki.X = Screen.Center.X;
     pelaaja1ElamaPalkki.Y = Screen.Bottom + 30;
     pelaaja1ElamaPalkki.Angle = Angle.FromDegrees(90);
     pelaaja1ElamaPalkki.BindTo(pelaaja1Elama);
     pelaaja1ElamaPalkki.Color = Color.Red;
     pelaaja1ElamaPalkki.BarColor = Color.Green;
     Add(pelaaja1ElamaPalkki);
     pelaajankäsi = new GameObject(20, 20);
     pelaaja1.Add(pelaajankäsi);
     pelaajankäsi.Color = Color.Red;
     pelaajankäsi.X = pelaajankäsi.X + 14;
     pelaajankäsi.Y = pelaajankäsi.Y - 5;
 }
示例#28
0
 void luoElamaLaskuri()
 {
     elamalaskuri = new DoubleMeter(250);
     elamalaskuri.MaxValue = 250;
     elamalaskuri.LowerLimit += tapaVihollinen;
     ProgressBar elamaPalkki = new ProgressBar(1200, 40);
     elamaPalkki.Y = Screen.Top - 80;
     elamaPalkki.X = -85;
     elamaPalkki.Color = Color.Transparent;
     elamaPalkki.BarColor = Color.Blue;
     elamaPalkki.BorderColor = Color.White;
     elamaPalkki.BindTo(elamalaskuri);
     Add(elamaPalkki);
 }
示例#29
0
    public void StartGame(string problemFilePath)
    {
        optimalLoaded = false;

        Mouse.Listen(MouseButton.Left, ButtonState.Pressed, MouseBtnGoesDown, "Tökkää piirtääksesi reittejä");
        Mouse.Listen(MouseButton.Left, ButtonState.Released, MouseBtnGoesUp, "");
        Mouse.ListenMovement(0.1, MouseMoves, "Rakenna reittejä venyttämällä");


        // UI
        trucksUsed    = new IntMeter(0);
        trucksDisplay = CreateMeterDisplay(
            trucksUsed,
            new Vector(-Screen.Width / 4, Screen.Top - TOP_MARGIN),
            LoadImage("truck"));

        distanceTraveled = new DoubleMeter(0.0);
        distanceDisplay  = CreateMeterDisplay(
            distanceTraveled,
            new Vector(0, Screen.Top - TOP_MARGIN),
            LoadImage("road"));

        ofBKS        = new IntMeter(99);
        ofBKSDisplay = CreateMeterDisplay(
            ofBKS,
            new Vector(Screen.Width / 4, Screen.Top - TOP_MARGIN),
            LoadImage("dash"));
        ofBKSDisplay.IntFormatString = "{0} %";
        UpdateDisplayIconPosition(ofBKSDisplay);
        ofBKSDisplay.IsVisible = false;
        // use "--" label until feasible
        ofBKSDisplayNA          = new Label("-- %");
        ofBKSDisplayNA.Position = ofBKSDisplay.Position;
        Add(ofBKSDisplayNA, 3);

        // Navigation buttons


        PushButton backButton = new PushButton(ofBKSDisplay.Width * 1.1, ofBKSDisplay.Height * 1.0, LoadImage("back_btn"));

        backButton.Clicked += () => ChooseNextLevel();
        backButton.Position = new Vector(-Screen.Width / 2 + ofBKSDisplay.Height * 1.5, ofBKSDisplay.Position.Y);
        Add(backButton);

        PushButton helpButton = new PushButton(ofBKSDisplay.Width * 1.1, ofBKSDisplay.Height * 1.0, LoadImage("help_btn"));

        helpButton.Clicked += () => ShowHelp();
        helpButton.Position = new Vector(Screen.Width / 2 - ofBKSDisplay.Height * 1.5, ofBKSDisplay.Position.Y);
        Add(helpButton);

        string problemName = Path.GetFileNameWithoutExtension(problemFilePath);

        if (File.Exists(problemFilePath))
        {
            StreamReader problemFileStream = new StreamReader(problemFilePath);
            // The problem
            instance = VRPModel.LoadProblemFromStream(problemFileStream, problemName,
                                                      Screen.Width - Screen.Width / SCREEN_MARGIN_WIDHT_RATIO,
                                                      Screen.Height - Screen.Height / SCREEN_MARGIN_WIDHT_RATIO
                                                      );
        }
        else if (File.Exists(PROBLEM_SOURCE))
        {
            using (ZipArchive zip = ZipFile.Open(PROBLEM_SOURCE, ZipArchiveMode.Read))
            {
                string fileName = Path.GetFileName(problemFilePath);
                foreach (ZipArchiveEntry entry in zip.Entries)
                {
                    if (entry.Name == fileName)
                    {
                        StreamReader problemZipStream = new StreamReader(entry.Open());
                        // The problem
                        instance = VRPModel.LoadProblemFromStream(problemZipStream, problemName,
                                                                  Screen.Width - Screen.Width / SCREEN_MARGIN_WIDHT_RATIO,
                                                                  Screen.Height - Screen.Height / SCREEN_MARGIN_WIDHT_RATIO
                                                                  );
                    }
                }
            }
        }


        // Determine the max size of a dot
        dotMaxSize = Math.Min(Screen.Width / DOT_MAX_SIZE_RATIO,
                              Screen.Height / DOT_MAX_SIZE_RATIO);
        for (int i = 1; i < instance.points.Count; i++)
        {
            for (int j = i + 1; j < instance.points.Count; j++)
            {
                double d = Vector.Distance(instance.points[i], instance.points[j]) * DOT_MIN_SIZE_MAX_ALLOWED_OVERLAP;
                if (d > DOT_MIN_SIZE_PX && d < dotMaxSize)
                {
                    dotMaxSize = d;
                }
            }
        }

        for (int i = 0; i < instance.points.Count; i++)
        {
            double hcd       = Math.Sqrt(Math.Max(0.5, instance.demands[i] / instance.capacity)) * dotMaxSize + BORDER_WIDTH * 2;
            var    hitCircle = new GameObject(hcd, hcd, Shape.Circle);
            hitCircle.IsVisible = false;
            hitCircle.Position  = instance.points[i];
            hitCircle.Tag       = i;
            Add(hitCircle);

            double d        = Math.Sqrt(instance.demands[i] / instance.capacity) * dotMaxSize;
            var    customer = new GameObject(d, d, Shape.Circle);
            if (i == 0)
            {
                customer.Color = DepotColor;
            }
            else
            {
                customer.Color = NotRoutedColor;
            }
            customer.Tag      = "customer";
            customer.Position = instance.points[i];
            Add(customer, -2);

            while (pointToCircleObject.ContainsKey(instance.points[i]))
            {
                instance.points[i] += new Vector(DOT_MIN_SIZE_PX, DOT_MIN_SIZE_PX);
            }
            pointToCircleObject.Add(instance.points[i], customer);

            var border = new GameObject(d + BORDER_WIDTH * 2, d + BORDER_WIDTH * 2, Shape.Circle);
            border.Color    = BorderColor;
            border.Position = instance.points[i];
            Add(border, -3);
        }
    }
示例#30
0
    void UpdateTruckFillRatios(List <double> fr)
    {
        int tfbIdx = 0;

        foreach (double carriedWt in fr)
        {
            if (tfbIdx >= truckFillBars.Count)
            {
                DoubleMeter truckFillMeter = new DoubleMeter(carriedWt);
                truckFillMeter.MaxValue = instance.capacity;
                ProgressBar truckFillBar = new ProgressBar(
                    Screen.Width - Screen.Width / SCREEN_MARGIN_WIDHT_RATIO, TRUCK_BAR_HEIGHT);
                truckFillBar.Position = new Vector(0, -Screen.Height / 2 + TOP_MARGIN + TRUCK_BAR_HEIGHT * 1.5 * tfbIdx);
                truckFillBar.BindTo(truckFillMeter);
                truckFillBar.BorderColor = BorderColor;
                Add(truckFillBar, 3);
                truckFillBars.Add(truckFillBar);

                Label truckFillLabel = new Label();
                truckFillLabel.Position = truckFillBar.Position;
                truckFillLabel.Font     = Font.DefaultSmallBold;
                Add(truckFillLabel, 3);
                truckFillLabels.Add(truckFillLabel);
            }
            else
            {
                (truckFillBars[tfbIdx].Meter as DoubleMeter).Value = carriedWt;
            }

            // Demands are being shown
            if (demandLabels != null)
            {
                truckFillLabels[tfbIdx].Text = $"{carriedWt:0.#}/{instance.capacity:0.#}";
            }
            else
            {
                truckFillLabels[tfbIdx].Text = "";
            }

            var currentTruckFillBar = truckFillBars[tfbIdx];
            if (carriedWt > instance.capacity)
            {
                currentTruckFillBar.BarColor = routeColors[tfbIdx % routeColors.Count];
                if (!blinkingObjects.Contains(currentTruckFillBar))
                {
                    blinkingObjects.Add(currentTruckFillBar);
                }
                originalColors[currentTruckFillBar] = routeColors[tfbIdx % routeColors.Count];
            }
            else
            {
                if (instance.routeValidStates[tfbIdx])
                {
                    currentTruckFillBar.BarColor = routeColors[tfbIdx % routeColors.Count];
                }
                else
                {
                    currentTruckFillBar.BarColor = Color.Darker(routeColors[tfbIdx % routeColors.Count], 50);
                }

                if (blinkingObjects.Contains(currentTruckFillBar))
                {
                    blinkingObjects.Remove(currentTruckFillBar);
                }
            }


            tfbIdx++;
        }
        // Remove unused truck bars (no route)
        while (tfbIdx < truckFillBars.Count)
        {
            Remove(truckFillBars[tfbIdx]);
            truckFillBars.RemoveAt(tfbIdx);

            if (truckFillLabels != null)
            {
                Remove(truckFillLabels[tfbIdx]);
                truckFillLabels.RemoveAt(tfbIdx);
            }
        }
    }
示例#31
0
 void metaani()
 {
     metaanilaskuri = new DoubleMeter(150);
     metaanilaskuri.MaxValue = 150;
 }
示例#32
0
 /// <summary>
 /// Luo aivot, jotka seuraavat polkua <c>path</c>.
 /// </summary>
 public PathFollowerBrain(double speed, params Vector[] path)
 {
     this.Speed         = speed;
     this.Path          = path;
     DistanceToWaypoint = new DoubleMeter(double.PositiveInfinity, 0, double.PositiveInfinity);
 }
示例#33
0
    void CreateNewUnit(PlayerTeam team, UnitType type, Vector spawnPoint, Vector gatherPoint)
    {
        // Use tag to detect a friend from foe
        string teamTag = "h";
        string enemyTag = "m";
        if (team==PlayerTeam.Monsters)
        {
            teamTag = "m";
            enemyTag = "h";
        }

        teams[team].UnitCreationProgress[type].Value = 0;
        PhysicsObject unit = new PhysicsObject(30, 30, Shape.Circle);
        unit.Position = spawnPoint;
        unit.Tag = teamTag;
        unit.CanRotate = false;
        DoubleMeter hp = new DoubleMeter(100.0);
        ProgressBar hpbar = new ProgressBar(30, 5, hp);
        hp.AddTrigger(50.0, TriggerDirection.Down, () => hpbar.BarColor = Color.Yellow );
        hp.AddTrigger(20.0, TriggerDirection.Down, () => hpbar.BarColor = Color.Red );
        hp.MaxValue = 100.0;
        hp.MinValue = 0.0;
        hp.LowerLimit += () => OnUnitFlee(unit);
        hpbar.Color = Color.DarkGray;
        hpbar.BarColor = Color.BrightGreen;
        hpbar.BorderColor = Color.Black;
        hpbar.Y = 15;
        Add(unit, 1);
        unit.Add(hpbar);

        if (team==PlayerTeam.Humans)
        {
            unit.CollisionIgnoreGroup = 1;
            switch (type)
            {
                case UnitType.Preparer:
                    unit.Image = hPreparer;
                    break;
                case UnitType.Repeller:
                    unit.Image = hRepeller;
                    break;
                case UnitType.Gatherer:
                    unit.Image = hGatherer;
                    break;
                default:
                    break;
            }
        }
        else
        {
            unit.CollisionIgnoreGroup = 2;
            switch (type)
            {
                case UnitType.Preparer:
                    unit.Image = mPreparer;
                    break;
                case UnitType.Repeller:
                    unit.Image = mRepeller;
                    break;
                case UnitType.Gatherer:
                    unit.Image = mGatherer;
                    break;
                default:
                    break;
            }
        }

        // Start moving to deploy point and add to deploy queue.
        MoveToDeployQueue(team, unit, 0);

        AddCollisionHandler(unit, enemyTag, OnEnemiesCollide);
    }
示例#34
0
    void CreateMeterFactories(PlayerTeam team)
    {
        teams[team] = new PlayerData();
        for (int i = 0; i < 3; i++)
        {
            Color barBaseColor = barColors[i];
            // Next messy line just fetches enum value by index
            UnitType unit = (UnitType)(Enum.GetValues(typeof(UnitType)).GetValue(i));

            // Target when a new unit is produced
            DoubleMeter targetMeter = new DoubleMeter(0);
            targetMeter.MaxValue = 100.0; //%
            targetMeter.Value = 33.3; //%
            teams[team].UnitCreationAllocation.Add(unit, targetMeter);

            ProgressBar targetBar = new ProgressBar(100, 30, targetMeter);
            targetBar.Angle = Angle.FromDegrees(90);
            targetBar.X = (i - 1) * 50;
            targetBar.Y = team == PlayerTeam.Humans ? Screen.Top - 55 : Screen.Bottom + 55;
            targetBar.BorderColor = Color.Black;
            var bcol = Color.Darker(barBaseColor, 75);
            bcol.AlphaComponent = 125;
            targetBar.BarColor = bcol;

            targetBar.BorderColor = Color.Black;
            Add(targetBar, 2);

            Mouse.ListenOn(targetBar, MouseButton.Left, ButtonState.Released, () => ChangeResouceAllocation(team, targetBar), "Click do change resource allocation");

            // Progress to target (when a new unit is produced)
            DoubleMeter progressMeter = new DoubleMeter(0);
            progressMeter.MaxValue = 100.0; //%
            progressMeter.Value = 1.0; //%
            teams[team].UnitCreationProgress.Add(unit, progressMeter);

            //progressMeter.AddOverTime(maxGameLenInS * trickleRate, maxGameLenInS);

            ProgressBar progressBar = new ProgressBar(100, 30, progressMeter);
            progressBar.Angle = targetBar.Angle;
            progressBar.Position = targetBar.Position;
            progressBar.BorderColor = Color.Black;
            progressBar.Color = Color.Darker(barBaseColor, 150);
            progressBar.BarColor = barBaseColor;
            Add(progressBar, 1);

            progressMeter.AddTrigger(100.0, TriggerDirection.Up, () => CreateNewUnit(
                team, unit,
                targetBar.Position + new Vector(0, team == PlayerTeam.Humans ? -65 : 65),
                GatherPoints[team]
                ));
        }

        switch (team)
        {
            case PlayerTeam.Humans:
                AddButtons(team, GatherPoints[team], 3);
                break;
            case PlayerTeam.Monsters:
                AddButtons(team, GatherPoints[team], 3);
                break;
        }
    }
示例#35
0
 /// <summary>
 /// Luo aivot, jotka seuraavat polkua <c>path</c>.
 /// </summary>
 public PathFollowerBrain(double speed, List <Vector> path)
 {
     this.Speed         = speed;
     this.Path          = path.ToArray();
     DistanceToWaypoint = new DoubleMeter(double.PositiveInfinity, 0, double.PositiveInfinity);
 }
示例#36
0
    void CreateOSD()
    {
        jumpPowerMeter = new DoubleMeter(0.0, 0.0, JUMP_POWAH_MAX);
        speedMeter = new DoubleMeter(0.0, 0.0, RUN_SPEED_MAX);
        catsSavedMeter = new IntMeter(0);

        ProgressBar jumpPB = new ProgressBar(200, 20);
        jumpPB.Position = new Vector(Screen.Left + 150, Screen.Top - 40);
        jumpPB.BindTo(jumpPowerMeter);
        jumpPB.BarColor = Color.Red;
        jumpPB.Color = Color.White;
        Add(jumpPB);

        ProgressBar speedPB = new ProgressBar(200, 20);
        speedPB.Position = new Vector(Screen.Right - 150, Screen.Top - 40);
        speedPB.BindTo(speedMeter);
        speedPB.BarColor = Color.Blue;
        speedPB.Color = Color.White;
        Add(speedPB);

        Label lives = new Label("Lives left: 1 of 1");
        lives.Y = Screen.Top - 40;
        lives.Font = Font.DefaultBold;
        lives.TextColor = Color.White;
        Add(lives);

        Label points = new Label("");
        points.IntFormatString = "Cats rescued: {0:D1}";
        points.Y = Screen.Top - 80;
        points.Font = Font.DefaultBold;
        points.TextColor = Color.White;
        points.BindTo(catsSavedMeter);
        Add(points);
    }