public override bool GetValidStructurePosition(StructureStats stats, ref float xPos, ref float yPos) { bool isValid = base.GetValidStructurePosition(stats, ref xPos, ref yPos); if (!isValid) { return(false); } //Check for overlap with wall tiles int numX = (int)Math.Ceiling(stats.StructureSizeX / TileSize); int numY = (int)Math.Ceiling(stats.StructureSizeY / TileSize); float startX = xPos - (numX / 2) * TileSize; float startY = yPos - (numY / 2) * TileSize; for (int i = 0; i < numX; i++) { float xCoord = startX + i * TileSize; for (int j = 0; j < numY; j++) { float yCoord = startY + j * TileSize; #if DEBUG bool val = !Layout.IsWallTile(xCoord, yCoord); //if (!val) //ConsoleManager.WriteToFreeLine("Structure overlapping with wall.", ConsoleMessageType.Debug); isValid = val; if (!isValid) { break; } val = isValid = Layout.IsInBounds(xCoord, yCoord); //if (!val) //ConsoleManager.WriteToFreeLine("Structure out of bounds.", ConsoleMessageType.Debug); if (!isValid) { break; } #else isValid = Layout.IsInBounds(xCoord, yCoord) && !Layout.IsWallTile(xCoord, yCoord); if (!isValid) { break; } #endif } if (!isValid) { break; } } return(isValid); }
public override bool GetValidStructurePosition(StructureStats stats, ref float xPos, ref float yPos) { bool isValid = true; //Check for overlap with structures for (int i = 0; i < _structures.Count; i++) { var s = _structures.ElementAt(i); isValid = !s.Value.CheckOverlap(stats.StructureSizeX, stats.StructureSizeY, xPos, yPos); #if DEBUG if (!isValid) { ConsoleManager.WriteLine("Overlapping with an existing structure; setting isValid to false."); } #endif if (!isValid) { break; } } foreach (Planet p in GetPlanets()) { isValid = !p.CheckOverlap(stats.StructureSizeX, stats.StructureSizeY, xPos, yPos); if (!isValid) { break; } } return(isValid); }
public override void equip() { Viewmodel.play("equip"); this.help = (GameObject)UnityEngine.Object.Instantiate(Resources.Load(string.Concat("Prefabs/Structures/", Equipment.id)), Vector3.zero, base.transform.rotation); this.help.name = "help"; UnityEngine.Object.Destroy(this.help.transform.FindChild("model").collider); this.help.transform.FindChild("model").renderer.castShadows = false; this.help.transform.FindChild("model").renderer.receiveShadows = false; this.help.tag = "Untagged"; this.help.layer = 2; this.help.transform.FindChild("model").tag = "Untagged"; this.help.transform.FindChild("model").gameObject.layer = 2; if (this.help.transform.FindChild("nav")) { UnityEngine.Object.Destroy(this.help.transform.FindChild("nav").gameObject); } if (StructureStats.isLadder(Equipment.id)) { UnityEngine.Object.Destroy(this.help.transform.FindChild("model").FindChild("ladder").gameObject); } this.rotation = StructureStats.getRotation(Equipment.id); Transform transforms = this.help.transform; transforms.rotation = transforms.rotation * Quaternion.Euler(0f, (float)this.rotation, 0f); }
/// <summary> /// Places structure in the nearest valid position, checking for overlap with other objects, and snaps the stucture to a grid /// </summary> /// <param name="structureType"></param> /// <param name="xPos"></param> /// <param name="yPos"></param> /// <returns>True if succesful, false if unable to place the structure</returns> public virtual bool GetValidStructurePosition(StructureStats stats, ref float xPos, ref float yPos) { bool isValid = true; //Snap to grid first xPos = (float)Math.Round(xPos + .5f) - .5f;//Round to the nearest .5 yPos = (float)Math.Round(yPos + .5f) - .5f; //Check for overlap with structures foreach (var s in _structures) { isValid = !s.Value.CheckOverlap(stats.StructureSizeX, stats.StructureSizeY, xPos, yPos); #if DEBUG if (!isValid) { ConsoleManager.WriteLine("Overlapping with an existing structure; setting isValid to false."); } #endif if (!isValid) { break; } } return(isValid); }
public void createStructure(int id, Vector3 position, int rotation) { GameObject str = (GameObject)UnityEngine.Object.Instantiate(Resources.Load(string.Concat("Prefabs/Structures/", id))); str.name = id.ToString(); str.transform.parent = SpawnStructures.model.transform; str.transform.position = position; str.transform.rotation = Quaternion.Euler(0f, (float)rotation, 0f); SpawnStructures.models.Add(str); if (StructureStats.isFoundation(id)) { Ground.clear(position, 5); } }
public override void tick() { if (this.startedUse == Single.MaxValue) { Physics.Raycast(Camera.main.transform.position, Camera.main.transform.forward, out Structure.hit, 10f, RayMasks.PLACEABLE); if (Structure.hit.collider == null) { this.bad(); Interact.hint = "Cannot Reach"; Interact.icon = "Textures/Icons/error"; this.help.transform.position = Vector3.zero; } else { this.help.transform.position = Structure.hit.point; Transform transforms = this.help.transform; Quaternion quaternion = this.help.transform.rotation; Vector3 vector3 = base.transform.rotation.eulerAngles; transforms.rotation = Quaternion.Lerp(quaternion, Quaternion.Euler(0f, vector3.y + (float)this.rotation, 0f), 4f * Time.deltaTime); if (Structure.hit.point.y <= Ocean.level) { this.bad(); Interact.hint = "Not Waterproof"; Interact.icon = "Textures/Icons/error"; } else if (StructureStats.isFloor(Equipment.id)) { if (!(Structure.hit.collider.tag == "Structure") || !StructureStats.isFoundation(int.Parse(Structure.hit.collider.transform.parent.name)) && !StructureStats.isFloor(int.Parse(Structure.hit.collider.transform.parent.name))) { this.bad(); Interact.hint = "No Base"; Interact.icon = "Textures/Icons/error"; } else if (((Structure.hit.collider.transform.position + (Structure.hit.collider.transform.up * 3f)) - Structure.hit.point).magnitude < 1f && (int)Physics.OverlapSphere((Structure.hit.collider.transform.position + (Structure.hit.collider.transform.up * 6f)) + new Vector3(0f, -0.5f, 0f), 0.1f, RayMasks.ERRORSTRUCT).Length == 0) { this.help.transform.position = Structure.hit.collider.transform.position + (Structure.hit.collider.transform.up * 6f); this.help.transform.rotation = Structure.hit.collider.transform.parent.rotation * Quaternion.Euler(0f, (float)(this.rotation * 2), 0f); this.good(); Interact.hint = string.Empty; Interact.icon = string.Empty; } else if (((Structure.hit.collider.transform.position + (Structure.hit.collider.transform.up * -3f)) - Structure.hit.point).magnitude < 1f && (int)Physics.OverlapSphere((Structure.hit.collider.transform.position + (Structure.hit.collider.transform.up * -6f)) + new Vector3(0f, -0.5f, 0f), 0.1f, RayMasks.ERRORSTRUCT).Length == 0) { this.help.transform.position = Structure.hit.collider.transform.position + (Structure.hit.collider.transform.up * -6f); this.help.transform.rotation = Structure.hit.collider.transform.parent.rotation * Quaternion.Euler(0f, (float)(this.rotation * 2), 0f); this.good(); Interact.hint = string.Empty; Interact.icon = string.Empty; } else if (((Structure.hit.collider.transform.position + (Structure.hit.collider.transform.right * 3f)) - Structure.hit.point).magnitude < 1f && (int)Physics.OverlapSphere((Structure.hit.collider.transform.position + (Structure.hit.collider.transform.right * 6f)) + new Vector3(0f, -0.5f, 0f), 0.1f, RayMasks.ERRORSTRUCT).Length == 0) { this.help.transform.position = Structure.hit.collider.transform.position + (Structure.hit.collider.transform.right * 6f); this.help.transform.rotation = Structure.hit.collider.transform.parent.rotation * Quaternion.Euler(0f, (float)(this.rotation * 2), 0f); this.good(); Interact.hint = string.Empty; Interact.icon = string.Empty; } else if (((Structure.hit.collider.transform.position + (Structure.hit.collider.transform.right * -3f)) - Structure.hit.point).magnitude < 1f && (int)Physics.OverlapSphere((Structure.hit.collider.transform.position + (Structure.hit.collider.transform.right * -6f)) + new Vector3(0f, -0.5f, 0f), 0.1f, RayMasks.ERRORSTRUCT).Length == 0) { this.help.transform.position = Structure.hit.collider.transform.position + (Structure.hit.collider.transform.right * -6f); this.help.transform.rotation = Structure.hit.collider.transform.parent.rotation * Quaternion.Euler(0f, (float)(this.rotation * 2), 0f); this.good(); Interact.hint = string.Empty; Interact.icon = string.Empty; } else if ((int)Physics.OverlapSphere(Structure.hit.collider.transform.position + new Vector3(0f, 3f, 0f), 0.1f, RayMasks.ERRORSTRUCT).Length != 0 || (int)Physics.OverlapSphere(((Structure.hit.collider.transform.position + (Structure.hit.collider.transform.up * 3f)) + (Structure.hit.collider.transform.right * 3f)) + new Vector3(0f, 1.5f, 0f), 0.1f, RayMasks.ERRORSTRUCT).Length <= 0 || (int)Physics.OverlapSphere(((Structure.hit.collider.transform.position + (Structure.hit.collider.transform.up * -3f)) + (Structure.hit.collider.transform.right * 3f)) + new Vector3(0f, 1.5f, 0f), 0.1f, RayMasks.ERRORSTRUCT).Length <= 0 || (int)Physics.OverlapSphere(((Structure.hit.collider.transform.position + (Structure.hit.collider.transform.up * 3f)) + (Structure.hit.collider.transform.right * -3f)) + new Vector3(0f, 1.5f, 0f), 0.1f, RayMasks.ERRORSTRUCT).Length <= 0 || (int)Physics.OverlapSphere(((Structure.hit.collider.transform.position + (Structure.hit.collider.transform.up * -3f)) + (Structure.hit.collider.transform.right * -3f)) + new Vector3(0f, 1.5f, 0f), 0.1f, RayMasks.ERRORSTRUCT).Length <= 0) { this.bad(); Interact.hint = "No Supports"; Interact.icon = "Textures/Icons/error"; } else { this.help.transform.position = Structure.hit.collider.transform.position + new Vector3(0f, 3f, 0f); this.help.transform.rotation = Structure.hit.collider.transform.parent.rotation * Quaternion.Euler(0f, (float)(this.rotation * 2), 0f); this.good(); Interact.hint = string.Empty; Interact.icon = string.Empty; } } else if (StructureStats.isPillar(Equipment.id)) { if (!(Structure.hit.collider.tag == "Structure") || !StructureStats.isFoundation(int.Parse(Structure.hit.collider.transform.parent.name)) && !StructureStats.isFloor(int.Parse(Structure.hit.collider.transform.parent.name))) { this.bad(); Interact.hint = "No Base"; Interact.icon = "Textures/Icons/error"; } else if (Structure.hit.normal.y > 0f) { if ((((Structure.hit.collider.transform.position + (Structure.hit.collider.transform.up * 3f)) + (Structure.hit.collider.transform.right * 3f)) - Structure.hit.point).magnitude < 1f && (int)Physics.OverlapSphere(((Structure.hit.collider.transform.position + (Structure.hit.collider.transform.up * 3f)) + (Structure.hit.collider.transform.right * 3f)) + new Vector3(0f, 1.5f, 0f), 0.1f, RayMasks.ERRORSTRUCT).Length == 0) { this.help.transform.position = (Structure.hit.collider.transform.position + (Structure.hit.collider.transform.up * 3f)) + (Structure.hit.collider.transform.right * 3f); this.help.transform.rotation = Structure.hit.collider.transform.parent.rotation; this.good(); Interact.hint = string.Empty; Interact.icon = string.Empty; } else if ((((Structure.hit.collider.transform.position + (Structure.hit.collider.transform.up * 3f)) + (Structure.hit.collider.transform.right * -3f)) - Structure.hit.point).magnitude < 1f && (int)Physics.OverlapSphere(((Structure.hit.collider.transform.position + (Structure.hit.collider.transform.up * 3f)) + (Structure.hit.collider.transform.right * -3f)) + new Vector3(0f, 1.5f, 0f), 0.1f, RayMasks.ERRORSTRUCT).Length == 0) { this.help.transform.position = (Structure.hit.collider.transform.position + (Structure.hit.collider.transform.up * 3f)) + (Structure.hit.collider.transform.right * -3f); this.help.transform.rotation = Structure.hit.collider.transform.parent.rotation; this.good(); Interact.hint = string.Empty; Interact.icon = string.Empty; } else if ((((Structure.hit.collider.transform.position + (Structure.hit.collider.transform.up * -3f)) + (Structure.hit.collider.transform.right * 3f)) - Structure.hit.point).magnitude < 1f && (int)Physics.OverlapSphere(((Structure.hit.collider.transform.position + (Structure.hit.collider.transform.up * -3f)) + (Structure.hit.collider.transform.right * 3f)) + new Vector3(0f, 1.5f, 0f), 0.1f, RayMasks.ERRORSTRUCT).Length == 0) { this.help.transform.position = (Structure.hit.collider.transform.position + (Structure.hit.collider.transform.up * -3f)) + (Structure.hit.collider.transform.right * 3f); this.help.transform.rotation = Structure.hit.collider.transform.parent.rotation; this.good(); Interact.hint = string.Empty; Interact.icon = string.Empty; } else if ((((Structure.hit.collider.transform.position + (Structure.hit.collider.transform.up * -3f)) + (Structure.hit.collider.transform.right * -3f)) - Structure.hit.point).magnitude >= 1f || (int)Physics.OverlapSphere(((Structure.hit.collider.transform.position + (Structure.hit.collider.transform.up * -3f)) + (Structure.hit.collider.transform.right * -3f)) + new Vector3(0f, 1.5f, 0f), 0.1f, RayMasks.ERRORSTRUCT).Length != 0) { this.bad(); Interact.hint = "No Corners"; Interact.icon = "Textures/Icons/error"; } else { this.help.transform.position = (Structure.hit.collider.transform.position + (Structure.hit.collider.transform.up * -3f)) + (Structure.hit.collider.transform.right * -3f); this.help.transform.rotation = Structure.hit.collider.transform.parent.rotation; this.good(); Interact.hint = string.Empty; Interact.icon = string.Empty; } } else if ((((Structure.hit.collider.transform.position + (Structure.hit.collider.transform.up * 3f)) + (Structure.hit.collider.transform.right * 3f)) - Structure.hit.point).magnitude < 1f && (int)Physics.OverlapSphere(((Structure.hit.collider.transform.position + (Structure.hit.collider.transform.up * 3f)) + (Structure.hit.collider.transform.right * 3f)) + new Vector3(0f, -1.5f, 0f), 0.1f, RayMasks.ERRORSTRUCT).Length == 0) { this.help.transform.position = ((Structure.hit.collider.transform.position + (Structure.hit.collider.transform.up * 3f)) + (Structure.hit.collider.transform.right * 3f)) + new Vector3(0f, -3f, 0f); this.help.transform.rotation = Structure.hit.collider.transform.parent.rotation; this.good(); Interact.hint = string.Empty; Interact.icon = string.Empty; } else if ((((Structure.hit.collider.transform.position + (Structure.hit.collider.transform.up * 3f)) + (Structure.hit.collider.transform.right * -3f)) - Structure.hit.point).magnitude < 1f && (int)Physics.OverlapSphere(((Structure.hit.collider.transform.position + (Structure.hit.collider.transform.up * 3f)) + (Structure.hit.collider.transform.right * -3f)) + new Vector3(0f, -1.5f, 0f), 0.1f, RayMasks.ERRORSTRUCT).Length == 0) { this.help.transform.position = ((Structure.hit.collider.transform.position + (Structure.hit.collider.transform.up * 3f)) + (Structure.hit.collider.transform.right * -3f)) + new Vector3(0f, -3f, 0f); this.help.transform.rotation = Structure.hit.collider.transform.parent.rotation; this.good(); Interact.hint = string.Empty; Interact.icon = string.Empty; } else if ((((Structure.hit.collider.transform.position + (Structure.hit.collider.transform.up * -3f)) + (Structure.hit.collider.transform.right * 3f)) - Structure.hit.point).magnitude < 1f && (int)Physics.OverlapSphere(((Structure.hit.collider.transform.position + (Structure.hit.collider.transform.up * -3f)) + (Structure.hit.collider.transform.right * 3f)) + new Vector3(0f, -1.5f, 0f), 0.1f, RayMasks.ERRORSTRUCT).Length == 0) { this.help.transform.position = ((Structure.hit.collider.transform.position + (Structure.hit.collider.transform.up * -3f)) + (Structure.hit.collider.transform.right * 3f)) + new Vector3(0f, -3f, 0f); this.help.transform.rotation = Structure.hit.collider.transform.parent.rotation; this.good(); Interact.hint = string.Empty; Interact.icon = string.Empty; } else if ((((Structure.hit.collider.transform.position + (Structure.hit.collider.transform.up * -3f)) + (Structure.hit.collider.transform.right * -3f)) - Structure.hit.point).magnitude >= 1f || (int)Physics.OverlapSphere(((Structure.hit.collider.transform.position + (Structure.hit.collider.transform.up * -3f)) + (Structure.hit.collider.transform.right * -3f)) + new Vector3(0f, -1.5f, 0f), 0.1f, RayMasks.ERRORSTRUCT).Length != 0) { this.bad(); Interact.hint = "No Corners"; Interact.icon = "Textures/Icons/error"; } else { this.help.transform.position = ((Structure.hit.collider.transform.position + (Structure.hit.collider.transform.up * -3f)) + (Structure.hit.collider.transform.right * -3f)) + new Vector3(0f, -3f, 0f); this.help.transform.rotation = Structure.hit.collider.transform.parent.rotation; this.good(); Interact.hint = string.Empty; Interact.icon = string.Empty; } } else if (StructureStats.isPost(Equipment.id)) { if (!(Structure.hit.collider.tag == "Structure") || !StructureStats.isFoundation(int.Parse(Structure.hit.collider.transform.parent.name)) && !StructureStats.isFloor(int.Parse(Structure.hit.collider.transform.parent.name))) { this.bad(); Interact.hint = "No Base"; Interact.icon = "Textures/Icons/error"; } else if ((((Structure.hit.collider.transform.position + (Structure.hit.collider.transform.up * 3f)) + (Structure.hit.collider.transform.right * 3f)) - Structure.hit.point).magnitude < 1f && (int)Physics.OverlapSphere(((Structure.hit.collider.transform.position + (Structure.hit.collider.transform.up * 3f)) + (Structure.hit.collider.transform.right * 3f)) + new Vector3(0f, 0.5f, 0f), 0.1f, RayMasks.ERRORSTRUCT).Length == 0) { this.help.transform.position = (Structure.hit.collider.transform.position + (Structure.hit.collider.transform.up * 3f)) + (Structure.hit.collider.transform.right * 3f); this.help.transform.rotation = Structure.hit.collider.transform.parent.rotation; this.good(); Interact.hint = string.Empty; Interact.icon = string.Empty; } else if ((((Structure.hit.collider.transform.position + (Structure.hit.collider.transform.up * 3f)) + (Structure.hit.collider.transform.right * -3f)) - Structure.hit.point).magnitude < 1f && (int)Physics.OverlapSphere(((Structure.hit.collider.transform.position + (Structure.hit.collider.transform.up * 3f)) + (Structure.hit.collider.transform.right * -3f)) + new Vector3(0f, 0.5f, 0f), 0.1f, RayMasks.ERRORSTRUCT).Length == 0) { this.help.transform.position = (Structure.hit.collider.transform.position + (Structure.hit.collider.transform.up * 3f)) + (Structure.hit.collider.transform.right * -3f); this.help.transform.rotation = Structure.hit.collider.transform.parent.rotation; this.good(); Interact.hint = string.Empty; Interact.icon = string.Empty; } else if ((((Structure.hit.collider.transform.position + (Structure.hit.collider.transform.up * -3f)) + (Structure.hit.collider.transform.right * 3f)) - Structure.hit.point).magnitude < 1f && (int)Physics.OverlapSphere(((Structure.hit.collider.transform.position + (Structure.hit.collider.transform.up * -3f)) + (Structure.hit.collider.transform.right * 3f)) + new Vector3(0f, 0.5f, 0f), 0.1f, RayMasks.ERRORSTRUCT).Length == 0) { this.help.transform.position = (Structure.hit.collider.transform.position + (Structure.hit.collider.transform.up * -3f)) + (Structure.hit.collider.transform.right * 3f); this.help.transform.rotation = Structure.hit.collider.transform.parent.rotation; this.good(); Interact.hint = string.Empty; Interact.icon = string.Empty; } else if ((((Structure.hit.collider.transform.position + (Structure.hit.collider.transform.up * -3f)) + (Structure.hit.collider.transform.right * -3f)) - Structure.hit.point).magnitude >= 1f || (int)Physics.OverlapSphere(((Structure.hit.collider.transform.position + (Structure.hit.collider.transform.up * -3f)) + (Structure.hit.collider.transform.right * -3f)) + new Vector3(0f, 0.5f, 0f), 0.1f, RayMasks.ERRORSTRUCT).Length != 0) { this.bad(); Interact.hint = "No Corners"; Interact.icon = "Textures/Icons/error"; } else { this.help.transform.position = (Structure.hit.collider.transform.position + (Structure.hit.collider.transform.up * -3f)) + (Structure.hit.collider.transform.right * -3f); this.help.transform.rotation = Structure.hit.collider.transform.parent.rotation; this.good(); Interact.hint = string.Empty; Interact.icon = string.Empty; } } else if (StructureStats.isWall(Equipment.id)) { if (!(Structure.hit.collider.tag == "Structure") || !StructureStats.isFoundation(int.Parse(Structure.hit.collider.transform.parent.name)) && !StructureStats.isFloor(int.Parse(Structure.hit.collider.transform.parent.name))) { this.bad(); Interact.hint = "No Base"; Interact.icon = "Textures/Icons/error"; } else if (((Structure.hit.collider.transform.position + (Structure.hit.collider.transform.up * 3f)) - Structure.hit.point).magnitude < 1f && (int)Physics.OverlapSphere((Structure.hit.collider.transform.position + (Structure.hit.collider.transform.up * 3f)) + new Vector3(0f, 1.5f, 0f), 0.1f, RayMasks.ERRORSTRUCT).Length == 0 && (int)Physics.OverlapSphere(((Structure.hit.collider.transform.position + (Structure.hit.collider.transform.up * 3f)) + (Structure.hit.collider.transform.right * 3f)) + new Vector3(0f, 1.5f, 0f), 0.1f, RayMasks.ERRORSTRUCT).Length > 0 && (int)Physics.OverlapSphere(((Structure.hit.collider.transform.position + (Structure.hit.collider.transform.up * 3f)) + (Structure.hit.collider.transform.right * -3f)) + new Vector3(0f, 1.5f, 0f), 0.1f, RayMasks.ERRORSTRUCT).Length > 0) { this.help.transform.position = Structure.hit.collider.transform.position + (Structure.hit.collider.transform.up * 3f); this.help.transform.rotation = Structure.hit.collider.transform.parent.rotation; this.good(); Interact.hint = string.Empty; Interact.icon = string.Empty; } else if (((Structure.hit.collider.transform.position + (Structure.hit.collider.transform.up * -3f)) - Structure.hit.point).magnitude < 1f && (int)Physics.OverlapSphere((Structure.hit.collider.transform.position + (Structure.hit.collider.transform.up * -3f)) + new Vector3(0f, 1.5f, 0f), 0.1f, RayMasks.ERRORSTRUCT).Length == 0 && (int)Physics.OverlapSphere(((Structure.hit.collider.transform.position + (Structure.hit.collider.transform.up * -3f)) + (Structure.hit.collider.transform.right * 3f)) + new Vector3(0f, 1.5f, 0f), 0.1f, RayMasks.ERRORSTRUCT).Length > 0 && (int)Physics.OverlapSphere(((Structure.hit.collider.transform.position + (Structure.hit.collider.transform.up * -3f)) + (Structure.hit.collider.transform.right * -3f)) + new Vector3(0f, 1.5f, 0f), 0.1f, RayMasks.ERRORSTRUCT).Length > 0) { this.help.transform.position = Structure.hit.collider.transform.position + (Structure.hit.collider.transform.up * -3f); this.help.transform.rotation = Structure.hit.collider.transform.parent.rotation; this.good(); Interact.hint = string.Empty; Interact.icon = string.Empty; } else if (((Structure.hit.collider.transform.position + (Structure.hit.collider.transform.right * 3f)) - Structure.hit.point).magnitude < 1f && (int)Physics.OverlapSphere((Structure.hit.collider.transform.position + (Structure.hit.collider.transform.right * 3f)) + new Vector3(0f, 1.5f, 0f), 0.1f, RayMasks.ERRORSTRUCT).Length == 0 && (int)Physics.OverlapSphere(((Structure.hit.collider.transform.position + (Structure.hit.collider.transform.up * 3f)) + (Structure.hit.collider.transform.right * 3f)) + new Vector3(0f, 1.5f, 0f), 0.1f, RayMasks.ERRORSTRUCT).Length > 0 && (int)Physics.OverlapSphere(((Structure.hit.collider.transform.position + (Structure.hit.collider.transform.up * -3f)) + (Structure.hit.collider.transform.right * 3f)) + new Vector3(0f, 1.5f, 0f), 0.1f, RayMasks.ERRORSTRUCT).Length > 0) { this.help.transform.position = Structure.hit.collider.transform.position + (Structure.hit.collider.transform.right * 3f); this.help.transform.rotation = Structure.hit.collider.transform.parent.rotation * Quaternion.Euler(0f, 90f, 0f); this.good(); Interact.hint = string.Empty; Interact.icon = string.Empty; } else if (((Structure.hit.collider.transform.position + (Structure.hit.collider.transform.right * -3f)) - Structure.hit.point).magnitude >= 1f || (int)Physics.OverlapSphere((Structure.hit.collider.transform.position + (Structure.hit.collider.transform.right * -3f)) + new Vector3(0f, 1.5f, 0f), 0.1f, RayMasks.ERRORSTRUCT).Length != 0 || (int)Physics.OverlapSphere(((Structure.hit.collider.transform.position + (Structure.hit.collider.transform.up * 3f)) + (Structure.hit.collider.transform.right * -3f)) + new Vector3(0f, 1.5f, 0f), 0.1f, RayMasks.ERRORSTRUCT).Length <= 0 || (int)Physics.OverlapSphere(((Structure.hit.collider.transform.position + (Structure.hit.collider.transform.up * -3f)) + (Structure.hit.collider.transform.right * -3f)) + new Vector3(0f, 1.5f, 0f), 0.1f, RayMasks.ERRORSTRUCT).Length <= 0) { this.bad(); Interact.hint = "No Pillars"; Interact.icon = "Textures/Icons/error"; } else { this.help.transform.position = Structure.hit.collider.transform.position + (Structure.hit.collider.transform.right * -3f); this.help.transform.rotation = Structure.hit.collider.transform.parent.rotation * Quaternion.Euler(0f, 90f, 0f); this.good(); Interact.hint = string.Empty; Interact.icon = string.Empty; } } else if (StructureStats.isRampart(Equipment.id)) { if (!(Structure.hit.collider.tag == "Structure") || !StructureStats.isFoundation(int.Parse(Structure.hit.collider.transform.parent.name)) && !StructureStats.isFloor(int.Parse(Structure.hit.collider.transform.parent.name))) { this.bad(); Interact.hint = "No Base"; Interact.icon = "Textures/Icons/error"; } else if (((Structure.hit.collider.transform.position + (Structure.hit.collider.transform.up * 3f)) - Structure.hit.point).magnitude < 1f && (int)Physics.OverlapSphere((Structure.hit.collider.transform.position + (Structure.hit.collider.transform.up * 3f)) + new Vector3(0f, 0.5f, 0f), 0.1f, RayMasks.ERRORSTRUCT).Length == 0 && (int)Physics.OverlapSphere(((Structure.hit.collider.transform.position + (Structure.hit.collider.transform.up * 3f)) + (Structure.hit.collider.transform.right * 3f)) + new Vector3(0f, 0.5f, 0f), 0.1f, RayMasks.ERRORSTRUCT).Length > 0 && (int)Physics.OverlapSphere(((Structure.hit.collider.transform.position + (Structure.hit.collider.transform.up * 3f)) + (Structure.hit.collider.transform.right * -3f)) + new Vector3(0f, 0.5f, 0f), 0.1f, RayMasks.ERRORSTRUCT).Length > 0) { this.help.transform.position = Structure.hit.collider.transform.position + (Structure.hit.collider.transform.up * 3f); this.help.transform.rotation = Structure.hit.collider.transform.parent.rotation; this.good(); Interact.hint = string.Empty; Interact.icon = string.Empty; } else if (((Structure.hit.collider.transform.position + (Structure.hit.collider.transform.up * -3f)) - Structure.hit.point).magnitude < 1f && (int)Physics.OverlapSphere((Structure.hit.collider.transform.position + (Structure.hit.collider.transform.up * -3f)) + new Vector3(0f, 0.5f, 0f), 0.1f, RayMasks.ERRORSTRUCT).Length == 0 && (int)Physics.OverlapSphere(((Structure.hit.collider.transform.position + (Structure.hit.collider.transform.up * -3f)) + (Structure.hit.collider.transform.right * 3f)) + new Vector3(0f, 0.5f, 0f), 0.1f, RayMasks.ERRORSTRUCT).Length > 0 && (int)Physics.OverlapSphere(((Structure.hit.collider.transform.position + (Structure.hit.collider.transform.up * -3f)) + (Structure.hit.collider.transform.right * -3f)) + new Vector3(0f, 0.5f, 0f), 0.1f, RayMasks.ERRORSTRUCT).Length > 0) { this.help.transform.position = Structure.hit.collider.transform.position + (Structure.hit.collider.transform.up * -3f); this.help.transform.rotation = Structure.hit.collider.transform.parent.rotation; this.good(); Interact.hint = string.Empty; Interact.icon = string.Empty; } else if (((Structure.hit.collider.transform.position + (Structure.hit.collider.transform.right * 3f)) - Structure.hit.point).magnitude < 1f && (int)Physics.OverlapSphere((Structure.hit.collider.transform.position + (Structure.hit.collider.transform.right * 3f)) + new Vector3(0f, 0.5f, 0f), 0.1f, RayMasks.ERRORSTRUCT).Length == 0 && (int)Physics.OverlapSphere(((Structure.hit.collider.transform.position + (Structure.hit.collider.transform.up * 3f)) + (Structure.hit.collider.transform.right * 3f)) + new Vector3(0f, 0.5f, 0f), 0.1f, RayMasks.ERRORSTRUCT).Length > 0 && (int)Physics.OverlapSphere(((Structure.hit.collider.transform.position + (Structure.hit.collider.transform.up * -3f)) + (Structure.hit.collider.transform.right * 3f)) + new Vector3(0f, 0.5f, 0f), 0.1f, RayMasks.ERRORSTRUCT).Length > 0) { this.help.transform.position = Structure.hit.collider.transform.position + (Structure.hit.collider.transform.right * 3f); this.help.transform.rotation = Structure.hit.collider.transform.parent.rotation * Quaternion.Euler(0f, 90f, 0f); this.good(); Interact.hint = string.Empty; Interact.icon = string.Empty; } else if (((Structure.hit.collider.transform.position + (Structure.hit.collider.transform.right * -3f)) - Structure.hit.point).magnitude >= 1f || (int)Physics.OverlapSphere((Structure.hit.collider.transform.position + (Structure.hit.collider.transform.right * -3f)) + new Vector3(0f, 0.5f, 0f), 0.1f, RayMasks.ERRORSTRUCT).Length != 0 || (int)Physics.OverlapSphere(((Structure.hit.collider.transform.position + (Structure.hit.collider.transform.up * 3f)) + (Structure.hit.collider.transform.right * -3f)) + new Vector3(0f, 0.5f, 0f), 0.1f, RayMasks.ERRORSTRUCT).Length <= 0 || (int)Physics.OverlapSphere(((Structure.hit.collider.transform.position + (Structure.hit.collider.transform.up * -3f)) + (Structure.hit.collider.transform.right * -3f)) + new Vector3(0f, 0.5f, 0f), 0.1f, RayMasks.ERRORSTRUCT).Length <= 0) { this.bad(); Interact.hint = "No Posts"; Interact.icon = "Textures/Icons/error"; } else { this.help.transform.position = Structure.hit.collider.transform.position + (Structure.hit.collider.transform.right * -3f); this.help.transform.rotation = Structure.hit.collider.transform.parent.rotation * Quaternion.Euler(0f, 90f, 0f); this.good(); Interact.hint = string.Empty; Interact.icon = string.Empty; } } else if (!StructureStats.isFoundation(Equipment.id)) { if (StructureStats.isLadder(Equipment.id)) { if (!(Structure.hit.collider.tag == "Structure") || !(Structure.hit.collider.transform.parent.tag == "Structure") || !StructureStats.isLadder(int.Parse(Structure.hit.collider.transform.parent.name))) { this.help.transform.position = Structure.hit.point; this.good(); Interact.hint = string.Empty; Interact.icon = string.Empty; } else if ((int)Physics.OverlapSphere(Structure.hit.collider.transform.position + new Vector3(0f, 4.5f, 0f), 0.1f, RayMasks.ERRORSTRUCT).Length != 0) { this.bad(); Interact.hint = "No Space"; Interact.icon = "Textures/Icons/error"; } else { this.help.transform.position = Structure.hit.collider.transform.position + new Vector3(0f, 3f, 0f); this.help.transform.rotation = Structure.hit.collider.transform.parent.rotation; this.good(); Interact.hint = string.Empty; Interact.icon = string.Empty; } } } else if ((double)Structure.hit.normal.y <= 0.5) { this.bad(); Interact.hint = "Too Steep"; Interact.icon = "Textures/Icons/error"; } else if (Structure.hit.collider.name == "ground") { this.help.transform.position = Structure.hit.point + new Vector3(0f, 0.3f, 0f); this.good(); Interact.hint = string.Empty; Interact.icon = string.Empty; } else if (!(Structure.hit.collider.tag == "Structure") || !StructureStats.isFoundation(int.Parse(Structure.hit.collider.transform.parent.name))) { this.bad(); Interact.hint = "No Base"; Interact.icon = "Textures/Icons/error"; } else if (((Structure.hit.collider.transform.position + (Structure.hit.collider.transform.up * 3f)) - Structure.hit.point).magnitude < 1f && (int)Physics.OverlapSphere((Structure.hit.collider.transform.position + (Structure.hit.collider.transform.up * 6f)) + new Vector3(0f, -0.5f, 0f), 0.1f, RayMasks.ERRORSTRUCT).Length == 0) { this.help.transform.position = Structure.hit.collider.transform.position + (Structure.hit.collider.transform.up * 6f); this.help.transform.rotation = Structure.hit.collider.transform.parent.rotation; this.good(); Interact.hint = string.Empty; Interact.icon = string.Empty; } else if (((Structure.hit.collider.transform.position + (Structure.hit.collider.transform.up * -3f)) - Structure.hit.point).magnitude < 1f && (int)Physics.OverlapSphere((Structure.hit.collider.transform.position + (Structure.hit.collider.transform.up * -6f)) + new Vector3(0f, -0.5f, 0f), 0.1f, RayMasks.ERRORSTRUCT).Length == 0) { this.help.transform.position = Structure.hit.collider.transform.position + (Structure.hit.collider.transform.up * -6f); this.help.transform.rotation = Structure.hit.collider.transform.parent.rotation; this.good(); Interact.hint = string.Empty; Interact.icon = string.Empty; } else if (((Structure.hit.collider.transform.position + (Structure.hit.collider.transform.right * 3f)) - Structure.hit.point).magnitude < 1f && (int)Physics.OverlapSphere((Structure.hit.collider.transform.position + (Structure.hit.collider.transform.right * 6f)) + new Vector3(0f, -0.5f, 0f), 0.1f, RayMasks.ERRORSTRUCT).Length == 0) { this.help.transform.position = Structure.hit.collider.transform.position + (Structure.hit.collider.transform.right * 6f); this.help.transform.rotation = Structure.hit.collider.transform.parent.rotation; this.good(); Interact.hint = string.Empty; Interact.icon = string.Empty; } else if (((Structure.hit.collider.transform.position + (Structure.hit.collider.transform.right * -3f)) - Structure.hit.point).magnitude >= 1f || (int)Physics.OverlapSphere((Structure.hit.collider.transform.position + (Structure.hit.collider.transform.right * -6f)) + new Vector3(0f, -0.5f, 0f), 0.1f, RayMasks.ERRORSTRUCT).Length != 0) { this.bad(); Interact.hint = "No Edges"; Interact.icon = "Textures/Icons/error"; } else { this.help.transform.position = Structure.hit.collider.transform.position + (Structure.hit.collider.transform.right * -6f); this.help.transform.rotation = Structure.hit.collider.transform.parent.rotation; this.good(); Interact.hint = string.Empty; Interact.icon = string.Empty; } } if (Input.GetMouseButtonDown(1)) { Structure structure = this; structure.rotation = structure.rotation + 45; } } if (Time.realtimeSinceStartup - this.startedUse > Viewmodel.model.animation["use"].length && !this.done) { this.done = true; if (!Network.isServer) { NetworkView networkView = base.networkView; object[] state = new object[] { Equipment.equipped.x, Equipment.equipped.y, this.help.transform.position, null, null }; Quaternion quaternion1 = this.help.transform.rotation; state[3] = (int)quaternion1.eulerAngles.y; state[4] = StructureStats.getState(Equipment.id); networkView.RPC("askBuild", RPCMode.Server, state); } else { int num = Equipment.equipped.x; int num1 = Equipment.equipped.y; Vector3 vector31 = this.help.transform.position; Vector3 vector32 = this.help.transform.rotation.eulerAngles; // FIXME: cliend side? //this.askBuild(num, num1, vector31, (int)vector32.y, StructureStats.getState(Equipment.id)); } NetworkSounds.askSound(string.Concat("Sounds/Items/", ItemSounds.getSource(Equipment.id), "/use"), Camera.main.transform.position + (Camera.main.transform.forward * 0.5f), 0.5f, UnityEngine.Random.Range(0.9f, 1.1f), 1f); Equipment.use(); } }
public static void placeStructure(int id, Vector3 position, int rotation, string state) { SpawnStructures.structures.Add(new ServerStructure(id, StructureStats.getHealth(id), state, position, rotation)); SpawnStructures.tool.networkView.RPC("createStructure", RPCMode.All, new object[] { id, position, rotation }); }
public Group() { player = new Player(playerId, DateTime.MinValue, SystemClock.Now, "player " + playerId, string.Empty, PlayerRights.Basic); playerId++; BaseBattleStats baseBattleStats = new BaseBattleStats(type: 2000, lvl: 1, weapon: WeaponType.Sword, wpnClass: WeaponClass.Elemental, armor: ArmorType.Building3, armrClass: ArmorClass.Stone, maxHp: 500, atk: 0, splash: 0, range: 0, stealth: 0, speed: 0, groupSize: 1, carry: 0, normalizedCost: 0); StructureBaseStats structureBaseStats = new StructureBaseStats(name: "MainBuilding", spriteClass: "", type: 2000, lvl: 1, radius: 0, cost: null, baseBattleStats: baseBattleStats, maxLabor: 0, buildTime: 0, workerId: 0); StructureStats structurestats = new StructureStats(structureBaseStats); var main = new Structure(structurestats); city = Ioc.Kernel.Get <ICityFactory>() .CreateCity(id: cityId, owner: player, name: "city " + cityId, resource: Formula.Current.GetInitialCityResources(), radius: Formula.Current.GetInitialCityRadius(), ap: 0); main.ObjectId = 1; city.Add(main.ObjectId, main, false); player.Add(city); cityId++; AttackStub = new TroopStub(0, city); AttackStub.AddFormation(FormationType.Normal); obj = new TroopObject(AttackStub); using (Concurrency.Current.Lock(city)) { city.Troops.Add(AttackStub); city.Add(obj); } TroopObject = new TroopObject(AttackStub) { X = city.X, Y = city.Y }; TroopObject.BeginUpdate(); TroopObject.Stats = new TroopStats(Formula.Current.GetTroopRadius(AttackStub, null), Formula.Current.GetTroopSpeed(AttackStub)); TroopObject.EndUpdate(); city.Add(TroopObject); }