internal HolofunkSceneGraph( GraphicsDevice graphicsDevice, Vector2 canvasSize, Texture2D depthTexture, HolofunkTextureContent holofunkContent, HolofunkBass audio, Clock clock) : base() { m_content = holofunkContent; m_clock = clock; RootNode = new GroupNode(null, Transform.Identity, "Root"); m_canvasSize = canvasSize; m_background = new SpriteNode( RootNode, "Background", TextureFactory.ShadedCornerColor( graphicsDevice, canvasSize, Color.Black, new Color(0x10, 0x10, 0x10, 0x10), new Color(0x20, 0x20, 0x20, 0x20), new Color(0x20, 0x20, 0x20, 0x20))); m_background.LocalTransform = Transform.Identity; m_slide = new SpriteNode( RootNode, "Slide", Content.Slides[0]); m_slide.LocalTransform = new Transform(new Vector2(canvasSize.X - (int)(Content.Slides[0].Width * 1.1f), (canvasSize.Y - (int)Content.Slides[0].Height) / 2)); m_slide.SetSecondaryViewOption(SecondaryViewOption.PositionMirrored | SecondaryViewOption.TextureMirrored); // constructing the nodes adds them as children of the parent, in first-at-bottom Z order. SpriteNode depthNode = new SpriteNode( RootNode, "DepthImage", depthTexture); depthNode.LocalTransform = new Transform( Vector2.Zero, new Vector2((float)canvasSize.X / depthTexture.Width, (float)canvasSize.Y / depthTexture.Height)); // we want the depth node texture (only) to be mirrored about the center of the viewport depthNode.SetSecondaryViewOption(SecondaryViewOption.TextureMirrored); // B4CR: should this also be | PositionMirrored? m_audio = audio; // Center the textures. Vector2 origin = new Vector2(0.5f); m_statusText = new TextNode(RootNode, "StatusText"); m_statusText.SetSecondaryViewOption(SecondaryViewOption.Hidden); m_statusText.LocalTransform = new Transform(new Vector2(30f, 20f), new Vector2(MagicNumbers.StatusTextScale)); // make sure that first update pushes status text m_frameCount = MagicNumbers.StatusTextUpdateInterval - 1; m_beatNode = new BeatNode( RootNode, new Transform(new Vector2(m_canvasSize.X / 2, m_canvasSize.Y / 8 * 7)), "Root Beater", false, MagicNumbers.MeasureCircleScale, () => (long)((float)clock.ContinuousBeatDuration * 4), () => 0, () => Color.White); m_trackGroupNode = new GroupNode(RootNode, Transform.Identity, "Track group"); }
protected override void LoadContent() { base.LoadContent(); float scale = GraphicsDevice.PresentationParameters.BackBufferHeight / m_viewportSize.Y; float scaledViewportWidth = m_viewportSize.X * scale; float scaledViewportOffset = (GraphicsDevice.PresentationParameters.BackBufferWidth - scaledViewportWidth) / 2; Transform transform = new Transform(new Vector2(scaledViewportOffset, 0), new Vector2(scale)); m_spriteBatch = new SpriteBatchWrapper(new SpriteBatch(GraphicsDevice), ViewportSize, transform); var holofunkContent = new HolofunkTextureContent(Content, GraphicsDevice); m_model = new HolofunkModel( GraphicsDevice, m_clock, m_holofunkBass, m_kinect, holofunkContent, m_viewportSize, m_clock.BPM, m_audioAllocator, m_videoAllocator); }