Example #1
0
    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;
        }
    }