Beispiel #1
0
            private readonly AnimationCB m_animation_cb;                    // A local reference to prevent the callback being garbage collected

            public Window(View3d view, HWND hwnd, bool?gdi_compatible_backbuffer = null, int?multi_sampling = null, string?dbg_name = null)
            {
                View   = view;
                Hwnd   = hwnd;
                Diag   = new Diagnostics(this);
                m_opts = new WindowOptions
                {
                    ErrorCB    = HandleError,
                    ErrorCBCtx = IntPtr.Zero,
                    GdiCompatibleBackBuffer = gdi_compatible_backbuffer ?? false,
                    Multisampling           = multi_sampling ?? 4,
                    DbgName = dbg_name ?? string.Empty,
                };

                // Create the window
                Handle = View3D_WindowCreate(hwnd, ref m_opts);
                if (Handle == null)
                {
                    throw new Exception("Failed to create View3D window");
                }
                void HandleError(IntPtr ctx, string msg, string filepath, int line, long pos) => Error?.Invoke(this, new ErrorEventArgs(msg, filepath, line, pos));

                // Set up a callback for when settings are changed
                View3D_WindowSettingsChangedCB(Handle, m_settings_cb = HandleSettingsChanged, IntPtr.Zero, true);
                void HandleSettingsChanged(IntPtr ctx, HWindow wnd, ESettings setting) => OnSettingsChanged?.Invoke(this, new SettingChangeEventArgs(setting));

                // Set up a callback for when the window is invalidated
                View3D_WindowInvalidatedCB(Handle, m_invalidated_cb = HandleInvalidated, IntPtr.Zero, true);
                void HandleInvalidated(IntPtr ctx, HWindow wnd) => OnInvalidated?.Invoke(this, EventArgs.Empty);

                // Set up a callback for when a render is about to happen
                View3D_WindowRenderingCB(Handle, m_render_cb = HandleRendering, IntPtr.Zero, true);
                void HandleRendering(IntPtr ctx, HWindow wnd) => OnRendering?.Invoke(this, EventArgs.Empty);

                // Set up a callback for when the object store for this window changes
                View3d_WindowSceneChangedCB(Handle, m_scene_changed_cb = HandleSceneChanged, IntPtr.Zero, true);
                void HandleSceneChanged(IntPtr ctx, HWindow wnd, ref View3DSceneChanged args) => OnSceneChanged?.Invoke(this, new SceneChangedEventArgs(args));

                // Set up a callback for animation events
                View3D_WindowAnimEventCBSet(Handle, m_animation_cb = HandleAnimationEvent, IntPtr.Zero, true);
                void HandleAnimationEvent(IntPtr ctx, HWindow wnd, EAnimCommand command, double clock) => OnAnimationEvent?.Invoke(this, new AnimationEventArgs(command, clock));

                // Set up the light source
                SetLightSource(v4.Origin, -v4.ZAxis, true);

                // Display the focus point
                FocusPointVisible = true;

                // Position the camera
                Camera = new Camera(this);
                Camera.Lookat(new v4(0f, 0f, -2f, 1f), v4.Origin, v4.YAxis);
            }
Beispiel #2
0
        public void Invalidate()
        {
            if (!rwLock.TryEnterWriteLock(1))
            {
                //If it's already updating cache, don't update again.
                return;
            }

            value      = getValueDelegate();
            lastUpdate = DateTime.Now;
            rwLock.ExitWriteLock();

            OnInvalidated?.Invoke(this, new CachedFieldInvalidatedEventArgs(lastUpdate));
        }
        void Invalidate(VoiceConnectionInvalidationReason reason, string errorMessage = null)
        {
            if (isValid)
            {
                isValid      = false;
                isConnecting = false;
                isConnected  = false;

                voiceState = null;

                if (!isDisposed)
                {
                    connectingCancellationSource?.Cancel();
                }

                log?.LogVerbose("[Invalidate] Invalidating voice connection...");

                Shard.Voice.RemoveVoiceConnection(guildId);

                OnInvalidated?.Invoke(this, new VoiceConnectionInvalidatedEventArgs(Shard, this, reason, errorMessage));
            }
        }