Esempio n. 1
0
    // 用新的位置、弧度更新图形
    static public SceneShape refresh(ref SceneShape shape, SceneShapeParam param, Vector2 pos, float radians)
    {
        if (shape == null || shape.refresh(param, pos, radians) == null)
        {
            return(shape = Create(param, pos, radians));
        }

        return(shape);
    }
Esempio n. 2
0
    // 根据形状参数、位置、弧度 创建形状
    static public SceneShape Create(SceneShapeParam param, Vector2 pos, float radians)
    {
        if (param.mType == ShapeType.ShapeType_Round)
        {
            if (param == null || param.mParams == null || param.mParams.Count < 1)
            {
                return(null);
            }

            return(new SceneShapeRound(pos, param.mParams[0]));
        }
        else if (param.mType == ShapeType.ShapeType_Rect)
        {
            if (param == null || param.mParams == null || param.mParams.Count < 2)
            {
                return(null);
            }

            if ((int)(radians * 100000) % (int)(Mathf.PI * 100000 * 2) == 0)
            {
                if ((int)(radians * 100000) % (int)(Mathf.PI * 100000) == 0)
                {
                    return(new SceneShapeRect(pos, param.mParams[0], param.mParams[1]));
                }

                return(new SceneShapeRect(pos, param.mParams[1], param.mParams[0]));
            }
            else
            {
                SceneShapeRect rect = new SceneShapeRect(pos, param.mParams[0], param.mParams[1]);

                return(rotate(rect, pos, radians * Mathf.Rad2Deg));
            }
        }
        else if (param.mType == ShapeType.ShapeType_Polygon)
        {
            if (param == null || param.mParams == null || param.mParams.Count < 2 || param.mParams.Count % 2 != 0)
            {
                return(null);
            }

            SceneShapePolygon shape = new SceneShapePolygon();
            for (int i = 0; i < (int)(param.mParams.Count * 0.5); ++i)
            {
                shape.PushbackVector2(new Vector2(param.mParams[2 * i], param.mParams[2 * i + 1]));
            }

            return(rotate(ref shape, pos, radians * Mathf.Rad2Deg));
        }

        GameDebug.LogError("SceneShape.Creat() 未知的图形类别");

        return(null);
    }
Esempio n. 3
0
    virtual public bool Init(ObjectInitParam param)
    {
        mInitPos = param.init_pos;
        mInitDir = param.init_dir;
        mAlias   = param.alias;

        this.SetPosition(mInitPos);
        this.SetDirection(mInitDir);

        mShapeParam = param.init_shape;

        mDestoryed = false;
        mDisappear = false;

        return(true);
    }
Esempio n. 4
0
    // 用新的位置、弧度更新图形
    override public SceneShape refresh(SceneShapeParam param, Vector2 pos, float radians)
    {
        if (param == null || param.mParams == null || param.mParams.Count < 1)
        {
            return(null);
        }

        // 形状已经变了 返回null 由Utility重新生成图形
        if (param.mType != ShapeType.ShapeType_Round)
        {
            return(null);
        }

        mCenter = pos;
        mRadius = param.mParams[0];

        return(this);
    }
Esempio n. 5
0
    // 得到物体变幻形状
    public SceneShape GetTransformShape(Vector2 pos, float radians)
    {
        if (mShapeParam == null)
        {
            mShapeParam       = new SceneShapeParam();
            mShapeParam.mType = ShapeType.ShapeType_Round;
            mShapeParam.mParams.Add(GetRadius());
        }

        if (mTransformShape == null)
        {
            mTransformShape = SceneShapeUtilities.Create(mShapeParam, pos, radians);
        }
        else
        {
            mTransformShape = SceneShapeUtilities.refresh(ref mTransformShape, mShapeParam, pos, radians);
        }

        return(mTransformShape);
    }
Esempio n. 6
0
    // 得到物体形状
    public SceneShape GetShape()
    {
        if (mShapeParam == null)
        {
            mShapeParam       = new SceneShapeParam();
            mShapeParam.mType = ShapeType.ShapeType_Round;
            mShapeParam.mParams.Add(GetRadius());
        }

        if (mShape == null)
        {
            mShape = SceneShapeUtilities.Create(mShapeParam, new Vector2(GetPosition().x, GetPosition().z), GetDirection());
        }
        else if (!typeof(BuildObj).IsAssignableFrom(GetType()))
        {
            mShape = SceneShapeUtilities.refresh(ref mShape, mShapeParam, new Vector2(GetPosition().x, GetPosition().z), GetDirection());
        }

        return(mShape);
    }
Esempio n. 7
0
    // 用新的位置、弧度更新图形
    override public SceneShape refresh(SceneShapeParam param, Vector2 pos, float radians)
    {
        if (param == null || param.mParams == null || param.mParams.Count < 2)
        {
            return(null);
        }

        // 形状已经变了 返回null 由Utility重新生成图形
        if (param.mType != ShapeType.ShapeType_Rect)
        {
            return(null);
        }

        // 旋转后还是矩形 可以用该矩形刷新
        if ((int)(radians * 100000) % (int)(Mathf.PI * 100000 * 2) == 0)
        {
            if ((int)(radians * 100000) % (int)(Mathf.PI * 100000) == 0)
            {
                mLeft   = pos.x - (param.mParams[0] * 0.5f);
                mTop    = pos.y + (param.mParams[1] * 0.5f);
                mRight  = pos.x + (param.mParams[0] * 0.5f);
                mBottom = pos.y - (param.mParams[1] * 0.5f);
            }
            else
            {
                mLeft   = pos.x - (param.mParams[1] * 0.5f);
                mTop    = pos.y + (param.mParams[0] * 0.5f);
                mRight  = pos.x + (param.mParams[1] * 0.5f);
                mBottom = pos.y - (param.mParams[0] * 0.5f);
            }

            return(this);
        }

        // 旋转后不能用矩形表示 返回null 由Utility重新生成多段线图形
        return(null);
    }
Esempio n. 8
0
    // 用新的位置、弧度更新图形
    override public SceneShape refresh(SceneShapeParam param, Vector2 pos, float radians)
    {
        if (param == null || param.mParams == null || param.mParams.Count < 2 || param.mParams.Count % 2 != 0)
        {
            return(null);
        }

        // 形状已经变了 返回null 由Utility重新生成图形
        if (param.mType != ShapeType.ShapeType_Polygon)
        {
            return(null);
        }

        mPts.Clear();

        for (int i = 0; i < (int)(param.mParams.Count * 0.5); ++i)
        {
            PushbackVector2(new Vector2(param.mParams[2 * i], param.mParams[2 * i + 1]));
        }

        rotate(pos, radians * Mathf.Rad2Deg);

        return(this);
    }
Esempio n. 9
0
 // 用新的位置、弧度更新图形
 override public SceneShape refresh(SceneShapeParam param, Vector2 pos, float radians)
 {
     return(null);
 }
Esempio n. 10
0
 // 用新的位置、弧度更新图形
 virtual public SceneShape refresh(SceneShapeParam param, Vector2 pos, float radians)
 {
     return(this);
 }