Beispiel #1
0
        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);
            }
        }