示例#1
0
        private void Shoot(Message msg)
        {
            if (_shooted)
            {
                return;
            }

            _shooted = true;

            if (_weaponData.MagazineBulletAmount > 0)
            {
                --_weaponData.MagazineBulletAmount;

                //ToDo: replace to server
                var id = 1000 * _weaponData.OwnerNetId + BulletsFactory.GetNextBulletId();

                MessageBus.SendMessage(NetBroadcastMessage.Get(Network.API.Messages.CREATE_PROJECTILE, UnityEngine.Networking.QosType.Reliable, -1,
                                                               ProjectileMessageData.GetProjectileMessageData(
                                                                   id,
                                                                   _weaponData.OwnerNetId,
                                                                   _weaponData.ShootPosition.position,
                                                                   _weaponData.ShootPosition.rotation,
                                                                   _weaponData.WeaponConfig.bulletType,
                                                                   _weaponData.WeaponConfig.bulletStartSpeed,
                                                                   _weaponData.WeaponConfig.damageFactor)));

                MessageBus.SendMessage(SubscribeType.Channel, Channel.ChannelIds[SubscribeType.Channel],
                                       CommonMessage.Get(API.Messages.FIRING));
            }
            else
            {
                _weaponData.NoBulletsInMagazine();
            }
        }
示例#2
0
        private void Start()
        {
            var netId = Channel.ChannelIds[SubscribeType.Network];

            MessageBus.SendMessage(NetBroadcastMessage.Get(Network.API.Messages.CREATE_CHARACTER_REPLICANT, QosType.Reliable, netId,
                                                           IntData.GetIntData(netId)));
        }
        private void Start()
        {
            var netId = Channel.ChannelIds[SubscribeType.Network];

            MessageBus.SendMessage(NetBroadcastMessage.Get(Network.API.Messages.CREATE_AIM_TARGET_REPLICANT, QosType.Reliable, netId,
                                                           API.InstanceData.GetData("Replicant", netId, GetComponent <Data.AimTargetData>().CharacterNetId)));
        }
示例#4
0
        public void OnCollisionAction(ProjectileData projectile, Collision collision)
        {
            var damage = 2 * DamageFactor;

            _ownerCharacterData.HitPoints -= (int)damage;

            MessageBus.SendMessage(NetBroadcastMessage.Get(Network.API.Messages.DELETE_OBJECT, UnityEngine.Networking.QosType.Reliable,
                                                           projectile.GetComponent <Channel>().ChannelIds[SubscribeType.Network]));

            Destroy(projectile.gameObject);
        }
示例#5
0
        private void SendNetworkMovement()
        {
            timeBetweenMovementEnd = Time.time;

            MessageBus.SendMessage(NetBroadcastMessage.Get(
                                       Network.API.Messages.SYNC_TRANSFORM,
                                       UnityEngine.Networking.QosType.Unreliable, Channel.ChannelIds[SubscribeType.Network],
                                       SyncTransformTimedData.GetData(
                                           transform.position, timeBetweenMovementEnd - timeBetweenMovementStart)));

            canSendNetworkMovement = false;
        }
示例#6
0
        private void PickUpWeapon(Message msg)
        {
            bool hasEmpty  = false;
            var  data      = (Looting.LootItemData)msg.Data;
            var  PrevIndex = -1;

            if (_inventoryData.CurSelectedWeaponIndex == -1)
            {
                curWeaopnSlotIndex = 0;
            }
            else
            {
                curWeaopnSlotIndex = _inventoryData.CurSelectedWeaponIndex;
                PrevIndex          = curWeaopnSlotIndex;

                for (int i = 0; i < _inventoryData.WeaponItemHolders.Length; ++i)
                {
                    if (_inventoryData.WeaponItemHolders[i].WeaponObject != null)
                    {
                        continue;
                    }

                    hasEmpty           = true;
                    curWeaopnSlotIndex = i;
                }

                if (!hasEmpty)
                {
                    //ToDo: drop current weapon
                    MessageBus.SendMessage(NetServerMessage.Get(Network.API.Messages.DROP_LOOT_ITEM, UnityEngine.Networking.QosType.Reliable,
                                                                -1, Looting.InstanceLootItemData.GetData(transform.position, Looting.API.LootType.WEAPONS, 1,
                                                                                                         new int[1] {
                        (int)_inventoryData.WeaponItemHolders[PrevIndex].WeaponObject.
                        GetComponent <Weapons.Data.WeaponData>().WeaponConfig.weaponName
                    }, -1)));
                    Destroy(_inventoryData.WeaponItemHolders[PrevIndex].WeaponObject);
                    Destroy(_inventoryData.WeaponItemHolders[PrevIndex].AimTargetObject);
                }
                else
                {
                    _inventoryData.WeaponItemHolders[PrevIndex].WeaponObject.SetActive(false);
                }
            }

            MessageBus.SendMessage(NetBroadcastMessage.Get(Network.API.Messages.CREATE_WEAPON, UnityEngine.Networking.QosType.Reliable,
                                                           Channel.ChannelIds[SubscribeType.Network], WeaponInstantiateData.GetWeaponInstantiateData((WeaponType)data.Params[0], null,
                                                                                                                                                     Channel.ChannelIds[SubscribeType.Channel], -1, true)));
        }
示例#7
0
        private void SpawnItem(Transform parent, Vector3 pos, Looting.API.LootType type, int amount, int[] prms)
        {
            ServiceLocator.GetService <ResourceLoader>().InstantiatePrefabByPathName("Loot/LootItem", go =>
            {
                go.transform.SetParent(parent);
                go.transform.position = pos;

                var curLootData      = go.GetComponent <LootData>();
                curLootData.LootType = type;

                curLootData.Amount = amount;

                curLootData.Params = prms;

                var netId = Server.GetNetId();
                var sub   = go.GetComponent <SubscriberBehaviour>();
                sub.Channel.ChannelIds.Add(SubscribeType.Network, netId);
                sub.ReSubscribe();

                MessageBus.SendMessage(NetBroadcastMessage.Get(Network.API.Messages.CREATE_LOOT_ITEM, UnityEngine.Networking.QosType.Reliable, -1,
                                                               InstanceLootItemData.GetData(pos, curLootData.LootType,
                                                                                            curLootData.Amount, curLootData.Params, netId)));
            });
        }