Jypeli 10
The simple game programming library
Slider.cs
Siirry tämän tiedoston dokumentaatioon.
1#region MIT License
2/*
3 * Copyright (c) 2018 University of Jyväskylä, Department of Mathematical
4 * Information Technology.
5 *
6 * Permission is hereby granted, free of charge, to any person obtaining a copy
7 * of this software and associated documentation files (the "Software"), to deal
8 * in the Software without restriction, including without limitation the rights
9 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10 * copies of the Software, and to permit persons to whom the Software is
11 * furnished to do so, subject to the following conditions:
12 *
13 * The above copyright notice and this permission notice shall be included in
14 * all copies or substantial portions of the Software.
15 *
16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22 * THE SOFTWARE.
23 */
24#endregion
25
26
27namespace Jypeli.Widgets
28{
32 public class Slider : BindableWidget
33 {
34 private bool pressedDown = false;
35 private Touch touchObject = null;
36
39
43 public Widget Knob { get; private set; }
44
49 {
50 get { return _activeColor; }
51 set { _activeColor = value; }
52 }
53
58 {
59 get { return _inactiveColor; }
60 set { _inactiveColor = value; }
61 }
62
66 public Widget Track { get; private set; }
67
73 public Slider(double width, double height)
74 : base(width, height)
75 {
77 CapturesMouse = true;
78
79 Track = new Widget(width, height / 3);
80 Add(Track);
81
82 Knob = new Widget(height, height, Shape.Circle);
84 Add(Knob);
85
87 }
88
96 public Slider(double width, double height, Meter meter)
97 : this(width, height)
98 {
99 BindTo(meter);
100 }
101
102 private void InitializeControls()
103 {
104 var l1 = Game.Mouse.ListenOn(this, MouseButton.Left, ButtonState.Pressed, MousePress, null).InContext(this);
105 var l2 = Game.Mouse.Listen(MouseButton.Left, ButtonState.Released, MouseRelease, null).InContext(this);
106 var l3 = Game.Mouse.ListenMovement(1.0, MouseMove, null).InContext(this);
107
108 var l4 = Game.TouchPanel.ListenOn(this, ButtonState.Pressed, TouchPress, null).InContext(this);
109 var l5 = Game.TouchPanel.Listen(ButtonState.Released, TouchRelease, null).InContext(this);
110 var l6 = Game.TouchPanel.Listen(ButtonState.Down, TouchMove, null).InContext(this);
111
112 associatedListeners.AddItems(l1, l2, l3, l4, l5, l6);
113 }
114
116 public override void BindTo(Meter meter)
117 {
118 pressedDown = false;
119 base.BindTo(meter);
120 }
121
123 public override void Unbind()
124 {
125 pressedDown = false;
126 base.Unbind();
127 }
128
132 protected override void UpdateValue()
133 {
134 if (Knob != null && Track != null && Meter != null)
136 }
137
138 private void GenMove(Vector newPos)
139 {
141 double newVal = newPos.ScalarProjection(u);
142
143 if (newVal < Track.RelativeLeft)
145 else if (newVal > Track.RelativeRight)
147 else
148 Knob.RelativePosition = new Vector(newVal, 0);
149
151 }
152
153 private void MousePress()
154 {
155 if (pressedDown) return;
157 pressedDown = true;
158 }
159
160 private void MouseMove()
161 {
163
164 if (pressedDown)
165 GenMove(Game.Mouse.PositionOnScreen - this.Position);
166 }
167
168 private void MouseRelease()
169 {
170 if (!pressedDown) return;
171 pressedDown = false;
173 }
174
175 private void TouchPress(Touch touch)
176 {
177 if (touchObject != null) return;
179 touchObject = touch;
181 }
182
183 private void TouchMove(Touch touch)
184 {
185 if (touchObject == touch)
186 GenMove(touch.PositionOnScreen - this.Position);
187 }
188
189 private void TouchRelease(Touch touch)
190 {
191 if (touchObject == null) return;
192 touchObject = null;
195 }
196 }
197}
Mouse Mouse
Hiiri.
Definition: Controls.cs:49
TouchPanel TouchPanel
Kosketusnäyttö
Definition: Controls.cs:62
void Add(IGameObject childObject)
Lisää annetun peliolion tämän olion lapseksi. Lapsiolio liikkuu tämän olion mukana.
Definition: ChildObjects.cs:98
virtual Color Color
Väri, jonka värisenä olio piirretään, jos tekstuuria ei ole määritelty.
Definition: Appearance.cs:65
Vector RelativePosition
Olion paikka suhteessa sen isäntäolioon.
Action AddedToGame
Tapahtuu, kun olio lisätään peliin.
double RelativeLeft
Olion vasemman reunan suhteellinen x-koordinaatti.
double RelativeRight
Olion oikean reunan suhteellinen x-koordinaatti.
double Width
Olion leveys (X-suunnassa, leveimmässä kohdassa).
Mittari, joka mittaa erityyppisiä arvoja. Sidottavissa näyttöihin, kuten ValueDisplay ja BarGauge.
Definition: Meter.cs:100
abstract double RelativeValue
Mittarin suhteellinen arvo (minimi 0, maksimi 1)
Definition: Meter.cs:65
Vector PositionOnScreen
Kursorin paikka ruutukoordinaateissa.
Definition: Mouse.cs:75
Listener ListenOn(GameObject obj, HoverState hoverstate, MouseButton button, ButtonState state, Action handler, string helpText)
Kuuntelee hiirenpainalluksia annetun peliolion päällä.
Definition: Mouse.cs:476
Listener Listen(MouseButton button, ButtonState state, Action handler, string helpText)
Kuuntelee hiiren nappulan painalluksia.
Definition: Mouse.cs:350
static bool IsCursorOn(ScreenView screen, MouseState state, GameObject obj)
Onko hiiren kursori annetun olion päällä.
Definition: Mouse.cs:320
Listener ListenMovement(double trigger, Action handler, string helpText)
Kuuntelee hiiren liikettä.
Definition: Mouse.cs:413
Kuvio.
Definition: Shapes.cs:47
static readonly Ellipse Circle
Ympyrä tai ellipsi.
Definition: Shapes.cs:63
Kosketuspaneelin kosketus.
Definition: Touch.cs:39
Vector PositionOnScreen
Kosketuksen paikka ruudulla.
Definition: Touch.cs:61
Listener ListenOn(GameObject obj, HoverState hoverstate, ButtonState buttonstate, TouchHandler handler, string helpText)
Kuuntelee kosketusnäyttöä olion päällä.
Definition: TouchPanel.cs:354
Listener Listen(ButtonState state, TouchHandler handler, string helpText)
Kuuntelee kosketusnäyttöä.
Definition: TouchPanel.cs:296
Käyttöliittymän komponentti.
Definition: Appearance.cs:6
Widget(Animation animation)
Alustaa widgetin.
Definition: Widget.cs:14
List< Listener > associatedListeners
Tähän listaan lisätyt kuuntelijat tuhotaan automaattisesti kun Widget poistetaan pelistä.
Definition: Control.cs:14
bool CapturesMouse
Kaappaako hiiren, eli meneekö hiiren tapahtumat tämän alla sijaitsevalle oliolle
Definition: Control.cs:30
Widget, joka voidaan asettaa näyttämään halutun mittarin arvoa.
void SetChangedEvent()
Asettaa tapahtuman, joka reagoi Meter.Value muutokseen kutsumalla UpdateValue-metodia.
void UnsetChangedEvent()
Poistaa käytöstä tapahtuman, joka reagoi Meter.Value muutokseen kutsumalla UpdateValue-metodia....
Liukusäädin
Definition: Slider.cs:33
Color ActiveColor
Nupin väri kun hiiri on nupin päällä.
Definition: Slider.cs:49
void TouchMove(Touch touch)
Definition: Slider.cs:183
Slider(double width, double height, Meter meter)
Luo uuden liukusäätimen. Sitoo liukusäätimen arvon mittarin arvoon.
Definition: Slider.cs:96
Widget Track
Ura, jossa liukusäädin liukuu.
Definition: Slider.cs:66
void TouchRelease(Touch touch)
Definition: Slider.cs:189
Slider(double width, double height)
Luo uuden liukusäätimen.
Definition: Slider.cs:73
void TouchPress(Touch touch)
Definition: Slider.cs:175
Widget Knob
Liukuva nuppi.
Definition: Slider.cs:43
Color InactiveColor
Nupin väri kun hiiri ei ole nupin päällä.
Definition: Slider.cs:58
override void BindTo(Meter meter)
Asettaa kontrollin seuraamaan mittarin arvoa.
Definition: Slider.cs:116
void GenMove(Vector newPos)
Definition: Slider.cs:138
override void UpdateValue()
Päivittää liukusäätimen nupin arvoa vastaavaan sijaintiin
Definition: Slider.cs:132
override void Unbind()
Lopettaa mittarin arvon seuraamisen.
Definition: Slider.cs:123
void InitializeControls()
Definition: Slider.cs:102
Color _inactiveColor
Definition: Slider.cs:38
Listener InContext(ListenContext context)
Kuuntelee tapahtumaa vain tietyssä kontekstissa.
ButtonState
Napin (minkä tahansa) asento.
Definition: ButtonState.cs:37
MouseButton
Hiiren napit.
Definition: MouseButton.cs:7
Suuntakulma (rajoitettu -180 ja 180 asteen välille) asteina ja radiaaneina. Tietoja kulmasta: http://...
Definition: Angle.cs:40
Väri.
Definition: Color.cs:13
static readonly Color Transparent
Läpinäkyvä väri.
Definition: Color.cs:931
static readonly Color DarkGray
Tumma harmaa.
Definition: Color.cs:631
static readonly Color Red
Punainen.
Definition: Color.cs:866
2D-vektori.
Definition: Vector.cs:67
double ScalarProjection(Vector vector)
Skalaariprojektio annettuun vektoriin https://en.wikipedia.org/wiki/Scalar_projection
Definition: Vector.cs:200
static Vector FromLengthAndAngle(double length, double angle)
Luo vektorin pituuden ja kulman perusteella.
Definition: Vector.cs:114