示例#1
0
    public BaseTower GetTowerOfType(TowerType towerType)
    {
        BaseTower newTower = null;

        switch (towerType)
        {
        case TowerType.BaseDrum:
        {
            newTower = GameObject.Instantiate(TowerPrefabMapper.KickDrumPrefab);
            break;
        }

        case TowerType.HighHat:
        {
            newTower = GameObject.Instantiate(TowerPrefabMapper.HighHatPrefab);
            break;
        }
        }
        IncrementGlobalTowerCount(towerType);
        var towerName = towerType.ToString() + GlobalTowerTypeCount[towerType];

        newTower.Data.TowerType  = towerType;
        newTower.Data.ID         = towerName;
        newTower.gameObject.name = towerName;
        return(newTower);
    }
示例#2
0
文件: GameStart.cs 项目: Juutis/AKJ9
    void Start()
    {
        BaseTower baseTower = Prefabs.Instantiate <BaseTower>();

        baseTower.transform.position = Vector3.zero;

        Energy energy = Prefabs.Instantiate <Energy>();

        energy.transform.position = new Vector3(0f, 0f, 5f);

        Tower tower = Prefabs.Instantiate <Tower>();

        tower.transform.position = new Vector3(5f, 0f, 5f);
        Tower tower2 = Prefabs.Instantiate <Tower>();

        tower2.transform.position = new Vector3(7f, 0f, 7f);

        GameObject goblin = Prefabs.Get <Goblin>();

        for (int i = 0; i < 10; i += 1)
        {
            GameObject newGoblin = Instantiate(goblin, tower.transform.position, Quaternion.identity);
            Vector2    rnd       = Random.insideUnitCircle.normalized * 5f;
            newGoblin.transform.Translate(new Vector3(rnd.x, 0f, rnd.y), Space.World);
        }
    }
示例#3
0
            public override void HandleInput(BaseTower entity, InputEvent inputEvent)
            {
                if (!(inputEvent is InputEventMouseButton) || !inputEvent.IsActionReleased("picked_up"))
                {
                    return;
                }

                var canPlace = entity.CanPlaceTower();

                if (canPlace)
                {
                    var purchased = GameInfo.GameCurrency.PurchaseTower(entity);
                    if (purchased)
                    {
                        entity.TowerStateMachine.ChangeState(Idle);
                    }
                    else
                    {
                        entity.SetForDeletion();
                    }
                }
                else
                {
                    entity.SetForDeletion();
                }
            }
示例#4
0
            public override void HandleInput(BaseTower entity, InputEvent inputEvent)
            {
                if (entity.Locked)
                {
                    return;
                }

                // Will only check to be picked up if not the tower is not locked

                // Check if tower is broken and filter input
                if (entity.TowerStateMachine.IsInState(Broken))
                {
                    return;
                }
                if (!(inputEvent is InputEventMouseButton eventMouseButton) ||
                    !inputEvent.IsActionPressed("picked_up"))
                {
                    return;
                }


                if (entity.GetRect().HasPoint(entity.ToLocal(eventMouseButton.Position)))
                {
                    entity.TowerStateMachine.ChangeState(entity.Purchased ? PickedUp : Buying);
                }
            }
    public void OnInputClicked(InputClickedEventData eventData)
    {
        upgradeSection.SetActive(true);
        BaseTower stats = GazeManager.Instance.HitInfo.transform.GetComponent <BaseTower>();

        txt.text = "Damage: " + stats.attackDamage + " Attack Speed: " + stats.fireRate + " Range: " + stats.radius;
    }
示例#6
0
 void DrawBeam(SpriteBatch spriteBatch, BaseTower tower)
 {
     if (tower.hasTarget())
     {
         if (tower.targetType == "MULTI")
         {
             foreach (BaseEnemy e in tower.groundEnemies)
             {
                 //System.Console.WriteLine("Draw line");
                 spriteBatch.DrawLine(beamTexture, tower.Origin, e.getOrigin, tower.beamColour);
             }
         }
         else if (tower.targetType == "SINGLE")
         {
             //System.Console.WriteLine("Draw line");
             if (tower is LaserTower)
             {
                 spriteBatch.DrawLine(beamTexture, tower.Origin, tower.target.getOrigin, tower.beamColour);
             }
             else if (tower is RailTower)
             {
                 spriteBatch.DrawLine(beamTexture, tower.Origin, tower.target.getOrigin, tower.beamColour);
             }
         }
     }
 }
示例#7
0
 public void addTower(BaseTower tower)
 {
     if (towersNo < towerContainer.Length)
     {
         towerContainer[towersNo] = tower;
         towersNo++;
     }
 }
示例#8
0
 public Point(int x, int y)
 {
     this.X    = x;
     this.Y    = y;
     tile      = default;
     baseTower = default;
     GameManager.Instance.AddTileDic(this);
 }
示例#9
0
    public static void destroyTower(BaseTower curBaseTower)
    {
        int value = curBaseTower.getDestroyReward();

        Destroy(curBaseTower.gameObject);
        addMoney(value);
        gameMenu.setCurMoney(curMoney);
    }
示例#10
0
 public override void HandleInput(BaseTower entity, InputEvent inputEvent)
 {
     if (!(inputEvent is InputEventMouseButton) || !inputEvent.IsActionReleased("picked_up"))
     {
         return;
     }
     entity.TowerStateMachine.ChangeState(Idle);
 }
示例#11
0
    public static T Create <T>(T prefab, Vector3 position, Transform parent, BaseTower tower) where T : BaseProjectile
    {
        T projectile = Instantiate(prefab, position, Quaternion.identity, parent);

        projectile.tower = tower;

        return(projectile);
    }
示例#12
0
 public void InitGrid()
 {
     gridState.isTowerPoint = false;
     spriteRenderer.enabled = true;
     gridState.hasTower     = false;
     gridState.towerID      = -1;
     currentTower           = null;
     baseTower = null;
 }
示例#13
0
 public void upgradeFireDelay(BaseTower baseTower)
 {
     if (gameManager.getCurMoney() >= 25)
     {
         baseTower.decreaseFireDelay();
         gameManager.subtractMoney(25);
         gameMenu.setCurMoney(gameManager.getCurMoney());
     }
 }
示例#14
0
    public void SellTower(int x, int y)
    {
        Debug.Log("Selling at: " + x + " / " + y);
        BaseTower tower = grid.tiles[x, y].tower.GetComponent <BaseTower>();

        Gold += (int)(tower.buildCost * 0.7);
        grid.tiles[tower.posX, tower.posY].type = eTile.Free;
        Destroy(tower.gameObject);
    }
示例#15
0
 public void upgradeTurnSpeed(BaseTower baseTower)
 {
     if (gameManager.getCurMoney() >= 25)
     {
         baseTower.increaseTurnSpeed();
         gameManager.subtractMoney(25);
         gameMenu.setCurMoney(gameManager.getCurMoney());
     }
 }
示例#16
0
 public void upgradeBulletDamage(BaseTower baseTower)
 {
     if (gameManager.getCurMoney() >= 25)
     {
         baseTower.increaseBulletDamage();
         gameManager.subtractMoney(25);
         gameMenu.setCurMoney(gameManager.getCurMoney());
     }
 }
    public void OnInputClicked(InputClickedEventData eventData)
    {
        BaseTower baseT = GazeManager.Instance.HitInfo.transform.GetComponent <BaseTower>();

        dmg      = baseT.attackDamage;
        range    = baseT.radius;
        atkspeed = baseT.fireRate;
        txt.text = "Damage: " + dmg + " Attack Speed: " + atkspeed + " Range: " + range;
    }
示例#18
0
    /**
     * If another tower was selected it hides its 'indicators' and saves the new tower reference as
     * the currently selected one.
     */
    public void towerClicked(BaseTower baseTower)
    {
        if (gameMenu.currentSelectedTower != null && gameMenu.currentSelectedTower != baseTower)
        {
            gameMenu.currentSelectedTower.deSelected();
        }

        gameMenu.currentSelectedTower = baseTower;
    }
示例#19
0
    void OnMouseUp()
    {
        BaseTower tower = GetComponent <BaseTower>();

        if (tower)
        {
            FindObjectOfType <PlayerUI>().DisplayTowerDetails(tower);
        }
    }
示例#20
0
 public override void OnExit(BaseTower entity)
 {
     entity.Update();
     entity.ZIndex = 3;
     entity.PlayerCollision.Disabled = false;
     if (!entity.CanPlaceTower())
     {
         entity.ResetToDragStart();
     }
 }
示例#21
0
 public void DisplayTowerDetails(BaseTower tower)
 {
     chosenTowerParticle.SetActive(true);
     chosenTowerParticle.transform.position = tower.transform.position;
     TowerDetailPanel.SetActive(true);
     HideMinionDetails();
     detailtexts[1].text = "" + tower.turretDmg.calcDmgVsNeutralResistance();
     detailtexts[3].text = "" + tower.turretDmg.GetDamageType();
     detailtexts[5].text = "" + tower.cooldown;
     detailtexts[7].text = "" + tower.range;
     chosenTower         = tower;
 }
示例#22
0
            public override void Update(BaseTower entity, float delta)
            {
                var mousePos = entity.GetGlobalMousePosition();

                entity.Update();
                entity.DragTo(mousePos);
                entity.ZIndex = 4;
                var canPlace = entity.CanPlaceTower();

                entity.AttackColour = canPlace ? GameInfo.ValidColour : GameInfo.InvalidColour;

                entity.DragStart = canPlace ? entity.Position : entity.DragStart;
            }
示例#23
0
    public BaseTower GenerateBaseTower()
    {
        // Create the tower
        GameObject t = Instantiate(tower, transform.position, Quaternion.identity) as GameObject;
        t.name = "Tower: " + name;
        t.transform.parent = transform;
        _ts = t.GetComponent<BaseTower>();

        // Update Path
        _levelController.UpdatePath();

        return t.GetComponent<BaseTower>();
    }
示例#24
0
 public void SetPickableAndTower(BaseTower tower)
 {
     if (tower.tileType == TileType.All || tileType == tower.tileType)
     {
         baseTower = tower;
         state     = PointState.hadThing;
         pickable  = tower.GetComponent <Pickable>();
     }
     else
     {
         Debug.LogError("TileTypeError");
     }
 }
示例#25
0
 public override void Update(BaseTower entity, float delta)
 {
     entity.Targets       = entity.Targets.Where(enemy => !enemy.IsDead()).ToList();
     entity.CurrentTarget = entity.Targets.Count == 0 ? null : entity.Targets.First();
     if (entity.CurrentTarget == null && entity.Targets.Count == 0)
     {
         entity.TowerStateMachine.ChangeState(Idle);
     }
     else
     {
         entity.TrackNextTarget(delta);
         entity.Shoot(entity.CurrentTarget, delta);
     }
 }
示例#26
0
    public TowerComponent BreakTopComponent()
    {
        if (_ts != null) {
            TowerComponent t = _ts.BreakTopComponent();
            if (t.componentType == BaseTower.TOWER_BASE) {
                Destroy(_ts.gameObject);
                _ts = null;
            }

            return t;
        }

        // Update Path
        _levelController.UpdatePath();

        return null;
    }
示例#27
0
 public override void Update(BaseTower entity, float delta)
 {
     if ((entity.CurrentTarget != null || entity.Targets.Count != 0) && entity.Purchased)
     {
         entity.TowerStateMachine.ChangeState(Attacking);
     }
     else
     {
         if (entity.TowerGun.RotationDegrees < 0)
         {
             entity.TowerGun.RotationDegrees += 1;
         }
         if (entity.TowerGun.RotationDegrees > 0)
         {
             entity.TowerGun.RotationDegrees -= 1;
         }
     }
 }
示例#28
0
    public void Activate(BaseTower tower)
    {
        this.tower = tower;
        canvas.transform.position = tower.transform.position + tower.transform.rotation * new Vector3(0, 0.5f, 0);

        ShowStats();

        if (tower.IsMaxLevel())
        {
            upgradeButton.interactable = false;
        }
        else
        {
            upgradeButton.interactable = true;
        }

        canvas.gameObject.SetActive(true);
    }
示例#29
0
    public void Populate()
    {
        BaseTower tower = Control.GetComponent <UiContoller>().SelectedTower;

        if (tower == null)
        {
            return;
        }

        NameTag.GetComponent <Text>().text = tower.TowerName;

        List <TowerUpgrade> buyableUpgrades = tower.Tower.GetBuyableUpgrades();

        Upgrade0.GetComponent <Text>().text = buyableUpgrades.Exists(u => u.track == 0) ? createUpgradeLabel(buyableUpgrades.Find(u => u.track == 0)) : "Maxed!";
        Upgrade1.GetComponent <Text>().text = buyableUpgrades.Exists(u => u.track == 1) ? createUpgradeLabel(buyableUpgrades.Find(u => u.track == 1)) : "Maxed!";
        Upgrade2.GetComponent <Text>().text = buyableUpgrades.Exists(u => u.track == 2) ? createUpgradeLabel(buyableUpgrades.Find(u => u.track == 2)) : "Maxed!";

        TargetButton.GetComponent <TowerTargetButton>().SetText(tower.GetTargetingMode());
        SellButton.GetComponent <TowerSellButton>().SetText(tower.GetTowerWorth().ToString());
    }
示例#30
0
    public void onDestroyTowerMenu()
    {
        if (currentSelectedTower != null)
        {
            int val = currentSelectedTower.getDestroyReward();

            if (GUI.Button(new Rect(menuX, buttonMenuStartY, menuItemWidth, buttonMenuHeight), "Destroy Tower\n\nWorth " + val))
            {
                GameManager.destroyTower(currentSelectedTower);
                currentSelectedTower = null;
                menuState            = MenuState.OuterMenu;
            }
        }
        else
        {
            noTowerSelectedLabel();
        }

        backButton();
    }
示例#31
0
    // Update is called once per frame
    void Update()
    {
        if (Input.GetMouseButtonDown(0) || Input.touchCount > 0)
        {
            if (m_tower != null)
            {
                Vector3 screenPos = Vector3.zero;
                //if the input touch count is > 0 then we are most likely on mobile so use the first touch. Still need to test mobile
                if (Input.touchCount > 0)
                {
                    Touch touch = Input.GetTouch(0);
                    screenPos = touch.position;
                }
                else
                {
                    //was most likey a mouse button down trigger so get the mouse position
                    screenPos = Input.mousePosition;
                }

                //Cast a ray from the screen to the world and see if we collide with something. If we did place the tower
                Ray        ray = Camera.main.ScreenPointToRay(screenPos);
                RaycastHit hit;
                if (Physics.Raycast(ray, out hit))
                {
                    if (hit.transform.gameObject.layer == LayerMask.NameToLayer("Ground"))
                    {
                        GameObject tower = GameObject.Instantiate <GameObject>(m_tower.gameObject, hit.point, Quaternion.identity);
                        tower.transform.position += tower.GetComponent <Collider>().bounds.max.y *Vector3.up;
                    }
                }
                m_tower = null;
            }
        }
        //If right clicked then remove the tower
        else if (Input.GetMouseButton(1))
        {
            m_tower = null;
        }
    }
示例#32
0
    //Function to place a Tower at the place the mouse hits using a ray cast and checking to make sure the thing it hits is a placeble area
    void PlaceTower(Tower newTower)
    {
        //Debug.Log("Left mouse clicked");

        // raycast to hold click point
        RaycastHit click;
        // creat a ray to mouse point
        Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);

        ///initiate and get resuts or ray
        if (Physics.Raycast(ray, out click))
        {
            //if the click was on the maze
            if (click.transform.parent.name == "Maze_1")
            {
                // move the position up
                //click.point.Set(click.point.x, click.point.y, click.point.z);

                // Create tower at click point
                GameObject tower = Instantiate(newTower.MeshName, click.point, Quaternion.identity);

                // get the baseTower script from the new tower to set its attributes
                BaseTower baseTower = tower.GetComponent <BaseTower>();

                // set fire rate depending on selected tower
                baseTower.fireRate = selectedTower.FireRate;

                // set damage of selected tower
                baseTower.damage = selectedTower.Damage;

                //set the fireing range of the tower
                baseTower.range = selectedTower.Range;

                //reduce player's gold by the cost of the tower
                PlayerHandler.playerGold -= selectedTower.Value;
            }
        }
    }
示例#33
0
    /**
     * If another tower was selected it hides its 'indicators' and saves the new tower reference as
     * the currently selected one.
     */
    public void towerClicked(BaseTower baseTower)
    {
        if(gameMenu.currentSelectedTower != null && gameMenu.currentSelectedTower != baseTower)
            gameMenu.currentSelectedTower.deSelected();

        gameMenu.currentSelectedTower = baseTower;
    }
 public void OnEnable()
 {
     instance = target as BaseTower;
     fields = ExposeProperties.GetProperties(instance);
 }
示例#35
0
    public void RemoveTower()
    {
        Destroy(_ts.gameObject);
        _ts = null;

        // Update Path
        _levelController.UpdatePath();
    }
示例#36
0
    void Awake()
    {
        _ts = null;
        _levelController = GameObject.Find(" GameController").GetComponent<LevelController>();

        rotatorPrefab = Resources.Load("Prefabs/Tools/RangeView", typeof(GameObject)) as GameObject;

        _selectionGrid = transform.FindChild("GridSelection").GetComponent<MeshRenderer>();
        _hasTower = false;
        SetSelected(false);
    }
 // Use this for initialization
 void Start()
 {
     baseTower = gameObject.transform.parent.GetComponent<BaseTower> ();
 }