void ISignalOnTriggerDynamic.OnTriggerDynamic(Frame f, DynamicCollisionInfo info) { var charOne = Entity.CastToCharacter(info.EntityA); if (charOne == null) { charOne = Entity.CastToCharacter(info.EntityB); } var charTwo = Entity.CastToProjectile(info.EntityA); if (charTwo == null) { charTwo = Entity.CastToProjectile(info.EntityB); } if (charTwo != null && charOne != null && !charTwo->Source.Equals(charOne->EntityRef)) { //if it's a valid hit and we didn't hit ourself //destroy the bullet f.DestroyProjectile(charTwo); DamageData dmg = new DamageData() { Character = charOne->EntityRef, Type = DamageType.Magical, Damage = 20 }; f.Signals.OnDamageBefore(&dmg); f.Signals.OnDamage(dmg); //f.Events.CharacterDamage(charOne->EntityRef, 10); } }
public void OnTriggerDynamic(DynamicCollisionInfo info) { var array = _f._ISignalOnTriggerDynamicSystems; var systems = &(_f._globals->Systems); for (Int32 i = 0; i < array.Length; ++i) { var s = array[i]; if (BitSet256.IsSet(systems, s.RuntimeIndex)) { s.OnTriggerDynamic(_f, info); } } }
public void OnTrigger(DynamicScene.Manifold manifold) { var aIsNull = manifold.A.Entity == null; if (aIsNull || manifold.B.Entity == null) { StaticCollisionInfo info; info = default(StaticCollisionInfo); info.Entity = (Entity *)(aIsNull ? manifold.B.Entity : manifold.A.Entity); info.StaticData = aIsNull ? manifold.A.StaticData : manifold.B.StaticData; _f.Signals.OnTriggerStatic(info); var typesHash = (Int32)info.Entity->Type; OnTriggerInternal(info, typesHash); } else { DynamicCollisionInfo info = default(DynamicCollisionInfo); info.EntityA = (Entity *)manifold.A.Entity; info.EntityB = (Entity *)manifold.B.Entity; _f.Signals.OnTriggerDynamic(info); var typesHash = (Int32)info.EntityA->Type | ((Int32)info.EntityB->Type << 16); OnTriggerInternal(info, typesHash); } }
partial void OnTriggerInternal(DynamicCollisionInfo info, Int32 typesHash);
partial void OnCollisionInternal(DynamicCollisionInfo info, Int32 typesHash) { switch (typesHash) { } }