Exemplo n.º 1
0
    IEnumerator writeData(OffsetData[] toSend, ReferenceContainer <float> progress, Action onEnd)
    {
        for (int i = 0; i < toSend.Length; ++i)
        {
            var chunk = toSend[i];
            MapParent.CurrentConnection.WriteBytes(chunk.ToSend, chunk.Offset);
            MapParent.CurrentConnection.WriteBytes(chunk.ToSend, chunk.Offset + (uint)OffsetHelper.BackupSaveDiff);
            float currentProgress = (i + 1) / (float)toSend.Length;
            progress.UpdateValue(currentProgress);
            yield return(null);
        }


        onEnd?.Invoke();
        yield return(null);

        progress.UpdateValue(1.01f);
        UI_ACItemGrid.LastInstanceOfItemGrid.PlayHappyParticles();
    }
Exemplo n.º 2
0
    private System.Collections.IEnumerator createPinger(string ip, float timeout)
    {
#if !UNITY_WEBGL
        if (ip != myip)
        {
            UnityEngine.Ping ping  = new UnityEngine.Ping(ip);
            float            timer = 0;
            while (!ping.isDone && timer < timeout)
            {
                timer += Time.deltaTime;
                yield return(null);
            }
            if (ping.time != -1)
            {
                upCount++;
                string mac = null;
#if UNITY_STANDALONE_WIN || UNITY_EDITOR_WIN
                mac = getMacByIp(ip);
#elif UNITY_ANDROID
                mac = AndroidUSBUtils.CurrentInstance.GetMacAddressQ(ip);
#endif
                string addit = "Unknown";
                if (idents != null && mac != null)
                {
                    string macLookup = getFirst3MacValues(mac.ToUpper());
                    if (hexToManufacturerHash.ContainsKey(macLookup))
                    {
                        addit = hexToManufacturerHash[macLookup];
                    }
                    if (addit.StartsWith("Nintendo", StringComparison.OrdinalIgnoreCase))
                    {
                        addit = "<color=red>" + addit + "</color>";
                    }
                    activeIP.Add(string.Format("IP: {0} Mfr: {1}", ip, addit));
                }
                else
                {
                    activeIP.Add(string.Format("IP: {0}", ip));
                }
            }
            ping.DestroyPing();
        }
        else
        {
            activeIP.Add(string.Format("IP: {0} (This device)", ip));
        }

        pingCount++;
        percentageDone.UpdateValue(pingCount / 255f);
#else
        yield return(null);
#endif
    }
Exemplo n.º 3
0
    IEnumerator functionTiles(Func <Item, bool> processItem, ReferenceContainer <float> progress)
    {
        int maxtransferSizeRemainder = CurrentConnection.MaximumTransferSize % Item.SIZE;
        int maxtransferSize          = CurrentConnection.MaximumTransferSize - maxtransferSizeRemainder;

        uint fieldItemsStart1 = CurrentMapAddress;
        uint fieldItemsStart2 = CurrentMapAddress + FieldItemLayerSize;
        uint itemsPerFrame    = (uint)maxtransferSize / Item.SIZE;
        uint lastTileIndex    = 0;

        int byteCheckCount  = 0;
        int yieldCheckCount = 0;

        while (lastTileIndex < MapGrid.MapTileCount32x32)
        {
            int    thisFrameL1Proc = 0;
            int    thisFrameL2Proc = 0;
            int    bytesToCheck    = (int)Math.Min((int)itemsPerFrame * Item.SIZE, FieldItemLayerSize - (lastTileIndex * Item.SIZE));
            byte[] bytesLayer1     = CurrentConnection.ReadBytes(fieldItemsStart1 + (lastTileIndex * Item.SIZE), bytesToCheck);
            byte[] bytesLayer2     = CurrentConnection.ReadBytes(fieldItemsStart2 + (lastTileIndex * Item.SIZE), bytesToCheck);
            Item[] itemLayer1      = Item.GetArray(bytesLayer1);
            Item[] itemLayer2      = Item.GetArray(bytesLayer2);
            foreach (Item i in itemLayer1)
            {
                if (processItem(i))
                {
                    thisFrameL1Proc++;
                }
            }
            foreach (Item i in itemLayer2)
            {
                if (processItem(i))
                {
                    thisFrameL2Proc++;
                }
            }
            if (thisFrameL1Proc > 0)
            {
                byte[] nl1 = itemLayer1.SetArray(Item.SIZE);
                CurrentConnection.WriteBytes(nl1, fieldItemsStart1 + (lastTileIndex * Item.SIZE));
            }
            if (thisFrameL2Proc > 0)
            {
                byte[] nl2 = itemLayer2.SetArray(Item.SIZE);
                CurrentConnection.WriteBytes(nl2, fieldItemsStart2 + (lastTileIndex * Item.SIZE));
            }
            byteCheckCount += bytesToCheck;
            //Debug.Log(string.Format("Currently read byte {0}/{1}.", byteCheckCount, FieldItemLayerSize));
            lastTileIndex += itemsPerFrame;
            yieldCheckCount++;

            if (yieldCheckCount % YieldCount == 0)
            {
                float progressNow = (float)byteCheckCount / FieldItemLayerSize;
                progress.UpdateValue(progressNow);
                yield return(null);
            }
        }

        progress.UpdateValue(0.99f);
        yield return(null);

        progress.UpdateValue(1.01f);
    }
Exemplo n.º 4
0
    IEnumerator functionTiles(Func <Item, bool> processItem, ReferenceContainer <float> progress, Func <Item, bool> processItemLayer2 = null, bool checkArrivals = false)
    {
        mapFunctionRunning = true;
        int maxtransferSizeRemainder = CurrentConnection.MaximumTransferSize % Item.SIZE;
        int maxtransferSize          = CurrentConnection.MaximumTransferSize - maxtransferSizeRemainder;

        uint fieldItemsStart1 = CurrentMapAddress;
        uint fieldItemsStart2 = CurrentMapAddress + FieldItemLayerSize;
        uint itemsPerFrame    = (uint)maxtransferSize / Item.SIZE;
        uint lastTileIndex    = 0;

        int byteCheckCount  = 0;
        int yieldCheckCount = 0;

        while (lastTileIndex < MapGrid.MapTileCount32x32)
        {
            int    thisFrameL1Proc = 0;
            int    thisFrameL2Proc = 0;
            int    bytesToCheck    = (int)Math.Min((int)itemsPerFrame * Item.SIZE, FieldItemLayerSize - (lastTileIndex * Item.SIZE));
            byte[] bytesLayer1     = CurrentConnection.ReadBytes(fieldItemsStart1 + (lastTileIndex * Item.SIZE), bytesToCheck);
            byte[] bytesLayer2     = Layer2Affect.isOn ? CurrentConnection.ReadBytes(fieldItemsStart2 + (lastTileIndex * Item.SIZE), bytesToCheck) : null;
            Item[] itemLayer1      = Item.GetArray(bytesLayer1);
            Item[] itemLayer2      = Layer2Affect.isOn ? Item.GetArray(bytesLayer2) : null;
            for (uint j = 0; j < itemLayer1.Length; ++j)
            {
                Item i = itemLayer1[j];
                indexOfItemBeingProcessed = lastTileIndex + j;
                if (processItem(i))
                {
                    thisFrameL1Proc++;
                }
            }
            if (Layer2Affect.isOn)
            {
                for (uint j = 0; j < itemLayer2.Length; ++j)
                {
                    Item i = itemLayer2[j];
                    indexOfItemBeingProcessed = lastTileIndex + j;
                    if (processItemLayer2 == null)
                    {
                        if (processItem(i))
                        {
                            thisFrameL2Proc++;
                        }
                    }
                    else
                    {
                        if (processItemLayer2(i))
                        {
                            thisFrameL2Proc++;
                        }
                    }
                }
            }
            // Check if someone is arriving
            if (checkArrivals)
            {
                if (IsSomeoneArriving(out string coming))
                {
                    CurrentLog.IncrementJoin(coming);
                    UI_Popup.CurrentInstance.UpdateText($"{coming} is arriving!\r\nThe auto-refresher is temporarily paused while their airplane animation occurs.");
                    yield return(new WaitForSeconds(74.5f));

                    SetLastComingVisitorName(string.Empty);
                    UI_Popup.CurrentInstance.ResetText();
                }
            }
            if (thisFrameL1Proc > 0)
            {
                byte[] nl1 = itemLayer1.SetArray(Item.SIZE);
                CurrentConnection.WriteBytes(nl1, fieldItemsStart1 + (lastTileIndex * Item.SIZE));
                CurrentConnection.WriteBytes(nl1, fieldItemsStart1 + (lastTileIndex * Item.SIZE) + (uint)OffsetHelper.BackupSaveDiff);
            }
            if (thisFrameL2Proc > 0 && Layer2Affect.isOn)
            {
                byte[] nl2 = itemLayer2.SetArray(Item.SIZE);
                CurrentConnection.WriteBytes(nl2, fieldItemsStart2 + (lastTileIndex * Item.SIZE));
                CurrentConnection.WriteBytes(nl2, fieldItemsStart2 + (lastTileIndex * Item.SIZE) + (uint)OffsetHelper.BackupSaveDiff);
            }
            byteCheckCount += bytesToCheck;
            //Debug.Log(string.Format("Currently read byte {0}/{1}.", byteCheckCount, FieldItemLayerSize));
            lastTileIndex += itemsPerFrame;
            yieldCheckCount++;

            if (yieldCheckCount % YieldCount == 0)
            {
                float progressNow = (float)byteCheckCount / FieldItemLayerSize;
                progress.UpdateValue(progressNow);
                yield return(null);
            }
        }

        progress.UpdateValue(0.99f);
        yield return(null);

        progress.UpdateValue(1.01f);
        mapFunctionRunning = false;
    }