| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421 |
- cc.Class({
- extends: cc.Component,
- properties: {
- isHiddenTouch: {
- default: false,
- tooltip: "初始化时候是否绑定touch"
- },
- //是否显示房屋信息
- isShowBuildingInfo: { default: false },
- // 是否是在预制生成
- _isInstance: { default: false, visible: false },
- //如果进入编辑状态
- _ifCanEdit: { default: false, visible: false },
- //触摸多久进入编辑状态
- touchTimer: { default: 0.8, visible: false },
- // //绘制底部颜色区域
- // Draw: cc.Node,
- //触摸一开始的位置
- _touchPosition: {
- default: new cc.Vec2(),
- visible: false,
- serializable: false
- },
- _EndPosition: {
- default: new cc.Vec2(),
- visible: false,
- serializable: false
- },
- //如果自动移动
- isAutoMove: { default: false, visible: false },
- targetNode: cc.Node,
- //编辑时候,记录旧的遮挡位置
- _OldIndex: 0,
- //是否显示节点
- isShowInfo: { default: false },
- infoNode: cc.Node,
- //如果是在新手引导时候建造的建筑
- //只要拖拽到虚影对应的位置,才能成功建造
- },
- // LIFE-CYCLE CALLBACKS:
- onLoad() {
- this._buildingsInfo = this.node.getComponent('buildingsInfo');
- this.buildInfo = this._buildingsInfo.buildInfo;
- this.title = this._buildingsInfo.title;
- if (!this.isHiddenTouch) {
- this.node.on(cc.Node.EventType.TOUCH_START, this.TouchStartFunction, this);
- this.node.on(cc.Node.EventType.TOUCH_END, this.TouchEndFunction, this);
- this.node.on(cc.Node.EventType.TOUCH_CANCEL, this.TouchCancelFunction, this);
- }
- // console.log("this.isHiddenTouch",this.isHiddenTouch);
- this.Draw = this._buildingsInfo._buildZone;
- if (!this.Draw)
- this.Draw = this.node.getChildByName('Draw');
- this.Draw.active = false;
- },
- start() {
- this.InitStartPos = this._buildingsInfo.InitStartPos;
- this._camera = GlobalD.game.MainCamera;
- this._canvas = GlobalD.game.Canvas;
- this._tileMap = GlobalD.TiledMap;
- },
- TouchStartFunction() {
- // console.log("TouchStartFunction");
- this._touchPosition = this.node.getPosition();
- GlobalD.GameControl._isBuildingMove = false;
- this._isMove = false;
- this.unschedule(this.callback);
- this.scheduleOnce(this.callback = function () {
- //编辑器移动的话,返回
- if (GlobalD.GameControl.isUICameraMove) return;
- //进入编辑状态
- // cc.log('进入编辑状态!',GlobalD.GameControl.isUICameraMove);
- // this.onEditorStatus(false);
- //按住可以编辑
- }, this.touchTimer);
- },
- //生成房屋时候的预制状态
- // 编辑状态
- onEditorStatus(isInstance) {
- // cc.log('onEditorStatus', isInstance);
- //如果是编辑状态下,返回
- if (this._ifCanEdit) return;
- //只要是编辑状态下。设为true
- GlobalD.GameControl._isBuildingCanEdit = true;
- this._isInstance = isInstance;
- this._ifCanEdit = true;
- this.node.on(cc.Node.EventType.TOUCH_MOVE, this.MoveFunction, this);
- GlobalD.game._ManageUIScript.onEditorialBuildings(this.node);
- GlobalD.game.onSetCurrentBuildingTarget(this.node);
- if (!this.Draw)
- this.Draw = this.node.getChildByName('Draw')
- this.Draw.active = true;
- if (isInstance) {
- // cc.log(11111);
- this._currentTiledValue = GlobalD.TiledMap._tilePosFromLocation(this.node.position);
- let endPos = GlobalD.TiledMap._getTheMiddleLocationFromtilePos(this._currentTiledValue);
- this.node.setPosition(endPos);
- this._canNotBuild = GlobalD.game.areTheraOverlappingAreas(this._currentTiledValue, this.buildInfo.occupyArea, 1);
- } else {// if (this._tileMap)
- // cc.log(22222);
- this._currentTiledValue = this._tileMap._tilePosFromLocation(this._touchPosition);
- this._canNotBuild = GlobalD.game.areTheraOverlappingAreas(this._currentTiledValue, this.buildInfo.occupyArea, 1);
- }
- if (task.virtualShadowPos)
- this._canNotBuild = this._currentTiledValue.sub(task.virtualShadowPos).mag() == 0 ? false : true;
- GlobalD.game.onSpawnEditorBuildingTip(this.Draw, this._currentTiledValue, this.buildInfo.occupyArea, this._canNotBuild, this.buildInfo.buildType);
- this._OldIndex = this.node.zIndex;
- //设置最高显示
- this.node.zIndex = 1000;
- },
- TouchCancelFunction() {
- // console.log("TouchCancelFunction");
- this.unschedule(this.callback);
- GlobalD.GameControl._isBuildingMove = false;
- },
- TouchEndFunction() {
- // console.log("TouchEndFunction");
- // console.log("点击建筑物 之后",this.getOnClickTags());
- if (this.getOnClickTags()) {
- return;
- }
- GlobalD.GameControl._isBuildingMove = false;
- this.unschedule(this.callback);
- // cc.warn('touch End!');
- if (this.isShowInfo) {
- //关闭其他
- let _landBuildingsInfo = this.node.parent.children;
- for (let i = _landBuildingsInfo.length - 1; i >= 0; i--) {
- let resetLandInfo = _landBuildingsInfo[i];
- if (resetLandInfo.name == "Labour_205_Holy_Farmland") {
- let _buildInfo = resetLandInfo.getComponent("buildingsInfo").buildInfo;
- let leaseFarmlandInfoScript = resetLandInfo.getComponent("LeaseFarmlandInfo");
- if (_buildInfo.id == this.buildInfo.id) {
- leaseFarmlandInfoScript.onSetInfoBoxActive(true);
- } else {
- leaseFarmlandInfoScript.onSetInfoBoxActive(false);
- }
- }
- }
- }
- console.log("this.isShowBuildingInfo:", this.isShowBuildingInfo);
- //如果没有移动就判断点击
- if (!this._isMove
- && this.isShowBuildingInfo
- && !this._ifCanEdit
- && !GlobalD.GameControl.isUICameraMove
- && !GlobalD.GameControl._isBuildingCanEdit)
- GlobalD.game._ManageUIScript.onShowBuildingInfo(this.buildInfo);
- },
- MoveFunction(event) {
- // cc.log("MoveFunction");
- var delta = event.touch.getDelta();
- this._touchPosition.x += delta.x / this._camera.zoomRatio;
- this._touchPosition.y += delta.y / this._camera.zoomRatio;
- // var worldPos = this.node.parent.convertToWorldSpaceAR(this._touchPosition);
- //取得的节点减去canvas的偏移
- // let tempPos = cc.v2(worldPos.x - this._canvas.x, worldPos.y - this._canvas.y);
- this._currentTiledValue = this._tileMap._tilePosFromLocation(this._touchPosition);
- //不相等的时候才绘制
- if (this._currentTiledValue.sub(this._EndPosition).mag() != 0) {
- this._EndPosition = this._currentTiledValue;
- let endPos = this._tileMap._getTheMiddleLocationFromtilePos(this._currentTiledValue);
- this.node.setPosition(endPos);
- let isHas = this._canNotBuild = GlobalD.game.areTheraOverlappingAreas(this._currentTiledValue, this.buildInfo.occupyArea, 1);
- // this.title.string = "(" + (this._currentTiledValue.x) + "," + (this._currentTiledValue.y) + ")" + isHas;
- if (task.virtualShadowPos)
- this._canNotBuild = this._EndPosition.sub(task.virtualShadowPos).mag() == 0 ? false : true;
- GlobalD.game.onSpawnEditorBuildingTip(this.Draw, this._currentTiledValue, this.buildInfo.occupyArea, this._canNotBuild, this.buildInfo.buildType);
- }
- this._isMove = true;
- GlobalD.GameControl._isBuildingMove = true;
- },
- // 自动移动,在ManagerControl 里面调用
- onAutoMove(delta) {
- this.isAutoMove = true;
- this._touchPosition.x += delta.x;
- this._touchPosition.y += delta.y;
- this._currentTiledValue = this._tileMap._tilePosFromLocation(this._touchPosition);
- //不相等的时候才绘制
- if (this._currentTiledValue.sub(this._EndPosition).mag() != 0) {
- this._EndPosition = this._currentTiledValue;
- let endPos = this._tileMap._getTheMiddleLocationFromtilePos(this._currentTiledValue);
- this.node.setPosition(endPos);
- let isHas = this._canNotBuild = GlobalD.game.areTheraOverlappingAreas(this._currentTiledValue, this.buildInfo.occupyArea, 1);
- // this.title.string = "(" + (this._currentTiledValue.x) + "," + (this._currentTiledValue.y) + ")" + isHas;
- if (task.virtualShadowPos)
- this._canNotBuild = this._EndPosition.sub(task.virtualShadowPos).mag() == 0 ? false : true;
- GlobalD.game.onSpawnEditorBuildingTip(this.Draw, this._currentTiledValue, this.buildInfo.occupyArea, this._canNotBuild, this.buildInfo.buildType);
- }
- },
- onCancleAutoMove() {
- this.isAutoMove = false;
- },
- /**
- * 编辑房子时候
- * 完成建造房子流程
- */
- onFinishEdit() {
- GlobalD.GameControl._isBuildingCanEdit = false;
- GlobalD.game.onClearCurrentBuildingTarget();
- // cc.log(this._ifCanEdit, this._canNotBuild);
- if (this._canNotBuild) {
- //如果不可建造区域,跳回起始位置
- this.onCancelEdit();
- return;
- }
- //如果完成时候,还在初始化生成的状态,重置为false
- if (this._isInstance) {
- this._isInstance = false;
- GlobalD.game._ManageUIScript.onBottomMenuView(true);
- //只有初始化建筑建造成功才移除建筑数据
- /**
- * 操作记录的数据减少1
- */
- GlobalD.game.MuinusBuilding(this.buildInfo.buildingName);
- }
- if (!this._ifCanEdit) return;
- //把物体定位到对应的坐标上去
- if (this._currentTiledValue) {
- //如果可以移动的话,更新一次位置
- this.InitStartPos = this._currentTiledValue;
- var endTiledPos = cc.v2(this._currentTiledValue.x, this._currentTiledValue.y);
- var endPos = this._tileMap._getTheMiddleLocationFromtilePos(endTiledPos);
- this.node.setPosition(endPos);
- let isHas = GlobalD.game.doesItExistArray(this.buildInfo.id);
- if (!isHas) {
- //起始坐标,占位范围,是否占位
- GlobalD.game.addBuildTiled(this.buildInfo.id, this._currentTiledValue, this.buildInfo.occupyArea);
- this.buildInfo.startTilePos = this._currentTiledValue;
- GlobalD.game.addBuilding(this._buildingsInfo);
- } else {//如果已经存在,更新新位置
- //可以移动
- let isMove = true;
- GlobalD.game.updateBuildOccupy(isMove, this.buildInfo.id, this._currentTiledValue, this.buildInfo.occupyArea);
- this.buildInfo.startTilePos = this._currentTiledValue;
- GlobalD.game.updateBuilding(this._buildingsInfo);
- }
- }
- //完成后从新设置状态
- this.Draw.active = false;
- this._ifCanEdit = false;
- this.node.off(cc.Node.EventType.TOUCH_MOVE, this.MoveFunction, this);
- // cc.log('this.Draw.active', this.Draw.active);
- // cc.log('this._buildingsInfo='+this._buildingsInfo.buildInfo.EnglishName);
- //设置影响力
- GlobalD.game.onFinishAddEditorBuildingsEffect(this._buildingsInfo);
- if (task.TaskIconCountClick >= 13)
- return;
- //引导 开始 建造 农舍 确定之后
- if (task.taskCursor == 0 && this.node.name == "Env_101_house_low") {
- task.taskShare();
- task.onShadowArchitectureReset();
- }
- if (this.node.name == "Labour_201_Farmland") {
- task.Farming();
- task.onShadowArchitectureReset();
- }
- // if (this.node.name == "Labour_204_Factory") {
- // //盖一个工厂
- // task.taskfactory();
- // }
- // if (this.node.name == "Shops_30101_ColdDrinkStall") {
- // //盖一个便利店
- // task.taskConvenienceStore();
- // }
- // //
- // if (this.node.name == "Spe_402_GreenBelt") {
- // task.taskGreenBeltShare();
- // }
- // if (this.node.name == "Env_101_house_low") {
- // task.taskFarmhouse();
- // }
- UtilsWX.getAllBuild();
- },
- onTaskBuild() {
- // console.log(this._canNotBuild, task.isMushBuildState);
- if (task.isMushBuildState && this._canNotBuild) {
- //如果不可建造区域
- if (this.node.name == "Env_101_house_low" || this.node.name == "Labour_201_Farmland") {
- // task.onTaskBuildAHouseMask();
- cc.loader.loadRes('resUI/ShowNotEnoughMoney', function (err, texture) {
- var prefab = cc.instantiate(texture);
- prefab.getComponent('ShowNotEnoughMoney').Text('请在指定位置建造!');
- // this.node.addChild(prefab);
- cc.find('Canvas').getChildByName('UICamera').addChild(prefab);
- }.bind(this));
- }
- return false;
- }
- return true;
- },
- onCancelEdit() {
- GlobalD.GameControl._isBuildingCanEdit = false;
- this.node.zIndex = this._OldIndex;
- // cc.log('onCancelEdit');
- GlobalD.game.onClearCurrentBuildingTarget();
- if (this._isInstance) {
- // cc.log('删除1');
- //清除底部的提示,放回对象池
- GlobalD.game.onClearSpawnEditorBuildingTip();
- GlobalD.game._ManageUIScript.onBottomMenuView(true);
- //如果是预制生成的,取消生成的时候,删除预制
- this.scheduleOnce(() => {
- this.node.destroy();
- }, 0)
- } else {
- // cc.log('删除2');
- this.Draw.active = false;
- this._ifCanEdit = false;
- // cc.log(' buildingsInfo.buildInfo.InitStartPos', this.InitStartPos);
- this.node.off(cc.Node.EventType.TOUCH_MOVE, this.MoveFunction, this);
- var endTiledPos = cc.v2(this.InitStartPos.x, this.InitStartPos.y);
- var endPos = this._tileMap._getTheMiddleLocationFromtilePos(endTiledPos);
- this.node.setPosition(endPos);
- }
- },
- /**
- * 需要添加碰撞体
- * 不规则多边形触摸测试
- * @param {触摸点} point
- * @param {监听} listener
- */
- polygonHitTest(point, listener) {
- var polygonCollider = this.getComponent(cc.PolygonCollider);
- if (polygonCollider) {
- point = this.convertToNodeSpace(point);
- point.x -= this.getContentSize().width / 2;
- point.y -= this.getContentSize().height / 2;
- return cc.Intersection.pointInPolygon(point, polygonCollider.points);
- } else {
- return this._oldHitTest(point, listener);
- }
- },
- /**
- * 判断是否可以被优先点击
- * @returns {*}
- */
- getOnClickTags: function () {
- if (this.getComponent("Collect") != null) {
- return this.getComponent("Collect").getOnClickTag();
- } else {
- return false;
- }
- }
- });
|