Exemplo n.º 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);
            }
        }
Exemplo n.º 2
0
        void OnTriggerEnter(Collider other)
        {
            if (!enabled || !_canGenerateCollisions || _checkedColliders.Contains(other))
            {
                return;
            }
            _checkedColliders.Add(other);
            var hitEntity = EntityController.GetEntity(UnityToEntityBridge.GetEntityId(other));
            var entity    = EntityController.GetEntity(EntityID);

            if (hitEntity == null || hitEntity.Id == EntityID)
            {
                return;
            }
            if (!CollisionCheckSystem.IsValidCollision(entity, _limitToEnemy, hitEntity, other, out var sourceNode, out var targetNode))
            {
                return;
            }
            var position  = transform.position;
            var hitPnt    = other.ClosestPointOnBounds(position);
            var hitNormal = (hitPnt - position).normalized;

#if DEBUG
            DebugExtension.DrawPoint(hitPnt, Color.yellow, 1.5f, 4f);
#endif
            hitEntity.Post(new CollisionEvent(entity, sourceNode, targetNode, hitPnt, hitNormal));
            entity.Post(new PerformedCollisionEvent(sourceNode, targetNode, hitPnt, hitNormal));
        }
        void OnCollisionEnter(Collision collision)
        {
            if (!enabled || !_canGenerateCollisions || _checkedColliders.Contains(collision.collider))
            {
                return;
            }
            var other = collision.collider;

            _checkedColliders.Add(other);
            var hitEntity = EntityController.GetEntity(UnityToEntityBridge.GetEntityId(other));
            var entity    = EntityController.GetEntity(EntityID);

            if (hitEntity == null || hitEntity.Id == EntityID)
            {
                return;
            }
            if (!CollisionCheckSystem.IsValidCollision(entity, _limitToEnemy, hitEntity, other, out var sourceNode, out var targetNode))
            {
                return;
            }
            var collisionPnt = collision.contacts[0];
            var hitPnt       = collisionPnt.point;
            var hitNormal    = collisionPnt.normal;

#if DEBUG
            DebugExtension.DrawPoint(hitPnt, Color.magenta, 1.5f, 4f);
#endif
            hitEntity.Post(new CollisionEvent(entity, sourceNode, targetNode, hitPnt, hitNormal));
            entity.Post(new PerformedCollisionEvent(sourceNode, targetNode, hitPnt, hitNormal));
        }
Exemplo n.º 4
0
        public void Handle(EnvironmentCollisionEvent arg)
        {
            var component = arg.EntityHit.Find <ImpactRadius>();

            if (component == null)
            {
                return;
            }
            CollisionCheckSystem.OverlapSphere(arg.EntityHit, arg.EntityHit, arg.HitPoint,
                                               component.Radius.ToFloat(), component.LimitToEnemy);
        }
Exemplo n.º 5
0
        public void Handle(ImpactEvent arg)
        {
            var component = arg.Source.Find <ImpactRadius>();

            if (component == null)
            {
                return;
            }
            CollisionCheckSystem.OverlapSphere(arg.Origin, arg.Target, arg.HitPoint,
                                               component.Radius.ToFloat(), component.LimitToEnemy);
        }
Exemplo n.º 6
0
        public void RuleEventEnded(ref ImpactEvent context)
        {
            var component = context.Source.Find <ImpactRadius>();

            if (component == null)
            {
                return;
            }
            if (component.Radius == ImpactRadiusTypes.Single)
            {
                return;
            }
            CollisionCheckSystem.OverlapSphere(
                context.Origin, context.Target, context.HitPoint,
                component.Radius.ToFloat(), component.LimitToEnemy);
        }
        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);
            }
        }