Exemple #1
0
 private void Awake()
 {
     Instance     = this;
     _spawnPoints = transform.Cast <Transform>().ToArray();
     PoolFood();
     _foodSpawner = Timing.RunCoroutine(HandleFoodSpawning());
 }
Exemple #2
0
 public void HandleCat()
 {
     _round++;
     IsCatActive = true;
     WaterHandler.Instance.StopAllWaterInteractions();
     _handleCatCoroutine = Timing.RunCoroutine(HandleCatCoroutine());
 }
Exemple #3
0
    private void Spawn()
    {
        float chances = 0;

        for (int i = 0; i < _enemiesPool.Length; ++i)
        {
            chances += _enemiesPool[i].Chances;
        }

        float random = Random.Range(0, chances);

        for (int i = 0; i < _enemiesPool.Length; ++i)
        {
            chances -= _enemiesPool[i].Chances;
            if (chances <= random)
            {
                Enemy enemy = _enemiesPool[i].Activate(new Vector3(
                                                           Random.Range(_minSpawnPositionX, _maxSpawnPositionX),
                                                           2f,
                                                           _spawnPositionZ));

                _enemyList.Add(enemy);
                break;
            }
        }

        _spawnCoroutine = Timing.CallDelayed(
            Random.Range(_minDelay, _maxDelay),
            Spawn);
    }
Exemple #4
0
 public static void CleanlyKillCoroutine(ref CoroutineHandle?coroutine)
 {
     if (coroutine.HasValue)
     {
         Timing.KillCoroutines(coroutine.Value);
         coroutine = null;
     }
 }
Exemple #5
0
 public static void CleanlyKillCoroutine(ref CoroutineHandle?handler)
 {
     if (handler.HasValue)
     {
         Timing.KillCoroutines(handler.Value);
         handler = null;
     }
 }
Exemple #6
0
    private void DecrementWaterLevel(float value, float overTime)
    {
        if (_faucetOn)
        {
            return;
        }

        TimingHelpers.CleanlyKillCoroutine(ref _waterLevelCoroutine);
        _waterLevelCoroutine = Timing.RunCoroutine(HandleWaterLevelChange(_currentWaterLevel - value, overTime));
    }
Exemple #7
0
    public void StartPlaying()
    {
        if (_playing)
        {
            return;
        }

        _playing = true;
        TimingHelpers.CleanlyKillCoroutine(ref _audioHandlingCoroutine);
        _audioHandlingCoroutine = Timing.RunCoroutine(Play());
    }
Exemple #8
0
    private void Start()
    {
        FoodLevel = 100;
        OilLevel  = 100;

        EnablePieces();

        _handleActionsCoroutine = Timing.RunCoroutine(HandleActions());

        _oilHandler  = Timing.RunCoroutine(HandleOilLevel());
        _foodHandler = Timing.RunCoroutine(HandleFoodLevel());
        _partHandler = Timing.RunCoroutine(HandlePartLevel());
    }
Exemple #9
0
 private void Awake()
 {
     Instance       = this;
     _spawnPoints   = WaterBasedSpawnPointsParent.transform.Cast <Transform>().ToArray();
     CanHandleWater = true;
     WaterEdgeOn    = false;
     WaterEdge.SetActive(false);
     _handleWaterCoroutine = Timing.RunCoroutine(HandleWater());
     AudioManager.Instance.DrainEffect.StartPlaying();
     _waterCollider = GetComponent <EdgeCollider2D>();
     FillingWaterAnim.SetActive(false);
     DrainingWaterAnim.SetActive(true);
     WaterImage.alphaHitTestMinimumThreshold = 0.15f;
 }
Exemple #10
0
    public void ResumeWaterInteractions()
    {
        if (!CurrentFish.IsAlive)
        {
            return;
        }

        _handleWaterCoroutine = Timing.RunCoroutine(HandleWater());
        CanHandleWater        = true;
        foreach (var item in WaterTapAnimator)
        {
            item.enabled = true;
        }
    }
Exemple #11
0
    private void OnCollisionStay2D(Collision2D collision)
    {
        if (!IsAlive)
        {
            return;
        }

        TimingHelpers.CleanlyKillCoroutine(ref _movingCoroutine);
        _movingCoroutine = Timing.RunCoroutine(HandleGoTo(transform.localPosition), Segment.FixedUpdate);

        if (WaterHandler.Instance.WaterEdgeOn)
        {
            KillFishie();
        }
    }
Exemple #12
0
    private IEnumerator <float> HandleGoTo(Vector3 position)
    {
        while (Vector3.Distance(position, transform.localPosition) > DISTANCE_CUTOFF)
        {
            var thisSpeed      = Speed;
            var vectorToTarget = position - transform.localPosition;
            var angle          = Mathf.Atan2(vectorToTarget.y, vectorToTarget.x) * Mathf.Rad2Deg;

            //DOESNT REALLY WORK YET
            //if (WaterHandler.Instance.WaterEdgeOn)
            //{
            //    var closestPos = Vector3.zero;
            //    var edgeDistance = 0f;
            //    WaterHandler.Instance.GetClosestDataToEdge(transform.localPosition, out closestPos, out edgeDistance);

            //    var toPosition = (closestPos - transform.localPosition);
            //    var angleToPosition = Mathf.Atan2(toPosition.y, toPosition.x) * Mathf.Rad2Deg;

            //    if (angleToPosition < 0f)
            //    {
            //        angleToPosition += 360f;
            //    }

            //    Debug.Log("AP : " + angleToPosition + " ,D: " + edgeDistance);
            //    if (angleToPosition < 180f)
            //    {
            //        thisSpeed = Mathf.Clamp(thisSpeed - ((100 - edgeDistance) * 0.25f), 1, Speed);
            //    }
            //    else
            //    {
            //        thisSpeed = Mathf.Clamp(thisSpeed + ((100 - edgeDistance) * 0.25f), 1, Speed * 2);
            //    }
            //    //Mod thisSpeed
            //}

            transform.localPosition = Vector3.MoveTowards(transform.localPosition, position, thisSpeed * Time.deltaTime);

            var q = Quaternion.AngleAxis(angle, Vector3.forward);
            transform.rotation = Quaternion.Slerp(transform.rotation, q, RotationSpeed * Time.deltaTime);

            yield return(Timing.WaitForOneFrame);
        }

        _movingCoroutine = null;
    }
Exemple #13
0
    public void TurnOnFaucet()
    {
        if (!CanHandleWater || _faucetOn)
        {
            return;
        }

        _faucetOn = true;
        TimingHelpers.CleanlyKillCoroutine(ref _waterLevelCoroutine);
        _handleFaucetCoroutine = Timing.RunCoroutine(HandleFaucet());
        AudioManager.Instance.FaucetEffect.StartPlaying();
        AudioManager.Instance.DrainEffect.EndPlaying();
        FillingWaterAnim.SetActive(true);
        DrainingWaterAnim.SetActive(false);
        foreach (var item in WaterTapAnimator)
        {
            item.enabled = false;
        }
    }
Exemple #14
0
 public void Enable(bool ingameElement, bool anim = true)
 {
     if (ingameElement)
     {
         if (anim)
         {
             TimingHandlers.CleanlyKillCoroutine(ref _showingCoroutine);
             _showingCoroutine = Timing.RunCoroutine(Show(true));
         }
         else
         {
             IngameElement.gameObject.SetActive(true);
         }
     }
     else
     {
         UIElement.gameObject.SetActive(true);
     }
 }
Exemple #15
0
    public void Damage()
    {
        if (_damageTweener != null)
        {
            _damageTweener.Kill();
        }
        if (_damageCoroutine.HasValue)
        {
            Timing.KillCoroutines(_damageCoroutine.Value);
        }

        _damageTweener = _damageImage.DOFade(1f, 0.1f).SetEase(Ease.Flash).OnComplete(() =>
        {
            _damageTweener   = null;
            _damageCoroutine = Timing.CallDelayed(1f, () =>
            {
                _damageCoroutine = null;
                _damageTweener   = _damageImage.DOFade(0, 2f).SetEase(Ease.InOutBounce).OnComplete(() =>
                {
                    _damageTweener = null;
                });
            });
        });
    }
Exemple #16
0
 public void MoveTo(Vector3 position)
 {
     TimingHelpers.CleanlyKillCoroutine(ref _movingCoroutine);
     _movingCoroutine = Timing.RunCoroutine(HandleGoTo(position), Segment.FixedUpdate);
 }
Exemple #17
0
    private IEnumerator <float> HandleCatCoroutine()
    {
        CoroutineHandle?meowing = null;

        if (_round == 4)
        {
            meowing = Timing.RunCoroutine(SpawnAllMeows());
        }
        AudioManager.Instance.CatTheme.StartPlaying();

        foreach (var catWave in CatWaves)
        {
            catWave.SetActive(true);
        }
        yield return(Timing.WaitForSeconds(AudioManager.Instance.CatTheme.StartClip.length));

        foreach (var catWave in CatWaves)
        {
            catWave.SetActive(false);
        }
        Cat.sprite = Cats[_round - 1];
        Cat.gameObject.SetActive(true);
        yield return(Timing.WaitForSeconds(DelayBeforeCatSpawnsAttacks));

        _attacks.Add(Instantiate(CatAttackIndicatorPrefab, transform).GetComponent <Animator>());

        foreach (var attack in _attacks)
        {
            attack.transform.position = WaterHandler.Instance.GetPointInsideWater();
            attack.gameObject.SetActive(true);
        }

        yield return(Timing.WaitForSeconds(DelayBeforeCatAttacksKill));

        foreach (var attack in _attacks)
        {
            attack.SetTrigger("Attack");
        }
        AudioManager.Instance.PlayCatAttack();
        AudioManager.Instance.CatTheme.EndPlaying();
        CatAnimator.SetTrigger("Despawn");

        yield return(Timing.WaitForSeconds(DelayBeforeCatCleanup));

        foreach (var attack in _attacks)
        {
            attack.gameObject.SetActive(false);
        }

        Cat.gameObject.SetActive(false);
        WaterHandler.Instance.ResumeWaterInteractions();

        TimingHelpers.CleanlyKillCoroutine(ref meowing);

        if (_round == 4)
        {
            WaterHandler.Instance.CurrentFish.Victory();
        }

        if (WaterHandler.Instance.CurrentFish.IsAlive)
        {
            IsCatActive = false;
        }
    }
Exemple #18
0
 public void ReplenishOil()
 {
     _replenishOilCoroutine = Timing.RunCoroutine(ReplenishOilCoroutine());
 }
Exemple #19
0
 public void ReplenishFood()
 {
     _replenishFoodCoroutine = Timing.RunCoroutine(ReplenishFoodCoroutine());
 }