private void attack()
    {
        // check if the tower has reloaded already
        if (Time.time - lastFire > fireRate) {
            // tower is ready to shoot
            // check if target is still in range
            if (target != null && target.activeSelf && Vector3.Distance(transform.position, target.transform.position) < range + gameManager.rangeAdd) {
                // target is still in range
                // grab a new arrow to shoot
                GameObject go = ObjectPoolerManager.Instance.ArrowPooler.GetPooledObject();

                // place it at tower position
                go.transform.position = transform.position;
                go.transform.rotation = transform.rotation;

                // set direction of arrow towards target
                go.GetComponent<Arrow>().setTarget(target.transform);

                // activate arrow
                go.SetActive(true);
            } else {
                // target is no more in range, change state to searching again
                State = TowerState.Searching;
            }
            // update the last fired time
            lastFire = Time.time;
        }
    }
Example #2
0
 public void ResetTower()
 {
     percentRed = 0f;
     percentBlue = 0f;
     towerState = TowerState.neutral;
     RpcSetTowerState(towerState);
 }
    void Start()
    {
        gameManager = GameObject.Find("GameManager(Clone)").GetComponent<GameManager>();

        //There is no monster in range at the start
        State = TowerState.Searching;
    }
    void Update()
    {
        // check the state of the tower
        if (State == TowerState.Searching) {
            // tower is searching for an enemy

            // check if there are enemies on the map
            if (GameManager.Instance.monsterList.Where(x => x != null).Count() == 0) return;

            // set target to closest enemy
            target = GameManager.Instance.monsterList.Where(x => x != null).Aggregate((current, next) => Vector2.Distance(current.transform.position, transform.position) < Vector2.Distance(next.transform.position, transform.position) ? current : next);

            // check if the target is in range
            if (target != null && target.activeSelf && Vector3.Distance(transform.position, target.transform.position) < range + gameManager.rangeAdd) {
                // target is in range, set state to targeting
                State = TowerState.Targeting;
            }
        } else if (State == TowerState.Targeting) {
            // tower is targeting enemy

            // check if target is still in range
            if (target != null && Vector3.Distance(transform.position, target.transform.position) < range + gameManager.rangeAdd) {

                // shoot at it
                attack();
            } else {
                // enemy left range, search again
                State = TowerState.Searching;
            }
        }
    }
Example #5
0
    protected override void Update()
    {
        base.Update();
        if (dead)
        {
            return;
        }
        switch (state)
        {
        case TowerState.Idle:
            if (GetTarget())
            {
                state = TowerState.Rotating;
            }
            break;

        case TowerState.Rotating:
            if (!CheckTarget() && !GetTarget())
            {
                state = TowerState.Idle;
                break;
            }
            RotateWeapon();
            if (CannonTargetAngle() <= 5f)
            {
                state = TowerState.Attacking;
            }

            break;

        case TowerState.Attacking:
            if (!CheckTarget())
            {
                if (GetTarget())
                {
                    state = TowerState.Rotating;
                }
                else
                {
                    state = TowerState.Idle;
                }
                break;
            }
            RotateWeapon();
            if (CannonTargetAngle() > 10f)
            {
                state = TowerState.Rotating;
            }
            if (Time.time - attackTime >= 1 / fireRate)
            {
                FireCannon();
                attackTime = Time.time;
            }
            break;
        }
    }
Example #6
0
    private void CheckDistance()
    {
        var dist = Vector3.Distance(_transform.position, CurrentTarget.transform.position);

        if (dist > ShootingRadius && State == TowerState.Firing)
        {
            CurrentTarget = null;
            State         = TowerState.Patroling;
        }
    }
Example #7
0
 // Use this for initialization
 void Start()
 {
     tower        = GameObject.Find("Tower");
     other        = tower.GetComponent <TowerState>();
     tempScore    = other.getScore();
     spawnTime    = 3.8f;
     screenBounds = Camera.main.ScreenToWorldPoint(new Vector3(Screen.width, Screen.height, Camera.main.transform.position.z));
     coroutine    = StartCoroutine(zombieWave());
     cooldownItem = 12f;
 }
Example #8
0
    internal void DestroyTower()
    {
        GameObject.Destroy(Tower);
        var explosion = Instantiate(TowerExplosionPrefab, transform.position, Quaternion.identity);

        GameObject.Destroy(explosion, 1.5f);
        TowerState = null;
        Type       = TowerTypes.Unknown;
        IsEmpty    = true;
    }
        public void UpdateUI(SpawnTower selectedBlock, TowerState selectedTowerState)
        {
            sellButton.UpdateButton(selectedTowerState.Price);
            upgradeButton.UpdateButton(selectedTowerState.Type, selectedTowerState.TowerLevel);

            towerMenu.transform.position = PositionHelper.OnTop(
                selectedBlock.Tower.transform,
                selectedBlock.Tower.transform.localScale.y
                );
        }
    //---ゲームクリア-----
    /// <summary>
    /// フロアをすべてクリアした
    /// </summary>
    private void FloorAllClear()
    {
        GameClearEventStert();
        DestoryAnderObj();
        EPSystem[floorNamber].TowerEnd();
        StageEffect.EffectAllStop();
        SEMaster.Play(clearSE);
        BGMMaster.CangeBGM(clearBGM);

        towerState = TowerState.GameClearEnd;
    }
Example #11
0
    void Start()
    {
        tower       = GameObject.Find("Tower");
        other       = tower.GetComponent <TowerState>();
        zomwalk     = gameObject.GetComponent <ZomWalk>();
        animator    = GetComponent <Animator>();
        audioSource = GetComponent <AudioSource>();

        minSpeed = Convert.ToDouble(0.03);
        maxSpeed = Convert.ToDouble(0.2);
    }
    /// <summary>
    /// ポーズの終了
    /// </summary>
    private void PoseEnd()
    {
        SEMaster.Play(KeyInputSE.keyInoutSE.GetClip(KeyInputSE.Type.Cancel));

        Time.timeScale = 1;
        //再開後にキーの情報が残っているので解放
        KeyLoader.keyLoader.KeyRelease();
        towerState = backTowerState;
        keyCanvas.SetActive(true);

        BGMMaster.Play();
    }
Example #13
0
 private void ClickOnBuildBlock()
 {
     if (_selectedBlock.IsFreeBlock)
     {
         Messenger.Broadcast(GameEvent.STORE_OPEN);
     }
     else
     {
         _selectedTowerState = _selectedBlock.Tower.GetComponent <TowerState>();
         OpenUpdateSellMenu();
     }
 }
Example #14
0
        private GeneDetailedResult GetGeneResult(TowerState towerState, Gene gene, int pathLength, int maximumTurns)
        {
            var simulator = new Simulator(pathLength, maximumTurns, towerState.Cannons, towerState.Archers);
            var result    = simulator.Simulate(new MyGeneParser(gene));

            return(new GeneDetailedResult
            {
                Gene = gene,
                NormalizedGene = gene.GenomesList.Select(x => MyGeneParser.GeneToTroopCount(x)).ToArray(),
                Result = result,
            });
        }
Example #15
0
        public TowerState GetState()
        {
            var state = new TowerState
            {
                sprite     = sprite,
                shootPower = shootPower,
                fireRate   = fireRate,
                fireRange  = fireRange
            };

            return(state);
        }
Example #16
0
 bool SetActive()
 {
     if (!canBePlaced)
     {
         return(false);
     }
     currentState   = TowerState.Active;
     canBePlaced    = false;
     canFire        = true;
     myCC.enabled   = true;
     enemiesInRange = new List <Enemy> ();
     return(true);
 }
Example #17
0
    // Update is called once per frame
    void Update()
    {
        if (currentState != towerState)
        {
            StartCoroutine(towerState.UpdateState());
            currentState = towerState;
        }

        if (currentHealth <= 0)
        {
            Destroy(this.gameObject);
        }
    }
    /// <summary>
    /// ポーズの開始
    /// </summary>
    private void PoseStart()
    {
        SEMaster.Play(KeyInputSE.keyInoutSE.GetClip(KeyInputSE.Type.Pause));
        Time.timeScale = 0;
        KeyLoader.keyLoader.KeyRelease();
        backTowerState = towerState;
        towerState     = TowerState.Pose;
        gamePoiseUI.GamePauseUIStart();
        XInputDotNetPure.GamePad.SetVibration(XInputDotNetPure.PlayerIndex.One, 0, 0);
        keyCanvas.SetActive(false);

        BGMMaster.Stop();
    }
Example #19
0
    void updateTowerState()
    {
        var isStationary = stackedBoxesAreStationary();

        if (isStationary)
        {
            setStationary();
        }

        else
        {
            towerState = TowerState.MOVING;
        }
    }
Example #20
0
        private TowerStateResult GetTowerStateResult(TowerState towerState, List <List <Gene> > bestGenes, int pathLength, int maximumTurns)
        {
            var result = new TowerStateResult
            {
                TowerState = towerState,
            };

            foreach (var item in bestGenes)
            {
                result.Genes.Add(GetGeneResult(towerState, item[0], pathLength, maximumTurns));
            }

            return(result);
        }
    /// <summary>
    /// ゲームの開始時の処理
    /// </summary>
    void GameStart()
    {
        if (!FadeIO.fadeIo.fadeNow)
        {
            readyUI.ReadyUIUpdate();
            if (readyUI.IsReadyTimeEnd())
            {
                TimeCounter.timeCounter.TimeCountStart();
                EPSystem[0].EPSStart();

                towerState       = TowerState.TowerUpdate;
                player.controlOn = true;
            }
        }
    }
Example #22
0
    /// <summary>
    /// Update the tower's health value and update its health display
    /// </summary>
    /// <param name="value">The new health value</param>
    private void SetHealth(int value)
    {
        health = value;

        healthBar.UpdateDisplay(health, MAX_HEALTH);

        if (health < 1)
        {
            health = 0;
            if (!GameManager.Instance.muteSFX)
            {
                FMODUnity.RuntimeManager.PlayOneShot(turretDeath);
            }
            currentState = TowerState.Dying;
        }
    }
Example #23
0
    /// <summary>
    /// Update the tower's health value and update its health display
    /// </summary>
    /// <param name="value">The new health value</param>
    private void SetHealth(int value)
    {
        health = value;

        healthBar.UpdateDisplay(health, MAX_HEALTH);

        if (health < 1)
        {
            health = 0;
            if (!GameManager.Instance.muteSFX)
            {
                audioSource.pitch = DEATH_PITCH;
                audioSource.PlayOneShot(deathSound, DEATH_VOLUME * GameManager.Instance.sfxVolume);
            }
            currentState = TowerState.Dying;
        }
    }
    private void Start()
    {
        Application.targetFrameRate = 60;
        Time.timeScale = 1;

        floorNamber = 0;

        EPSystem[0].EPSFOne();

        BlockObj.playerDeid = false;
        StageEffect.EffectActive(floorNamber);

        towerState = TowerState.GameStart;
        FadeIO.fadeIo.FadeIn(40);
        SEMaster.AudioFadeInStart(40);
        BGMMaster.AudioFadeInStart(40);
    }
 // hpのスライダーを更新
 void HpUpdate()
 {
     slider.value = hp;
     if (hp <= 0)
     {
         towerState = TowerState.Destroy;
         this.GetComponent <Renderer>().material = destroyMaterial;
         if (myORpc)
         {
             gameManager.MyTowerCount = 1;
         }
         else if (!myORpc)
         {
             gameManager.PcTowerCount = 1;
         }
     }
 }
    /// <summary>
    /// クリア時の処理
    /// </summary>
    private void FloorClear()
    {
        floorNamber++;
        cameraOp.nam = floorNamber;
        cameraOp.SetTergetPos();
        DestoryAnderObj();
        EPSystem[floorNamber - 1].TowerEnd();

        EPSystem[floorNamber].SetEndBlock(towers[floorNamber - 1].hitBlock);

        EPSystem[floorNamber].EPSStart();
        EPSystem[floorNamber].CamaeraUpStert();
        StageEffect.EffectActive(floorNamber);

        floorUI.setTowerNam(floorNamber);

        towerState = TowerState.CametaUpUpdate;
    }
Example #27
0
    public void Initialise(ComputerLane computerlane, Team blueTeam, Team redTeam)
    {
        // set initial colours
        percentRed = 0f;
        percentBlue = 0f;
        towerState = TowerState.neutral;
        RpcSetTowerState(towerState);
        captureBarHeight = (Screen.height / 150) < 3? 3 : Screen.height / 150;
        captureBarHeight -= captureBarHeight % 3;
        captureBarHeight = 5 * captureBarHeight / 3;
        yOffset = captureBarOffset * captureBarHeight;

        entityLocation = Camera.main.WorldToScreenPoint(gameObject.transform.position);
        captureBarLength = (percentRed / 100) * captureBarInitialLength;
        this.computerLane = computerlane;

        this.blueTeam = blueTeam;
        this.redTeam = redTeam;
    }
Example #28
0
        public virtual GameObject PutDown(Vector3 centerPos)
        {
            Point point = GameManager.GetPointByPos(centerPos);

            if (point.towerType == TowerType.UpGrade)
            {
                (point.BaseTower as UpGradeTower).PutDown(centerPos);
            }
            else
            {
                SetPickableAndTower();
            }

            sp.sortingOrder = points[0].Y;
            state           = TowerState.Idle;
            transform.SetParent(null);
            transform.position = centerPos;
            GameManager.ChangeGameState(GameState.PlayGame);
            return(gameObject);
        }
Example #29
0
    private void FindEnemies()
    {
        var hitColliders = Physics.OverlapSphere(_transform.position, SearchRadius).Where(obj => obj.tag == "Enemy");
        var maxDist      = float.MaxValue;

        foreach (var hitCollider in hitColliders)
        {
            var dist = Vector3.Distance(_transform.position, hitCollider.transform.position);
            if (!(dist < maxDist))
            {
                continue;
            }
            maxDist       = dist;
            CurrentTarget = hitCollider.gameObject;
        }
        if (CurrentTarget != null)
        {
            State = TowerState.Firing;
        }
    }
Example #30
0
    //Initialize vars
    private void Awake()
    {
        //Initialize values
        IsMoveable        = false;
        timeSinceLastShot = 0.0f;
        currentState      = TowerState.Alive;
        overlapSphereCols = new Collider[30];
        target            = null;
        Level             = 0;

        //Find children
        spriteObj          = transform.Find("Sprite").GetComponent <SpriteRenderer>();
        shootSprite        = transform.Find("Sprite/bigBullet").gameObject;
        radiusDisplay      = transform.Find("RadiusDisplay").gameObject;
        towerRadiusMatInst = radiusDisplay.GetComponent <MeshRenderer>().material;

        healthBar.Init();
        SetHealth(MAX_HEALTH);
        expBar.Init();
    }
Example #31
0
    public void DetectEnemy(GameObject target)
    {
        Debug.Log("Detect Enemy Called");

        switch (tState)
        {
        case TowerState.Idle:

            LastShootTime = Time.time;
            this.Target   = target;
            tState        = TowerControl.TowerState.Attack;

            break;

        case TowerState.Attack:

            this.NextTarget = target;

            break;
        }
    }
Example #32
0
        private bool EnoughGenerations(List <double> bestScores, TowerState state)
        {
            if (bestScores.Count < 11)
            {
                return(false);
            }

            if (bestScores.Count > maximumGenerations)
            {
                Console.WriteLine("\rA gene has failed to converge for: ");
                Console.WriteLine("Cannons: <" + String.Join(",", state.Cannons) + ">");
                Console.WriteLine("Archers: <" + String.Join(",", state.Archers) + ">");
                return(true);
            }

            if ((bestScores[bestScores.Count - 1] == bestScores[bestScores.Count - 10]) && (bestScores[bestScores.Count - 1] != 0))
            {
                return(true);
            }

            return(false);
        }
Example #33
0
    IEnumerator Fire()
    {
        bool inRange = true;

        while (inRange)
        {
            FireWeapon();

            yield return(new WaitForSeconds(cooldown));

            if (currentTarget == null)
            {
                inRange = false;
            }
            else
            {
                inRange = Vector3.Distance(transform.position, currentTarget.transform.position) < range;
            }
        }
        state = TowerState.Hunting;
        StartCoroutine(Hunt());
    }
Example #34
0
        private List <Gene> FindBestGenes(TowerState state, int pathLength, int geneLength, int maximumTurns)
        {
            var gg         = new GenerationGenerator(generationCount, geneLength);
            var generation = gg.RandomGeneration();

            var simulator = new Simulator(pathLength, maximumTurns, state.Cannons, state.Archers);

            var bestScores = new List <double>();

            while (!EnoughGenerations(bestScores, state))
            {
                Parallel.ForEach(generation, (gene) =>
                {
                    var result = simulator.Simulate(new MyGeneParser(gene));
                    gene.Score = scoringPolicy.CalculateTotalScore(result);
                });

                bestScores.Add((double)generation.Select(x => x.Score).Max());

                generation = gg.Genetic(generation);
            }

            return(generation);
        }
 public Task<bool> TestEnum(ulong pid, TowerState state)
 {
     throw new NotImplementedException();
 }
Example #36
0
 // Use this for initialization
 void Start()
 {
     lastFireTime = 0;
     state        = TowerState.Hunting;
     StartCoroutine(Hunt());
 }
Example #37
0
    void BuildTower()
    {
        if (rows.Count > 0)
        {
            foreach (GameObject obj in rows)
            {
                Destroy(obj);
            }
        }
        var blockSize = ((BoxCollider)blockModel.collider).size;
        for (int y = 0; y < 4; y++)
        {
            GameObject stabilizer = new GameObject();
            stabilizer.transform.parent = transform;
            stabilizer.AddComponent<BoxCollider>();
            var height = blockSize.y * rowsNumber;
            ((BoxCollider)stabilizer.collider).size = new Vector3(blockSize.x, height, blockSize.x);
            ((BoxCollider)stabilizer.collider).center = new Vector3(0, height / 2, 0);
            stabilizer.transform.localPosition = new Vector3(blockSize.x, 0, 0);
            stabilizer.transform.RotateAround(transform.position, stabilizer.transform.up, 90 * y);
            stabilizers.Add(stabilizer);
        }
        stabilizersTimer = 0f;

        while (rows.Count < rowsNumber)
        {
            var row = AddRow();

            for (int z = -1; z <= 1; z++)
            {
                GameObject block = (GameObject)Instantiate(blockModel);
                block.transform.parent = row.transform;
                block.transform.localRotation = Quaternion.identity;
                block.transform.localPosition = new Vector3(0, 0, z * blockSize.z);
                var manager = block.GetComponent<BlockManager>();
                manager.Faded += HandleBlockFaded;
                manager.Fading += HandleBlockFading;
                manager.Dropped += HandleBlockDropped;
            }
        }
        HandleTopBlockPlacerDestroyed(this, new EventArgs());
        State = TowerState.REMOVING;
    }
Example #38
0
 public InvokeOperation<Boolean> TestEnum(UInt64 pid, TowerState state)
 {
     return serviceDelegateStub.Invoke<Boolean>(MethodId.TestEnum, null, pid, state);
 }
Example #39
0
 void HandleBlockFaded(object sender, BlockEventArgs e)
 {
     State = TowerState.PLACING;
 }
 public Task<bool[]> TestArray(ulong[] pids, TowerState state)
 {
     throw new NotImplementedException();
 }
 public Task<Dictionary<bool, byte[]>> TestDict(Dictionary<bool, PlayerInfo> pids, TowerState state)
 {
     throw new NotImplementedException();
 }
Example #42
0
 private void RpcSetTowerState(TowerState towerState)
 {
     if (towerState == TowerState.neutral){
         neutralTower.SetActive(true);
         cowboyTower.SetActive(false);
         vikingTower.SetActive(false);
     }else if (towerState == TowerState.red){
         neutralTower.SetActive(false);
         cowboyTower.SetActive(false);
         vikingTower.SetActive(true);
     }else{
         neutralTower.SetActive(false);
         cowboyTower.SetActive(true);
         vikingTower.SetActive(false);
     }
     this.towerState = towerState;
 }
Example #43
0
    private void UpdateCaptureValues()
    {
        HeroCapturing heroCapturing = CmdHeroesCapturing(captureRadius);

        // if red capturing
        if ((towerState != TowerState.red || (towerState == TowerState.red && percentRed < 100))
          && heroCapturing == HeroCapturing.red){
            if (percentBlue > 0){
                percentBlue -= captureRate;
            }else{
                percentRed += captureRate;
            }
        // if blue capturing
        }else if((towerState != TowerState.blue || (towerState == TowerState.blue && percentBlue < 100))
          && heroCapturing == HeroCapturing.blue){
            if (percentRed > 0){
                percentRed -= captureRate;
            }else{
                percentBlue += captureRate;
            }
        // when left tend to current state
        }else if (heroCapturing == HeroCapturing.none)
            if (towerState == TowerState.red && percentRed < 100f) percentRed += (captureRate * 0.5f);
            if (towerState == TowerState.blue && percentBlue < 100f) percentBlue += (captureRate * 0.5f);
            if (towerState == TowerState.neutral){
                if (percentRed > 0) percentRed -= (captureRate * 0.25f);
                if (percentBlue > 0) percentBlue -= (captureRate * 0.25f);
        }

        // update capture value and rpc if changed
        TowerState oldTowerState = towerState;
        if (percentRed >= 100f && oldTowerState == TowerState.neutral){
            redTeam.CapturedTower(this);
            towerState = TowerState.red;
            percentRed = 100f;
            UpdateCaptureStats(captureRadius, "redHero");
        }else if (percentBlue >= 100f && oldTowerState == TowerState.neutral){
            blueTeam.CapturedTower(this);
            towerState = TowerState.blue;
            percentBlue = 100f;
            UpdateCaptureStats(captureRadius, "blueHero");
        }else if (percentRed <= 0 && percentBlue <= 0 && oldTowerState != TowerState.neutral){
            if (oldTowerState == TowerState.blue){
                blueTeam.LostTower(this);
            }else{
                redTeam.LostTower(this);
            }
            towerState = TowerState.neutral;
            percentRed = 0;
            percentBlue = 0;
        }
        if (towerState != oldTowerState) RpcSetTowerState(towerState);
    }
Example #44
0
 public InvokeOperation<Boolean[]> TestArray(UInt64[] pids, TowerState state)
 {
     return serviceDelegateStub.Invoke<Boolean[]>(MethodId.TestArray, null, pids, state);
 }
 public Task<List<bool>> TestList(List<bool> pids, TowerState state)
 {
     throw new NotImplementedException();
 }
Example #46
0
 // game over
 void HandleBlockDropped(object sender, BlockEventArgs e)
 {
     if (!e.transform.parent.name.Contains("Row #1"))
         State = TowerState.FALLING;
 }
Example #47
0
 public InvokeOperation<List<Boolean>> TestList(List<Boolean> pids, TowerState state)
 {
     return serviceDelegateStub.Invoke<List<Boolean>>(MethodId.TestList, null, pids, state);
 }
Example #48
0
 void HandleBlockPlaced(object sender, BlockEventArgs e)
 {
     e.Manager.Faded += HandleBlockFaded;
     e.Manager.Fading += HandleBlockFading;
     e.Manager.Dropped += HandleBlockDropped;
     State = TowerState.REMOVING;
 }
Example #49
0
 public InvokeOperation<Dictionary<Boolean, Byte[]>> TestDict(Dictionary<Boolean, PlayerInfo> pids, TowerState state)
 {
     return serviceDelegateStub.Invoke<Dictionary<Boolean, Byte[]>>(MethodId.TestDict, null, pids, state);
 }