Files
sbox-public/engine/Sandbox.Engine/Systems/Console/ConsoleSystem.cs
Garry Newman ca96c2a945 Make Inventory, BaseWeapon, AmmoResource, Screenshake first party (#5245)
https://sbox.game/dev/doc/gameplay/inventory-weapons/

Added

InventoryComponent - a slot based inventory, hotbar or shared bucket slots, with a starting loadout
BaseInventoryItem - base class for inventory items, with hooks to veto switching, holstering and dropping
BaseWeapon - a GMod style base weapon - fire modes, magazines and reserve ammo, reloading, dry fire, ballistics, spread, crosshair and HUD
BaseWeaponModel - view/world model base with muzzle flash, brass ejection, tracers and animation hooks
Ammo types are resources (.ammo) - weapons share reserve pools by type, clamped to a max reserve
BaseWeapon.ShootBullets / ShootBullet - bullet tracing with damage, impulse and hitbox tags
Weapon hold types editor
Animgraph enum parameters can be set by option name - Renderer.Set( "holdtype", "pistol" )
NpcUsage on BaseWeapon - engagement range and burst behaviour so NPCs can use any weapon
ICameraModifier - cameras compose their view through an ordered modifier chain, read the result from CameraComponent.View
CameraEffectSystem - screen shake, directional punches and tilts, with world epicenter falloff - camera.AddShake / AddPunch / AddTilt
EnvShake component - shakes the view, rumbles controllers, kicks physics
TracerEffect - an animated tracer line, ITargetedEffect for effects that fly at a target
SceneAnchor - a world position that can follow an object or bone
SkinnedModelRenderer.GetClosestBone( worldPosition )
Vector3.WithAimCone can take a custom Random for reproducible spread
Improve/Fix

PlayerController searches parents for IPressable when pressing
PlayerController camera runs through the modifier chain - IEvents.PostCameraSetup is obsolete
SoundPlayer preview uses shortcuts - Space toggles playback, Ctrl+Space restarts
Fixed Radius( 0 ) traces missing everything
Fixed NRE in AssetPreviewWidget
Removed

Removed CameraComponent.ISceneCameraSetup (obsolete since October, nothing uses)
2026-07-04 12:46:59 +01:00

83 lines
2.3 KiB
C#

using Sandbox.Engine;
namespace Sandbox;
/// <summary>
/// A library to interact with the Console System.
/// </summary>
public static partial class ConsoleSystem
{
/// <summary>
/// Try to set a console variable. You will only be able to set variables that you have permission to set.
/// </summary>
public static void SetValue( string name, object value )
{
// Menu is allowed to access engine ConVars for settings, games can not
ConVarSystem.SetValue( name, value?.ToString(), Game.IsMenu );
}
/// <summary>
/// Get a console variable's value as a string.
/// </summary>
public static string GetValue( string name, string defaultValue = null )
{
// Menu is allowed to access engine ConVars for settings, games can not
return ConVarSystem.GetValue( name, defaultValue, Game.IsMenu );
}
/// <summary>
/// Forwards to <see cref="ChangeCallback.OnPropertySet{T}"/> so already-compiled code still
/// resolves.
/// </summary>
[System.ComponentModel.EditorBrowsable( System.ComponentModel.EditorBrowsableState.Never )]
[Obsolete( "Use ChangeCallback.OnPropertySet" )]
public static void OnChangePropertySet<T>( in WrappedPropertySet<T> p ) => ChangeCallback.OnPropertySet( p );
/// <summary>
/// When we update a ConVar in code, call the ConsoleSystem.
/// </summary>
public static void OnWrappedSet<T>( in WrappedPropertySet<T> p )
{
var previous = p.Getter();
if ( Equals( previous, p.Value ) )
return;
p.Setter( p.Value );
var value = p.Getter();
var convar = p.GetAttribute<ConVarAttribute>();
if ( convar is null ) return;
ConVarSystem.OnConVarChanged( convar.Name ?? p.PropertyName, value, previous );
}
/// <summary>
/// When we query a convar property
/// </summary>
public static T OnWrappedGet<T>( in WrappedPropertyGet<T> p )
{
var convar = p.GetAttribute<ConVarAttribute>();
// no convar found
if ( convar is null )
return p.Value;
// not replicated
if ( !convar.Flags.Contains( ConVarFlags.Replicated ) )
return p.Value;
var convarName = convar.Name ?? p.PropertyName;
//
// We have a replicated value in the string table, use it
//
if ( IGameInstanceDll.Current.TryGetReplicatedVarValue( convarName, out var replicatedValue ) )
{
return (T)replicatedValue.ToType( typeof( T ) );
}
return p.Value;
}
}