private void FireBullet(GameObject target)
    {
        Quaternion desRotation = Quaternion.LookRotation(target.transform.position - transform.position, Vector3.up);

        GameObject bullet = Spawner.Instance.SpawnBullet(turret.bullet.prefab, transform.position, desRotation);

        bullet.transform.rotation = Quaternion.LookRotation((SetBulletDirection(target.transform.position) - bullet.transform.position));

        turret.salvoReloadTime = 0.0000001f;

        bullet.GetComponent <BulletController>().Initiate(@object, turret.bullet);
        audioSource.Play();
        //salvoCount++;
        if (this.FireStage == FireStage.READY)
        {
            if (turret.shotsPerSalvo == 1)
            {
                this.FireStage = FireStage.RELOADING;
            }
            else
            {
                FireStage = FireStage.FIRING_SALVO;
            }
        }
        else
        {
            salvoCount++;
        }

        //isReloading = true;
        //salvoTimer.timerSet = true;
    }
Beispiel #2
0
    public override void fire(Vector2 dir)
    {
        if (m_timer > m_minTimeBetweenFire)
        {
            m_timer = 0;
            switch (m_current)
            {
                case FireStage.Ready:
                    gameObject.AddComponent<BoxCollider>();
                    gameObject.AddComponent<Rigidbody>();
                    rigidbody.constraints = RigidbodyConstraints.FreezePositionZ;
                    m_current = FireStage.Firing;
                    rigidbody.AddForce(dir.x * m_power, dir.y * m_power, 0);
                    break;

                case FireStage.Firing:
                    realIn();
                    break;
                case FireStage.Swinging:
                    Debug.Log("drop");
                    m_hookerTrans.parent = null;
                    transform.parent = m_real;
                    m_hooker.Drop();
                    realIn();
                    break;
            }
        }
    }
    public void StopFire()
    {
        _currentStage = _tileRenderer.Tile.StartingFireStage;
        _tileRenderer.ClearFire();
        Messenger <Vector2> .Broadcast("stopFireLoop", _tileRenderer.Tile.Position);

        Messenger.Broadcast("playFireExtinguished");
    }
Beispiel #4
0
 public TurretControllerPersistance(long targetID, long firePriorityID, FireStage fireStage, int turretIndex, Timer reloadTimer, Turret turret, TurretType turretType, int salvoCount, Timer salvoTimer)
 {
     this.targetID       = targetID;
     this.firePriorityID = firePriorityID;
     this.fireStage      = fireStage;
     this.turretIndex    = turretIndex;
     this.reloadTimer    = reloadTimer;
     this.turret         = turret;
     this.turretType     = turretType;
     this.salvoCount     = salvoCount;
     this.salvoTimer     = salvoTimer;
 }
Beispiel #5
0
 public override void OnCollisionEnter(Collision other)
 {
     if ((m_current==FireStage.Firing)&&(other.gameObject.tag=="Grabbable"))
     {
         Destroy(collider);
         Destroy(rigidbody);
         transform.parent = null;
         m_hooker.Swing = true;
         m_hookerTrans.parent = transform;
         m_current = FireStage.Swinging;
     }
 }
 public ISerializable <TurretControllerPersistance> SetObject(TurretControllerPersistance serializedObject)
 {
     this.target       = serializedObject.targetID != -1 ? MapObject.FindByID(serializedObject.targetID).gameObject : null;
     this.firePriority = serializedObject.firePriorityID != -1 ? MapObject.FindByID(serializedObject.firePriorityID).gameObject : null;
     //this.isReloading = serializedObject.isReloading;
     this.FireStage   = serializedObject.fireStage;
     this.reloadTimer = serializedObject.reloadTimer;
     //this.reloadTimer.action = this.ReloadControl;
     this.salvoCount = serializedObject.salvoCount;
     this.salvoTimer = serializedObject.salvoTimer;
     //this.salvoTimer.action = this.ShotSalvo;
     this.turret     = serializedObject.turret;
     this.turretType = serializedObject.turretType;
     return(this);
 }
    public override void GameUpdate()
    {
        // Not on fire
        if (_currentStage == FireStage.NotFlammable ||
            _currentStage == FireStage.Flammable ||
            _currentStage == FireStage.BurntOut)
        {
            return;
        }

        // Debug Only
#if UNITY_EDITOR
        RemainingStageTime = (_lastStageChange + _stageLifetimes [(int)_currentStage - 1]) - Time.realtimeSinceStartup;
#endif
        if (Time.realtimeSinceStartup - _lastStageChange >= _stageLifetimes[(int)_currentStage - 1])
        {
            // On next stage
            _currentStage = (FireStage)((int)_currentStage + 1);

            // Update sound intensity.
            Messenger <Vector2, float> .Broadcast("setFireLoopIntensity", _tileRenderer.Tile.Position,
                                                  ((int)_currentStage - 1) * 3);

            if ((_currentStage == FireStage.BurntOut))
            {
                // We're done!
                _tileRenderer.ClearFire();
                _tileRenderer.Tile.spriteRenderer.sprite = ScorcedTileSprite;

                // Stop the sound.
                Messenger <Vector2> .Broadcast("stopFireLoop", _tileRenderer.Tile.Position);

                Messenger.Broadcast("playBuildingDestruction");
                Messenger <Vector2> .Broadcast("buildingDestroyed", _tileRenderer.Tile.Position);
            }
            else                 // Render next fire stage.
            {
                _tileRenderer.RenderFire(FirePrefabs.First(p => p.Stage == _currentStage).Prefab);
            }

            _lastStageChange = Time.realtimeSinceStartup;
        }
    }
    public void StartFire(FireStage stage)
    {
        _currentStage    = stage;
        _lastStageChange = Time.realtimeSinceStartup;
        if (stage == FireStage.BurntOut ||
            stage == FireStage.Flammable ||
            stage == FireStage.NotFlammable)
        {
            _tileRenderer.ClearFire();
        }
        else
        {
            if (stage == FireStage.Kindling)
            {
                // Start the sounds.
                Messenger <Vector2, float> .Broadcast("playFireLoop", _tileRenderer.Tile.Position, 0f);

                Messenger.Broadcast("playFireStart");
            }
            _tileRenderer.RenderFire(FirePrefabs.First(p => p.Stage == _currentStage).Prefab);
        }
    }
    private void Update()
    {
        if (this.FireStage == FireStage.READY)
        {
            if ((firePriority != null && IsInRange(firePriority)) || (target != null && IsInRange(target)))
            {
                FireBullet(firePriority != null ? firePriority : target);
            }
        }
        else if (this.FireStage == FireStage.FIRING_SALVO)
        {
            salvoTimer.Execute();

            if (salvoTimer.IsFinished)
            {
                if (firePriority != null || target != null)
                {
                    FireBullet(firePriority != null ? firePriority : target);
                }

                if (salvoCount < turret.shotsPerSalvo)
                {
                    salvoTimer.ResetTimer();
                }
                else
                {
                    this.FireStage = FireStage.RELOADING;
                }
            }
        }
        else if (this.FireStage == FireStage.RELOADING)
        {
            reloadTimer.Execute();
            if (reloadTimer.IsFinished)
            {
                FireStage = FireStage.READY;
            }
        }
    }
Beispiel #10
0
    public float RemainingStageTime = 0; // This is for debug only.

    #endif

    #region Methods

    public override void GameUpdate()
    {
        // Not on fire
        if (_currentStage == FireStage.NotFlammable
            || _currentStage == FireStage.Flammable
            || _currentStage == FireStage.BurntOut) {
            return;
        }

        // Debug Only
        #if UNITY_EDITOR
        RemainingStageTime = (_lastStageChange + _stageLifetimes [(int)_currentStage - 1]) - Time.realtimeSinceStartup;
        #endif
        if(Time.realtimeSinceStartup - _lastStageChange >= _stageLifetimes[(int)_currentStage - 1]) {

            // On next stage
            _currentStage = (FireStage)((int)_currentStage + 1);

            // Update sound intensity.
            Messenger<Vector2, float>.Broadcast ("setFireLoopIntensity", _tileRenderer.Tile.Position,
                                                 ((int)_currentStage - 1) * 3);

            if((_currentStage == FireStage.BurntOut)) {
                // We're done!
                _tileRenderer.ClearFire();
                _tileRenderer.Tile.spriteRenderer.sprite = ScorcedTileSprite;

                // Stop the sound.
                Messenger<Vector2>.Broadcast ("stopFireLoop", _tileRenderer.Tile.Position);
                Messenger.Broadcast ("playBuildingDestruction");
                Messenger<Vector2>.Broadcast ("buildingDestroyed", _tileRenderer.Tile.Position);
            } else { // Render next fire stage.
                _tileRenderer.RenderFire (FirePrefabs.First (p => p.Stage == _currentStage).Prefab);
            }

            _lastStageChange = Time.realtimeSinceStartup;
        }
    }
Beispiel #11
0
 private void realIn()
 {
     Debug.Log("realling in");
     m_current = FireStage.Returning;
     Destroy(collider);
     Destroy(rigidbody);
 }
Beispiel #12
0
 public void StopFire()
 {
     _currentStage = _tileRenderer.Tile.StartingFireStage;
     _tileRenderer.ClearFire ();
     Messenger<Vector2>.Broadcast ("stopFireLoop", _tileRenderer.Tile.Position);
     Messenger.Broadcast ("playFireExtinguished");
 }
Beispiel #13
0
 public void Start()
 {
     m_current = FireStage.Ready;
     m_real = transform.parent;
     m_hookerTrans = m_hooker.transform;
 }
Beispiel #14
0
 public void SetFire(FireStage severity)
 {
     _flammableTile.StartFire(severity);
 }
Beispiel #15
0
 public void StartFire(Vector2 location, FireStage severity)
 {
     var tile = Map.GetTile ((int)location.x, (int)location.y);
     tile.SetFire (severity);
     _fires.Add (tile);
 }
Beispiel #16
0
 public void StartFire(FireStage stage)
 {
     _currentStage = stage;
     _lastStageChange = Time.realtimeSinceStartup;
     if (stage == FireStage.BurntOut
         || stage == FireStage.Flammable
         || stage == FireStage.NotFlammable) {
         _tileRenderer.ClearFire ();
     } else {
         if(stage == FireStage.Kindling) {
             // Start the sounds.
             Messenger<Vector2, float>.Broadcast ("playFireLoop", _tileRenderer.Tile.Position, 0f);
             Messenger.Broadcast ("playFireStart");
         }
         _tileRenderer.RenderFire (FirePrefabs.First (p => p.Stage == _currentStage).Prefab);
     }
 }
Beispiel #17
0
 public void SetFire(FireStage severity)
 {
     _flammableTile.StartFire (severity);
 }
Beispiel #18
0
	public void StartFire(Vector2 location, FireStage severity) {
		var tile = Map.GetTile ((int)location.x, (int)location.y);
		tile.SetFire (severity);
		_fires.Add (tile);
	}
Beispiel #19
0
    public void Update()
    {
        //        Debug.Log(m_current);
        m_timer = m_timer + Time.deltaTime;
        switch (m_current)
        {
            case FireStage.Returning:
                Vector3 returnVec = transform.localPosition.normalized*(-1);
                returnVec.z = 0;

                if (transform.localPosition.magnitude < m_returnSpeed*Time.deltaTime*2)
                {
                    transform.localPosition = Vector3.zero;
                    transform.localRotation = Quaternion.identity;
                    if (m_hookedObject != null)
                    {
                        m_hookedObject.transform.parent = null;
                    }
                    m_current = FireStage.Ready;
                }
                else
                {
                    transform.localPosition= transform.localPosition + (returnVec * Time.deltaTime* m_returnSpeed);
                }
                break;
            case FireStage.Swinging:
                Vector3 dir=m_hookerTrans.localPosition.normalized*(-1);
                m_hookerTrans.localPosition = m_hookerTrans.localPosition + (dir * Time.deltaTime * m_returnSpeed);
                break;
        }
    }
 void OnFireStarted(Vector2 tile, FireStage stage)
 {
     _activeFires++;
 }