2using System.Collections.Generic;
3using Microsoft.Xna.Framework;
4using Microsoft.Xna.Framework.Graphics;
13#pragma warning disable CS1591
16#pragma warning restore CS1591
25 private Random
random =
new Random();
44 #region Subclass variables
185 for (
int i = 0; i < maxAmountOfParticles; i++)
205 public void AddEffect(
double x,
double y,
int numberOfParticles)
218 for (
int i = 0; i < numberOfParticles &&
freeParticles.Count > 0; i++)
233 for (
int i = 0; i < numberOfParticles &&
freeParticles.Count > 0; i++)
247 double angle =
random.NextDouble() * MathHelper.TwoPi;
248 return new Vector(Math.Cos(angle), Math.Sin(angle));
267 p.
Initialize(position, scale, rotation, rotationSpeed, velocity * direction, acceleration * direction, lifetime);
274 double rotation = angle.
Degrees;
281 p.
Initialize(position, scale, rotation, rotationSpeed, velocity * direction, acceleration * direction, lifetime);
292 LinkedListNode<Particle> node =
particles.First;
304 LinkedListNode<Particle> previous = node;
341 static readonly Vector3
topLeft =
new Vector3(-0.5f, 0.5f, 0);
342 static readonly Vector3
bottomLeft =
new Vector3(-0.5f, -0.5f, 0);
343 static readonly Vector3
topRight =
new Vector3(0.5f, 0.5f, 0);
344 static readonly Vector3
bottomRight =
new Vector3(0.5f, -0.5f, 0);
364 return BlendState.AlphaBlend;
366 return BlendState.Additive;
368 return BlendState.AlphaBlend;
379 device.RasterizerState = RasterizerState.CullClockwise;
380 device.SamplerStates[0] = SamplerState.LinearClamp;
383 effect.Texture = texture;
384 effect.CurrentTechnique.Passes[0].Apply();
391 double alpha = 4 * nTime * (1 - nTime) *
AlphaAmount;
395 Matrix.CreateScale(scale * texture.Width / texture.Height, scale, 1f)
401 effect.Alpha = (float)alpha;
402 effect.World = matrix;
403 effect.CurrentTechnique.Passes[0].Apply();
405 device.DrawUserPrimitives<VertexPositionTexture>(PrimitiveType.TriangleList,
vertices, 0, 2);
415 double alpha = 4 * nTime * (1 - nTime) *
AlphaAmount;
419 Matrix.CreateScale(scale, scale, 1f)
425 Matrix.CreateScale(0.65f, 0.65f, 1f)
428 effect.Texture = texture;
429 effect.Alpha = (float)alpha;
430 effect.World = matrix;
431 effect.CurrentTechnique.Passes[0].Apply();
433 device.DrawUserPrimitives<VertexPositionTexture>(PrimitiveType.TriangleList,
vertices, 0, 2);
435 effect.Texture = outerTexture;
436 effect.World = matrix2;
437 effect.CurrentTechnique.Passes[0].Apply();
439 device.DrawUserPrimitives<VertexPositionTexture>(PrimitiveType.TriangleList,
vertices, 0, 2);
System.Numerics.Vector2 Vector2
Vector Position
Partikkelin sijainti
TimeSpan Lifetime
Partikkelin tämän hetkinen ikä
void Initialize(Vector position, double scale, double rotation, double rotationSpeed, Vector velocity, Vector acceleration, double lifetime)
Alusta partikkeli
TimeSpan MaxLifetime
Partikkelin elinikä
double Scale
Partikkelin skaalaus
bool Alive
Onko partikkelin "elossa", eli päivitetäänkö ja piirretäänkö se
void Update(double time)
Päivittää partikkelin sijannin, nopeuden ja kierron
double Rotation
Partikkelin kierto
Järjestelmä partikkelien käsittelyyn
static readonly VertexPositionTexture[] vertices
void AddEffect(double x, double y, int numberOfParticles)
Lisää efektin kentälle
Boolean IgnoreWind
Vaikuttaako efektiin tuuli
double MinScale
Pienin skaalaus joka efektin partikkeleilla voi olla
Queue< Particle > freeParticles
LinkedList< Particle > particles
static readonly Vector3 topLeft
static readonly Vector2 textureBottomLeft
override void Update(Time time)
Kutsutaan kun luokka päivitetään
static readonly Vector3 topRight
double AlphaAmount
Efektin läpinäkyvyyskerroin (0.0-1.0)
Image ParticleImage
Yksittäisen partikkelin kuva.
double MaxRotation
Suurin kierre mikä efektin partikkelilla voi olla
virtual Vector GiveRandomDirection()
Antaa satunnaisen suunnan
Image OuterParticleImage
Partikkelin toissijainen kuva. Jos null niin käytetään vain yhtä kuvaa.
static readonly Vector3 bottomLeft
double MaxLifetime
Efektin partikkelin pisin mahdollinen elinaika
double MaxScale
Suurin skaalaus joka efektin partikkeleilla voi olla
virtual void InitializeParticle(Particle p, Vector position)
Alustaa yhden partikkelin
double MinLifetime
Efektin partikkelin lyhin mahdollinen elinaika
double MaxAngleChange
Suurin sallittu suunnan poikkeama asteina
double ScaleAmount
Määrä jonka partikkeli skaalautuu päivityksessä
void Draw(Matrix worldMatrix)
ParticleSystem(Image particleImage, int maxAmountOfParticles)
Muodostaja
double MaxRotationSpeed
Suurin pyörimisnopeus joka efektin partikkelilla voi olla
virtual void InitializeParticles()
Metodi joka asettaa partikkeleille attribuutit Täytyy kutsua perityistä luokista
double MinVelocity
Pienin nopeus joka efektin partikkelilla voi olla
double MinRotation
Pienin kierre mikä efektin partikkelilla voi olla
virtual void InitializeParticle(Particle p, Vector position, Angle angle)
void FadeIn(double timeInSeconds)
Efekti tulee näkyviin tietyn sekuntimäärän aikana
static readonly Vector2 textureTopLeft
void AddEffect(Vector position, int numberOfParticles)
Lisää efektin kentälle
double MinRotationSpeed
Pienin pyörimisnopeus joka efektin partikkelilla voi olla
double MaxVelocity
Suurin nopeus joka efektin partikkelilla voi olla
void FadeOut(double TimeInSeconds)
Efekti hiipuu näkyvistä tietyn sekuntimäärän aikana
double MinAcceleration
Pienin kiihtyvyys joka efektin partikkelilla voi olla
static readonly Vector2 textureBottomRight
static readonly Vector3 bottomRight
double MaxAcceleration
Suurin kiihtyvyys joka efektin partikkelilla voi olla
static readonly Vector2 textureTopRight
void AddEffect(Vector position, Angle angle, int numberOfParticles)
Lisää efektin kentälle
static BlendState ToXnaBlendState(BlendMode mode)
static new GraphicsDevice GraphicsDevice
XNA:n grafiikkakortti.
Pelialueella liikkuva olio. Käytä fysiikkapeleissä PhysicsObject-olioita.
bool IsUpdated
Tarvitseeko olio päivittämistä. Kun perit oman luokkasi tästä luokasta, aseta tämä arvoon true,...
Contains graphics resources.
static BasicEffect BasicTextureEffect
Satunnaisgeneraattori. Luo satunnaisia arvoja, mm. lukuja, vektoreita sekä kulmia.
static double NextDouble(double min, double max)
Palauttaa satunnaisen liukuluvun parametrien
BlendMode
Sekoitusmoodi, kuinka päällekkäin olevat osittain läpinäkyvät kappaleet näkyvät
Microsoft.Xna.Framework.Matrix Matrix
Suuntakulma (rajoitettu -180 ja 180 asteen välille) asteina ja radiaaneina. Tietoja kulmasta: http://...
double Degrees
Palauttaa tai asettaa kulman asteina.
Sisältää tiedon ajasta, joka on kulunut pelin alusta ja viime päivityksestä.
TimeSpan SinceLastUpdate
Aika joka on kulunut viime päivityksestä.
double Y
Vektorin Y-komponentti
double X
Vektorin X-komponentti.