Survivalcraft API 1.8.2.3 v1.8.2.3
Survivalcraft 2.4
载入中...
搜索中...
未找到
FireParticleSystem.cs
浏览该文件的文档.
1using Engine;
3
4namespace Game {
5 public class FireParticleSystem : ParticleSystem<FireParticleSystem.Particle> {
6 public class Particle : Game.Particle {
7 public float Time;
8
9 public float TimeToLive;
10
11 public float Speed;
12 }
13
14 public Random m_random = new();
15
17
18 public float m_size;
19
20 public float m_toGenerate;
21
22 public bool m_visible;
23
25
26 public float m_age;
27
28 public bool IsStopped { get; set; }
29
30 public FireParticleSystem(Vector3 position, float size, float maxVisibilityDistance) : base(10) {
31 m_position = position;
32 m_size = size;
33 m_maxVisibilityDistance = maxVisibilityDistance;
34 Texture = ContentManager.Get<Texture2D>("Textures/FireParticle");
36 }
37
38 public override bool Simulate(float dt) {
39 m_age += dt;
40 bool flag = false;
41 if (m_visible || m_age < 2f) {
42 m_toGenerate += IsStopped ? 0f : 5f * dt;
43 for (int i = 0; i < Particles.Length; i++) {
44 Particle particle = Particles[i];
45 if (particle.IsActive) {
46 flag = true;
47 particle.Time += dt;
48 particle.TimeToLive -= dt;
49 if (particle.TimeToLive > 0f) {
50 particle.Position.Y += particle.Speed * dt;
51 particle.TextureSlot = (int)MathUtils.Min(9f * particle.Time / 1.25f, 8f);
52 }
53 else {
54 particle.IsActive = false;
55 }
56 }
57 else if (m_toGenerate >= 1f) {
58 particle.IsActive = true;
59 particle.Position = m_position + 0.25f * m_size * new Vector3(m_random.Float(-1f, 1f), 0f, m_random.Float(-1f, 1f));
60 particle.Color = Color.White;
61 particle.Size = new Vector2(m_size);
62 particle.Speed = m_random.Float(0.45f, 0.55f) * m_size / 0.15f;
63 particle.Time = 0f;
64 particle.TimeToLive = m_random.Float(0.5f, 2f);
65 particle.FlipX = m_random.Int(0, 1) == 0;
66 particle.FlipY = m_random.Int(0, 1) == 0;
67 m_toGenerate -= 1f;
68 }
69 }
71 }
72 m_visible = false;
73 if (IsStopped) {
74 return !flag;
75 }
76 return false;
77 }
78
79 public override void Draw(Camera camera) {
80 float num = Vector3.Dot(m_position - camera.ViewPosition, camera.ViewDirection);
81 if (num > -0.5f
84 m_visible = true;
85 base.Draw(camera);
86 }
87 }
88 }
89}
Engine.Vector3 Vector3
static float Remainder(float x, float y)
static int Min(int x1, int x2)
Vector3 ViewPosition
Vector3 ViewDirection
static object Get(Type type, string name)
FireParticleSystem(Vector3 position, float size, float maxVisibilityDistance)
override bool Simulate(float dt)
override void Draw(Camera camera)
ParticleSystem(int particlesCount)
static Color White
static float DistanceSquared(Vector3 v1, Vector3 v2)
static float Dot(Vector3 v1, Vector3 v2)