using System.Collections.Generic; using System.Runtime.InteropServices; using Decal.Interop.Core; using Decal.Interop.Inject; using Decal.Interop.Render; namespace Decal.DecalRender { [ComVisible(true)] [Guid("FB3C8286-88ED-4B4D-B413-94B40F346239")] [ClassInterface(ClassInterfaceType.None)] [ComSourceInterfaces("Decal.Interop.Render.IRenderServiceEvents\0\0")] [ProgId("DecalRender.RenderService")] public class RenderServiceImpl : IRenderService, IDecalService, IDecalRender { public event IRenderServiceEvents_DeviceLostEventHandler DeviceLost; private object _device; private readonly List _huds = new List(); // IRenderService public object Device => _device; public HUDView CreateHUD(ref tagRECT pRegion) { var hud = new HUDViewImpl { Region = pRegion }; _huds.Add(hud); return (HUDView)(object)hud; } public HUDBackground CreateBackground(ref tagRECT pRegion) { return (HUDBackground)(object)new HUDBackgroundImpl { Region = pRegion }; } public HUDView EncapsulateHUD(ref tagPOINT Coords, object pSurface) { var region = new tagRECT { left = Coords.x, top = Coords.y }; var hud = new HUDViewImpl { Region = region }; hud.SetSurface(pSurface); _huds.Add(hud); return (HUDView)(object)hud; } public HUDBackground EncapsulateBackground(ref tagPOINT Coords, object pSurface) { var region = new tagRECT { left = Coords.x, top = Coords.y }; var bg = new HUDBackgroundImpl { Region = region }; bg.SetSurface(pSurface); return (HUDBackground)(object)bg; } public void RemoveHUD(HUDView pHUD) { var impl = pHUD as HUDViewImpl; if (impl != null) _huds.Remove(impl); } // IDecalService public void Initialize(DecalCore pDecal) { } public void BeforePlugins() { } public void AfterPlugins() { } public void Terminate() { _huds.Clear(); } // IDecalRender public void Render2D() { } public void Render3D() { } public void PreReset() { DeviceLost?.Invoke(); } public void PostReset() { } public void ChangeHWND() { } public void ChangeDirectX() { } } }