Пример #1
0
    private Vector3 CalcBezResult(float t)
    {
        int   pointNum = mAttackPointList.Count;
        float xVal     = 0;
        float yVal     = 0;
        int   bezNum   = pointNum - 1;

        for (int idx = 0; idx < pointNum; idx++)
        {
            tBezPoint tmp = (tBezPoint)mAttackPointList[idx];
            xVal += tmp.val.x * Mathf.Pow((1 - t), bezNum - idx) * Mathf.Pow(t, idx);
            yVal += tmp.val.y * Mathf.Pow((1 - t), bezNum - idx) * Mathf.Pow(t, idx);
        }
        Vector3 rc = new Vector3(xVal, yVal, 0.0f);

        return(rc);
    }
Пример #2
0
    private void Attack_Beze_move()
    {
        tBezPoint attackBzObj = (tBezPoint)(mAttackPointList[mAttackPointList.Count - 1]);

        if (IsPosSame(attackBzObj.pos, transform.position))
        {
            mMoveState = EmoveState.RETRUN_HOME_move;
            int bezNum = Random.Range(5, 10);
            InitBezLine(bezNum, transform.position, mHomePos);
            return;
        }
        float moveSpeed = Mathf.Abs(Mathf.Sin(mBezRunTime));
        //float moveSpeed = mBezRunTime;
        Vector3 newPos = CalcBezResult(moveSpeed);

        transform.position = newPos;
    }
Пример #3
0
    private void InitBezLine(int bezNum, Vector3 startPos, Vector3 endPos)
    {
        if (mAttackPointList == null)
        {
            mAttackPointList = new ArrayList();
        }
        mAttackPointList.Clear();

        int   bzIdx  = 0;
        float factor = (float)Factorial(bezNum) / (float)(Factorial(bzIdx) * Factorial(bezNum - bzIdx));

        tBezPoint startBzPoint = new tBezPoint();

        startBzPoint.pos   = startPos;
        startBzPoint.val.x = startBzPoint.pos.x * factor;
        startBzPoint.val.y = startBzPoint.pos.y * factor;
        startBzPoint.val.z = startBzPoint.pos.z * factor;
        mAttackPointList.Add(startBzPoint);

        bzIdx += 1;
        for (int idx = 0; idx < (bezNum - 1); idx++)
        {
            tBezPoint midBzPoint = new tBezPoint();
            midBzPoint.pos.x = Random.Range(2 * mLeftPos, 2 * mRightPos);
            midBzPoint.pos.y = Random.Range(2 * mBottomPos, 2 * mTopPos);
            midBzPoint.pos.z = 0.0f;
            factor           = (float)Factorial(bezNum) / (float)(Factorial(bzIdx) * Factorial(bezNum - bzIdx));
            midBzPoint.val.x = midBzPoint.pos.x * factor;
            midBzPoint.val.y = midBzPoint.pos.y * factor;
            midBzPoint.val.z = midBzPoint.pos.z * factor;
            mAttackPointList.Add(midBzPoint);
            bzIdx += 1;
        }
        tBezPoint endBzPoint = new tBezPoint();

        endBzPoint.pos   = endPos;
        factor           = (float)Factorial(bezNum) / (float)(Factorial(bzIdx) * Factorial(bezNum - bzIdx));
        endBzPoint.val.x = endBzPoint.pos.x * factor;
        endBzPoint.val.y = endBzPoint.pos.y * factor;
        endBzPoint.val.z = endBzPoint.pos.z * factor;
        mAttackPointList.Add(endBzPoint);
        mBezRunTime = 0.0f;
    }