// Use this for initialization override protected void Start() { base.Start(); OnMouseClicked += () => { // To disable raycast when clicking on button if (EventSystem.current.IsPointerOverGameObject()) { return; } Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); int uiLayer = 1 << LayerMask.NameToLayer("UI"); int factoryLayer = 1 << LayerMask.NameToLayer("Factory"); int unitLayer = 1 << LayerMask.NameToLayer("Unit"); int floorLayer = 1 << LayerMask.NameToLayer("Floor"); RaycastHit raycastInfo; // factory selection if (Physics.Raycast(ray, out raycastInfo, Mathf.Infinity, uiLayer)) { return; } else if (Physics.Raycast(ray, out raycastInfo, Mathf.Infinity, factoryLayer)) { UnitFactory factory = raycastInfo.transform.GetComponent <UnitFactory>(); if (factory != null && factory.GetTeam == team) { if (currentFactory == factory) { RequestFactoryBuild(); } else { UnselectCurrentFactory(); SelectFactory(factory); } } } // unit selection / unselection else if (Physics.Raycast(ray, out raycastInfo, Mathf.Infinity, unitLayer)) { bool isShiftBtPressed = Input.GetKey(KeyCode.LeftShift); bool isCtrlBtPressed = Input.GetKey(KeyCode.LeftControl); UnselectCurrentFactory(); Unit selectedUnit = raycastInfo.transform.GetComponent <Unit>(); if (selectedUnit != null && selectedUnit.GetTeam == team) { if (isShiftBtPressed) { UnseletecUnit(selectedUnit); } else if (isCtrlBtPressed) { SelectUnit(selectedUnit); } else { UnselectAllUnits(); SelectUnit(selectedUnit); } } } // unit move target else if (Physics.Raycast(ray, out raycastInfo, Mathf.Infinity, floorLayer)) { UnselectCurrentFactory(); if (selectedUnitList.Count == 0) { return; } Vector3 newPos = raycastInfo.point; Vector3 targetPos = newPos; targetPos.y += 0.1f; GetTargetCursor().transform.position = targetPos; if (TileNavGraph.Instance.IsPosValid(newPos)) { if (selectedUnitList.Count > 1) { formationManager.CreateFormation(selectedUnitList); List <Vector3> positions = formationManager.GetUnitsPosition(selectedUnitList.Count, targetPos); for (int idx = 0; idx < selectedUnitList.Count; ++idx) { selectedUnitList[idx].SetTargetPos(positions[idx]); } } else { foreach (Unit unit in selectedUnitList) { if (unit.Formation != null) { formationManager.RemoveFromFormation(unit); } unit.SetTargetPos(newPos); } } } } }; OnDeletePressed += () => { foreach (Unit unit in unitList) { unit.AddDamages(100); } unitList.Clear(); }; OnSelectAllPressed += () => { SelectAllUnits(); }; OnLightCatPressed += () => { SelectAllUnitsByCategory(Unit.ECategory.Light); }; OnMediumCatPressed += () => { SelectAllUnitsByCategory(Unit.ECategory.Medium); }; OnHeavyCatPressed += () => { SelectAllUnitsByCategory(Unit.ECategory.Heavy); }; formationManager.OnFormationChange += () => { if (selectedUnitList.Count > 1) { List <Vector3> positions = formationManager.GetUnitsPosition(selectedUnitList.Count, selectedUnitList[0].transform.position); for (int idx = 0; idx < selectedUnitList.Count; ++idx) { selectedUnitList[idx].SetTargetPos(positions[idx]); } } }; }