Пример #1
0
    // Update is called once per frame
    void Update()
    {
        transform.localPosition   += moveDirection * Time.deltaTime * MeatBehaviour.Speed;
        timeToChangeMoveDirection -= Time.deltaTime;
        if (terrain == null)
        {
            GameObject go = GameObject.Find("Tile Map");
            if (go != null)
            {
                terrain = go.GetComponent <PATileTerrain>();
            }
        }

        PlayerAI ai        = getPlayerAI();
        Vector3  direction = ai.transform.localPosition - transform.localPosition;

        direction.y = 0;

        if (direction.sqrMagnitude <= MeatBehaviour.SightDistance * MeatBehaviour.SightDistance)
        {
            this.attackObject(ai.gameObject, direction.normalized, direction.sqrMagnitude);
        }
        else if (timeToChangeMoveDirection <= 0)
        {
            changeMoveDirection();
        }
        else if (transform.localPosition.x <= 0 || transform.localPosition.x >= terrain.width ||
                 transform.localPosition.z <= 0 || transform.localPosition.z >= terrain.height)
        {
            moveDirection            *= -1;
            timeToChangeMoveDirection = changeInterval;
        }
    }
Пример #2
0
 void Awake()
 {
     if (terrain == null)
     {
         GameObject go = GameObject.Find("PATileTerrain");
         if (go != null) terrain = go.GetComponent<PATileTerrain>();
     }
 }
Пример #3
0
    void EditCrystal()
    {
        if (!CheckEditCrystal())
        {
            return;
        }

        RaycastHit hit;
        Ray        ray = Camera.main.ScreenPointToRay(Input.mousePosition);
        Vector3    pos;
        int        x, y;

        if (Physics.Raycast(ray, out hit, Mathf.Infinity, editCrystalLayerMask))
        {
            PATileTerrain tt          = tileTerrain.IsTerrain(hit.transform);
            Shuijing      hitShuijing = hit.transform.GetComponent <Shuijing>();
            if (tt != null)
            {
                if (toPlaceBuilding == null)
                {
                    SetSelectShuijing(null);
                    Messenger <PATileTerrain.PATile> .Broadcast(UIEvent.UIEvent_ShowSelectCrystal, null);
                }
                else
                {
                    pos = tileTerrain.transform.InverseTransformPoint(hit.point);
                    x   = (int)Mathf.Abs(pos.x / tileTerrain.tileSize);
                    y   = (int)Mathf.Abs(pos.z / tileTerrain.tileSize);
                    PATileTerrain.PATile         tile         = tileTerrain.GetTile(x, y);
                    PATileTerrain.PABuildingTile buildingTile = PATileTerrain.PABuildingTile.GetByTile(tileTerrain, tile);

                    Shuijing shuijing = toPlaceBuilding as Shuijing;
                    if (!CheckCrystalDistance(buildingTile.keyTile, shuijing))
                    {
                        Messenger.Broadcast(UIEvent.UIEvent_CrystalDistanceTip);
                        return;
                    }

                    PlaceCrystal(shuijing, buildingTile);
                    shuijing.SetSelectTag(false);
                    RepaintAllCrystals();
                    //PaintCrystal(shuijing);
                    toPlaceBuilding = null;
                    //SetSelectShuijing(shuijing);
                    Messenger.Broadcast(TerrainManagerEvent_PlaceBuilding);
                }
            }
            else if (hitShuijing != null && toPlaceBuilding == null)
            {
                SetSelectShuijing(hitShuijing);
                MoveCameraToPos(hitShuijing.transform, MoveToCrystalCallBack);
            }
            else
            {
                SetSelectShuijing(null);
            }
        }
    }
Пример #4
0
        public static PABuildingTile GetByTile(PATileTerrain tileTerrain, PATile tile)
        {
            PABuildingTile buildingTile = new PABuildingTile();
            int            x            = tile.x / 2;
            int            y            = tile.y / 2;

            buildingTile.keyTile = tileTerrain.GetTile(x * 2, y * 2);
            return(buildingTile);
        }
Пример #5
0
        public Vector3 GetBuildingPos(PATileTerrain tileTerrain)
        {
            if (keyTile == null)
            {
                return(Vector3.zero);
            }
            Vector3 pos = new Vector3(keyTile.position.x + tileTerrain.settings.tileSize / 2, 0, keyTile.position.z + tileTerrain.settings.tileSize / 2);

            return(tileTerrain.transform.TransformPoint(pos));
        }
Пример #6
0
    public void CheckEdge(PATileTerrain tileTerrain)
    {
        if (!root.activeInHierarchy)
        {
            return;
        }
        Cloud[] neighborClouds = tileTerrain.GetNeighboringCloudsNxN(indexX, indexY, 1);

        Cloud leftCloud   = neighborClouds[1];
        Cloud topCloud    = neighborClouds[3];
        Cloud rightCloud  = neighborClouds[5];
        Cloud bottomCloud = neighborClouds[7];

        List <Cloud> pointCloud = new List <Cloud>();

        pointCloud.Add(leftCloud);
        pointCloud.Add(topCloud);
        pointCloud.Add(rightCloud);
        pointCloud.Add(bottomCloud);

        for (int i = 0; i < pointCloud.Count; i++)
        {
            Cloud neighborCloud = pointCloud[i];
            if (neighborCloud == null)
            {
                continue;
            }
            if (!neighborCloud.root.activeInHierarchy)
            {
                int randomIndex = RandomManager.instance.Range(0, edges.Count);
                edges[randomIndex].SetActive(true);
                normal.SetActive(false);

                if (!rightCloud.root.activeInHierarchy)
                {
                    edges[randomIndex].transform.localRotation = Quaternion.Euler(0, 180, 0);
                }
                else if (!topCloud.root.activeInHierarchy)
                {
                    edges[randomIndex].transform.localRotation = Quaternion.Euler(0, 90, 0);
                }
                else if (!bottomCloud.root.activeInHierarchy)
                {
                    edges[randomIndex].transform.localRotation = Quaternion.Euler(0, 270, 0);
                }
                else
                {
                    edges[randomIndex].transform.localRotation = Quaternion.identity;
                }

                return;
            }
        }
    }
Пример #7
0
 void Awake()
 {
     if (terrain == null)
     {
         GameObject go = GameObject.Find("PATileTerrain");
         if (go != null)
         {
             terrain = go.GetComponent <PATileTerrain>();
         }
     }
 }
Пример #8
0
 public PATile[] GetOtherTiles(PATileTerrain tileTerrain)
 {
     if (keyTile == null)
     {
         return(null);
     }
     PATile[] otherTiles = new PATile[3];
     otherTiles[0] = tileTerrain.GetTile(keyTile.x, keyTile.y + 1);
     otherTiles[1] = tileTerrain.GetTile(keyTile.x + 1, keyTile.y + 1);
     otherTiles[2] = tileTerrain.GetTile(keyTile.x + 1, keyTile.y);
     return(otherTiles);
 }
Пример #9
0
    // Use this for initialization
    void Start()
    {
        health = MeatBehaviour.InitialHealth;
        timeToChangeMoveDirection = changeInterval;

        GameObject go = GameObject.Find("Tile Map");

        if (go != null)
        {
            terrain = go.GetComponent <PATileTerrain>();
        }
        timeBetweenAttacks = 0.0f;
        (this.GetComponent("SpriteRenderer") as SpriteRenderer).sprite = Resources.Load <Sprite> ("worm");
    }
Пример #10
0
    public override TaskStatus OnUpdate()
    {
        GameObject    terrainGo   = GameObject.FindGameObjectWithTag("SurfaceTerrain");
        PATileTerrain tileTerrain = terrainGo.GetComponent <PATileTerrain>();

        Vector3 pos = tileTerrain.transform.InverseTransformPoint(storeHitPoint.Value);
        int     x   = (int)Mathf.Abs(pos.x / tileTerrain.tileSize);
        int     y   = (int)Mathf.Abs(pos.z / tileTerrain.tileSize);

        PATileTerrain.PATile tile = tileTerrain.GetTile(x, y);

        var currentGameObject = GetDefaultGameObject(targetGameObject.Value);

        if (currentGameObject != prevGameObject)
        {
            prevGameObject = currentGameObject;
        }

        animals = currentGameObject.GetComponent <Animals>();
        if (animals == null)
        {
            return(TaskStatus.Failure);
        }

        if (animals.elementType == Animals.ElementType.Fire)
        {
            if (tile.element.IsFire())
            {
                return(TaskStatus.Success);
            }
            else
            {
                return(TaskStatus.Failure);
            }
        }
        else if (animals.elementType == Animals.ElementType.Wood)
        {
            if (tile.element.IsWood())
            {
                return(TaskStatus.Success);
            }
            else
            {
                return(TaskStatus.Failure);
            }
        }

        return(TaskStatus.Success);
    }
Пример #11
0
 // Use this for initialization
 void Start()
 {
     MeatBehaviour.InitialHealth = 5;
     MeatBehaviour.Speed = 1;
     MeatBehaviour.Strength = 1;
     MeatBehaviour.SightDistance = 10;
     timeToSpawnMeat = initialTimeToSpawn;
     timeToSpawnPlant = initialTimeToSpawn;
     timeToSpawnAlcohol = initialTimeToSpawn;
     GameObject go = GameObject.Find("Tile Map");
     if (go != null) terrain = go.GetComponent<PATileTerrain>();
     plantSpawnFactor = 0.4f;
     meatSpawnFactor = 0.4f;
     alcoholSpawnFactor = 0.08f;
 }
Пример #12
0
    // Use this for initialization
    void Start()
    {
        MeatBehaviour.InitialHealth = 5;
        MeatBehaviour.Speed         = 1;
        MeatBehaviour.Strength      = 1;
        MeatBehaviour.SightDistance = 10;
        timeToSpawnMeat             = initialTimeToSpawn;
        timeToSpawnPlant            = initialTimeToSpawn;
        timeToSpawnAlcohol          = initialTimeToSpawn;
        GameObject go = GameObject.Find("Tile Map");

        if (go != null)
        {
            terrain = go.GetComponent <PATileTerrain>();
        }
        plantSpawnFactor   = 0.4f;
        meatSpawnFactor    = 0.4f;
        alcoholSpawnFactor = 0.08f;
    }
Пример #13
0
    void EditBuilding()
    {
        if (!CheckEditBuilding())
        {
            return;
        }

        RaycastHit hit;
        Ray        ray = Camera.main.ScreenPointToRay(Input.mousePosition);
        Vector3    pos;
        int        x, y;

        if (Physics.Raycast(ray, out hit, Mathf.Infinity, editCrystalLayerMask))
        {
            PATileTerrain tt       = tileTerrain.IsTerrain(hit.transform);
            NestBuilding  hitNest  = hit.transform.GetComponent <NestBuilding>();
            HatchBuilding hitHatch = hit.transform.GetComponent <HatchBuilding>();
            if (tt != null)
            {
                pos = tileTerrain.transform.InverseTransformPoint(hit.point);
                x   = (int)Mathf.Abs(pos.x / tileTerrain.tileSize);
                y   = (int)Mathf.Abs(pos.z / tileTerrain.tileSize);
                PATileTerrain.PATile         tile         = tileTerrain.GetTile(x, y);
                PATileTerrain.PABuildingTile buildingTile = PATileTerrain.PABuildingTile.GetByTile(tileTerrain, tile);

                if (toPlaceBuilding is NestBuilding && buildingTile.keyTile.affectShuijing != null)
                {
                    NestBuilding nest = toPlaceBuilding as NestBuilding;
                    PlaceNest(nest, buildingTile);
                    toPlaceBuilding = null;
                    //Messenger.Broadcast(TerrainManagerEvent_PlaceBuilding);
                }
            }
            else if (hitNest != null && toPlaceBuilding == null)
            {
                Messenger.Broadcast(UIEvent.UIEvent_ShowSelectNest);
            }
            else if (hitHatch != null && toPlaceBuilding == null)
            {
                Messenger <int> .Broadcast(UIEvent.UIEvent_ShowHatch, hitHatch.hatchId);
            }
        }
    }
Пример #14
0
    void movePlayer()
    {
        transform.localPosition += moveDirection * Time.deltaTime * this.speed;
        if (terrain == null)
        {
            GameObject go = GameObject.Find("Tile Map");
            if (go != null)
            {
                terrain = go.GetComponent <PATileTerrain>();
            }
        }

        if (state == State.Searching)
        {
            timeToChangeMoveDirection -= Time.deltaTime;
            if (timeToChangeMoveDirection <= 0)
            {
                changeMoveDirection();
            }
            else
            {
                if (transform.localPosition.x <= 0 || transform.localPosition.x >= terrain.width)
                {
                    timeToChangeMoveDirection = changeInterval;
                    moveDirection.x          *= -1;
                }
                if (transform.localPosition.z <= 0 || transform.localPosition.z >= terrain.height)
                {
                    timeToChangeMoveDirection = changeInterval;
                    moveDirection.z          *= -1;
                }
            }
            this.search();
        }
        else
        {
            Vector3 dir = target.transform.localPosition - transform.localPosition;
            dir.y = 0;
            this.attackObject(target, dir.normalized, dir.sqrMagnitude);
        }
    }
Пример #15
0
    // Use this for initialization
    void Start()
    {
        moveDirection = this.randomMoveDirection();

        GameObject go = GameObject.Find("Tile Map");

        if (go != null)
        {
            terrain = go.GetComponent <PATileTerrain>();
        }
        plantDistance     = 2;
        meatDistance      = 2;
        strength          = 0;
        maxHealth         = 100;
        health            = 100;
        poisoningToHealth = 0.1f;
        alcoholTolerance  = 0;
        poisoning         = 0;
        poisoningFall     = 1;
        panel             = (PanelBehaviour)FindObjectOfType(typeof(PanelBehaviour));
        state             = State.Searching;
    }
Пример #16
0
    public bool CheckAreaType(PATileTerrain tileTerrain)
    {
        if (closeTile == null)
        {
            return(false);
        }
        if (!CheckCloseTileElementType())
        {
            return(false);
        }
        if (areaType == AreaType.Area1X1)
        {
            return(true);
        }

        PATileTerrain.PATile[] nTiles = tileTerrain.GetNeighboringTilesNxN(closeTile, 1);
        if (areaType == AreaType.Area2X2)
        {
            for (int i = 5; i < nTiles.Length; i++)
            {
                if (!CheckElementType(nTiles[i]))
                {
                    return(false);
                }
            }
        }
        else if (areaType == AreaType.Area3X3)
        {
            for (int i = 0; i < nTiles.Length; i++)
            {
                if (!CheckElementType(nTiles[i]))
                {
                    return(false);
                }
            }
        }

        return(true);
    }
Пример #17
0
    PATileTerrain.PATile GetTileByPoint(PATileTerrain tileTerrain, Transform vPointTrans)
    {
        RaycastHit hit;
        Ray        ray = new Ray(new Vector3(vPointTrans.position.x, vPointTrans.position.y + 100, vPointTrans.position.z), Vector3.down);

        Physics.Raycast(ray, out hit, Mathf.Infinity, TerrainManager.instance.terrainChunkLayermask);

        //PATileTerrain tt = tileTerrain.IsTerrain(hit.transform);
        //if (tt == null)
        //    return null;
        if (hit.transform == null)
        {
            return(null);
        }

        Vector3 pos = tileTerrain.transform.InverseTransformPoint(hit.point);
        int     x   = (int)Mathf.Abs(pos.x / tileTerrain.tileSize);
        int     y   = (int)Mathf.Abs(pos.z / tileTerrain.tileSize);

        PATileTerrain.PATile tile = tileTerrain.GetTile(x, y);

        return(tile);
    }
Пример #18
0
    public void CheckShow(PATileTerrain tileTerrain)
    {
        Vector3 boundLBPos = boxBoundLB.position;
        Vector3 boundLTPos = new Vector3(boxBoundLB.position.x, boxBoundLB.position.y, boxBoundRT.position.z);
        Vector3 boundRTPos = boxBoundRT.position;
        Vector3 boundRBPos = new Vector3(boxBoundRT.position.x, boxBoundLB.position.y, boxBoundLB.position.z);

        PATileTerrain.PATile hitTileLB = tileTerrain.GetTileByRay(boundLBPos, Vector3.down);
        PATileTerrain.PATile hitTileLT = tileTerrain.GetTileByRay(boundLTPos, Vector3.down);
        PATileTerrain.PATile hitTileRT = tileTerrain.GetTileByRay(boundRTPos, Vector3.down);
        PATileTerrain.PATile hitTileRB = tileTerrain.GetTileByRay(boundRBPos, Vector3.down);

        if (PATileTerrain.PATile.IsNotBaseElement(hitTileLB) ||
            PATileTerrain.PATile.IsNotBaseElement(hitTileLT) ||
            PATileTerrain.PATile.IsNotBaseElement(hitTileRT) ||
            PATileTerrain.PATile.IsNotBaseElement(hitTileRB))
        {
            Hide();
        }
        else
        {
            Show();
        }
    }
Пример #19
0
    // Update is called once per frame
    void Update()
    {
        transform.localPosition += moveDirection * Time.deltaTime * MeatBehaviour.Speed;
        timeToChangeMoveDirection -= Time.deltaTime;
        if (terrain == null) {
            GameObject go = GameObject.Find("Tile Map");
            if (go != null) terrain = go.GetComponent<PATileTerrain>();
        }

        PlayerAI ai = getPlayerAI ();
        Vector3 direction = ai.transform.localPosition - transform.localPosition;
        direction.y = 0;

        if (direction.sqrMagnitude <= MeatBehaviour.SightDistance * MeatBehaviour.SightDistance) {
            this.attackObject(ai.gameObject, direction.normalized, direction.sqrMagnitude);
        } else if (timeToChangeMoveDirection <= 0) {
            changeMoveDirection();
        } else if (transform.localPosition.x <= 0 || transform.localPosition.x >= terrain.width ||
                   transform.localPosition.z <= 0 || transform.localPosition.z >= terrain.height) {
            moveDirection *= -1;
            timeToChangeMoveDirection = changeInterval;
        }
    }
Пример #20
0
    // Use this for initialization
    void Start()
    {
        health = MeatBehaviour.InitialHealth;
        timeToChangeMoveDirection = changeInterval;

        GameObject go = GameObject.Find("Tile Map");
        if (go != null) terrain = go.GetComponent<PATileTerrain>();
        timeBetweenAttacks = 0.0f;
        (this.GetComponent("SpriteRenderer") as SpriteRenderer).sprite = Resources.Load<Sprite> ("worm");
    }
Пример #21
0
    // Use this for initialization
    void Start()
    {
        moveDirection = this.randomMoveDirection ();

        GameObject go = GameObject.Find("Tile Map");
        if (go != null) terrain = go.GetComponent<PATileTerrain>();
        plantDistance = 2;
        meatDistance = 2;
        strength = 0;
        maxHealth = 100;
        health = 100;
        poisoningToHealth = 0.1f;
        alcoholTolerance = 0;
        poisoning = 0;
        poisoningFall = 1;
        panel = (PanelBehaviour) FindObjectOfType(typeof(PanelBehaviour));
        state = State.Searching;
    }
Пример #22
0
    void movePlayer()
    {
        transform.localPosition += moveDirection * Time.deltaTime * this.speed;
        if (terrain == null) {
            GameObject go = GameObject.Find("Tile Map");
            if (go != null) terrain = go.GetComponent<PATileTerrain>();
        }

        if (state == State.Searching) {
            timeToChangeMoveDirection -= Time.deltaTime;
            if (timeToChangeMoveDirection <= 0) {
                changeMoveDirection ();
            } else {
                if (transform.localPosition.x <= 0 || transform.localPosition.x >= terrain.width) {
                    timeToChangeMoveDirection = changeInterval;
                    moveDirection.x *= -1;
                }
                if (transform.localPosition.z <= 0 || transform.localPosition.z >= terrain.height) {
                    timeToChangeMoveDirection = changeInterval;
                    moveDirection.z *= -1;
                }
            }
            this.search();
        } else {
            Vector3 dir = target.transform.localPosition - transform.localPosition;
            dir.y = 0;
            this.attackObject(target, dir.normalized, dir.sqrMagnitude);
        }
    }
Пример #23
0
    public void CreateBuildings(PATileTerrain tileTerrain)
    {
        return;

        RandomManager.instance.SetSeed(tileTerrain.settings.GetCrystalBuilding(tile.id).randomSeed);
        PATileTerrainChunk chunk = tileTerrain.GetChunk(tile.chunkId);

        foreach (var point in vPoints)
        {
            if (point.closeTile == null)
            {
                point.closeTile = GetTileByPoint(tileTerrain, point.transform);
            }
            if (point.closeTile == null)
            {
                continue;
            }
            //Debug.Log("pointTile.x " + pointTile.x + " pointTile.y " + pointTile.y + " point " + point.transform);
            if (point.virtualPointType != VirtualPoint.VirtualPointType.Building)
            {
                continue;
            }
            if (!point.CheckAreaType(tileTerrain))
            {
                if (point.building != null)
                {
                    buildings.Remove(point.building);
                    point.RemoveBuilding();
                }
            }
            else
            {
                if (point.building == null)
                {
                    Transform building = point.CreateBuilding(chunk.settings.decoratesRoot);
                    if (building != null)
                    {
                        HatchBuilding hatchBuilding = building.GetComponent <HatchBuilding>();
                        if (hatchBuilding != null)
                        {
                            hatchBuilding.hatchId = tile.id;
                            this.hatch            = hatchBuilding;
                        }
                        buildings.Add(building);
                    }
                }
            }
        }

        if (Application.isPlaying)
        {
            LocalNavMeshBuilder.instance.UpdateNavMesh();
        }

        //foreach (var point in vPoints)
        //{
        //    if (point.virtualPointType != VirtualPoint.VirtualPointType.Animals)
        //        continue;
        //    if(point.building == null)
        //    {
        //        Transform building = point.CreateBuilding(chunk.settings.decoratesRoot);
        //        if (building != null)
        //            buildings.Add(building);
        //    }
        //}
    }
Пример #24
0
        //将没有完美融合的qtrtile设置成none
        public bool ProcessMixPerfect(PATileTerrain tileTerrain)
        {
            PATile[] nTiles = tileTerrain.GetNeighboringTilesNxN(this, 1);

            PATile leftBottomTile  = nTiles[0];
            PATile leftTile        = nTiles[1];
            PATile leftTopTile     = nTiles[2];
            PATile topTile         = nTiles[3];
            PATile rightTopTile    = nTiles[4];
            PATile rightTile       = nTiles[5];
            PATile rightBottomTile = nTiles[6];
            PATile bottomTile      = nTiles[7];
            bool   isPerfect       = true;

            QtrTileElementType qte0 = GetQtrTileElementType(bottomTile, 1);
            QtrTileElementType qte1 = GetQtrTileElementType(leftBottomTile, 2);
            QtrTileElementType qte2 = GetQtrTileElementType(leftTile, 3);
            QtrTileElementType qte  = qtrTiles[0];

            if (qte == qte0 && qte == qte1 && qte == qte2)
            {
            }
            else
            {
                isPerfect   = false;
                qtrTiles[0] = QtrTileElementType.None;
            }


            qte0 = GetQtrTileElementType(leftTile, 2);
            qte1 = GetQtrTileElementType(leftTopTile, 3);
            qte2 = GetQtrTileElementType(topTile, 0);
            qte  = qtrTiles[1];
            if (qte == qte0 && qte == qte1 && qte == qte2)
            {
            }
            else
            {
                isPerfect   = false;
                qtrTiles[1] = QtrTileElementType.None;
            }

            qte0 = GetQtrTileElementType(topTile, 3);
            qte1 = GetQtrTileElementType(rightTopTile, 0);
            qte2 = GetQtrTileElementType(rightTile, 1);
            qte  = qtrTiles[2];
            if (qte == qte0 && qte == qte1 && qte == qte2)
            {
            }
            else
            {
                isPerfect   = false;
                qtrTiles[2] = QtrTileElementType.None;
            }

            qte0 = GetQtrTileElementType(rightTile, 0);
            qte1 = GetQtrTileElementType(rightBottomTile, 1);
            qte2 = GetQtrTileElementType(bottomTile, 2);
            qte  = qtrTiles[3];
            if (qte == qte0 && qte == qte1 && qte == qte2)
            {
            }
            else
            {
                isPerfect   = false;
                qtrTiles[3] = QtrTileElementType.None;
            }

            return(isPerfect);
        }
Пример #25
0
 public void OnDisable()
 {
     menuToolbar = 0;
     selectedTile = null;
     tileTerrain = null;
 }
Пример #26
0
    public void OnEnable()
    {
        tileTerrain = GetSelectedTerrain();

        if (tileTerrain.settings.chunks != null)
        foreach (PATileTerrainChunk c in tileTerrain.settings.chunks)
        {
            EditorUtility.SetSelectedWireframeHidden(c.gameObject.renderer, true);
        }
        tileTerrain.HideInUnity();
    }