/// <summary> /// Konstruktorissa liitetään olio tiettyyn peli-instanssiin ja luodaan tarvittavat käyttöliittymäkomponentit. /// </summary> /// <param name="peli"></param> public Kayttoliittyma(Peli peli) { this.peli = peli; LataaUiGrafiikka(); //Luodaan komponentti, joka näyttää ammustilanteen ja päivittää sitä tilanteen muuttuessa ammuksetUI = new GameObject(ammusKuvat[6]); ammuksetUI.Position = new Vector(440, 230); peli.Ase.Ammukset.Changed += delegate { ammuksetUI.Image = ammusKuvat[peli.Ase.Ammukset.Value]; }; peli.Add(ammuksetUI, 3); //Luodaan komponentti, joka näyttää osumapisteet ja päivittää sitä tilanteen muuttuessa hitpointsUI = new GameObject(hitpointKuvat[3]); hitpointsUI.Position = new Vector(Game.Screen.Right - 20 - hitpointsUI.Width / 2, 350); peli.Hitpoints.Changed += delegate { hitpointsUI.Image = hitpointKuvat[peli.Hitpoints]; }; peli.Add(hitpointsUI, 3); //Luodaan muut tarvittavat komponentit LuoBonusPalkki(); LuoPisteNaytot(); LuoTasoNaytto(); luoAjastinNaytto(); LuoViestiNaytto(); //Luodaan tason vaihtumiseen reagoiva tapahtumankäsittelijä peli.Taso.Changed += delegate { tasoAjastin = new Timer(); tasoAjastin.Interval = 1; tasoAjastin.Timeout += delegate { ajastinLaskuri.Value = ajastinLaskuri.Value - 1; }; ajastinLaskuri.Value = ajastinLaskuri.MaxValue; tasoAjastin.Start(3); }; //Ladataan tähtäin kuvatiedostosta tahtainMusta = Game.Instance.Content.Load <Texture2D>("tahtain_musta"); //Ladataan kuvatiedosto, joka näytetään kun aseella ei voi ampua noCanShoot = Game.Instance.Content.Load <Texture2D>("no_can_shoot"); }
/// <summary> /// Luodaan pelaajan korkuinen näkymätön este. Pelaajan ampuessa vihollista tätä objektia /// hyödynnetään tarkistaessa osuiko pelaaja suojaan, jonka takana vihollinen on. /// </summary> /// <returns>Palauttaa luodun esteen, jonka konstruktori lisää olion attribuutiksi</returns> private GameObject LuoEste() { GameObject este = new GameObject(this.Width / 2, this.Height, Shape.Rectangle); este.Position = this.Position; este.Color = Color.Transparent; peli.Add(este); return(este); }
/// <summary> /// Luo käyttöliittymään pistetilannetta seuraavan labelin /// </summary> private void LuoPisteNaytot() { pisteNaytto = new Label(); pisteNaytto.TextColor = Color.Red; pisteNaytto.Title = "Pisteet"; pisteNaytto.X = Game.Screen.Left + 50 + pisteNaytto.Width / 2; pisteNaytto.Y = 360; //Päivitetään näytön lukemaa pelin pistetilanteen muuttuessa pisteNaytto.BindTo(peli.Pisteet); //Muutetaan vielä automaattisesti sijaintia siten, että vasen reuna pysyy 50px vasemmasta reunasta vaikka pistelukema kasvaa peli.Pisteet.Changed += delegate { pisteNaytto.X = Game.Screen.Left + 50 + pisteNaytto.Width / 2; }; peli.Add(pisteNaytto); //Luodaan label joka näyttää nykyiset ennätyspisteet. Päivittyy vain uuden pelin alussa. Label ennatysPisteNaytto = new Label(); ennatysPisteNaytto.TextColor = Color.Red; ennatysPisteNaytto.Text = "Paras tulos: " + peli.EnnatysPisteet.ToString() + " (Taso " + peli.EnnatysTaso.ToString() + ")"; ennatysPisteNaytto.X = Game.Screen.Left + 50 + ennatysPisteNaytto.Width / 2; ennatysPisteNaytto.Y = 330; peli.Add(ennatysPisteNaytto); }
/// <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; }