// 用新的位置、弧度更新图形 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); }
// 根据形状参数、位置、弧度 创建形状 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); }
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); }
// 用新的位置、弧度更新图形 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); }
// 得到物体变幻形状 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); }
// 得到物体形状 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); }
// 用新的位置、弧度更新图形 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); }
// 用新的位置、弧度更新图形 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); }
// 用新的位置、弧度更新图形 override public SceneShape refresh(SceneShapeParam param, Vector2 pos, float radians) { return(null); }
// 用新的位置、弧度更新图形 virtual public SceneShape refresh(SceneShapeParam param, Vector2 pos, float radians) { return(this); }