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; } } } } } }