Beispiel #1
0
        private void SyncRangeAttack(Vector3 attackDirection, string weaponName, string playerName)
        {
            if (photonView.owner.NickName != playerName)
            {
                return;
            }

            var rangeWeaponData = ItemDataCollection.Instance.ItemDataByName[weaponName] as RangeWeaponData;
            var requireAmmoData = rangeWeaponData.RequireAmmo;

            if (requireAmmoData == null)
            {
                Debug.LogWarning($"탄약이 필요하지 않는 무기는 구현하지 않음, {rangeWeaponData.ItemName}");
                return;
            }

            // 쿨다운 검사
            //if (lastAttackTime + rangeWeaponData.AttackCooldown > Time.time)
            //{
            //    return;
            //}

            // 필요한 탄약이 있는지 검사
            //int ammoSlot = ItemContainer.FindMatchItemSlotFromLast(rangeWeaponData.RequireAmmo.ItemName);
            //if (ammoSlot < 0)
            //{
            //    return;
            //}
            //ItemContainer.SubtrackItemAtSlot(ammoSlot);

            // Projectile 설정
            var projectileBase = ObjectPoolManager.Instance.ReuseObject(projectileBasePrefab.gameObject).GetComponent <ProjectileBase>();
            var projectileInfo = new ProjectileBase.ProjectileInfo(attackDirection, requireAmmoData.ProjectileSpeed, rangeWeaponData.AttackRange / requireAmmoData.ProjectileSpeed,
                                                                   requireAmmoData.ColliderRadius, rangeWeaponData.Damage, rangeWeaponData.DamageType, rangeWeaponData.KnockbackPower);

            projectileBase.InitializeProjectile(projectileInfo, projectileFirePosition.position);

            projectileBase.Fire();
        }
Beispiel #2
0
        private void RangeAttack(Vector3 attackDirection)
        {
            var rangeWeaponData = EquipedPrimaryWeapon.Data as RangeWeaponData;
            var requireAmmoData = rangeWeaponData.RequireAmmo;

            if (requireAmmoData == null)
            {
                Debug.LogWarning($"탄약이 필요하지 않는 무기는 구현하지 않음, {rangeWeaponData.ItemName}");
                return;
            }

            // 쿨다운 검사
            if (lastAttackTime + rangeWeaponData.AttackCooldown > Time.time)
            {
                return;
            }

            // 필요한 탄약이 있는지 검사
            int ammoSlot = ItemContainer.FindMatchItemSlotFromLast(rangeWeaponData.RequireAmmo.ItemName);

            if (ammoSlot < 0)
            {
                return;
            }
            ItemContainer.SubtrackItemAtSlot(ammoSlot);

            // Projectile 설정
            var projectileBase = ObjectPoolManager.Instance.ReuseObject(projectileBasePrefab.gameObject).GetComponent <ProjectileBase>();
            var projectileInfo = new ProjectileBase.ProjectileInfo(attackDirection, requireAmmoData.ProjectileSpeed, rangeWeaponData.AttackRange / requireAmmoData.ProjectileSpeed,
                                                                   requireAmmoData.ColliderRadius, rangeWeaponData.Damage, rangeWeaponData.DamageType, rangeWeaponData.KnockbackPower);

            projectileBase.InitializeProjectile(projectileInfo, projectileFirePosition.position);

            //발사 동기화
            photonView.RPC(nameof(SyncRangeAttack), PhotonTargets.Others, attackDirection, rangeWeaponData.ItemName, PhotonNetwork.player.NickName);

            projectileBase.Fire();
        }