예제 #1
0
 private void TryTrainUnit(Entity trainedEntity, BuildingBehaviour trainedIn)
 {
     if (trainedIn == this)
     {
         TryTrainUnit();
     }
 }
    /**
     * <summary>
     * Unselect the any building
     * </summary>
     *
     * <returns>
     * void
     * </returns>
     */
    public static void UnselectBuilding()
    {
        if (BuildingsManagerBehaviour.SelectedBuilding == null)
        {
            return;
        }

        BuildingBehaviour buildingBehaviour = BuildingsManagerBehaviour.SelectedBuilding
                                              .GetComponent <BuildingBehaviour>();

        buildingBehaviour.SetSelect(false);

        // Hide info component panel
        Self.infoComponentPanel.SetActive(false);
        Self.infoComponentPanel
        .transform
        .Find("Single")
        .gameObject
        .SetActive(false);

        InfoComponentPanelUI infoComponentPanelUI = Self.infoComponentPanel.GetComponent <InfoComponentPanelUI>();

        infoComponentPanelUI.SetName("");
        infoComponentPanelUI.SetHealth(0, 100);
        infoComponentPanelUI.SetIcon(null);

        BuildingsManagerBehaviour.SelectedBuilding = null;
    }
예제 #3
0
    // Update is called once per frame
    void Update()
    {
        if (Input.GetMouseButtonDown(0))
        {
            Ray        ray = Camera.main.ScreenPointToRay(Input.mousePosition);
            RaycastHit hit;
            if (Physics.Raycast(ray, out hit, Mathf.Infinity, buildingsMask))
            {
                BuildingBehaviour building = hit.collider.gameObject.GetComponent <BuildingBehaviour>();
                if (building && building.built)
                {
                    if (building.selected)
                    {
                        building.SetSelected(false);
                    }
                    else
                    {
                        DeactivateAllBuildings();
                        building.SetSelected(true);
                    }
                }
            }

            else if (!eventSystem.IsPointerOverGameObject())
            {
                DeactivateAllBuildings();
            }
        }
    }
예제 #4
0
    private void ProcessInput()
    {
        if (!preview)
        {
            return;
        }

        Ray        ray = Camera.main.ScreenPointToRay(Input.mousePosition);
        RaycastHit hit;

        if (Physics.Raycast(ray, out hit, Mathf.Infinity, LayerMask.GetMask("Both")))
        {
            Vector3 mousePos = hit.point;
            preview.transform.position = mousePos + building.Offset;
        }

        if (Input.GetMouseButton(0))
        {
            BuildingBehaviour buildingBehaviour = preview.GetComponent <BuildingBehaviour>();
            if (buildingBehaviour.validPosition)
            {
                buildingBehaviour.Place();
                if (Input.GetKey(KeyCode.LeftShift))
                {
                    preview = CreatePreview(building);
                }
                else
                {
                    preview    = null;
                    building   = null;
                    isBuilding = false;
                }
            }
        }
    }
 /**
  * <summary>
  * Turn all visibles placement indicators to a given parameter
  * </summary>
  *
  * <param name="flag"></param>
  *
  * <returns>
  * void
  * </returns>
  */
 public static void TurnPlacementIndicator(bool flag)
 {
     foreach (GameObject building in BuildingsManagerBehaviour.Buildings)
     {
         BuildingBehaviour buildingBehaviour = building.GetComponent <BuildingBehaviour>();
         buildingBehaviour.TurnPlacementIndicator(flag);
     }
 }
 /**
  * <summary>
  * Turn all visibles placement indicators to a given parameter
  * </summary>
  *
  * <param name="flag"></param>
  *
  * <returns>
  * void
  * </returns>
  */
 public static void TurnPlacementIndicator(bool flag)
 {
     foreach (GameObject visible in UnitsManagerBehaviour.Visibles)
     {
         BuildingBehaviour buildingBehaviour = visible.GetComponent <BuildingBehaviour>();
         buildingBehaviour.TurnPlacementIndicator(flag);
     }
 }
예제 #7
0
        private IEnumerator DealDamage(BuildingBehaviour atackedBuild)
        {
            if (atackedBuild == null)
            {
                base.FindTarget(true);
                yield break;
            }

            atackedBuild.SufferDamage(attack);

            yield return(new WaitForSecondsRealtime(attackInterval));

            if (isDealingDamage)
            {
                StartCoroutine(DealDamage(atackedBuild));
            }
        }
    /**
     * <summary>
     * Select a given building
     * </summary>
     *
     * <param name="building"></param>
     *
     * <returns>
     * void
     * </returns>
     */
    public static void SelectBuilding(GameObject building)
    {
        // Unselect previous building
        BuildingsManagerBehaviour.UnselectBuilding();

        // Unselect units
        if (UnitsManagerBehaviour.SelectedUnits != null)
        {
            UnitsManagerBehaviour.UnselectGameObjects();
        }

        // Unselect previous resource
        if (ResourcesManagerBehaviour.SelectedResource != null)
        {
            ResourcesManagerBehaviour.UnselectResource();
        }

        BuildingBehaviour buildingBehaviour = building.GetComponent <BuildingBehaviour>();

        buildingBehaviour.SetSelect(true);

        // Show info component panel
        Self.infoComponentPanel.SetActive(true);

        Self.infoComponentPanel
        .transform
        .Find("Single")
        .gameObject
        .SetActive(true);

        BuildingUI buildingUI = buildingBehaviour.GetUI()
                                .GetComponent <BuildingUI>();

        InfoComponentPanelUI infoComponentPanelUI = Self.infoComponentPanel.GetComponent <InfoComponentPanelUI>();

        infoComponentPanelUI.SetName(building.name);
        infoComponentPanelUI.SetHealth(buildingBehaviour.GetHealth(), buildingBehaviour.GetMaxHealth());
        infoComponentPanelUI.SetIcon(buildingUI.GetIcon());

        // Show action component panel
        Self.actionComponentPanel.SetActive(true);

        // Set selected building
        BuildingsManagerBehaviour.SelectedBuilding = building;
    }
    /**
     * <summary>
     * Refresh or update the selected building information
     * </summary>
     *
     * <returns>
     * void
     * </returns>
     */
    public static void UpdateSelectedBuildingInfo()
    {
        if (!BuildingsManagerBehaviour.SelectedBuilding)
        {
            return;
        }

        BuildingBehaviour buildingBehaviour = BuildingsManagerBehaviour.SelectedBuilding
                                              .GetComponent <BuildingBehaviour>();
        BuildingUI buildingUI = buildingBehaviour.GetUI()
                                .GetComponent <BuildingUI>();

        InfoComponentPanelUI infoComponentPanelUI = Self.infoComponentPanel.GetComponent <InfoComponentPanelUI>();

        infoComponentPanelUI.SetName(BuildingsManagerBehaviour.SelectedBuilding.name);
        infoComponentPanelUI.SetHealth(buildingBehaviour.GetHealth(), buildingBehaviour.GetMaxHealth());
        infoComponentPanelUI.SetIcon(buildingUI.GetIcon());
    }
    /**
     * <summary>
     * Construct a building
     * </summary>
     *
     * <param name="building">Building gameobject</param>
     *
     * <returns>
     * IEnumerator null
     * </returns>
     */
    private IEnumerator Construct(GameObject building)
    {
        Vector3 closestPoint = this.ClosestPointToBuilding(building);

        this.MoveTo(closestPoint);

        // Move to the closest spot
        // Once the builder has reached the destination, start the construction
        while (!this.IsReachedAtDestination(closestPoint))
        {
            BuildingBehaviour buildingBehaviour = building.GetComponent <BuildingBehaviour>();

            if (buildingBehaviour.IsConstructed())
            {
                this.StopConstruction();
            }

            yield return(null);
        }

        Debug.Log("BUILDER : CONSTRUCTION : START");

        // Starting the construction
        this.constructing = true;

        while (this.constructing)
        {
            this.animation.StartWalkAnimation();

            BuildingBehaviour buildingBehaviour = building.GetComponent <BuildingBehaviour>();
            buildingBehaviour.SetActivate(true);

            this.SetConstructing(!buildingBehaviour.IsConstructed());

            yield return(null);
        }

        Debug.Log("BUILDER : CONSTRUCTION : DONE");

        this.SetStructure(null);

        yield return(null);
    }
    /**
     * <summary>
     * On mouse over
     * </summary>
     *
     * <returns>
     * void
     * </returns>
     */
    private void OnMouseOver()
    {
        if (MouseBehaviour.Mode == MouseMode.Build)
        {
            return;
        }

        // Prevent selectino through the bottom UI
        if (ComponentPanelsUI.OnUI)
        {
            return;
        }

        MouseBehaviour.Mode = MouseMode.OverBuilding;

        // Right clicked
        if (Input.GetMouseButtonDown(1))
        {
            if (this.IsActivated() || UnitsManagerBehaviour.SelectedUnits.Count == 0)
            {
                return;
            }

            GameObject    unit          = UnitsManagerBehaviour.SelectedUnits[0];
            UnitBehaviour unitBehaviour = unit.GetComponent <UnitBehaviour>();
            if (unitBehaviour is BuilderBehaviour)
            {
                ((BuilderBehaviour)unitBehaviour).StartConstruction(this.gameObject);
            }
        }

        // Left clicked
        else if (Input.GetMouseButtonDown(0))
        {
            BuildingBehaviour buildingBehaviour = this.gameObject.GetComponent <BuildingBehaviour>();

            if (buildingBehaviour != null && buildingBehaviour.IsConstructed())
            {
                BuildingsManagerBehaviour.SelectBuilding(this.gameObject);
            }
        }
    }
예제 #12
0
    void CreateEnvironment(GameObject Floor)
    {
        //Calculate Boundaries
        SpriteRenderer FloorSpr = Floor.GetComponent <SpriteRenderer>();

        if (FloorSpr)
        {
            //Randomly select number of buildings (between 0 - 4)
            // The select a random position for them being upRight, DownRight, UpLeft, DownLeft
            int nBuildings = Random.Range(0, 5);
            if (nBuildings > 0)
            {
                float SprtSizeY = FloorSpr.size.y * 0.25f;
                float MinX      = Floor.transform.position.x - CameraHorzBound;
                float MaxX      = Floor.transform.position.x + CameraHorzBound;

                float MinY = Floor.transform.position.y - SprtSizeY;
                float MaxY = Floor.transform.position.y + SprtSizeY;

                List <Vector3> Positions = new List <Vector3>();
                Positions.Add(new Vector3(MinX, MinY, 0.0f));
                Positions.Add(new Vector3(MinX, MaxY, 0.0f));
                Positions.Add(new Vector3(MaxX, MinY, 0.0f));
                Positions.Add(new Vector3(MaxX, MaxY, 0.0f));
                for (int i = 0; i < nBuildings; i++)
                {
                    //Choose a random position
                    int     Index  = Random.Range(0, Positions.Count);
                    Vector3 NewPos = Positions[Index];
                    Positions.RemoveAt(Index);
                    GameObject        NewObj      = Instantiate(BuildingPrefab, NewPos, Quaternion.identity, this.transform);
                    BuildingBehaviour BuildingCmp = NewObj.GetComponent <BuildingBehaviour>();
                    if (BuildingCmp != null)
                    {
                        BuildingCmp.Init(Speed);
                    }
                }
            }
        }
    }
    /**
     * <summary>
     * Cancel the construction, this will pause
     * the construction
     * </summary>
     *
     * <returns>
     * void
     * </returns>
     */
    public void Cancel()
    {
        if (!this.structure && !this.resource)
        {
            return;
        }

        // Cancel building
        if (this.IsConstructing())
        {
            // Stop the coroutine immediately.
            this.StopConstruction();

            BuildingBehaviour buildingBehaviour = this.structure.GetComponent <BuildingBehaviour>();
            buildingBehaviour.SetActivate(false);

            this.SetConstructing(false);
            this.SetStructure(null);

            Debug.Log("BUILDER : BUILDING : CANCEL");
        }

        // Cancel resource gathering
        else if (this.IsGatheringResource())
        {
            // Stop the coroutine immediately.
            this.StopGatherResource();

            ResourceBehaviour resourceBehaviour = this.resource.GetComponent <ResourceBehaviour>();
            resourceBehaviour.SetGathering(false);

            this.SetResourceGathering(false);
            this.SetResource(null);

            Debug.Log("BUILDER : RESOURCE GATHERING : CANCEL");
        }
    }
예제 #14
0
 public void EntityTrainFinished(Entity entityInTraining, BuildingBehaviour buildingBehaviour)
 {
     OnEntityTrainFinishedEvent(entityInTraining, buildingBehaviour);
 }
예제 #15
0
 private void EntityTrainFinishedEvent(Entity entityInTraining, BuildingBehaviour buildingBehaviour)
 {
     OnEntityTrainFinishedEvent?.Invoke(entityInTraining, buildingBehaviour);
 }
예제 #16
0
 void OnEnable()
 {
     behavior = gameObject.GetComponentInParent <BuildingBehaviour>();
 }