using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using BepInEx;
using BepInEx.Logging;
using HarmonyLib;
using Photon.Pun;
using REPOLib.Modules;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.Video;
[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: AssemblyTitle("REPO_TV")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("SOSRY7C6PMFEVJP")]
[assembly: AssemblyProduct("REPO_TV")]
[assembly: AssemblyCopyright("Copyright © SOSRY7C6PMFEVJP 2025")]
[assembly: AssemblyTrademark("")]
[assembly: ComVisible(false)]
[assembly: Guid("a03cea98-efc0-455e-a11b-780d04619db8")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: TargetFramework(".NETFramework,Version=v4.7.2", FrameworkDisplayName = ".NET Framework 4.7.2")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.0.0")]
[module: UnverifiableCode]
namespace REPO_TV;
[BepInPlugin("com.xiaohai.REPO_TV", "REPO_TV", "1.0.1")]
public class Plugin : BaseUnityPlugin
{
public const string PLUGIN_GUID = "com.xiaohai.REPO_TV";
public const string PLUGIN_NAME = "REPO_TV";
public const string PLUGIN_VERSION = "1.0.1";
public static Plugin instance;
public static ManualLogSource logger;
public AudioClip pressing;
public GameObject TvPrefab;
private void Awake()
{
//IL_002e: Unknown result type (might be due to invalid IL or missing references)
instance = this;
logger = ((BaseUnityPlugin)this).Logger;
logger.LogInfo((object)"Plugin REPO_TV is loaded!");
LoadAB();
new Harmony("com.xiaohai.REPO_TV").PatchAll();
}
private void LoadAB()
{
string location = Assembly.GetExecutingAssembly().Location;
string directoryName = Path.GetDirectoryName(location);
string text = Path.Combine(directoryName, "xiaohaitv");
AssetBundle val = AssetBundle.LoadFromFile(text);
pressing = val.LoadAsset<AudioClip>("pressing.wav");
TvPrefab = val.LoadAsset<GameObject>("TV.prefab");
if ((Object)(object)TvPrefab != (Object)null)
{
TvPrefab.AddComponent<TVScript>();
TvPrefab.AddComponent<TVButtonManager>();
logger.LogInfo((object)"TV Prefab 加载成功.");
NetworkPrefabs.RegisterNetworkPrefab(TvPrefab);
Utilities.FixAudioMixerGroups(TvPrefab);
}
else
{
logger.LogError((object)"电视机预制体加载失败.");
}
}
}
[HarmonyPatch]
public static class Patch
{
[HarmonyPatch(typeof(LevelGenerator))]
public class LevelGeneratorPatch
{
[HarmonyPatch("GenerateDone")]
[HarmonyPostfix]
private static void AfterLevelGenerated(LevelGenerator __instance)
{
//IL_008a: Unknown result type (might be due to invalid IL or missing references)
//IL_008f: Unknown result type (might be due to invalid IL or missing references)
//IL_006a: Unknown result type (might be due to invalid IL or missing references)
//IL_006f: Unknown result type (might be due to invalid IL or missing references)
if (!ShouldRunCustomLogic() || !SemiFunc.IsMasterClientOrSingleplayer())
{
return;
}
Plugin.logger.LogInfo((object)"在关卡生成后放置电视机.");
GameObject val = GameObject.Find("cctv");
if ((Object)(object)val != (Object)null)
{
Plugin.logger.LogInfo((object)"cctv不为空!.");
if (SemiFunc.IsMultiplayer())
{
GameObject val2 = PhotonNetwork.InstantiateRoomObject(((Object)Plugin.instance.TvPrefab).name, Vector3.zero, Quaternion.identity, (byte)0, (object[])null);
}
else
{
GameObject val2 = Object.Instantiate<GameObject>(Plugin.instance.TvPrefab, Vector3.zero, Quaternion.identity);
}
}
}
private static bool ShouldRunCustomLogic()
{
RunManager instance = RunManager.instance;
return (Object)(object)instance != (Object)null && instance.levels.Contains(instance.levelCurrent) && (Object)(object)instance.levelCurrent != (Object)(object)instance.levelTutorial && (Object)(object)instance.levelCurrent != (Object)(object)instance.levelShop && (Object)(object)instance.levelCurrent != (Object)(object)instance.levelLobbyMenu;
}
}
}
public class TVButtonManager : MonoBehaviour
{
private enum BtnType
{
None,
Switch,
Play,
Next,
VolumeUp,
VolumeDown
}
private class Btn
{
public StaticGrabObject sgo;
public BtnType type;
public float timer;
public bool pressedLast;
public bool fired;
public Image ring;
public bool soundStarted;
public AudioSource audio;
public float threshold;
}
[SerializeField]
private Transform root;
[SerializeField]
private float holdTime = 2f;
[SerializeField]
private bool debugLog = true;
private TVScript tv;
private Sound pressingSound;
private AudioClip pressingClip;
private readonly List<Btn> buttons = new List<Btn>();
private void Awake()
{
tv = ((Component)this).GetComponent<TVScript>();
root = (Object.op_Implicit((Object)(object)root) ? root : ((Component)this).transform);
pressingClip = Plugin.instance?.pressing;
if (debugLog)
{
Debug.Log((object)"[TVButtonManager(Mod)] Awake");
}
StaticGrabObject[] componentsInChildren = ((Component)root).GetComponentsInChildren<StaticGrabObject>(true);
foreach (StaticGrabObject val in componentsInChildren)
{
BtnType btnType = Classify(((Object)val).name);
if (btnType != 0)
{
Image ring = null;
Transform val2 = ((Component)val).transform.Find("Ring");
if (Object.op_Implicit((Object)(object)val2))
{
ring = ((Component)val2).GetComponent<Image>();
}
float threshold = ((btnType == BtnType.VolumeUp || btnType == BtnType.VolumeDown) ? 1f : holdTime);
buttons.Add(new Btn
{
sgo = val,
type = btnType,
timer = 0f,
pressedLast = false,
fired = false,
ring = ring,
soundStarted = false,
threshold = threshold
});
if (debugLog)
{
Debug.Log((object)("[TVButtonManager(Mod)] Button: " + ((Object)val).name + " -> " + btnType));
}
}
}
}
private void Update()
{
//IL_02ac: Unknown result type (might be due to invalid IL or missing references)
//IL_022b: Unknown result type (might be due to invalid IL or missing references)
//IL_0235: Expected O, but got Unknown
//IL_023c: Unknown result type (might be due to invalid IL or missing references)
Btn btn = null;
foreach (Btn button in buttons)
{
if (Object.op_Implicit((Object)(object)button.sgo) && button.sgo.grabbed && button.sgo.playerGrabbing.Count > 0)
{
btn = button;
break;
}
}
foreach (Btn button2 in buttons)
{
if (btn != null && button2 != btn && Object.op_Implicit((Object)(object)button2.sgo))
{
if (((Behaviour)button2.sgo).enabled)
{
((Behaviour)button2.sgo).enabled = false;
}
}
else if (Object.op_Implicit((Object)(object)button2.sgo) && !((Behaviour)button2.sgo).enabled)
{
((Behaviour)button2.sgo).enabled = true;
}
}
foreach (Btn button3 in buttons)
{
bool flag = Object.op_Implicit((Object)(object)button3.sgo) && button3.sgo.grabbed && button3.sgo.playerGrabbing.Count > 0;
if (flag)
{
if (!button3.pressedLast)
{
button3.timer = 0f;
button3.fired = false;
button3.soundStarted = false;
if (Object.op_Implicit((Object)(object)button3.ring))
{
button3.ring.fillAmount = 0f;
}
}
if (!button3.fired)
{
button3.timer += Time.deltaTime;
}
if (!button3.soundStarted && Object.op_Implicit((Object)(object)pressingClip))
{
if (pressingSound == null)
{
pressingSound = new Sound();
pressingSound.Type = (AudioType)6;
pressingSound.SpatialBlend = 1f;
pressingSound.Volume = 1f;
pressingSound.Pitch = 1f;
}
pressingSound.Sounds = (AudioClip[])(object)new AudioClip[1] { pressingClip };
pressingSound.Source = null;
button3.audio = pressingSound.Play(((Component)button3.sgo).transform.position, 1f, 1f, 1f, 1f);
button3.soundStarted = true;
}
if (!button3.fired && button3.timer >= button3.threshold)
{
Fire(button3.type);
button3.fired = true;
button3.timer = 0f;
}
if (Object.op_Implicit((Object)(object)button3.ring))
{
button3.ring.fillAmount = (button3.fired ? 0f : Mathf.Clamp01(button3.timer / button3.threshold));
}
}
else
{
button3.timer = 0f;
button3.fired = false;
button3.soundStarted = false;
if (Object.op_Implicit((Object)(object)button3.ring))
{
button3.ring.fillAmount = 0f;
}
if (Object.op_Implicit((Object)(object)button3.audio))
{
if (button3.audio.isPlaying)
{
button3.audio.Stop();
}
if (Object.op_Implicit((Object)(object)button3.audio))
{
Object.Destroy((Object)(object)((Component)button3.audio).gameObject);
}
button3.audio = null;
}
}
button3.pressedLast = flag;
}
}
private void Fire(BtnType type)
{
if (Object.op_Implicit((Object)(object)tv))
{
switch (type)
{
case BtnType.Switch:
tv.Switch();
break;
case BtnType.Play:
tv.Play();
break;
case BtnType.Next:
tv.Next();
break;
case BtnType.VolumeUp:
tv.VolumeUp();
break;
case BtnType.VolumeDown:
tv.VolumeDown();
break;
}
}
}
private BtnType Classify(string name)
{
string text = name.ToLowerInvariant();
if (text.Contains("switch") || text.Contains("开关") || text.Contains("电源"))
{
return BtnType.Switch;
}
if (text.Contains("play") || text.Contains("播放") || text.Contains("暂停"))
{
return BtnType.Play;
}
if (text.Contains("next") || text.Contains("下一"))
{
return BtnType.Next;
}
if (text.Contains("volumeup") || text.Contains("音量+") || (text.Contains("volume") && (text.Contains("up") || text.Contains("+") || text.Contains("increase") || text.Contains("加"))))
{
return BtnType.VolumeUp;
}
if (text.Contains("volumedown") || text.Contains("音量-") || (text.Contains("volume") && (text.Contains("down") || text.Contains("-") || text.Contains("decrease") || text.Contains("减"))))
{
return BtnType.VolumeDown;
}
return BtnType.None;
}
}
public class TVScript : MonoBehaviourPun
{
private readonly List<string> videoFilePaths = new List<string>();
private bool videosLoaded = false;
private MeshRenderer meshRenderer;
private AudioSource audioSource;
private VideoPlayer videoPlayer;
private Light tvLight;
private GameObject volumeRoot;
private Image volumeFill;
private float volumeUITimer;
private RenderTexture renderTexture;
private Texture originalTexture;
private Color originalColor;
private Vector2 originalOffset;
private Vector2 originalScale;
private int materialIndex = 2;
private Texture originalEmissionMap;
private Color originalEmissionColor;
private bool originalEmissionEnabled;
private int currentIndex;
private int lastIndex;
private bool powered;
private bool playing;
private void Awake()
{
//IL_0065: Unknown result type (might be due to invalid IL or missing references)
//IL_0076: Unknown result type (might be due to invalid IL or missing references)
//IL_0087: Unknown result type (might be due to invalid IL or missing references)
//IL_02e9: Unknown result type (might be due to invalid IL or missing references)
//IL_02ee: Unknown result type (might be due to invalid IL or missing references)
//IL_02f6: Unknown result type (might be due to invalid IL or missing references)
//IL_02fb: Unknown result type (might be due to invalid IL or missing references)
//IL_0303: Unknown result type (might be due to invalid IL or missing references)
//IL_0308: Unknown result type (might be due to invalid IL or missing references)
//IL_0327: Unknown result type (might be due to invalid IL or missing references)
//IL_032c: Unknown result type (might be due to invalid IL or missing references)
//IL_03aa: Unknown result type (might be due to invalid IL or missing references)
//IL_03b4: Expected O, but got Unknown
GameObject gameObject = ((Component)this).gameObject;
GameObject val = GameObject.Find("cctv");
if ((Object)(object)gameObject != (Object)null && (Object)(object)val != (Object)null)
{
Plugin.logger.LogInfo((object)"tv不为空!.");
gameObject.transform.SetParent(val.transform, false);
gameObject.transform.localPosition = new Vector3(3.756f, -1.947f, -0.724f);
gameObject.transform.localRotation = Quaternion.identity;
gameObject.transform.localScale = Vector3.one;
}
Transform val2 = ((Component)this).transform.Find("TVMesh");
if (Object.op_Implicit((Object)(object)val2))
{
meshRenderer = ((Component)val2).GetComponentInChildren<MeshRenderer>();
}
if (!Object.op_Implicit((Object)(object)meshRenderer))
{
meshRenderer = ((Component)this).GetComponentInChildren<MeshRenderer>();
}
Transform val3 = ((Component)this).transform.Find("Audio");
if (Object.op_Implicit((Object)(object)val3))
{
audioSource = ((Component)val3).GetComponentInChildren<AudioSource>();
}
if (!Object.op_Implicit((Object)(object)audioSource))
{
audioSource = ((Component)this).GetComponentInChildren<AudioSource>();
}
Transform val4 = ((Component)this).transform.Find("Video");
if (Object.op_Implicit((Object)(object)val4))
{
videoPlayer = ((Component)val4).GetComponentInChildren<VideoPlayer>();
}
if (!Object.op_Implicit((Object)(object)videoPlayer))
{
videoPlayer = ((Component)this).GetComponentInChildren<VideoPlayer>();
}
Transform val5 = ((Component)this).transform.Find("Light");
if (Object.op_Implicit((Object)(object)val5))
{
tvLight = ((Component)val5).GetComponent<Light>();
}
if (!Object.op_Implicit((Object)(object)tvLight))
{
tvLight = ((Component)this).GetComponentInChildren<Light>();
}
Transform val6 = ((Component)this).transform.Find("Canvas/Volume");
if (Object.op_Implicit((Object)(object)val6))
{
volumeRoot = ((Component)val6).gameObject;
Transform val7 = val6.Find("BG/Fill");
if (Object.op_Implicit((Object)(object)val7))
{
volumeFill = ((Component)val7).GetComponent<Image>();
}
if (Object.op_Implicit((Object)(object)volumeFill))
{
volumeFill.type = (Type)3;
volumeFill.fillMethod = (FillMethod)1;
volumeFill.fillOrigin = 0;
volumeFill.fillAmount = (Object.op_Implicit((Object)(object)audioSource) ? Mathf.Clamp01(audioSource.volume) : 0f);
}
volumeRoot.SetActive(false);
}
if (Object.op_Implicit((Object)(object)meshRenderer) && materialIndex >= 0 && materialIndex < ((Renderer)meshRenderer).materials.Length)
{
Material val8 = ((Renderer)meshRenderer).materials[materialIndex];
originalTexture = val8.mainTexture;
originalColor = val8.color;
originalOffset = val8.mainTextureOffset;
originalScale = val8.mainTextureScale;
if (val8.HasProperty("_EmissionColor"))
{
originalEmissionColor = val8.GetColor("_EmissionColor");
}
if (val8.HasProperty("_EmissionMap"))
{
originalEmissionMap = val8.GetTexture("_EmissionMap");
}
originalEmissionEnabled = val8.IsKeywordEnabled("_EMISSION");
}
if (Object.op_Implicit((Object)(object)videoPlayer))
{
videoPlayer.renderMode = (VideoRenderMode)2;
if (!Object.op_Implicit((Object)(object)renderTexture))
{
renderTexture = new RenderTexture(1920, 1080, 0);
}
videoPlayer.targetTexture = renderTexture;
videoPlayer.audioOutputMode = (VideoAudioOutputMode)1;
if (Object.op_Implicit((Object)(object)audioSource))
{
videoPlayer.EnableAudioTrack((ushort)0, true);
videoPlayer.SetTargetAudioSource((ushort)0, audioSource);
}
videoPlayer.playOnAwake = false;
videoPlayer.source = (VideoSource)1;
}
LoadVideoFiles();
}
private void Update()
{
if (Object.op_Implicit((Object)(object)volumeRoot) && volumeRoot.activeSelf && volumeUITimer > 0f)
{
volumeUITimer -= Time.deltaTime;
if (volumeUITimer <= 0f)
{
volumeRoot.SetActive(false);
}
}
}
private void VolumeUIShow()
{
if (powered)
{
if (Object.op_Implicit((Object)(object)volumeRoot))
{
volumeRoot.SetActive(true);
volumeUITimer = 2f;
}
if (Object.op_Implicit((Object)(object)volumeFill) && Object.op_Implicit((Object)(object)audioSource))
{
volumeFill.fillAmount = Mathf.Clamp01(audioSource.volume);
}
}
}
private void LoadVideoFiles()
{
string path = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) ?? string.Empty;
string text = Path.Combine(path, "Vedio");
string text2 = Path.Combine(path, "Video");
string path2 = (Directory.Exists(text) ? text : (Directory.Exists(text2) ? text2 : text));
if (!Directory.Exists(path2))
{
Directory.CreateDirectory(path2);
return;
}
string[] supportedExtensions = new string[5] { ".mp4", ".mov", ".webm", ".avi", ".wmv" };
List<string> list = (from file in Directory.GetFiles(path2)
where supportedExtensions.Contains(Path.GetExtension(file).ToLower())
orderby file
select file).ToList();
if (list.Count != 0)
{
videoFilePaths.Clear();
videoFilePaths.AddRange(list);
videosLoaded = true;
}
}
public void Switch()
{
if (SemiFunc.IsMasterClientOrSingleplayer())
{
bool flag = !powered;
if (!flag)
{
lastIndex = currentIndex;
}
int num = (flag ? lastIndex : currentIndex);
bool flag2 = flag;
if (SemiFunc.IsMultiplayer())
{
((MonoBehaviourPun)this).photonView.RPC("RPC_ApplyState", (RpcTarget)3, new object[3] { flag, flag2, num });
}
else
{
RPC_ApplyState(flag, flag2, num);
}
}
else
{
((MonoBehaviourPun)this).photonView.RPC("RPC_Switch", (RpcTarget)2, Array.Empty<object>());
}
}
public void Play()
{
if (!powered || (Object)(object)videoPlayer == (Object)null || (Object)(object)meshRenderer == (Object)null || !videosLoaded)
{
return;
}
if (SemiFunc.IsMasterClientOrSingleplayer())
{
bool flag = !playing;
if (SemiFunc.IsMultiplayer())
{
((MonoBehaviourPun)this).photonView.RPC("RPC_ApplyState", (RpcTarget)3, new object[3] { powered, flag, currentIndex });
}
else
{
RPC_ApplyState(powered, flag, currentIndex);
}
}
else
{
((MonoBehaviourPun)this).photonView.RPC("RPC_PlayToggle", (RpcTarget)2, Array.Empty<object>());
}
}
public void Next()
{
if (!powered || !videosLoaded)
{
return;
}
if (SemiFunc.IsMasterClientOrSingleplayer())
{
int num = (currentIndex + 1) % videoFilePaths.Count;
if (SemiFunc.IsMultiplayer())
{
((MonoBehaviourPun)this).photonView.RPC("RPC_ApplyState", (RpcTarget)3, new object[3] { true, true, num });
}
else
{
RPC_ApplyState(newPowered: true, newPlaying: true, num);
}
}
else
{
((MonoBehaviourPun)this).photonView.RPC("RPC_Next", (RpcTarget)2, Array.Empty<object>());
}
}
public void VolumeUp()
{
if (!Object.op_Implicit((Object)(object)audioSource) || !powered)
{
return;
}
if (SemiFunc.IsMasterClientOrSingleplayer())
{
float num = Mathf.Clamp01(audioSource.volume + 0.1f);
if (SemiFunc.IsMultiplayer())
{
((MonoBehaviourPun)this).photonView.RPC("RPC_SetVolume", (RpcTarget)3, new object[1] { num });
}
else
{
RPC_SetVolume(num);
}
VolumeUIShow();
}
else
{
((MonoBehaviourPun)this).photonView.RPC("RPC_VolumeUp", (RpcTarget)2, Array.Empty<object>());
}
}
public void VolumeDown()
{
if (!Object.op_Implicit((Object)(object)audioSource) || !powered)
{
return;
}
if (SemiFunc.IsMasterClientOrSingleplayer())
{
float num = Mathf.Clamp01(audioSource.volume - 0.1f);
if (SemiFunc.IsMultiplayer())
{
((MonoBehaviourPun)this).photonView.RPC("RPC_SetVolume", (RpcTarget)3, new object[1] { num });
}
else
{
RPC_SetVolume(num);
}
VolumeUIShow();
}
else
{
((MonoBehaviourPun)this).photonView.RPC("RPC_VolumeDown", (RpcTarget)2, Array.Empty<object>());
}
}
public void PowerOn()
{
//IL_001d: Unknown result type (might be due to invalid IL or missing references)
powered = true;
if (Object.op_Implicit((Object)(object)tvLight))
{
tvLight.color = Color.blue;
}
if ((Object)(object)videoPlayer != (Object)null && (Object)(object)meshRenderer != (Object)null && videosLoaded)
{
currentIndex = lastIndex;
StartPlayInternal();
}
}
public void PowerOff()
{
//IL_0024: Unknown result type (might be due to invalid IL or missing references)
Stop();
powered = false;
if (Object.op_Implicit((Object)(object)tvLight))
{
tvLight.color = Color.red;
}
}
public void Stop()
{
//IL_008f: Unknown result type (might be due to invalid IL or missing references)
//IL_009c: Unknown result type (might be due to invalid IL or missing references)
//IL_00a9: Unknown result type (might be due to invalid IL or missing references)
//IL_0115: Unknown result type (might be due to invalid IL or missing references)
if (Object.op_Implicit((Object)(object)videoPlayer))
{
videoPlayer.Stop();
}
if (Object.op_Implicit((Object)(object)audioSource))
{
audioSource.Stop();
}
if (Object.op_Implicit((Object)(object)meshRenderer) && materialIndex >= 0 && materialIndex < ((Renderer)meshRenderer).materials.Length)
{
Material val = ((Renderer)meshRenderer).materials[materialIndex];
val.mainTexture = originalTexture;
val.color = originalColor;
val.mainTextureOffset = originalOffset;
val.mainTextureScale = originalScale;
if (originalEmissionEnabled)
{
val.EnableKeyword("_EMISSION");
}
else
{
val.DisableKeyword("_EMISSION");
}
if (val.HasProperty("_EmissionMap"))
{
val.SetTexture("_EmissionMap", originalEmissionMap);
}
if (val.HasProperty("_EmissionColor"))
{
val.SetColor("_EmissionColor", originalEmissionColor);
}
}
playing = false;
}
private void StartPlayInternal()
{
//IL_00f5: Unknown result type (might be due to invalid IL or missing references)
//IL_010c: Unknown result type (might be due to invalid IL or missing references)
//IL_0119: Unknown result type (might be due to invalid IL or missing references)
//IL_0187: Unknown result type (might be due to invalid IL or missing references)
if (!videosLoaded || videoFilePaths.Count == 0)
{
return;
}
currentIndex = Mathf.Clamp(currentIndex, 0, videoFilePaths.Count - 1);
string text = videoFilePaths[currentIndex];
if (Object.op_Implicit((Object)(object)videoPlayer))
{
videoPlayer.source = (VideoSource)1;
videoPlayer.url = "file:///" + text.Replace("\\", "/");
}
if (Object.op_Implicit((Object)(object)meshRenderer))
{
Material[] materials = ((Renderer)meshRenderer).materials;
if (materialIndex >= 0 && materialIndex < materials.Length)
{
Material val = materials[materialIndex];
val.mainTexture = (Texture)(object)renderTexture;
val.color = Color.white;
val.mainTextureScale = new Vector2(1.77f, 3.18f);
val.mainTextureOffset = Vector2.zero;
val.globalIlluminationFlags = (MaterialGlobalIlluminationFlags)4;
val.EnableKeyword("_EMISSION");
if (val.HasProperty("_EmissionMap"))
{
val.SetTexture("_EmissionMap", (Texture)(object)renderTexture);
}
if (val.HasProperty("_EmissionColor"))
{
val.SetColor("_EmissionColor", new Color(0.2f, 0.2f, 0.2f));
}
if (val.HasProperty("_Metallic"))
{
val.SetFloat("_Metallic", 0f);
}
if (val.HasProperty("_Glossiness"))
{
val.SetFloat("_Glossiness", 0f);
}
if (val.HasProperty("_Smoothness"))
{
val.SetFloat("_Smoothness", 0f);
}
}
}
if (Object.op_Implicit((Object)(object)videoPlayer))
{
videoPlayer.Play();
}
playing = true;
}
private void PauseInternal()
{
if (Object.op_Implicit((Object)(object)videoPlayer))
{
videoPlayer.Pause();
}
if (Object.op_Implicit((Object)(object)audioSource))
{
audioSource.Pause();
}
playing = false;
}
[PunRPC]
private void RPC_ApplyState(bool newPowered, bool newPlaying, int newIndex)
{
//IL_0059: Unknown result type (might be due to invalid IL or missing references)
//IL_0052: Unknown result type (might be due to invalid IL or missing references)
newIndex = Mathf.Clamp(newIndex, 0, (videoFilePaths.Count != 0) ? (videoFilePaths.Count - 1) : 0);
powered = newPowered;
currentIndex = newIndex;
if (Object.op_Implicit((Object)(object)tvLight))
{
tvLight.color = (powered ? Color.blue : Color.red);
}
if (!powered)
{
lastIndex = currentIndex;
Stop();
playing = false;
}
else if (newPlaying)
{
StartPlayInternal();
}
else
{
PauseInternal();
}
}
[PunRPC]
private void RPC_Switch()
{
if (SemiFunc.IsMasterClient())
{
bool flag = !powered;
if (!flag)
{
lastIndex = currentIndex;
}
int num = (flag ? lastIndex : currentIndex);
bool flag2 = flag;
((MonoBehaviourPun)this).photonView.RPC("RPC_ApplyState", (RpcTarget)3, new object[3] { flag, flag2, num });
}
}
[PunRPC]
private void RPC_PlayToggle()
{
if (SemiFunc.IsMasterClient() && powered && !((Object)(object)videoPlayer == (Object)null) && !((Object)(object)meshRenderer == (Object)null) && videosLoaded)
{
bool flag = !playing;
((MonoBehaviourPun)this).photonView.RPC("RPC_ApplyState", (RpcTarget)3, new object[3] { powered, flag, currentIndex });
}
}
[PunRPC]
private void RPC_Next()
{
if (SemiFunc.IsMasterClient() && powered && videosLoaded)
{
int num = (currentIndex + 1) % videoFilePaths.Count;
((MonoBehaviourPun)this).photonView.RPC("RPC_ApplyState", (RpcTarget)3, new object[3] { true, true, num });
}
}
[PunRPC]
private void RPC_SetVolume(float v)
{
if (Object.op_Implicit((Object)(object)audioSource))
{
audioSource.volume = Mathf.Clamp01(v);
VolumeUIShow();
}
}
[PunRPC]
private void RPC_VolumeUp()
{
if (SemiFunc.IsMasterClient() && Object.op_Implicit((Object)(object)audioSource))
{
float num = Mathf.Clamp01(audioSource.volume + 0.1f);
((MonoBehaviourPun)this).photonView.RPC("RPC_SetVolume", (RpcTarget)3, new object[1] { num });
}
}
[PunRPC]
private void RPC_VolumeDown()
{
if (SemiFunc.IsMasterClient() && Object.op_Implicit((Object)(object)audioSource))
{
float num = Mathf.Clamp01(audioSource.volume - 0.1f);
((MonoBehaviourPun)this).photonView.RPC("RPC_SetVolume", (RpcTarget)3, new object[1] { num });
}
}
}