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; } }
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; }
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; }
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); } }
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); }
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"; } } }
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); } }