private void buildPolygon(int num, float startRatio, float endRatio)
        {
            mathUtil.ix = ix;
            mathUtil.dx = dx;
            mathUtil.iz = iz;
            mathUtil.dz = dz;

            mathUtil.paramA = paramA;
            mathUtil.paramB = paramB;
            mathUtil.ratioY = ratioY;

            var startIndex = startRatio;
            var point      = mathUtil.GetFxPos(startIndex);
            var index      = 0;

            for (var i = 0; i < num; i++)
            {
                var ratio = (float)i / num;

                // range対応
                if (ratio < startRatio)
                {
                    continue;
                }
                else if (ratio > endRatio)
                {
                    continue;
                }

                var start = point;
                var end   = mathUtil.GetFxPos(ratio);

                // 奥行きの太さ対応
                var _lineWidth = ratio * lineWidth;

                AddPolygon(start, end, _lineWidth, index++, num);
                point = end;
            }
        }
示例#2
0
        public void UpdateView(float elapsedFromStartTimeSec)
        {
            // ヒットまでの割合
            var ratio = GetActiveTimeRatio(elapsedFromStartTimeSec);

            // 直線移動
//            const int ix = 360;
//            const int iy = -905;
//            const int dx = 300;
//            var x = ix + dx * (xId % 5);
//            var y = iy + 1000 * ratio;
//            var z = 0;
            // 移動
//            view.transform.SetLocalPosition(x, y, z);

            // 曲線移動
            var end = mathUtil.GetFxPos(1 - ratio);
            var x   = end.x + 960;
            var y   = end.y;
            var z   = end.z;

            // 移動
            view.transform.SetLocalPosition(x, y, z);

            // スケールの調整
            var scale = 10 + 90 * (1.0f - ratio);

            if (scale > 100)
            {
                scale = 100;
            }
            view.transform.SetLocalScale(scale, scale, scale);

            // ライン描画
            if (lineEffect)
            {
                lineEffect.transform.SetParent(panelTransform);
                lineEffect.transform.localScale    = new Vector3(1, 1, 1);
                lineEffect.transform.localPosition = new Vector3(960, 0, 0);

                var childRatio = children[0].GetActiveTimeRatio(elapsedFromStartTimeSec);

                var minRatio = -0.2f;
                var maxRatio = 1.2f;
                lineEffect.startRatio = Mathf.Clamp(1 - childRatio, minRatio, maxRatio);
                lineEffect.endRatio   = Mathf.Clamp(1 - ratio, minRatio, maxRatio);

                lineEffect.lineWidth = 70;

                lineEffect.ix = (xId - 2) * 320;
                lineEffect.draw();
            }

            // 横ラインがある場合
            if (connecter)
            {
                // 移動
                var lineEnd = lineMathUtil.GetFxPos(1 - ratio);
                var lineX   = lineEnd.x + 960;
                var lineY   = lineEnd.y;
                var lineZ   = lineEnd.z;
                connecter.transform.SetLocalPosition(lineX, lineY, lineZ);

                // スケールの調整
                var _ratio     = Math.Max(0.0f, ratio);
                var lineScaleX = 100.0f;
                if (_ratio > 0.8)
                {
                    lineScaleX = 100.0f * lineLength * 2.0f * (0.7f + (float)Math.Pow(_ratio, 2.0f));
                }
                else
                {
                    lineScaleX = 100.0f * lineLength * 2.0f * (1.1f + (float)Math.Pow(_ratio, 2.0f));
                }


                var lineScaleY = scale * 3;
                var lineScaleZ = scale;
                connecter.transform.SetLocalScale(lineScaleX, lineScaleY, lineScaleZ);
            }
        }