Esempio n. 1
0
        public virtual void updatePosition(Process process, long now)
        {
            if (m_Rows.Count == 0)
            {
                return;
            }

            if (Player.Hero == null || Player.Hero.Map == null || Player.Hero.Map.Length == 0)
            {
                return;
            }

            now /= 10000;

            if (m_MaxDistance > 0.0)
            {
                float distance  = Player.Hero.Position.getDistance(this.m_Position);
                bool  tempShown = distance <= m_MaxDistance;
                tempShown &= Player.Hero.Map == m_World;

                setTempShown(tempShown);
            }
            else if (Player.Hero.Map != m_World)
            {
                setTempShown(false);
            }
            else
            {
                setTempShown(true);
            }


            if (m_TempShown)
            {
                zCCamera camera = zCCamera.getActiveCamera(process);
                zCView   screen = m_View;// zCView.GetStartscreen(process);// zCView.GetScreen(Process.ThisProcess());
                //zCCamera.getActiveCamera(process)

                int fontY = screen.FontY();

                using (zVec3 gPosition = zVec3.Create(process))
                {
                    gPosition.X = m_Position.X; gPosition.Y = m_Position.Y; gPosition.Z = m_Position.Z;


                    using (zVec3 newPos = camera.CamMatrix * gPosition)
                    {
                        if (newPos.Z > 0.0f)
                        {
                            float x = 0, y = 0;
                            camera.Project(newPos, out x, out y);
                            Text3DRow[] rows = m_Rows.ToArray();
                            for (int i = 0; i < rows.Length; i++)
                            {
                                int fontWidth  = screen.FontSize(rows[i].Text + "\n");
                                int fontHeight = (rows.Length - (i)) * fontY;

                                int x2 = 0, y2 = 0;
                                x2 = screen.anx((int)x) - fontWidth / 2;
                                y2 = screen.any((int)y) - fontHeight;

                                rows[i].GText.PosX = x2;
                                rows[i].GText.PosY = y2;

                                if (rows[i].Time > 0)
                                {
                                    long t = now - rows[i].InsertTime;
                                    if (t > rows[i].Time)
                                    {
                                        removeRow(rows[i]);
                                    }

                                    if (t > rows[i].Time - rows[i].BlendTime)
                                    {
                                        float t2    = t - (rows[i].Time - rows[i].BlendTime);
                                        float alpha = 1.0f - (1.0f / rows[i].BlendTime * t2);
                                        rows[i].GText.Color.A = (byte)(rows[i].Color.A * alpha);
                                    }
                                }
                            }
                        }
                        else
                        {
                            for (int i = 0; i < m_Rows.Count; i++)
                            {
                                m_Rows[i].GText.PosX = 0x2000;
                                m_Rows[i].GText.PosY = 0x2000;
                            }
                        }
                    }
                }
            }
        }