Exemplo n.º 1
0
 public void MoveLower(ArchBlock block, float lower, float time)
 {
     if (lower > block.Ratio)
     {
         StartCoroutine(MoveLowerRoutine(block, lower, time));
     }
 }
Exemplo n.º 2
0
    private IEnumerator ApperNextBlockRoutine(ArchBlock archBlock, Color color, float time)
    {
        var ratio      = 0f;
        var controller = archBlock.ArchController;

        float endArchDeg   = controller.ArcDegree;
        float endArchMax   = controller.MaxRadius;
        float beginArchMax = controller.MaxRadius + 2.0f;
        float endArchBet   = controller.BetweenMaskRadius;

        for (float i = 0f; ratio < 1f; i += Time.deltaTime)
        {
            ratio = Mathf.Min(1f, i / time);

            float value = _ArchFillingCurve.Evaluate(ratio);

            controller.ArcDegree         = Mathf.Lerp(0, endArchDeg, value);
            controller.MaxRadius         = Mathf.Lerp(beginArchMax, endArchMax, value);
            controller.BetweenMaskRadius = Mathf.Lerp(0, endArchBet, value);

            yield return(null);

            archBlock.ArchBuilder.color = color;
        }
    }
Exemplo n.º 3
0
    private IEnumerator MoveLowerRoutine(ArchBlock block, float lower, float time)
    {
        float start = block.Ratio;

        for (float i = 0f; i < time; i += Time.deltaTime * ShootSpeed)
        {
            float ratio = Mathf.Clamp(i / time, 0f, 1f);
            block.Ratio = Mathf.Lerp(start, lower, _MoveLowerCurve.Evaluate(ratio));
            yield return(null);
        }
        block.Ratio = lower;
        MoveLowerEndEvent?.Invoke(block);
    }
Exemplo n.º 4
0
    private IEnumerator FittingRoutine(ArchBlock archBlock, float axisAngle, float time)
    {
        float start = archBlock.RotationZ;

        float ratio;

        for (float i = 0f; i < time; i += Time.deltaTime * Time.timeScale)
        {
            ratio = Mathf.Clamp(i / time, 0f, 1f);
            archBlock.RotationZ = Mathf.Lerp(start, axisAngle, _FittingCurve.Evaluate(ratio));
            yield return(null);
        }
        archBlock.RotationZ = axisAngle;
    }
Exemplo n.º 5
0
    private bool CheckLowerTheBlock(ArchBlock block)
    {
        if (block.Ratio < 1f)
        {
            double blockRatio = Math.Truncate(block.Ratio * 10) * 0.1d;
            double maxRatio   = blockRatio;

            bool hasRotationEqualBlock = false;

            foreach (ArchBlock other in _StackingArchBlocks)
            {
                if (Mathf.Abs(other.RotationZ - block.RotationZ) < 1f)
                {
                    hasRotationEqualBlock = true;
                    double ratio = Math.Truncate(other.Ratio * 10) * 0.1d;

                    if (blockRatio < maxRatio)
                    {
                        maxRatio = Math.Min(ratio - ArchBlock.BlockThicknessD, maxRatio);
                    }
                    else
                    {
                        maxRatio = Math.Max(ratio - ArchBlock.BlockThicknessD, maxRatio);
                    }
                }
            }
            if (hasRotationEqualBlock)
            {
                maxRatio = Math.Truncate(maxRatio * 10) * 0.1d;
                return(maxRatio > blockRatio);
            }
            else
            {
                return(true);
            }
        }
        return(false);
    }
Exemplo n.º 6
0
    private IEnumerator CheckBlockClear()
    {
        var blockThickness = ArchBlock.BlockThicknessF * 1.5f;
        var blockCleared   = false;

        for (float i = 1f; i > 0f; i -= ArchBlock.BlockThicknessF)
        {
            if (CanBlockCler(i, out var list))
            {
                _TwinkleCircle.gameObject.SetActive(true);

                ScoreSystem.Instance.ScoreUp(1);
                foreach (var clearBlock in list)
                {
                    clearBlock.Release(BlockReleaseTime);
                    _StackingArchBlocks.Remove(clearBlock);

                    blockCleared = true;
                }
                if (blockCleared)
                {
                    var movedBlocks = _StackingArchBlocks.ToList();

                    for (float w = 0f; w < BlockClearTime; w += Time.deltaTime * Time.timeScale)
                    {
                        yield return(null);
                    }

                    for (float ratio = i; ratio > 0f; ratio -= ArchBlock.BlockThicknessF)
                    {
                        for (int index = 0; index < movedBlocks.Count; index++)
                        {
                            ArchBlock block = movedBlocks[index];
                            if (block.Ratio < ratio)
                            {
                                if (Mathf.Abs(block.Ratio - ratio) < blockThickness)
                                {
                                    ArchBlockShooter.Instance.MoveLower(block, Mathf.Floor(ratio * 10) * 0.1f, Clear_BlockLowerTime);
                                    movedBlocks.RemoveAt(index--);
                                }
                            }
                        }
                        if (movedBlocks.Any(o => o.Ratio < ratio))
                        {
                            for (float w = 0f; w < Clear_OtherLowerTime; w += Time.deltaTime * Time.timeScale)
                            {
                                yield return(null);
                            }
                        }
                    }
                }
                break;
            }
        }
        for (float w = 0f; w < TimeToThinkPrepareNextBlock; w += Time.deltaTime * Time.timeScale)
        {
            yield return(null);
        }
        ArchBlockShooter.Instance.TargetPack = null;

        ArchBlockShooter.Instance.PrepareNextBlock();
    }
Exemplo n.º 7
0
    private void LateUpdate()
    {
        var shootingPack = ArchBlockShooter.Instance.TargetPack;

        if (ContactBlock == null && _StackingBlocks.Count > 0)
        {
            ContactBlock = _StackingBlocks[_StackingBlocks.Count - 1];
        }
        for (int i = 0; i < _StackingBlocks.Count; i++)
        {
            var block = _StackingBlocks[i];

            if (AllBlockDestroy)
            {
                block.Destroy();
                _StackingBlocks.RemoveAt(i--);

                continue;
            }
            if (AllBlockRelease)
            {
                block.Release();
                continue;
            }
            block.ArchUpdate();

            if (shootingPack)
            {
                for (int j = 0; j < shootingPack.Length; j++)
                {
                    if (Mathf.Abs(shootingPack[j].Ratio - block.Ratio) > ArchBlock.BlockThicknessF)
                    {
                        continue;
                    }

                    var shootingBlock = shootingPack[j];

                    float blockAngle         = block.RotationZ > 180f ?         block.RotationZ - 360f :         block.RotationZ;
                    float shootingBlockAngle = shootingBlock.RotationZ > 180f ? shootingBlock.RotationZ - 360f : shootingBlock.RotationZ;

                    if (Mathf.Abs(shootingBlockAngle - blockAngle) <= ArchBlock.DefaultBlockDegree)
                    {
                        ContactBlock = block;

                        ArchBlockShooter.Instance.ShootingStop = true;
                        break;
                    }
                }
            }
        }
        if (AllBlockDestroy)
        {
            AllBlockDestroy = false;
            InGameSceneSystem.Instance.GameOver();

            _TwinkleCircles.gameObject.SetActive(true);
        }
        else if (AllBlockRelease)
        {
            AllBlockRelease = false;
            if (shootingPack != null)
            {
                for (int i = 0; i < shootingPack.Length; i++)
                {
                    shootingPack[i].Release();
                }
            }
            var nextPack = ArchBlockShooter.Instance.NextArchPack;
            if (nextPack != null)
            {
                for (int i = 0; i < nextPack.Length; i++)
                {
                    nextPack[i].Release();
                }
            }
        }
    }
Exemplo n.º 8
0
 public void Add(ArchBlock block)
 {
     _ArchBlockPool.Enqueue(block);
     block.gameObject.SetActive(false);
 }