Beispiel #1
0
    private void clickOnConstruction(RaycastHit rayHit)
    {
        if (rayHit.collider.gameObject.layer == LayerMask.NameToLayer("Selectable"))
        {
            SObject sobject = SObject.getSobjectFromSelectionField(rayHit.collider.gameObject);

            if (sobject is SBuilding)
            {
                SBuilding sbuilding = (SBuilding)sobject;
                if (sbuilding.BelongsTo != m_belongsTo)
                {
                    print("gonna to attack " + ID);
                    //TODO add attack here
                }
                else
                {
                    //if the building is in construction we continue the construction
                    if (sbuilding.IsInConstruction)
                    {
                        continueConstructBuilding(sbuilding.gameObject);
                    }
                }
            }
        }
    }
Beispiel #2
0
    //private void OnValidate()
    //{
    //    //_queuePrefab = Resources.Load<GameObject>("_default_queueLine");
    //    //_content = GameObject.Find("QueueContent");
    //}

    public void OnBtnBuilding(SBuilding myBuilding)
    {
        //Debug.Log("Вызван OnBtnBuildong, " + myBuilding.ToString());
        //Messenger<int>.Broadcast(GameEvents.CityGUIGameEvent.ON_BUTTON_BUILDING, myBuilding); //(int)Building.Buildings.TownHall_lvl0);
        Messenger <SBuilding> .Broadcast(GameEvents.CityGUIGameEvent.ON_BUTTON_BUILDING, myBuilding);

        //Instantiate(_queuePrefab, _content.transform);
        //CreationQueueElement.InstantiateQueueElement(building);
    }
        public void InitializeModel(SBuilding sBuilding,
                                    Dictionary <BuildingType, Sprite> buildingsSprites,
                                    Dictionary <ResourceType, Sprite> resourcesSprites,
                                    StoreHelper storeHelper,
                                    List <BuildingModel> buildings,
                                    Transform detailWindowParent)
        {
            _sBuildingModel = sBuilding;
            _buildings      = buildings;

            InitializeModel(_sBuildingModel.Name,
                            buildingsSprites[_sBuildingModel.Type],
                            _sBuildingModel.Id,
                            detailWindowParent);

            foreach (var price in sBuilding.Price)
            {
                Instantiate(_pricePrefab, _prices).GetComponent <PriceModel>()
                .InitializeModel(price.Amount, resourcesSprites[price.Type], price.Type);
            }

            GetComponent <Toggle>().onValueChanged.AddListener(delegate
            {
                if (_detailWindowObject != null)
                {
                    Destroy(_detailWindowObject);
                }
                else
                {
                    _detailWindowObject   = Instantiate(_detailWindowPrefab, _detailWindowParent);
                    var detailWindowModel = _detailWindowObject.GetComponent <StoreDetailWindowModel>();

                    detailWindowModel.InitializeModel(_sBuildingModel.Name,
                                                      _sBuildingModel.Description,
                                                      _sBuildingModel.Price,
                                                      _pricePrefab,
                                                      resourcesSprites,
                                                      () =>
                    {
                        storeHelper.BuyBuilding(_sBuildingModel.Id,
                                                (buildingModel, reponseCode) =>
                        {
                            switch (reponseCode)
                            {
                            case ResponseCode.Success:
                                buildings.Add(buildingModel);
                                break;

                            default:
                                break;
                            }
                        });
                    });
                }
            });
        }
Beispiel #4
0
    public override void onClick(RaycastHit rayHit)
    {
        base.onClick(rayHit);

        //if the builder was building a construction, we reduce the number of builder on this construction
        if (m_buildingUnderConstruction != null)
        {
            m_buildingUnderConstruction.BuilderOnConstruction--;
            m_buildingUnderConstruction = null;
        }

        clickOnConstruction(rayHit);
        harvest(rayHit);
    }
Beispiel #5
0
    public override void onClick(SObject sobject)
    {
        base.onClick(sobject);
        print("on click sobject");
        //if the builder was building a construction, we reduce the number of builder on this construction
        if (m_buildingUnderConstruction != null)
        {
            m_buildingUnderConstruction.BuilderOnConstruction--;
            m_buildingUnderConstruction = null;
        }

        if (sobject is SResources)
        {
            print("gonna to harvest " + ID);
            SResources sresources = (SResources)sobject;
            actionGetResources(sresources);
            if (m_belongsToSquad != null)
            {
                m_belongsToSquad.harvestSquad(sresources);
            }
            print("get resources");
        }

        if (sobject is SBuilding)
        {
            SBuilding sbuilding = (SBuilding)sobject;
            if (sbuilding.BelongsTo != m_belongsTo)
            {
                print("gonna to attack " + ID);
                //TODO add attack here
            }
            else
            {
                //if the building is in construction we continue the construction
                if (sbuilding.IsInConstruction)
                {
                    continueConstructBuilding(sbuilding.gameObject);
                }
            }
        }
    }
Beispiel #6
0
    private IEnumerator constructBuildingCoroutine(GameObject buildingGO)
    {
        #region constructBuildingInit

        SBuilding sbuilging;
        if (buildingGO.TryGetComponent(out sbuilging) == false)
        {
            Debug.LogWarning("Unable to construct the " + gameObject.name + " it doesn't have any SBuilding component");
            yield break;
        }

        float duration = sbuilging.DurationCreation;

        #endregion

        #region reachBuilding
        int i = 0;
        //wait until the agent reach destination
        while (Utilities.navMeshHaveReachDestination(m_agent) == false)
        {
            if (i * 0.5f > m_timeMaxToReachDest)
            {
                Debug.LogWarning("The agent " + ID + " didn't suceed to reach his destination");
                yield break;
            }

            yield return(new WaitForSeconds(0.5f));

            i++;
        }
        #endregion

        #region constructBuildingLoop

        m_buildingUnderConstruction = sbuilging;
        sbuilging.BuilderOnConstruction++;
        const float timeIteration = 0.1f;

        while (sbuilging.StateOfConstruction < 1.0f)
        {
            sbuilging.StateOfConstruction += (timeIteration / duration) * m_speedConstruction;
            yield return(new WaitForSeconds(timeIteration));
        }
        #endregion

        #region end_construction
        //change mesh to the full form off the building
        //buildingGO.GetComponent<MeshFilter>().sharedMesh = sbuilging.InitMeshBuilding;
        sbuilging.enabled = true;

        //the building isn't in construction anymore
        sbuilging.IsInConstruction = false;

        IsActive = false;

        //add cloth on it
        if (DebugTool.tryFindGOChildren(buildingGO, "Cloth", out GameObject clothGO, LogType.Error))
        {
            clothGO.SetActive(false);
        }
        #endregion
    }