Register for your free account! | Forgot your password?

You last visited: Today at 11:00

  • Please register to post and access all features, it's quick, easy and FREE!


[Release] Client-Interface {"illumina"}

Discussion on [Release] Client-Interface {"illumina"} within the Metin2 PServer Designs, Websites & Scripts forum part of the Metin2 Private Server category.

Reply
 
Old 03/17/2016, 20:01   #151
 
elite*gold: 4694
Join Date: Nov 2008
Posts: 1,218
Received Thanks: 4,728
Quote:
Originally Posted by xCPx View Post
Also ich bräuchte den HP / MP gauge jeweils als 100 einzelbilder mit foranschreitendem verlauf und bestenfalls statt mit schwarzem inneren transparent...
Ebenso den Recover Effekt.

Sonst sieht das schlussendlich einfach nicht gut aus...
Oi oi!

Ich habe für dich Beispiele angefertigt wie du die slices zu managen hast, bzw. managen solltest. Ich finde diese "Einzelbilderlogik" wirklich richtig schlecht, ich musste mich schon überwinden es bei der MP-Bar so zu slicen.

Im Anhang findest du Beispiele (Video, Photoshop Datei und ein Bild) wie du die Controls anordnen solltest und eine kleine Projektmappe (C#) wie man am besten die HP-Bar umsetzen sollte. - Ich kann leider nur C# und kein Python xD

Hier der Code ohne die Projektmappe:

Lg. Sora
Attached Files
File Type: zip explain.zip (3.10 MB, 126 views)
File Type: zip TPbar.zip (192.5 KB, 124 views)



King Sora is offline  
Thanks
2 Users
Old 03/17/2016, 22:05   #152
 
elite*gold: 0
Join Date: Apr 2015
Posts: 433
Received Thanks: 361
@, leider gibts keine solche leichte Rotate etc. Möglichkeit, er müsste gebenenfalls ein Image mit (.rotate, .paste, .crop) Zuschneiden / Drehen / Zuschneiden / Zurückdrehen bearbeiten.

Verstehe aber ohnehin zuwenig C# um deine Methode genau nachvollziehen zu können


#Metho is offline  
Old 03/17/2016, 22:37   #153
 
elite*gold: 47
Join Date: Feb 2012
Posts: 2,282
Received Thanks: 2,566
Quote:
Originally Posted by Lord Metho View Post
@, leider gibts keine solche leichte Rotate etc. Möglichkeit, er müsste gebenenfalls ein Image mit (.rotate, .paste, .crop) Zuschneiden / Drehen / Zuschneiden / Zurückdrehen bearbeiten.

Verstehe aber ohnehin zuwenig C# um deine Methode genau nachvollziehen zu können
Also Poccix hatte diese TP-Anzeige mit den Bildern bereits umsetzen können. Er hatte mit dem Interface ja bereits mal angefangen, der Code ist inzw. aber verschollen, vlt. findet er ihn ja nochmal, dann kann er ihn mit euch teilen.

MfG
Yiv is offline  
Old 03/17/2016, 22:49   #154
 
elite*gold: 20
Join Date: Jun 2011
Posts: 2,896
Received Thanks: 3,326
Quote:
Originally Posted by King Sora View Post
Oi oi!

Ich habe für dich Beispiele angefertigt wie du die slices zu managen hast, bzw. managen solltest. Ich finde diese "Einzelbilderlogik" wirklich richtig schlecht, ich musste mich schon überwinden es bei der MP-Bar so zu slicen.

Im Anhang findest du Beispiele (Video, Photoshop Datei und ein Bild) wie du die Controls anordnen solltest und eine kleine Projektmappe (C#) wie man am besten die HP-Bar umsetzen sollte. - Ich kann leider nur C# und kein Python xD

Lg. Sora
In C# / C++ ist das kein Problem, das weis ich selbst zu gut.
Jedoch ist es in der bestehenden Metin2 Funktionalität bisher leider nicht bzw kaum ohne grössere Performance Verluste möglich (Es sei denn der Code soll auch n C++ Part fürn Source beinhalten, dann ist das wiederum recht einfach)


Glaub mir freiwillig mach ichs auch nicht mit Bildern ^^


Ich sag nur gleich vorneweg: Das Tool von Avenue hat das ganze komisch convertiert.
z.B. haben die einzelnen Bilder immer einen minimalistischen "Rand" also ein Bereich der nicht vollkommen Transparent ist, das beeinträchtigt das Gesamtbild, allerdings hab ich grade nichts anderes, daher werd ich evtl später nochmal ein paar feinjustierungen machen.

Aktueller aufbau:

eine Art 2. ui.py in der z.B. die Taskbar als ganzes Vertreten ist, in dieser Klasse jedoch aufgeteilt.
z.B. Minimap: illumina.TaskBar.MiniMap


# Edit hab mich soeben entschlossen die Teile des Codes immer wieder zu posten, schliesslich bin ich schon länger aus Python raus und evtl findet jemand was, was man besser machen könnte:
Meine Bisherige Taskbar:


Code:
class TaskBar(Window):

	class MiniMap(Window):
		class MapTextToolTip(Window):
			def __init__(self):			
				ui.Window.__init__(self)

				textLine = ui.TextLine()
				textLine.SetParent(self)
				textLine.SetHorizontalAlignCenter()
				textLine.SetOutline()
				textLine.SetHorizontalAlignRight()
				textLine.Show()
				self.textLine = textLine

			def __del__(self):			
				ui.Window.__del__(self)

			def SetText(self, text):
				self.textLine.SetText(text)

			def SetTooltipPosition(self, PosX, PosY):
				if localeInfo.IsARABIC():
					w, h = self.textLine.GetTextSize()
					self.textLine.SetPosition(PosX - w - 5, PosY)
				else:
					self.textLine.SetPosition(PosX - 5, PosY)

			def SetTextColor(self, TextColor):
				self.textLine.SetPackedFontColor(TextColor)

			def GetTextSize(self):
				return self.textLine.GetTextSize()
		def __init__(self):
			ui.Window.__init__(self)
			self.AddFlag("not_pick")
			self.tooltipInfo = None
			self.btnAtlas = None
			self.Show()


		def OnUpdate(self):
			miniMap.UpdateAtlas()
			self.UpdateMiniMapToolTip()

		def UpdateMiniMapToolTip(self):
			(mouseX, mouseY) = wndMgr.GetMousePosition()
			if self.tooltipInfo:
				if True == CustomIsIn(mouseX, mouseY, self):
					(bFind, sName, iPosX, iPosY, dwTextColor) = miniMap.GetInfo(mouseX, mouseY)
					if bFind == 0:
						self.tooltipInfo.Hide()
					elif not self.CanSeeInfo:
						self.tooltipInfo.SetText("%s(%s)" % (sName, localeInfo.UI_POS_UNKNOWN))
						self.tooltipInfo.SetTooltipPosition(mouseX - 5, mouseY)
						self.tooltipInfo.SetTextColor(dwTextColor)
						self.tooltipInfo.Show()
					else:
						if localeInfo.IsARABIC() and sName[-1].isalnum():
							self.tooltipInfo.SetText("(%s)%d, %d" % (sName, iPosX, iPosY))
						else:
							self.tooltipInfo.SetText("%s(%d, %d)" % (sName, iPosX, iPosY))
						self.tooltipInfo.SetTooltipPosition(mouseX - 5, mouseY)
						self.tooltipInfo.SetTextColor(dwTextColor)
						self.tooltipInfo.Show()
				else:
					self.tooltipInfo.Hide()
		def AddToolTip(self, parent):
			self.tooltipInfo = self.MapTextToolTip()
			self.tooltipInfo.SetParent(parent)
			self.tooltipInfo.Hide()

		def OnRender(self):
			(x, y) = self.GetGlobalPosition()
			fx = float(x)
			fy = float(y)
			miniMap.Render(fx, fy)

		def HideAtlas(self):
			miniMap.HideAtlas()
		def BuildButtons(self, parent):
			self.btnAtlas = Button()
			self.btnAtlas.SetParent(parent)
			self.btnAtlas.SetUpVisual("illumina/controls/special/taskbar/btn_atlas_01_normal.tga")
			self.btnAtlas.SetOverVisual("illumina/controls/special/taskbar/btn_atlas_02_hover.tga")
			self.btnAtlas.SetDownVisual("illumina/controls/special/taskbar/btn_atlas_03_active.tga")
			self.btnAtlas.SetToolTipText(localeInfo.MINIMAP_SHOW_AREAMAP, 0, -25)
			self.btnAtlas.SetEvent(ui.__mem_func__(self.ShowAtlas))
			self.btnAtlas.SetPosition(191, 19)
			self.btnAtlas.Show()
		def ShowAtlas(self):
			miniMap.ShowAtlas()

		def CanSeeInfo(self):
			return True

		def GetMapsUnallowed(self):
			return {
		"metin2_map_monkeydungeon" : FALSE,
		"metin2_map_monkeydungeon_02" : FALSE,
		"metin2_map_monkeydungeon_03" : FALSE,
		"metin2_map_devilsCatacomb" : FALSE,
		}
	
	class ExpBar(Window):
		image = None
		class TextToolTip(ui.Window):
			def __init__(self):
				ui.Window.__init__(self, "TOP_MOST")

				textLine = ui.TextLine()
				textLine.SetParent(self)
				textLine.SetHorizontalAlignCenter()
				textLine.SetOutline()
				textLine.Show()
				self.textLine = textLine

			def __del__(self):
				ui.Window.__del__(self)

			def SetText(self, text):
				self.textLine.SetText(text)

			def OnRender(self):
				(mouseX, mouseY) = wndMgr.GetMousePosition()
				self.textLine.SetPosition(mouseX, mouseY - 15)
		def __init__(self):
			Window.__init__(self)
			self.image = ExpandedImageBox()
			self.image.AddFlag("not_pick")
			self.image.LoadImage("illumina/controls/special/taskbar/progress_exp_full.tga")
			self.image.SetParent(self)
			self.image.Show()
			self.SetSize(self.image.GetWidth(), self.image.GetHeight())
			self.SetPosition(241, 89)
			self.Show()
			

		def __del__(self):
			self.Hide()
			Window.__del__(self)
		def AddToolTip(self, parent):
			self.tooltipInfo = self.TextToolTip()
			self.tooltipInfo.SetParent(parent)
			self.tooltipInfo.Hide()
		def OnUpdate(self):
			import player
			curEXP = unsigned32(player.GetStatus(player.EXP))
			nextEXP = unsigned32(player.GetStatus(player.NEXT_EXP))
			Percentage = -1 + float(curEXP)/float(nextEXP)

			self.image.SetRenderingRect(0.0, Percentage, 0.0, 0.0)
			(mouseX, mouseY) = wndMgr.GetMousePosition()
			if self.tooltipInfo:
				if True == CustomIsIn(mouseX, mouseY, self):
					self.tooltipInfo.Show()
					self.tooltipInfo.SetText("%s : %.2f%%" % (localeInfo.TASKBAR_EXP, float(curEXP) / max(1, float(nextEXP)) * 100))
				else:
					self.tooltipInfo.Hide()


	def __init__(self):
		Window.__init__(self)
		self.path = "illumina/controls/special/taskbar/"
		self.width = max(1280, wndMgr.GetScreenWidth())
		self.height = 158
		self.repeat = 220
		self.bar = None
		self.atlas = None
		self.exp_Bar = None
		self.BuildMiniMap()

		self.BuildBar()
		self.BuildExpBar()
		self.BuildButtons()
		
		
		self.SetPosition( (wndMgr.GetScreenWidth() - self.width )/2,wndMgr.GetScreenHeight()-self.height)
		self.SetSize(self.width, self.height)
		self.Show()
		self.BuildToolTips()
	def __del__(self):
		self.Hide()
		Window.__del__(self)

	

	def BuildBar(self):
		self.bar = []
		files = ["bar_" +dir+".tga" for dir in ("repeat","left", "middle", "right", ) ]
		for x in files:
			part = ExpandedImageBox()
			part.AddFlag("not_pick")
			part.LoadImage("illumina/controls/special/taskbar/" + x)
			part.SetParent(self)
			part.Show()
			self.bar.append(part)
		self.bar[0].SetPosition(self.bar[1].GetWidth()  ,self.height - self.bar[0].GetHeight())
		self.bar[0].SetPercentage(float(self.width) - float(self.bar[1].GetWidth()) - float(self.bar[3].GetWidth()), float(self.repeat))
		self.bar[1].SetPosition(0,self.height -124)
		self.bar[2].SetPosition( (self.width - self.bar[2].GetWidth()) / 2 , self.height - self.bar[2].GetHeight())
		self.bar[3].SetPosition(self.width -  self.bar[3].GetWidth(),0)

	def BuildMiniMap(self):
		miniMap.Create()
		miniMap.SetScale(2.0)
		miniMap.RegisterAtlasWindow(self)
		self.Atlas = self.MiniMap()
		self.Atlas.SetParent(self)
		self.Atlas.SetSize(128, 128)
		self.Atlas.SetPosition(self.width - 280, 15)
		self.Atlas.Show()
	def BuildExpBar(self):
		self.exp_Bar = self.ExpBar()
		self.exp_Bar.SetParent(self.bar[1])
	def BuildButtons(self):
		self.Atlas.BuildButtons(self.bar[3])
	def BuildToolTips(self):		
		self.Atlas.AddToolTip(self)
		self.exp_Bar.AddToolTip(self)
Falls interesse besteht kann ich auch mal mein LiveDevelopement Script rausgeben.


xCPx is offline  
Thanks
1 User
Old 03/18/2016, 02:31   #155
 
elite*gold: 0
Join Date: Apr 2015
Posts: 433
Received Thanks: 361
Ich habe nun die mal meinen alten Converter ausgegraben und den so umgeschrieben, dass er komplette Verzeichnisstrukturierungen konvertieren kann.

Ich habe xCPx die Dateien bereits geschickt und es sollte das Ganze nun ohne Fehler anzeigen.
Attached Files
File Type: rar illumina.rar (5.21 MB, 221 views)
#Metho is offline  
Thanks
1 User
Old 03/18/2016, 07:55   #156
 
elite*gold: 2
Join Date: Jun 2013
Posts: 1,101
Received Thanks: 1,535
Einfach ein uebermenschliches Design, Danke!
ProfessorEnte is online now  
Old 03/18/2016, 10:31   #157
 
elite*gold: 20
Join Date: Oct 2012
Posts: 2,335
Received Thanks: 3,347
Hab vorhin im Source noch was gefunden, um die Questscrolls im CharacterWindow bei der QuestPage zu ändern:

UserInterface/PythonQuest.cpp
Code:
PyObject * questGetQuestData(PyObject * poSelf, PyObject * poArgs)
{
	int iIndex;
	if (!PyTuple_GetInteger(poArgs, 0, &iIndex))
		return Py_BadArgument();

	CPythonQuest::SQuestInstance * pQuestInstance;
	if (!CPythonQuest::Instance().GetQuestInstancePtr(iIndex, &pQuestInstance))
		return Py_BuildException("Failed to find quest by index %d", iIndex);

	CGraphicImage * pImage = NULL;
	if (!pQuestInstance->strIconFileName.empty())
	{
		std::string strIconFileName;
		strIconFileName = "d:/ymir work/ui/game/quest/questicon/";
		strIconFileName += pQuestInstance->strIconFileName.c_str();
		pImage = (CGraphicImage *)CResourceManager::Instance().GetResourcePointer(strIconFileName.c_str());
	}
	else
	{
		{
			// Illumina Questicon
			std::string strIconFileName = "illumina/images/icons/special/quest_open.tga";
			pImage = (CGraphicImage *)CResourceManager::Instance().GetResourcePointer(strIconFileName.c_str());
		}
	}

	return Py_BuildValue("sisi",	pQuestInstance->strTitle.c_str(),
									pImage,
									pQuestInstance->strCounterName.c_str(),
									pQuestInstance->iCounterValue);
}
Mr. 'Avenue™ is offline  
Old 03/18/2016, 16:57   #158
 
elite*gold: 20
Join Date: Jun 2011
Posts: 2,896
Received Thanks: 3,326
Quote:
Originally Posted by Mr. 'Avenue™ View Post
Hab vorhin im Source noch was gefunden, um die Questscrolls im CharacterWindow bei der QuestPage zu ändern:

UserInterface/PythonQuest.cpp
Code:
PyObject * questGetQuestData(PyObject * poSelf, PyObject * poArgs)
{
	int iIndex;
	if (!PyTuple_GetInteger(poArgs, 0, &iIndex))
		return Py_BadArgument();

	CPythonQuest::SQuestInstance * pQuestInstance;
	if (!CPythonQuest::Instance().GetQuestInstancePtr(iIndex, &pQuestInstance))
		return Py_BuildException("Failed to find quest by index %d", iIndex);

	CGraphicImage * pImage = NULL;
	if (!pQuestInstance->strIconFileName.empty())
	{
		std::string strIconFileName;
		strIconFileName = "d:/ymir work/ui/game/quest/questicon/";
		strIconFileName += pQuestInstance->strIconFileName.c_str();
		pImage = (CGraphicImage *)CResourceManager::Instance().GetResourcePointer(strIconFileName.c_str());
	}
	else
	{
		{
			// Illumina Questicon
			std::string strIconFileName = "illumina/images/icons/special/quest_open.tga";
			pImage = (CGraphicImage *)CResourceManager::Instance().GetResourcePointer(strIconFileName.c_str());
		}
	}

	return Py_BuildValue("sisi",	pQuestInstance->strTitle.c_str(),
									pImage,
									pQuestInstance->strCounterName.c_str(),
									pQuestInstance->iCounterValue);
}
Bist du dir sicher, dass der Part überhaupt mal irgendwo genutzt wird?

ich hab keine Datei gefunden wo der Befehl überhaupt verwendet wird
xCPx is offline  
Old 03/18/2016, 17:24   #159
 
elite*gold: 4694
Join Date: Nov 2008
Posts: 1,218
Received Thanks: 4,728
Quote:
Originally Posted by Lord Metho View Post
@, leider gibts keine solche leichte Rotate etc. Möglichkeit, er müsste gebenenfalls ein Image mit (.rotate, .paste, .crop) Zuschneiden / Drehen / Zuschneiden / Zurückdrehen bearbeiten.

Verstehe aber ohnehin zuwenig C# um deine Methode genau nachvollziehen zu können
Ich weiß zu 100% dass es eine rotate Möglichkeit in Metin2 gibt.

Quote:
Originally Posted by xCPx View Post
In C# / C++ ist das kein Problem, das weis ich selbst zu gut.
Jedoch ist es in der bestehenden Metin2 Funktionalität bisher leider nicht bzw kaum ohne grössere Performance Verluste möglich (Es sei denn der Code soll auch n C++ Part fürn Source beinhalten, dann ist das wiederum recht einfach)


Glaub mir freiwillig mach ichs auch nicht mit Bildern ^^
Der Code lässt sich von der Logik her auch problemlos in Python umsetzen. Als Poccix sich noch am Code versucht hat, war es ja auch möglich.

Vielleicht kennst du nur die rotate Methode nicht, wie schon erwähnt wird diese standardmäßig sowieso irgendwo verwendet und ist auch ohne source Änderungen zugänglich.

#Edit:
Die Methode sollte "SetRotation(value)" heißen, und zmindest (evt. auch weitere Objekte) "ExpandedImage" Objekte sollten diese Methode haben. Leider weiß ich nicht mehr was diese Methode für einen Wert erwartet, also ob es ein Radian, Degree oder Prozentwert ist etc. müsstenst du ausprobieren.

Lg.
King Sora is offline  
Thanks
1 User
Old 03/18/2016, 17:39   #160
 
elite*gold: 20
Join Date: Oct 2012
Posts: 2,335
Received Thanks: 3,347
Quote:
Originally Posted by King Sora View Post
Ich weiß zu 100% dass es eine rotate Möglichkeit in Metin2 gibt.



Der Code lässt sich von der Logik her auch problemlos in Python umsetzen. Als Poccix sich noch am Code versucht hat, war es ja auch möglich.

Vielleicht kennst du nur die rotate Methode nicht, wie schon erwähnt wird diese standardmäßig sowieso irgendwo verwendet und ist auch ohne source Änderungen zugänglich.

#Edit:
Die Methode sollte "SetRotation(value)" heißen, und zmindest (evt. auch weitere Objekte) "ExpandedImage" Objekte sollten diese Methode haben. Leider weiß ich nicht mehr was diese Methode für einen Wert erwartet, also ob es ein Radian, Degree oder Prozentwert ist etc. müsstenst du ausprobieren.

Lg.
Erwartet soweit ich weiß float als Wert.

Code:
PyObject * wndImageSetRotation(PyObject * poSelf, PyObject * poArgs)
{
	UI::CWindow * pWindow;
	if (!PyTuple_GetWindow(poArgs, 0, &pWindow))
		return Py_BuildException();
	float fRotation;
	if (!PyTuple_GetFloat(poArgs, 1, &fRotation))
		return Py_BuildException();

	((UI::CExpandedImageBox*)pWindow)->SetRotation(fRotation);

	return Py_BuildNone();
}




Quote:
Originally Posted by xCPx View Post
Bist du dir sicher, dass der Part überhaupt mal irgendwo genutzt wird?

ich hab keine Datei gefunden wo der Befehl überhaupt verwendet wird
Ja. uiCharacter.py
Code:
def RefreshQuest(self):
	[...]
	for i in questRange[:questCount]:
		(questName, questIcon, questCounterName, questCounterValue) = quest.GetQuestData(self.questShowingStartIndex+i)
Mr. 'Avenue™ is offline  
Old 03/18/2016, 17:47   #161
 
elite*gold: 0
Join Date: Apr 2015
Posts: 433
Received Thanks: 361
@,

ich habe es unverständlich formuliert, was du sagst ist mir ebenfalls bewusst, jedoch reicht es nicht das Bild zu rotieren. (Ich gehe dabei immer von einem kompletten Bild aus und keinen 6 Einzelteilen.) Ich konnte deine Überlegung mit 6/5 Einzelteilen nicht nachvollziehen, da mir dazu die nötigen C# Kenntnisse fehlen. Meine Überlegung war es, dass man das Bild so ausschneiden müsste, dass das ganze einem Kuchen ähnelt (radial). Man nehme also den Prozentsatz des aktuellen Lebens/maximalen Lebens und schneidet ein Kuchenstück vom Bild ab. Nun könnte man auch sagen, es reicht, wenn man das Bild rotiert, somit würde sich der obere Teil der Anzeige immer mit Drehen. Dies ist aber ganz allein deine Entscheidung, wie du dir das vorgestellt hast, ich hoffe ich konnte die Sachlage etwas erklären.

Anscheinend hat xCPx, im Gegensatz zu mir, deine C# Überlegungsweise nachvollziehen können und ist immernoch der festen Meinung es ginge nicht perfomance effizient, da fehlen mir leider die Kenntnisse von C#.

Würde sich Poccix mit der Lösung präsentieren, wäre dies sicherlich von Vorteil, hoffen wir darauf er den Ausschnitt aus seinem Py noch findet :P
#Metho is offline  
Old 03/18/2016, 18:03   #162
 
elite*gold: 20
Join Date: Jun 2011
Posts: 2,896
Received Thanks: 3,326
Nicht machbar habe ich so nie gesagt, sondern lediglich sehr Performancelastig.

Habe dafür sogar ne Klasse, nur wie gesagt sehr performancelastig....
Schaut aber nicht schlecht aus.


Code:
class LoadingCircle(Window):
	def __init__(self, clockwise = True):
		Window.__init__(self)
		self.FullImage = None
		self.EmptyImage = ExpandedImageBox()
		self.EmptyImage.AddFlag("not_pick")
		self.EmptyImage.SetParent(self)
		self.StartRotation = 0
		self.MaxAngle = 360
		self.clockwise = clockwise
		self.Show()
	def __del__(self):
		self.Hide()
		Window.__del__(self)
	def AddFullImage(self, img,width):
		self.FullImage	= []
		for i in xrange(0,360):
			part = ExpandedImageBox()
			part.AddFlag("not_pick")
			part.LoadImage(img)
			part.SetSize(width, 1)
			part.SetParent(self)
			part.SetPosition(0, width/2)
			part.Show()
			part.SetRotation(self.StartRotation + i)
			self.FullImage.append(part)	
			pass
	def AddEmptyImage(self, img, width, height):		
		self.EmptyImage.LoadImage(img)
		self.EmptyImage.SetSize(width, height)		
		self.EmptyImage.Show()
	def SetStartRotation(self, rotation):
		self.StartRotation = rotation
	def SetMaxAngle(self, angle):
		self.MaxAngle = angle
	def SetValue(self, actual, _max):
		perc =  minmax(0.0,float(actual) / float(_max), 1.0) * 100.0
		intPerc = FloatRountToInt(0.0, perc * float(self.MaxAngle)/100.0, float(self.MaxAngle)	)
		for i in xrange(0, 360):
			i2 = i
			if(self.clockwise == False):
				i2 = self.MaxAngle-1-i
			if(i <= intPerc):
				self.FullImage[i2].Show()
			else:
				self.FullImage[i2].Hide()

hab meine basic functions vergessen...
Code:
def minmax(_min,act,_max):
	return max(_min, min(act, _max))
def FloatRountToInt(_min, r, _max):
	r2 = int(r)
	if( int(r*2.0) >= (r2*2)+1):
		r2 = r2+1
	_min = int(_min)
	_max = int(_max)
	return int(minmax(_min, r2, _max))
xCPx is offline  
Old 03/18/2016, 18:44   #163
 
elite*gold: 4694
Join Date: Nov 2008
Posts: 1,218
Received Thanks: 4,728
Quote:
Originally Posted by Lord Metho View Post
@,

ich habe es unverständlich formuliert, was du sagst ist mir ebenfalls bewusst, jedoch reicht es nicht das Bild zu rotieren. (Ich gehe dabei immer von einem kompletten Bild aus und keinen 6 Einzelteilen.) Ich konnte deine Überlegung mit 6/5 Einzelteilen nicht nachvollziehen, da mir dazu die nötigen C# Kenntnisse fehlen. Meine Überlegung war es, dass man das Bild so ausschneiden müsste, dass das ganze einem Kuchen ähnelt (radial). Man nehme also den Prozentsatz des aktuellen Lebens/maximalen Lebens und schneidet ein Kuchenstück vom Bild ab. Nun könnte man auch sagen, es reicht, wenn man das Bild rotiert, somit würde sich der obere Teil der Anzeige immer mit Drehen. Dies ist aber ganz allein deine Entscheidung, wie du dir das vorgestellt hast, ich hoffe ich konnte die Sachlage etwas erklären.

Anscheinend hat xCPx, im Gegensatz zu mir, deine C# Überlegungsweise nachvollziehen können und ist immernoch der festen Meinung es ginge nicht perfomance effizient, da fehlen mir leider die Kenntnisse von C#.

Würde sich Poccix mit der Lösung präsentieren, wäre dies sicherlich von Vorteil, hoffen wir darauf er den Ausschnitt aus seinem Py noch findet :P
Naja, man sollte sich zumindest die slices ansehen, damit meine Überlegung nachvollziehen kann.
Da muss man nicht unbedingt C# dazu können, weil man das Programm ja auch ausführen kann.


Quote:
Originally Posted by xCPx View Post
Nicht machbar habe ich so nie gesagt, sondern lediglich sehr Performancelastig.

Habe dafür sogar ne Klasse, nur wie gesagt sehr performancelastig....
Schaut aber nicht schlecht aus.
Hast du denn auch eine Begründung warum es sehr performance lastig sein soll? - Meiner Meinung nach ist das ein relativ effizienter Weg das mit wenig Code und wenig Bildern hin zu bekommen. DirectX ist nicht gerade schlecht, was die Verwaltung und Manipulation von Texturen (Bildern) angeht.

Lg.
King Sora is offline  
Old 03/18/2016, 18:52   #164
 
elite*gold: 20
Join Date: Jun 2011
Posts: 2,896
Received Thanks: 3,326
Quote:
Originally Posted by King Sora View Post
Naja, man sollte sich zumindest die slices ansehen, damit meine Überlegung nachvollziehen kann.
Da muss man nicht unbedingt C# dazu können, weil man das Programm ja auch ausführen kann.




Hast du denn auch eine Begründung warum es sehr performance lastig sein soll? - Meiner Meinung nach ist das ein relativ effizienter Weg das mit wenig Code und wenig Bildern hin zu bekommen. DirectX ist nicht gerade schlecht, was die Verwaltung und Manipulation von Texturen (Bildern) angeht.

Lg.
Es gibt nen Unterschied zwischen Direct X und Direct X via py.
Wenn was unter C++ über direct x ohne Probleme läuft ( < 1s) heist es noch lange nicht dass das im Clienten so ist, dort genehmigt sich dieselbe Aktion teils > 10s

Aber ja, solange man nicht 1000 davon verwendet sollte es keine Probleme geben, so wie ich es oben gemacht hab.
Nur denk ich immer ein wenig an die performance ^^
xCPx is offline  
Old 03/18/2016, 19:06   #165
 
elite*gold: 4694
Join Date: Nov 2008
Posts: 1,218
Received Thanks: 4,728
Quote:
Originally Posted by xCPx View Post
Es gibt nen Unterschied zwischen Direct X und Direct X via py.
Wenn was unter C++ über direct x ohne Probleme läuft ( < 1s) heist es noch lange nicht dass das im Clienten so ist, dort genehmigt sich dieselbe Aktion teils > 10s

Aber ja, solange man nicht 1000 davon verwendet sollte es keine Probleme geben, so wie ich es oben gemacht hab.
Nur denk ich immer ein wenig an die performance ^^
Nach dieser Logik müsste ja das Gleiche für alle anderen Funktionen gelten, egal ob Rotationen oder das Zeichnen anderer Bilder. xD

Ist ja auch egal, wenn es dir möglich ist, bitte versuchs so zu machen wie es ursprünglich geplant war. Das Schohnt auf jeden Fall die Größe des Clients / des Designs.

Lg.


King Sora is offline  
Reply



« [Release]MT2GRAND CMS | [RELEASE] Eligara / Aligra Client Design »

Similar Threads
[Release] Client Design {"A Day in Paradise"} ~ by Sora
10/22/2016 - Metin2 PServer Designs, Websites & Scripts - 199 Replies
Heyho, ich überlege schon lange ob ich dieses Design pub. machen soll oder nicht. Ich weiß nun das dieses Design schon etwas weiter verbreitet ist als ich es eigentlich wollte, geschickt habe ich es nur an 2 Personen (RealFreak und Downii), leider haben es nun viel mehr Leute. Das Design war uhrsprünglich für Downiis Server "DoofMt2" gedacht, nachdem er jedoch sein Projekt beendet hat und mir seit dem kein einziges Wort mehr zurückschreibt, werde ich das Design nun Pub. machen! Screen:...
[Release] Client Design {"Crystal clear sunrise"} ~ by Sora
11/19/2015 - Metin2 PServer Guides & Strategies - 115 Replies
Hey Leute, ich habe mir extra für euch die Mühe gemacht und ein hübsches blaues Design für den Clienten gemacht. Wie schon von mir Angekündigt mache ich es Heute pub :). Da im letzten Client Design Release (http://www.elitepvpers.com/forum/metin2-pserver-g uides-strategies/1072186-release-client-design-sor a.html) viele ein Blaues Design haben wollten ist es nun auch blau geworden.
[Release] Client Design {"Dark rebirth"} ~ by Bloshy & Sora
12/23/2013 - Metin2 PServer Guides & Strategies - 69 Replies
Hey Leute, da mich Bloshy vor einiger Zeit gebeten hat ein Design für seinen Server zu machen, das zur Homepage passt, tat ich das dann auch. Jedoch benutzt das Design nun ein anderer Server, ich möchte das nicht, und da niemand auf meine Fragen eine Antwort gab mache ich es nun einfach public. Screen: http://img4.fotos-hochladen.net/uploads/drakonias mall054ahto2fq.png *klick* Originalgröße *klick*



All times are GMT +2. The time now is 11:00.


Powered by vBulletin®
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.

BTC: 3KeUpz52VCbhmLwuwydqxu6U1xsgbT8YT5
ETH: 0xc6ec801B7563A4376751F33b0573308aDa611E05

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2019 elitepvpers All Rights Reserved.