//unity private void BeginGame() { //create canyon canyon = GameObjectsFactory.getInstance().Create <Canyon>(); canyon.Generate(difficulty); finishMarker = GameObjectsFactory.getInstance().Create <FinishMarker>(); finishMarker.transform.position = canyon.GetExitPoint(); finishMarker.transform.localScale = new Vector3(20, 1, 0); finishMarker.onHitFinish += OnHitFinish; //setup player if not yet if (player == null) { player = Instantiate(GameObjectsFactory.getInstance().playerPrefab); player.SetControl(control); player.SetPhysicsl(physics); player.SetPScore(score); cameraManager.SetTarget(player.gameObject); } RespawnPlayer(); if (uiManager.isFirstStart) { uiManager.isFirstStart = false; } PlaySnowIfNeeded(); isFinish = false; Cursor.lockState = CursorLockMode.Locked; }
// TODO: добавить отграничение скорострельность /// <summary> /// Обработчик события выстрела /// </summary> /// <param name="args"></param> private void Shoot(GameEventArgs args) { var bullet = GameObjectsFactory.CreateBullet(_ship.GetPoint()); _bullets.Add(bullet); AddDrawable(bullet); }
private void EmitScore(int val) { if (Mathf.Abs(val) > 0) { Points points = GameObjectsFactory.getInstance().Create <Points>(); points.transform.position = transform.position; points.SetValue(val); } }
public static void CheckForRebounce(ICollection <IRebouncable> rebouncable, ICollection <IMovable> movable) { foreach (var Ball in movable) { //granici na moveingObj za udar var ballTop = Ball.Position.Top; var ballLeft = Ball.Position.Left; var ballBottom = Ball.Position.Top + (Ball.Bounds.Height); var ballRight = ballLeft + Ball.Bounds.Width; foreach (var Pad in rebouncable) { //granici na pada var PadLeftUppersideLeft = Pad.Position.Left; var PadLeftUppersideTop = Pad.Position.Top; var PadRightUppersideLeft = Pad.Position.Left + Pad.Bounds.Width; var PadRightUppersideTop = PadLeftUppersideTop; //proverka za udur if ((ballBottom) == PadLeftUppersideTop && ((ballLeft <= PadRightUppersideLeft && ballRight > PadRightUppersideLeft) || (ballRight < PadRightUppersideLeft && ballLeft > PadLeftUppersideLeft) || (ballRight >= PadLeftUppersideLeft && ballLeft < PadLeftUppersideLeft))) { int newLeftSpeed; int newRightSpeed; if (ballRight <= (PadRightUppersideLeft - Pad.Bounds.Width / 4) && ballLeft >= PadLeftUppersideLeft + (Pad.Bounds.Width) / 4) { newLeftSpeed = Ball.Speed.Left / 2; newRightSpeed = -Ball.Speed.Top; Ball.Speed = GameObjectsFactory.GenerateNewPosition(newLeftSpeed, newRightSpeed); } else { if (Ball.Speed.Left == 0) { if ((ballLeft + Ball.Bounds.Width / 2) <= PadLeftUppersideLeft + Pad.Bounds.Width / 2) { newLeftSpeed = GlobalConstants.BallInitSpeedLeft; } else { newLeftSpeed = (-GlobalConstants.BallInitSpeedLeft); } } else { newLeftSpeed = Ball.Speed.Left < 0 ? GlobalConstants.BallInitSpeedLeft : (-GlobalConstants.BallInitSpeedLeft); } newRightSpeed = -Ball.Speed.Top; Ball.Speed = GameObjectsFactory.GenerateNewPosition(newLeftSpeed, newRightSpeed); } } } } }
//incializiram vsi4ki obekti tuk i vkarvam v colectiite ,sled koeto presmqta lista s coordinati public void InitGame() { this.renderer.ShowStartGameScreen(); //int Pad this.rebouncableObjects = new List <IRebouncable>(); int initPadLeftPosition = (this.renderer.ScreenWidth) / 2 - GlobalConstants.padWidth / 2; int initPadTopPosition = ((this.renderer.ScreenHeight) - GlobalConstants.padHeight * 2); var padPosition = GameObjectsFactory.GenerateNewPosition(initPadLeftPosition, initPadTopPosition); var padSize = GameObjectsFactory.GenerateNewSize(GlobalConstants.padWidth, GlobalConstants.padHeight); this.Pad = GameObjectsFactory.GeneratePad(padPosition, padSize); this.rebouncableObjects.Add(this.Pad); //int Ball this.movingObjects = new List <IMovable>(); int initBallLeftPosition = (this.renderer.ScreenWidth) / 2; int initBallTopPosition = ((this.renderer.ScreenHeight) - GlobalConstants.padHeight * (GlobalConstants.distanceFromBottomRowPad) - GlobalConstants.padHeight - GlobalConstants.ballSize); var ballSpeed = GameObjectsFactory.GenerateNewPosition(GlobalConstants.BallInitSpeedLeft, GlobalConstants.BallInitSpeedTop); var ballPosition = GameObjectsFactory.GenerateNewPosition(initBallLeftPosition, (initBallTopPosition)); var ballSize = GameObjectsFactory.GenerateNewSize(GlobalConstants.ballSize, GlobalConstants.ballSize); this.Ball = GameObjectsFactory.GenerateNewBall(ballPosition, ballSize, ballSpeed); this.movingObjects.Add(this.Ball); //init HighScore int initHighScoreLeftPosition = (this.renderer.ScreenWidth) - GlobalConstants.highScoreLeft; int initHighScorePosition = GlobalConstants.distanceFromBottomRowPad; var highScorePosition = GameObjectsFactory.GenerateNewPosition(initHighScoreLeftPosition, initHighScorePosition); var highScoreSize = GameObjectsFactory.GenerateNewSize(GlobalConstants.highScoreWidht, GlobalConstants.highScoreHeight); this.HighScore = GameObjectsFactory.GenerateNewHighScore(highScorePosition, highScoreSize); //init Bricks this.bricks = new List <IDestroyable>(); for (int j = 0; j < GlobalConstants.brickRows; j++) { for (int i = 0; i < GlobalConstants.brickCows; i++) { var brickPosition = GameObjectsFactory.GenerateNewPosition(GlobalConstants.initBrickLeftPosition + i * GlobalConstants.brickWidth * 2, (GlobalConstants.initBrickTopPosition + j * GlobalConstants.brickHright * 2)); var brickSize = GameObjectsFactory.GenerateNewSize(GlobalConstants.brickWidth, GlobalConstants.brickHright); var brick = GameObjectsFactory.GenerateNewBrick(brickPosition, brickSize); Bricks.Add(brick); } } CollisionDetector.GetBoundariesForDestroiableObjects(this.Bricks); }
protected override void OnLoad() { Logger.Print("Space scene start load"); EventManager.AddEventListener(EventManager.Events.ShootEvent, Shoot); EventManager.AddEventListener(EventManager.Events.ChangeScoreEvent, OnChangeScore); Score = 0; _stars.Clear(); _asteroids.Clear(); _bullets.Clear(); for (var i = 0; i < 100; i++) { _stars.Add(GameObjectsFactory.CreateStar()); } Logger.Print("Created {0} stars", _stars.Count); _ship = GameObjectsFactory.CreateSpaceShip(); var random = new Random(); _timer = new Timer(); _timer.Interval = 2000; _timer.Tick += (sender, args) => { GameObjects obj; var next = random.Next(100); if (next % 2 == 0) { obj = GameObjectsFactory.CreateAsteroid(); _asteroids.Add(obj as Asteroid); AddUpdatable(obj); } else { obj = GameObjectsFactory.CreateMedic(); _medics.Add(obj as Medic); } AddDrawable(obj); }; _timer.Start(); AddDrawable(_stars); AddDrawable(_ship); AddUpdatable(_stars); }
private void HandleKeyPressed(object sender, KeyDownEventArgs key) //metoda koito e zaka4en za eventa presingkey { try { if (key.Command == GameComand.MoveLeft) { var Speed = GameObjectsFactory.GenerateNewPosition(GlobalConstants.PadSpeedLeft, GlobalConstants.PadSpeedTop); var newPositon = GameObjectsFactory.GenerateNewPosition(Speed, this.Pad); if (this.renderer.isInBounds(newPositon)) { this.Pad.Position = newPositon; } } else if (key.Command == GameComand.MoveRight) { var Speed = GameObjectsFactory.GenerateNewPosition(-GlobalConstants.PadSpeedLeft, GlobalConstants.PadSpeedTop); var newPositon = GameObjectsFactory.GenerateNewPosition(Speed, this.Pad); if (this.renderer.isInBounds(newPositon)) { this.Pad.Position = newPositon; } } else if (key.Command == GameComand.Pause) { if (this.timer.IsEnabled) { this.timer.Stop(); } else { this.timer.Start(); } } else { throw new WrongKeyException("Wrong key Pressed"); } } catch (WrongKeyException ex) { var position = GameObjectsFactory.GenerateNewPosition(GlobalConstants.msgLeftPosition, GlobalConstants.msgTopPosition); var size = GameObjectsFactory.GenerateNewSize(GlobalConstants.msgWidth, GlobalConstants.msgHeight); var wrongKeyExceptionObject = GameObjectsFactory.GenerateNewErrorText(position, size, ex.Message); this.renderer.Draw(wrongKeyExceptionObject); } }
public World(GameObjectsFactory gameObjectsFactory, int size) { _size = size; gameObjects = new IGameObject[size, size]; for (int i = 0; i < size; i++) { for (int j = 0; j < size; j++) { gameObjects[i, j] = gameObjectsFactory.CreateVoid(i, j); } } hero = gameObjectsFactory.CreateHero(size / 2, size / 2); }
protected override void OnUpdate() { var random = new Random(); for (int i = 0; i < BaseObjectsCount + _wave; i++) { GameObjects obj; var next = random.Next(100); if (next % 10 == 0) { obj = GameObjectsFactory.CreateMedic(); } else { obj = GameObjectsFactory.CreateAsteroid(); } _objects.Enqueue(obj); } _wave++; Logger.Print("Волна создана {0}", _wave); EventManager.DispatchEvent(GameEvents.STAGE_GENERATED); }
protected override void OnLoad() { Logger.Print("Space scene start load"); EventManager <ThrowObjectWaveEventArgs> .AddEventListener(GameEvents.WAVE_NEXT_OBJECT, OnNextObject); EventManager.AddEventListener(GameEvents.SHOOT, Shoot); EventManager.AddEventListener(GameEvents.STAGE_COMPLETE, OnStageCompleted); EventManager.AddEventListener(GameEvents.STAGE_GENERATED, OnStageGenerated); EventManager.AddEventListener(GameEvents.STAGE_GENERATE, OnStageGenerate); _generateWaveState.Init(_objects); _throwObjectWaveState.Init(_objects); _waitForNewWaveState.Init(_objects); _player = new Player(); _stars.Clear(); _asteroids.Clear(); _bullets.Clear(); for (var i = 0; i < 100; i++) { _stars.Add(GameObjectsFactory.CreateStar()); } Logger.Print("Created {0} stars", _stars.Count); _ship = GameObjectsFactory.CreateSpaceShip(); AddDrawable(_stars); AddDrawable(_ship); AddUpdatable(_stars); EventManager.DispatchEvent(GameEvents.STAGE_GENERATE); }
public void BuildWorld(GameObjectsFactory gameObjectsFactory) { _world = new World(gameObjectsFactory, WorldSize); }
//cikula na igrata public void StartGame() { timer.Interval = TimeSpan.FromMilliseconds(GlobalConstants.timerFramesIntervalInMiliSeconds); timer.Tick += (sender, args) => { CollisionDetector.CheckForRebounce(this.rebouncableObjects, this.movingObjects); var screenSize = GameObjectsFactory.GenerateNewSize(this.renderer.ScreenWidth, this.renderer.ScreenHeight); if (CollisionDetector.CheckForBoundariesRebound(movingObjects, screenSize)) { timer.Stop(); this.renderer.ShowEndGameScreen(); } //proverka za udar i smqna na skorosta i posokata pri udar //maha udarenite ot bricks foreach (var movingObject in this.movingObjects) { var posibleCollision = CollisionDetector.CheckForCollisionWithBricks(movingObject, this.Bricks, screenSize); if (posibleCollision.CollideteStaticElementIndex != -1) { if (posibleCollision.Side == HitTypeEnum.horizontal) { movingObject.Speed = GameObjectsFactory.GenerateNewPosition(movingObject.Speed.Left, -movingObject.Speed.Top); } else { movingObject.Speed = GameObjectsFactory.GenerateNewPosition(-movingObject.Speed.Left, movingObject.Speed.Top); } this.bricks[posibleCollision.CollideteStaticElementIndex].DestroyMe(); } } //za vsqko ubito increase na highscore int score = 0; foreach (var brick in this.bricks) { if (brick.IsAlive == false) { score += brick.PointsForBraking; } } (this.HighScore as HighScore).IncreaseHighScore(score); this.bricks.RemoveAll(x => x.IsAlive == false); if (this.bricks.Count == 0) { timer.Stop(); this.renderer.ShowWinGameScreen(HighScore.Text); } this.renderer.Clear(); foreach (var bal in movingObjects) { bal.MoveWithCurrentSpeed(); //premestva topkata sys segashnata i skorost } //draw bricks,pad and ball this.renderer.Draw(this.HighScore); this.renderer.Draw(this.RebouncableObjects.ToArray()); this.renderer.Draw(this.movingObjects.ToArray()); this.renderer.Draw(this.bricks.Where(x => x.IsAlive == true).ToArray()); }; timer.Start(); }