Survivalcraft API 1.8.2.3 v1.8.2.3
Survivalcraft 2.4
载入中...
搜索中...
未找到
ComponentDamage.cs
浏览该文件的文档.
1using Engine;
4
5namespace Game {
8
10
12
14
16
17 public float m_lastHitpoints;
18
19 public float m_fallResilience;
20
21 public float m_fireResilience;
22
24
25 public float m_debrisStrength;
26
27 public float m_debrisScale;
28
29 public float Hitpoints { get; set; }
30
31 public float HitpointsChange { get; set; }
32
33 public float AttackResilience { get; set; }
34
35 public string DamageSoundName { get; set; }
36
38
39 public virtual void Damage(float amount) {
40 if (amount > 0f
41 && Hitpoints > 0f) {
42 Hitpoints = MathUtils.Max(Hitpoints - amount, 0f);
43 }
44 }
45
46 public virtual void Update(float dt) {
47 Vector3 position = m_componentBody.Position;
48 if (Hitpoints <= 0f) {
49 m_subsystemParticles.AddParticleSystem(
52 position + m_componentBody.StanceBoxSize.Y / 2f * Vector3.UnitY,
57 )
58 );
59 m_subsystemAudio.PlayRandomSound(DamageSoundName, 1f, 0f, m_componentBody.Position, 4f, true);
60 Project.RemoveEntity(Entity, true);
61 }
62 if (m_componentBody.CrushedTime > 0f) {
63 Damage(1f * dt);
64 }
65 float num = MathF.Abs(m_componentBody.CollisionVelocityChange.Y);
66 if (num > m_fallResilience) {
67 float amount = MathUtils.Sqr(MathUtils.Max(num - m_fallResilience, 0f)) / 15f;
68 Damage(amount);
69 }
70 if (position.Y < -10f
71 || position.Y > 276f) {
73 }
74 if (m_componentOnFire != null
75 && (m_componentOnFire.IsOnFire || m_componentOnFire.TouchesFire)) {
77 }
80 }
81
82 public override void Load(ValuesDictionary valuesDictionary, IdToEntityMap idToEntityMap) {
83 m_subsystemTerrain = Project.FindSubsystem<SubsystemTerrain>(true);
84 m_subsystemAudio = Project.FindSubsystem<SubsystemAudio>(true);
85 m_subsystemParticles = Project.FindSubsystem<SubsystemParticles>(true);
86 m_componentBody = Entity.FindComponent<ComponentBody>(true);
87 m_componentOnFire = Entity.FindComponent<ComponentOnFire>();
88 Hitpoints = valuesDictionary.GetValue<float>("Hitpoints");
89 AttackResilience = valuesDictionary.GetValue<float>("AttackResilience");
90 m_fallResilience = valuesDictionary.GetValue<float>("FallResilience");
91 m_fireResilience = valuesDictionary.GetValue<float>("FireResilience");
92 m_debrisTextureSlot = valuesDictionary.GetValue<int>("DebrisTextureSlot");
93 m_debrisStrength = valuesDictionary.GetValue<float>("DebrisStrength");
94 m_debrisScale = valuesDictionary.GetValue<float>("DebrisScale");
95 DamageSoundName = valuesDictionary.GetValue<string>("DestructionSoundName");
96 }
97
98 public override void Save(ValuesDictionary valuesDictionary, EntityToIdMap entityToIdMap) {
99 valuesDictionary.SetValue("Hitpoints", Hitpoints);
100 }
101 }
102}
static int Max(int x1, int x2)
static int Sqr(int x)
SubsystemTerrain m_subsystemTerrain
SubsystemParticles m_subsystemParticles
SubsystemAudio m_subsystemAudio
override void Save(ValuesDictionary valuesDictionary, EntityToIdMap entityToIdMap)
override void Load(ValuesDictionary valuesDictionary, IdToEntityMap idToEntityMap)
virtual void Update(float dt)
ComponentOnFire m_componentOnFire
virtual void Damage(float amount)
ValuesDictionary ValuesDictionary
static Color White
static readonly Vector3 UnitY