PageRenderTime 48ms CodeModel.GetById 38ms RepoModel.GetById 0ms app.codeStats 0ms

/com/lele/Manager/MapManager.as

https://gitlab.com/Treeky-NULL/LezaiNiubi
ActionScript | 160 lines | 141 code | 13 blank | 6 comment | 3 complexity | c1a976a00b28a0f051db012ec2917431 MD5 | raw file
  1. package com.lele.Manager
  2. {
  3. import com.lele.Controller.Avatar.Interface.IAvatar;
  4. import com.lele.Controller.PlayerController;
  5. import com.lele.Controller.NetWorkController;
  6. import com.lele.Data.GloableData;
  7. import com.lele.Map.Enum.Weather;
  8. import com.lele.Manager.Events.ManagerEventBase;
  9. import com.lele.Manager.Events.Map_Game_ManagerEvent;
  10. import com.lele.Manager.Events.MapData_Map_ManagerEvent;
  11. import com.lele.Manager.Interface.IReport;
  12. import com.lele.Manager.Interface.IResourceLoader;
  13. import com.lele.Plugin.RoadFind.Interface.IRoadFinder;
  14. import com.lele.Map.Interface.IMapDocument;
  15. import flash.display.DisplayObject;
  16. import flash.display.MovieClip;
  17. import flash.display.Sprite;
  18. import flash.events.Event;
  19. import flash.geom.Point;
  20. /**
  21. * ...
  22. * @author Lele
  23. */
  24. public class MapManager extends Sprite implements IReport
  25. {
  26. private var _safeRange:Point;
  27. private var _currentMapDoc:IMapDocument;
  28. private var _currentContainer:Sprite;
  29. private var _resourceLoader:IResourceLoader;
  30. private var _currentUrl:String;
  31. private var _repoter:IReport;
  32. public function MapManager(resourceLoader:IResourceLoader,report:IReport)
  33. {
  34. _repoter = report;
  35. _resourceLoader = resourceLoader;
  36. }
  37. public function LoadAndStart(url:String, container:Sprite,useUI:Boolean=false,UIType:String="NULL")
  38. {
  39. _currentUrl = url;
  40. _currentContainer = container;
  41. _resourceLoader.LoadResource("MapManager",url, OnLoadStartMapComplete,useUI,UIType);
  42. }
  43. public function UnLoadMap()
  44. {
  45. //清除地图资源
  46. _currentMapDoc.Clean();
  47. {//移除地图, 先移除地图再卸载资源
  48. var evt:Map_Game_ManagerEvent = new Map_Game_ManagerEvent(Map_Game_ManagerEvent.REMOVE_MAP);
  49. evt._map = _resourceLoader.GetContentByID("MapManager", _currentUrl).content;
  50. _repoter.OnReport(evt);
  51. }
  52. _resourceLoader.UnLoadResource("MapManager",_currentUrl);
  53. }
  54. private function OnLoadStartMapComplete(evt:Event)
  55. {
  56. _currentMapDoc = evt.target.content as IMapDocument;
  57. _currentContainer.addChild(evt.target.content);
  58. _safeRange = _currentMapDoc.AllRange;
  59. _currentContainer.x = 0;
  60. _currentContainer.y = 0;
  61. var loaded:Map_Game_ManagerEvent = new Map_Game_ManagerEvent(Map_Game_ManagerEvent.MAPLOADED);//回传地图加载完成事件
  62. _repoter.OnReport(loaded);
  63. }
  64. private function OnLoadMapComplete(evt:Event)
  65. {
  66. _currentMapDoc = evt.target.content as IMapDocument;
  67. _safeRange = _currentMapDoc.AllRange;
  68. _currentContainer.x = 0;
  69. _currentContainer.y = 0;
  70. var loaded:Map_Game_ManagerEvent = new Map_Game_ManagerEvent(Map_Game_ManagerEvent.MAPLOADED);//回传地图加载完成事件
  71. _repoter.OnReport(loaded);
  72. }
  73. public function UpdateMapPosition()
  74. {
  75. var px = _currentContainer.x - ((GloableData.AvatarPosition.x + GloableData.MapOffSetX) - GloableData.FocalPoint.x);
  76. var py = _currentContainer.y - ((GloableData.AvatarPosition.y + GloableData.MapOffSetY) - GloableData.FocalPoint.y);
  77. if(px<0&&(-px+960)<_safeRange.x)
  78. _currentContainer.x =px;
  79. if(py<0&&(-py+540)<_safeRange.y)
  80. _currentContainer.y =py;
  81. GloableData.MapOffSetX = _currentContainer.x;
  82. GloableData.MapOffSetY = _currentContainer.y;
  83. }
  84. public function AddItemToMapFront(sp:Sprite)
  85. {
  86. _currentMapDoc.AddToFrontLayer(sp);
  87. }
  88. public function AddActorToMap(actor:Sprite)
  89. {
  90. _currentMapDoc.AddActorToMap(actor);
  91. }
  92. public function AddPlayerToMap(myAvatar:IAvatar,swapPo:Point,isHit:Boolean,playController:PlayerController)
  93. {
  94. GloableData.AvatarPosition.x = swapPo.x;
  95. GloableData.AvatarPosition.y = swapPo.y;
  96. _currentMapDoc.LoadMap(myAvatar, swapPo, isHit, playController, this);//向本级汇报
  97. //更新地图坐标
  98. UpdateMapPosition();
  99. }
  100. public function AddNetPlayerToMap(avatar:IAvatar,contorller:NetWorkController)
  101. {
  102. _currentMapDoc.AddNetPlayerToMap(avatar,contorller);
  103. }
  104. public function RemoveNetAvatarFromMap(avatar:IAvatar)
  105. {
  106. _currentMapDoc.RemoveNetAvatarFromMap(avatar);
  107. }
  108. public function ChangeWeather(weather:String,strength:int)
  109. {
  110. switch(weather)
  111. {
  112. case "rain":
  113. _currentMapDoc.SetWeather(Weather.RAIN,strength);
  114. break;
  115. case "sun":
  116. _currentMapDoc.SetWeather(Weather.SUN,strength);
  117. break;
  118. }
  119. }
  120. public function OnReport(evt:Event):void//这个函数其实还要调用高层的函数,这里由于上层没写,暂时这样,本质是一个事件向上传递的过程
  121. {
  122. if (evt is ManagerEventBase)
  123. {
  124. var event:ManagerEventBase = evt as ManagerEventBase;
  125. switch(event.EvtType)
  126. {
  127. case MapData_Map_ManagerEvent.CHANGE_MAP://如果是修改地图事件,,这里如果不重新new一个过去,会出问题,脑残的AS
  128. {
  129. var evvt:Map_Game_ManagerEvent = new Map_Game_ManagerEvent(Map_Game_ManagerEvent.CHANGE_MAP);
  130. evvt.CHANGE_MAP_spawnPoint = (event as MapData_Map_ManagerEvent).CHANGE_MAP_spawnPoint;
  131. evvt.CHANGE_MAP_targetMap = (event as MapData_Map_ManagerEvent).CHANGE_MAP_targetMap;
  132. evvt.CHANGE_MAP_sourceMap = (event as MapData_Map_ManagerEvent).CHANGE_MAP_sourceMap;
  133. _repoter.OnReport(evvt);
  134. return;
  135. }
  136. case MapData_Map_ManagerEvent.CALLLOADAPP:
  137. {
  138. var evvt:Map_Game_ManagerEvent = new Map_Game_ManagerEvent(Map_Game_ManagerEvent.CALLLOADAPP);
  139. evvt.CALLLOADAPP_appName = (event as MapData_Map_ManagerEvent).CALLLOADAPP_appName;
  140. _repoter.OnReport(evvt);
  141. return;
  142. }
  143. }
  144. }
  145. }
  146. }
  147. }