예제 #1
0
    // 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);
    }
예제 #2
0
 private void OnCommandTargetSelected(PickInfo piTarget)
 {
     // 执行
     DoAttack(piTarget);
     TryCommand();
     Stop();
 }
예제 #3
0
    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");
    }
예제 #4
0
        //添加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);
            }
        }
예제 #5
0
    /// <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);
    }
예제 #6
0
    // 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();
    }
예제 #7
0
        //添加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);
        }
예제 #8
0
    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}>");
    }
예제 #9
0
    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();
    }