internal void Load(string mapName) { WeakReference reference; MapLoadingData data; if(m_mapLoadingDict.TryGetValue( mapName, out reference )) { data = (MapLoadingData)reference.Target; if(data != null) { if (!m_mapLoadingList.Contains(data)) { m_mapLoadingList.Add( data ); return; } else { return; } } } data = new MapLoadingData(); if (reference == null) { m_mapLoadingDict.Add(mapName, new WeakReference(data)); } else { reference.Target = data; } MapInfo level = DataReader.Load<MapInfo>("Data/Maps/" + mapName); data = InternalLoad(level, data); m_mapLoadingList.Add( data ); }
private MapLoadingData InternalLoad(MapInfo level, MapLoadingData data) { data.Name = level.Name; data.Parts = new WorldPart[level.X, level.Y]; data.Sence = new SencePart[level.X, level.Y]; data.Size = new Point(level.X, level.Y); //m_senceManager.Initialize(size.X, size.Y, WorldPart.ImageSize); data.WorldSize = new Point(data.Size.X * WorldPart.ImageSize, data.Size.Y * WorldPart.ImageSize); data.LoadingLeft = 0; data.LayerCount = level.LayerCount; data.Pieces = new MapDrawer[data.LayerCount + 1, data.Size.X, data.Size.Y]; data.CollusionLayer = level.CollusionLayer; data.Player = new Vector2(level.PX, level.PY); data.Layers = new WorldLayer[data.LayerCount + 1]; data.PostLoading = level.PostLoading; for( int i = 0; i < data.LayerCount + 1; i++ ) { data.Layers[i] = new WorldLayer( data.Size.X, data.Size.Y ); } foreach( var item in level.Effects.List ) { data.Layers[item.Layer].SetEffect( item.Effect ); } foreach (MapItem mapData in level.List) { data.Sence[mapData.X,mapData.Y] = new SencePart(mapData.X, mapData.Y); data.Parts[mapData.X, mapData.Y] = new WorldPart(mapData, level, data.Sence[mapData.X, mapData.Y], data.CollusionLayer, data); } return data; }