Esempio n. 1
0
 Rectangle IAutoMouseBounds.AutoMouseoverBounds(Actor self, WorldRenderer wr)
 {
     return(modelAnimation.ScreenBounds(self.CenterPosition, wr, rv.Info.Scale));
 }
Esempio n. 2
0
        public override void PrepareRenderables()
        {
            var voxel             = GetVoxel();
            var palette           = GetPalette();
            var playerPalette     = GetPlayerPalette();
            var normalsPalette    = GetNormalsPalette();
            var shadowPalette     = GetShadowPalette();
            var scale             = GetScale();
            var rotation          = GetRotation();
            var lightAmbientColor = GetLightAmbientColor();
            var lightDiffuseColor = GetLightDiffuseColor();
            var lightPitch        = GetLightPitch();
            var lightYaw          = GetLightYaw();
            var cameraAngle       = GetCameraAngle();

            if (voxel == null || palette == null)
            {
                return;
            }

            if (voxel != cachedVoxel)
            {
                cachedVoxel = voxel;
            }

            if (palette != cachedPalette)
            {
                if (string.IsNullOrEmpty(palette) && string.IsNullOrEmpty(playerPalette))
                {
                    return;
                }

                var paletteName = string.IsNullOrEmpty(palette) ? playerPalette : palette;
                paletteReference = WorldRenderer.Palette(paletteName);
                cachedPalette    = paletteName;
            }

            if (playerPalette != cachedPlayerPalette)
            {
                paletteReferencePlayer = WorldRenderer.Palette(playerPalette);
                cachedPlayerPalette    = playerPalette;
            }

            if (normalsPalette != cachedNormalsPalette)
            {
                paletteReferenceNormals = WorldRenderer.Palette(normalsPalette);
                cachedNormalsPalette    = normalsPalette;
            }

            if (shadowPalette != cachedShadowPalette)
            {
                paletteReferenceShadow = WorldRenderer.Palette(shadowPalette);
                cachedShadowPalette    = shadowPalette;
            }

            if (scale != cachedScale)
            {
                cachedScale = scale;
            }

            if (rotation != cachedRotation)
            {
                cachedRotation = rotation;
            }

            if (lightPitch != cachedLightPitch)
            {
                cachedLightPitch = lightPitch;
            }

            if (lightYaw != cachedLightYaw)
            {
                cachedLightYaw = lightYaw;
            }

            if (cachedLightAmbientColor[0] != lightAmbientColor[0] || cachedLightAmbientColor[1] != lightAmbientColor[1] || cachedLightAmbientColor[2] != lightAmbientColor[2])
            {
                cachedLightAmbientColor = lightAmbientColor;
            }

            if (cachedLightDiffuseColor[0] != lightDiffuseColor[0] || cachedLightDiffuseColor[1] != lightDiffuseColor[1] || cachedLightDiffuseColor[2] != lightDiffuseColor[2])
            {
                cachedLightDiffuseColor = lightDiffuseColor;
            }

            if (cameraAngle != cachedCameraAngle)
            {
                cachedCameraAngle = cameraAngle;
            }

            if (cachedVoxel == null)
            {
                return;
            }

            var animation = new ModelAnimation(
                cachedVoxel,
                () => WVec.Zero,
                () => cachedRotation,
                () => false,
                () => 0,
                true);

            var animations = new ModelAnimation[] { animation };

            ModelPreview preview = new ModelPreview(
                new ModelAnimation[] { animation }, WVec.Zero, 0,
                cachedScale,
                new WAngle(cachedLightPitch),
                new WAngle(cachedLightYaw),
                cachedLightAmbientColor,
                cachedLightDiffuseColor,
                cachedCameraAngle,
                paletteReference,
                paletteReferenceNormals,
                paletteReferenceShadow);

            var screenBounds = animation.ScreenBounds(WPos.Zero, WorldRenderer, scale);

            IdealPreviewSize = new int2(screenBounds.Width, screenBounds.Height);
            var origin = RenderOrigin + new int2(RenderBounds.Size.Width / 2, RenderBounds.Size.Height / 2);

            var camera          = new WRot(WAngle.Zero, cachedCameraAngle - new WAngle(256), new WAngle(256));
            var modelRenderable = new UIModelRenderable(
                animations, WPos.Zero, origin, 0, camera, scale,
                WRot.None, cachedLightAmbientColor, cachedLightDiffuseColor,
                paletteReferencePlayer, paletteReferenceNormals, paletteReferenceShadow);

            renderable = modelRenderable.PrepareRender(WorldRenderer);
        }