-
Notifications
You must be signed in to change notification settings - Fork 0
/
CaseDames.cs
121 lines (103 loc) · 3.09 KB
/
CaseDames.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
using IADames.Pieces;
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Windows.Forms;
namespace IADames
{
class CaseDames : Control
{
private int x, y;
public Piece Piece { get; set; }
public event EventHandler<SelectionCaseEventArg> CaseCliqueeEvent;
private Boolean selectionnee = false;
public CaseDames(int posX, int posY) : base()
{
x = posX;
y = posY;
if ((posX + posY) % 2 == 0)
{
BackColor = Color.BurlyWood;
}
else
{
BackColor = Color.Sienna;
}
this.Dock = DockStyle.Fill;
Padding = new Padding(0);
Margin = new Padding(0);
DoubleBuffered = true;
}
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
Image sprite = Piece?.GetSprite();
if (sprite != null)
{
e.Graphics.DrawImage(sprite, new Rectangle(0, 0, this.Width, this.Height));
}
if (selectionnee)
{
e.Graphics.FillRectangle(new SolidBrush(Color.FromArgb(125, Color.White)), ClientRectangle);
}
}
protected override void OnClick(EventArgs e)
{
base.OnClick(e);
SelectionCaseEventArg args = new SelectionCaseEventArg(x, y, selectionnee, Deselectionner );
CaseCliqueeEvent?.Invoke(this, args);
if (args.Handled)
{
if (!args.Selectionnee)
{
Deselectionner();
}
else
{
Selectionner();
}
}
}
public void Selectionner()
{
selectionnee = true;
RefreshAsync();
}
public void Deselectionner()
{
Console.WriteLine("Deselection " + x + ";" + y);
selectionnee = false;
RefreshAsync();
}
public void RefreshAsync()
{
this.Invoke(new Action(() => Refresh()));
}
public void Reinitialiser()
{
if(CaseCliqueeEvent != null)
{
foreach (Delegate d in CaseCliqueeEvent.GetInvocationList())
{
CaseCliqueeEvent -= (EventHandler<SelectionCaseEventArg>)d;
}
}
Piece = null;
}
}
class SelectionCaseEventArg : EventArgs
{
public int X;
public int Y;
public bool Selectionnee;
public Action Deselectionner; // a appeler quand on veut deselectionner la case qui a ete cliquee
public bool Handled = false;
public SelectionCaseEventArg(int x, int y, bool selectionnee, Action deselectionner)
{
X = x;
Y = y;
Selectionnee = selectionnee;
Deselectionner = deselectionner;
}
}
}