Skip to content

Commit 2fa39d5

Browse files
committed
Add particle system
Star collecting particles
1 parent bdf9e68 commit 2fa39d5

File tree

6 files changed

+75
-13
lines changed

6 files changed

+75
-13
lines changed

ColorSwitch.Windows/Content/Content.mgcb

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,11 @@
6060
/processorParam:TextureFormat=Compressed
6161
/build:font.spritefont
6262

63+
#begin Particles/star_death.pex
64+
/importer:ParticleDesignerImporter
65+
/processor:ParticleDesignerProcessor
66+
/build:Particles/star_death.pex
67+
6368
#begin Player/player_circle.png
6469
/importer:TextureImporter
6570
/processor:TextureProcessor
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
<particleEmitterConfig>
2+
<sourcePosition x="0" y="0"></sourcePosition>
3+
<sourcePositionVariance x="20" y="20"></sourcePositionVariance>
4+
<speed value="0"></speed>
5+
<speedVariance value="0.00"></speedVariance>
6+
<particleLifeSpan value="1.0"></particleLifeSpan>
7+
<particleLifespanVariance value="0"></particleLifespanVariance>
8+
<angle value="90"></angle>
9+
<angleVariance value="0"></angleVariance>
10+
<gravity x="40" y="0"></gravity>
11+
<radialAcceleration value="0.00"></radialAcceleration>
12+
<tangentialAcceleration value="0.00"></tangentialAcceleration>
13+
<radialAccelVariance value="0.00"></radialAccelVariance>
14+
<tangentialAccelVariance value="0.00"></tangentialAccelVariance>
15+
<startColor red="1.00" green="1.00" blue="1.00" alpha="0.6"></startColor>
16+
<startColorVariance red="0.00" green="0.00" blue="0.00" alpha="0.00"></startColorVariance>
17+
<finishColor red="1.00" green="1.00" blue="1.00" alpha="0.6"></finishColor>
18+
<finishColorVariance red="0.00" green="0.00" blue="0.00" alpha="0.00"></finishColorVariance>
19+
<maxParticles value="8"></maxParticles>
20+
<startParticleSize value="16.00"></startParticleSize>
21+
<startParticleSizeVariance value="8"></startParticleSizeVariance>
22+
<finishParticleSize value="8"></finishParticleSize>
23+
<finishParticleSizeVariance value="0.00"></finishParticleSizeVariance>
24+
<duration value="-1.00"></duration>
25+
<emitterType value="0"></emitterType>
26+
<maxRadius value="100"></maxRadius>
27+
<maxRadiusVariance value="0"></maxRadiusVariance>
28+
<minRadius value="0"></minRadius>
29+
<minRadiusVariance value="0.00"></minRadiusVariance>
30+
<rotatePerSecond value="0.00"></rotatePerSecond>
31+
<rotatePerSecondVariance value="0.00"></rotatePerSecondVariance>
32+
<blendFuncSource value="770"></blendFuncSource>
33+
<blendFuncDestination value="1"></blendFuncDestination>
34+
<rotationStart value="0.00"></rotationStart>
35+
<rotationStartVariance value="0.00"></rotationStartVariance>
36+
<rotationEnd value="0.00"></rotationEnd>
37+
<rotationEndVariance value="0.00"></rotationEndVariance>
38+
<texture name="../ColorEntities/star.png"/>
39+
</particleEmitterConfig>

ColorSwitch.Windows/GameCore/Components/PlayerPhysics.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,8 @@ public void HandleTouchableEntities(List<TouchableEntity> touchableEntities) {
4747
}
4848
}
4949
foreach (var touchableEntity in touchableEntities) {
50-
touchableEntity.SendState(entity);
50+
if(touchableEntity.getComponent<Collider>() != null)
51+
touchableEntity.SendState(entity);
5152
}
5253
}
5354
}

ColorSwitch.Windows/GameCore/Entities/Player.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ public static uint score {
2626
}
2727
private static GameText scoreText;
2828

29-
public List<TouchableEntity> touchableEntities;
29+
public static List<TouchableEntity> touchableEntities;
3030

3131
private bool gameStarted = false;
3232
private Texture2D playerTexture;

ColorSwitch.Windows/GameCore/Entities/Special/Star.cs

Lines changed: 27 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
using Microsoft.Xna.Framework;
33
using Microsoft.Xna.Framework.Graphics;
44
using Nez;
5+
using Nez.Particles;
56
using Nez.Sprites;
67
using Nez.Tweens;
78

@@ -10,6 +11,8 @@ public class Star : TouchableEntity {
1011

1112
private Texture2D starTexture;
1213
private Sprite starSprite;
14+
private ParticleEmitterConfig particleConfig;
15+
private float deathDuration = 0.7f;
1316

1417
public override Vector2 realSize => starTexture.Bounds.Size.ToVector2();
1518

@@ -21,7 +24,10 @@ public override void onAddedToScene() {
2124
addComponent(starSprite);
2225

2326
var collider = new CircleCollider(starTexture.Height / 2);
24-
addComponent(collider);
27+
addComponent(collider);
28+
29+
particleConfig = scene.content.Load<ParticleEmitterConfig>("Particles/star_death");
30+
particleConfig.duration = deathDuration;
2531
}
2632

2733
public override void SendState(Entity sender) {
@@ -35,26 +41,38 @@ public override void SendState(Entity sender) {
3541
}
3642
}
3743

38-
private new void destroy() {
39-
float duration = 0.7f;
44+
private new void destroy() {
45+
showScore();
46+
spawnParticles();
47+
base.destroy();
48+
}
4049

50+
private void showScore() {
4151
var scoreText = new GameText("+1");
4252
scoreText.position = position;
4353
scene.addEntity(scoreText);
4454

45-
var moveTween = scoreText.tweenPositionTo(position + new Vector2(0, -40), duration);
55+
var moveTween = scoreText.tweenPositionTo(position + new Vector2(0, -40), deathDuration);
4656
moveTween.setEaseType(EaseType.QuadOut);
4757
moveTween.start();
4858

49-
var opacityTween = new FloatTween(scoreText, 0f, duration - 0.3f);
59+
var opacityTween = new FloatTween(scoreText, 0f, deathDuration - 0.3f);
5060
opacityTween.setEaseType(EaseType.QuadOut);
5161
opacityTween.setDelay(0.3f);
52-
opacityTween.start();
53-
54-
Core.schedule(duration, t => {
62+
opacityTween.start();
63+
64+
Core.schedule(deathDuration, t => {
5565
if (scene != null) scoreText?.destroy();
5666
});
57-
base.destroy();
67+
}
68+
69+
private void spawnParticles() {
70+
var index = Player.touchableEntities.IndexOf(this) + 1;
71+
var particles = Player.touchableEntities[index];
72+
73+
particleConfig.sourcePosition = position;
74+
var particleEmitter = particles.addComponent(new ParticleEmitter(particleConfig));
75+
particleEmitter.play();
5876
}
5977
}
6078
}

ColorSwitch.Windows/GameCore/Scenes/GameScene.cs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22
using ColorSwitch.Windows.GameCore.Entities;
33
using ColorSwitch.Windows.GameCore.UiLib.Entities;
44
using Microsoft.Xna.Framework;
5-
using ColorSwitch.Windows.GameCore.Helpers;
65

76
namespace ColorSwitch.Windows.GameCore.Scenes {
87
public class GameScene : Scene {
@@ -17,7 +16,7 @@ public override void initialize() {
1716
player = new Player();
1817
addEntity(player);
1918

20-
var entityBuilder = new EntityBuilder(player.touchableEntities);
19+
var entityBuilder = new EntityBuilder(Player.touchableEntities);
2120
addEntity(entityBuilder);
2221

2322
Player.score = 0;

0 commit comments

Comments
 (0)