1
+ using System ;
2
+ using System . Diagnostics ;
3
+ using System . Drawing ;
4
+ using Overlay . NET . Common ;
5
+ using Overlay . NET . Demo . Internals ;
6
+ using Overlay . NET . Directx ;
7
+ using Process . NET . Windows ;
8
+
9
+ namespace Overlay . NET . Demo . Directx
10
+ {
11
+ [ RegisterPlugin ( "DirectXverlayDemo-1" , "Jacob Kemple" , "DirectXOverlayDemo" , "0.0" ,
12
+ "A basic demo of the DirectXoverlay." ) ]
13
+ public class DirectxOverlayPluginExample : DirectXOverlayPlugin
14
+ {
15
+ readonly ISettings < DemoOverlaySettings > _settings = new SerializableSettings < DemoOverlaySettings > ( ) ;
16
+ readonly TickEngine _tickEngine = new TickEngine ( ) ;
17
+ int _displayFps ;
18
+ int _font ;
19
+ int _hugeFont ;
20
+ int _i ;
21
+ int _interiorBrush ;
22
+ int _redBrush ;
23
+ int _redOpacityBrush ;
24
+ float _rotation ;
25
+ Stopwatch _watch ;
26
+
27
+ public override void Initialize ( IWindow targetWindow )
28
+ {
29
+ // Set target window by calling the base method
30
+ base . Initialize ( targetWindow ) ;
31
+
32
+ OverlayWindow = new DirectXOverlayWindow ( targetWindow . Handle , false ) ;
33
+
34
+ // For demo, show how to use settings
35
+ var current = _settings . Current ;
36
+ var type = GetType ( ) ;
37
+
38
+ current . UpdateRate = 1000 / 60 ;
39
+ current . Author = GetAuthor ( type ) ;
40
+ current . Description = GetDescription ( type ) ;
41
+ current . Identifier = GetIdentifier ( type ) ;
42
+ current . Name = GetName ( type ) ;
43
+ current . Version = GetVersion ( type ) ;
44
+
45
+ // File is made from above info
46
+ _settings . Save ( ) ;
47
+ _settings . Load ( ) ;
48
+ Console . Title = @"OverlayExample" ;
49
+
50
+ OverlayWindow = new DirectXOverlayWindow ( targetWindow . Handle , false ) ;
51
+ _watch = Stopwatch . StartNew ( ) ;
52
+
53
+ _redBrush = OverlayWindow . Graphics . CreateBrush ( 0x7FFF0000 ) ;
54
+ _redOpacityBrush = OverlayWindow . Graphics . CreateBrush ( Color . FromArgb ( 80 , 255 , 0 , 0 ) ) ;
55
+ _interiorBrush = OverlayWindow . Graphics . CreateBrush ( 0x7FFFFF00 ) ;
56
+
57
+ _font = OverlayWindow . Graphics . CreateFont ( "Arial" , 20 ) ;
58
+ _hugeFont = OverlayWindow . Graphics . CreateFont ( "Arial" , 50 , true ) ;
59
+
60
+ _rotation = 0.0f ;
61
+ _displayFps = 0 ;
62
+ _i = 0 ;
63
+ // Set up update interval and register events for the tick engine.
64
+ _tickEngine . Interval = _settings . Current . UpdateRate . Milliseconds ( ) ;
65
+ _tickEngine . PreTick += OnPreTick ;
66
+ _tickEngine . Tick += OnTick ;
67
+ }
68
+
69
+ void OnTick ( object sender , EventArgs e )
70
+ {
71
+ if ( OverlayWindow . IsVisible )
72
+ {
73
+ OverlayWindow . SetBounds ( TargetWindow . X , TargetWindow . Y , TargetWindow . Width , TargetWindow . Height ) ;
74
+ InternalRender ( ) ;
75
+ }
76
+ }
77
+
78
+ void OnPreTick ( object sender , EventArgs e )
79
+ {
80
+ var activated = TargetWindow . IsActivated ;
81
+ var visible = OverlayWindow . IsVisible ;
82
+
83
+ // Ensure window is shown or hidden correctly prior to updating
84
+ if ( ! activated && visible )
85
+ {
86
+ OverlayWindow . Hide ( ) ;
87
+ }
88
+
89
+ else if ( activated && ! visible )
90
+ {
91
+ OverlayWindow . Show ( ) ;
92
+ }
93
+ }
94
+
95
+ // ReSharper disable once RedundantOverriddenMember
96
+ public override void Enable ( )
97
+ {
98
+ _tickEngine . IsTicking = true ;
99
+ base . Enable ( ) ;
100
+ }
101
+
102
+ // ReSharper disable once RedundantOverriddenMember
103
+ public override void Disable ( )
104
+ {
105
+ _tickEngine . IsTicking = false ;
106
+ base . Disable ( ) ;
107
+ }
108
+
109
+ public override void Update ( )
110
+ {
111
+ _tickEngine . Pulse ( ) ;
112
+ base . Update ( ) ;
113
+ }
114
+
115
+ protected void InternalRender ( )
116
+ {
117
+ OverlayWindow . Graphics . BeginScene ( ) ;
118
+ OverlayWindow . Graphics . ClearScene ( ) ;
119
+
120
+ //first row
121
+ OverlayWindow . Graphics . DrawText ( "DrawBarH" , _font , _redBrush , 50 , 40 ) ;
122
+ OverlayWindow . Graphics . DrawBarH ( 50 , 70 , 20 , 100 , 80 , 2 , _redBrush , _interiorBrush ) ;
123
+
124
+ OverlayWindow . Graphics . DrawText ( "DrawBarV" , _font , _redBrush , 200 , 40 ) ;
125
+ OverlayWindow . Graphics . DrawBarV ( 200 , 120 , 100 , 20 , 80 , 2 , _redBrush , _interiorBrush ) ;
126
+
127
+ OverlayWindow . Graphics . DrawText ( "DrawBox2D" , _font , _redBrush , 350 , 40 ) ;
128
+ OverlayWindow . Graphics . DrawBox2D ( 350 , 70 , 50 , 100 , 2 , _redBrush , _redOpacityBrush ) ;
129
+
130
+ OverlayWindow . Graphics . DrawText ( "DrawBox3D" , _font , _redBrush , 500 , 40 ) ;
131
+ OverlayWindow . Graphics . DrawBox3D ( 500 , 80 , 50 , 100 , 10 , 2 , _redBrush , _redOpacityBrush ) ;
132
+
133
+ OverlayWindow . Graphics . DrawText ( "DrawCircle3D" , _font , _redBrush , 650 , 40 ) ;
134
+ OverlayWindow . Graphics . DrawCircle ( 700 , 120 , 35 , 2 , _redBrush ) ;
135
+
136
+ OverlayWindow . Graphics . DrawText ( "DrawEdge" , _font , _redBrush , 800 , 40 ) ;
137
+ OverlayWindow . Graphics . DrawEdge ( 800 , 70 , 50 , 100 , 10 , 2 , _redBrush ) ;
138
+
139
+ OverlayWindow . Graphics . DrawText ( "DrawLine" , _font , _redBrush , 950 , 40 ) ;
140
+ OverlayWindow . Graphics . DrawLine ( 950 , 70 , 1000 , 200 , 2 , _redBrush ) ;
141
+
142
+ //second row
143
+ OverlayWindow . Graphics . DrawText ( "DrawPlus" , _font , _redBrush , 50 , 250 ) ;
144
+ OverlayWindow . Graphics . DrawPlus ( 70 , 300 , 15 , 2 , _redBrush ) ;
145
+
146
+ OverlayWindow . Graphics . DrawText ( "DrawRectangle" , _font , _redBrush , 200 , 250 ) ;
147
+ OverlayWindow . Graphics . DrawRectangle ( 200 , 300 , 50 , 100 , 2 , _redBrush ) ;
148
+
149
+ OverlayWindow . Graphics . DrawText ( "DrawRectangle3D" , _font , _redBrush , 350 , 250 ) ;
150
+ OverlayWindow . Graphics . DrawRectangle3D ( 350 , 320 , 50 , 100 , 10 , 2 , _redBrush ) ;
151
+
152
+ OverlayWindow . Graphics . DrawText ( "FillCircle" , _font , _redBrush , 800 , 250 ) ;
153
+ OverlayWindow . Graphics . FillCircle ( 850 , 350 , 50 , _redBrush ) ;
154
+
155
+ OverlayWindow . Graphics . DrawText ( "FillRectangle" , _font , _redBrush , 950 , 250 ) ;
156
+ OverlayWindow . Graphics . FillRectangle ( 950 , 300 , 50 , 100 , _redBrush ) ;
157
+
158
+ _rotation += 0.03f ; //related to speed
159
+
160
+ if ( _rotation > 50.0f ) //size of the swastika
161
+ {
162
+ _rotation = - 50.0f ;
163
+ }
164
+
165
+ if ( _watch . ElapsedMilliseconds > 1000 )
166
+ {
167
+ _i = _displayFps ;
168
+ _displayFps = 0 ;
169
+ _watch . Restart ( ) ;
170
+ }
171
+
172
+ else
173
+ {
174
+ _displayFps ++ ;
175
+ }
176
+
177
+ OverlayWindow . Graphics . DrawText ( "FPS: " + _i , _hugeFont , _redBrush , 400 , 600 , false ) ;
178
+
179
+ OverlayWindow . Graphics . EndScene ( ) ;
180
+ }
181
+
182
+ public override void Dispose ( )
183
+ {
184
+ OverlayWindow . Dispose ( ) ;
185
+ base . Dispose ( ) ;
186
+ }
187
+ }
188
+ }
0 commit comments