예제 #1
0
파일: DrawnObject.cs 프로젝트: DarkLotus/TD
 public virtual void Update(World world, double curTime)
 {
 }
예제 #2
0
파일: Monster.cs 프로젝트: DarkLotus/TD
 private void Die(World world)
 {
     world.ParticleMan.CreateExplosion(ViewX, ViewY,world,this);
     world.Player.Score += this.ScoreValue;
     world.Player.Gold += (int)(this.ScoreValue * 0.7);
     this.DeleteMe = true;
 }
예제 #3
0
파일: Monster.cs 프로젝트: DarkLotus/TD
        public override void Update(World world, double curTime)
        {
            if (DeleteMe)
                return;
            if (this._hits <= 0f)
            {
                this.Die(world);
            }

            if (path.Count > 0 && curTime > _lastMove)
            {
                Move(_velocity);
                _lastMove = curTime + (MoveDelay / Helper.GameSpeed);
                if (_slowEffect != 0)
                    _lastMove += (MoveDelay / Helper.GameSpeed);
            }
            else if(path.Count == 0)
            {
                world.Player.Lives--;
                this.DeleteMe = true;
            }
            if (_slowEffect < curTime && _slowEffect != 0)
            {
                this._velModifier = 0;
                this._slowEffect = 0;
            }
            if (curTime > nextanim)
            {
                framenum++;
                if (framenum >= (Direction + 1) * 19)
                    framenum = (byte)(Direction * 19);
                nextanim = curTime + 52;
                //Currently playing at 19FPS for animations.
            }

            base.Update(world,curTime);
        }
예제 #4
0
파일: Game.cs 프로젝트: DarkLotus/TD
        private void Update()
        {
            Stopwatch s = new Stopwatch();
            s.Start();
            Stopwatch TotalTimer = new Stopwatch();
            TotalTimer.Start();
            while (true)
            {
                if (GameState == Tower_Defense.GameState.InGame)
                {
                    World.Update(TotalTimer.Elapsed.TotalMilliseconds);

                    if (World.Player.Lives <= 0)
                    {
                        ScoreMenu.InitScoreMenu(this.World.Player,this.World.Map.Name.GetHashCode());
                        GameState = Tower_Defense.GameState.EndGame;
                        World = null;
                    }
                }
                if (GameState == Tower_Defense.GameState.Exit)
                    break;

                HandleUserInput();
                if (_curKey != null)
                {
                    var x = _curKey.KeyCode;
                    HandleIngameKey(x);
                }

                UpdateTime = (int)(s.Elapsed.Milliseconds);
                //if (UpdateTime > UpdateInterval)
                 //   Gameform.Debugger.Debug("GameLoop took " + UpdateTime + "ms");
                if (s.Elapsed.TotalMilliseconds < UpdateInterval)
                    Thread.Sleep((int)(UpdateInterval - s.Elapsed.Milliseconds));
                s.Restart();
            }
        }
예제 #5
0
파일: Game.cs 프로젝트: DarkLotus/TD
        private void handleMenuInput(System.Windows.Forms.MouseEventArgs click)
        {
            for (int i = 0; i < Menu.Buttons.Count(); i++)
            {
                if (Helper.Contains(Menu.Buttons[i].button, click.Location))
                {
                    if (GameState == GameState.MainMenu)
                    {
                        switch (i)
                        {
                            case 0:
                                this.GameState = Tower_Defense.GameState.LevelSelect;
                            //this.Menu = new LevelSelectMenu();
                            return;
                            case 1:
                                 this.GameState = Tower_Defense.GameState.About;
                            //this.Menu = new AboutMenu();
                            return;
                            case 2:
                                 this.GameState = Tower_Defense.GameState.Exit;
                            return;
                        }
                    }
                    if (GameState == GameState.LevelSelect)
                    {
                        this.World = new World(Gameform, Menu.Buttons[i].Text);
                        this.GameState = Tower_Defense.GameState.InGame;
                        return;
                    }
                    if (GameState == GameState.About)
                    {
                        this.GameState = Tower_Defense.GameState.MainMenu;
                        //this.Menu = new MainMenu();
                        return;
                    }
                    if (GameState == GameState.EndGame)
                    {
                        this.GameState = Tower_Defense.GameState.MainMenu;
                        //this.Menu = new MainMenu();
                        return;
                    }
                    if (GameState == GameState.InGamePause)
                    {
                        if (i == 0)
                        {
                            this.GameState = Tower_Defense.GameState.InGame;
                        }
                        else if (i == 1)
                        {
                            GameState = Tower_Defense.GameState.MainMenu;
                            //this.Menu = new MainMenu();
                            World = null;
                            return;
                        }
                        return;
                    }

                }
            }
        }
예제 #6
0
파일: Game.cs 프로젝트: DarkLotus/TD
        private void handleInGameInput(System.Windows.Forms.MouseEventArgs click)
        {
            foreach (var z in this.World.UIElements)
            {
                if (Helper.Contains(z.button, click.Location))
                {
                    if (z.Text == "Pause Game")
                    {
                        this.GameState = Tower_Defense.GameState.InGamePause;
                        //this.Menu = new PauseMenu();
                        return;
                    }
                    if (z.Text == "Next Wave")
                    {
                        this.World.NextWave();
                        return;
                    }
                    if (z.Text == "Exit")
                    {
                        GameState = Tower_Defense.GameState.MainMenu;
                        //this.Menu = new MainMenu();
                        World = null;
                        return;
                    }
                    if (z.Text == "Speed")
                    {
                        if (Helper.GameSpeed == 1)
                            Helper.GameSpeed = 2;
                        else
                            Helper.GameSpeed = 1;
                        return;
                    }
                }
            }
            if (this.World != null)
            {
                if (this.World.ShowUpgradeMenu)
                {
                    if (Helper.Contains(UpgradeMenu.Buttons[0].button, click.Location))
                    {
                        if (World.Player.Gold > UpgradeMenu.Tower.UpgradeCost)
                        {
                            World.Player.Gold -= UpgradeMenu.Tower.UpgradeCost;
                            UpgradeMenu.Tower.LevelUP();
                        }
                        this.World.ShowUpgradeMenu = false;
                        return;
                    }
                    else
                    {
                        this.World.ShowUpgradeMenu = false;
                        return;
                    }
                }
                foreach (TowerBuildButton o in World.BuildMenu.Buttons)
                {
                    if (Helper.Contains(o.button, click.Location))
                    {
                        TowerToBuild = (Tower)Assembly.GetAssembly(o.towerType).CreateInstance(o.towerType.FullName);
                        return;
                    }
                }
            if (!Helper.Contains(GameForm.ViewPort, click.Location))
                return;
            foreach (var o in this.World.DrawableObjects)
                if (Helper.Contains(o.ScreenSprite, click.Location))
                {
                    if (o.Type == ObjectType.Tower)
                    {
                        UpgradeMenu.Update((Tower)o);
                        this.World.ShowUpgradeMenu = true;
                    }
                }

            foreach (var m in this.World.Map.Map)
                if (Helper.Contains(m.ScreenSprite, click.Location))
                {
                    if (TowerToBuild != null)
                        BuildTower(m);
                }
            return;
            }
        }