Пример #1
0
        //[ServerCallback]
        public void OnTriggerUsed(Character character, TriggerEventData eventData)
        {
            if (!PhotonNetwork.LocalPlayer.IsMasterClient)
            {
                return;
            }

            var bridge = character.GetComponent <PUN2ActionsBridge>();

            if (character is Player && bridge != null)
            {
                var inst  = ItemFactory.CreateInstance(itemDefinition, System.Guid.NewGuid());
                var added = bridge.inventoryPlayer.itemCollectionGroup.Add(inst, amount);
                if (added.error != null)
                {
                    // Something went wrong, remove item from registry to avoid cluttering it with un-used items.
                    ServerItemRegistry.UnRegister(inst.ID);
                    ItemRegistry.UnRegister(inst.ID);

                    // TODO: Notify client why pickup failed

                    DevdogLogger.LogError($"[PUN2][Interaction] PUN2ItemPickup.OnTriggerUsed: {added.error}", this);
                }
                else
                {
                    // Action went succesful, destroy pickup source
                    //NetworkServer.Destroy(gameObject);
                    //PhotonNetwork.Destroy(gameObject);
                    //GameObject.Destroy(gameObject);

                    bridge.photonView.RPC(nameof(bridge.Cmd_RequestUnUseTrigger), PhotonNetwork.MasterClient, this.photonView.ViewID);
                    PhotonNetwork.Destroy(gameObject);
                }
            }
        }
Пример #2
0
        public void OnTriggerUsed(Character character, TriggerEventData data)
        {
            var vendor = VendorRegistry.itemVendors.Get(_vendorGuid.guid) as UnityVendor <IItemInstance>;

            if (vendor != null)
            {
                var vendors = FindObjectsOfType <ItemVendorUI>();
                foreach (var vendorUI in vendors)
                {
                    if (vendorUI.collectionName == vendor.vendorCollectionName)
                    {
                        vendorUI.vendor     = vendor;
                        vendorUI.collection = vendor.vendorCollection;
                        vendorUI.window.Show();

                        _activeUI = vendorUI;

                        return;
                    }
                }

                new UnityLogger("[Vendor] ").Warning("Couldn't find VendorUI that repaints collection for vendor: " + vendor.vendorCollectionName);
                return;
            }

            new UnityLogger("[Vendor] ").Warning("Couldn't find VendorUI that repaints for vendor: " + _vendorGuid);
        }
Пример #3
0
        //        [ServerCallback]
        public void OnTriggerUsed(Character character, TriggerEventData data)
        {
            var bridge = character.GetComponent <PUN2ActionsBridge>();

            if (PhotonNetwork.LocalPlayer.IsMasterClient /*isServer*/)
            {
                var vendor = ServerVendorRegistry.itemVendors.Get(vendorGuid) as PUN2Vendor <IItemInstance>;

                if (character is Player && bridge != null && vendor != null)
                {
                    // Register collection on client
                    bridge.Server_AddVendorItemCollectionToClient(
                        /*vendorGuid: */ this.vendorGuid,
                        /*collectionName: */ vendor.vendorCollectionName,
                        /*collectionGuid: */ vendor.vendorCollectionGuid,
                        /*slotCount*/ (ushort)vendor.vendorCollection.slotCount
                        );

                    // Give the client read permission to the vendor's items.
                    // TODO: Consider putting this in a single call with registration (add collection call)
                    bridge.Server_SetCollectionPermissionOnServerAndClient(
                        /*collectionGuid: */ vendor.vendorCollectionGuid,
                        /*permission: */ ReadWritePermission.Read
                        );

                    bridge.Server_SetItemVendorCollectionContentsOnClient(vendor.vendorCollectionGuid, vendor.vendorCollection);
                }

                // Send back an RPC to the client that it can show its UI
                bridge.photonView.RPC(nameof(bridge.TargetRPC_ShowItemVendorUI), bridge.photonView.Owner, this.vendorGuid.ToByteArray());
            }
        }
        private async Task HandleMessageAsync(string message)
        {
            this.m_logger.LogInformation("Trigger messages received.");

            var sw       = Stopwatch.StartNew();
            var messages = this.Decompress(message).ToList();

            this.m_messageCounter.Inc(messages.Count);

            try {
                var results = await Task.WhenAll(messages.Select(this.HandleMeasurement));

                var data = new TriggerEventData();

                foreach (var triggerLists in results)
                {
                    foreach (var triggerEvents in triggerLists)
                    {
                        data.Events.AddRange(triggerEvents);
                    }
                }

                if (data.Events.Count > 0)
                {
                    await this.PublishAsync(data).ConfigureAwait(false);
                }
            } catch (Exception ex) {
                this.m_logger.LogError(ex, "Unable to handle a trigger.");
            }

            sw.Stop();
            this.m_logger.LogInformation("Messages handled. Processing took {duration:c}.", sw.Elapsed);
        }
Пример #5
0
        //[ServerCallback]
        public void OnTriggerUsed(Character character, TriggerEventData eventData)
        {
            if (!PhotonNetwork.LocalPlayer.IsMasterClient)
            {
                return;
            }

            var bridge = character.GetComponent <PUN2ActionsBridge>();

            if (character is Player && bridge != null)
            {
                var added = bridge.inventoryPlayer.itemCollectionGroup.Add(itemInstance, amount);
                if (added.error != null)
                {
                    // TODO: Notify client why pickup failed
                    DevdogLogger.LogError($"[PUN2][Interaction] PUN2ItemInstancePickup.OnTriggerUsed: {added.error}", this);
                }
                else
                {
                    // Action went succesful, destroy pickup source
                    //NetworkServer.Destroy(gameObject);
                    //PhotonNetwork.Destroy(gameObject);
                    //GameObject.Destroy(gameObject);

                    bridge.photonView.RPC(nameof(bridge.Cmd_RequestUnUseTrigger), PhotonNetwork.MasterClient, this.photonView.ViewID);
                    PhotonNetwork.Destroy(gameObject);
                }
            }
        }
 public void OnTriggerUnUsed(Character character, TriggerEventData data)
 {
     if (_activeUI != null)
     {
         _activeUI.window.Hide();
     }
 }
Пример #7
0
        /// <summary>
        /// Only the first active and enabled component gets the callbacks. In order for the next component to receive the callbacks the first one has to be disabled or removed.
        /// </summary>
        public virtual void NotifyTriggerUnUsed(Character character)
        {
            var data = new TriggerEventData();

            foreach (var callback in GetCallbacks())
            {
                callback.OnTriggerUnUsed(character, data);
                if (data.used)
                {
                    break;
                }
            }
        }
Пример #8
0
        public void OnTriggerUsed(Character character, TriggerEventData data)
        {
            if (!PhotonNetwork.LocalPlayer.IsMasterClient)
            {
                return;
            }

            var bridge = character.GetComponent <PUN2ActionsBridge>();

            if (character is Player && bridge != null)
            {
                var col = GetCollection(bridge);
                if (col != null)
                {
                    // NOTE: If the player isn't the owner of the collection we need to make sure it gets registered on the client.
                    // NOTE: If the player IS the owner of the collection it should always be managed by the player, and should be registered on the client at all times.
                    if (bridge.photonView != col.owner)
                    {
                        // Make sure the collection exists both on the server and client.
                        bridge.Server_AddCollectionToServerAndClient(
                            collectionName: _collectionName,
                            collectionGuid: col.ID,
                            slotCount: col.slotCount
                            );
                    }

                    var itemsArray = new ItemAmountMessage[col.slotCount];
                    for (int i = 0; i < itemsArray.Length; i++)
                    {
                        itemsArray[i] = new ItemAmountMessage()
                        {
                            itemInstance = new RegisterItemInstanceMessage(col[i]),
                            amount       = (ushort)col.GetAmount(i)
                        };
                    }

                    bridge.Server_SetCollectionContentsOnClient(
                        collectionName: _collectionName,
                        collectionGuid: col.ID,
                        items: itemsArray
                        );

                    bridge.Server_SetCollectionPermissionOnServerAndClient(
                        collectionGuid: col.ID,
                        permission: _permissionOnUse
                        );

                    bridge.photonView.RPC(nameof(bridge.TargetRPC_ShowItemCollectionUI), bridge.photonView.Owner, this._collectionName, col.ID.ToByteArray());
                }
            }
        }
Пример #9
0
//        [ServerCallback]
        public void OnTriggerUsed(Character character, TriggerEventData data)
        {
            if (isServer)
            {
                var vendor = ServerVendorRegistry.itemVendors.Get(vendorGuid) as UNetVendor <IItemInstance>;
                var bridge = character.GetComponent <UNetActionsBridge>();
                if (character is Player && bridge != null && vendor != null)
                {
                    // Register collection on client
                    bridge.Server_AddVendorItemCollectionToClient(new AddCollectionMessage()
                    {
                        collectionGuid = vendor.vendorCollectionGuid,
                        collectionName = vendor.vendorCollectionName,
                        owner          = _identity,
                        slotCount      = 10,
                    });

                    // Give the client read permission to the vendor's items.
                    // TODO: Consider putting this in a single call with registration (add collection call)
                    bridge.Server_SetCollectionPermissionOnServerAndClient(new SetCollectionPermissionMessage()
                    {
                        collectionGuid = vendor.vendorCollectionGuid,
                        permission     = ReadWritePermission.Read
                    });

                    bridge.Server_SetItemVendorCollectionContentsOnClient(vendor.vendorGuid, vendor.vendorCollectionGuid, vendor.vendorCollection);
                }
            }

            if (isClient && character == PlayerManager.currentPlayer)
            {
                var vendor  = VendorRegistry.itemVendors.Get(vendorGuid) as UNetVendor <IItemInstance>;
                var vendors = FindObjectsOfType <ItemVendorUI>();
                foreach (var vendorUI in vendors)
                {
                    if (vendorUI.collectionName == _vendorCollectionName)
                    {
                        vendorUI.vendor     = vendor;
                        vendorUI.collection = vendor?.vendorCollection;
                        vendorUI.window.Show();

                        _currentVendorUI = vendorUI;
                        return;
                    }
                }

                new UnityLogger("[Vendor] ").Warning("Couldn't find VendorUI that repaints collection " + vendor?.vendorCollectionName);
            }
        }
Пример #10
0
        public void OnTriggerUnUsed(Character character, TriggerEventData data)
        {
            var bridge = character.GetComponent <UNetActionsBridge>();

            if (character is Player && bridge != null)
            {
                var col = GetCollection(bridge);
                Assert.IsNotNull(col, "Collection not found on object or player!");
                bridge.Server_SetCollectionPermissionOnServerAndClient(new SetCollectionPermissionMessage()
                {
                    collectionGuid = col.ID,
                    permission     = _permissionOnUnUse
                });
            }
        }
Пример #11
0
        /// <summary>
        /// Only the first active and enabled component gets the callbacks. In order for the next component to receive the callbacks the first one has to be disabled or removed.
        /// </summary>
        public virtual void NotifyTriggerUnUsed(Character character)
        {
            _usingCharacters.Remove(character);
            character.currentTrigger = null;
            var data = new TriggerEventData();

            foreach (var callback in GetCallbacks())
            {
                callback.OnTriggerUnUsed(character, data);
                if (data.used)
                {
                    break;
                }
            }
        }
Пример #12
0
        public void OnTriggerUsed(Character character, TriggerEventData data)
        {
            var bridge = character.GetComponent <UNetActionsBridge>();

            if (character is Player && bridge != null)
            {
                var col = GetCollection(bridge);
                if (col != null)
                {
                    // NOTE: If the player isn't the owner of the collection we need to make sure it gets registered on the client.
                    // NOTE: If the player IS the owner of the collection it should always be managed by the player, and should be registered on the client at all times.
                    if (bridge.identity != col.owner)
                    {
                        // Make sure the collection exists both on the server and client.
                        bridge.Server_AddCollectionToServerAndClient(new AddCollectionMessage()
                        {
                            collectionName = _collectionName,
                            collectionGuid = col.ID,
                            owner          = col.owner,
                            slotCount      = (ushort)col.slotCount,
                        });
                    }

                    var itemsArray = new ItemAmountMessage[col.slotCount];
                    for (int i = 0; i < itemsArray.Length; i++)
                    {
                        itemsArray[i] = new ItemAmountMessage()
                        {
                            itemInstance = new RegisterItemInstanceMessage(col[i]),
                            amount       = (ushort)col.GetAmount(i)
                        };
                    }

                    bridge.Server_SetCollectionContentsOnClient(new SetCollectionContentsMessage()
                    {
                        collectionName = _collectionName,
                        collectionGuid = col.ID,
                        items          = itemsArray,
                    });

                    bridge.Server_SetCollectionPermissionOnServerAndClient(new SetCollectionPermissionMessage()
                    {
                        collectionGuid = col.ID,
                        permission     = _permissionOnUse
                    });
                }
            }
        }
Пример #13
0
    public void Initialize(ScenarioController controller)
    {
        _sceneController = controller;
        _moving          = false;

        var footData = new TriggerEventData
        {
            TriggerEnterAction = null,
            TriggerExitAction  = null,
        };

        _footColliderLogic.Initialize(footData);

        _rigidbody2D           = GetComponent <Rigidbody2D>();
        _rigidbody2D.simulated = false;
        _animator.SetBool(_deathAnimKey, false);
    }
Пример #14
0
        public void OnTriggerUsed(Character character, TriggerEventData eventData)
        {
            var currencyOwner = character.GetComponent <ICurrencyCollectionOwner>();

            if (character is Player && currencyOwner != null)
            {
                var added = currencyOwner.currencyCollectionGroup.Add(currency.currency, currency.amount);
                if (added.error != null)
                {
                }
                else
                {
                    // Action went succesful, destroy pickup source
                    Destroy(gameObject);
                }
            }
        }
        public void OnTriggerUsed(Character character, TriggerEventData eventData)
        {
            var inventoryOwner = character.GetComponent <IInventoryCollectionOwner>();

            if (character is Player && inventoryOwner != null)
            {
                var added = inventoryOwner.itemCollectionGroup.Add(itemInstance, amount);
                if (added.error != null)
                {
                    // TODO: Notify why pickup failed
                }
                else
                {
                    // Action went succesful, destroy pickup source
                    Destroy(gameObject);
                }
            }
        }
Пример #16
0
        public void OnTriggerUsed(Character character, TriggerEventData eventData)
        {
            var bridge = character.GetComponent <UNetActionsBridge>();

            if (character is Player && bridge != null)
            {
                var added = bridge.inventoryPlayer.itemCollectionGroup.Add(itemInstance, amount);
                if (added.error != null)
                {
                    // TODO: Notify client why pickup failed
                }
                else
                {
                    // Action went succesful, destroy pickup source
                    NetworkServer.Destroy(gameObject);
                }
            }
        }
Пример #17
0
        public void OnTriggerUsed(Character character, TriggerEventData eventData)
        {
            var bridge = character.GetComponent <UNetActionsBridge>();

            if (character is Player && bridge != null)
            {
                var added = bridge.inventoryPlayer.currencyCollectionGroup.Add(currency.currency, currency.amount);
                if (added.error == null)
                {
                    // Action went succesful, destroy pickup source
                    NetworkServer.Destroy(gameObject);
                }
                else
                {
                    // Something went wrong, remove item from registry to avoid cluttering it with un-used items.
                    // TODO: Notify client why pickup failed
                }
            }
        }
Пример #18
0
        public void OnTriggerUsed(Character character, TriggerEventData eventData)
        {
            var inventoryOwner = character.GetComponent <IInventoryCollectionOwner>();

            if (character is Player && inventoryOwner != null)
            {
                var inst  = ItemFactory.CreateInstance(itemDefinition, System.Guid.NewGuid());
                var added = inventoryOwner.itemCollectionGroup.Add(inst, amount);
                if (added.error != null)
                {
                    // TODO: Notify why pickup failed
                    ItemRegistry.UnRegister(inst.ID);
                }
                else
                {
                    // Action went succesful, destroy pickup source
                    Destroy(gameObject);
                }
            }
        }
Пример #19
0
        //        [ServerCallback]
        public void OnTriggerUnUsed(Character character, TriggerEventData data)
        {
            if (PhotonNetwork.LocalPlayer.IsMasterClient /*isServer*/)
            {
                var vendor = ServerVendorRegistry.itemVendors.Get(vendorGuid) as PUN2Vendor <IItemInstance>;
                var bridge = character.GetComponent <PUN2ActionsBridge>();
                if (character is Player && bridge != null && vendor != null)
                {
                    // Revoke the client's read access on the vendor's collection
                    bridge.Server_SetCollectionPermissionOnServerAndClient(
                        /*collectionGuid: */ vendor.vendorCollectionGuid,
                        /*permission: */ ReadWritePermission.None
                        );
                }
            }

            if (/*!PhotonNetwork.LocalPlayer.IsMasterClient*/ /*isClient*/ character == PlayerManager.currentPlayer)
            {
                _currentVendorUI?.window.Hide();
            }
        }
Пример #20
0
//        [ServerCallback]
        public void OnTriggerUnUsed(Character character, TriggerEventData data)
        {
            if (isServer)
            {
                var vendor = ServerVendorRegistry.itemVendors.Get(vendorGuid) as UNetVendor <IItemInstance>;
                var bridge = character.GetComponent <UNetActionsBridge>();
                if (character is Player && bridge != null && vendor != null)
                {
                    // Revoke the client's read access on the vendor's collection
                    bridge.Server_SetCollectionPermissionOnServerAndClient(new SetCollectionPermissionMessage()
                    {
                        collectionGuid = vendor.vendorCollectionGuid,
                        permission     = ReadWritePermission.None
                    });
                }
            }

            if (isClient && character == PlayerManager.currentPlayer)
            {
                _currentVendorUI?.window.Hide();
            }
        }
Пример #21
0
        public void OnTriggerUnUsed(Character character, TriggerEventData data)
        {
            if (PhotonNetwork.LocalPlayer.IsMasterClient)
            {
                var bridge = character.GetComponent <PUN2ActionsBridge>();
                if (character is Player && bridge != null)
                {
                    var col = GetCollection(bridge);

                    Assert.IsNotNull(col, "Collection not found on object or player!");

                    bridge.Server_SetCollectionPermissionOnServerAndClient(
                        collectionGuid: col.ID,
                        permission: _permissionOnUnUse
                        );
                }
            }
            else if (character == PlayerManager.currentPlayer)
            {
                _currentItemCollectionUI?.window.Hide();
            }
        }
Пример #22
0
        public void OnTriggerUsed(Character character, TriggerEventData eventData)
        {
            var bridge = character.GetComponent <UNetActionsBridge>();

            if (character is Player && bridge != null)
            {
                var inst  = ItemFactory.CreateInstance(itemDefinition, System.Guid.NewGuid());
                var added = bridge.inventoryPlayer.itemCollectionGroup.Add(inst, amount);
                if (added.error != null)
                {
                    // Something went wrong, remove item from registry to avoid cluttering it with un-used items.
                    ServerItemRegistry.UnRegister(inst.ID);
                    ItemRegistry.UnRegister(inst.ID);

                    // TODO: Notify client why pickup failed
                }
                else
                {
                    // Action went succesful, destroy pickup source
                    NetworkServer.Destroy(gameObject);
                }
            }
        }
        private async Task HandleMessageAsync(string message)
        {
            this.logger.LogDebug("Measurement received.");

            var measurements = this.Decompress(message).ToList();

            this.m_measurementCounter.Inc(measurements.Count);
            var tasks   = measurements.Select(this.HandleMeasurement).ToList();
            var results = await Task.WhenAll(tasks).ConfigureAwait(false);

            var data = new TriggerEventData();

            foreach (var triggerLists in results)
            {
                foreach (var triggerEvents in triggerLists)
                {
                    data.Events.AddRange(triggerEvents);
                }
            }

            await this.PublishAsync(data).ConfigureAwait(false);

            this.logger.LogDebug("Measurement handled.");
        }
        public void OnTriggerUsed(Character character, TriggerEventData data)
        {
            var uis = FindObjectsOfType <ItemCollectionUI>();
            var col = CollectionRegistry.byID.Get(_guid.guid) as ICollection <IItemInstance>;

            if (col != null)
            {
                foreach (var ui in uis)
                {
                    if (ui.collectionName == col.ToString())
                    {
                        _activeUI = ui;

                        _activeUI.collection = col;
                        _activeUI.window.Show();
                        return;
                    }
                }

                new UnityLogger("[Collection] ").Warning("Couldn't find ItemCollectionUI that repaints collection for collection with name: " + col.ToString());
            }

            new UnityLogger("[Collection] ").Warning("Couldn't find ItemCollectionUI that repaints collection for collection: " + _guid.guid);
        }
Пример #25
0
 public void OnTriggerUnUsed(Character character, TriggerEventData eventData)
 {
     UndoVisuals();
 }
Пример #26
0
 public void OnTriggerUnUsed(Character character, TriggerEventData eventData)
 {
     // Item pickup can't be un-used.
 }
Пример #27
0
 public void Initialize(TriggerEventData data)
 {
     _data        = data;
     _collider    = GetComponent <Collider2D>();
     _initialized = true;
 }