예제 #1
0
    /// <summary>Instantiates the clicked tower into the game somewhere.</summary>
    private void TowerClicked(GameObject prefab)
    {
        // Return if already purchasing to avoid nasty bugs :P
        if (selectedTowerForPurchase != null || bSelling)
        {
            return;
        }

        AudioHandler.ClickSound();

        GameObject ins = Object.Instantiate(prefab, TowerManager.towersContainer);

        ins.GetComponent <RectTransform>().anchoredPosition = new Vector2(GameManager.CANVAS_WIDTH / 2.0f, GameManager.CANVAS_HEIGHT / -2.0f);
        ins.SetActive(true);
        selectedTowerForPurchase = ins.GetComponent <ITower>();
        selectedCp         = ins.GetComponent <TowerClickPoint>();
        selectedCp.enabled = false;                                                                   // Don't allow clicking for sell while purchasing.
        selectedTd         = selectedTowerForPurchase.GetRangeCircle().AddComponent <TowerDisplay>(); // To allow dragging.
        selectedTd.Initialise();
        selectedTowerForPurchase.ShowRangeCircle(true);
        selectedTowerForPurchase.SetEnabled(false);

        // Show the buy options
        buyOptions.alpha = 1.0f;
        buyOptions.gameObject.SetActive(true);

        label_selectedInfoHeader.text  = selectedTowerForPurchase.MyInfo().towerName;
        label_selectedInfoContent.text = selectedTowerForPurchase.MyInfo().towerDescription;

        bBuying = true;
    }
예제 #2
0
 public Aiming(List <ThinkingObject> creatures, Graph graph, ITower tower)
 {
     allcreatures   = new List <ICreature>();
     this.creatures = creatures;
     this.graph     = graph;
     this.tower     = tower;
 }
예제 #3
0
        private void OnTowerActivation(ITower tower, APIActivator activator)
        {
            if (HasTower(tower))
            {
                return;
            }
            switch (activator)
            {
            case APIActivator.XANA:
                if (XanaTowers.Count == 0)
                {
                    onXanaAwaken();
                }
                XanaTowers.Add(tower);
                break;

            case APIActivator.HOPPER:
                HopperTowers.Add(tower);
                break;

            case APIActivator.JEREMIE:
                JeremieTowers.Add(tower);
                break;
            }
        }
예제 #4
0
        private static void OnTowerDeactivation(ITower tower)
        {
            string title = Main.localize("tower.deactivation.title");
            string body  = String.Format(Main.localize("tower.deactivation.subtitle"), tower.Number, Main.localize("sector." + tower.Sector.Name.ToLowerInvariant()));

            FireBasePush.SendMessage(title, body);
        }
    public ITarget FindTarget(ITower tower)
    {
        var colliders = Physics2D.OverlapCircleAll(tower.Position, tower.Range);

        ITarget maxHpEnemy = null;
        float   maxHp      = 0;

        foreach (var collider in colliders)
        {
            var enemy = collider.GetComponent <ITarget>();
            if (enemy != null)
            {
                if (maxHpEnemy == null)
                {
                    maxHpEnemy = enemy;
                    maxHp      = enemy.CurrentHp;
                }
                else
                {
                    if (enemy.CurrentHp > maxHp)
                    {
                        maxHpEnemy = enemy;
                        maxHp      = enemy.CurrentHp;
                    }
                }
            }
        }
        return(maxHpEnemy);
    }
예제 #6
0
        private void OnTowerDeactivation(ITower tower, APIActivator activator)
        {
            if (!HasTower(tower))
            {
                return;
            }
            switch (activator)
            {
            case APIActivator.XANA:
                XanaTowers.Remove(tower);
                if (XanaTowers.Count == 0)
                {
                    onXanaDefeat();
                }
                break;

            case APIActivator.HOPPER:
                HopperTowers.Remove(tower);
                break;

            case APIActivator.JEREMIE:
                JeremieTowers.Remove(tower);
                break;
            }
        }
예제 #7
0
    private void OnLeftMouseClick()
    {
        Ray        ray = Camera.main.ScreenPointToRay(Input.mousePosition);
        RaycastHit hit;

        if (Physics.Raycast(ray, out hit, Mathf.Infinity))
        {
            if (hit.transform.CompareTag("tower"))
            {
                if (Input.GetKey(KeyCode.G))
                {
                    Time.timeScale   = 0;
                    currentGradeInfo = hit.transform.GetComponent <GradeInfo>();
                    currentGradeItem = currentGradeInfo.GetCurrentGrade();
                    currentTower     = hit.transform.GetComponent <ITower>();
                    if (currentGradeItem != null)
                    {
                        LoadAllInfo();
                    }
                    else
                    {
                        ShowOffDialog();
                    }
                }
            }
        }
    }
예제 #8
0
        /*
         * These variables are needed to unregister events later.
         * We dont really recommmend this in this situation
         */
        private static void onTowerdeactivation(ITower tower)
        {
            LyokoAPI.Events.LyokoLogger.Log("Test", "Tour désactivé");
            string json = "{\"secteur\": \"" + tower.Sector.Name + "\",\"nombre\": \"" + tower.Number + "\"}";

            sendEvent("tourdesactiver", json);
        }
예제 #9
0
 public Aiming(List <ICreature> creatures, Graph graph, ITower tower)
 {
     this.creatures = creatures;
     this.graph     = graph;
     this.tower     = tower;
     findTarget();
 }
예제 #10
0
        private async void OnTowerDeactivation(ITower tower)
        {
            string color;

            color = "000000";
            await SendCommand(color);
        }
예제 #11
0
        private static void OnTowerDeactivation(ITower tower)
        {
            string title = "Good job! Tower deactivated!";
            string body  = "Tower nº" + tower.Number + " in the " + Main.GetUppercaseNames(tower.Sector.Name) + ".";

            FireBasePush.SendMessage(title, body);
        }
예제 #12
0
        private static void onHijack(ITower tower, APIActivator old, APIActivator newactivator)
        {
            LyokoAPI.Events.LyokoLogger.Log("Test", "Hijack");
            string json = "{\"secteur\": \"" + tower.Sector.Name + "\",\"nombre\": \"" + tower.Number + "\",\"old\": \"" + getActivator(old) + "\",\"new\": \"" + getActivator(newactivator) + "\"}";

            sendEvent("hijack", json);
        }
예제 #13
0
    private TowerController GetControllerMock(ITower tower)
    {
        var controller = Substitute.For <TowerController>();

        controller.SetTowerController(tower);

        return(controller);
    }
예제 #14
0
 public void Build(ITower tower)
 {
     if (!Buildable)
     {
         return;
     }
     Tower = tower;
 }
예제 #15
0
        private static void OnTowerHijack(ITower tower, APIActivator oldActivator, APIActivator newActivator)
        {
            string title = "Huh? A tower has been hijacked!";
            string body  = "Tower nº" + tower.Number + " in the " + Main.GetUppercaseNames(tower.Sector.Name) + ", from " +
                           Main.GetUppercaseNames(oldActivator.ToString()) + " to " + Main.GetUppercaseNames(newActivator.ToString()) + "!";

            FireBasePush.SendMessage(title, body);
        }
예제 #16
0
 //Baumodus starten
 private void EnterBuildMode()
 {
     TowerToBuild  = null;
     SelectedTower = null;
     //GamePlayScreen.StopGame();
     BuildMode       = true;
     DrawRangeMarker = true;
 }
예제 #17
0
        private static void OnTowerHijack(ITower tower, APIActivator oldActivator, APIActivator newActivator)
        {
            string title = Main.localize("tower.hijack.title");
            string body  = String.Format(Main.localize("tower.hijack.subtitle"), tower.Number, Main.localize("sector." + tower.Sector.Name.ToLowerInvariant()),
                                         Main.GetUppercaseNames(oldActivator.ToString()), Main.GetUppercaseNames(newActivator.ToString()));

            FireBasePush.SendMessage(title, body);
        }
예제 #18
0
    private void HideSellOptions()
    {
        selectedTowerForSell.ShowRangeCircle(false);
        selectedTowerForSell = null;

        sellOptions.alpha = 0.0f;
        sellOptions.gameObject.SetActive(false);
        bSelling = false;
    }
예제 #19
0
 public void BuildTowerIn(TowerCell towerCell, ITower tower, int cost)
 {
     if (!CanBuildTowerIn(towerCell, tower, cost))
     {
         return;
     }
     towerCell.Build(tower.Clone() as ITower);
     Gold -= cost;
 }
예제 #20
0
 private void MoveTopTo(ITower t)
 {
     if (DiskStack.Count > 0)
     {
         int disk = DiskStack.Pop();
         t.AddDisk(disk);
         DisplayMessage($"Disk {disk} moved to Tower {t.TowerId}");
     }
 }
 /// <summary>
 /// Draws tower that is selected on the map.
 /// </summary>
 private void DrawSelectedMapTower(SpriteBatch spriteBatch, ITower tower, int lineNumber)
 {
     DrawTextLine(spriteBatch, "Selected tower", "", lineNumber);
     if (GameMap.SelectedMapTower != null)
     {
         DrawTextLine(spriteBatch, "Attack", tower.Damage.ToString(), lineNumber + 1);
         DrawTextLine(spriteBatch, "Speed", tower.AttackSpeed.ToString(), lineNumber + 2);
         DrawTextLine(spriteBatch, "(U)pgrade", "x" + tower.UpgradePrice.ToString(), lineNumber + 3);
     }
 }
예제 #22
0
 //Baut einen neuen Turm
 private void AddTower(ITower tower)
 {
     TowerList.Add(tower);
     //Dem Levelmanager den Turm mitteilen, damit der weiß, dass dort der Weg blockiert ist
     GamePlayScreen.LevelManager.BuildTower(tower.PathPosition, tower.PathSize);
     //Allen Creeps mitteilen, dass sie sich vielleicht einen neuen Weg suchen müssen
     GamePlayScreen.ChangeCreepGrid(tower);
     //Und das Geld für den Tower abziehen
     GamePlayScreen.MoneyManager.Buy(tower.Price);
 }
예제 #23
0
        /// <summary>
        /// Buys given tower and places it on the map. Buying a tower resets the SelectedShopTower.
        /// If the player does not have enough money, no tower will be placed and SelectedShopTower
        /// will still be reset.
        /// </summary>
        /// <param name="tower">Instance of a tower to be placed</param>
        public void BuyTower(ITower tower)
        {
            if (Money >= tower.Price)
            {
                Towers.Add(tower);
                Money -= tower.Price;
            }

            DeselectShopTower();
        }
예제 #24
0
        public void MoveDisks(int discCount, ITower destination, ITower buffer)
        {
            if (discCount <= 0)
            {
                return;
            }

            MoveDisks(discCount - 1, buffer, destination);
            MoveTopTo(destination);
            buffer.MoveDisks(discCount - 1, destination, this);
        }
예제 #25
0
        public static void DestroySelectedTower()
        {
            if (TowerSelected == null)
            {
                return;
            }

            Money += TowerSelected.Price / 3;
            TowerController.RemoveTower(TowerSelected);
            TowerSelected = null;
        }
예제 #26
0
 public static void Call(ITower tower)
 {
     if ((IsLocked && !Assembly.GetCallingAssembly().Equals(Events.Master)))
     {
         return;
     }
     if (tower.Activated)
     {
         TowerActivationE?.Invoke(tower);
     }
 }
예제 #27
0
        public bool TryAddTower(ITower tower)
        {
            if (this.CanPlaceTower(tower))
            {
                this.AddGameObject(tower);
                this.Player.Money -= tower.Price;
                return(true);
            }

            return(false);
        }
예제 #28
0
    public bool IsChangeTargetNeeded(ITower tower, ITarget enemy)
    {
        if (enemy == null || !enemy.IsAlive)
        {
            return(true);
        }
        //TODO это расстояние до центра цели, а нас интересует расстояние до ее коллайдера
        var distance = Vector2.Distance(enemy.Position, tower.Position);

        return(distance > tower.Range);
    }
 /// <summary>
 /// Draws towers available in the shop.
 /// </summary>
 /// <param name="spriteBatch">Object to be used for drawing.</param>
 /// <param name="heading">Heading of the shop.</param>
 /// <param name="lineNumber">Line number where to print heading. Will be used to print rest of the shop too.</param>
 /// <param name="textures">Dictionary which contains textures used to draw towers.</param>
 private void DrawTowerShop(SpriteBatch spriteBatch, string heading, int lineNumber, Dictionary <string, Texture2D> textures)
 {
     DrawTextLine(spriteBatch, heading, "", lineNumber);
     for (int i = 0; i < GameMap.AvailableTowers.Count; i++)
     {
         float  tY    = Y + ContentTopBase + LineHeight * (lineNumber + 1) + 5 + i * 70;
         ITower tower = GameMap.AvailableTowers[i];
         tower.Position = new Vector2(X + Column1Base, tY);
         spriteBatch.Draw(textures[tower.TextureName], tower.Position, Color.White);
         spriteBatch.DrawString(TextFont, "x" + tower.Price.ToString(), new Vector2(X + Column1Base + 70, tY + 27), Color.Black);
     }
 }
예제 #30
0
        public ITower Spawn(
            Guid guid,
            Vector3 position,
            byte rotation
            )
        {
            ITower tower = (ITower)GetBasicBuilding(guid, position, rotation);

            AddToLists(tower);

            return(tower);
        }
        /// <summary>
        /// Create test Airplanes
        /// </summary>
        /// <param name="_tower"></param>
        private static void CreateAirplanes(ITower _tower)
        {
            //Create Airplanes
            int numberOfAirplanes = 0;
            bool repeat = true;
            while (repeat)
            {
                Console.WriteLine();
                Console.WriteLine("Enter the number of Aircraft to Process. Maximum 26");
                string numberOfAirplanesAsString = Console.ReadLine();
                repeat = !int.TryParse(numberOfAirplanesAsString, out numberOfAirplanes);

                if (numberOfAirplanes > 26 || numberOfAirplanes < 1)
                {
                    repeat = true;
                }
            }

            Random _randon = new Random();
            while (numberOfAirplanes > 0)
            {
                //The airplane waits before calling the tower.  Otherwise the output is too fast
                int waitTimeInSeconds = _randon.Next(2, 60);

                IAirplane _airplane = ServiceLocator.Resolve<IAirplane>();
                _airplane.StartWaitTime(waitTimeInSeconds);

                _airplane.CallSign = (CallSigns)numberOfAirplanes;

                int _startCondition = _randon.Next(1, 3);

                if (_startCondition == 1)
                {
                    _airplane.StartCondition = StartCondition.Parked;
                }
                else
                {
                    _airplane.StartCondition = StartCondition.Flying;
                }

                Console.WriteLine("***");
                Console.WriteLine();
                Console.WriteLine("New Airplane, Call Sign " + _airplane.CallSign + " is currently " + _airplane.StartCondition);
                Console.WriteLine();


                _tower.AirplaneCount++;

                numberOfAirplanes--;
            }
        }
예제 #32
0
        public override void Update(GameTime gameTime)
        {
            manager.Update(gameTime);
            if (GamePlayScreen.TowerManager.SelectedTower != null)
            {
                if (GamePlayScreen.TowerManager.SelectedTower != LastSelectedTower)
                {
                    LastSelectedTower = GamePlayScreen.TowerManager.SelectedTower;
                    SelectorPosition = LastSelectedTower.Position;
                    SelectorScale = new Vector2(LastSelectedTower.Size.X / SelectorTexture.Width,
                                                LastSelectedTower.Size.Y / SelectorTexture.Height);
                    ShowTowerInfo(LastSelectedTower);
                }
            }
            else
            {
                SelectorScale = Vector2.Zero;
                LastSelectedTower = null;
                if (TowerWindow != null)
                {
                    TowerWindow.Close();
                }
            }

            KeyboardState state = Keyboard.GetState();
            if (state.IsKeyDown(Keys.Tab) && !oldState.IsKeyDown(Keys.Tab))
            {
                if (Console.Visible)
                    Console.Hide();
                else
                {
                    Console.Show();
                    Console.BringToFront();
                    foreach (Control control in Console.Controls)
                    {
                        if (control is TextBox)
                            control.Focused = true;
                    }
                }
            }
            oldState = state;

            base.Update(gameTime);
        }
        /// <summary>
        /// Create test runways
        /// </summary>
        /// <param name="_tower"></param>
        private static void CreateRunways(ITower _tower)
        {
            int numberOfRunways = 0;
            bool repeat = true;
            while (repeat)
            {
                Console.WriteLine();
                Console.WriteLine("Enter the number of Runways at this airport.  Maximum 5");
                string numberOfRunwaysAsString = Console.ReadLine();
                repeat = !int.TryParse(numberOfRunwaysAsString, out numberOfRunways);

                if (numberOfRunways > 5 || numberOfRunways < 1)
                {
                    repeat = true;
                }
            }

            Random _randon = new Random();
            while (numberOfRunways > 0)
            {
                IRunway _runway = ServiceLocator.Resolve<IRunway>();
                _runway.RunwayDesignation = (RunwayDesignation)numberOfRunways;
                _runway.IsRunwayAvailable = true;

                Console.WriteLine("***");
                Console.WriteLine();
                Console.WriteLine("Runway " + _runway.RunwayDesignation + " is currently free for use");
                Console.WriteLine();

                _tower.AddRunways(_runway);

                numberOfRunways--;
            }
        }
예제 #34
0
		//Baut einen neuen Turm
		private void AddTower(ITower tower) {
			TowerList.Add(tower);
			//Dem Levelmanager den Turm mitteilen, damit der weiß, dass dort der Weg blockiert ist
			GamePlayScreen.LevelManager.BuildTower(tower.PathPosition, tower.PathSize);
			//Allen Creeps mitteilen, dass sie sich vielleicht einen neuen Weg suchen müssen
			GamePlayScreen.ChangeCreepGrid(tower);
			//Und das Geld für den Tower abziehen
			GamePlayScreen.MoneyManager.Buy(tower.Price);
		}
예제 #35
0
		//Baumodus starten
		private void EnterBuildMode() {
			TowerToBuild = null;
			SelectedTower = null;
			//GamePlayScreen.StopGame();
			BuildMode = true;
			DrawRangeMarker = true;
		}
예제 #36
0
		//Wird von ausßerhalb aufgerufen um einen Turm mit dem entsprechenden Key zu bauen
		public bool StartTowerBuildMode(string key) {
			bool result = true;
			//Bausmodus starten
			EnterBuildMode();
			key = key.ToLower();
			//Den zu erstellenden Turm schonmal erzeugen um auf wichtige Eigenschaften Zugriff zu bekommen
			TowerToBuild = CreateTowerInstance(key);
			if (TowerToBuild != null) {
				//falls wir uns den Turm leisten können
				if (GamePlayScreen.MoneyManager.CanBuy(TowerToBuild.Price)) {
					BuildModeRange = TowerToBuild.Range;
					RangeSize = new Vector2(2 * BuildModeRange, 2 * BuildModeRange);
					RangeScale = new Vector2(RangeSize.X / RangeTexture.Width, RangeSize.Y / RangeTexture.Height);

					BuildMarkerSize = new Vector2(GamePlayScreen.LevelManager.GridSize.X * TowerToBuild.PathSize.X,
												  GamePlayScreen.LevelManager.GridSize.Y * TowerToBuild.PathSize.Y);
					BuildMarkerScale = new Vector2(BuildMarkerSize.X / BuildMarkerTexture.Width,
												   BuildMarkerSize.Y / BuildMarkerTexture.Height);
					TowerToBuildKey = key;
				} else {
					GamePlayScreen.GuiManager.Log("Nicht Genug Geld vorhanden, Preis = " + TowerToBuild.Price, 1);
					result = false;
				}
			} else {
				GamePlayScreen.GuiManager.Log("Ungültiger TowerKey", 1);
				result = false;
			}
			//Falls was schief gegangen ist, abbrechen
			if (!result) {
				CancelBuildMode();
			}
			return result;
		}
예제 #37
0
		//Löscht einen Turm
		public bool RemoveTower(ITower tower) {
			if (tower == null) {
				return false;
			}
			//Turm zum Löschen markieren
			TowerDeleteList.Add(tower);
			//Turm aus dem Level (Wegfindung) löschen
			GamePlayScreen.LevelManager.RemoveTower(tower.PathPosition, tower.PathSize);
			//Und die Creeps dürfen sich wieder einen neuen Weg suchen
			GamePlayScreen.ChangeCreepGrid(null);
			return true;
		}
예제 #38
0
 public void ChangeCreepGrid(ITower tower)
 {
     if (tower != null)
     {
         var waypoints = new List<Vector2>();
         for (int i = (int)tower.PathPosition.X - 1; i < tower.PathPosition.X + tower.PathSize.X - 1; i++)
         {
             for (int j = (int)tower.PathPosition.Y - 1; j < tower.PathPosition.Y + tower.PathSize.Y - 1; j++)
             {
                 waypoints.Add(new Vector2(i,j));
             }
         }
         foreach (Creep creep in CreepList)
         {
             creep.GridChanged(waypoints);
         }
     }
 }
예제 #39
0
        private void ShowTowerInfo(ITower tower)
        {
            if (TowerWindow != null)
            {
                TowerWindow.Close();
                manager.Remove(TowerWindow);
                TowerWindow = null;
            }
            TowerWindow = new TowerInfoWindow(manager, CurrGame, GamePlayScreen);
            TowerWindow.Closed += delegate { TowerWindow = null; };
            TowerWindow.Tower = tower;
            TowerWindow.DesiredLeft = (int)(tower.Position.X + tower.Size.X / 2);
            TowerWindow.DesiredTop = (int)(tower.Position.Y + tower.Size.Y / 2);
            bool showDamage = bool.Parse(TowerManager.GetTowerProperty("Labels", tower.Key, "ShowDamage"));
            bool showRange = bool.Parse(TowerManager.GetTowerProperty("Labels", tower.Key, "ShowRange"));
            bool showInterval = bool.Parse(TowerManager.GetTowerProperty("Labels", tower.Key, "ShowInterval"));

            DebugLog("ShowTowerInfo: " + tower.Key);

            TowerWindow.Init(showDamage, showRange, showInterval);
            TowerWindow.Show();
            TowerWindow.BringToFront();
        }
예제 #40
0
        /// <summary>
        /// Dequeue airplanes from request queue and process the request
        /// </summary>
        /// <param name="tower"></param>
        private static void ProcessRequests(ITower tower)
        {
            IAirplane airplane = ServiceLocator.Resolve<IAirplane>();

            bool airplaneFound = false;

            while (tower.AirplaneCount > 0)
            {
                if (tower.Runways.Count == 0) continue; //Because we might start processing before the runways are setup

                foreach (Runway runway in tower.Runways)
                {
                    lock(_lockObject)
                    {
                        if (runway.IsRunwayAvailable)
                        {
                            if (tower.RequestQueue.Count == 0) break;  //No airplanes have requested a runway

                            airplaneFound = true;

                            airplane = tower.RequestQueue.Dequeue();
                            airplane.AssignedRunway = runway;

                            Console.WriteLine("---");
                            Console.WriteLine();
                            Console.WriteLine("Tower to " + airplane.CallSign + ": Please use Runway " + airplane.AssignedRunway.RunwayDesignation);
                            Console.WriteLine();

                            break;
                        }

                    }
                }

                if (airplaneFound)
                {
                    airplane.UseRunWay();
                    airplaneFound = false;
                }
            }

            Console.WriteLine("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
            Console.WriteLine();
            Console.WriteLine("All Aircraft have been processed");
            Console.WriteLine("Press any key to end");
            Console.WriteLine();
            Console.WriteLine("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");

            Console.ReadKey();
        }