StartSimpleVeryHiResJob

» Siedler Map Source Forum » Siedler DEdK Script Forum » StartSimpleVeryHiResJob

Seiten: 1

Mordred
#1
15.08.2010 21:05
Beiträge: 939

StartSimpleVeryHiResJob

Da es nur den SimpleJob (1 mal pro sekunde) und den SimpleHiResJob (10 mal pro sekunde) gibt, was für exakte koordination noch etwas ungenau ist, habe ich einen SimpleVeryHiResJob (2000 mal pro sekunde) gescriptet.

Nutzt zwar wenig, aber falls jemand sowas braucht, kann der job gerne eingebaut werden. (z.B für rutschende Steine)
Verhalten wie mit dem SimpleJob und dem SimpleHiResJob auch:
Namen in "", beenden per return true. (kann allerdings nur einmal gleichzeitig aufgerufen werden.)

Mängel, die noch verbessert werden sollen/können/ich nicht kann:
- beenden nur per extrafunktion EndVeryHiResJob(_jobinanfuhrungszeichen)
- CxTool
- läuft auch während einer pause weiter

Für nicht-dauerhafte Aktionen wie entitäten versetzt erstellen oder cutscenecontrolling prima, aber mit der vollen Leistung ganz schön happig.

function StartSimpleVeryHiResJob(_job) -- 2000/sek
 if (VeryHiResJobs == nil) then
  VeryHiResJobs = {}
  GUIUpdate_ResourceAmountVHRJ = GUIUpdate_ResourceAmount
   function GUIUpdate_ResourceAmount(_restype,_zahl)
	 for i=table.getn(VeryHiResJobs),1,-1 do
	  if _G[VeryHiResJobs[i]]() then
	   table.remove(VeryHiResJobs,i)
	  end
	 end
    GUIUpdate_ResourceAmountVHRJ(_restype,_zahl)
   end
 end
  if (type(_job) == "string")then
   table.insert(VeryHiResJobs,_job)
  else
   Message("ERR:StartSimpleVeryHiResJob! _job must be a string!")
  end
end
function EndVeryHiResJob(_job)
 if (VeryHiResJobs ~= nil)then
  if (type(_job) == "string")then
   if IsInVHRJ(_job)then
    for i=table.getn(VeryHiResJobs),1,-1 do
	 if (VeryHiResJobs[i] == _job)then
	  table.remove(VeryHiResJobs,i)
	 end
	end
   else
    Message("ERR:EndVeryHiResJob! _job is incorrect!")
   end
  else
   Message("ERR:EndVeryHiResJob! _job must be a string!")
  end
 else
  Message("ERR:EndVeryHiResJob! No VeryHiResJob is running!")
 end
end
function IsInVHRJ(_job)
 local raus = false
  for i=1,table.getn(VeryHiResJobs) do
   if (VeryHiResJobs[i] == _job)then
    raus = true
   end
  end
 return raus
end

Dieser Beitrag wurde von Mordred am 15.08.2010 um 21:28 editiert.

Noigi
#2
15.08.2010 23:22
Beiträge: 772

Hmm, du kennst den Trick also auch.

Pass aber auf, die Frequenz von GUIUpdate_ResourceAmount und ähnlichen GUIUpdate-Funktionen hängt von der Rechnerleistung ab und kann stellenweise deutlich absacken. Bei einem rutschenden Stein ist es ja im Grunde egal, wann er unten ankommt, aber für Ereignisse die wirklich genau x mal pro Sekunde auftreten sollen ist der Trick nicht wirklich geeignet.

Mordred
#3
16.08.2010 00:12
Beiträge: 939

Erstes Anwendungsbeispiel gefunden!

Aber die wirklich tolle Funktion wurde nicht von mir erstellt und durch VeryHiResJob nur verbessert.
Das darf der Autor selbst hier reinschreiben, wie er die funktion findet

Mit ein paar rutschenden Steinen getestet, umso größer die Entität, umso mehr fängt es an zu haken.
Ist durch das Spielinterne "grid" aber sowieso sinnlos.

Seiten: 1

SiteEngine v1.5.0 by nevermind, ©2005-2007
Design by SpiderFive (www.siedler-games.de) - English translation by juja

Impressum