better keep some things sorted
parent
d1ecccfaca
commit
e404d671c8
|
@ -615,12 +615,18 @@ namespace OpenSim.Framework
|
|||
}
|
||||
}
|
||||
|
||||
public class CompareTrackEntries : IComparer<TrackEntry>
|
||||
{
|
||||
public int Compare(TrackEntry x, TrackEntry y)
|
||||
{
|
||||
return x.time.CompareTo(y.time);
|
||||
}
|
||||
}
|
||||
|
||||
public bool IsStaticDayCycle = false;
|
||||
public List<TrackEntry> skyTrack0 = new List<TrackEntry>();
|
||||
public List<TrackEntry> skyTrack1 = new List<TrackEntry>();
|
||||
public List<TrackEntry> skyTrack2 = new List<TrackEntry>();
|
||||
public List<TrackEntry> skyTrack3 = new List<TrackEntry>();
|
||||
public List<TrackEntry> waterTrack = new List<TrackEntry>();
|
||||
public List<TrackEntry> skyTrack0 = new List<TrackEntry>();
|
||||
public List<TrackEntry>[] skyTracks = new List<TrackEntry>[3];
|
||||
|
||||
public Dictionary<string, SkyData> skyframes = new Dictionary<string, SkyData>();
|
||||
public Dictionary<string, WaterData> waterframes = new Dictionary<string, WaterData>();
|
||||
|
@ -629,6 +635,7 @@ namespace OpenSim.Framework
|
|||
|
||||
public void FromWLOSD(OSDArray array)
|
||||
{
|
||||
CompareTrackEntries cte = new CompareTrackEntries();
|
||||
TrackEntry track;
|
||||
|
||||
OSDArray skytracksArray = null;
|
||||
|
@ -645,6 +652,7 @@ namespace OpenSim.Framework
|
|||
skyTrack0.Add(track);
|
||||
}
|
||||
}
|
||||
skyTrack0.Sort(cte);
|
||||
}
|
||||
|
||||
OSDMap skyFramesArray = null;
|
||||
|
@ -679,26 +687,19 @@ namespace OpenSim.Framework
|
|||
{
|
||||
OSDArray track = new OSDArray();
|
||||
foreach (TrackEntry te in skyTrack0)
|
||||
{
|
||||
track.Add(new OSDArray { te.time, te.frameName });
|
||||
}
|
||||
|
||||
array[1] = track;
|
||||
|
||||
OSDMap frames = new OSDMap();
|
||||
foreach (KeyValuePair<string, SkyData> kvp in skyframes)
|
||||
{
|
||||
frames[kvp.Key] = kvp.Value.ToWLOSD();
|
||||
}
|
||||
array[2] = frames;
|
||||
|
||||
if(waterTrack.Count > 0)
|
||||
{
|
||||
TrackEntry te = waterTrack[0];
|
||||
if(waterframes.TryGetValue(te.frameName, out WaterData water))
|
||||
{
|
||||
array[3] = water.ToWLOSD();
|
||||
}
|
||||
}
|
||||
else
|
||||
array[3] = new OSDMap();
|
||||
|
@ -706,7 +707,9 @@ namespace OpenSim.Framework
|
|||
|
||||
public void FromOSD(OSDMap map)
|
||||
{
|
||||
CompareTrackEntries cte = new CompareTrackEntries();
|
||||
OSD otmp;
|
||||
|
||||
if(map.TryGetValue("frames", out otmp) && otmp is OSDMap)
|
||||
{
|
||||
OSDMap mframes = otmp as OSDMap;
|
||||
|
@ -744,90 +747,70 @@ namespace OpenSim.Framework
|
|||
if(tracks.Count > 0)
|
||||
{
|
||||
track = tracks[0] as OSDArray;
|
||||
for(int i = 0; i < track.Count; ++i)
|
||||
if (track != null && track.Count > 0)
|
||||
{
|
||||
OSDMap d = track[i] as OSDMap;
|
||||
if (d.TryGetValue("key_keyframe", out OSD dtime))
|
||||
for (int i = 0; i < track.Count; ++i)
|
||||
{
|
||||
if (d.TryGetValue("key_name", out OSD dname))
|
||||
OSDMap d = track[i] as OSDMap;
|
||||
if (d.TryGetValue("key_keyframe", out OSD dtime))
|
||||
{
|
||||
TrackEntry t = new TrackEntry();
|
||||
t.time = dtime;
|
||||
t.frameName = dname;
|
||||
waterTrack.Add(t);
|
||||
if (d.TryGetValue("key_name", out OSD dname))
|
||||
{
|
||||
TrackEntry t = new TrackEntry();
|
||||
t.time = dtime;
|
||||
t.frameName = dname;
|
||||
waterTrack.Add(t);
|
||||
}
|
||||
}
|
||||
}
|
||||
waterTrack.Sort(cte);
|
||||
}
|
||||
}
|
||||
if (tracks.Count > 1)
|
||||
{
|
||||
track = tracks[1] as OSDArray;
|
||||
for (int i = 0; i < track.Count; ++i)
|
||||
if (track != null && track.Count > 0)
|
||||
{
|
||||
OSDMap d = track[i] as OSDMap;
|
||||
if (d.TryGetValue("key_keyframe", out OSD dtime))
|
||||
for (int i = 0; i < track.Count; ++i)
|
||||
{
|
||||
if (d.TryGetValue("key_name", out OSD dname))
|
||||
OSDMap d = track[i] as OSDMap;
|
||||
if (d.TryGetValue("key_keyframe", out OSD dtime))
|
||||
{
|
||||
TrackEntry t = new TrackEntry();
|
||||
t.time = dtime;
|
||||
t.frameName = dname;
|
||||
skyTrack0.Add(t);
|
||||
if (d.TryGetValue("key_name", out OSD dname))
|
||||
{
|
||||
TrackEntry t = new TrackEntry();
|
||||
t.time = dtime;
|
||||
t.frameName = dname;
|
||||
skyTrack0.Add(t);
|
||||
}
|
||||
}
|
||||
}
|
||||
skyTrack0.Sort(cte);
|
||||
}
|
||||
}
|
||||
if (tracks.Count > 2)
|
||||
{
|
||||
track = tracks[2] as OSDArray;
|
||||
for (int i = 0; i < track.Count; ++i)
|
||||
for(int st = 2, dt = 0; st < tracks.Count && dt < 3; ++st, ++dt)
|
||||
{
|
||||
OSDMap d = track[i] as OSDMap;
|
||||
if (d.TryGetValue("key_keyframe", out OSD dtime))
|
||||
track = tracks[st] as OSDArray;
|
||||
if(track != null && track.Count > 0)
|
||||
{
|
||||
if (d.TryGetValue("key_name", out OSD dname))
|
||||
skyTracks[dt] = new List<TrackEntry>();
|
||||
for (int i = 0; i < track.Count; ++i)
|
||||
{
|
||||
TrackEntry t = new TrackEntry();
|
||||
t.time = dtime;
|
||||
t.frameName = dname;
|
||||
skyTrack1.Add(t);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (tracks.Count > 3)
|
||||
{
|
||||
track = tracks[3] as OSDArray;
|
||||
for (int i = 0; i < track.Count; ++i)
|
||||
{
|
||||
OSDMap d = track[i] as OSDMap;
|
||||
if (d.TryGetValue("key_keyframe", out OSD dtime))
|
||||
{
|
||||
if (d.TryGetValue("key_name", out OSD dname))
|
||||
{
|
||||
TrackEntry t = new TrackEntry();
|
||||
t.time = dtime;
|
||||
t.frameName = dname;
|
||||
skyTrack2.Add(t);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (tracks.Count > 4)
|
||||
{
|
||||
track = tracks[4] as OSDArray;
|
||||
for (int i = 0; i < track.Count; ++i)
|
||||
{
|
||||
OSDMap d = track[i] as OSDMap;
|
||||
if (d.TryGetValue("key_keyframe", out OSD dtime))
|
||||
{
|
||||
if (d.TryGetValue("key_name", out OSD dname))
|
||||
{
|
||||
TrackEntry t = new TrackEntry();
|
||||
t.time = dtime;
|
||||
t.frameName = dname;
|
||||
skyTrack3.Add(t);
|
||||
OSDMap d = track[i] as OSDMap;
|
||||
if (d.TryGetValue("key_keyframe", out OSD dtime))
|
||||
{
|
||||
if (d.TryGetValue("key_name", out OSD dname))
|
||||
{
|
||||
TrackEntry t = new TrackEntry();
|
||||
t.time = dtime;
|
||||
t.frameName = dname;
|
||||
skyTracks[dt].Add(t);
|
||||
}
|
||||
}
|
||||
}
|
||||
skyTracks[dt].Sort(cte);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -880,44 +863,24 @@ namespace OpenSim.Framework
|
|||
}
|
||||
tracks.Add(track);
|
||||
|
||||
track = new OSDArray();
|
||||
foreach (TrackEntry te in skyTrack1)
|
||||
for(int st = 0; st < 3; ++st)
|
||||
{
|
||||
tmp = new OSDMap();
|
||||
if (te.time < 0)
|
||||
tmp["key_keyframe"] = 0f;
|
||||
else
|
||||
tmp["key_keyframe"] = te.time;
|
||||
tmp["key_name"] = te.frameName;
|
||||
track.Add(tmp);
|
||||
track = new OSDArray();
|
||||
if(skyTracks[st] != null)
|
||||
{
|
||||
foreach (TrackEntry te in skyTracks[st])
|
||||
{
|
||||
tmp = new OSDMap();
|
||||
if (te.time < 0)
|
||||
tmp["key_keyframe"] = 0f;
|
||||
else
|
||||
tmp["key_keyframe"] = te.time;
|
||||
tmp["key_name"] = te.frameName;
|
||||
track.Add(tmp);
|
||||
}
|
||||
}
|
||||
tracks.Add(track);
|
||||
}
|
||||
tracks.Add(track);
|
||||
|
||||
track = new OSDArray();
|
||||
foreach (TrackEntry te in skyTrack2)
|
||||
{
|
||||
tmp = new OSDMap();
|
||||
if (te.time < 0)
|
||||
tmp["key_keyframe"] = 0f;
|
||||
else
|
||||
tmp["key_keyframe"] = te.time;
|
||||
tmp["key_name"] = te.frameName;
|
||||
track.Add(tmp);
|
||||
}
|
||||
tracks.Add(track);
|
||||
|
||||
track = new OSDArray();
|
||||
foreach (TrackEntry te in skyTrack3)
|
||||
{
|
||||
tmp = new OSDMap();
|
||||
if (te.time < 0)
|
||||
tmp["key_keyframe"] = 0f;
|
||||
else
|
||||
tmp["key_keyframe"] = te.time;
|
||||
tmp["key_name"] = te.frameName;
|
||||
track.Add(tmp);
|
||||
}
|
||||
tracks.Add(track);
|
||||
|
||||
cycle["tracks"] = tracks;
|
||||
cycle["type"] = "daycycle";
|
||||
|
@ -1171,8 +1134,23 @@ namespace OpenSim.Framework
|
|||
OSDArray alt = otmp as OSDArray;
|
||||
|
||||
for(int i = 0; i < alt.Count && i < 3; ++i)
|
||||
{
|
||||
Altitudes[i] = alt[i];
|
||||
|
||||
for(int i = 0; i < 2; ++i)
|
||||
{
|
||||
float h = Altitudes[i];
|
||||
for(int j = i + 1; j < 3; ++j)
|
||||
{
|
||||
if(h > Altitudes[j])
|
||||
{
|
||||
Altitudes[i] = Altitudes[j];
|
||||
Altitudes[j] = h;
|
||||
List<DayCycle.TrackEntry> tet = Cycle.skyTracks[i];
|
||||
Cycle.skyTracks[i] = Cycle.skyTracks[j];
|
||||
Cycle.skyTracks[j] = tet;
|
||||
h = Altitudes[i];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1252,19 +1230,8 @@ namespace OpenSim.Framework
|
|||
|
||||
while (altindx >= 0)
|
||||
{
|
||||
switch (altindx)
|
||||
{
|
||||
case 2:
|
||||
track = Cycle.skyTrack3;
|
||||
break;
|
||||
case 1:
|
||||
track = Cycle.skyTrack2;
|
||||
break;
|
||||
case 0:
|
||||
track = Cycle.skyTrack1;
|
||||
break;
|
||||
}
|
||||
if (track != null)
|
||||
track = Cycle.skyTracks[altindx];
|
||||
if (track != null && track.Count > 0)
|
||||
break;
|
||||
--altindx;
|
||||
}
|
||||
|
@ -1283,6 +1250,7 @@ namespace OpenSim.Framework
|
|||
sundir = Xrot(sunrot);
|
||||
return true;
|
||||
}
|
||||
|
||||
int i = 0;
|
||||
while (i < track.Count)
|
||||
{
|
||||
|
@ -1367,18 +1335,7 @@ namespace OpenSim.Framework
|
|||
|
||||
while (altindx >= 0)
|
||||
{
|
||||
switch (altindx)
|
||||
{
|
||||
case 2:
|
||||
track = Cycle.skyTrack3;
|
||||
break;
|
||||
case 1:
|
||||
track = Cycle.skyTrack2;
|
||||
break;
|
||||
case 0:
|
||||
track = Cycle.skyTrack1;
|
||||
break;
|
||||
}
|
||||
track = Cycle.skyTracks[altindx];
|
||||
if (track != null && track.Count > 0)
|
||||
break;
|
||||
--altindx;
|
||||
|
|
Loading…
Reference in New Issue