Survivalcraft API 1.8.2.3 v1.8.2.3
Survivalcraft 2.4
载入中...
搜索中...
未找到
OnFireParticleSystem.cs
浏览该文件的文档.
1using Engine;
3
4namespace Game {
5 public class OnFireParticleSystem : ParticleSystem<OnFireParticleSystem.Particle> {
6 public class Particle : Game.Particle {
7 public float Time;
8
9 public float Duration;
10
12 }
13
14 public Random m_random = new();
15
16 public float m_toGenerate;
17
18 public bool m_visible;
19
20 public bool IsStopped { get; set; }
21
22 public Vector3 Position { get; set; }
23
24 public float Radius { get; set; }
25
26 public OnFireParticleSystem() : base(25) {
27 Texture = ContentManager.Get<Texture2D>("Textures/FireParticle");
29 }
30
31 public override bool Simulate(float dt) {
32 bool flag = false;
33 if (m_visible) {
34 m_toGenerate += 20f * dt;
35 float num = MathF.Pow(0.02f, dt);
36 for (int i = 0; i < Particles.Length; i++) {
37 Particle particle = Particles[i];
38 if (particle.IsActive) {
39 flag = true;
40 particle.Time += dt;
41 if (particle.Time <= particle.Duration) {
42 particle.Position += particle.Velocity * dt;
43 particle.Velocity *= num;
44 particle.Velocity.Y += 10f * dt;
45 particle.TextureSlot = (int)MathUtils.Min(9f * particle.Time / particle.Duration * 1.2f, 8f);
46 }
47 else {
48 particle.IsActive = false;
49 }
50 }
51 else if (!IsStopped) {
52 if (m_toGenerate >= 1f) {
53 particle.IsActive = true;
54 Vector3 v = new(m_random.Float(-1f, 1f), m_random.Float(0f, 1f), m_random.Float(-1f, 1f));
55 particle.Position = Position + 0.75f * Radius * v;
56 particle.Color = Color.White;
57 particle.Velocity = 1.5f * v;
58 particle.Size = new Vector2(0.5f);
59 particle.Time = 0f;
60 particle.Duration = m_random.Float(0.5f, 1.5f);
61 particle.FlipX = m_random.Bool();
62 particle.FlipY = m_random.Bool();
63 m_toGenerate -= 1f;
64 }
65 }
66 else {
67 m_toGenerate = 0f;
68 }
69 }
71 m_visible = false;
72 }
73 if (IsStopped && !flag) {
74 return true;
75 }
76 return false;
77 }
78
79 public override void Draw(Camera camera) {
80 float num = Vector3.Dot(Position - camera.ViewPosition, camera.ViewDirection);
81 if (num > -5f
82 && num <= 48f) {
83 m_visible = true;
84 base.Draw(camera);
85 }
86 }
87 }
88}
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)
override void Draw(Camera camera)
ParticleSystem(int particlesCount)
static Color White
static float Dot(Vector3 v1, Vector3 v2)