public void CheckAttack(uint attackerID, Position attackerPos, float attackerScale, AttackCone attackCone, AttackInfo attackInfo) { readerWriterLockSlim.EnterReadLock(); try { foreach (var shadowObj in ShadowObjectList) { var pObj = shadowObj.PhysicsObj; if (pObj.ID == attackerID || pObj.State.HasFlag(PhysicsState.Static)) { continue; } var hitLocation = pObj.check_attack(attackerPos, attackerScale, attackCone, attackInfo.AttackRadius); if (hitLocation != 0) { attackInfo.AddObject(pObj.ID, hitLocation); } } } finally { readerWriterLockSlim.ExitReadLock(); } }