Combat Script [upd] | Multicrew Tank

void Update() { if (!isLocalPlayer) return; if (hasAuthorityForRole("Driver")) DriverUpdate(); if (hasAuthorityForRole("Gunner")) GunnerUpdate(); if (hasAuthorityForRole("Commander")) CommanderUpdate(); if (hasAuthorityForRole("Loader")) LoaderUpdate(); }

void UpdateReload() { if (reloadProgress < 1f) { float loaderEfficiency = 1f / (1f + loaderSkill); // 0.5 sec saved per skill level reloadProgress += Time.deltaTime / (baseReloadTime * loaderEfficiency); if (reloadProgress >= 1f) { UIManager.ShowMessage("Gun ready!"); AudioManager.PlayReloadComplete(); } } } multicrew tank combat script

// Apply transforms turretTransform.localRotation = Quaternion.Euler(0, turretAngle, 0); gunTransform.localRotation = Quaternion.Euler(-gunElevation, 0, 0); } void Update() { if (

void UpdateTurret() { float targetYaw = turretAngle + Input.GetAxis("Mouse X") * sensitivity * Time.deltaTime; float targetPitch = gunElevation + Input.GetAxis("Mouse Y") * sensitivity * Time.deltaTime; targetPitch = Mathf.Clamp(targetPitch, -10f, 20f); // Smooth movement (massive turret inertia) turretAngle = Mathf.Lerp(turretAngle, targetYaw, Time.deltaTime * 2f); gunElevation = Mathf.Lerp(gunElevation, targetPitch, Time.deltaTime * 2.5f); void Update() { if (!isLocalPlayer) return

[Command] void CmdFireGun() { if (isGunner && reloadProgress >= 1f && currentAmmo > 0) { RpcFireEffects(); RpcUpdateAmmo(currentAmmo - 1); reloadProgress = 0f; } } [ClientRpc] void RpcFireEffects() { // muzzle flash, sound, recoil on all clients }