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); } }
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)); }
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); }
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); }
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); } }