Survivalcraft API 1.8.2.3 v1.8.2.3
Survivalcraft 2.4
载入中...
搜索中...
未找到
KillParticleSystem.cs
浏览该文件的文档.
1using Engine;
3
4namespace Game {
5 public class KillParticleSystem : ParticleSystem<KillParticleSystem.Particle> {
6 public class Particle : Game.Particle {
8
9 public float TimeToLive;
10 }
11
12 public Random m_random = new();
13
14 public KillParticleSystem(SubsystemTerrain terrain, Vector3 position, float size) : base(20) {
15 Texture = ContentManager.Get<Texture2D>("Textures/KillParticle");
16 int num = Terrain.ToCell(position.X);
17 int num2 = Terrain.ToCell(position.Y);
18 int num3 = Terrain.ToCell(position.Z);
19 int x = 0;
20 x = MathUtils.Max(x, terrain.Terrain.GetCellLight(num + 1, num2, num3));
21 x = MathUtils.Max(x, terrain.Terrain.GetCellLight(num - 1, num2, num3));
22 x = MathUtils.Max(x, terrain.Terrain.GetCellLight(num, num2 + 1, num3));
23 x = MathUtils.Max(x, terrain.Terrain.GetCellLight(num, num2 - 1, num3));
24 x = MathUtils.Max(x, terrain.Terrain.GetCellLight(num, num2, num3 + 1));
25 x = MathUtils.Max(x, terrain.Terrain.GetCellLight(num, num2, num3 - 1));
27 Color white = Color.White;
29 white *= num4;
30 white.A = 255;
31 for (int i = 0; i < Particles.Length; i++) {
32 Particle obj = Particles[i];
33 obj.IsActive = true;
34 obj.Position = position + 0.4f * size * new Vector3(m_random.Float(-1f, 1f), m_random.Float(-1f, 1f), m_random.Float(-1f, 1f));
35 obj.Color = white;
36 obj.Size = new Vector2(0.3f * size);
37 obj.TimeToLive = m_random.Float(0.5f, 3.5f);
38 obj.Velocity = 1.2f * size * new Vector3(m_random.Float(-1f, 1f), m_random.Float(-1f, 1f), m_random.Float(-1f, 1f));
39 obj.FlipX = m_random.Bool();
40 obj.FlipY = m_random.Bool();
41 }
42 }
43
44 public override bool Simulate(float dt) {
45 dt = Math.Clamp(dt, 0f, 0.1f);
46 float num = MathF.Pow(0.1f, dt);
47 bool flag = false;
48 for (int i = 0; i < Particles.Length; i++) {
49 Particle particle = Particles[i];
50 if (particle.IsActive) {
51 flag = true;
52 particle.TimeToLive -= dt;
53 if (particle.TimeToLive > 0f) {
54 particle.Position += particle.Velocity * dt;
55 particle.Velocity.Y += 1f * dt;
56 particle.Velocity *= num;
57 particle.TextureSlot = (int)(3.99f * MathUtils.Saturate(2f - particle.TimeToLive));
58 }
59 else {
60 particle.IsActive = false;
61 }
62 }
63 }
64 return !flag;
65 }
66 }
67}
Engine.Vector3 Vector3
static float Saturate(float x)
static int Max(int x1, int x2)
static object Get(Type type, string name)
override bool Simulate(float dt)
KillParticleSystem(SubsystemTerrain terrain, Vector3 position, float size)
static readonly float[] LightIntensityByLightValue
ParticleSystem(int particlesCount)
virtual int GetCellLight(int x, int y, int z)
static int ToCell(float x)
static Color White