/// <summary> /// Open resource radial dial for an ore, store resource /// </summary> /// <param name="ore">Ore selected</param> public void OpenOreMenu(Ore ore) { _energyCrystal = null; _ore = ore; _resourceText.text = "Ore"; DoUpdateChecks(); gameObject.SetActive(true); }
/// <summary> /// Open resource radial dial for an energy crystal, store resource /// </summary> /// <param name="crystal">Energy crystal selected</param> public void OpenEnergyCrystalMenu(EnergyCrystal energyCrystal) { _energyCrystal = energyCrystal; _ore = null; _resourceText.text = "Energy Crystal"; DoUpdateChecks(); gameObject.SetActive(true); }
public void ShowResourceOptionsEnergyCrystal(EnergyCrystal energyCrystal) { CloseMenu(); if (energyCrystal == null) { return; } MenuOpen = true; _resourceMenu.GetComponent <ResourceOptionsMenu>().OpenEnergyCrystalMenu(energyCrystal); }
/// <summary> /// "When an energy crystal is added, set to max energy" /// </summary> /// <param name="crystal">"The crystal put into the building"</param> public virtual void AddEnergyCrystal(EnergyCrystal crystal) { _Energy = 100; _EnergyRequest = false; if (_barsUpdater != null) { _barsUpdater.UpdateEnergyFill(_Energy); } _worldController._levelStatsController.EnergyCrystalUsed(); Destroy(crystal.gameObject); }
public bool EnergyCrystalSearch(bool requiredSight, float detectionRange) { if (_crystalList.Count > 0) { _closestEnergyCrystal = _crystalList[0]; foreach (EnergyCrystal possibleLunch in _crystalList) { float difference = Vector3.Distance(possibleLunch.transform.position, transform.position) - Vector3.Distance(transform.position, _closestEnergyCrystal.transform.position); if (difference > 1 || difference < -1) { if (Vector3.Distance(possibleLunch.transform.position, transform.position) < Vector3.Distance(transform.position, _closestEnergyCrystal.transform.position)) { _closestEnergyCrystal = possibleLunch; } } } if (requiredSight) { //ray cast to closest crystal _ray = new Ray(transform.position, _closestEnergyCrystal.transform.position - transform.position); Debug.DrawRay(transform.position, _closestEnergyCrystal.transform.position - transform.position); if (Physics.Raycast(_ray, out _hit)) { if (_hit.transform.tag == "EnergyCrystal") { return(true); } } } else { if (Vector3.Distance(_closestEnergyCrystal.transform.position, transform.position) < detectionRange) { return(true); } } } return(false); }
void SelectUI() { if (!HasSelection()) { return; } SelectionData Single = CurrentSelectionObjects[0]; if (Single.IsWorker()) { if (_hit.transform.tag == TagLibrary.HQ_TAG) { //RadialMenuScript.instance.ShowToolOptions(Single._Worker, _hit.transform.position); if (_hit.transform.GetComponent <Tile>() != null || _hit.transform.GetComponent <HQTileTagScript>() != null) { ExecuteOrderOnAll(UnitTask.TaskType.Walk); } } else if (_hit.transform.tag == TagLibrary.VEHICLE_TAG) { if (!_hit.transform.GetComponent <Vehicle>().GetOccupied()) { RadialMenuScript.instance.ShowEmptyVehicleOptions(Single._Worker, _hit.transform.GetComponent <Vehicle>()); } } else if (_hit.transform.tag == TagLibrary.WORKER_TAG) { Worker worker = _hit.transform.gameObject.GetComponentInParent <Worker>(); List <Worker> workers = new List <Worker>(); for (int i = 0; i < CurrentSelectionObjects.Count; i++) { workers.Add(CurrentSelectionObjects[i]._Worker); } RadialMenuScript.instance.ShowWorkerOptions(workers, worker); } else { ExecuteOrderOnAll(UnitTask.TaskType.Walk); } } else { switch (_hit.transform.tag) { case TagLibrary.ROCK_TAG: RockScript rock = _hit.transform.gameObject.GetComponentInParent <RockScript>(); RadialMenuScript.instance.ShowRockOptions(rock); break; case TagLibrary.RUBBLE_TAG: RubbleScript rubble = _hit.transform.gameObject.GetComponentInParent <RubbleScript>(); RadialMenuScript.instance.ShowRubbleOptions(rubble); break; case TagLibrary.MONSTER_TAG: Monster monster = _hit.transform.GetComponentInParent <Monster>(); RadialMenuScript.instance.ShowEnemyOptions(monster); break; case TagLibrary.HQ_TAG: HQ hq = _hit.transform.GetComponentInParent <HQ>(); RadialMenuScript.instance.ShowHQOptions(hq); break; case TagLibrary.OUTPOST_TAG: Outpost outpost = _hit.transform.GetComponentInParent <Outpost>(); RadialMenuScript.instance.ShowOutpostOptions(outpost); break; case TagLibrary.GARAGE_TAG: Garage garage = _hit.transform.GetComponentInParent <Garage>(); RadialMenuScript.instance.ShowGarageOptions(garage); break; case TagLibrary.GEN_TAG: case TagLibrary.SKIP_TAG: case TagLibrary.BLOCK_TAG: case TagLibrary.TURRET_TAG: case TagLibrary.POWERGEN_TAG: Building building = _hit.transform.GetComponentInParent <Building>(); RadialMenuScript.instance.ShowBuildingOptions(building); break; case TagLibrary.ORE_TAG: Ore ore = _hit.transform.GetComponentInParent <Ore>(); RadialMenuScript.instance.ShowResourceOptionsOre(ore); break; case TagLibrary.ENERGYCRYSTAL_TAG: EnergyCrystal energyCrystal = _hit.transform.GetComponentInParent <EnergyCrystal>(); RadialMenuScript.instance.ShowResourceOptionsEnergyCrystal(energyCrystal); break; case TagLibrary.VEHICLE_TAG: Vehicle vehicle = _hit.transform.GetComponent <Vehicle>(); if (vehicle.GetOccupied()) { RadialMenuScript.instance.ShowVehicleOptions(_hit.transform.GetComponent <Vehicle>()); } else { RadialMenuScript.instance.ShowEmptyVehicleOptions(null, _hit.transform.GetComponent <Vehicle>()); } break; case TagLibrary.BURN_TAG: MushroomCluster mushroomCluster = _hit.transform.GetComponentInParent <MushroomCluster>(); RadialMenuScript.instance.ShowMushroomOptions(mushroomCluster); break; } } if (!Single.IsWorker()) { ClearSelectedObjects(false); } SetMode(CurrentSelectionMode.RadialMenu); }
public void CheckWhatsClosest(bool eatCrystals, bool requiredSight, float DetectionRange) { bool foundCrystal = false; bool foundBuilding = false; if (eatCrystals) { if (_crystalList.Count > 0) { _closestEnergyCrystal = _crystalList[0]; foreach (EnergyCrystal possibleLunch in _crystalList) { if (Vector3.Distance(possibleLunch.transform.position, transform.position) < Vector3.Distance(transform.position, _closestEnergyCrystal.transform.position)) { _closestEnergyCrystal = possibleLunch; } } if (requiredSight) { //ray cast to closest crystal _ray = new Ray(transform.position, _closestEnergyCrystal.transform.position - transform.position); Debug.DrawRay(transform.position, _closestEnergyCrystal.transform.position - transform.position); if (Physics.Raycast(_ray, out _hit)) { if (_hit.transform.tag == "EnergyCrystal") { _currentMonsterState = MonsterState.eating; foundCrystal = true; } } } else { if (Vector3.Distance(_closestEnergyCrystal.transform.position, transform.position) < DetectionRange) { _currentMonsterState = MonsterState.eating; foundCrystal = true; } } } } if (_buildingList.Count > 0 && !foundCrystal) { _closestBuilding = _buildingList[0]; foreach (Building possibleLunch in _buildingList) { if (Vector3.Distance(possibleLunch.transform.position, transform.position) < Vector3.Distance(transform.position, _closestBuilding.transform.position)) { _closestBuilding = possibleLunch; } } if (requiredSight) { //ray cast to closest building _ray = new Ray(transform.position, _closestBuilding.transform.position - transform.position); Debug.DrawRay(transform.position, _closestBuilding.transform.position - transform.position); if (Physics.Raycast(_ray, out _hit)) { if (_hit.transform.tag == "HQ" || _hit.transform.tag == "GEN" || _hit.transform.tag == "SKIP") { _currentMonsterState = MonsterState.attackingBuilding; _currentTarget = _closestBuilding.transform.gameObject; foundBuilding = true; } } } else { if (Vector3.Distance(_closestBuilding.transform.position, transform.position) < DetectionRange) { _currentMonsterState = MonsterState.attackingBuilding; _currentTarget = _closestBuilding.transform.gameObject; foundBuilding = true; } } } if (_UnitList.Count > 0 && !foundCrystal && !foundBuilding) { _closestUnit = _UnitList[0]; foreach (Unit possibleLunch in _UnitList) { if (Vector3.Distance(possibleLunch.transform.position, transform.position) < Vector3.Distance(transform.position, _closestUnit.transform.position)) { _closestUnit = possibleLunch; } } if (requiredSight) { //ray cast to closest worker _ray = new Ray(transform.position, _closestUnit.transform.position - transform.position); Debug.DrawRay(transform.position, _closestUnit.transform.position - transform.position); if (Physics.Raycast(_ray, out _hit)) { if (_hit.transform.tag == "Worker" || _hit.transform.tag == "Unit") { _currentMonsterState = MonsterState.attackingUnit; _currentTarget = _closestUnit.transform.gameObject; } } } else { if (Vector3.Distance(_closestUnit.transform.position, transform.position) < DetectionRange) { _currentMonsterState = MonsterState.attackingUnit; _currentTarget = _closestUnit.transform.gameObject; } } } }
// Update is called once per frame void Update() { _ray = Camera.main.ScreenPointToRay(Input.mousePosition); if (_currentSelectedObject != null) { _selectionRing.transform.position = _currentSelectedObject.transform.position; } else { _selectionRing.transform.position = new Vector3(0, -100, 0); } if (Physics.Raycast(_ray, out _hit)) { Debug.DrawRay(_ray.origin, _ray.direction * _hit.distance, Color.yellow); _mouseWorldLocation = _hit.point; if (ControlScript.instance.GetControl("Select").InputDown) { if (!EventSystem.current.IsPointerOverGameObject()) { RadialMenuScript.instance.CloseMenu(); } switch (_hit.transform.tag) { case TagLibrary.WORKER_TAG: if (_currentSelectedObject != null) { _currentSelectedObject._selected = false; _currentSelectedObject = null; } _currentSelectedObject = _hit.transform.gameObject.GetComponent <SelectableObject>(); _currentSelectedObject._selected = true; WorkerInfoPanelScript.instance.Open(_hit.transform.GetComponent <Worker>()); break; default: if (_currentSelectedObject != null) { _currentSelectedObject._selected = false; _currentSelectedObject = null; } WorkerInfoPanelScript.instance.Close(); break; } } else if (ControlScript.instance.GetControl("Order Modifier").AnyInput&& ControlScript.instance.GetControl("Order").InputDown) { if (_currentSelectedObject != null) { switch (_hit.transform.tag) { case "Floor": if (_currentSelectedObject.transform.tag == "Worker") { Worker tempWorker = _currentSelectedObject.transform.gameObject.GetComponent <Worker>(); UnitTask tempTask = new UnitTask { _location = _mouseWorldLocation, _taskType = UnitTask.TaskType.Walk, _taskDescription = "Walking to location", _requiredTool = Unit.UnitTool.none }; tempWorker.AddTask(tempTask); } break; case "RockTile": if (_currentSelectedObject.transform.tag == "Worker") { Worker tempWorker = _currentSelectedObject.gameObject.GetComponent <Worker>(); RockScript tempRock = _hit.transform.gameObject.GetComponentInParent <RockScript>(); if (tempWorker._currentTool == Unit.UnitTool.Hammer) { UnitTask tempTask = new UnitTask { _location = _hit.transform.position, _taskType = UnitTask.TaskType.Reinforce, _targetRock = tempRock, _requiredTool = Unit.UnitTool.Hammer, _taskDescription = "Reinforcing a wall" }; tempWorker.AddTask(tempTask); } else { if (tempRock.RockType == RockScript.Type.Dirt || (tempRock.RockType == RockScript.Type.LooseRock && (int)WorldController.GetWorldController._miningLevel >= 1) || (tempRock.RockType == RockScript.Type.HardRock && (int)WorldController.GetWorldController._miningLevel == 2)) { UnitTask tempTask = new UnitTask { _location = _hit.transform.position, _taskType = UnitTask.TaskType.Mine, _targetRock = tempRock, _requiredTool = Unit.UnitTool.MiningTool, _taskDescription = "Mining a wall" }; tempWorker.SetTask(tempTask); } } } break; case "Rubble": if (_currentSelectedObject.transform.tag == "Worker") { Worker tempWorker = _currentSelectedObject.gameObject.GetComponent <Worker>(); RubbleScript tempRubble = _hit.transform.gameObject.GetComponentInParent <RubbleScript>(); UnitTask tempTask = new UnitTask { _location = tempRubble.transform.position, _taskType = UnitTask.TaskType.ClearRubble, _targetRubble = tempRubble, _requiredTool = Unit.UnitTool.Shovel, _taskDescription = "Clearing rubble" }; tempWorker.SetTask(tempTask); } break; case "Ore": if (_currentSelectedObject.transform.tag == "Worker") { Worker tempWorker = _currentSelectedObject.transform.gameObject.GetComponent <Worker>(); UnitTask tempTask = new UnitTask { _location = _hit.transform.position, _taskType = UnitTask.TaskType.Pickup, _itemToPickUp = _hit.transform.gameObject, _itemType = UnitTask.ItemType.Ore, _taskDescription = "Transporting Ore", _requiredTool = Unit.UnitTool.none }; tempWorker.AddTask(tempTask); } break; case "EnergyCrystal": if (_currentSelectedObject.transform.tag == "Worker") { Worker tempWorker = _currentSelectedObject.transform.gameObject.GetComponent <Worker>(); UnitTask tempTask = new UnitTask { _location = _hit.transform.position, _taskType = UnitTask.TaskType.Pickup, _itemToPickUp = _hit.transform.gameObject, _itemType = UnitTask.ItemType.EnergyCrystal, _taskDescription = "Transporting an Energy crystal", _requiredTool = Unit.UnitTool.none }; tempWorker.AddTask(tempTask); } break; case "HQ": if (_currentSelectedObject.transform.tag == "Worker") { //RadialMenuScript.instance.ShowToolOptions(_currentSelectedObject.transform.gameObject.GetComponent<Worker>(), _hit.transform.position); } break; case "SKIP": if (_currentSelectedObject.transform.tag == "Worker") { Worker tempWorker = _currentSelectedObject.transform.gameObject.GetComponent <Worker>(); //check if building needs building UnitTask tempTask = new UnitTask { _location = _hit.transform.position, _taskType = UnitTask.TaskType.Build, _itemToPickUp = _hit.transform.gameObject, _requiredTool = Unit.UnitTool.Hammer, _taskDescription = "Building A Skip" }; tempWorker.AddTask(tempTask); } break; case "GEN": if (_currentSelectedObject.transform.tag == "Worker") { Worker tempWorker = _currentSelectedObject.transform.gameObject.GetComponent <Worker>(); //check if building needs building UnitTask tempTask = new UnitTask { _location = _hit.transform.position, _taskType = UnitTask.TaskType.Build, _itemToPickUp = _hit.transform.gameObject, _requiredTool = Unit.UnitTool.Hammer, _taskDescription = "Building An Oxegen Generator" }; tempWorker.AddTask(tempTask); } break; case "Monster": if (_currentSelectedObject.transform.tag == "Worker") { Worker tempWorker = _currentSelectedObject.transform.gameObject.GetComponent <Worker>(); if ((int)WorldController.GetWorldController._miningLevel >= 1) { UnitTask tempTask = new UnitTask { _location = _hit.transform.position, _taskType = UnitTask.TaskType.Attack, _requiredTool = Unit.UnitTool.Weapon, _taskDescription = "Attacking monster" }; tempWorker.SetTask(tempTask); } } break; } } } else if (ControlScript.instance.GetControl("Order").InputDown) { if (_currentSelectedObject == null || (_currentSelectedObject != null && _currentSelectedObject == _hit.transform.GetComponentInParent <SelectableObject>())) { switch (_hit.transform.tag) { case "Worker": Worker worker = _hit.transform.GetComponent <Worker>(); //RadialMenuScript.instance.ShowWorkerOptions(worker); break; case "RockTile": RockScript rock = _hit.transform.gameObject.GetComponentInParent <RockScript>(); RadialMenuScript.instance.ShowRockOptions(rock); break; case "Rubble": RubbleScript rubble = _hit.transform.gameObject.GetComponentInParent <RubbleScript>(); RadialMenuScript.instance.ShowRubbleOptions(rubble); break; case "Monster": Monster monster = _hit.transform.GetComponentInParent <Monster>(); RadialMenuScript.instance.ShowEnemyOptions(monster); break; case "HQ": HQ hq = _hit.transform.GetComponentInParent <HQ>(); RadialMenuScript.instance.ShowHQOptions(hq); break; case "GEN": case "BLOCK": Building building = _hit.transform.GetComponentInParent <Building>(); RadialMenuScript.instance.ShowBuildingOptions(building); break; case "Ore": Ore ore = _hit.transform.GetComponentInParent <Ore>(); RadialMenuScript.instance.ShowResourceOptionsOre(ore); break; case "EnergyCrystal": EnergyCrystal energyCrystal = _hit.transform.GetComponentInParent <EnergyCrystal>(); RadialMenuScript.instance.ShowResourceOptionsEnergyCrystal(energyCrystal); break; } } else if (_currentSelectedObject != null) { switch (_hit.transform.tag) { case "Floor": if (_currentSelectedObject.transform.tag == "Worker") { Worker tempWorker = _currentSelectedObject.transform.gameObject.GetComponent <Worker>(); UnitTask tempTask = new UnitTask { _location = _mouseWorldLocation, _taskType = UnitTask.TaskType.Walk, _taskDescription = "Walking to location", _requiredTool = Unit.UnitTool.none }; tempWorker.SetTask(tempTask); } break; case "RockTile": if (_currentSelectedObject.transform.tag == "Worker") { Worker tempWorker = _currentSelectedObject.gameObject.GetComponent <Worker>(); RockScript tempRock = _hit.transform.gameObject.GetComponentInParent <RockScript>(); if (tempWorker._currentTool == Unit.UnitTool.Hammer) { UnitTask tempTask = new UnitTask { _location = _hit.transform.position, _taskType = UnitTask.TaskType.Reinforce, _targetRock = tempRock, _requiredTool = Unit.UnitTool.Hammer, _taskDescription = "Reinforcing a wall" }; tempWorker.SetTask(tempTask); } else { if (tempRock.RockType == RockScript.Type.Dirt || (tempRock.RockType == RockScript.Type.LooseRock && (int)WorldController.GetWorldController._miningLevel >= 1) || (tempRock.RockType == RockScript.Type.HardRock && (int)WorldController.GetWorldController._miningLevel == 2)) { UnitTask tempTask = new UnitTask { _location = _hit.transform.position, _taskType = UnitTask.TaskType.Mine, _targetRock = tempRock, _requiredTool = Unit.UnitTool.MiningTool, _taskDescription = "Mining a wall" }; tempWorker.SetTask(tempTask); } } } break; case "Rubble": if (_currentSelectedObject.transform.tag == "Worker") { Worker tempWorker = _currentSelectedObject.gameObject.GetComponent <Worker>(); RubbleScript tempRubble = _hit.transform.gameObject.GetComponentInParent <RubbleScript>(); if (tempWorker._currentTool == Unit.UnitTool.Shovel) { UnitTask tempTask = new UnitTask { _location = tempRubble.transform.position, _taskType = UnitTask.TaskType.ClearRubble, _targetRubble = tempRubble, _requiredTool = Unit.UnitTool.Shovel, _taskDescription = "Clearing rubble" }; tempWorker.SetTask(tempTask); } else { UnitTask tempTask = new UnitTask { _location = _mouseWorldLocation, _taskType = UnitTask.TaskType.Walk, _taskDescription = "Walking to location", _requiredTool = Unit.UnitTool.none }; tempWorker.SetTask(tempTask); } } break; case "Ore": if (_currentSelectedObject.transform.tag == "Worker") { Worker tempWorker = _currentSelectedObject.transform.gameObject.GetComponent <Worker>(); UnitTask tempTask = new UnitTask { _location = _hit.transform.position, _taskType = UnitTask.TaskType.Pickup, _itemToPickUp = _hit.transform.gameObject, _itemType = UnitTask.ItemType.Ore, _taskDescription = "Transporting Ore", _requiredTool = Unit.UnitTool.none }; tempWorker.SetTask(tempTask); } break; case "EnergyCrystal": if (_currentSelectedObject.transform.tag == "Worker") { Worker tempWorker = _currentSelectedObject.transform.gameObject.GetComponent <Worker>(); UnitTask tempTask = new UnitTask { _location = _hit.transform.position, _taskType = UnitTask.TaskType.Pickup, _itemToPickUp = _hit.transform.gameObject, _itemType = UnitTask.ItemType.EnergyCrystal, _taskDescription = "Transporting an Energy crystal", _requiredTool = Unit.UnitTool.none }; tempWorker.SetTask(tempTask); } break; case "HQ": if (_currentSelectedObject.transform.tag == "Worker") { //RadialMenuScript.instance.ShowToolOptions(_currentSelectedObject.transform.gameObject.GetComponent<Worker>(), _hit.transform.position); } break; case "SKIP": if (_currentSelectedObject.transform.tag == "Worker") { Worker tempWorker = _currentSelectedObject.transform.gameObject.GetComponent <Worker>(); //check if building needs building UnitTask tempTask = new UnitTask { _location = _hit.transform.position, _taskType = UnitTask.TaskType.Build, _itemToPickUp = _hit.transform.gameObject, _requiredTool = Unit.UnitTool.Hammer, _taskDescription = "Building A Skip" }; tempWorker.AddTask(tempTask); } break; case "GEN": if (_currentSelectedObject.transform.tag == "Worker") { Worker tempWorker = _currentSelectedObject.transform.gameObject.GetComponent <Worker>(); //check if building needs building UnitTask tempTask = new UnitTask { _location = _hit.transform.position, _taskType = UnitTask.TaskType.Build, _itemToPickUp = _hit.transform.gameObject, _requiredTool = Unit.UnitTool.Hammer, _taskDescription = "Building An Oxegen Generator" }; tempWorker.AddTask(tempTask); } break; case "Monster": if (_currentSelectedObject.transform.tag == "Worker") { Worker tempWorker = _currentSelectedObject.transform.gameObject.GetComponent <Worker>(); if ((int)WorldController.GetWorldController._miningLevel >= 1) { UnitTask tempTask = new UnitTask { _location = _hit.transform.position, _taskType = UnitTask.TaskType.Attack, _requiredTool = Unit.UnitTool.Weapon, _taskDescription = "Attacking monster" }; tempWorker.SetTask(tempTask); } } break; } } } } }