示例#1
0
        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);
        }
示例#2
0
        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);
        }
示例#3
0
    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);
    }
示例#4
0
        /// <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);
        }
示例#5
0
    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);
        }
    }
示例#6
0
 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();
     }
 }
示例#7
0
 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 });
 }
示例#8
0
        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);
        }