示例#1
0
        private void processBuildingHover(Vector2 mousePos)
        {
            int buildingId = DayGameEngineImp.getGameEngine().getMapManager().getScreenCollision(mousePos);

            if (buildingId >= 0)
            {
                if ((null != lastHoveredBuildingData) && (lastHoveredBuildingData.getID() != buildingId))
                {
                    // remove the hover from the last building
                    lastHoveredBuildingData.setOver(false);
                    lastHoveredBuildingData = null;
                }
                // add the hover to the next hover
                Building b = DayGameEngineImp.getGameEngine().getMapManager().getBuildingByID(buildingId);
                if (b != null)
                {
                    lastHoveredBuildingData = b.getBuildingData();
                    lastHoveredBuildingData.setOver(true);
                }
            }
            else
            {
                // removing the hover
                if (null != lastHoveredBuildingData)
                {
                    lastHoveredBuildingData.setOver(false);
                    lastHoveredBuildingData = null;
                }
            }
        }
示例#2
0
 private void OnChangeStateBuilding(BuildingData buildingData) {
     switch (buildingData.State)
     {
         case BuildingState.Normal:
             PrototypeModel.SetActive(false);
             BeingBuiltModel.SetActive(false);
             if (_currentModel != null)
                 _currentModel.SetActive(true);
             break;
         case BuildingState.BeingBuilt:
             PrototypeModel.SetActive(false);
             if (_currentModel != null)
                 _currentModel.SetActive(false);
             BeingBuiltModel.SetActive(true);
             break;
         case BuildingState.Prototype:        
             if (_currentModel != null)
                 _currentModel.SetActive(false);
             BeingBuiltModel.SetActive(false);
             PrototypeModel.SetActive(true);
             break;
         default:
             break;
     } 
 }
示例#3
0
	// Use this for initialization

	void Start () {
		DB.init ();
		currentActivePage = Global; 
		status = "global";
		if (currentBuilding){
			currentBuildingData = currentBuilding.GetComponent<BuildingData>() ;
		}

	}
    // public static void Unpack
    public static void Unpack(BuildingData BData, List<string> ChainData)
    {
        List<I_DataField> ListData = BData._Building.getDataField();
        if (ChainData.Count <= StartIndex) return;

        for(int i = 0; i < ListData.Count; i++)
        {
            ListData[i].Unpack(BData, ChainData[i + StartIndex]);
        }
    }
    public static String Pack(BuildingData BData)
    {
        List<I_DataField> ListData = BData._Building.getDataField();
        String TmpData = "";

        foreach (I_DataField Data in ListData)
        {
            TmpData += Data.Pack(BData) + ";";
        }

        return TmpData;
    }
示例#6
0
	public void AddNewBuilding(BuildingData newBuildingData)
	{
		string prefabPath = "Building/Building_" + newBuildingData.Type.ToString() + "_" + newBuildingData.Level.ToString("D2");
		GameObject prefab = Resources.Load<GameObject>(prefabPath);
		GameObject newBuildingGO = GameObject.Instantiate(prefab) as GameObject;
		newBuildingGO.transform.parent = transform;
		BuildingComp buildingComp = newBuildingGO.GetComponent<BuildingComp>();
		buildingComp.Data = newBuildingData;
		BuildingCompList.Add(buildingComp);
		
		RepositionBuilding(buildingComp);
	}
示例#7
0
        public void queueBuildingToScavenge(BuildingData data)
        {
            //Console.WriteLine("We queued the building " + data.getID());

            // keep track of all the buildings that we will be scavenging
            buildingsToScavenge.Add(data);

            if (getNumAvailableSurvivorsToScavenge() <= 0)
            {
                runSim();
            }
        }
示例#8
0
    public void update( BuildingData currentBuildingData)
    {
        int l = currentBuildingData.likeNum ;
        int d = currentBuildingData.dislikeNum ;

        this.gameObject.SetActive(false);
        if (l == 0 &&  d == 0 ){
            like = true ;
            likePercentage = 0.5f ;
        }else{
            like = l > d ;
            likePercentage = (like ? l : d ) / (float)(l+d) ;
        }
        this.gameObject.SetActive(true);
    }
示例#9
0
 public void displayPopUp(BuildingData data)
 {
     tempBuilding = data;
     menuItems[3].Alive = true;
     menuItems[4].Alive = true;
     menuItems[5].Alive = true;
     menuItems[3].Font = popUpHeader;
     menuItems[3].Text[0] = data.getBuildingDescription();
     menuItems[3].popUpHeader();
     menuItems[3].PopUpImg = data.getTexture();
     string[] subText = {"Estimated Totals", "Suvivors: " + data.getSurvivors(), "Food: " + data.getFood(), "Ammo: " + data.getAmmo() };
     if (data.isSafehouse())
     {
         subText = new string[] { "SafeHouse: No Supplies" };
     }
     menuItems[3].popUpSub(popUpSubText, subText);
 }
示例#10
0
	public void Fight()
	{
		var query = new AVQuery<AVObject>("Building").WhereEqualTo("UserID", CurMatchUser.ObjectId);
		query.FindAsync().ContinueWith(t=>{
			List<BuildingData> buildingDataList = new List<BuildingData>();
			foreach(AVObject buildingObject in (t as Task<IEnumerable<AVObject>>).Result)
			{
				BuildingData buildingData = new BuildingData();
				buildingData.UserID = buildingObject.Get<string>("UserID");
				buildingData.Type = (EBuildingType)buildingObject.Get<int>("Type");
				buildingData.Level = buildingObject.Get<int>("Level");
				buildingData.Value = buildingObject.Get<int>("Value");
				buildingData.SlotID = buildingObject.Get<int>("SlotID");
				buildingDataList.Add(buildingData);
			}
			
			GameManager.Instance.LastMatchBuildingDataList = buildingDataList;
            GameManager.Instance.EventQueue.Queue.Enqueue(new EventItem(){Type = EEventItemType.EnemyBuildingLoaded});
        });
    }
示例#11
0
	public int SlotID;			// 位置

	public static void DB_CreateBuilding(int slotId, EBuildingType type)
	{
		AVObject obj = new AVObject("Building");
		obj["UserID"] = AVUser.CurrentUser.ObjectId;
		obj["Type"] = (int)type;
		obj["Level"] = 1;
		obj["Value"] = 1;
		obj["SlotID"] = slotId;

		obj.SaveAsync().ContinueWith(t => {
			BuildingData newBuilding = new BuildingData();
			newBuilding.UserID = AVUser.CurrentUser.ObjectId;
			newBuilding.Type = type;
			newBuilding.Level = 1;
			newBuilding.Value = 1;
			newBuilding.SlotID = slotId;

			GameManager.Instance.LastCreatedBuilding = newBuilding;
			GameManager.Instance.EventQueue.Queue.Enqueue(new EventItem(){Type = EEventItemType.BuildCommandOK});
		});
	}
        public BuildingData OnBuilding()
        {
            if (myPlayer.Money >= 140 && turn <= 17)
            {
                UnitInfo unit = myUnits.ElementAt(0);
                for (int i = 0; i < builtCities.Count; i++)
                {
                    if (builtCities[i].X == unit.PositionX && builtCities[i].Y == unit.PositionY)
                        return null;
                }
                BuildingData cmd = new BuildingData();
                cmd.PositionX = unit.PositionX;
                cmd.PositionY = unit.PositionY;
                citiesCount++;
                builtCities.Add(new Position { X=cmd.PositionX, Y=cmd.PositionY });
                myPlayer.Money -= 140;
                return cmd;
            }

            return null;
        }
        public BuildingData OnBuilding()
        {
            if (myInfo.Money >= 140)
            {
                int epito = -1;
                for (int i = 0; i < myUnits.Count; i++)
                {
                    bool epithet = true;
                    for (int j = 0; j < myCities.Count; j++)
                    {
                        if (myCities.ElementAt(j).PositionX == myUnits.ElementAt(i).PositionX && myCities.ElementAt(j).PositionY == myUnits.ElementAt(i).PositionY)
                            epithet = false;
                    }
                    for (int j = 0; j < enemyCities.Count; j++)
                    {
                        if (enemyCities.ElementAt(j).PositionX == myUnits.ElementAt(i).PositionX && enemyCities.ElementAt(j).PositionY == myUnits.ElementAt(i).PositionY)
                            epithet = false;
                    }

                    if (epithet)
                    {
                        epito = i;
                        break;
                    }
                }

                if (epito == -1)
                    return null;

                UnitInfo unit = myUnits.ElementAt(epito);
                BuildingData cmd = new BuildingData();
                cmd.PositionX = unit.PositionX;
                cmd.PositionY = unit.PositionY;
                myInfo.Money -= 140;
                myCities.Add(new CityInfo() { PositionX = cmd.PositionX, PositionY = cmd.PositionY, Owner = PlayerName });
                return cmd;
            }

            return null;
        }
        public BuildingData OnBuilding()
        {
            if (playerCount > 2)
                return null;

            if (myInfo.Money >= 140)
            {
                for (int i = 0; i < myUnits.Count; i++)
                {
                    if (!isTown(myUnits.ElementAt(i).PositionX, myUnits.ElementAt(i).PositionY))
                    {
                        BuildingData cmd = new BuildingData();
                        cmd.PositionX = myUnits.ElementAt(i).PositionX;
                        cmd.PositionY = myUnits.ElementAt(i).PositionY;
                        myInfo.Money -= 140;
                        return cmd;
                    }
                }
            }

            return null;
        }
示例#15
0
	// 网络-注册
	public void NetDoRegist(string userName, string password, string email)
	{
		AVUser user = new AVUser();
		user.Username = userName;
		user.Password = password;
		user.Email = email;

		GameManager.Instance.AsyncBeginWait();
		user.SignUpAsync().ContinueWith(t => {
			// TODO 创建玩家的Village
			GameManager.Instance.AsyncBeginWait();

			AVObject obj = new AVObject("Village");
			obj["UserID"] = AVUser.CurrentUser.ObjectId;
			obj["Belief"] = 0;
			obj["BeliefAll"] = 0;
			
			obj.SaveAsync().ContinueWith(t2 => {
				
				// 创建玩家神庙
				BuildingData newBuilding = new BuildingData();
				newBuilding.AVObject = new AVObject("Building");
				newBuilding.UserID = AVUser.CurrentUser.ObjectId;
				newBuilding.Type = EBuildingType.Altar;
				newBuilding.Level = 1;
				newBuilding.SlotID = 4;
				newBuilding.Sibling = 1;

				newBuilding.AVObject.SaveAsync().ContinueWith(t3=>{
					// 进入登录界面
					// TODO 将用户名和密码拷贝过去
					GameManager.Instance.AsyncEndWait(()=>{
						UIManager.Instance.ChangeScreen(EScreen.Login);
					});
				});
			});
		});
	}
示例#16
0
        protected override void onMessageDeployMCV(Yad.Net.Messaging.GMDeployMCV dmcv)
        {
            Player  p   = players[dmcv.IdPlayer];
            UnitMCV mcv = (UnitMCV)p.GetUnit(ObjectID.From(dmcv.McvID.ObjectId, dmcv.McvID.PlayerID));

            if (mcv == null)
            {
                InfoLog.WriteInfo("No mcv to deploy found.", EPrefix.SimulationInfo);
                return;
            }
            string bName = mcv.MCVData.BuildingCanProduce;
            short  btype = GlobalSettings.Wrapper.namesToIds[bName];

            this._map.Units[mcv.Position.X, mcv.Position.Y].Remove(mcv);
            BuildingData bd = GlobalSettings.Wrapper.buildingsMap[btype];

            if (!Building.CheckBuildPosition(bd, mcv.Position, _map, dmcv.McvID.PlayerID))
            {
                this._map.Units[mcv.Position.X, mcv.Position.Y].AddLast(mcv);
                if (InvalidBuild != null)
                {
                    InvalidBuild(-1);
                }
                return;
            }
            this._map.Units[mcv.Position.X, mcv.Position.Y].AddLast(mcv);
            Building b = AddBuilding(dmcv.McvID.PlayerID, -1, btype, mcv.Position);

            b.State = Building.BuildingState.normal;
            UpdatePowerManagement(b);
            OnBuildingCompleted(b, -1);
            destroyUnit(mcv);
            //OnUnitDestroyed(mcv);
            if (MCVDeployed != null)
            {
                MCVDeployed(mcv);
            }
        }
示例#17
0
        internal override void Process()
        {
            var ca = this.Device.Player.Avatar;
            var go = this.Device.Player.GameObjectManager.GetGameObjectByID(BuildingId);

            if (go != null)
            {
                var b = (ConstructionItem)go;
                if (b.CanUpgrade())
                {
                    var bd = b.GetConstructionItemData();
                    if (ca.HasEnoughResources(bd.GetBuildResource(b.GetUpgradeLevel() + 1),
                                              bd.GetBuildCost(b.GetUpgradeLevel() + 1)))
                    {
                        if (this.Device.Player.HasFreeWorkers())
                        {
                            string name = this.Device.Player.GameObjectManager.GetGameObjectByID(BuildingId).GetData().GetName();
                            Logger.Write("Building To Upgrade : " + name + " (" + BuildingId + ')');
                            if (string.Equals(name, "Alliance Castle"))
                            {
                                ca.IncrementAllianceCastleLevel();
                                Building     a  = (Building)this.Device.Player.GameObjectManager.GetGameObjectByID(BuildingId);
                                BuildingData al = a.GetBuildingData();
                                ca.SetAllianceCastleTotalCapacity(al.GetUnitStorageCapacity(ca.GetAllianceCastleLevel()));
                            }
                            else if (string.Equals(name, "Town Hall"))
                            {
                                ca.IncrementTownHallLevel();
                            }

                            var rd = bd.GetBuildResource(b.GetUpgradeLevel() + 1);
                            ca.SetResourceCount(rd, ca.GetResourceCount(rd) - bd.GetBuildCost(b.GetUpgradeLevel() + 1));
                            b.StartUpgrading();
                        }
                    }
                }
            }
        }
示例#18
0
        public ProxyBuildingData(string id, BuildingDataManager manager, ITownManager crafTownManager)
        {
            _manager         = manager;
            _crafTownManager = crafTownManager;
            _buildingData    = new BuildingData(id);
            var data = manager.Rep.FindById(id);

            if (data != null)
            {
                var i = 0;
                foreach (var dataTaxData in data.TaxDatas)
                {
                    _buildingData.TaxDatas[i++] = dataTaxData;
                    if (i >= _buildingData.TaxDatas.Length)
                    {
                        break;
                    }
                }
            }
            _crafTownManager.TownChanged += ManagerOnTownChanged;
            UpdateTax += OnUpdateTax;
            ManagerOnTownChanged(crafTownManager);
        }
示例#19
0
    void HighlightBuilding()
    {
        if (Input.GetMouseButtonDown(0))
        {
            RaycastHit hitted;
            Ray        ray = Camera.main.ScreenPointToRay(Input.mousePosition);
            if (Physics.Raycast(ray, out hitted, 100f, 1 << LayerMask.NameToLayer("Building")))
            {
                if (!isPlacing)
                {
                    BuildingData selectedData = hitted.collider.gameObject.GetComponent <BuildingInfo>().buildData;
                    UiManager.UpdateHighlightText(selectedData, UiManager.highlightPanel, hitted.collider.gameObject);
                    if (selectedData.name == "Mine 1")
                    {
                        UiManager.mine = hitted.collider.gameObject;
                    }
                    // highlight

                    //update UI
                }
            }
        }
    }
        async void LoadBuildingsAsync(string bodyID)
        {
            var json     = Body.GetBuildings(1, account.SessionID, bodyID);
            var s        = new Server();
            var response = await s.GetHttpResultAsync(account.Server, Body.url, json);

            if (response.result != null)
            {
                buildingList.Clear();
                foreach (var bd in response.result.buildings.OrderBy(x => x.Value.name))
                {
                    var b = new BuildingData();
                    b.BuildingName  = bd.Value.name;
                    b.BuildingLevel = bd.Value.level;
                    b.Efficiency    = bd.Value.efficiency;
                    b.BuildingID    = bd.Key;
                    b.ImageName     = bd.Value.image;
                    b.url           = "https://raw.githubusercontent.com/plainblack/Lacuna-Assets/master/planet_side/100/" + bd.Value.image + ".png";
                    b.BuildingURL   = bd.Value.url;
                    buildingList.Add(b);
                }
            }
        }
示例#21
0
    public void Setup(BuildingData _myData)
    {
        myData = _myData;

        for (int y = 0; y < myData.shape.column.Length; y++)
        {
            for (int x = 0; x < myData.shape.column[y].row.Length; x++)
            {
                if (myData.shape.column[y].row[x])
                {
                    //print (x + " - " + y);
                    Position myPos = (new Position(x, y) - BuildingData.center);
                    //print(center);

                    mySprites[x, y] = Instantiate(ItemSpritePrefab, myPos.Vector3(Position.Type.itemPlacementHelper) - Vector3.forward, Quaternion.identity);
                    mySprites[x, y].transform.parent = transform;
                    ItemPlacementSpriteHelper mySprite = mySprites[x, y].GetComponent <ItemPlacementSpriteHelper>();
                    mySprite.x = myPos.x;
                    mySprite.y = myPos.y;
                }
            }
        }
    }
示例#22
0
    private void LoadBuilding()
    /* load building */
    {
        string roomFileJsonName = fileToLoadName[(int)StctType.Building];

        InitReading(roomFileJsonName);

        JBuilding[] buildings = JsonHelper.FromJson <JBuilding>(jsonString);
        Debug.Log("Loading Building total:" + buildings.Length);

        foreach (JBuilding building in buildings)
        {
            GameObject emptyobj = new GameObject(structTag[(int)StctType.Building] + building.buildingID);
            emptyobj.tag = structTag[(int)StctType.Building];
            //define position
            emptyobj.AddComponent <BuildingData>();
            BuildingData bdt = emptyobj.GetComponent <BuildingData>();
            bdt.buidingID    = building.buildingID;
            bdt.buildingName = building.buildingName;

            //set position depend on index *1000
        }
    }
示例#23
0
    public List <BuildingData> getBuildingWithCampus(string campus_code)
    {
        List <BuildingData> buildingData = new List <BuildingData>();

        ConnectDB     db        = new ConnectDB();
        SqlDataSource oracleObj = db.ConnectionOracle();

        oracleObj.SelectCommand = "Select * From BUILDING Where CAMPUS_CODE = '" + campus_code + "' Order By BUILDING_CODE";
        DataView allData = (DataView)oracleObj.Select(DataSourceSelectArguments.Empty);

        foreach (DataRowView rowData in allData)
        {
            BuildingData building_data = new BuildingData();
            building_data.Building_Code      = rowData["BUILDING_CODE"].ToString();
            building_data.Campus_Code        = rowData["CAMPUS_CODE"].ToString();
            building_data.Building_ThaiName  = rowData["BUILDING_THAINAME"].ToString();
            building_data.Building_EngName   = rowData["BUILDING_ENGNAME"].ToString();
            building_data.Building_ShortName = rowData["BUILDING_SHORTNAME"].ToString();
            buildingData.Add(building_data);
        }

        return(buildingData);
    }
    public void ShowCurSlotCenter()
    {
        if (curSlot != null)
        {
            curSlot.ShowBuildingName();

            BuildingData data = mediator.GetDataBySlot(mediator.curSlot);
            curSlot.level = data.level;

            curSlot.ShowBuildingLevel();
            Vector3 offset = curSlot.cameraOffset;
            Vector3 pos    = new Vector3(curSlot.transform.position.x + offset.x, cameraMove.limitBounds.center.y + cameraMove.limitBounds.extents.y + offset.y, curSlot.transform.position.z - Mathf.Tan(cameraMove.angleXRange.y) * (cameraMove.limitBounds.center.y + cameraMove.limitBounds.extents.y) + offset.z);
            Vector3 angle  = new Vector3(cameraMove.angleXRange.y, 0f, 0f);


            cameraMove.transform.DOMove(pos, 0.5f).SetEase(Ease.OutCirc);
            cameraMove.cam.transform.DORotate(angle, 0.5f).SetEase(Ease.OutCirc);

            targetHighlight = curSlot.modelChild.GetComponent <HighlighterController> ();
            targetHighlight.Fire2();
            ShowBtns();
        }
    }
示例#25
0
    private SoldierFightUIMgr m_soldierFightUIMgr;      //

    public object[] GetBuildingTipsById(int buildingId, float x, float y)
    {
        if (BuildingTipsDic.ContainsKey(buildingId) == true)
        {
            return(BuildingTipsDic[buildingId]);
        }

        object[]     tipsContent = new object[] { "", "", null };
        BuildingData data        = BuildingData.dataMap[buildingId];

        tipsContent[0] = LanguageData.GetContent(data.name);
        tipsContent[1] = LanguageData.GetContent(170, data.building_consume);
        if (data.attack > 0)//建筑自身有攻击力
        {
            tipsContent[1] = string.Concat(tipsContent[1], "\n", LanguageData.GetContent(183, data.attack));
        }
        if (data.soldier_id > 0)//有士兵产出
        {
            tipsContent[1] = string.Concat(tipsContent[1], "\n", LanguageData.GetContent(171, data.production_time, LanguageData.GetContent(SoldierData.dataMap[data.soldier_id].name)));
            SoldierData soldierData = SoldierData.dataMap[data.soldier_id];
            string      attackObject;
            if (soldierData.attack_object.Count == 2)
            {
                attackObject = string.Concat(LanguageData.GetContent(173), ",", LanguageData.GetContent(174));
            }
            else
            {
                attackObject = soldierData.attack_object[0] == 1 ? LanguageData.GetContent(173) : LanguageData.GetContent(174);
            }
            tipsContent[1] = string.Concat(tipsContent[1], "\n", LanguageData.GetContent(soldierData.name), "\n",
                                           LanguageData.GetContent(172, soldierData.energy, soldierData.attack, soldierData.move), attackObject);
        }

        tipsContent[2] = new Vector3(x, y, 0);
        BuildingTipsDic[buildingId] = tipsContent;
        return(tipsContent);
    }
示例#26
0
        public override void Execute(Level level)
        {
            var ca = level.GetPlayerAvatar();
            var go = level.GameObjectManager.GetGameObjectByID(BuildingId);

            if (go != null)
            {
                var b = (ConstructionItem)go;
                if (b.CanUpgrade())
                {
                    var bd = b.GetConstructionItemData();
                    if (ca.HasEnoughResources(bd.GetBuildResource(b.GetUpgradeLevel() + 1),
                                              bd.GetBuildCost(b.GetUpgradeLevel() + 1)))
                    {
                        if (level.HasFreeWorkers())
                        {
                            string name = level.GameObjectManager.GetGameObjectByID(BuildingId).GetData().GetName();
                            if (string.Equals(name, "Alliance Castle"))
                            {
                                ca.IncrementAllianceCastleLevel();
                                Building     a  = (Building)level.GameObjectManager.GetGameObjectByID(BuildingId);
                                BuildingData al = a.GetBuildingData();
                                ca.SetAllianceCastleTotalCapacity(al.GetUnitStorageCapacity(ca.GetAllianceCastleLevel()));
                            }
                            else if (string.Equals(name, "Town Hall"))
                            {
                                ca.IncrementTownHallLevel();
                            }

                            var rd = bd.GetBuildResource(b.GetUpgradeLevel() + 1);
                            ca.SetResourceCount(rd, ca.GetResourceCount(rd) - bd.GetBuildCost(b.GetUpgradeLevel() + 1));
                            b.StartUpgrading();
                        }
                    }
                }
            }
        }
示例#27
0
    private static void DrawProducts(BuildingData buildingData)
    {
        buildingData.ShowProduction = EditorGUILayout.Foldout(buildingData.ShowProduction, "Items", true);
        if (buildingData.ShowProduction)
        {
            List <ItemData> list = buildingData.produceItems;
            buildingData.produce = EditorGUILayout.Toggle("Produce Items", buildingData.produce);
            if (buildingData.produce)
            {
                EditorGUILayout.BeginHorizontal();
                EditorGUI.indentLevel++;
                if (buildingData.produceItems.Count < 1)
                {
                    buildingData.AddProduceItem();
                }
                if (GUILayout.Button("-", GUILayout.MaxWidth(50)))
                {
                    buildingData.RemoveProduceItem();
                }
                if (GUILayout.Button("+", GUILayout.MaxWidth(50)))
                {
                    buildingData.AddProduceItem();
                }
                EditorGUILayout.EndHorizontal();

                for (int i = 0; i < list.Count; i++)
                {
                    list[i] = (ItemData)EditorGUILayout.ObjectField(list[i], typeof(ItemData), false);
                }
                EditorGUI.indentLevel--;
            }
            else
            {
                buildingData.produceItems.Clear();
            }
        }
    }
示例#28
0
    public void InitializeRequirements()
    {
        if (Data.ModuleTypeUnderConstruction != Module.Unspecified)
        {
            Data.ResourceCount = new Dictionary <Matter, float>();
            BuildingData buildingData = Construction.BuildData[Data.ModuleTypeUnderConstruction];
            RequiredProgressSeconds = buildingData.BuildTimeHours * SunOrbit.GameSecondsPerMartianMinute * 60f;
            ResourceList            = new List <ResourceComponent>();
            //todo: change to Construction.Requirements[underconstruction].keys when that's a dict of <resource, entry> and not a list
            RequiredResourceMask = new Matter[buildingData.Requirements.Count];

            int i = 0;
            foreach (IResourceEntry required in buildingData.Requirements)
            {
                Data.ResourceCount[required.Type] = 0;
                RequiredResourceMask[i]           = required.Type;
                i++;
            }

            int j      = 0;
            int radius = Construction.BuildRadius(Data.ModuleTypeUnderConstruction);
            foreach (Transform t in this.transform)
            {
                if (j < 4)//poles
                {
                    t.localPosition = new Vector3(j % 2 == 0 ? -radius: radius, 0f, j < 2 ? -radius : radius);
                }
                else //tape
                {
                    int coeff = j % 2 == 0 ? -1 : 1;
                    t.localPosition = new Vector3(j < 6 ? 0 : radius * coeff, 1f, j > 5 ? 0 : radius * coeff);
                    t.localScale    = new Vector3(radius * 2, .2f, .01f);
                }
                j++;
            }
        }
    }
示例#29
0
        public CombatComponent(GameObject GameObject) : base(GameObject)
        {
            if (GameObject is Building)
            {
                Building     Building = (Building)GameObject;
                BuildingData bd       = Building.BuildingData;

                if (bd.AmmoCount > 0)
                {
                    this.Ammo = bd.AmmoCount;
                }

                if (bd.AltAttackMode)
                {
                    this.AltAttackMode = true;
                }

                if (bd.AimRotateStep > 0)
                {
                    this.AimRotateStep = true;
                }
            }
            else if (GameObject is Trap)
            {
                Trap     Trap = (Trap)GameObject;
                TrapData td   = Trap.TrapData;
                if (td.HasAltMode)
                {
                    this.AltTrapAttackMode = true;
                }

                if (td.DirectionCount > 0)
                {
                    this.AltDirectionMode = true;
                }
            }
        }
示例#30
0
    //Loads the sprites, adding them to buildingData. Each buildingData contains a set of sprites organized by name.
    //Names are decided by the word before the first underscore.
    //All empty rooms must have "Empty" somewhere in their name.
    private void loadSpritesList(string location)
    {
        List <Sprite> allSprites = new List <Sprite>();

        allSprites.AddRange(Resources.LoadAll <Sprite>(location));

        foreach (Sprite s in allSprites)
        {
            string       type   = s.name.Split('_')[0];
            BuildingData bd     = new BuildingData();
            bool         exists = false;

            for (int i = 0; i < buildingDataList.Count; i++)
            {
                if (buildingDataList[i].getTypeName().Equals(type))
                {
                    bd     = buildingDataList[i];
                    exists = true;
                }
            }

            if (exists == false)
            {
                bd = new BuildingData(type);
                buildingDataList.Add(bd);
            }

            if (s.name.Contains("Empty"))
            {
                bd.addEmpty(s);
            }
            else
            {
                bd.addFull(s);
            }
        }
    }
    public void Load(BuildingData building, BaseManager manager)
    {
        baseManager = manager;

        transform.position = new Vector3(building.positionX, building.positionY, building.positionZ);

        loadPath = building.loadPath;

        isBuilt   = building.isBuilt;
        workTime  = building.workTime;
        isWorking = building.isWorking;
        SetBuildTime(building.buildTime);
        activeTimer = building.activeTimer;

        buildingLevel   = building.level;
        baseHealthValue = building.baseHealthValue;
        maxHealth       = building.maxHealth;
        currentHealth   = building.currentHealth;

        maxWorkingVillagers = building.maxWorkingVillagers;
        villagerIndexes     = building.villagerIndexes;

        Debug.Log("Villager Indexes: " + villagerIndexes.Count);

        for (int i = 0; i < villagerIndexes.Count; i++)
        {
            workingVillagers.Add(manager.GetVillagerList()[villagerIndexes[i]]);
            manager.GetVillagerList()[villagerIndexes[i]].SelectWorkArea(this.gameObject);
            //AddVillagerToWork(manager.villagerList[villagerIndexes[i]], villagerIndexes[i]);
        }

        constructor = building.constructor;

        SetPlacedInWorld(true);

        InitBuilding(manager, infoPanel);
    }
示例#32
0
        /// <summary>
        /// Extracts fields.
        /// </summary>
        /// <param name="content">Content to extract.</param>
        /// <returns>Extracted field data.</returns>
        public static BuildingData[] Fields(string content)
        {
            var mc   = GetMatches(content, "f*");
            var data = new BuildingData[mc.Count];

            for (int i = 0; i < mc.Count; i++)
            {
                int          id    = mc[i].Groups["id"].Value.AsInt();
                int          level = mc[i].Groups["level"].Value.AsInt();
                BuildingType type  = BuildingType.UNKNOWN;

                string typeStr = mc[i].Groups["type"].Value;

                switch (typeStr)
                {
                case "Orman":
                    type = BuildingType.WOODCUTTER;
                    break;

                case "Tuğla":
                    type = BuildingType.CLAY_PIT;
                    break;

                case "Demir":
                    type = BuildingType.IRON_MINE;
                    break;

                case "Tarla":
                    type = BuildingType.CROPLAND;
                    break;
                }

                data[i] = new BuildingData(id, type, level);
            }

            return(data);
        }
        public override void Execute(Level level)
        {
            ClientAvatar     avatar               = level.GetPlayerAvatar();
            ConstructionItem gameObjectById       = (ConstructionItem)level.GameObjectManager.GetGameObjectByID(BuildingId);
            BuildingData     constructionItemData = (BuildingData)gameObjectById.GetConstructionItemData();

            if (!avatar.HasEnoughResources(constructionItemData.GetBuildResource(gameObjectById.GetUpgradeLevel()), constructionItemData.GetBuildCost(gameObjectById.GetUpgradeLevel())))
            {
                return;
            }
            string name = level.GameObjectManager.GetGameObjectByID(BuildingId).GetData().GetName();

            Logger.Write("Unlocking Building: " + name + " (" + BuildingId + ')');
            if (string.Equals(name, "Alliance Castle"))
            {
                avatar.IncrementAllianceCastleLevel();
                BuildingData buildingData = ((Building)level.GameObjectManager.GetGameObjectByID(BuildingId)).GetBuildingData();
                avatar.SetAllianceCastleTotalCapacity(buildingData.GetUnitStorageCapacity(avatar.GetAllianceCastleLevel()));
            }
            ResourceData buildResource = constructionItemData.GetBuildResource(gameObjectById.GetUpgradeLevel());

            avatar.SetResourceCount(buildResource, avatar.GetResourceCount(buildResource) - constructionItemData.GetBuildCost(gameObjectById.GetUpgradeLevel()));
            gameObjectById.Unlock();
        }
示例#34
0
        public static bool TryGetMax(this BuildingData buildingData, IEnumerable <string> references, tsdZoneArray tSDZoneArray, out int index, out double max)
        {
            index = -1;
            max   = double.NaN;

            if (buildingData == null || references == null || references.Count() == 0)
            {
                return(false);
            }

            object @object = buildingData.GetPeakZoneGroupGains(new string[] { "Name:" + string.Join(":", references) }, new int[] { (int)tSDZoneArray });

            if (@object is object[, ])
            {
                object[,] table = (object[, ])@object;
                if (table.GetLength(0) == 3)
                {
                    index = System.Convert.ToInt32(table[2, 0]);
                    max   = System.Convert.ToDouble(table[1, 0]);
                    return(true);
                }
            }
            return(false);
        }
示例#35
0
        /// <summary>
        /// Build a building at the location.
        /// Registers the taken grid location with the Safe Terrain Editor.
        /// </summary>
        /// <param name="building">The building to construct.</param>
        /// <param name="location">The location of the building.</param>
        public void Build(BuildingData building, Point3 location)
        {
            if (Application.isEditor)
            {
                var footprint    = building.Footprint;
                var validTerrain = _terrain.Editor.CheckFlatAndFree(location.x, location.z, footprint.GetLength(0), footprint.GetLength(1));
                for (int x = 0; x < footprint.GetLength(0); ++x)
                {
                    for (int z = 0; z < footprint.GetLength(1); ++z)
                    {
                        Assert.IsFalse(footprint[x, z] && !validTerrain[x, z], string.Format("Placing building {0} at an invalid location!!!", building.Name));
                    }
                }
            }

            _buildings.Add(building);
            CampusFactory.GenerateBuilding(
                building,
                Game.Campus.transform,
                _terrain.Convert.GridToWorld(location) + new Vector3(0f, 0.01f, 0f) /* Place just above the grass*/,
                Quaternion.identity);

            _terrain.Editor.SetAnchoredGrid(location.x, location.z, building.Footprint);
        }
示例#36
0
    public string insertBuilding(BuildingData insertData)
    {
        string        response  = "";
        ConnectDB     db        = new ConnectDB();
        SqlDataSource oracleObj = db.ConnectionOracle();

        string sql = "Insert Into BUILDING(BUILDING_CODE,BUILDING_THAINAME,BUILDING_ENGNAME,BUILDING_SHORTNAME,CAMPUS_CODE) Values('" + insertData.Building_Code + "','" + insertData.Building_ThaiName + "','" + insertData.Building_EngName + "','" + insertData.Building_ShortName + "','" + insertData.Campus_Code + "')";

        oracleObj.InsertCommand = sql;

        try
        {
            if (oracleObj.Insert() == 1)
            {
                response = "OK";
            }
        }
        catch (Exception e)
        {
            response = e.Message.ToString() + " ";
        }

        return(response);
    }
示例#37
0
    public string updateBuilding(BuildingData updateData, string old_campus_code)
    {
        string        response  = "";
        ConnectDB     db        = new ConnectDB();
        SqlDataSource oracleObj = db.ConnectionOracle();

        string sql = "Update BUILDING Set BUILDING_THAINAME='" + updateData.Building_ThaiName + "',BUILDING_ENGNAME='" + updateData.Building_EngName + "',BUILDING_SHORTNAME='" + updateData.Building_ShortName + "',CAMPUS_CODE='" + updateData.Campus_Code + "' Where BUILDING_CODE='" + updateData.Building_Code + "' And CAMPUS_CODE='" + old_campus_code + "'";

        oracleObj.UpdateCommand = sql;

        try
        {
            if (oracleObj.Update() == 1)
            {
                response = "OK";
            }
        }
        catch (Exception e)
        {
            response = e.Message.ToString() + " ";
        }

        return(response);
    }
示例#38
0
        public Building create_building(IPositionable position, string type, double angle = 0)
        {
            var msg = new CreateBuildingMessage()
            {
                Position = position.position,
                Type     = type,
                Angle    = angle
            };

            Building shell = ObjectStorage.Instance.Buildings.CreateShell();

            client.RemoteCall(Contracts.CreateBuilding, msg, (ret, error) => {
                if (error != null)
                {
                    shell.AssignData(null, error);
                    return(null);
                }
                BuildingData data = (BuildingData)ret;
                ObjectStorage.Instance.Buildings.AddDataToDictionary(data);
                shell.AssignData(data);
                return(null);
            });
            return(shell);
        }
示例#39
0
        /// <inheritdoc />
        public Building(Data Data, Home Home) : base(Data, Home)
        {
            this.BuildingData = (BuildingData)Data;

            if (this.BuildingData.Hitpoints[0] > 0)
            {
                this.AddComponent(new HitpointComponent(this, this.BuildingData.Hitpoints[0]));
            }

            if (this.BuildingData.GetUnitProduction(0) > 0)
            {
                this.AddComponent(new UnitProductionComponent(this));
            }

            if (this.BuildingData.GetUnitStorageCapacity(0) > 0)
            {
                int BoatIndex = 0;

                if (this.BuildingData.GetUnitProduction(0) < 1)
                {
                    BoatIndex = 0xFF;
                }
                else
                {
                    foreach (Building GameObject in this.Home.GameObjectManager.GameObjects[0])
                    {
                        if (GameObject.BuildingData.GetUnitStorageCapacity(0) > 1 && GameObject.BuildingData.GetUnitProduction(0) > 0)
                        {
                            ++BoatIndex;
                        }
                    }
                }

                this.AddComponent(new UnitStorageComponent(this, this.BuildingData.GetUnitStorageCapacity(0), BoatIndex));
            }
        }
示例#40
0
    public void Fight()
    {
        var query = new AVQuery <AVObject>("Building").WhereEqualTo("UserID", CurMatchUser.ObjectId);

        query.FindAsync().ContinueWith(t => {
            List <BuildingData> buildingDataList = new List <BuildingData>();
            foreach (AVObject buildingObject in (t as Task <IEnumerable <AVObject> >).Result)
            {
                BuildingData buildingData = new BuildingData();
                buildingData.UserID       = buildingObject.Get <string>("UserID");
                buildingData.Type         = (EBuildingType)buildingObject.Get <int>("Type");
                buildingData.Level        = buildingObject.Get <int>("Level");
                buildingData.Value        = buildingObject.Get <int>("Value");
                buildingData.SlotID       = buildingObject.Get <int>("SlotID");
                buildingDataList.Add(buildingData);
            }

            GameManager.Instance.LastMatchBuildingDataList = buildingDataList;
            GameManager.Instance.EventQueue.Queue.Enqueue(new EventItem()
            {
                Type = EEventItemType.EnemyBuildingLoaded
            });
        });
    }
示例#41
0
 /// <summary>
 /// Inicjalizuje prawy pasek wszystkimi mozliwymi opcjami budowy
 /// </summary>
 public void InitRightStripe()
 {
     foreach (short id in GlobalSettings.Wrapper.buildingsMap.Keys)
     {
         BuildingData bdata = GlobalSettings.Wrapper.buildingsMap[id];
         foreach (String bname in bdata.BuildingsCanProduce)
         {
             short idb = GlobalSettings.Wrapper.namesToIds[bname];
             if (!_rightStripe.Contains((int)idb))
             {
                 _rightStripe.Add((int)idb, bname, bname, true);
             }
         }
         foreach (String uname in bdata.UnitsCanProduce)
         {
             short idu = GlobalSettings.Wrapper.namesToIds[uname];
             if (!_rightStripe.Contains((int)idu))
             {
                 _rightStripe.Add((int)idu, uname, uname, false);
             }
         }
     }
     _rightStripe.HideAll();
 }
示例#42
0
    public void constructBuilding(MessageConstructBuilding msg)
    {
        // Create the new building GameObject and set it's team.
        SpawnInstructions <BuildingBase> instructions = this.map.spawnEntity <BuildingBase>(
            Registry.getObjectFromRegistry(msg.entityId),
            new Vector3(msg.position.x, 0, msg.position.z),
            Quaternion.identity);
        BuildingBase newBuilding = instructions.getObj();
        Team         team        = Team.getTeamFromId(msg.teamId);

        newBuilding.setTeam(team);

        // Remove resources from the builder's team.
        this.map.reduceResources(team, newBuilding.getData().getCost());

        // Set the buildings health and send the builder to build it.
        BuildingData bd = newBuilding.getData();

        if (bd.isInstantBuild())
        {
            newBuilding.setHealth(bd.getMaxHealth());
        }
        else
        {
            newBuilding.setHealth(1);
            UnitBuilder builder = map.findMapObjectFromGuid <UnitBuilder>(msg.builderGuid);
            builder.setTask(new TaskConstructBuilding(builder, newBuilding));
            builder.unitStats.buildingsBuilt.increase();
        }

        if (newBuilding is BuildingBridge)
        {
        }

        instructions.spawn();
    }
示例#43
0
        public override void Execute(Level level)
        {
            var ca = level.GetPlayerAvatar();
            var go = level.GameObjectManager.GetGameObjectByID(BuildingId);

            var b = (ConstructionItem)go;

            var bd = (BuildingData)b.GetConstructionItemData();

            if (ca.HasEnoughResources(bd.GetBuildResource(b.GetUpgradeLevel()), bd.GetBuildCost(b.GetUpgradeLevel())))
            {
                string name = level.GameObjectManager.GetGameObjectByID(BuildingId).GetData().GetName();
                if (string.Equals(name, "Alliance Castle"))
                {
                    ca.IncrementAllianceCastleLevel();
                    Building     a  = (Building)level.GameObjectManager.GetGameObjectByID(BuildingId);
                    BuildingData al = a.GetBuildingData();
                    ca.SetAllianceCastleTotalCapacity(al.GetUnitStorageCapacity(ca.GetAllianceCastleLevel()));
                }
                var rd = bd.GetBuildResource(b.GetUpgradeLevel());
                ca.SetResourceCount(rd, ca.GetResourceCount(rd) - bd.GetBuildCost(b.GetUpgradeLevel()));
                b.Unlock();
            }
        }
示例#44
0
        public ActionResult CalculateSnowguards(
            SnowLoadSnowguards snowLoadSnowguards,
            BuildingData buildingData)
        {
            buildingData.BuildingSite.CalculateExposureCoefficient();
            buildingData.SnowLoad.CalculateSnowLoad();
            buildingData.Building.CalculateThermalCoefficient();

            var roof = snowLoadSnowguards.Snowguards;

            snowLoadSnowguards.BuildingData = buildingData;

            roof =
                new SnowLoads.BuildingTypes.Snowguards(
                    roof.Width,
                    roof.Slope,
                    roof.SnowLoadOnRoofValue);

            roof.CalculateSnowLoad();

            snowLoadSnowguards.Snowguards = roof;

            return(View("SnowguardsResult", snowLoadSnowguards));
        }
    public void SetUp(BuildingData data)
    {
        buildingName.text        = data.buildingName;
        buildingDescription.text = data.description;

        for (int i = 0; i < data.cost.Length; i++)
        {
            if (data.cost[i].type == RessourceType.fer)
            {
                ferCost.text = data.cost[i].value.ToString();;
            }
            else if (data.cost[i].type == RessourceType.mer)
            {
                merCost.text = data.cost[i].value.ToString();;
            }
            if (data.cost[i].type == RessourceType.rubith)
            {
                rubithCost.text = data.cost[i].value.ToString();;
            }
        }

        constructionPoints.text = data.constructionPoints.ToString();
        healthPoints.text       = data.healthPoints.ToString();
    }
示例#46
0
	public void AddNewBuilding(BuildingData buildingData)
	{
		BuildingDic.Add(buildingData.SlotID, buildingData);
	}
示例#47
0
 public string Pack(BuildingData _BData)
 {
     return ((Tree)_BData._Building).Capacity.get().ToString();
 }
示例#48
0
 public void Unpack(BuildingData _BData, string Data)
 {
     ((Tree)_BData._Building).Capacity.set(Convert.ToInt32(Data));
 }
示例#49
0
	public static void DB_QueryPlayerVillageData()
	{
		AVQuery<AVObject> query=new AVQuery<AVObject>("Village").WhereEqualTo("UserID", AVUser.CurrentUser.ObjectId);
		query.FirstAsync().ContinueWith(t =>{
			AVObject villageObject = (t as Task<AVObject>).Result;
			VillageData villageData = new VillageData();
			villageData.UserID = villageObject.Get<string>("UserID");
			villageData.Defence = villageObject.Get<int>("Defence");
			villageData.Power = villageObject.Get<int>("Power");
			villageData.Trick = villageObject.Get<int>("Trick");
			villageData.Belief = villageObject.Get<int>("Belief");
			villageData.BeliefAll = villageObject.Get<int>("BeliefAll");
			GameManager.Instance.LastGetVillageData = villageData;
			Debug.LogWarning(villageData.UserID);

			AVQuery<AVObject> buildingQuery = new AVQuery<AVObject>("Building").WhereEqualTo("UserID", AVUser.CurrentUser.ObjectId);
			buildingQuery.FindAsync().ContinueWith(t2=>{
				List<BuildingData> buildingDataList = new List<BuildingData>();
				foreach(AVObject buildingObject in (t2 as Task<IEnumerable<AVObject>>).Result)
				{
					BuildingData buildingData = new BuildingData();
					buildingData.UserID = buildingObject.Get<string>("UserID");
					buildingData.Type = (EBuildingType)buildingObject.Get<int>("Type");
					buildingData.Level = buildingObject.Get<int>("Level");
					buildingData.Value = buildingObject.Get<int>("Value");
					buildingData.SlotID = buildingObject.Get<int>("SlotID");
					buildingDataList.Add(buildingData);
				}

				GameManager.Instance.LastGetBuildingDataList = buildingDataList;
				GameManager.Instance.EventQueue.Queue.Enqueue(new EventItem(){Type = EEventItemType.PlayerVillageDataLoaded});
			});
		});
	}
示例#50
0
	// 获取特定玩家信息
	public void NetGetOtherByID(string objectID, Action callback)
	{
		GameManager.Instance.AsyncBeginWait();
		var query = new AVQuery<AVObject>("Village").WhereEqualTo("UserID", objectID);
		query.FindAsync().ContinueWith(t=>{
			List<AVObject> objList = new List<AVObject>();
			objList.AddRange((t as Task<IEnumerable<AVObject>>).Result);
			if(objList.Count > 0)
			{
				AVObject villageObject = objList[0];
				VillageData villageData = new VillageData();
				villageData.AVObject = villageObject;

				AVQuery<AVObject> buildingQuery = new AVQuery<AVObject>("Building").WhereEqualTo("UserID", villageData.UserID);
				buildingQuery.FindAsync().ContinueWith(t2=>{
					List<BuildingData> buildingDataList = new List<BuildingData>();
					foreach(AVObject buildingObject in (t2 as Task<IEnumerable<AVObject>>).Result)
					{
						BuildingData buildingData = new BuildingData();
						buildingData.AVObject = buildingObject;
						buildingDataList.Add(buildingData);
					}

					GameManager.Instance.AsyncEndWait(()=>{
						OtherVillageData = villageData;
						OtherVillageData.BuildingDataList = buildingDataList;
						
						if(callback != null)
							callback();
					});
				});
			}
		});
	}
示例#51
0
	// 网络-收获建筑
	public void NetHarvestBuilding(BuildingData buildingData, Action<BuildingData> onFinished=null)
	{
		// 计算收获信仰
		DateTime now = DateTime.Now;
		double second = (now - buildingData.CollectTime).TotalSeconds;
		float totalT = buildingData.Level * 60;
		totalT = Mathf.Clamp(totalT, 0, 180);
		StaticBuildingData data = StaticBuilding.GetByTypeLevel(buildingData.Type, buildingData.Level, buildingData.Sibling);
		float product = (float)(data.Value * second / totalT);

		// 更新服务器信仰
		PlayerVillageData.Belief += (int)product;
		PlayerVillageData.AVObject.SaveAsync().ContinueWith(t=>{
			// 更新服务器收获时间
			buildingData.CollectTime = now;
			GameManager.Instance.AsyncBeginWait();
			buildingData.AVObject.SaveAsync().ContinueWith(t2=>{
				GameManager.Instance.AsyncEndWait(()=>{
					// TODO 播放吸收小太阳的动画 ...
				});
			});
		});
	}
示例#52
0
	// 网络-建造
	// 祭坛Altar不要从这里建造
	public void NetBuildNew(EBuildingType buildingType, Action callback = null)
	{
		// 检查是否达到同类上限
		int maxSibling = BuildingData.GetMaxSibling(PlayerBuildingDataList, buildingType);
			
		int nextSibling = maxSibling + 1;

		if(nextSibling > StaticBuilding.MAX_SIBLING)
		{
			Debug.LogWarning("已经超出同类建筑上限,不可再建造");
			return;
		}

		BuildingData newBuilding = new BuildingData();
		newBuilding.AVObject = new AVObject("Building");
		newBuilding.UserID = AVUser.CurrentUser.ObjectId;
		newBuilding.Type = buildingType;
		newBuilding.Level = 1;
		newBuilding.SlotID = PlayerManager.Instance.PlayerVillageData.GetEmptySlot();
		newBuilding.Sibling = nextSibling;

		// ### 在线版
		GameManager.Instance.AsyncBeginWait();
		newBuilding.AVObject.SaveAsync().ContinueWith(t => {
			// 释放异步等待
			GameManager.Instance.AsyncEndWait(()=>{
				PlayerVillageData.AddNewBuilding(newBuilding);
				SceneManager.Instance.SceneComp_Build.AddNewBuilding(newBuilding);
				UIManager.Instance.WidgetBuildingPicker.gameObject.SetActive(false);

				if(callback != null)
					callback();
			});
		});
	}
示例#53
0
	// 网络-升级建筑
	public void NetUpgradeBuilding(BuildingData buildingData, Action<BuildingData> onFinished=null)
	{
		if(buildingData!=null && buildingData.Level <= 2)
		{
			buildingData.Level = buildingData.Level + 1;

			// ### 联网版
			GameManager.Instance.AsyncBeginWait();
			buildingData.AVObject.SaveAsync().ContinueWith(t=>{
				GameManager.Instance.AsyncEndWait(()=>{
					SceneManager.Instance.CurSceneComp.RecreateAllBuildings();
				});
			});
		}
	}
示例#54
0
	// 网络-获取玩家村落信息
	public void NetQueryPlayerVillageData(Action callback = null)
	{
		GameManager.Instance.AsyncBeginWait();
		AVQuery<AVObject> query=new AVQuery<AVObject>("Village").WhereEqualTo("UserID", AVUser.CurrentUser.ObjectId);
		query.FirstAsync().ContinueWith(t =>{
			AVObject villageObject = (t as Task<AVObject>).Result;
			VillageData villageData = new VillageData();
			villageData.AVObject = villageObject;
			
			AVQuery<AVObject> buildingQuery = new AVQuery<AVObject>("Building").WhereEqualTo("UserID", AVUser.CurrentUser.ObjectId);
			buildingQuery.FindAsync().ContinueWith(t2=>{
				List<BuildingData> buildingDataList = new List<BuildingData>();
				foreach(AVObject buildingObject in (t2 as Task<IEnumerable<AVObject>>).Result)
				{
					BuildingData buildingData = new BuildingData();
					buildingData.AVObject = buildingObject;
					buildingDataList.Add(buildingData);
				}
				
				GameManager.Instance.AsyncEndWait(()=>{
					PlayerManager.Instance.PlayerVillageData = villageData;
					PlayerManager.Instance.PlayerVillageData.BuildingDataList = new List<BuildingData>();
					PlayerManager.Instance.PlayerVillageData.BuildingDataList = buildingDataList;

					if(callback != null)
						callback();
				});
			});
		});
	}
示例#55
0
文件: Main.cs 项目: RadianSmile/CCity
    IEnumerator keepUpdateTableStatus()
    {
        while (true) {
            StartCoroutine (DB.syncTableStatus());
            yield return new WaitForSeconds (1f) ;

            GameObject tempB = GameObject.Find( DB.tableSelectBid );

            if ( !(status == "global" || status == "infoA") ) continue ;

            tableStatus = DB.tableStatus ;
            if (tableStatus == "idle") status = "global" ;

            if (tempB != null && (currentBuilding != tempB)){
                changed = true ;
                Cam.targetChanged = true ;
                currentBuilding = tempB ;
                currentBuildingData = currentBuilding.GetComponent<BuildingData>() ;
                Cam.target = currentBuilding.transform.transform;

                audioController.change.Play();
                Debug.Log ("currentBuildingData"+currentBuildingData);

                if (tableStatus == "select") status = "infoA" ;

            }else if (tempB == null){
                Debug.Log("no such building : " + DB.tableSelectBid );
            }else if (currentBuilding == tempB) {
                Debug.Log("same building "+ DB.tableSelectBid +" , ignore status") ;
            }

        }
    }
    private void InitializeLoadedData(BuildingData _Building, List<string>ChainData)
    {
        int index = 4;

        _Building._Building.Build_Statistic.Capacity = float.Parse(ChainData[0]);
        _Building.PlaceToGrid.Col = int.Parse(ChainData[1]);
        _Building.PlaceToGrid.Row = int.Parse(ChainData[2]);
        if (Convert.ToBoolean(int.Parse(ChainData[3])) == true) _Building.PlaceToGrid.MirrorScale();

        if (ChainData[4].Length > 1)
        {
            _Building._Building.InConstruction.span = TimeSpan.Parse(ChainData[4]);
            _Building._Building.InConstruction.initializeoryginal();
            _Building._Building.InConstruction.active = true;
        }
        else _Building._Building.InConstruction.active = false;

        SpecialDataPacker.StartIndex = 5;
        SpecialDataPacker.Unpack(_Building, ChainData);

        _Building._Building.Initialize();

        //for (int i = 0; i < _Building._UpgradeSystem.Upgrades.Count; i++, index++)
        //{
        //    _Building._UpgradeSystem.Upgrades[i].UpgradeLevel = Convert.ToInt32(ChainData[index]);
        //}

        //for (int i = 0; i < _Building._UpgradeSystem.PercentUpgrades.Count; i++, index++)
        //{
        //    _Building._UpgradeSystem.PercentUpgrades[i].UpgradeLevel = Convert.ToInt32(ChainData[index]);
        //}
    }
	/**
	 * Create a building from data. Uses a coroutine to ensure view can be synced with data.
	 */ 
	protected virtual IEnumerator DoInit(BuildingTypeData type, BuildingData data) {
		this.data = data;
		this.type = type;
		this.Position = data.position;
		// Ensure occupant type references are loaded
		if (data.occupants != null) {
			foreach (OccupantData o in data.occupants) {
				o.Type = OccupantManager.GetInstance().GetOccupantTypeData(o.occupantTypeString);	
				OccupantManager.GetInstance().RecruitedOccupant(o);
			}
		}
		// Update view
		view = gameObject;
		view.SendMessage ("UI_Init", this);
		view.SendMessage ("SetPosition", data.position);
		view.SendMessage ("UI_UpdateState");
		
		// Wait one frame to ensure everything is initialised
		yield return true;
		if (data.state == BuildingState.IN_PROGRESS || data.state == BuildingState.READY) {
			StartCoroutine(BuildActivity(data.startTime));
		} else {
			// Activities
			if (data.completedActivity != null && data.completedActivity.Type != ActivityType.BUILD && data.completedActivity.Type != ActivityType.NONE) {
				StartCoroutine(GenericActivity(data.completedActivity.Type, data.completedActivity.StartTime, data.completedActivity.SupportingId));
			} else if (data.currentActivity != null && data.currentActivity.Type != ActivityType.BUILD && data.currentActivity.Type != ActivityType.NONE) {
				StartCoroutine(GenericActivity(data.currentActivity.Type, data.currentActivity.StartTime, data.currentActivity.SupportingId));
			}
			// Auto activities
			if (!Type.isObstacle) {
				if (data.autoActivity != null) {
					System.TimeSpan span = System.DateTime.Now - data.autoActivity.StartTime;
					int iterations = ((int)span.TotalSeconds) / type.generationTime;
					int generated = iterations * type.generationAmount;
					StoredResources = StoredResources + generated;
					if (StoredResources > type.generationStorage) StoredResources = type.generationStorage;
					// If storage not full resume activity
					if (type.generationAmount > 0 && StoredResources < type.generationStorage) {
						System.DateTime newStartTime = data.autoActivity.StartTime + new System.TimeSpan(0, 0, iterations * type.generationTime);
						StartAutomaticActivity(newStartTime);
					} else {
						AutoActivity = null;	
					}
				} else if (type.generationAmount > 0 && StoredResources < type.generationStorage) {
					// Start auto activty if one not saved
					StartAutomaticActivity(System.DateTime.Now);
				}
				// If more than 50% full and no other activity to show then show a store collect indicator
				if (type.generationAmount > 0 && CompletedActivity == null && CurrentActivity == null && StoredResources >= type.generationStorage * 0.5f) {
					view.SendMessage ("UI_StoreFull");
				}		
			}
		}
	}
示例#58
0
	// 网络-获取随机玩家
	public void NetGetRandomOther(Action callback)
	{
		GameManager.Instance.AsyncBeginWait();
		var query = new AVQuery<AVObject>("Village").WhereNotEqualTo("UserID", AVUser.CurrentUser.ObjectId);
		Debug.Log("开始查找敌人村落");
		query.FindAsync().ContinueWith(t=>{
			List<AVObject> objList = new List<AVObject>();
			objList.AddRange((t as Task<IEnumerable<AVObject>>).Result);
			if(objList.Count > 0)
			{
				var rand = new System.Random();
				int r = rand.Next(objList.Count);
				AVObject villageObject = objList[r];
				VillageData villageData = new VillageData();
				villageData.AVObject = villageObject;

				Debug.Log("开始查找敌人建筑");
				AVQuery<AVObject> buildingQuery = new AVQuery<AVObject>("Building").WhereEqualTo("UserID", villageData.UserID);
				buildingQuery.FindAsync().ContinueWith(t2=>{
					List<BuildingData> buildingDataList = new List<BuildingData>();
					foreach(AVObject buildingObject in (t2 as Task<IEnumerable<AVObject>>).Result)
					{
						BuildingData buildingData = new BuildingData();
						buildingData.AVObject = buildingObject;
						buildingDataList.Add(buildingData);
					}
					
					Debug.Log("找到敌人建筑");
					GameManager.Instance.AsyncEndWait(()=>{
						OtherVillageData = villageData;
						OtherVillageData.BuildingDataList = buildingDataList;

						if(callback != null)
							callback();
					});
				});
			}
		});
	}
 public void Init(BuildingData pBuilding)
 {
     m_pSprite.sprite = ToolKit.GetSpriteFromAtlas(pBuilding.m_pAssetsName, "Buildings");
     m_pAttachedBuilding = pBuilding;
 }
示例#60
0
 private void OnUpgradeBuilding(BuildingData buildingData) {
     _currentModel = NormalModels[buildingData.Level - 1];
 }