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])); // } } } } }
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; } }
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; } } }
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)); } }
/// <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); }
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; } } }
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; } } }