Example #1
0
        public EntityShapeRenderer(Entity entity, ICoreClientAPI api) : base(entity, api)
        {
            eagent = entity as EntityAgent;

            DoRenderHeldItem    = true;
            DisplayChatMessages = entity is EntityPlayer;

            TesselateShape();

            // For players the player data is not there yet, so we load the thing later
            if (!(entity is EntityPlayer))
            {
                nameTagRenderHandler = api.ModLoader.GetModSystem <EntityNameTagRendererRegistry>().GetNameTagRenderer(entity);
            }

            glitchAffected = true;// entity.Properties.Attributes?["glitchAffected"].AsBool(false) ?? false;

            entity.WatchedAttributes.OnModified.Add(new TreeModifiedListener()
            {
                path = "nametag", listener = OnNameChanged
            });
            OnNameChanged();
            api.Event.RegisterGameTickListener(UpdateDebugInfo, 250);
            OnDebugInfoChanged();

            if (DisplayChatMessages)
            {
                messageTextures        = new List <MessageTexture>();
                api.Event.ChatMessage += OnChatMessage;
            }

            api.Event.ReloadShapes += TesselateShape;
        }
Example #2
0
        public override void BeforeRender(float dt)
        {
            if (meshRefOpaque == null && meshRefOit == null)
            {
                return;
            }

            if (gearInv == null && eagent?.GearInventory != null)
            {
                registerSlotModified();
            }


            if (capi.IsGamePaused)
            {
                return;
            }

            if (player == null && entity is EntityPlayer)
            {
                player = capi.World.PlayerByUid((entity as EntityPlayer).PlayerUID) as IClientPlayer;

                nameTagRenderHandler = capi.ModLoader.GetModSystem <EntityNameTagRendererRegistry>().GetNameTagRenderer(entity);
                OnNameChanged();
            }

            isSpectator = player != null && player.WorldData.CurrentGameMode == EnumGameMode.Spectator;
            if (isSpectator)
            {
                return;
            }


            if (DisplayChatMessages && messageTextures.Count > 0)
            {
                MessageTexture tex = messageTextures.Last();
                if (capi.World.ElapsedMilliseconds > tex.receivedTime + 3500 + 100 * (tex.message.Length - 10))
                {
                    messageTextures.RemoveAt(messageTextures.Count - 1);
                    tex.tex.Dispose();

                    /*if (messageTextures.Count > 0)
                     * {
                     *  tex = messageTextures[messageTextures.Count - 1];
                     *  long msvisible = tex.receivedTime + 3500 + 100 * (tex.message.Length - 10) - capi.World.ElapsedMilliseconds;
                     *  tex.receivedTime += Math.Max(0, 1000 - msvisible);
                     * }*/
                }
            }
        }
Example #3
0
        public EntityShapeRenderer(Entity entity, ICoreClientAPI api) : base(entity, api)
        {
            eagent = entity as EntityAgent;

            DoRenderHeldItem    = true;
            DisplayChatMessages = entity is EntityPlayer;

            // For players the player data is not there yet, so we load the thing later
            if (!(entity is EntityPlayer))
            {
                nameTagRenderHandler = api.ModLoader.GetModSystem <EntityNameTagRendererRegistry>().GetNameTagRenderer(entity);
            }

            glitchAffected = true;// entity.Properties.Attributes?["glitchAffected"].AsBool(false) ?? false;
            glitchFlicker  = entity.Properties.Attributes?["glitchFlicker"].AsBool(false) ?? false;
            frostable      = entity.Properties.Attributes?["frostable"].AsBool(true) ?? true;

            entity.WatchedAttributes.OnModified.Add(new TreeModifiedListener()
            {
                path = "nametag", listener = OnNameChanged
            });
            OnNameChanged();
            api.Event.RegisterGameTickListener(UpdateDebugInfo, 250);
            OnDebugInfoChanged();

            if (DisplayChatMessages)
            {
                messageTextures        = new List <MessageTexture>();
                api.Event.ChatMessage += OnChatMessage;
            }

            api.Event.ReloadShapes += MarkShapeModified;

            getFrostAlpha = () =>
            {
                float temp = api.World.BlockAccessor.GetClimateAt(entity.Pos.AsBlockPos, EnumGetClimateMode.ForSuppliedDate_TemperatureOnly, api.World.Calendar.TotalDays).Temperature;
                return(GameMath.Clamp((Math.Max(0, -temp) - 5) / 5f, 0, 1));
            };
        }
Example #4
0
        public override void BeforeRender(float dt)
        {
            if (!shapeFresh)
            {
                TesselateShape();
            }

            lightrgbs = capi.World.BlockAccessor.GetLightRGBs((int)(entity.Pos.X + entity.SelectionBox.X1 - entity.OriginSelectionBox.X1), (int)entity.Pos.Y, (int)(entity.Pos.Z + entity.SelectionBox.Z1 - entity.OriginSelectionBox.Z1));

            if (entity.SelectionBox.Y2 > 1)
            {
                Vec4f lightrgbs2 = capi.World.BlockAccessor.GetLightRGBs((int)(entity.Pos.X + entity.SelectionBox.X1 - entity.OriginSelectionBox.X1), (int)entity.Pos.Y + 1, (int)(entity.Pos.Z + entity.SelectionBox.Z1 - entity.OriginSelectionBox.Z1));
                if (lightrgbs2.W > lightrgbs.W)
                {
                    lightrgbs = lightrgbs2;
                }
            }

            if (meshRefOpaque == null && meshRefOit == null)
            {
                return;
            }

            if (gearInv == null && eagent?.GearInventory != null)
            {
                registerSlotModified();
                shapeFresh = true;
            }


            if (capi.IsGamePaused)
            {
                return;
            }

            if (player == null && entity is EntityPlayer)
            {
                player = capi.World.PlayerByUid((entity as EntityPlayer).PlayerUID) as IClientPlayer;

                nameTagRenderHandler = capi.ModLoader.GetModSystem <EntityNameTagRendererRegistry>().GetNameTagRenderer(entity);
                OnNameChanged();
            }

            isSpectator = player != null && player.WorldData.CurrentGameMode == EnumGameMode.Spectator;
            if (isSpectator)
            {
                return;
            }


            if (DisplayChatMessages && messageTextures.Count > 0)
            {
                MessageTexture tex = messageTextures.Last();
                if (capi.World.ElapsedMilliseconds > tex.receivedTime + 3500 + 100 * (tex.message.Length - 10))
                {
                    messageTextures.RemoveAt(messageTextures.Count - 1);
                    tex.tex.Dispose();

                    /*if (messageTextures.Count > 0)
                     * {
                     *  tex = messageTextures[messageTextures.Count - 1];
                     *  long msvisible = tex.receivedTime + 3500 + 100 * (tex.message.Length - 10) - capi.World.ElapsedMilliseconds;
                     *  tex.receivedTime += Math.Max(0, 1000 - msvisible);
                     * }*/
                }
            }

            if (player != null)
            {
                calcSidewaysSwivelForPlayer(dt);
            }
            else
            {
                calcSidewaysSwivelForEntity(dt);
            }

            frostAlphaAccum += dt;
            if (frostAlphaAccum > 5)
            {
                frostAlphaAccum  = 0;
                targetFrostAlpha = getFrostAlpha();
            }
        }