Пример #1
0
 public static void StartDragCallEvent(bool __result, NomaiInterfaceOrb __instance)
 {
     if (__result)
     {
         QSBEventManager.FireEvent(EventNames.QSBOrbUser, QSBWorldSync.OldOrbList.FindIndex(x => x == __instance));
     }
 }
Пример #2
0
        private static bool CheckSlotCollision(NomaiInterfaceOrb __instance,
                                               bool playAudio)
        {
            if (!QSBWorldSync.AllObjectsReady)
            {
                return(true);
            }

            var qsbOrb = __instance.GetWorldObject <QSBOrb>();

            if (qsbOrb.TransformSync.hasAuthority)
            {
                if (__instance._occupiedSlot == null)
                {
                    for (var slotIndex = 0; slotIndex < __instance._slots.Length; slotIndex++)
                    {
                        var slot = __instance._slots[slotIndex];
                        if (slot != null && slot.CheckOrbCollision(__instance))
                        {
                            __instance._occupiedSlot  = slot;
                            __instance._enterSlotTime = Time.time;
                            if (slot.CancelsDragOnCollision())
                            {
                                __instance.CancelDrag();
                            }

                            if (playAudio && __instance._orbAudio != null && slot.GetPlayActivationAudio())
                            {
                                __instance._orbAudio.PlaySlotActivatedClip();
                            }

                            qsbOrb.SendMessage(new OrbSlotMessage(slotIndex, playAudio));
                            break;
                        }
                    }
                }
                else if ((!__instance._occupiedSlot.IsAttractive() || __instance._isBeingDragged) && !__instance._occupiedSlot.CheckOrbCollision(__instance))
                {
                    __instance._occupiedSlot = null;
                    qsbOrb.SendMessage(new OrbSlotMessage(-1, playAudio));
                }
            }

            __instance._owCollider.SetActivation(__instance._occupiedSlot == null || !__instance._occupiedSlot.IsAttractive() || __instance._isBeingDragged);

            return(false);
        }
Пример #3
0
        private static bool StartDragFromPosition(NomaiInterfaceOrb __instance, ref bool __result,
                                                  Vector3 manipPos)
        {
            if (!QSBWorldSync.AllObjectsReady)
            {
                return(true);
            }

            if (__instance._orbBody.IsSuspended() || __instance._isBeingDragged)
            {
                __result = false;
                return(false);
            }

            if (__instance.RecentlyEnteredSlot())
            {
                __instance._loseFocusToStartDrag = true;
            }

            if (Vector3.Distance(manipPos, __instance.transform.position) < __instance._startDragDist)
            {
                if (!__instance._loseFocusToStartDrag)
                {
                    __instance._isBeingDragged = true;
                    __instance._interactibleCollider.enabled = false;
                    if (__instance._orbAudio != null)
                    {
                        __instance._orbAudio.PlayStartDragClip();
                    }

                    var qsbOrb = __instance.GetWorldObject <QSBOrb>();
                    qsbOrb.SendMessage(new OrbDragMessage(true));
                    qsbOrb.TransformSync.netIdentity.UpdateAuthQueue(AuthQueueAction.Force);
                }
            }
            else
            {
                __instance._loseFocusToStartDrag = false;
            }

            __result = __instance._isBeingDragged;
            return(false);
        }
Пример #4
0
        private static bool CancelDrag(NomaiInterfaceOrb __instance)
        {
            if (!QSBWorldSync.AllObjectsReady)
            {
                return(true);
            }

            if (!__instance._isBeingDragged)
            {
                return(false);
            }

            var qsbOrb = __instance.GetWorldObject <QSBOrb>();

            if (!qsbOrb.TransformSync.hasAuthority)
            {
                return(false);
            }

            qsbOrb.SendMessage(new OrbDragMessage(false));
            return(true);
        }
Пример #5
0
        public static bool CheckOrbCollision(ref bool __result, NomaiInterfaceSlot __instance, NomaiInterfaceOrb orb,
                                             bool ____ignoreDraggedOrbs, float ____radius, float ____exitRadius, ref NomaiInterfaceOrb ____occupyingOrb)
        {
            if (____ignoreDraggedOrbs && orb.IsBeingDragged())
            {
                __result = false;
                return(false);
            }
            var orbDistance   = Vector3.Distance(orb.transform.position, __instance.transform.position);
            var triggerRadius = orb.IsBeingDragged() ? ____exitRadius : ____radius;

            if (____occupyingOrb == null && orbDistance < ____radius)
            {
                ____occupyingOrb = orb;
                if (Time.timeSinceLevelLoad > 1f)
                {
                    QSBWorldSync.HandleSlotStateChange(__instance, orb, true);
                    QSBWorldSync.RaiseEvent(__instance, "OnSlotActivated", __instance);
                }
                __result = true;
                return(false);
            }
            if (____occupyingOrb == null || ____occupyingOrb != orb)
            {
                __result = false;
                return(false);
            }
            if (orbDistance > triggerRadius)
            {
                QSBWorldSync.HandleSlotStateChange(__instance, orb, false);
                ____occupyingOrb = null;
                QSBWorldSync.RaiseEvent(__instance, "OnSlotDeactivated", __instance);
                __result = false;
                return(false);
            }
            __result = true;
            return(false);
        }