Changeset 7985 for 2016/27/ohjaajat


Ignore:
Timestamp:
2016-07-07 19:19:01 (3 years ago)
Author:
tesatapa
Message:

Elämät ja kuolema

Location:
2016/27/ohjaajat/VenienteFragore/VenienteFragore/VenienteFragore
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • 2016/27/ohjaajat/VenienteFragore/VenienteFragore/VenienteFragore/LevelCreationMethods.cs

    r7984 r7985  
    99    partial class VenienteFragore 
    1010    { 
     11 
     12 
    1113        private void CreateObject(Vector position, double width, double height, Angle angle, Shape shape, string name, Dictionary<string, string> properties) 
    1214        { 
     
    9496            advenA.AnimCrouch.Start(); 
    9597            advenae.Add(advenA); 
     98            respawnPoint = position; 
    9699            return advenA; 
    97100        } 
     
    117120            adven.Friction = 0.2; 
    118121            adven.Tag = "player"; 
    119             adven.Crushed += adven.Destroy; 
     122            adven.Crushed += adven.Die; 
    120123            adven.CollisionIgnoreGroup = playerNum; 
    121124            adven.PlayerNumber = playerNum; 
     
    123126            adven.OnInteractedWith += Pickup; 
    124127            Add(adven); 
     128             
    125129 
    126130            adven.AddCollisionHandler("death", (a, b) => adven.Die()); 
     
    128132            adven.Died += () => 
    129133            { 
     134                lives.Value--; 
    130135                for (int i = 0; i < 15; i++) 
    131136                { 
     
    147152                    blob.Destroyed += updateTimer.Stop; 
    148153                } 
     154                CheckRespawn(); 
    149155            }; 
    150156 
     
    152158 
    153159            return adven; 
     160        } 
     161 
     162        private void CheckRespawn() 
     163        { 
     164            int alive = advenae.Count(x => x.IsAlive); 
     165            if (lives.Value > 0 && alive == 0) 
     166            { 
     167                Timer.SingleShot(2.0, Respawn); 
     168 
     169            } 
     170        } 
     171 
     172        void Respawn() 
     173        { 
     174            advenae[0] = CreatePlayer1(respawnPoint, advenae[0].Width, advenae[0].Height); 
     175 
    154176        } 
    155177 
  • 2016/27/ohjaajat/VenienteFragore/VenienteFragore/VenienteFragore/Player.cs

    r7981 r7985  
    2020        public List<Key> ControlKeys; 
    2121 
     22        private bool isAlive = false; 
     23        public bool IsAlive { 
     24            get 
     25            { 
     26                return isAlive; 
     27            } 
     28            set 
     29            { 
     30                isAlive = true; 
     31            } 
     32        } 
     33 
    2234        private readonly double fullHeight; 
    2335        private readonly double crouchHeight; 
     
    3749        public void Reappear() 
    3850        { 
     51            isAlive = true; 
    3952            IsVisible = true; 
    4053            IgnoresCollisionResponse = false; 
     
    5265        public void Die() 
    5366        { 
     67            isAlive = false; 
    5468            Died?.Invoke(); 
    5569            Destroy(); 
     
    117131                Friction = 0.2; 
    118132            } 
     133 
     134 
     135            if(this.Top < VenienteFragore.Instance.Level.Bottom + 500.0) 
     136            { 
     137                this.Destroy(); 
     138            } 
     139 
    119140        } 
    120141 
  • 2016/27/ohjaajat/VenienteFragore/VenienteFragore/VenienteFragore/VenienteFragore.cs

    r7983 r7985  
    3030        private string currentLevelName; 
    3131        private readonly List<string> collectedParts = new List<string>(); 
     32        private IntMeter lives; 
    3233 
    3334        private List<Player> advenae; 
     35        private Vector respawnPoint; 
    3436 
    3537        private Vector cameraSpeed = new Vector(2.0, 4.0); 
     
    4547        public override void Begin() 
    4648        { 
     49            lives = new IntMeter(5, 0, 99); 
     50            lives.LowerLimit += GameOver; 
    4751            StartLevel("thehub"); 
     52            CreateGUI(); 
    4853 
    4954            Keyboard.Listen(Key.Escape, ButtonState.Pressed, ConfirmExit, "Lopeta peli"); 
    5055        } 
    5156 
     57        private void CreateGUI() 
     58        { 
     59            Label liveMeter = new Label(lives); 
     60            liveMeter.Position = new Vector(Screen.Left + Screen.Width * 0.15, Screen.Top - Screen.Height * 0.1); 
     61            Add(liveMeter); 
     62        } 
     63 
     64        private void GameOver() 
     65        { 
     66            advenae.ForEach(x => x.Destroy()); 
     67            ClearAll(); 
     68 
     69            Level.Background.CreateGradient(Color.Black, new Color(0, 0, 35)); 
     70            Label youLose = new Label(Screen.Width, Screen.Height); 
     71            youLose.Text = "You lost the game"; 
     72            youLose.Color = Color.Red; 
     73            Add(youLose); 
     74 
     75        } 
     76 
    5277        public double DistanceToNearestPlayer(Vector point) 
    5378        { 
     
    6085 
    6186            ClearAll(); 
     87             
    6288            advenae = new List<Player>(); 
    6389            objectMethods = new Dictionary<string, ObjectMethod>(); 
Note: See TracChangeset for help on using the changeset viewer.