Exemplo n.º 1
0
        public void addChild(SceneNode childSceneNode)
        {
            Debug.Assert(!this.childSceneNodeList.Contains(childSceneNode), "childSceneNode already present");

            this.childSceneNodeList.Add(childSceneNode);
            childSceneNode.setParent(this);
        }
Exemplo n.º 2
0
        /// <summary>
        /// 
        /// </summary>
        /// <param name="targetCanvas"></param>
        public SceneManager(Canvas targetCanvas)
        {
            this.targetCanvas = targetCanvas;

            this.gameObjectListMapByTag = new Dictionary<String, List<IGameObject>>(10);
            this.collidableGameObjectListMapByTag = new Dictionary<String, List<IGameObject>>(10);
            this.uiThreadImageUidMapByGameObject = new Dictionary<IGameObject, String>(100);

            //creation of the rootNode
            this.sceneNodeTree = new SceneNode(null);
        }
Exemplo n.º 3
0
        private static SceneNode recursiveGetSceneNodeByGameObject(SceneNode currentSceneNode, IGameObject gameObject)
        {
            IGameObject currentGameObject = currentSceneNode.getSceneNodeGameObject();

            if (SceneNode.equals(currentGameObject, gameObject))
            {
                return currentSceneNode;
            }
            else
            {
                SceneNode sceneNodeCandidate = null;
                foreach (SceneNode childSceneNode0 in currentSceneNode.getChildList())
                {
                    sceneNodeCandidate = SceneNode.recursiveGetSceneNodeByGameObject(childSceneNode0, gameObject);
                    if (sceneNodeCandidate != null)
                    {
                        break;
                    }
                }

                return sceneNodeCandidate;
            }
        }
Exemplo n.º 4
0
        /// <summary>
        /// 
        /// </summary>
        /// <param name="sceneNode"></param>
        private void recursiveRemoveGameObject(SceneNode sceneNode)
        {
            if (sceneNode.getSceneNodeGameObject() != null)
            {
                this.deleteGameObject(sceneNode.getSceneNodeGameObject(), this.gameObjectListMapByTag);
                this.deleteGameObject(sceneNode.getSceneNodeGameObject(), this.collidableGameObjectListMapByTag);
            }

            foreach (SceneNode childSceneNode0 in sceneNode.getChildList())
            {
                this.recursiveRemoveGameObject(childSceneNode0);
            }

            sceneNode.getParent().removeChild(sceneNode);
        }
Exemplo n.º 5
0
        /// <summary>
        /// 
        /// </summary>
        /// <param name="sceneNode"></param>
        /// <param name="transformGroup"></param>
        /// <param name="zIndex"></param>
        private void recursiveApplyTranslation(SceneNode sceneNode, double xOffset, double yOffset, bool propagateToChild)
        {
            IGameObject gameObject = sceneNode.getSceneNodeGameObject();
            gameObject.setPosition(gameObject.getXPosition() + xOffset, gameObject.getYPosition() + yOffset);

            if (gameObject.getBoundingBoxGeometry() != null)
            {
                gameObject.getBoundingBoxGeometry().Transform = new TranslateTransform(gameObject.getXPosition(), gameObject.getYPosition());
            }

            if (propagateToChild)
            {
                foreach (SceneNode childSceneNode0 in sceneNode.getChildList())
                {
                    this.recursiveApplyTranslation(childSceneNode0, xOffset, yOffset, propagateToChild);
                }
            }
        }
Exemplo n.º 6
0
        /// <summary>
        /// 
        /// </summary>
        /// <param name="sceneNode"></param>
        /// <param name="xScale"></param>
        /// <param name="yScale"></param>
        /// <param name="xCenter"></param>
        /// <param name="yCenter"></param>
        /// <param name="propagateToChild"></param>
        private void recursiveApplyScale(SceneNode sceneNode, double xScale, double yScale, double xCenter, double yCenter, bool propagateToChild)
        {
            IGameObject gameObject = sceneNode.getSceneNodeGameObject();

            ScaleTransform scaleTransform = new ScaleTransform(xScale, yScale, xCenter, yCenter);

            if (gameObject.getImage() != null)
            {
                TransformGroup transformGroup = new TransformGroup();
                transformGroup.Children.Add(scaleTransform);
                transformGroup.Children.Add(gameObject.getImage().RenderTransform);

                gameObject.getImage().RenderTransform = transformGroup;
            }

            if (gameObject.getBoundingBoxGeometry() != null)
            {
                TransformGroup geometryTransformGroup = new TransformGroup();
                geometryTransformGroup.Children.Add(scaleTransform);
                geometryTransformGroup.Children.Add(gameObject.getBoundingBoxGeometry().Transform);

                gameObject.getBoundingBoxGeometry().Transform = geometryTransformGroup;
            }

            if (propagateToChild)
            {
                foreach (SceneNode childSceneNode0 in sceneNode.getChildList())
                {
                    this.recursiveApplyScale(childSceneNode0, xScale, yScale, xCenter, yCenter, propagateToChild);
                }
            }
        }
Exemplo n.º 7
0
        /// <summary>
        /// 
        /// </summary>
        /// <param name="targetSceneNode"></param>
        /// <param name="clockwiseDegreeAngle"></param>
        /// <param name="xRotationCenter"></param>
        /// <param name="yRotationCenter"></param>
        public void recursiveApplyRotation(SceneNode sceneNode, double clockwiseDegreeAngle, double xRotationCenter, double yRotationCenter, bool affectBoundingBox, bool propagateToChild)
        {
            IGameObject gameObject = sceneNode.getSceneNodeGameObject();

            RotateTransform rotateTransform = new RotateTransform(clockwiseDegreeAngle, xRotationCenter, yRotationCenter);

            { // transform image
                TransformGroup transformGroup = new TransformGroup();
                transformGroup.Children.Add(rotateTransform);
                if (gameObject.getImage().RenderTransform != null)
                {
                    transformGroup.Children.Add(gameObject.getImage().RenderTransform);
                }

                gameObject.getImage().RenderTransform = transformGroup;
            }

            // transform geometry
            if (affectBoundingBox && gameObject.getBoundingBoxGeometry() != null)
            {
                TransformGroup transformGroup = new TransformGroup();
                transformGroup.Children.Add(rotateTransform);
                transformGroup.Children.Add(gameObject.getBoundingBoxGeometry().Transform);

                gameObject.getBoundingBoxGeometry().Transform = transformGroup;
            }

            foreach (SceneNode childSceneNode0 in sceneNode.getChildList())
            {
                double xRotationRelativeToChild = xRotationCenter - (childSceneNode0.getSceneNodeGameObject().getXPosition() - gameObject.getXPosition());
                double yRotationRelativeToChild = yRotationCenter - (childSceneNode0.getSceneNodeGameObject().getYPosition() - gameObject.getYPosition());

                this.recursiveApplyRotation(childSceneNode0, clockwiseDegreeAngle, xRotationRelativeToChild, yRotationRelativeToChild, affectBoundingBox, propagateToChild);
            }
        }
Exemplo n.º 8
0
 private void setParent(SceneNode parentSceneNode)
 {
     this.parentSceneNode = parentSceneNode;
 }
Exemplo n.º 9
0
 public void removeChild(SceneNode childSceneNode)
 {
     Debug.Assert(this.childSceneNodeList.Contains(childSceneNode), "childSceneNode not found present");
     this.childSceneNodeList.Remove(childSceneNode);
 }
Exemplo n.º 10
0
 public static SceneNode getSceneNodeByGameObject(SceneNode rootSceneNode, IGameObject gameObject)
 {
     Debug.Assert(rootSceneNode != null, "expected rootSceneNode != null");
     return SceneNode.recursiveGetSceneNodeByGameObject(rootSceneNode, gameObject);
 }
Exemplo n.º 11
0
 public SceneNode(IGameObject sceneNodeGameObject)
 {
     this.parentSceneNode = null;
     this.sceneNodeGameObject = sceneNodeGameObject;
     this.childSceneNodeList = new List<SceneNode>();
 }