예제 #1
0
 public void Handle(SpawnEvent message)
 {
     //游戏单位建造事件
     //Debug.Log(message.getObject());//获取建造出来的单位
     //更多详细信息的话,比如
     if (message.hasRoadEnd())//对象是否是人,如果是人就会有目的地距离啥的
     {
         characterList.Add(message.getObject());
     }
     else
     {
         vehicleList.Add(message.getObject());
     }
     message.getDistance(delegate(float d) {
         print("距离 : " + d);
     });
     if (message.hasRoadEnd() && message.getObjectOwner() != owner)
     {
         //if (IDs.getIDByName(Tags.Character.GATEWORKER) == message.getObjectID()) {
         Vector3 tempv = message.getObject().GetComponent <Roadmovable>().getTargetPosition();
         print("坐标: " + tempv);
         if (tempv.z > 135)
         {
             gameID = IDs.getIDByName(Tags.Character.GUNNER);
             if (cdAndGoldIsOK(gameID))
             {
                 UnityEvent.UnityEventCenter.SendMessage <CreateUnitEvent>(new CreateUnitEvent(gameID, new Vector3(15.5f, 0, 13.2f) + subPos, owner, mineList[0]));
                 //  }
             }
         }
     }
 }
예제 #2
0
    private List <MineMountain> mineList = new List <MineMountain>();//矿山列表,期望首位储存的是 起始矿山。

    // Update is called once per frame
    void Update()
    {
        gameID = IDs.getIDByName(Tags.Vehicle.BASETRAMCAR);
        if (cdAndGoldIsOK(gameID))
        {
            UnityEvent.UnityEventCenter.SendMessage <CreateUnitEvent>(new CreateUnitEvent(gameID, new Vector3(261.7f, 0, 101.4f), owner, mineList[0]));
            return;
        }
    }
예제 #3
0
    void otherMineAI()
    {
        //占分矿ai,只选择下面的道路
        if (forkFlag[1] == 0 && forkFlag[2] == 1)
        {
            roadIsOK = 1;
        }
        else
        {
            roadIsOK = 0;
        }

        if (forkFlag[1] != 0 && forkWorker[1] == 0)
        {
            //道闸c方向不对,派遣道闸工人
            gameID = IDs.getIDByName(Tags.Character.GATEWORKER);
            if (cdAndGoldIsOK(gameID))
            {
                UnityEvent.UnityEventCenter.SendMessage <CreateUnitEvent>(new CreateUnitEvent(gameID, forkPosList[1] + subPos, owner, mineList[0]));
                forkWorker[1] = 1;
                canReach(mineMountain2Pos, cForkPos + subPos);//为了得到距离
                speed = getSpeedById(gameID);
                TimerController.getInstance().NewTimer(3f, false, delegate(float time) { }, delegate() {
                    forkWorker[1] = 0;
                }).Start();
                print("距离: " + distance + " 速度: " + speed + "时间: " + distance / speed);
                return;
            }
        }
        if (forkFlag[2] != 1 && forkWorker[2] == 0)
        {
            //道闸e方向不对,派遣道闸工人
            gameID = IDs.getIDByName(Tags.Character.GATEWORKER);
            if (cdAndGoldIsOK(gameID))
            {
                UnityEvent.UnityEventCenter.SendMessage <CreateUnitEvent>(new CreateUnitEvent(gameID, forkPosList[2] + subPos, owner, mineList[0]));
                forkWorker[2] = 1;
                canReach(mineMountain2Pos, eForkPos + subPos);
                speed = getSpeedById(gameID);
                TimerController.getInstance().NewTimer(7f, false, delegate(float time) { }, delegate() {
                    forkWorker[2] = 0;
                }).Start();
                return;
            }
        }

        //下方道路通畅,派遣占矿车
        if (roadIsOK == 1)
        {
            gameID = IDs.getIDByName(Tags.Vehicle.EXPLORATIONTRAMCAR);
            if (cdAndGoldIsOK(gameID))
            {
                UnityEvent.UnityEventCenter.SendMessage <CreateUnitEvent>(new CreateUnitEvent(gameID, cForkPos + subPos, owner, mineList[0]));
                return;
            }
        }
    }
예제 #4
0
 public void Handle(MineSelectEvent message)
 {
     isMineSelected = true;
     lockButton.gameObject.SetActive(false);
     sp = message.getMine().getSpawnerList();
     for (int i = 0; i < sp.Count; i++)
     {
         //sp[i].spawnUnit.GetComponent<GameobjBase>().game_ID;
         picList.Add(sp[i].spawnUnit.GetComponent <GameobjBase>().game_name_en);
         IDList.Add(IDs.getIDByName(picList[i]));
     }
 }
    protected override void OnDragDropRelease(GameObject surface)
    {
        base.OnDragDropRelease(surface);
        Ray ray   = new Ray();
        Ray uiRay = new Ray();

        if (Application.platform == RuntimePlatform.WindowsEditor || Application.platform == RuntimePlatform.WindowsPlayer)
        {
            ray   = Camera.main.ScreenPointToRay(Input.mousePosition);
            uiRay = UICamera.mainCamera.ScreenPointToRay(Input.mousePosition);
        }
        else
        {
            ray   = Camera.main.ScreenPointToRay(Input.GetTouch(0).position);
            uiRay = UICamera.mainCamera.ScreenPointToRay(Input.GetTouch(0).position);
        }



        RaycastHit hit = new RaycastHit();

        //if (Layers.CHARACTER == IDs.getLayerByID(sp.spawnUnit.GetComponent<GameobjBase>().game_ID))
        if (sp.spawnUnit.GetComponent <GameobjBase>().game_ID == IDs.getIDByName(Tags.Character.GATEWORKER))
        {//如果是人的话,检测到是搬道闸才能发送信息建造
            Physics.Raycast(ray, out hit, Mathf.Infinity, 1 << Layers.BUILDING | 1 << Layers.RAILWAY);
            if (hit.collider == null || hit.collider.gameObject.tag != Tags.GATE)
            {
                return;
            }
        }
        else
        {
            //这里是车辆被拖动的内容,只能够拖动到待建造面板中

            //广播调用面板对应函数
            surface.BroadcastMessage("onDragCrad", gameObject, SendMessageOptions.DontRequireReceiver);

            //Physics.Raycast(uiRay, out hit,Mathf.Infinity,1<<Layers.UI);
            //if(hit.transform.gameObject.tag==Tags.CAR_SELECTOR)
            //{
            //    int id = sp.spawnUnit.GetComponent<GameobjBase>().game_ID;
            //    string name= sp.spawnUnit.GetComponent<GameobjBase>().game_name;
            //    UnityEventCenter.SendMessage<setVehicleEvent>(new setVehicleEvent(null, hit.transform.gameObject, id,name));
            //}
        }



        if (hit.collider != null)
        {//建造信息
            UnityEventCenter.SendMessage <CreateUnitEvent>(new CreateUnitEvent(sp.spawnUnit.GetComponent <GameobjBase>().game_ID, hit.point));
        }
    }
예제 #6
0
    /// <summary>
    /// 确定单位是否可以按规则创建
    /// </summary>
    /// <param name="des"></param>
    /// <param name="ID"></param>
    /// <returns></returns>
    private bool destinationConfirm(Vector3 des, int ID)
    {
        Ray        ray = new Ray(des - new Vector3(0, 1, 0), Vector3.up);
        RaycastHit rh;

        Physics.Raycast(ray, out rh, 1 << Layers.BUILDING | 1 << Layers.RAILWAY);
        if (rh.collider == null)//未点击到建筑或路return
        {
            return(false);
        }
        if (ID == IDs.getIDByName(Tags.Character.GATEWORKER)) //扳道闸工人
        {
            if (!(rh.collider.tag.Equals(Tags.GATE)))         //未点到扳道闸
            {
                return(false);
            }
        }
        return(true);
    }
예제 #7
0
 void disturbAI()
 {
     //干扰AI
     //初期先控制玩家无法直达
     if (forkFlag[5] == 0 && forkWorker[5] == 0)
     {
         //道闸d方向不对,派遣道闸工人
         gameID = IDs.getIDByName(Tags.Character.GATEWORKER);
         if (cdAndGoldIsOK(gameID))
         {
             UnityEvent.UnityEventCenter.SendMessage <CreateUnitEvent>(new CreateUnitEvent(gameID, forkPosList[5] + subPos, owner, mineList[0]));
             forkWorker[5] = 1;
             canReach(mineMountain2Pos, eForkPos + subPos);
             speed = getSpeedById(gameID);
             TimerController.getInstance().NewTimer(13f, false, delegate(float time) { }, delegate() {
                 forkWorker[5] = 0;
             }).Start();
             return;
         }
     }
     if (forkFlag[4] == 0 && forkWorker[4] == 0)
     {
         //道闸c方向不对,派遣道闸工人
         gameID = IDs.getIDByName(Tags.Character.GATEWORKER);
         if (cdAndGoldIsOK(gameID))
         {
             UnityEvent.UnityEventCenter.SendMessage <CreateUnitEvent>(new CreateUnitEvent(gameID, forkPosList[4] + subPos, owner, mineList[0]));
             forkWorker[4] = 1;
             canReach(mineMountain2Pos, cForkPos + subPos);//为了得到距离
             speed = getSpeedById(gameID);
             TimerController.getInstance().NewTimer(8f, false, delegate(float time) { }, delegate() {
                 forkWorker[4] = 0;
             }).Start();
             return;
         }
     }
 }
예제 #8
0
    void rushAI()
    {
        //场面分析
        if (forkFlag[1] == 0 && forkFlag[2] == 0)
        {
            roadIsOK = 1;
        }
        else
        {
            roadIsOK = 0;
        }
        //根据场面情况开始处理
        //道路不通的情况
        if (forkFlag[1] != 0 && forkWorker[1] == 0)
        {
            //道闸c方向不对,派遣道闸工人
            gameID = IDs.getIDByName(Tags.Character.GATEWORKER);
            if (cdAndGoldIsOK(gameID))
            {
                UnityEvent.UnityEventCenter.SendMessage <CreateUnitEvent> (new CreateUnitEvent(gameID, forkPosList[1] + subPos, owner, mineList [0]));
                forkWorker[1] = 1;
                canReach(mineMountain2Pos, cForkPos + subPos);//为了得到距离
                speed = getSpeedById(gameID);
                TimerController.getInstance().NewTimer(3f, false, delegate(float time) {}, delegate() {
                    forkWorker[1] = 0;
                }).Start();
                print("距离: " + distance + " 速度: " + speed + "时间: " + distance / speed);
                return;
            }
        }
        if (forkFlag[2] != 0 && forkWorker[2] == 0)
        {
            //道闸e方向不对,派遣道闸工人
            gameID = IDs.getIDByName(Tags.Character.GATEWORKER);
            if (cdAndGoldIsOK(gameID))
            {
                UnityEvent.UnityEventCenter.SendMessage <CreateUnitEvent> (new CreateUnitEvent(gameID, forkPosList[2] + subPos, owner, mineList [0]));
                forkWorker[2] = 1;
                canReach(mineMountain2Pos, eForkPos + subPos);
                speed = getSpeedById(gameID);
                TimerController.getInstance().NewTimer(7f, false, delegate(float time) {}, delegate() {
                    forkWorker[2] = 0;
                }).Start();
                return;
            }
        }

        //道路畅通的情况
        if (roadIsOK == 1)
        {
            //前方道路畅通,该发车了
            gameID = IDs.getIDByName(Tags.Vehicle.OVERWEIGHTTRAMCAR);
            if (cdAndGoldIsOK(gameID))
            {
                UnityEvent.UnityEventCenter.SendMessage <CreateUnitEvent>(new CreateUnitEvent(gameID, cForkPos + subPos, owner, mineList[0]));
                return;
            }

            gameID = IDs.getIDByName(Tags.Vehicle.BASETRAMCAR);
            if (cdAndGoldIsOK(gameID))
            {
                UnityEvent.UnityEventCenter.SendMessage <CreateUnitEvent> (new CreateUnitEvent(gameID, cForkPos + subPos, owner, mineList [0]));
                return;
            }

            gameID = IDs.getIDByName(Tags.Vehicle.TRAIN);
            if (cdAndGoldIsOK(gameID))
            {
                UnityEvent.UnityEventCenter.SendMessage <CreateUnitEvent>(new CreateUnitEvent(gameID, cForkPos + subPos, owner, mineList[0]));
                return;
            }
        }
    }