public void Trigger(ActionUsingNode node, string eventName) { var entity = node.Entity; Vector3 originPos; if (entity.Tags.Contain(EntityTags.Player)) { originPos = PlayerInputSystem.GetLookTargetRay.origin; } else { var animData = entity.Find <AnimatorComponent>(); originPos = animData?.Value?.GetEventPosition ?? (node.Tr != null ? node.Tr.position : Vector3.zero); } var target = node.ActionEvent.Target; var actionEntity = node.ActionEvent.Action.GetEntity(); var ray = new Ray(originPos, (target - originPos).normalized); CollisionEvent?ce = CollisionCheckSystem.Raycast(actionEntity, ray, RayDistance, LimitToEnemy); if (ce == null && RaySize > 0.01f) { ce = CollisionCheckSystem.SphereCast(actionEntity, ray, RayDistance, RaySize, LimitToEnemy); } if (ce != null) { var stateEvent = new ActionStateEvent(node.Entity, ce.Value.Target.Entity, ce.Value.HitPoint, Quaternion.LookRotation(ce.Value.HitNormal), StateEvent); node.Entity.Post(stateEvent); } }
public void Trigger(ActionEvent ae, string eventName) { var origin = ae.Origin; Vector3 originPos; Vector3 target; if (origin.Tags.Contain(EntityTags.Player)) { originPos = PlayerInputSystem.GetLookTargetRay.origin; target = PlayerInputSystem.GetMouseRaycastPosition(ae.Action.Config.Range); } else { originPos = ae.Position; target = ae.Origin.Target.GetPosition; } var actionEntity = ae.Action.Entity; var ray = new Ray(originPos, (target - originPos).normalized); if (CollisionCheckSystem.Raycast(actionEntity, ray, RayDistance, LimitToEnemy) == null && RaySize > 0.01f) { CollisionCheckSystem.SphereCast(actionEntity, ray, RayDistance, RaySize, LimitToEnemy); } }