// public override GameState PastState { get; set; } // public override GameState PresentState { get; set; } public override void Execute(ServerGameEntity damageEntity) { if (!damageEntity.hasTransform) { return; } if (!damageEntity.hasDamage) { return; } var testTransform = damageEntity.transform.value; if (testTransform == null) { log.Error("Transform пуст"); return; } Vector3 currentPosition = damageEntity.transform.value.position; Vector3 direction = damageEntity.transform.value.rotation * Vector3.forward; Vector3 velocity = damageEntity.rigidbody.value.velocity * tickDeltaTimeStorage.GetDeltaTimeSec(); //Есть столкновение? bool collisionOccurred = physicsRaycaster .Raycast(currentPosition, direction, velocity.magnitude, out RaycastHit raycastHit); if (!collisionOccurred) { return; } EntityLink entityLink = raycastHit.transform.gameObject.GetEntityLink(); ServerGameEntity targetEntity = (ServerGameEntity)entityLink.entity; if (targetEntity == null) { return; } ushort entityId = targetEntity.id.value; //Проверка попадания по самому себе if (damageEntity.parentWarship.entity.id.value == entityId) { log.Error($"Попадание по самому себе parentId = {entityId}"); return; } ServerGameEntity hitEntity = gameContext.CreateEntity(); hitEntity.AddHit(damageEntity, targetEntity); }