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); // ----------------------------------- }
/// <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); }
/// <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; }); }
private void CreateInnerMeter() { Bound = false; UnsetChangedEvent(); Meter = new DoubleMeter(0, 0, 100); SetChangedEvent(); AddedToGame += UpdateValue; }
private void CreateInnerMeter() { Bound = false; UnsetChangedEvent(); Meter = new DoubleMeter(0, 0, 100); SetChangedEvent(); Game.AssertInitialized(UpdateValue); }
/// <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; }
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); }
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); }
/// <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(); } }
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); }
/// <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); }
/// <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); }
/// <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); }
/// <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); }
/// <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; }
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); }
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); }
/// <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); }
/// <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); }
/// <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; }
/// <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); }
/* 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; }
/// <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); }
/// <summary> /// Luo uudet polunseuraaja-aivot. /// </summary> public PathFollowerBrain() : base() { Path = new Vector[] { }; DistanceToWaypoint = new DoubleMeter(double.PositiveInfinity, 0, double.PositiveInfinity); }
public void setPower(DoubleMeter power) { this.Power = power; }
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; }
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); }
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); } }
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); } } }
void metaani() { metaanilaskuri = new DoubleMeter(150); metaanilaskuri.MaxValue = 150; }
/// <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); }
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); }
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; } }
/// <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); }
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); }