private void PlayerExtractRequest()
    {
        Player player    = WorldScript.mLocalPlayer;
        int    lensCount = 0;

        if (player == null)
        {
            return;
        }

        if (mStoredLenses != null)
        {
            lensCount = mStoredLenses.GetAmount();
        }
        if (lensCount > 0)
        {
            Debug.Log("[Auto Lens Swapper] Removing " + lensCount + " lenses from machine, placing into " + player.mUserName);
            if (!player.mInventory.AddItem(mStoredLenses))
            {
                ItemManager.instance.DropItem(mStoredLenses, player.mnWorldX, player.mnWorldY, player.mnWorldZ, Vector3.zero);
                Debug.Log("[Auto Lens Swapper] Player's inventory did not accept lenses. Dropping at player's feet.");
            }
        }
        mStoredLenses = null;
        mTargetLens   = null;

        if (mStatus == eStatuses.Running)
        {
            mbHaltedEarly = true;
            mStatus       = eStatuses.Done;
        }
        else if (mStatus == eStatuses.Done)
        {
            mnTrackLPTs      = 0;
            mnTrackSwaps     = 0;
            mnSegmentEIndex1 = 0;
            mnSegmentEIndex2 = 0;
            mnSegmentID      = 0;
            mbHaltedEarly    = false;
            mStatus          = eStatuses.Stopped;
        }


        MarkDirtyDelayed();
        RequestImmediateNetworkUpdate();
        player.mInventory.VerifySuitUpgrades(); //Shouldn't be needed, but lets be safe.
        SurvivalHotBarManager.MarkAsDirty();
        SurvivalHotBarManager.MarkContentDirty();
        UIManager.ForceNGUIUpdate = 0.1f;
        RequestImmediateNetworkUpdate();
        AudioHUDManager.instance.OrePickup();
    }
    public override void ReadNetworkUpdate(BinaryReader reader)
    {
        mrCurrentPower = NetworkServerIO.ByteToFloat(reader.ReadByte());
        mTargetLens    = ItemFile.DeserialiseItem(reader);
        mStoredLenses  = ItemFile.DeserialiseItem(reader);

        mIssue        = (eIssues)reader.ReadByte();
        mStatus       = (eStatuses)reader.ReadByte();
        mbHaltedEarly = reader.ReadBoolean();
        mbOnlySwap    = reader.ReadBoolean();
        mbTrashOld    = reader.ReadBoolean();
        mnTrackLPTs   = reader.ReadInt16();
        mnTrackSwaps  = reader.ReadInt16();
    }
    //Run, the main swapping function.
    //This function loops through all of the game segments, using small sprints.
    //Sprints will either end from passing through too many segments, or making too many changes, or encountering an issue.
    private void run()
    {
        if (mIssue != eIssues.Ready)
        {
            return;
        }
        if (mStatus != eStatuses.Running)
        {
            return;
        }

        int sprintSegment      = 0;
        int swapsAtSprintStart = mnTrackSwaps;
        int segmentCount       = WorldScript.instance.mSegmentUpdater.updateList.Count;

        //Limited sprint, to prevent eating CPU time.
        for (sprintSegment = 0; sprintSegment < 256 && mnSegmentID < segmentCount; ++sprintSegment)
        {
            runLoopSegEntities(mnSegmentID);
            if (mIssue != eIssues.Ready)
            {
                break;
            }
            ++mnSegmentID;
            //limit how many changes we can do in a LFUT-tick.
            //I suspect this will be more limiting than 256
            if (mnTrackSwaps - swapsAtSprintStart > 4)
            {
                break;
            }
        }

        if (mnSegmentID >= segmentCount)
        {
            Debug.LogWarning("[Auto Lens Swapper][info] Completed a pass!");
            mStatus       = eStatuses.Done;
            mbHaltedEarly = false;
            RequestImmediateNetworkUpdate();
            return;
        }

        //MarkDirtyDelayed();
        return;
    }
    public ALS_MachineEntity(ModCreateSegmentEntityParameters parameters)
        : base(parameters)
    {
        mbNeedsLowFrequencyUpdate = true;
        mbNeedsUnityUpdate        = true;
        mUpdates = 0;

        mStatus       = eStatuses.Stopped;
        mIssue        = eIssues.Power;
        mbHaltedEarly = false;
        mbOnlySwap    = false;
        mbTrashOld    = false;

        mnSegmentID      = 0;
        mnSegmentEIndex1 = 0;
        mnSegmentEIndex2 = 0;

        mnTrackLPTs  = 0;
        mnTrackSwaps = 0;

        mrCurrentPower = 0;

        //maAttachedHoppers = new List<StorageMachineInterface>();
    }
    public override string GetPopupText()
    {
        int segmentCount = WorldScript.instance.mSegmentUpdater.updateList.Count;
        //Header
        string retText = "Auto Lens Swapper";

        retText += "   Power: " + Mathf.Round(mrCurrentPower).ToString() + " / " + Mathf.Round(mrMaxPower).ToString();
        retText += "\neStatus: " + mStatus.ToString();
        retText += "   eIssue: " + mIssue.ToString();
        if (mTargetLens != null)
        {
            retText += "\nNew lens: " + mTargetLens.GetDisplayString();
            retText += "   Stored: " + (mnStorageMax - getStorageAvailable()).ToString() + " / " + mnStorageMax.ToString();
        }
        else
        {
            retText += "\nNew lens: null - Press T to insert & set!";
        }
        retText += "\n------";
        //Body
        switch (mStatus)
        {
        case eStatuses.Stopped:

            if (mIssue != eIssues.Ready)
            {
                retText += GetIssueText(mIssue);
            }
            else
            {
                /*
                 * if (mbOnlySwap) retText += "\nMode: swap only (Shift + T)";
                 * else retText += "\nMode: swap & insert (Shift + T)";
                 * if (mbTrashOld) retText += "\nOld lenses: destroy (Shift + Q)";
                 * else retText += "\nOld lenses: output to adjacent machine (Shift + Q)";
                 */
                retText += "\n\nPress E to start running!";
                retText += "\nPress Q to remove lenses and reset machine at any time.";
                // ^^^ replace with dynamic text for "E"

                /*
                 * if (Input.GetButtonDown("Store") && Input.GetKeyDown(KeyCode.LeftShift))// && UIManager.AllowInteracting)
                 *  mbOnlySwap = !mbOnlySwap;
                 * else if (Input.GetButtonDown("Extract") && Input.GetKeyDown(KeyCode.LeftShift))// && UIManager.AllowInteracting)
                 *  mbTrashOld = !mbTrashOld;
                 */
                if (Input.GetButtonDown("Interact") && !Input.GetKeyDown(KeyCode.LeftShift))    // && UIManager.AllowInteracting)
                {
                    mStatus = eStatuses.Running;
                }
            }
            break;

        case eStatuses.Running:
            //power, stored lenses, percent_progress, ID, and max
            if (mIssue != eIssues.Ready)
            {
                retText += GetIssueText(mIssue);
            }
            else
            {
                retText += "\nSegment: " + mnSegmentID.ToString() + " / " + segmentCount.ToString() + " (" + (Mathf.Round((float)mnSegmentID / (float)segmentCount * 100f)).ToString() + "%)";
                retText += "\nLPTs checked: " + mnTrackLPTs.ToString();
                retText += "\nLens swaps: " + mnTrackSwaps.ToString();
            }
            retText += "\nPress Q to remove lenses and reset machine.";
            break;

        case eStatuses.Done:
            //finished running over ID segments, swapping index? lenses
            if (mbHaltedEarly)
            {
                retText += "\nHalted early!";
            }
            else
            {
                retText += "\nComplete!";
            }
            retText += "   Segments checked: " + mnSegmentID.ToString();
            retText += "   LPTs checked: " + mnTrackLPTs.ToString();
            retText += "   Lens swaps: " + mnTrackSwaps.ToString();
            retText += "\nPress Q to start over!";
            // ^^^ replace with dynamic text for "Q"
            break;


        default:
            break;
        }

        if (Input.GetButtonDown("Extract") && !Input.GetKey(KeyCode.LeftShift) && UIManager.AllowInteracting)
        {
            PlayerExtractRequest();
        }
        if (Input.GetButtonDown("Store") && !Input.GetKey(KeyCode.LeftShift) && UIManager.AllowInteracting)
        {
            PlayerStoreRequest();
        }

        return(retText);
    }
Exemplo n.º 6
0
 public PageStatusChangeArgs(eStatuses status)
 {
     Status = status;
 }