// Actually delays the pick by 6 slots private void DelayPick(PickInfo pick, int roundNumber, int pickNumber) { int numPicksMoved = 0; int maxPicksToMove = 6; // Remove pick from the rounds pickInfo[roundNumber].Remove(pick); int startingPickValue = pickNumber; for (int i = roundNumber; i < totalRounds; ++i) { for (int j = startingPickValue; j < pickInfo[i].Count; ++j) { if (numPicksMoved >= maxPicksToMove) { pickInfo[i].Insert(j, pick); return; } ++numPicksMoved; } // Start counting at pick 1 startingPickValue = 0; } // Pick moved to the end if there are no more rounds to move it back pickInfo[totalRounds - 1].Add(pick); }
private void OnCommandTargetSelected(PickInfo piTarget) { // 执行 DoAttack(piTarget); TryCommand(); Stop(); }
private void OnTriggerEnter(Collider other) { //Debug.Log(Player.name + " 靠近物体: " + other.name); EquipInfo info = other.gameObject.GetComponent <EquipInfo>(); int index = info.equipId; //Debug.Log(" equipid: " + index); EquipType type = info.type; SendBaseClass send = new PickInfo(index, other.gameObject, type); LiteEventManager.Instance.TriggerEvent(CollectKey.Trig, send); //UIManager.Instance.m_collectController.AddItemToList(index,DataBaseManager.Instance.BagItemDic[index], //"Prefab/BagItem"); }
//添加item void AddItem(object obj) { //根据key读取数据 PickInfo recive = new PickInfo(); recive = obj as PickInfo; BaseItem it = DataBaseManager.Instance.BagItemDic[recive.index]; int count = m_collectModel.ListCount(); if (count == 0) { m_collectView.ShowCollectUI(); } if (AddItemToList(recive, it, "Prefab/BagItem")) { m_collectView.ChangeListHeight(count + 1); } }
/// <summary> /// 往场景中添加实例 /// </summary> /// <param name="Path"></param> /// <param name="location"></param> /// <param name="info"></param> /// <returns></returns> public bool CreateGameObject(string Path, Vector3 location, PickInfo info) { GameObject obj = LoadPrefabFromRes(Path, true); //由于模型的问题,需要将rotation的沿z轴旋转90度 obj.transform.position = location; obj.transform.SetParent(AvatarInfoManager.Instance.GetSceneTransform(), true); EquipInfo thisInifo = obj.GetComponent <EquipInfo>(); if (thisInifo == null) { obj.AddComponent <EquipInfo>(); } EquipInfo Info = obj.GetComponent <EquipInfo>(); Info.equipId = info.index; Info.type = info.type; return(true); }
// Start is called before the first frame update void Start() { // 这一行,查了两个小时。。。如果没有,打包客户端后,地表看不到任何颜色,都是灰色。 Shader.EnableKeyword("HEX_MAP_EDIT_MODE"); _selectObj = Instantiate(_selectObjTemplate); _selectObj.SetActive(false); _hitGround = Instantiate(_hitGroundTemplate); _hitGround.SetActive(false); _commands.gameObject.SetActive(false); _pickInfoMaster = new PickInfo(); _pickInfoTarget = new PickInfo(); _btnCreateActor.transform.Find("Select").gameObject.SetActive(false); _btnRangeTest.transform.Find("Select").gameObject.SetActive(false); ClearCreateActorGroup(); AddListener(); }
//添加item到列表 public bool AddItemToList(PickInfo send, BaseItem it, string prefabPath) { GameObject obj = ResManager.Instance.LoadPrefabFromRes(prefabPath, true); Sprite sprite = ResManager.Instance.LoadSpriteFromRes(it.imageName); //用gameobject的唯一标识符作为字典的索引 int index = send.Instance.GetInstanceID(); EquipListItem listItem = new EquipListItem(it, obj, send.Instance); m_collectView.ChangeListHeight(m_collectModel.ListCount()); //初始化prefab的各个子物体 Transform numberObj = obj.transform.GetChild(0); Text number = numberObj.GetComponent <Text>(); number.text = it.count.ToString(); Image img = obj.transform.GetChild(1).GetComponent <Image>(); img.sprite = sprite; listItem.sprite = sprite; Text name = obj.transform.GetChild(2).GetComponent <Text>(); name.text = it.name; Text discribe = obj.transform.GetChild(3).GetComponent <Text>(); discribe.text = it.discribe; obj.transform.GetComponent <BagItemController>().SetDicKey(index); //初始化完成 m_collectModel.AddItemToList(index, listItem); m_collectView.MountItem(listItem.obj.transform); return(true); }
private void DoAttack(PickInfo piTarget) { // 看看行动点够不够 if (!IsActionPointGranted()) { string msg = "行动点数不够, 本操作无法执行! "; UIManager.Instance.SystemTips(msg, PanelSystemTips.MessageType.Error); Debug.Log("CmdAttack DoAttack Error - " + msg); return; } var pi = CommandManager.Instance.CurrentExecuter; if (pi == null || !pi.CurrentActor) { string msg = $"没有选中任何部队!"; UIManager.Instance.SystemTips(msg, PanelSystemTips.MessageType.Error); Debug.Log("CmdAttack DoAttack Error - " + msg); return; } var avMe = CommandManager.Instance.CurrentExecuter.CurrentActor; if (!avMe) { return; } var avTarget = piTarget.CurrentActor; HexCell cellTarget = piTarget.CurrentCell; if (!cellTarget) { return; } var abMe = GameRoomManager.Instance.RoomLogic.ActorManager.GetActor(avMe.ActorId); if (abMe == null) { return; } //////////////////// // 如果目标点在射程以内,则直接攻击 if (avTarget) { if (avMe.IsEnemyInRange(avTarget) && avMe.OwnerId != avTarget.OwnerId) { // 这里其实应该发送TroopAiState消息到服务器,而不是直接操作状态机,但是因为状态机目前均行在本地,所以就直接调用了 abMe.IsCounterAttack = false; // 这是主动攻击, 不是反击, 记录在自己身上, Stop的时候用 abMe.StateMachine.TriggerTransition(StateEnum.FIGHT, cellTarget.Index, piTarget.CurrentActor.ActorId, abMe.AttackDuration); return; } } //////////////////// // 敌人不在附近,则需要找过去 var hexmapHelper = GameRoomManager.Instance.HexmapHelper; var cellMe = avMe.HexUnit.Location; cellTarget = hexmapHelper.TryFindADest(avMe.HexUnit.Location, cellTarget); GameRoomManager.Instance.HexmapHelper.hexGrid.FindPath(cellMe, cellTarget, avMe.HexUnit); if (!hexmapHelper.hexGrid.HasPath) {// 如果选中的是一个单位,则需要走到该单位的相邻点上去 Debug.Log($"CmdAttack DoAttack Error - Cannot go to target position:<{cellMe.coordinates.X},{cellMe.coordinates.Z}> "); return; } if (avTarget && avTarget.OwnerId != avMe.OwnerId) {// 目标点是一支部队,且是敌人的部队,则盯住这支部队猛打 //abMe.StateMachine.TriggerTransition(StateEnum.WALKFIGHT, cellTarget.Index, avTarget.ActorId); SendAiStateHigh(avMe.OwnerId, avMe.ActorId, StateEnum.WALKFIGHT, cellTarget.Index, avTarget.ActorId); } else {// 目标点仅仅是一个位置坐标,则在行军过程中,搜索进攻,发现任意敌人就停下来打它 //abMe.StateMachine.TriggerTransition(StateEnum.WALKFIGHT, cellTarget.Index); SendAiStateHigh(avMe.OwnerId, avMe.ActorId, StateEnum.WALKFIGHT, cellTarget.Index); } Debug.Log($"CmdAttack DoAttack OK - From<{avMe.PosX},{avMe.PosZ}> - Dest Pos<{cellTarget.coordinates.X},{cellTarget.coordinates.Z}>"); }
public void StartMainDraft() { // Delay all picks in reverse draft order for (int i = DraftOrder.Length - 1; i >= 0; --i) { // Forfeit any picks first int contracts = 1 + playerProfiles[(int)DraftOrder[i]].twoYearContracts.Count + playerProfiles[(int)DraftOrder[i]].oneYearContracts.Count; if (contracts > 3) { bool breakOut = false; // Loop to forfeit picks while (contracts > 3) { for (int j = 0; j < totalRounds; ++i) { foreach (PickInfo pick in pickInfo[j]) { // Remove pick from the draft if (pick.drafterID == DraftOrder[i]) { print("PICK FORFEITED: " + pick.drafterID); pickInfo[j].Remove(pick); --contracts; breakOut = true; break; } } if (breakOut) { break; } } breakOut = false; } } // Delay picks for the given drafter print(DraftOrder[i] + " : " + playerProfiles[(int)DraftOrder[i]].picksToDelay); DelayPicks(DraftOrder[i], playerProfiles[(int)DraftOrder[i]].picksToDelay); } // Add all compensation picks foreach (DrafterEnum drafter in DraftOrder) { int contracts = 1 + playerProfiles[(int)drafter].twoYearContracts.Count + playerProfiles[(int)drafter].oneYearContracts.Count; // Compensation picks need to be added if (contracts < 3) { // Compensation pick for 2 year contracts (after round 3) if (playerProfiles[(int)drafter].twoYearContracts.Count == 0) { PickInfo newPick = new PickInfo(); newPick.drafterID = drafter; newPick.roundNumber = 2; newPick.pickNumber = pickInfo[2].Count; pickInfo[2].Add(newPick); } // Compensation pick for 1 year contracts (after round 2) if (playerProfiles[(int)drafter].oneYearContracts.Count == 0) { PickInfo newPick = new PickInfo(); newPick.drafterID = drafter; newPick.roundNumber = 1; newPick.pickNumber = pickInfo[1].Count; pickInfo[1].Add(newPick); } } } // Start the draft order ticker script GameObject orderObject = GameObject.Find("DraftOrderTicker"); orderObject.transform.DOMoveX(0, animationTime); draftOrderTicker = orderObject.GetComponent <DraftOrderTicker>(); for (int i = 0; i < draftOrderTicker.maxNameplates; ++i) { draftOrderTicker.AddNameplateToTicker(pickInfo[tickerRound][tickerPick].drafterID); ++tickerPick; if (tickerPick >= pickInfo[tickerRound].Count) { tickerPick = 0; ++tickerRound; if (tickerRound >= totalRounds) { break; } } } GameObject.Find("PauseButton").GetComponent <PauseButton>().Show(); pickTimerText.transform.DOMoveY(-1.9f, quickAnimationTime); TimerStateOverlay.transform.DOMoveY(-0.75f, quickAnimationTime); makePickButton.transform.DOMoveY(-3.25f, quickAnimationTime); bestAvailableController.GetComponent <BestAvailableController>().SetBestAvailableControllerRunning(true); GameObject.Find("AlreadyPickedController").GetComponent <AlreadyPickedController>().SetAlreadyPickedControllerRunning(true); GoToDraftState(DraftState.AnimateToNextDrafter); UpdateLabels(); }