public void OnRenderFrame3D(float dt) { if (!_game.GetField <bool>("ShouldRender2DOverlays") || _cameraPathModelRef == null) { return; } var prog = ShaderPrograms.Autocamera; prog.Use(); _platform.CallMethod("GLLineWidth", 2); _platform.CallMethod("BindTexture2d", 0); _game.GlPushMatrix(); _game.GlLoadMatrix(_game.GetField <PlayerCamera>("MainCamera").GetField <double[]>("CameraMatrixOrigin")); var cameraPos = _game.EntityPlayer.CameraPos; _game.GlTranslate( (float)(_origin.X - cameraPos.X), (float)(_origin.Y - cameraPos.Y), (float)(_origin.Z - cameraPos.Z) ); prog.ProjectionMatrix = _game.CurrentProjectionMatrix; prog.ModelViewMatrix = _game.CurrentModelViewMatrix; _platform.CallMethod("RenderMesh", _cameraPathModelRef); _game.GlPopMatrix(); prog.Stop(); }
public static int LoadTextureArray(this ClientMain game, AssetLocation[] locations, int width, int height) { var Platform = game.GetField <ClientPlatformWindows>("Platform"); BitmapRef[] bmps = new BitmapRef[locations.Length]; for (int i = 0; i < locations.Length; i++) { var name = locations[i].WithPathPrefixOnce("textures/"); byte[] assetData = Platform.AssetManager.TryGet(name)?.Data; if (assetData == null) { return(0); } bmps[i] = Platform.BitmapCreateFromPng(assetData, assetData.Length); } int id = Platform.LoadTextureArray(bmps, width, height); for (int i = 0; i < bmps.Length; i++) { bmps[i].Dispose(); } return(id); }
public SystemCamStudio(ClientMain game) : base(game) { _game = game; _capi = (ICoreClientAPI)game.Api; InitModel(); _platform = game.GetField <ClientPlatformAbstract>("Platform"); _capi.UnregisterCommand("cam"); _capi.RegisterCommand("cam", "Cinematic Camera Studio", "", CmdCam); var eventManager = game.GetField <ClientEventManager>("eventManager"); eventManager.CallMethod("RegisterRenderer", new DummyRenderer { action = OnRenderFrame3D }, EnumRenderStage.Opaque, "cinecam", 0.7f); eventManager.CallMethod("RegisterRenderer", new DummyRenderer { action = OnFinalizeFrame }, EnumRenderStage.Done, "cinecam-done", 0.98f); }
private static bool Patch_SystemRenderPlayerEffects_onBeforeRender( ref SystemRenderPlayerEffects __instance, float dt, ref ClientMain ___game, ref int ___maxDynLights, ref NormalizedSimplexNoise ___noisegen, ref float ___curFreezingVal, ref long ___damangeVignettingUntil, ref int ___duration, float ___strength) { var shUniforms = ___game.GetField <DefaultShaderUniforms>("shUniforms"); var mouseYaw = ___game.GetField <float>("mouseYaw"); var mousePitch = ___game.GetField <float>("mousePitch"); shUniforms.PointLightsCount = 0; var plrPos = ___game.EntityPlayer.Pos.XYZ; var array = ___game.GetEntitiesAround(plrPos, 60f, 60f, e => e.LightHsv != null && e.LightHsv[2] > 0); if (array.Length > ___maxDynLights) { array = (from e in array orderby e.Pos.SquareDistanceTo(plrPos) select e).ToArray(); } foreach (var entity in array) { var lightHsv = entity.LightHsv; __instance.CallMethod("AddPointLight", lightHsv, entity.Pos); } if (Api.IsGamePaused) { return(false); } var treeAttribute = ___game.EntityPlayer.WatchedAttributes.GetTreeAttribute("health"); var num = treeAttribute.GetFloat("currenthealth") / treeAttribute.GetFloat("maxhealth"); var num2 = Math.Max(0f, (0.23f - num) * 1f / 0.18f); var num3 = 0f; if (num2 > 0f) { var num4 = (float)(___game.InWorldEllapsedMs / 1000.0); var num5 = (float)___noisegen.Noise(12412.0, num4 / 2f) * 0.5f + (float)Math.Pow(Math.Abs(GameMath.Sin(num4 * 1f / 0.7f)), 30.0) * 0.5f; num3 = Math.Min(num2 * 1.5f, 1f) * (num5 * 0.75f + 0.5f); if (___game.EntityPlayer.Alive && Settings.AllowCameraShake) { shUniforms.ExtraSepia = GameMath.Clamp(num2 * (float)___noisegen.Noise(0.0, num4 / 3f) * 1.2f, 0f, 1.2f); if (___game.Rand.NextDouble() < 0.01) { ___game.AddCameraShake(0.15f * num2); } ___game.SetField("mouseYaw", mouseYaw + num2 * (float)(___noisegen.Noise(76.0, num4 / 50f) - 0.5) * 0.003f); var num6 = num2 * (float)(___noisegen.Noise(num4 / 50f, 987.0) - 0.5) * 0.003f; ___game.EntityPlayer.Pos.Pitch += num6; ___game.SetField("mousePitch", mousePitch + num6); } } else { shUniforms.ExtraSepia = 0f; } var num7 = GameMath.Clamp((int)(___damangeVignettingUntil - ___game.ElapsedMilliseconds), 0, ___duration); shUniforms.DamageVignetting = GameMath.Clamp(GameMath.Clamp(___strength / 2f, 0.5f, 3.5f) * (num7 / (float)Math.Max(1, ___duration)) + num3, 0f, 1.5f); var @float = ___game.EntityPlayer.WatchedAttributes.GetFloat("freezingEffectStrength"); ___curFreezingVal += (@float - ___curFreezingVal) * dt; if (___curFreezingVal > 0.1 && Api.World.Player.CameraMode == EnumCameraMode.FirstPerson && Settings.AllowCameraShake) { var num8 = (float)(___game.InWorldEllapsedMs / 1000.0); ___game.SetField("mouseYaw", mouseYaw + ClientSettings.CameraShakeStrength * (float)(Math.Max(0.0, ___noisegen.Noise(num8, 12.0) - 0.40000000596046448) * Math.Sin(num8 * 90f) * 0.01) * GameMath.Clamp(___curFreezingVal * 3f, 0f, 1f)); } shUniforms.FrostVignetting = ___curFreezingVal; return(false); }
public static ChunkRenderer GetChunkRenderer(this ClientMain client) => client.GetField <ChunkRenderer>("chunkRenderer");
public static ClientPlatformAbstract GetClientPlatformAbstract(this ClientMain client) => client.GetField <ClientPlatformAbstract>("Platform");