{"TotalCount":6,"Files":[{"Ident":"cseliot.truth","Path":".obj/__compiler_extra.cs","FileName":"__compiler_extra.cs","PackageType":"game","CodeKind":"Game","AssetVersionId":442631,"IsPrivate":false,"Code":"global using static Sandbox.Internal.GlobalGameNamespace;\r\nglobal using Microsoft.AspNetCore.Components;\r\nglobal using Microsoft.AspNetCore.Components.Rendering;\r\n[assembly: global::System.Reflection.AssemblyMetadata( \u0022AddonTitle\u0022, \u0022The Circle of Fear\u0022 )]\r\n[assembly: global::System.Reflection.AssemblyMetadata( \u0022AddonIdent\u0022, \u0022truth\u0022 )]\r\n[assembly: global::System.Reflection.AssemblyMetadata( \u0022OrgIdent\u0022, \u0022cseliot\u0022 )]\r\n[assembly: global::System.Reflection.AssemblyMetadata( \u0022Ident\u0022, \u0022cseliot.truth\u0022 )]\r\n[assembly: global::System.Reflection.AssemblyMetadata( \u0022EngineVersion\u0022, \u002232\u0022 )]\r\n[assembly: global::System.Reflection.AssemblyMetadata( \u0022EngineMinorVersion\u0022, \u00221\u0022 )]\r\n\r\n[assembly: System.Runtime.Versioning.TargetFramework( \u0022.NETCoreApp,Version=v9.0\u0022, FrameworkDisplayName = \u0022.NET 9.0\u0022 )]\r\n[assembly: global::System.Reflection.AssemblyMetadata( \u0022CompileTime\u0022, \u00222026-10-29T19:53:54.2783297Z\u0022 )]\r\n[assembly: global::System.Reflection.AssemblyVersion(\u00220.0.110.0\u0022)]\r\n[assembly: global::System.Reflection.AssemblyFileVersion(\u00220.0.110.0\u0022)]"},{"Ident":"cseliot.truth","Path":"CustomTopDownController.cs","FileName":"CustomTopDownController.cs","PackageType":"game","CodeKind":"Game","AssetVersionId":442631,"IsPrivate":false,"Code":"public sealed class CustomTopDownController : Component\r\n{\r\n\t[RequireComponent] PlayerController Controller { get; set; }\r\n\r\n\tprotected override void OnFixedUpdate()\r\n\t{\r\n\t\t// Lets make the player move when we press WASD\r\n\t\tvar speed = Input.Down( \u0022Run\u0022 ) ? Controller.RunSpeed : Controller.WalkSpeed;\r\n\t\tController.WishVelocity = Input.AnalogMove * speed;\r\n\t\t\r\n\t\t// And rotate the player to face the direction of the movement\r\n\t\tif ( Controller.WishVelocity.LengthSquared \u003E 0 )\r\n\t\t{\r\n\t\t\tvar targetAngle = Controller.WishVelocity.EulerAngles;\r\n\t\t\tController.EyeAngles = Rotation.Slerp( Controller.EyeAngles, targetAngle, Time.Delta * 10f );\r\n\t\t}\r\n\t}\r\n\r\n\tprotected override void OnPreRender()\r\n\t{\r\n\t\t// This will update the camera\u0027s position so that it\u0027s up in the air and back a bit, looking down at an angle.\r\n\t\tScene.Camera.WorldPosition = Controller.WorldPosition \u002B Vector3.Up * 1024f \u002B Vector3.Backward * 256f;\r\n\t\tScene.Camera.WorldRotation = new Angles( 75, 0, 0 );\r\n\t}\r\n}\r\n\r\n\r\n\r\n"},{"Ident":"cseliot.truth","Path":"GameManager.cs","FileName":"GameManager.cs","PackageType":"game","CodeKind":"Game","AssetVersionId":442631,"IsPrivate":false,"Code":"// Project: truth\n// File:    GameManager.cs\n// Author:  cseliot\n// Created: 2026.10.29.07.10.14\n// Edited: 2026.10.29.07.38.15\n// \n// Copyright (c) 2026 KiteLion Games, LLC. All rights reserved.\n// \n// This source code is the property of KiteLion Games, LLC and may not be\n// copied, distributed, modified, or used in any way without prior written\n// permission from KiteLion Games, LLC.\n// \n// Description:\n// [Provide a brief description of what this file/class does.]\n// \n// License:\n// This code is provided \u0022as is,\u0022 without warranty of any kind, express or\n// implied, including but not limited to the warranties of merchantability,\n// fitness for a particular purpose, and noninfringement. In no event shall\n// the authors or copyright holders be liable for any claim, damages, or\n// other liability, whether in an action of contract, tort, or otherwise,\n// arising from, out of, or in connection with the software or the use or\n// other dealings in the software.\n\nusing System;\nusing System.Runtime.CompilerServices;\n\nnamespace Sandbox;\n\npublic sealed class GameManager : Component\n{\n\n\tpublic enum GameState\n\t{\n\t\tWaiting,\n\t\tPreRound,\n\t\tInRound,\n\t\tPostRound,\n\t}\n\t\n\tpublic GameState _gameState;\n\t\n\t[Property] public int SEED;\n\t[Property] public GameObject Floor;\n\t[Property] public TextRenderer WorldText;\n\n\tprivate float _inRoundMaxTime = 34;\n\tprivate float _inRoundStartTime;\n\t\n\t// private Text\n\t\n\tprotected override void OnStart()\n\t{\n\t\t\n\t\t_gameState = GameState.Waiting;\n\t\tGame.SetRandomSeed( SEED );\n\t}\n\n\tprotected override void OnUpdate()\n\t{\n\t\tvar truthCCs = Scene.GetAllComponents\u003CTruthCC\u003E().ToArray();\n\n\t\tif ( truthCCs.Length \u003C= 1 )\n\t\t\t_gameState = GameState.Waiting;\n\t\t\n\t\t// Log.Info(\u0022Game State: \u0022 \u002B _gameState);\n\t\tif ( _gameState == GameState.Waiting )\n\t\t{\n\t\t\tWorldText.Text = \u0022Waiting for players ...\u0022;\n\t\t\tif ( truthCCs.Length \u003E 1)\n\t\t\t{\n\t\t\t\t// Log.Info(truthCCs.Length \u002B \u0022 player(s) found\u0022);\n\t\t\t\tvar everyoneReady = true;\n\t\t\t\tforeach ( var truthCC in truthCCs )\n\t\t\t\t{\n\t\t\t\t\tif ( truthCC.IsReady == false )\n\t\t\t\t\t{\n\t\t\t\t\t\teveryoneReady = false;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif ( everyoneReady )\n\t\t\t\t{\n\t\t\t\t\t_gameState = GameState.PreRound;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( _gameState == GameState.PreRound )\n\t\t{\n\t\t\tWorldText.Text = \u0022Choosing Random Player ...\u0022;\n\t\t\tif( Networking.IsHost )\n\t\t\t{\n\t\t\t\tvar randPlayer = Game.Random.Next( 0, truthCCs.Length ); \n\t\t\t\tvar truthingPlayerID = truthCCs.ElementAt(randPlayer).Network.OwnerId;\n\t\t\t\tHelperSetModeInRound( truthingPlayerID );\n\t\t\t}\n\t\t}\n\t\t\n\t\tif ( _gameState == GameState.InRound )\n\t\t{\n\t\t\tWorldText.Text = \u0022\u0022 \u002B (_inRoundStartTime \u002B _inRoundMaxTime - Time.Now).FloorToInt();\n\t\t\tif( Networking.IsHost) \n\t\t\t{\n\t\t\t\tif( truthCCs.Length \u003E= 1 \u0026\u0026 truthCCs.All( t =\u003E t.IsAcceptingTruth || t.PlayerState == TruthCC.EPlayerState.Truthing ) )\n\t\t\t\t\tHelperSetModePostRound(truthCCs);\n\t\t\t\telse if ( Time.Now - _inRoundStartTime \u003E _inRoundMaxTime )\n\t\t\t\t\tHelperKillTruthingPlayer(truthCCs);\n\t\t\t}\n\t\t}\n\n\t}\n\t[Rpc.Broadcast]\n\tprivate void HelperKillTruthingPlayer( TruthCC[] truthCCs )\n\t{\n\t\tforeach ( var truthCC in truthCCs )\n\t\t{\n\t\t\tif ( truthCC.PlayerState == TruthCC.EPlayerState.Truthing )\n\t\t\t{\n\t\t\t\t// if(truthCC.Network.IsOwner)\n\t\t\t\t// \tFloor.Enabled = false;\n\t\t\t\ttruthCC.GameObject.Tags.Add(\u0022notsolid\u0022);\n\t\t\t\ttruthCC.GameObject.GetComponent\u003CTruthCC\u003E().Destroy();\n\t\t\t}\n\t\t}\n\t}\n\n\t[Rpc.Broadcast]\n\tprivate void HelperSetModeInRound( Guid truthingPlayerID )\n\t{\n\t\t_gameState = GameState.InRound;\n\t\t_inRoundStartTime = Time.Now;\n\t\tvar truthCCs = Scene.GetAllComponents\u003CTruthCC\u003E().ToArray();\n\t\tforeach ( var player in truthCCs )\n\t\t{\n\t\t\tif ( player.Network.OwnerId == truthingPlayerID )\n\t\t\t\tplayer.PlayerState = TruthCC.EPlayerState.Truthing;\n\t\t\telse\n\t\t\t\tplayer.PlayerState = TruthCC.EPlayerState.Voting;\n\t\t}\n\t}\n\t\n\t[Rpc.Broadcast]\n\tprivate void HelperSetModePostRound( TruthCC[] truthCCs)\n\t{\n\t\t_gameState = GameState.PreRound;\n\t\tLog.Info(\u0022IN POST ROUND!\u0022);\n\t\tforeach ( var player in truthCCs )\n\t\t{\n\t\t\tplayer.PlayerState = TruthCC.EPlayerState.Waiting;\n\t\t\tplayer.IsAcceptingTruth = false;\n\t\t}\n\t}\n}\n\n"},{"Ident":"cseliot.truth","Path":"RotateMe.cs","FileName":"RotateMe.cs","PackageType":"game","CodeKind":"Game","AssetVersionId":442631,"IsPrivate":false,"Code":"// Project: truth\r\n// File:    RotateMe.cs\r\n// Author:  cseliot\r\n// Created: 2026.10.29.17.10.03\r\n// Edited: 2026.10.29.17.33.03\r\n// \r\n// Copyright (c) 2026 KiteLion Games, LLC. All rights reserved.\r\n// \r\n// This source code is the property of KiteLion Games, LLC and may not be\r\n// copied, distributed, modified, or used in any way without prior written\r\n// permission from KiteLion Games, LLC.\r\n// \r\n// Description:\r\n// [Provide a brief description of what this file/class does.]\r\n// \r\n// License:\r\n// This code is provided \u0022as is,\u0022 without warranty of any kind, express or\r\n// implied, including but not limited to the warranties of merchantability,\r\n// fitness for a particular purpose, and noninfringement. In no event shall\r\n// the authors or copyright holders be liable for any claim, damages, or\r\n// other liability, whether in an action of contract, tort, or otherwise,\r\n// arising from, out of, or in connection with the software or the use or\r\n// other dealings in the software.\r\n\r\nnamespace Sandbox;\r\n\r\npublic sealed class RotateMe : Component\r\n{\r\n\t[Property] public float Speed { get; set; }\r\n\t[Property] public float Denominator { get; set; }\r\n\r\n\tprotected override void OnStart()\r\n\t{\r\n\r\n\t}\r\n\r\n\tprotected override void OnFixedUpdate()\r\n\t{\r\n\t\tLocalRotation *= Rotation.FromPitch( Speed / Denominator);\r\n\t}\r\n}\r\n\r\n"},{"Ident":"cseliot.truth","Path":"Assembly.cs","FileName":"Assembly.cs","PackageType":"game","CodeKind":"Game","AssetVersionId":442631,"IsPrivate":false,"Code":"global using Sandbox;\r\nglobal using System.Collections.Generic;\r\nglobal using System.Linq;\r\n"},{"Ident":"cseliot.truth","Path":"TruthCC.cs","FileName":"TruthCC.cs","PackageType":"game","CodeKind":"Game","AssetVersionId":442631,"IsPrivate":false,"Code":"// Project: truth\r\n// File:    TruthCC.cs\r\n// Author:  cseliot\r\n// Created: 2026.10.29.07.10.28\r\n// Edited: 2026.10.29.07.40.28\r\n// \r\n// Copyright (c) 2026 KiteLion Games, LLC. All rights reserved.\r\n// \r\n// This source code is the property of KiteLion Games, LLC and may not be\r\n// copied, distributed, modified, or used in any way without prior written\r\n// permission from KiteLion Games, LLC.\r\n// \r\n// Description:\r\n// [Provide a brief description of what this file/class does.]\r\n// \r\n// License:\r\n// This code is provided \u0022as is,\u0022 without warranty of any kind, express or\r\n// implied, including but not limited to the warranties of merchantability,\r\n// fitness for a particular purpose, and noninfringement. In no event shall\r\n// the authors or copyright holders be liable for any claim, damages, or\r\n// other liability, whether in an action of contract, tort, or otherwise,\r\n// arising from, out of, or in connection with the software or the use or\r\n// other dealings in the software.\r\n\r\nnamespace Sandbox;\r\n\r\npublic sealed class TruthCC : Component\r\n{\r\n\t[Property, Sync] public bool IsReady { get; set; }\r\n\t[Property, Sync] public bool IsAcceptingTruth { get; set; }\r\n\r\n\t[Property] private float sitBox { get; set; }\r\n\t\r\n\tprivate CameraComponent _camera;\r\n\r\n\tpublic enum EPlayerState\r\n\t{\r\n\t\tWaiting,\r\n\t\tVoting,\r\n\t\tTruthing\r\n\t}\r\n\r\n\t[Property, Sync] public EPlayerState PlayerState { get; set; } = EPlayerState.Waiting;\r\n\t\r\n\t[Property, Sync] public string VotingText { get; set; }\r\n\t\r\n\t[Property, Sync] public string TruthingText { get; set; }\r\n\t\r\n\t[Property, Sync] public string WaitingText { get; set; }\r\n\r\n\tprotected override void OnStart()\r\n\t{\r\n\t\tvar dressing = ClothingContainer.CreateFromConnection( Network.Owner);\r\n\t\tGetComponent\u003CDresser\u003E().ApplyAsync( dressing );\r\n\t}\r\n\r\n\tprotected override void OnUpdate()\r\n\t{\r\n\t\tif ( IsProxy )\r\n\t\t\treturn;\r\n\t\t\r\n\t\t// Log.Info(\u0022Player State: \u0022 \u002B PlayerState);\r\n\t\t\r\n\t\tif(_camera == null)\r\n\t\t\t_camera = Scene.Camera;\r\n\t\t\r\n\t\tif (Input.Keyboard.Pressed( \u0022R\u0022 ))\r\n\t\t{\r\n\t\t\tIsReady = true;\r\n\t\t\tLog.Info(\u0022Pressed R! - \u0022 \u002B Network.OwnerId);\r\n\t\t}\r\n\r\n\t\tif (Input.Keyboard.Pressed( \u0022P\u0022 ) \u0026\u0026 PlayerState == EPlayerState.Voting)\r\n\t\t{\r\n\t\t\tIsAcceptingTruth = !IsAcceptingTruth;\r\n\t\t\tLog.Info(\u0022Pressed P! - \u0022 \u002B Network.OwnerId);\r\n\t\t}\r\n\r\n\t\t// GetComponent\u003CPlayerController\u003E().Tooltips\r\n\t\t\r\n\t\tDrawOnScreen();\r\n\t}\r\n\r\n\tprivate void DrawOnScreen()\r\n\t{\r\n\t\tif( _camera == null )\r\n\t\t\tLog.Error(\u0022Scene Camera never found!\u0022);\r\n\r\n\t\tvar screenSize = _camera!.ScreenRect.Size;\r\n\t\tfloat scale = _camera!.ScreenRect.Size.y / 1080f;\r\n\r\n\t\tusing var painter = _camera.BeginHud();\r\n\r\n\t\tpainter.TextStyle = new TextStyle()\r\n\t\t{\r\n\t\t\tFontName = \u0022Poppins\u0022, FontSize = 32 * scale, Color = Color.White, Alignment = TextFlag.Center | TextFlag.DontClip,\r\n\t\t};\r\n\t\tstring speakingText = PlayerState == EPlayerState.Truthing ? TruthingText : VotingText;\r\n\t\tspeakingText = PlayerState == EPlayerState.Waiting ? WaitingText : speakingText;\r\n\t\tspeakingText = IsAcceptingTruth ? \u0022You believe them.\u0022 : speakingText;\r\n\t\tspeakingText = IsReady \u0026\u0026 PlayerState == EPlayerState.Waiting ? \u0022You are Ready.\u0022 : speakingText;\r\n\t\tspeakingText = Scene.GetAllComponents\u003CGameManager\u003E().First()._gameState == GameManager.GameState.Waiting ? WaitingText : speakingText;\r\n\t\tpainter.Text(\u0022\u0022 \u002B speakingText, new Rect(500 * scale, 50 * scale, 400 * scale, 400 * scale)  );\r\n\r\n\t\tif ( GetComponent\u003CPlayerController\u003E().Tooltips.Count \u003E 0 \u0026\u0026\r\n\t\t     GetComponent\u003CPlayerController\u003E().Tooltips.Any( t =\u003E t.Title.Contains( \u0022Sit\u0022 ) ) )\r\n\t\t{\r\n\t\t\tvar sitBoxW = 400 * scale;\r\n\t\t\tvar sitBoxH = 400 * scale;\r\n\t\t\tpainter.TextStyle = new TextStyle()\r\n\t\t\t{\r\n\t\t\t\tFontName = \u0022Poppins\u0022, FontSize = 32 * 4 * scale, Color = Color.White, Alignment = TextFlag.RightBottom | TextFlag.DontClip,\r\n\t\t\t};\r\n\t\t\tpainter.Text( \u0022Sit: E Key\u0022, new Rect( screenSize.x - sitBoxW - 50 * scale, screenSize.y - sitBoxH - 50 * scale, sitBoxW, sitBoxH ) );\r\n\t\t}\r\n\r\n\t}\r\n}\r\n\r\n"}]}