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