protected virtual void MultiSelect() { player.userInput.Deselect(); SelectBox.Disable(); Vector3 groundClickedPosition = WorldTouchPoint(Camera.main.ScreenToWorldPoint(clickedPosition)); Vector3 groundMousePosition = WorldTouchPoint(Camera.main.ScreenToWorldPoint(Input.mousePosition)); float distance = Mathf.Abs(groundMousePosition.x - groundClickedPosition.x); float xMin = Mathf.Min(groundMousePosition.x, groundClickedPosition.x); float zMin = Mathf.Min(groundMousePosition.z, groundClickedPosition.z); float zMax = Mathf.Max(groundMousePosition.z, groundClickedPosition.z); List <MobileWorldObject> mobileWoList = new List <MobileWorldObject> (); RaycastHit[] hits = Physics.CapsuleCastAll(new Vector3(xMin, 0f, zMin), new Vector3(xMin, 0f, zMax), 0.1f, Vector3.right, distance, LayerMask.GetMask(new string[] { player.species.ToString() })); foreach (RaycastHit hit in hits) { MobileWorldObject mobileWO = hit.collider.gameObject.GetComponent <MobileWorldObject> (); if (mobileWO && mobileWO as SentryMob == null) { mobileWoList.Add(mobileWO); } } foreach (MobileWorldObject mobileWO in mobileWoList) { mobileWO.SelectTap(player); player.userInput.SelectedObjects.Add(mobileWO as WorldObject); } if (mobileWoList.Count == 1) { player.userInput.OpenPanel(mobileWoList[0].buttons); } }
protected virtual void ResetMob(MobileWorldObject newMob) { newMob.isAlive = true; newMob.healthArray[0] = newMob.healthArray[1]; if (newMob.healthBar) { newMob.healthBar.ResetBar(); } newMob.transform.position = spawnPoint; }
private void SetPlaceability() { isPlaceable = false; Vector3 origin = new Vector3(transform.position.x, 100f, transform.position.z); RaycastHit hit; if (Physics.Raycast(origin, Vector3.down, out hit, 200f, LayerMask.GetMask(new string[] { "BuildingArea" }))) { BuildingSlot bS = hit.collider.GetComponent <BuildingSlot> (); if (bS.species == player.species && !bS.isOccupied) { transform.position = bS.transform.position; currBuildingSlot = bS; Collider[] colls = Physics.OverlapSphere(transform.position, buildingRadius, GameManager.woLayerMask); if (colls.Length == 0) { isPlaceable = true; } else if (searchTimer > 1f) { foreach (Collider coll in colls) { MobileWorldObject wO = coll.GetComponent <MobileWorldObject>(); if (wO && wO.GetSpecies() == player.species && !wO.isMoving && !wO.attacking) { Vector3 buildingPos = new Vector3(transform.position.x, 0f, transform.position.z); Vector3 woPos = new Vector3(wO.transform.position.x, 0f, wO.transform.position.z); if (woPos == buildingPos) { woPos += new Vector3(Random.Range(-1f, 1f), 0f, Random.Range(-1f, 1f)); } Vector3 moveVector = woPos - buildingPos; float distance = buildingRadius + (wO.mainCollider as SphereCollider).radius - moveVector.magnitude + 1f; Vector3 destination = wO.transform.position + moveVector.normalized * distance; wO.SetNavAgentDestination(destination, distance + moveVector.magnitude); } } searchTimer = 0f; } } } else { currBuildingSlot = null; } if (isPlaceable) { thisRenderer.material.color = activeSpriteColor; } else { thisRenderer.material.color = inactiveSpriteColor; } }
protected override void ResetMob(MobileWorldObject newMob) { base.ResetMob(newMob); Unit newUnit = newMob as Unit; newUnit.garrisoned = true; newUnit.currPopCount = mobPopCount; if (mainStratPoint) { mainStratPoint.SpeciesUnitTrainerUnitMade(mobPopCount); } }
public void RemoveUnitFromCurrentSquad(MobileWorldObject unit) { if (unit.squadInt > 0) { squadDick[unit.squadInt].Remove(unit); if (squadDick[unit.squadInt].Count == 0) { squadDick.Remove(unit.squadInt); squadStopDick.Remove(unit.squadInt); squadFormationSetDick.Remove(unit.squadInt); } unit.squadInt = 0; } }
protected override void ResetMob(MobileWorldObject newMob) { base.ResetMob(newMob); newMob.gameObject.SetActive(true); }
protected override void Awake() { base.Awake(); thisMobileWO = thisWorldObject as MobileWorldObject; }