| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620 |
- var reGameStates = require('GameStates');
- //建筑物信息
- var BuildInfo = cc.Class({
- name: "BuildInfo",
- properties: {
- //建筑类型
- buildType: {
- default: reGameStates.BuildType.Housing,
- type: cc.Enum(reGameStates.BuildType),
- },
- //建筑id
- id: -1,
- //建筑所占区域
- occupyArea: new cc.Vec2(),
- //起始位置,代码动态设置
- startTilePos: {
- default: new cc.Vec2(),
- visible: false,
- },
- //是否激活建筑物
- //建筑在地图上,但是没激活,不能给游客们进行相应的操作
- isItActive: {
- default: false,
- tooltip: '是否激活建筑物',
- },
- //是否有人占用
- isItOccupied: {
- default: false,
- visible: false,
- },
- //占用对象用的信息
- //AI_worker_Player
- occupantPlayerInfo: {
- default: null,
- visible: false,
- },
- //有东西吗?//是否存在物品
- //
- isThereAnItem: {
- default: false,
- visible: false,
- },
- //是否可以销售产品
- isItSaleable: {
- default: false,
- visible: false,
- tooltip: '动态设定,是否允许销售',
- },
- //是否停运
- isItStopOperation: {
- default: false,
- visible: false,
- tooltip: '动态设定,是否停止运营',
- },
- //建筑名称
- /**
- * 重要:建筑时候 要用名字匹配来做减法 ManageGame.MuinusBuilding
- */
- buildingName: {
- default: '',
- },
- BuildingPrefabName: {
- default: '',
- },
- EnglishName: {
- default: '',
- },
- //建筑简介
- BuildingSynopsis: {
- default: '',
- },
- //建筑图片
- BuildingSprite: {
- default: null,
- type: cc.Sprite
- },
- //此建筑维护费用
- RunningCost: {
- default: 200,
- type: cc.Integer,
- visible: true,
- tooltip: '消耗:维护费用/每月',
- },
- //此建筑每分钟消耗的体力值
- consumeStrength: {
- default: 0,
- type: cc.Integer,
- visible: true,
- // displayName: '体力',
- tooltip: '消耗:体力/每分钟',
- },
- //此建筑总共消耗的体力值
- //工厂的生产力,
- totalConsumption: {
- default: 50,
- type: cc.Integer,
- visible: true,
- // displayName: '体力',
- tooltip: '这个建筑总共消耗的体力值,工厂代表生成力,商店代表销售力',
- },
- //商品的库存总量
- totalInventory: {
- default: 0,
- type: cc.Integer,
- tooltip: '商品的库存总量:销售商店需要,工厂',
- },
- //工厂:代表生产的商品
- //商店:代表销售的商品
- //定义的商品类型,也可动态添加
- //todo...
- goodsArray: {
- default: [],
- type: reGameStates.goods,
- },
- //当前销售的商品
- _goods: {
- default: null,
- visible: false,
- },
- //商品的库存
- _inventory: {
- default: 0,
- type: cc.Integer,
- visible: false,
- },
- //目标建筑信息
- //工厂只对应商店
- _targetBuildingsInfo: {
- default: null,
- visible: false,
- },
- //可以寻找的目标点
- //记录图块的二位数组
- _gotoPosistion: {
- default: [],
- visible: false,
- },
- //特殊建筑用到的影响值,在预制设置
- specialSetValue: {
- default: 3,
- type: cc.Integer,
- visible: true,
- tooltip: '特殊建筑需要填写的值',
- },
- consumeStrengthAddValue: {
- default: 0,
- type: cc.Integer,
- visible: false,
- tooltip: '消耗加成值:体力/每分钟',
- },
- goodsPriceAddValue: {
- default: 0,
- type: cc.Integer,
- visible: false,
- tooltip: '商品销售加成值',
- },
- AssetValue: {
- default: 0,
- type: cc.Integer,
- visible: false,
- tooltip: '资产值',
- },
- },
- //设置当前存量
- onSetCurrentInventory(value) {
- // cc.log("onSetCurrentInventory", value);
- //购买的个数
- let callBackNum = Math.abs(value);
- this._inventory += Number(value);
- if (this._inventory <= 0) {
- // cc.warn("onSetCurrentInventory", this._inventory);
- //如果商品库存不够,返回只购买剩余的个数
- callBackNum += this._inventory;
- this._inventory = 0;
- }
- if (this._inventory > this.totalInventory)
- this._inventory = this.totalInventory;
- // this.node.getComponent("buildingTips").setShowStockData(null,"x"+this._inventory);
- if (this.updatainventory != null) {
- this.updatainventory();
- }
- // console.log("现在调用这个了",value);
- return callBackNum;
- },
- updatainventory: function () {
- },
- setCallBackinventory: function (updatainventory) {
- this.updatainventory = updatainventory;
- }
- });
- cc.Class({
- extends: cc.Component,
- properties: {
- title: cc.Label,
- //建筑物信息
- buildInfo: {
- type: BuildInfo,
- default: null
- },
- //绘制提示区域
- buildZone: cc.Node,
- _canBuild: false,
- //是否是从数据初始化
- InitPosFromStore: {
- default: false,
- visible: false,
- },
- //初始化位置
- InitPos: false,
- //建筑初始化的开始位置
- InitStartPos: new cc.Vec2(),
- //初始化商店的商品信息
- InitBuildingInfo: {
- default: false,
- tooltip: '初始化商店的商品信息',
- },
- ShowTip: {
- default: null,
- type: cc.Label,
- tooltip: '显示状态提示UI节点',
- },
- ShowTipString: '',
- //初始工作地点的状态
- InitWorkBuildingInfo: {
- default: false,
- tooltip: '初始工作地点的状态',
- },
- InitWorkBuildingIndex: {
- default: 0,
- type: cc.Integer,
- tooltip: '下标:初始工作地点的状态',
- },
- // //是否添加到原料地
- // isAddMatrialArray: {
- // default: false,
- // tooltip: '是否添加到原料地',
- // },
- },
- onLoad() {
- this._buildZone = this.buildZone.getComponent('buildZone');
- //设置空字符
- // this.title.string = '';
- // this.buildInfo.setCallBackinventory(function () {
- // this.node.getComponent("buildingTips").setShowStockData(null,"x"+this.buildInfo._inventory);
- // }.bind(this));
- this.AssetValues = [];
- this.AssetValues.push(5000);
- this.AssetValues.push(10000);
- this.AssetValues.push(15000);
- this.AssetValues.push(400);
- this.AssetValues.push(500);
- this.AssetValues.push(600);
- this.AssetValues.push(700);
- this.AssetValues.push(800);
- this.AssetValues.push(900);
- // console.log("我经过吗",this.buildInfo.id);
- //设置财产值
- //银行
- // 406001
- //加工厂
- // 610002
- //农田
- // 610003
- //绿化带
- // 401001
- //花坛
- // 402001
- //游乐场
- // 403001
- //医院
- // 404001
- //住宅
- // 101001
- //单元楼
- // 102001
- //别墅
- // 103001
- //矿坑
- // 610005
- //伐木场
- // 610004
- // 神龙相关id
- //农田
- // 610006
- //警察局
- // 405001
- //甜品店
- // 610010
- //甜品店
- // 610011
- //甜品店
- // 610012
- //甜品店
- // 610013
- //甜品店
- // 610014
- //甜品店
- // 610015
- //甜品店
- // 610016
- switch (this.buildInfo.id) {
- case 101001:
- this.buildInfo.AssetValue = this.AssetValues[0];
- break;
- case 102001:
- this.buildInfo.AssetValue = this.AssetValues[1];
- break;
- case 103001:
- this.buildInfo.AssetValue = this.AssetValues[1];
- break;
- case 610003:
- this.buildInfo.AssetValue = this.AssetValues[0];
- break;
- case 610004:
- this.buildInfo.AssetValue = this.AssetValues[1];
- break;
- case 610005:
- this.buildInfo.AssetValue = this.AssetValues[1];
- break;
- case 610002:
- this.buildInfo.AssetValue = this.AssetValues[0];
- break;
- case 610010:
- case 610013:
- case 610016:
- this.buildInfo.AssetValue = this.AssetValues[0];
- break;
- case 610011:
- case 610014:
- this.buildInfo.AssetValue = this.AssetValues[1];
- break;
- case 610012:
- case 610015:
- this.buildInfo.AssetValue = this.AssetValues[2];
- break;
- case 401001:
- this.buildInfo.AssetValue = this.AssetValues[0];
- break;
- case 402001:
- this.buildInfo.AssetValue = this.AssetValues[1];
- break;
- case 403001:
- this.buildInfo.AssetValue = this.AssetValues[2];
- break;
- }
- // if (this.buildInfo.buildType == reGameStates.BuildType.Housing) {
- //
- // this.buildInfo.AssetValue = this.AssetValues[0];
- // } else if (this.buildInfo.buildType == reGameStates.BuildType.Farmland) {
- // this.buildInfo.AssetValue = this.AssetValues[1];
- // } else if (this.buildInfo.buildType == reGameStates.BuildType.TimberYard) {
- // this.buildInfo.AssetValue = this.AssetValues[2];
- // } else if (this.buildInfo.buildType == reGameStates.BuildType.MiningPit) {
- // this.buildInfo.AssetValue = this.AssetValues[3];
- // } else if (this.buildInfo.buildType == reGameStates.BuildType.Factory) {
- // this.buildInfo.AssetValue = this.AssetValues[4];
- // } else if (this.buildInfo.buildType == reGameStates.BuildType.Shop) {
- // this.buildInfo.AssetValue = this.AssetValues[5];
- // } else if (this.buildInfo.buildType == reGameStates.BuildType.Special) {
- // this.buildInfo.AssetValue = this.AssetValues[6];
- // }
- },
- start() {
- this._tileMap = GlobalD.TiledMap;
- //开始初始化位置,添加到数组里面
- if (this.InitPos) {
- //场景的预制初始化可销售状态
- if (this.buildInfo.buildType == reGameStates.BuildType.Farmland) {
- //设置销售状态,
- this.buildInfo.isItSaleable = true;
- }
- //把物体定位到对应的坐标上去
- this._currentTiledValue = this.InitStartPos;
- if (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);
- console.log(this.buildInfo.buildingName);
- } 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);
- }
- }
- }
- //初始化设置房屋信息
- if (this.InitBuildingInfo) {
- //设置销售物品
- this.onSettingBuildingState();
- }
- if (this.InitWorkBuildingInfo) {
- this.onInitBuildingState();
- }
- if (this.buildInfo.consumeStrength == 0 && this.buildInfo.buildType !== reGameStates.BuildType.Shop && this.buildInfo.buildType !== reGameStates.BuildType.Special) {
- cc.warn('这个建筑可能需要消耗或者增加体力值:', this.buildInfo.startTilePos);
- }
- },
- //代码设置位置
- setInitStartPos: function (x, y) {
- this.InitStartPos = cc.v2(x, y);
- //把物体定位到对应的坐标上去
- this._currentTiledValue = this.InitStartPos;
- if (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);
- } 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);
- }
- }
- },
- //初始化时候,生成房屋的数据状态
- onInitBuildingState() {
- // if (this.buildInfo.buildType == reGameStates.BuildType.Farmland)
- {
- //设置库存
- this.buildInfo._inventory = this.buildInfo.totalInventory;
- //设置满库存状态
- this.node.getComponent('WorkingBuilding').onSetWorkStateFormReadingData(this.InitWorkBuildingIndex);
- }
- },
- //设置房屋当前状态
- //比如,商店:没有商品,
- onSettingBuildingState() {
- //如果是商店的话
- if (this.buildInfo.buildType == reGameStates.BuildType.Shop) {
- let num = this.buildInfo.onSetCurrentInventory(-1000);
- // cc.log(num);
- //初始化销售的商品
- for (let i = 0; i < this.buildInfo.goodsArray.length; i++) {
- if (this.buildInfo.goodsArray[i].isItSale) {
- this.buildInfo._goods = this.buildInfo.goodsArray[i];
- break;
- }
- }
- }
- },
- //在预制初始化时候调用
- onInitFromPrefabs() {
- },
- onShowTip(tipString) {
- if (!this.ShowTip) return;
- this.ShowTip.string = tipString;
- this.ShowTip.node.parent.active = true;
- setTimeout(() => {
- this.ShowTip.node.parent.active = false;
- }, 1000)
- },
- //商品售罄
- onSetTipSellOut() {
- // cc.log('商店售罄');
- // this.onShowTip(this.ShowTipString);
- //通知工厂生产销售商品
- //{buildingInfo,goodsItem}
- GlobalD.game.onNotificationFactory(this);
- },
- //工人送完商品设置
- //商店
- onResetFromWorkersFinished() {
- //暂时设置最高的库存量
- this.buildInfo.onSetCurrentInventory(5);
- //清空对应的工厂信息
- this.buildInfo._targetBuildingsInfo = null;
- },
- //工厂到商店流程中断时候设置
- onResetFromWorkersSuspend() {
- //暂时设置最高的库存量
- // this.buildInfo.onSetCurrentInventory(0);
- //清空对应的工厂信息
- this.buildInfo._targetBuildingsInfo = null;
- },
- //商店重置对应工厂信息
- onResetProductionRequest() {
- //通知工厂对应的工人
- if (this.buildInfo.occupantPlayerInfo != null) {
- //工厂设置值
- this.buildInfo.occupantPlayerInfo.transTarget = null;
- }
- this.buildInfo._goods = null;
- this.buildInfo._targetBuildingsInfo = null;
- this.buildInfo.isItOccupied = false;
- },
- //清除建筑后,调用此函数
- onClearSelfResetFromType() {
- // cc.log('清除类型:', this.buildInfo.buildType)
- if (this.buildInfo.buildType == reGameStates.BuildType.Shop) {
- //如果清除的建筑是商店
- //通知工厂工作清除
- if (this.buildInfo._targetBuildingsInfo) {
- this.buildInfo._targetBuildingsInfo.onResetProductionRequest();
- }
- } else if (this.buildInfo.buildType == reGameStates.BuildType.Factory) {
- //如果是工厂拆除了
- //通知工厂对应的工人
- if (this.buildInfo.occupantPlayerInfo != null) {
- // this.occupantPlayerInfo.AIAttribute.isWorking = false;
- // this.occupantPlayerInfo._isColletion = false;
- //工厂设置值
- this.buildInfo.occupantPlayerInfo.transTarget = null;
- }
- //通知商店,通知清除对应的工厂目标
- if (this.buildInfo._targetBuildingsInfo)
- this.buildInfo._targetBuildingsInfo.onResetFromWorkersSuspend();
- } else if (this.buildInfo.buildType == reGameStates.BuildType.Housing) {
- //如果是房子拆除
- if (this.buildInfo.occupantPlayerInfo) {
- this.buildInfo.occupantPlayerInfo.onDismantleBuilding();
- }
- }
- // else {
- // //其他工作地点,比如农田,矿厂,伐木场
- // //特殊建筑可以忽略
- // // cc.log('清除类型:', this.buildInfo.buildType)
- // }
- },
- //如果商店停运调用这个函数
- onStopOperation() {
- if (this.buildInfo.buildType == reGameStates.BuildType.Shop) {
- if (this.buildInfo._targetBuildingsInfo)
- this.buildInfo._targetBuildingsInfo.onResetProductionRequest();
- //如果商店停运
- this.onResetFromWorkersSuspend();
- // cc.log('停运后,',this.buildInfo._targetBuildingsInfo);
- } else if (this.buildInfo.buildType == reGameStates.BuildType.Factory) {
- if (this.buildInfo._targetBuildingsInfo) {
- //如果工厂停运,就把工厂对应的商店目标,通知商店,清空工厂自己
- this.buildInfo._targetBuildingsInfo.buildInfo._targetBuildingsInfo = null;
- }
- this.onResetProductionRequest();
- }
- },
- /**
- * 植物生长
- */
- onInitHolyFarmlandSeedFromGrow(growStage,spriteFrame){
- this.node.getComponent('WorkingBuilding').onSetGrow(growStage,spriteFrame);
- // this.node.getComponent('WorkingBuilding').onHolyFarmlandSeedFromGrow();
- }
- });
|