/// <summary> /// 玩家地块 /// </summary> /// <param name="gameObj"></param> /// <param name="voMapItem"></param> private void UpdatePlayer(GameObject gameObj, VoMapItem voMapItem) { var transform = gameObj.transform; var imageBg = transform.Find("ImageBg").GetComponent <Image>(); var onImage = transform.Find("ImageBg").GetComponent <OnImage>(); var txtLv = transform.Find("TxtLv").GetComponent <Text>(); var txtName = transform.Find("TxtName").GetComponent <Text>(); var txtPos = transform.Find("TxtPos").GetComponent <Text>(); var txtFR = transform.Find("TxtFR").GetComponent <Text>(); var imgBattle = transform.Find("ImgBattle").gameObject; var imgFlag = transform.Find("ImgFlag").gameObject; var imgSelfLegion = transform.Find("ImgSelfLegion").gameObject; var imgTeamLegion = transform.Find("ImgTeamLegion").gameObject; var sliderFR = transform.Find("SliderFR").GetComponent <Slider>(); var player = voMapItem.WorldUnit.player; var flag = voMapItem.WorldUnit.flag; imageBg.sprite = m_MapAtlas.GetSprite(voMapItem.CitySprite); imageBg.SetNativeSize(); AddListener(onImage, voMapItem); txtLv.text = (player.level + 1).ToString(); var isMyself = m_VoMyPlayer.id == player.id; var isHasLegion = !string.IsNullOrEmpty(player.legion); var isMyLegion = isHasLegion && string.Equals(m_VoMyPlayer.legion, player.legion); imgSelfLegion.SetActive(isMyself && isHasLegion); imgTeamLegion.SetActive(!isMyself && isMyLegion); var color = isMyself ? "#f5d70f" : (isMyLegion ? "#71c8fa" : "#e23f3f"); //自身黄色、同军团绿色、敌人红色 txtName.text = "<color=" + color + ">" + player.nickname + "</color>"; txtPos.text = "(" + voMapItem.position.x + "," + voMapItem.position.y + ")"; sliderFR.value = (float)(player.fr_val / (player.fr_max > 0 ? player.fr_max : 1)); imgFlag.SetActive(sliderFR.value < 0.5f); txtFR.text = player.fr_val + "/" + player.fr_max; }
/// <summary> /// 回收地块之后,需要激活未显示的新地块 /// </summary> private void ActiveMapItem(Vector2 position) { var posX = (int)(position.x - m_HalfCountX); var posY = (int)(position.y - m_HalfCountY); for (int node = posX; node < posX + InitCountX; node++) { for (int repo = posY; repo < posY + InitCountY; repo++) { var pointPos = new Vector2(node, repo); if (!IsPosActive(pointPos)) { var voMapItem = new VoMapItem(); voMapItem.position = pointPos; voMapItem.IsOutofBounds = pointPos.IsOutofBounds(MinPos, MaxPos); voMapItem.IsMapDeep = (pointPos.x + pointPos.y) % 2 == 0; voMapItem.ObjMapItem = m_MapsPool.GetGameObject(); ShowMapItem(voMapItem); if (!voMapItem.IsOutofBounds) { voMapItem.ObjBuildItem = m_BuildsPool.GetGameObject(); ShowResources(voMapItem); } m_MapActiveDic.Add(pointPos, voMapItem); } } } }
/// <summary> /// 空地块 /// </summary> /// <param name="gameObj"></param> /// <param name="voMapItem"></param> private void UpdateNone(GameObject gameObj, VoMapItem voMapItem) { var transform = gameObj.transform; var imageBg = transform.Find("ImageBg").GetComponent <Image>(); var onImage = transform.Find("ImageBg").GetComponent <OnImage>(); imageBg.sprite = m_MapAtlas.GetSprite(voMapItem.NoneSprite); imageBg.SetNativeSize(); AddListener(onImage, voMapItem); }
/// <summary> /// 随机在地图上创建建筑 /// </summary> /// <param name="objects"></param> /// <param name="node"></param> /// <param name="repo"></param> private void ShowResources(VoMapItem voMapItem) { var gameObj = voMapItem.ObjBuildItem; var position = voMapItem.position; var localPosition = GetPosition(position.x, position.y); gameObj.name = "BuildItem" + position.x + "x" + position.y; gameObj.transform.SetParent(m_BuildsTrans); gameObj.transform.localScale = Vector3.one; gameObj.transform.localPosition = localPosition; gameObj.transform.localRotation = Quaternion.identity; gameObj.GetComponent <RectTransform>().pivot = m_HalfPivot; UpdateResources(voMapItem); }
/// <summary> /// 在地图上显示某地图块 /// </summary> /// <param name="gameObj">地块对象</param> /// <param name="position">坐标位置</param> private void ShowMapItem(VoMapItem voMapItem) { var gameObj = voMapItem.ObjMapItem; var position = voMapItem.position; var localPosition = GetPosition(position.x, position.y); gameObj.name = "MapItem" + position.x + "x" + position.y; gameObj.transform.SetParent(m_MapsTrans); gameObj.transform.localScale = Vector3.one; gameObj.transform.localPosition = localPosition; gameObj.transform.localRotation = Quaternion.identity; gameObj.GetComponent <RectTransform>().pivot = m_HalfPivot; gameObj.GetComponent <Image>().sprite = m_MapAtlas.GetSprite(voMapItem.MapSprite); }
/// <summary> /// 资源地块 /// </summary> /// <param name="gameObj"></param> /// <param name="voMapItem"></param> private void UpdateRes(GameObject gameObj, VoMapItem voMapItem) { var transform = gameObj.transform; var flag = voMapItem.WorldUnit.flag; var imageBg = transform.Find("ImageBg").GetComponent <Image>(); var onImage = transform.Find("ImageBg").GetComponent <OnImage>(); var txtLv = transform.Find("TxtLv").GetComponent <Text>(); var imgFlagSelf = transform.Find("ImgFlagSelf").gameObject; var imgFlagTeam = transform.Find("ImgFlagTeam").gameObject; imgFlagSelf.SetActive(flag == WorldFlag.Self); imgFlagTeam.SetActive(flag == WorldFlag.Friend); txtLv.text = voMapItem.WorldUnit.res.level.ToString(); imageBg.sprite = m_MapAtlas.GetSprite(voMapItem.ResSprite); imageBg.SetNativeSize(); AddListener(onImage, voMapItem); }
/// <summary> /// 刷新显示城池、资源等 /// </summary> /// <param name="voMapItem"></param> private void UpdateResources(VoMapItem voMapItem) { var gameObj = voMapItem.ObjBuildItem; var transform = gameObj.transform; var panelCity = transform.Find("PanelCity").gameObject; var panelRes = transform.Find("PanelRes").gameObject; var panelNone = transform.Find("PanelNone").gameObject; void ShowByType(MapType mapType) { panelCity.SetActive(mapType == MapType.Player); panelRes.SetActive(mapType == MapType.Resource); panelNone.SetActive(mapType == MapType.None); } if (null != voMapItem.WorldUnit) { var unitType = voMapItem.WorldUnit.unitType; ShowByType(unitType); switch (unitType) { case MapType.Player: UpdatePlayer(panelCity, voMapItem); break; case MapType.Resource: UpdateRes(panelRes, voMapItem); break; case MapType.None: UpdateNone(panelNone, voMapItem); break; } } else { ShowByType(MapType.None); UpdateNone(panelNone, voMapItem); } }
/// <summary> /// 单击建筑 /// </summary> /// <param name="gameObj"></param> private void OnItemClick(OnImage onImage, VoMapItem voMapItem) { Util.Log("触发坐标:{0:G},{1:G}", voMapItem.position.x, voMapItem.position.y); void WorldMove() { Util.CallMethod(name, "WorldMove", voMapItem.position.x, voMapItem.position.y); } if (null == voMapItem.WorldUnit) { //移动到该位置 TweenImage(onImage, WorldMove); return; } var unitType = voMapItem.WorldUnit.unitType; switch (unitType) { case MapType.None: //移动到该位置 TweenImage(onImage, WorldMove); break; case MapType.Player: var player = voMapItem.WorldUnit.player; if (null == player) { return; } Util.CallMethod(name, "CheckPlayer", voMapItem.position.x, voMapItem.position.y, player.id); break; case MapType.Resource: //攻击某点 Util.CallMethod(name, "CheckRes", voMapItem.position.x, voMapItem.position.y, voMapItem.WorldUnit.res.id); break; } }
/// <summary> /// 添加监听 /// </summary> /// <param name="gameObj"></param> /// <param name="voMapItem"></param> private void AddListener(OnImage onImage, VoMapItem voMapItem) { //添加监听 onImage.onDistance.RemoveAllListeners(); onImage.onDistance.AddListener(delegate { OnItemClick(onImage, voMapItem); }); }