Rectangle IAutoMouseBounds.AutoMouseoverBounds(Actor self, WorldRenderer wr) { return(modelAnimation.ScreenBounds(self.CenterPosition, wr, rv.Info.Scale)); }
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); }