Jypeli 10
The simple game programming library
Movement.cs
Siirry tämän tiedoston dokumentaatioon.
1#region MIT License
2/*
3 * Copyright (c) 2009 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/*
27 * Authors: Tero Jäntti, Tomi Karppinen, Janne Nikkanen.
28 */
29
30using System;
32
33namespace Jypeli
34{
35 public partial class GameObject
36 {
38
42 protected Timer moveTimer = null;
43
47 protected Vector? moveTarget = null;
48
52 protected double moveSpeed;
53
57 protected Action arrivedAction = null;
58
63 public virtual void Move( Vector movement )
64 {
65 Position += movement;
66 }
67
82 public override void MoveTo( Vector location, double speed, Action doWhenArrived )
83 {
84 if ( moveTimer == null )
85 {
86 moveTimer = new Timer();
88 moveTimer.Interval = 0.01;
89 }
90 else if ( moveTimer.Enabled )
92
93 moveSpeed = speed;
94 moveTarget = location;
95 arrivedAction = doWhenArrived;
97 }
98
102 public void StopMoveTo()
103 {
104 if ( moveTimer != null )
105 {
106 moveTimer.Stop();
107 moveTarget = null;
108 }
109 }
110
114 protected virtual void MoveToTarget()
115 {
116 if ( !moveTarget.HasValue )
117 {
118 moveTimer.Stop();
119 return;
120 }
121
122 Vector d = moveTarget.Value - Position;
123 double vt = moveSpeed * moveTimer.Interval;
124
125 if ( d.Magnitude < vt )
126 {
127 Vector targetLoc = moveTarget.Value;
128 moveTimer.Stop();
129 Position = moveTarget.Value;
130 moveTarget = null;
131
132 if ( arrivedAction != null )
134 }
135 else
136 {
138 }
139 }
140
149 public void Oscillate( Vector axis, double amplitude, double frequency, double phase = 0, double damping = 0 )
150 {
151 if ( oscillators == null )
153
154 oscillators.Add( new LinearOscillator( this, axis, amplitude, frequency, phase, damping ) );
155 IsUpdated = true;
156 }
157
165 public void OscillateAngle( double direction, UnlimitedAngle amplitude, double frequency, double damping = 0 )
166 {
167 if ( oscillators == null )
169
170 oscillators.Add( new AngularOscillator( this, direction, amplitude, frequency, damping ) );
171 IsUpdated = true;
172 }
173
177 public void SetEquilibrium()
178 {
179 throw new NotImplementedException();
180 }
181
185 public void ClearOscillations()
186 {
187 oscillators = null;
188 }
189
193 public virtual void Stop()
194 {
195 StopMoveTo();
197 }
198 }
199}
SynchronousList< Oscillator > oscillators
Definition: Movement.cs:37
void StopMoveTo()
Pysäyttää MoveTo-aliohjelmalla aloitetun liikkeen.
Definition: Movement.cs:102
override Vector?? Position
Definition: Dimensions.cs:72
Action arrivedAction
Kun olio saapuu kohteeseen
Definition: Movement.cs:57
override void MoveTo(Vector location, double speed, Action doWhenArrived)
Yrittää siirtyä annettuun paikkaan annetulla nopeudella. Laukaisee annetun aliohjelman,...
Definition: Movement.cs:82
virtual void Move(Vector movement)
Siirtää oliota.
Definition: Movement.cs:63
void SetEquilibrium()
Asettaa uuden tasapainoaseman värähtelyille.
Definition: Movement.cs:177
double moveSpeed
Liikkumisnopeus kohdetta kohti
Definition: Movement.cs:52
void OscillateAngle(double direction, UnlimitedAngle amplitude, double frequency, double damping=0)
Laittaa kappaleen kulman värähtelemään edestakaisin.
Definition: Movement.cs:165
void ClearOscillations()
Poistaa kaikki värähtelyt kappaleelta.
Definition: Movement.cs:185
void Oscillate(Vector axis, double amplitude, double frequency, double phase=0, double damping=0)
Laittaa kappaleen värähtelemään edestakaisin nykyisen paikkansa ympärillä tietyn akselin suunta...
Definition: Movement.cs:149
Vector? moveTarget
Piste johon liikutaan
Definition: Movement.cs:47
virtual void Stop()
Pysäyttää kaiken liikkeen.
Definition: Movement.cs:193
Timer moveTimer
Ajastin joka liikuttaa kappaletta kohti kohdepistettä
Definition: Movement.cs:42
virtual void MoveToTarget()
Liikuttaa kappaletta kohti määränpäätä.
Definition: Movement.cs:114
Harmoninen värähtelijä pyörintäliikkeelle.
Definition: Oscillator.cs:135
bool IsUpdated
Tarvitseeko olio päivittämistä. Kun perit oman luokkasi tästä luokasta, aseta tämä arvoon true,...
Harmoninen värähtelijä akselin suhteen.
Definition: Oscillator.cs:66
Synkroninen lista, eli lista joka päivittyy vasta kun sen Update-metodia kutsutaan....
Ajastin, joka voidaan asettaa laukaisemaan tapahtumia tietyin väliajoin.
Definition: Timer.cs:38
bool Enabled
Ajastin päällä/pois päältä.
Definition: Timer.cs:66
double Interval
Aika sekunneissa, jonka välein TimeOut tapahtuu.
Definition: Timer.cs:87
void Stop()
Pysäyttää ajastimen ja nollaa sen tilan.
Definition: Timer.cs:292
Action Timeout
Tapahtuu väliajoin.
Definition: Timer.cs:44
void Start()
Käynnistää ajastimen.
Definition: Timer.cs:257
Rajoittamaton kulma (asteina ja radiaaneina). Tietoja kulmasta: http://en.wikipedia....
2D-vektori.
Definition: Vector.cs:67
Angle Angle
Kulma radiaaneina.
Definition: Vector.cs:372
double Magnitude
Vektorin pituus.
Definition: Vector.cs:345
static Vector FromLengthAndAngle(double length, double angle)
Luo vektorin pituuden ja kulman perusteella.
Definition: Vector.cs:114