Esempio n. 1
0
    private void DrawWeapon(int weaponID)
    {
        meleeObject.SetActive(false);

        GunController toInstantiate = WeaponDatabase.GetWeaponByID(weaponID);

        currentGC = (GunController)Instantiate(toInstantiate);
        currentGC.transform.parent        = weaponsParent;
        currentGC.transform.localPosition = toInstantiate.thirdPersonPosition;
        currentGC.transform.localRotation = toInstantiate.thirdPersonRotation;
        currentGC.StripFunctions(true);
        currentVisuals   = currentGC.GetComponent <GunVisuals>();
        muzzleBrightness = currentGC.muzzleLight.intensity;
        GetComponent <AudioSource>().PlayOneShot(drawSound, 0.7f);

        targetFireRate = 60f / Mathf.Max(currentGC.firstRPM, (currentGC.secondMode != GunController.FireMode.None) ? currentGC.secondRPM : 0f, (currentGC.thirdMode != GunController.FireMode.None) ? currentGC.thirdRPM : 0f);
        currentGHP     = null;
        pullPinSound   = null;
        throwSound     = null;

        if (currentVisuals)
        {
            foreach (GameObject go in currentVisuals.activateOnUse)
            {
                go.SetActive(false);
            }

            currentGC.firePos.GetComponent <AudioSource>().volume = 1f;
        }
    }
Esempio n. 2
0
    private void DrawWeapon(int weaponID)
    {
        GunController toInstantiate = WeaponDatabase.GetWeaponByID(weaponID);

        currentGun = (GunController)Instantiate(toInstantiate);
        currentGun.transform.parent        = weaponsParent;
        currentGun.transform.localPosition = toInstantiate.thirdPersonPosition;
        currentGun.transform.localRotation = toInstantiate.thirdPersonRotation;
        currentGun.PrepareForBot();

        currentVisuals   = currentGun.GetComponent <GunVisuals>();
        muzzleBrightness = currentGun.muzzleLight.intensity;

        curSpread = currentGun.baseSpreadAmount;
    }
Esempio n. 3
0
    public void BulletInfo(BulletInfo bi, int gunIndex, bool tracer = false, bool isPlayer = false, int botID = -1)
    {
        multishotDivider = WeaponDatabase.GetWeaponByID(gunIndex).bulletsPerShot;
        thisGunIndex     = gunIndex;
        isVisuals        = tracer;
        player           = (isPlayer && botID <= -1);
        botIndex         = botID;
        isServer         = Topan.Network.isConnected && (botID > -1 || (player && Topan.Network.isServer));
        damage           = bi.damage;
        force            = bi.force;
        speed            = bi.muzzleVelocity;
        gFactor          = bi.gravityFactor;
        dmgCurve         = bi.damageFalloff;

        ricochetAmount = bi.ricochetLength;
        ricochetAngle  = bi.ricochetMaxAngle;
        friendlyFire   = NetworkingGeneral.friendlyFire;
    }
Esempio n. 4
0
    public void AddWeapon(int weaponID, bool autoSwitch = true)
    {
        GunController toInstantiate = WeaponDatabase.GetWeaponByID(weaponID);
        GunController instantiated  = null;

        int switchTo = 0;

        if (heldWeapons[0] == null)
        {
            heldWeapons[0] = (GunController)Instantiate(toInstantiate);
            instantiated   = heldWeapons[0];
        }
        else if (heldWeapons[1] == null)
        {
            switchTo       = 1;
            heldWeapons[1] = (GunController)Instantiate(toInstantiate);
            instantiated   = heldWeapons[1];
        }
        else if (curWeaponMode == CurrentWeaponMode.GenericWeapon)
        {
            switchTo = curWeaponNum;
            DropWeapon(curWeaponNum, false);
            heldWeapons[curWeaponNum] = (GunController)Instantiate(toInstantiate);
            instantiated = heldWeapons[curWeaponNum];
        }
        else if (curWeaponMode == CurrentWeaponMode.AlternateWeapon)
        {
        }

        if (instantiated)
        {
            instantiated.transform.parent        = weaponsParent;
            instantiated.transform.localPosition = toInstantiate.firstPersonPosition;
            instantiated.transform.localRotation = toInstantiate.firstPersonRotation;

            instantiated.RunStart();
            instantiated.gameObject.SetActive(false);
        }

        if (autoSwitch)
        {
            SelectWeapon(switchTo);
        }
    }
    public override void OnInspectorGUI()
    {
        gcScript = target as GunController;

        GUILayout.Space(10);

        if (gcScript.firePos == null)
        {
            GUILayout.Box("IMPORTANT! Assign a fire position before continuing!");
        }
        gcScript.firePos = (Transform)EditorGUILayout.ObjectField("Fire Position:", gcScript.firePos, typeof(Transform), true);
        if (gcScript.firePos == null)
        {
            return;
        }

        gcScript.leftHandTransform = (Transform)EditorGUILayout.ObjectField("Left Hand:", gcScript.leftHandTransform, typeof(Transform), true);

        GUILayout.Space(5);

        if (GUILayout.Button("Convert To Pickup"))
        {
            PrefabUtility.DisconnectPrefabInstance(gcScript.gameObject);

            GunVisuals gv = gcScript.GetComponent <GunVisuals>();
            if (gv)
            {
                foreach (GameObject go in gv.activateOnUse)
                {
                    DestroyImmediate(go);
                }
                foreach (GameObject go in gv.deactivateOnUse)
                {
                    go.SetActive(true);
                }
                DestroyImmediate(gcScript.firePos.gameObject);
                DestroyImmediate(gv);
            }

            PistolAnim pa = gcScript.GetComponent <PistolAnim>();
            if (pa)
            {
                DestroyImmediate(pa);
            }

            gcScript.gameObject.AddComponent <Rigidbody>().mass = 3f;
            UsableObject uo = gcScript.gameObject.AddComponent <UsableObject>();
            uo.weaponPickup            = new UsableObject.WeaponPickup();
            uo.weaponPickup.enabled    = true;
            uo.weaponPickup.ammoAmount = gcScript.currentAmmo;
            uo.objectName             = gcScript.gunName;
            uo.weaponPickup.weaponID  = gcScript.weaponID;
            gcScript.transform.parent = null;
            gcScript.transform.name  += " (Pickup)";

            AntiClipVariables acv = gcScript.GetComponent <AntiClipVariables>();
            if (acv)
            {
                DestroyImmediate(acv);
            }

            DestroyImmediate(gcScript);

            return;
        }

        if (GUILayout.Button("Reset IDs"))
        {
            WeaponDatabase.RefreshIDs();
            return;
        }

        DarkRef.GUISeparator();

        if (GUILayout.Button("Set First Person Info"))
        {
            GunController toSetFirst = WeaponDatabase.GetWeaponByID(gcScript.weaponID);
            toSetFirst.firstPersonPosition = gcScript.transform.localPosition;
            toSetFirst.firstPersonRotation = gcScript.transform.localRotation;

            gcScript.firstPersonPosition = gcScript.transform.localPosition;
            gcScript.firstPersonRotation = gcScript.transform.localRotation;
        }
        GUILayout.Label("First Person Info:", EditorStyles.boldLabel);
        GUILayout.Label("    Position: " + DarkRef.PreciseStringVector3(gcScript.firstPersonPosition));
        GUILayout.Label("    Rotation: " + gcScript.firstPersonRotation.eulerAngles);


        DarkRef.GUISeparator();

        if (GUILayout.Button("Set Third Person Info"))
        {
            GunController toSetThird = WeaponDatabase.GetWeaponByID(gcScript.weaponID);
            toSetThird.thirdPersonPosition = gcScript.transform.localPosition;
            toSetThird.thirdPersonRotation = gcScript.transform.localRotation;

            gcScript.thirdPersonPosition = gcScript.transform.localPosition;
            gcScript.thirdPersonRotation = gcScript.transform.localRotation;
        }

        if ((gcScript.transform.parent != null && gcScript.transform.parent.name == "WeaponsParent") && GUILayout.Button("Pose Transform"))
        {
            gcScript.transform.localPosition = gcScript.thirdPersonPosition;
            gcScript.transform.localRotation = gcScript.thirdPersonRotation;
        }

        GUILayout.Label("Third Person Info:", EditorStyles.boldLabel);
        GUILayout.Label("    Position: " + DarkRef.PreciseStringVector3(gcScript.thirdPersonPosition));
        GUILayout.Label("    Rotation: " + gcScript.thirdPersonRotation.eulerAngles);

        DarkRef.GUISeparator();

        GUILayout.Label("GUI Properties", EditorStyles.boldLabel);
        GUILayout.BeginHorizontal();
        GUILayout.Space(20);
        GUILayout.BeginVertical();
        gcScript.iconTexture = (Texture2D)EditorGUILayout.ObjectField("Icon:", gcScript.iconTexture, typeof(Texture2D));
        gcScript.iconScale   = EditorGUILayout.Vector2Field("Icon Scale:", gcScript.iconScale);
        gcScript.iconOffset  = EditorGUILayout.Vector2Field("Icon Offset:", gcScript.iconOffset);
        GUILayout.EndVertical();
        GUILayout.EndHorizontal();

        GUILayout.Space(10);
        gcScript.gunName    = EditorGUILayout.TextField("Weapon Name:", gcScript.gunName);
        gcScript.weaponSlot = (WeaponSlot)EditorGUILayout.EnumPopup("Weapon Slot:", gcScript.weaponSlot);
        GUILayout.Space(5);

        GUILayout.Label("Fire Mode Settings", EditorStyles.boldLabel);
        GUILayout.BeginHorizontal();
        GUILayout.Space(20);
        GUILayout.BeginVertical();
        gcScript.firstMode = (GunController.FireMode)EditorGUILayout.EnumPopup("Fire Mode #1:", gcScript.firstMode);
        if (gcScript.firstMode != GunController.FireMode.None)
        {
            gcScript.firstRPM = EditorGUILayout.FloatField("    Fire Rate (RPM):", gcScript.firstRPM);
        }
        gcScript.secondMode = (GunController.FireMode)EditorGUILayout.EnumPopup("Fire Mode #2:", gcScript.secondMode);
        if (gcScript.secondMode != GunController.FireMode.None)
        {
            gcScript.secondRPM = EditorGUILayout.FloatField("    Fire Rate (RPM):", gcScript.secondRPM);
            GUI.enabled        = false;
        }
        if (gcScript.secondMode == GunController.FireMode.None)
        {
            GUI.enabled        = false;
            gcScript.thirdMode = GunController.FireMode.None;
        }
        else
        {
            GUI.enabled = true;
        }

        gcScript.thirdMode = (GunController.FireMode)EditorGUILayout.EnumPopup("Fire Mode #3:", gcScript.thirdMode);
        if (gcScript.thirdMode != GunController.FireMode.None && gcScript.secondMode != GunController.FireMode.None)
        {
            gcScript.thirdRPM = EditorGUILayout.FloatField("    Fire Rate (RPM):", gcScript.thirdRPM);
        }
        GUI.enabled = true;
        GUILayout.EndVertical();
        GUILayout.EndHorizontal();

        GUILayout.Space(5);

        BulletInfo.BulletType bulletType = gcScript.bulletInfo.bulletType;
        GUILayout.Label((bulletType == BulletInfo.BulletType.Bullet) ? "Bullet Properties" : "Projectile Properties", EditorStyles.boldLabel);
        GUILayout.BeginHorizontal();
        GUILayout.Space(20);
        GUILayout.BeginVertical();
        PoolingList poolList = (PoolingList)Resources.Load("Static Prefabs/PoolingList", typeof(PoolingList));

        gcScript.bulletInfo.bulletType = (BulletInfo.BulletType)EditorGUILayout.EnumPopup("Bullet Type:", gcScript.bulletInfo.bulletType);

        GUI.color = new Color(1f, 0.8f, 0.8f);
        EditorGUILayout.ObjectField((bulletType == BulletInfo.BulletType.Bullet) ? "Bullet Prefab:" : "Projectile Prefab:", poolList.poolPrefabs[Mathf.Clamp(gcScript.bulletInfo.poolIndex, 0, poolList.poolPrefabs.Length - 1)], typeof(GameObject), true);
        GUI.color = Color.white;

        EditorGUI.indentLevel        += 1;
        gcScript.bulletInfo.poolIndex = EditorGUILayout.IntField("Pool Index:", Mathf.Clamp(gcScript.bulletInfo.poolIndex, 0, poolList.poolPrefabs.Length - 1));
        EditorGUI.indentLevel        -= 1;
        GUILayout.Space(8f);

        gcScript.bulletInfo.damage = EditorGUILayout.IntField((bulletType == BulletInfo.BulletType.Rocket) ? "Explosion Damage" : "Damage:", gcScript.bulletInfo.damage);

        if (bulletType == BulletInfo.BulletType.Rocket)
        {
            gcScript.bulletInfo.explosionRadius = EditorGUILayout.FloatField("Explosion Radius:", gcScript.bulletInfo.explosionRadius);
        }
        else
        {
            gcScript.bulletInfo.force = EditorGUILayout.FloatField("Impact Force:", gcScript.bulletInfo.force);
        }

        gcScript.bulletInfo.muzzleVelocity = EditorGUILayout.FloatField("Base Velocity (m/s):", gcScript.bulletInfo.muzzleVelocity);
        gcScript.bulletInfo.gravityFactor  = EditorGUILayout.Slider("Gravity (" + (-Physics.gravity.y * gcScript.bulletInfo.gravityFactor).ToString("F2") + " m/s)", gcScript.bulletInfo.gravityFactor, 0f, 5f);

        gcScript.bulletInfo.damageFalloff = EditorGUILayout.CurveField("Damage Falloff:", gcScript.bulletInfo.damageFalloff);
        for (int i = 0; i < gcScript.bulletInfo.damageFalloff.length; i++)
        {
            Keyframe modKey = gcScript.bulletInfo.damageFalloff.keys[i];
            modKey.time  = Mathf.RoundToInt(Mathf.Max(0f, modKey.time));
            modKey.value = Mathf.Round(Mathf.Clamp(modKey.value, 0f, 1f) * 100f) / 100f;
            gcScript.bulletInfo.damageFalloff.MoveKey(i, modKey);
        }

        //        if(gcScript.bulletInfo.penetrationDistance <= 0f) {
        gcScript.bulletInfo.ricochetLength   = EditorGUILayout.IntField("Ricochet Amount:", Mathf.Max(gcScript.bulletInfo.ricochetLength, 0));
        gcScript.bulletInfo.ricochetMaxAngle = EditorGUILayout.FloatField("Ricochet Max Angle:", Mathf.Clamp(gcScript.bulletInfo.ricochetMaxAngle, 0f, 90f));

        /*
         * }
         * else {
         *  EditorGUILayout.HelpBox("You must disable penetration to enable ricochet", MessageType.Info);
         * }
         *
         * gcScript.bulletInfo.penetrationDistance = EditorGUILayout.FloatField("Penetration Distance: ", Mathf.Clamp(gcScript.bulletInfo.penetrationDistance, 0f, 10000f));
         * gcScript.bulletInfo.penetrationDamageReduction = EditorGUILayout.FloatField("Penetration Damage Reduction: ", Mathf.Clamp(gcScript.bulletInfo.penetrationDamageReduction, 0f, 100f));
         * gcScript.bulletInfo.penetrationSpeedReduction = EditorGUILayout.FloatField("Penetration Speed Reduction: ", Mathf.Clamp(gcScript.bulletInfo.penetrationSpeedReduction, 0f, 100f));
         */

        GUILayout.EndVertical();
        GUILayout.EndHorizontal();

        GUILayout.Space(5);

        GUILayout.Label("Sound Settings", EditorStyles.boldLabel);
        GUILayout.BeginHorizontal();
        GUILayout.Space(20);
        GUILayout.BeginVertical();
        gcScript.fireSound  = (AudioClip)EditorGUILayout.ObjectField("Fire Sound:", gcScript.fireSound, typeof(AudioClip), true);
        gcScript.emptySound = (AudioClip)EditorGUILayout.ObjectField("Empty Sound:", gcScript.emptySound, typeof(AudioClip), true);

        string reloadLabel = (gcScript.reloadMethod == GunController.ReloadMethod.Magazine) ? "Reload Sound:" : "Reload Sound (Loop):";

        gcScript.reloadSound = (AudioClip)EditorGUILayout.ObjectField(reloadLabel, gcScript.reloadSound, typeof(AudioClip), true);
        if (gcScript.reloadMethod == GunController.ReloadMethod.Singular)
        {
            gcScript.reloadEnd = (AudioClip)EditorGUILayout.ObjectField("Reload End:", gcScript.reloadEnd, typeof(AudioClip), true);
        }
        else if (gcScript.reloadMethod == GunController.ReloadMethod.Magazine)
        {
            gcScript.reloadSoundEmpty = (AudioClip)EditorGUILayout.ObjectField("Reload Sound (empty):", gcScript.reloadSoundEmpty, typeof(AudioClip), true);
        }

        gcScript.switchSound = (AudioClip)EditorGUILayout.ObjectField("Switch Fire Mode:", gcScript.switchSound, typeof(AudioClip), true);
        GUILayout.EndVertical();
        GUILayout.EndHorizontal();

        GUILayout.Space(5);

        GUILayout.Label("Shoot Settings", EditorStyles.boldLabel);
        GUILayout.BeginHorizontal();
        GUILayout.Space(20);
        GUILayout.BeginVertical();

        gcScript.bulletsPerShot    = EditorGUILayout.IntSlider("Bullets Per Shot:", gcScript.bulletsPerShot, 1, 50);
        gcScript.countsAsOneBullet = EditorGUILayout.Toggle("Subtract 1 Bullet:", gcScript.countsAsOneBullet);
        if (gcScript.firstMode == GunController.FireMode.BurstFire || gcScript.secondMode == GunController.FireMode.BurstFire || gcScript.thirdMode == GunController.FireMode.BurstFire)
        {
            gcScript.bulletsPerBurst = EditorGUILayout.IntSlider("Rounds Per Burst:", gcScript.bulletsPerBurst, 2, Mathf.Max(3, gcScript.clipSize));
            gcScript.burstInterval   = EditorGUILayout.Slider("Burst Interval:", gcScript.burstInterval, 0.01f, 1f);
            gcScript.burstCooldown   = EditorGUILayout.Slider("Burst Cooldown:", gcScript.burstCooldown, 0.01f, 1f);
        }
        GUILayout.Space(10);
        gcScript.muzzleProbability  = EditorGUILayout.Slider("Muzzle Probability:", gcScript.muzzleProbability, 0f, 1f);
        gcScript.muzzleFlash        = (ParticleEmitter)EditorGUILayout.ObjectField("Muzzle Flash:", gcScript.muzzleFlash, typeof(ParticleEmitter), true);
        gcScript.muzzleLight        = (Light)EditorGUILayout.ObjectField("Muzzle Light:", gcScript.muzzleLight, typeof(Light), true);
        EditorGUI.indentLevel      += 1;
        EditorGUIUtility.labelWidth = 140f;
        gcScript.muzzleSpeed        = EditorGUILayout.FloatField("Light Fade Speed:", Mathf.Max(5f, gcScript.muzzleSpeed));
        EditorGUIUtility.LookLikeControls();
        EditorGUI.indentLevel -= 1;

        GUILayout.Space(5f);

        gcScript.shootParticle = (ParticleEmitter)EditorGUILayout.ObjectField("Shoot Smoke:", gcScript.shootParticle, typeof(ParticleEmitter), true);

        GUILayout.Space(10);
        gcScript.ejectionEnabled = EditorGUILayout.Toggle("Shell Ejection:", gcScript.ejectionEnabled);
        if (gcScript.ejectionEnabled)
        {
            gcScript.ejectionPos      = (Transform)EditorGUILayout.ObjectField("    Ejection Position:", gcScript.ejectionPos, typeof(Transform), true);
            gcScript.bulletShellIndex = EditorGUILayout.IntField("    Bullet Shell Index:", gcScript.bulletShellIndex);
            gcScript.ejectionDelay    = EditorGUILayout.FloatField("    Ejection Delay:", gcScript.ejectionDelay);
            gcScript.ejectionMinForce = EditorGUILayout.Vector3Field("    Minimum Force:", gcScript.ejectionMinForce);
            gcScript.ejectionMaxForce = EditorGUILayout.Vector3Field("    Maximum Force:", gcScript.ejectionMaxForce);
            gcScript.ejectionRotation = EditorGUILayout.FloatField("    Rotation Force:", gcScript.ejectionRotation);
        }
        GUILayout.EndVertical();
        GUILayout.EndHorizontal();

        GUILayout.Space(5);

        GUILayout.Label("Ammo Settings", EditorStyles.boldLabel);
        GUILayout.BeginHorizontal();
        GUILayout.Space(20);
        GUILayout.BeginVertical();
        gcScript.currentAmmo = EditorGUILayout.IntSlider("Current Ammo:", gcScript.currentAmmo, 0, gcScript.clipSize);
        gcScript.clipSize    = EditorGUILayout.IntField("    Magazine Size:", gcScript.clipSize);

        GUILayout.Space(5f);

        gcScript.ammoLeft    = EditorGUILayout.IntSlider("Reserve Ammo:", gcScript.ammoLeft, 0, gcScript.ammoLeftCap);
        gcScript.ammoLeftCap = EditorGUILayout.IntField("    Reserve Limit:", gcScript.ammoLeftCap);

        DarkRef.GUISeparator(7f);

        gcScript.reloadMethod = (GunController.ReloadMethod)EditorGUILayout.EnumPopup("Reload Method:", gcScript.reloadMethod);

        EditorGUI.indentLevel      += 1;
        EditorGUIUtility.labelWidth = 140f;
        gcScript.reloadOnMouseClick = EditorGUILayout.Toggle("Reload On Click:", gcScript.reloadOnMouseClick);
        EditorGUIUtility.LookLikeControls();
        if (gcScript.reloadMethod == GunController.ReloadMethod.Magazine)
        {
            EditorGUIUtility.labelWidth = 140f;
            gcScript.reloadLength       = EditorGUILayout.FloatField("Reload Duration:", Mathf.Clamp(gcScript.reloadLength, 0f, 30f));
            if (gcScript.reloadSoundEmpty != null)
            {
                gcScript.reloadLengthEmpty = EditorGUILayout.FloatField("   Empty Duration:", Mathf.Clamp(gcScript.reloadLengthEmpty, 0f, 30f));
            }
            gcScript.includeChamberRound = EditorGUILayout.Toggle("Chamber Round:", gcScript.includeChamberRound);
            EditorGUIUtility.LookLikeControls();
        }
        else if (gcScript.reloadMethod == GunController.ReloadMethod.Singular)
        {
            EditorGUIUtility.labelWidth = 135f;
            gcScript.reloadDelay        = EditorGUILayout.FloatField("Reload Delay:", Mathf.Clamp(gcScript.reloadDelay, 0f, 5f));
            gcScript.reloadInterval     = EditorGUILayout.FloatField("Reload Interval:", Mathf.Clamp(gcScript.reloadInterval, 0f, 5f));
            gcScript.reloadAmount       = EditorGUILayout.IntField("Reload Amount:", Mathf.Clamp(gcScript.reloadAmount, 1, gcScript.clipSize));
            GUILayout.Box("Reload sound will now loop, make sure that the sound can loop seamlessly.");
            EditorGUIUtility.LookLikeControls();
        }
        EditorGUI.indentLevel -= 1;
        GUILayout.EndVertical();
        GUILayout.EndHorizontal();

        EditorGUIUtility.labelWidth = 165f;

        GUILayout.Space(5);

        GUILayout.Label("Aim Settings", EditorStyles.boldLabel);
        gcScript.sniperAimEffect     = EditorGUILayout.Toggle("    Sniper Aim Effect:", gcScript.sniperAimEffect);
        gcScript.playerSpeedAim      = EditorGUILayout.Slider("    Player Speed Aim:", gcScript.playerSpeedAim, 0.1f, 1f);
        gcScript.mouseSensitivityAim = EditorGUILayout.Slider("    Mouse Sensitivity Aim:", gcScript.mouseSensitivityAim, 0.01f, 1.0f);
        gcScript.aimPos         = EditorGUILayout.Vector3Field("    Aim Position:", gcScript.aimPos);
        gcScript.aimSpeedFactor = EditorGUILayout.FloatField("    Aim Speed Factor:", gcScript.aimSpeedFactor);
        gcScript.addZoomFOV     = EditorGUILayout.FloatField("    Additional Zoom (FOV):", Mathf.Clamp(gcScript.addZoomFOV, -15f, 75f));
        gcScript.aimSwayFactor  = EditorGUILayout.Slider("    Sniper Sway Factor:", gcScript.aimSwayFactor, 0f, 5f);

        GUILayout.Space(5);

        GUILayout.Label("Crosshair Settings", EditorStyles.boldLabel);
        gcScript.crosshairsEnabled = EditorGUILayout.Toggle("    Enabled:", gcScript.crosshairsEnabled);

        GUILayout.Space(5);

        GUILayout.Label("Accuracy and Recoil Settings", EditorStyles.boldLabel);

        gcScript.baseSpreadAmount     = EditorGUILayout.FloatField("    Base Bullet Spread:", gcScript.baseSpreadAmount);
        gcScript.spreadSpeed          = EditorGUILayout.FloatField("    Bullet Spread Speed:", gcScript.spreadSpeed);
        gcScript.spreadAimFactor      = EditorGUILayout.Slider("        Spread Aim Factor:", gcScript.spreadAimFactor, 0f, 1f);
        gcScript.recoverSpeed         = EditorGUILayout.FloatField("    Recover Spread Speed:", gcScript.recoverSpeed);
        gcScript.movementSpreadAmount = EditorGUILayout.FloatField("    Movement Spread Amount:", gcScript.movementSpreadAmount);
        gcScript.maxSpreadAmount      = EditorGUILayout.FloatField("    Max Bullet Spread:", gcScript.maxSpreadAmount);
        gcScript.aimSpreadModifier    = EditorGUILayout.Slider("    Aim Spread Mod:", gcScript.aimSpreadModifier, 0f, 1f);
        gcScript.crouchWalkModifier   = EditorGUILayout.Slider("    Crouch/Walk Mod:", gcScript.crouchWalkModifier, 0f, 1f);
        GUILayout.Space(10);
        gcScript.recoilAmount = EditorGUILayout.FloatField("    Offset Recoil:", gcScript.recoilAmount);

        GUILayout.Space(6);

        gcScript.upKickAmount = EditorGUILayout.FloatField("    Up-kick Amount:", gcScript.upKickAmount);
        gcScript.autoReturn   = EditorGUILayout.FloatField("        Auto Return:", gcScript.autoReturn);

        GUILayout.Space(5f);

        gcScript.sideKickAmount       = EditorGUILayout.FloatField("    Side-kick Amount:", gcScript.sideKickAmount);
        gcScript.aimUpkickModifier    = EditorGUILayout.Slider("        Aim Kick Modifier:", gcScript.aimUpkickModifier, 0f, 1f);
        gcScript.crouchUpkickModifier = EditorGUILayout.Slider("        Crouch Kick Modifier:", gcScript.crouchUpkickModifier, 0f, 1f);

        gcScript.kickInfluence = EditorGUILayout.Vector2Field("    Kick Influence", gcScript.kickInfluence);
        GUILayout.Space(5);

        EditorGUIUtility.LookLikeControls(200f);
        gcScript.extraRecoilThreshold = EditorGUILayout.IntField("    Extra Recoil Threshold:", gcScript.extraRecoilThreshold);
        gcScript.extraRecoilAmount    = EditorGUILayout.FloatField("    Extra Recoil Amount (" + (gcScript.extraRecoilAmount * 100f).ToString() + "%):", Mathf.Max(0f, gcScript.extraRecoilAmount));
        gcScript.maxExtraRecoil       = EditorGUILayout.FloatField("    Extra Recoil Limit (+" + (gcScript.maxExtraRecoil * 100f).ToString() + "%):", Mathf.Max(0f, gcScript.maxExtraRecoil));
        EditorGUIUtility.LookLikeControls(150f);

        GUILayout.Space(10f);

        gcScript.kickCameraTilt = EditorGUILayout.FloatField("    Camera Recoil Tilt:", gcScript.kickCameraTilt);
        gcScript.kickGunTilt    = EditorGUILayout.FloatField("    Gun Recoil Tilt:", gcScript.kickGunTilt);
        gcScript.camShakeAnim   = EditorGUILayout.FloatField("    Camera Animation:", gcScript.camShakeAnim);

        GUILayout.Space(5f);

        gcScript.kickBackAmount    = EditorGUILayout.FloatField("    Kickback Amount:", gcScript.kickBackAmount);
        gcScript.kickSpeedFactor   = EditorGUILayout.FloatField("    Kickback Speed:", gcScript.kickSpeedFactor);
        gcScript.kickbackAimFactor = EditorGUILayout.Slider("    Kickback Aim Factor:", gcScript.kickbackAimFactor, 0f, 1f);

        GUILayout.Space(5);

        GUILayout.Label("Animation Settings", EditorStyles.boldLabel);
        gcScript.reloadAnim = EditorGUILayout.TextField("    Reload Name:", gcScript.reloadAnim);

        GUILayout.Space(5);

        GUILayout.Label("Miscellaneous Settings", EditorStyles.boldLabel);
        gcScript.flashlight      = (Light)EditorGUILayout.ObjectField("    Flashlight:", gcScript.flashlight, typeof(Light), true);
        gcScript.flashlightClick = (AudioClip)EditorGUILayout.ObjectField("    Flashlight Click:", gcScript.flashlightClick, typeof(AudioClip), true);
        GUILayout.Space(10f);
        gcScript.weaponWeight = EditorGUILayout.FloatField("    Weapon Weight (kg):", Mathf.Clamp(gcScript.weaponWeight, 0f, 100f));
        gcScript.aimBobFactor = EditorGUILayout.Slider("    Aim Bob Factor:", gcScript.aimBobFactor, 0.01f, 1f);

        GUILayout.Space(10f);
        GUILayout.Label("    DoF Settings");
        gcScript.dofBlurAmount    = EditorGUILayout.FloatField("        Blur Amount:", Mathf.Clamp(gcScript.dofBlurAmount, 0f, 50f));
        gcScript.dofBlurDistance  = EditorGUILayout.FloatField("        Blur Distance:", Mathf.Clamp(gcScript.dofBlurDistance, 0f, 25f));
        gcScript.dofBlurAperture  = EditorGUILayout.FloatField("        Blur Aperture:", Mathf.Clamp(gcScript.dofBlurAperture, 0f, 40f));
        gcScript.dofBlurFocalSize = EditorGUILayout.FloatField("        Focal Size:", Mathf.Clamp(gcScript.dofBlurFocalSize, 0f, 10f));
        gcScript.dofBlendBlur     = EditorGUILayout.FloatField("        Blend Blur:", Mathf.Clamp(gcScript.dofBlendBlur, 0f, 50f));

        GUILayout.Space(10);

        gcScript.weaponID = EditorGUILayout.IntField("Weapon ID", Mathf.Clamp(gcScript.weaponID, -1, 2000));

        if (GUI.changed)
        {
            EditorUtility.SetDirty(gcScript);
        }
    }
Esempio n. 6
0
    public void AddToFeed(string killerName, string victimName, int weaponIndex, bool queued = false)
    {
        if (feedList.Count >= queueBuffer)
        {
            feedQueue.Add(new KillContainer(killerName, victimName, weaponIndex));
            return;
        }

        UILabel newFeedInstance = (UILabel)Instantiate(labelPrefab);

        newFeedInstance.transform.parent     = killFeedParent;
        newFeedInstance.transform.localScale = Vector3.one;
        newFeedInstance.fontSize             = fontSize;

        if (weaponIndex >= 0)
        {
            string killedBy = (weaponIndex >= 200) ? GrenadeDatabase.GetGrenadeByID(weaponIndex - 200).grenadeName : WeaponDatabase.GetWeaponByID(weaponIndex).gunName;
            newFeedInstance.text = killerName + " [" + killedBy + "] " + victimName;
        }
        else
        {
            newFeedInstance.text = killerName + " killed " + victimName;
        }

        KillFeedItem kfi = newFeedInstance.GetComponent <KillFeedItem>();

        kfi.manager   = this;
        kfi.targetPos = -Vector3.up * feedList.Count * feedSpacing;
        kfi.Initialize((queued) ? feedDuration * Random.Range(0.75f, 0.85f) : feedDuration); //yay for variety

        feedList.Add(newFeedInstance);
    }
Esempio n. 7
0
    void Update()
    {
        uiCam.enabled    = !GameManager.isPaused && !RoundEndManager.isRoundEnded;
        chatOutput.alpha = 1f - blackSprite.alpha;
        uiCam.GetComponent <BlurEffect>().blurSpread = blurREM;

        GunController primaryWep = WeaponDatabase.GetWeaponByID(primarySelection.selectionIndex);

        primaryTooltip.textSize = 0.8f;
        primaryTooltip.text     = "Weapon Statistics:[C6BCB6]" + "||" + "Damage: " + (primaryWep.bulletInfo.damage * primaryWep.bulletsPerShot)
                                  + "||" + "Rate of Fire: " + primaryWep.firstRPM.ToString("F0") + " RPM"
                                  + "||" + "Vertical Recoil: " + primaryWep.upKickAmount
                                  + "||" + "Horizontal Recoil: " + primaryWep.sideKickAmount
                                  + "||" + "Effective Range: " + primaryWep.GetMinimumRange() + "-" + primaryWep.GetMaximumRange() + "m"
                                  + "||" + "Weight: " + primaryWep.weaponWeight.ToString("F2") + " kg";

        GunController secondaryWep = WeaponDatabase.GetWeaponByID(secondarySelection.selectionIndex);

        secondaryTooltip.textSize = 0.8f;
        secondaryTooltip.text     = "Weapon Statistics:[C6BCB6]" + "||" + "Damage: " + (secondaryWep.bulletInfo.damage * secondaryWep.bulletsPerShot)
                                    + "||" + "Rate of Fire: " + secondaryWep.firstRPM.ToString("F0") + " RPM"
                                    + "||" + "Vertical Recoil: " + secondaryWep.upKickAmount
                                    + "||" + "Horizontal Recoil: " + secondaryWep.sideKickAmount
                                    + "||" + "Effective Range: " + secondaryWep.GetMinimumRange() + "-" + secondaryWep.GetMaximumRange() + "m"
                                    + "||" + "Weight: " + secondaryWep.weaponWeight.ToString("F2") + " kg";

        if (GeneralVariables.gameModeHasTeams)
        {
            if (spectateFollow.target == null)
            {
                GetAllTeamInstances();
            }
            else
            {
                Rigidbody theRigid = spectateFollow.target.GetComponent <Rigidbody>();
                if (theRigid != null && !theRigid.isKinematic)
                {
                    spectateFollow.target = null;
                    GetAllTeamInstances();
                }
            }
        }

        if (mpGUI != null)
        {
            timeLabel.color = mpGUI.timerLabels[0].color;
            if (GeneralVariables.Networking.countingDown)
            {
                timeLabel.text = "MATCH STARTING: " + GeneralVariables.Networking.countdown.ToString();
            }
            else
            {
                if (mpGUI.timerLabels[0].text == "--")
                {
                    timeLabel.text = "WAITING FOR: " + mpGUI.serverPL.ToString() + " player" + ((mpGUI.serverPL == 1) ? "" : "s");
                }
                else
                {
                    timeLabel.text = mpGUI.timerLabels[0].text + ":" + mpGUI.timerLabels[1].text;
                }
            }

            if (GeneralVariables.gameModeHasTeams)
            {
                redTitle.text  = "RED TEAM";
                blueTitle.text = "BLUE TEAM";
            }
            else
            {
                redTitle.text  = (mpGUI.youAreWinning) ? "YOU" : mpGUI.winningPlayerName.ToUpper();
                blueTitle.text = (mpGUI.youAreWinning) ? mpGUI.runnerUpName.ToUpper() : "YOU";
            }

            redTeamProgress.value = mpGUI.redTeamProgress.value;
            redTeamProgress.foregroundWidget.color = mpGUI.redTeamProgress.foregroundWidget.color;
            blueTeamProgress.value = mpGUI.blueTeamProgress.value;
            blueTeamProgress.foregroundWidget.color = mpGUI.blueTeamProgress.foregroundWidget.color;
            redTeamValue.text  = mpGUI.redTeamValue.text;
            blueTeamValue.text = mpGUI.blueTeamValue.text;
        }

        if (Topan.Network.isConnected && GeneralVariables.Networking != null)
        {
            string suffix         = "ready";
            int    playersWaiting = Topan.Network.connectedPlayers.Length;
            if (GeneralVariables.Networking.matchStarted)
            {
                matchStatus.text  = "BATTLE INITIATED";
                matchStatus.alpha = matchStatus.defaultAlpha;
                suffix            = "in battle";
            }
            else
            {
                matchStatus.text  = "BATTLE AWAITING";
                matchStatus.alpha = (matchStatus.defaultAlpha - 0.2f) + Mathf.PingPong(Time.time * 2f * 0.2f, 0.2f);
                playersWaiting    = Mathf.CeilToInt(playersWaiting * 0.25f);

                if (Topan.Network.HasServerInfo("pl"))
                {
                    playersWaiting -= (int)((byte)Topan.Network.GetServerInfo("pl"));
                }
            }

            matchName.text    = Topan.Network.GameName;
            matchDetails.text = StaticMapsList.mapsArraySorted[(byte)Topan.Network.GetServerInfo("m")].mapName + "\n" + "> [5C5C5C]" + NetworkingGeneral.currentGameType.typeName + "[-]" + "\n" + "\n" +
                                Mathf.Max(0, playersWaiting).ToString() + " combatant" + ((playersWaiting == 0 || playersWaiting > 1) ? "s " : " ") + suffix;
        }

        if (spectatorPositions != null && spectatorPositions.Count > 0)
        {
            if (Input.GetKeyDown(KeyCode.Space) && !RestrictionManager.restricted && UICamera.selectedObject == null && !isTransitioning)
            {
                autoSpectate = false;
                StartCoroutine(TransitionToIndex(specIndex + 1));
            }

            if (autoSpectate && Time.time - autoSpectateTimer >= spectateCycleInterval && specIndex < spectatorPositions.Count && spectatorPositions.Count > 1 && !isTransitioning)
            {
                int newRandomPoint = 0;

                do
                {
                    newRandomPoint = Random.Range(0, spectatorPositions.Count);
                }while (newRandomPoint == specIndex);

                autoSpectateTimer = Time.time;
                StartCoroutine(TransitionToIndex(newRandomPoint));
            }

            specIndex = Mathf.Clamp(specIndex, 0, spectatorPositions.Count + myAvailableTeamList.Count - 1);

            if (specIndex >= spectatorPositions.Count && myAvailableTeamList.Count > 0)
            {
                spectateFollow.enabled = true;
                spectateFollow.offset  = Vector3.up * 0.8f;
                spectateFollow.target  = myAvailableTeamList[specIndex - spectatorPositions.Count];
                spectateLabel.text     = "Spectating: " + myAvailableTeamList[specIndex - spectatorPositions.Count].root.name;
                spectateNote.text      = "[SPACE] to switch cameras" + "\n" + "[RMB] to rotate camera";
            }
            else
            {
                spectateFollow.enabled = false;
                spectateFollow.target  = null;

                //Regular spectator cameras
                specCamTr.position   = spectatorPositions[specIndex].position;
                specCamSway.focusRot = spectatorPositions[specIndex].eulerAngles;
                spectateLabel.text   = "Spectating: Camera_" + (specIndex + 1).ToString("000");
                spectateNote.text    = "[SPACE] to switch cameras";
            }
        }
    }
Esempio n. 8
0
    public override void OnInspectorGUI()
    {
        WeaponManager wm = target as WeaponManager;

        if (wm.wepList == null)
        {
            WeaponList savedWL = (WeaponList)Resources.Load("Static Prefabs/Weapon List", typeof(WeaponList));
            if (savedWL)
            {
                wm.wepList = savedWL;
                EditorUtility.SetDirty(wm);
            }

            wm.wepList = (WeaponList)EditorGUILayout.ObjectField("Weapon List Prefab:", wm.wepList, typeof(WeaponList), true);
            EditorGUILayout.HelpBox("Note that leaving this empty will have a HUGE performance impact at the start!", MessageType.Warning);
        }

        if (wm.poolList == null)
        {
            PoolingList savedPL = (PoolingList)Resources.Load("Static Prefabs/PoolingList", typeof(PoolingList));
            if (savedPL)
            {
                wm.poolList = savedPL;
                EditorUtility.SetDirty(wm);
            }

            wm.poolList = (PoolingList)EditorGUILayout.ObjectField("Pool List Prefab:", wm.poolList, typeof(PoolingList), true);
            EditorGUILayout.HelpBox("Note that leaving this empty will have a HUGE performance impact at the start!", MessageType.Warning);
        }

        GUILayout.Space(5);

        EditorGUILayout.LabelField("Starting Weapons", EditorStyles.boldLabel);

        EditorGUI.indentLevel += 1;

        int pValue = Mathf.Clamp(wm.startingPrimary, 0, WeaponDatabase.publicGunControllers.Length - 1);
        int sValue = Mathf.Clamp(wm.startingSecondary, 0, WeaponDatabase.publicGunControllers.Length - 1);

        EditorGUIUtility.labelWidth = 210f;
        wm.startingPrimary          = EditorGUILayout.IntField("Primary Weapon (" + WeaponDatabase.GetWeaponByID(pValue).gunName + "):", pValue);
        wm.startingSecondary        = EditorGUILayout.IntField("Secondary Weapon: (" + WeaponDatabase.GetWeaponByID(sValue).gunName + "):", sValue);
        EditorGUIUtility.LookLikeControls();

        EditorGUI.indentLevel -= 1;

        DarkRef.GUISeparator();

        wm.meleeController = (MeleeController)EditorGUILayout.ObjectField("Melee Controller:", wm.meleeController, typeof(MeleeController), true);
        wm.grenadeManager  = (GrenadeManager)EditorGUILayout.ObjectField("Grenade Manager:", wm.grenadeManager, typeof(GrenadeManager), true);
        wm.hands           = (GameObject)EditorGUILayout.ObjectField("Hands:", wm.hands, typeof(GameObject), true);

        GUILayout.Space(10);

        wm.drawTime  = EditorGUILayout.FloatField("Base Draw Time:", wm.drawTime);
        wm.drawSound = (AudioClip)EditorGUILayout.ObjectField("Draw Sound:", wm.drawSound, typeof(AudioClip), true);
        wm.dropSound = (AudioClip)EditorGUILayout.ObjectField("Drop Sound:", wm.dropSound, typeof(AudioClip), true);

        if (GUI.changed)
        {
            EditorUtility.SetDirty(wm);
        }
    }