/// <summary> /// /// </summary> /// <param name="gameObject"></param> /// <param name="parentGameObject"></param> public void addGameObject(IGameObject gameObject, IGameObject parentGameObject) { Debug.Assert(gameObject != parentGameObject, "a gameObject cannot be the parent of himself."); SceneNode targetSceneNode = SceneNode.getSceneNodeByGameObject(this.sceneNodeTree, parentGameObject); Debug.Assert(targetSceneNode != null, "no specified parentGameObject found in SceneNode tree"); //set position relative to the parent. if (parentGameObject != null) { double xPositionRelativeToParent = parentGameObject.getXPosition() + gameObject.getXPosition(); double yPositionRelativeToParent = parentGameObject.getYPosition() + gameObject.getYPosition(); gameObject.setPosition(xPositionRelativeToParent, yPositionRelativeToParent); } //update the geometry position relative to the gameObject position. if (gameObject.getBoundingBoxGeometry() != null) { gameObject.getBoundingBoxGeometry().Transform = new TranslateTransform(gameObject.getXPosition(), gameObject.getYPosition()); } targetSceneNode.addChild(new SceneNode(gameObject)); this.registerGameObject(gameObject, this.gameObjectListMapByTag); }
public BoundingBoxViewerGameObject(IGameObject gameObject) { Debug.Assert(gameObject.getBoundingBoxGeometry() != null, "expected gameObject.getBoundingBoxGeometry() != null"); base._xPosition = gameObject.getBoundingBoxGeometry().Bounds.X - gameObject.getXPosition(); base._yPosition = gameObject.getBoundingBoxGeometry().Bounds.Y - gameObject.getYPosition(); base._gameObjectTag = Tags.DEBUG_TAG; Brush boundingBoxBrush = gameObject.isCollidable() ? Brushes.Red : Brushes.Yellow; GeometryDrawing geometryDrawing = new GeometryDrawing(null, new Pen(boundingBoxBrush, 1.0), gameObject.getBoundingBoxGeometry()); DrawingImage boundingBoxDrawingImage = new DrawingImage(geometryDrawing); Image boundingBoxImage = new Image(); boundingBoxImage.Source = boundingBoxDrawingImage; base._image = boundingBoxImage; this.gameObject = gameObject; this.previousCollidableState = gameObject.isCollidable(); }
/// <summary> /// /// </summary> /// <param name="gameObject"></param> public void canvasUpdateImage(IGameObject gameObject) { Debug.Assert(gameObject != null, "expected gameObject != null"); Debug.Assert(this.uiThreadImageUidMapByGameObject.ContainsKey(gameObject), "you must display this gameObject before try to update it."); String uiThreadImageUid = this.uiThreadImageUidMapByGameObject[gameObject]; ImageSource imageSourceFrozen = (ImageSource)gameObject.getImage().Source.GetAsFrozen(); double imageWidth = gameObject.getImage().Width; double imageHeight = gameObject.getImage().Height; Stretch streachImage = gameObject.getImage().Stretch; StretchDirection streachDirection = gameObject.getImage().StretchDirection; Transform renderTransformFrozen = gameObject.getImage().RenderTransform != null ? (Transform)gameObject.getImage().RenderTransform.GetAsFrozen() : null; this.targetCanvas.Dispatcher.Invoke(new Action( delegate() { UIElement uiElement = this.uiThreadGetUiElement(uiThreadImageUid); int zIndex = Canvas.GetZIndex(uiElement); this.targetCanvas.Children.Remove(uiElement); Image uiThreadImage = new Image(); uiThreadImage.Uid = uiThreadImageUid; uiThreadImage.Source = imageSourceFrozen; uiThreadImage.Width = imageWidth; uiThreadImage.Height = imageHeight; uiThreadImage.Stretch = streachImage; uiThreadImage.StretchDirection = streachDirection; uiThreadImage.RenderTransform = renderTransformFrozen; this.targetCanvas.Children.Add(uiThreadImage); this.uiThreadSetCanvasPosition(uiThreadImage, gameObject.getXPosition(), gameObject.getYPosition(), zIndex); } )); }
/// <summary> /// /// </summary> /// <param name="gameObject"></param> public void canvasDisplayImage(IGameObject gameObject, int zIndex) { Debug.Assert(gameObject != null, "expected gameObject != null"); Debug.Assert(gameObject.getImage() != null, "cannot display this gameObject because its image is null."); Debug.Assert(!this.uiThreadImageUidMapByGameObject.ContainsKey(gameObject), "this gameObject was already present in the canvas, try to remove it before ask to display again"); Image nonUiThreadImage = gameObject.getImage(); ImageSource imageSourceFrozen = (ImageSource) nonUiThreadImage.Source.GetAsFrozen(); double imageWidth = nonUiThreadImage.Width; double imageHeight = nonUiThreadImage.Height; Stretch streachImage = nonUiThreadImage.Stretch; StretchDirection streachDirection = nonUiThreadImage.StretchDirection; Transform renderTransformFrozen = (Transform)nonUiThreadImage.RenderTransform.GetAsFrozen(); String uid = Guid.NewGuid().ToString(); this.targetCanvas.Dispatcher.Invoke(new Action( delegate() { Image uiThreadImage = new Image(); uiThreadImage.Uid = uid; uiThreadImage.Source = imageSourceFrozen; uiThreadImage.Width = imageWidth; uiThreadImage.Height = imageHeight; uiThreadImage.Stretch = streachImage; uiThreadImage.StretchDirection = streachDirection; uiThreadImage.RenderTransform = renderTransformFrozen; this.targetCanvas.Children.Add(uiThreadImage); this.uiThreadSetCanvasPosition(uiThreadImage, gameObject.getXPosition(), gameObject.getYPosition(), zIndex); } )); this.uiThreadImageUidMapByGameObject.Add(gameObject, uid); }
public GameFloatingLabelObject(IGameObject generatingObject, string text) : base(generatingObject.getXPosition(), generatingObject.getYPosition(), text, FLOATING_TIME_MILLIS) { }