Exemple #1
0
        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();
        }
Exemple #2
0
        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);
        }
Exemple #3
0
        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);
        }
Exemple #4
0
        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);
        }
Exemple #5
0
 public static ChunkRenderer GetChunkRenderer(this ClientMain client) => client.GetField <ChunkRenderer>("chunkRenderer");
Exemple #6
0
 public static ClientPlatformAbstract GetClientPlatformAbstract(this ClientMain client) => client.GetField <ClientPlatformAbstract>("Platform");