예제 #1
0
    // Check if tile is occupied already
    bool CheckTile(int inputPosX, int inputPosY)
    {
        bool output = false;

        foreach (GameObject target in terrainList)
        {
            TerrainCubeData tempData = target.GetComponent <TerrainCubeData> ();

            if (tempData.gridPosition.posX == inputPosX && tempData.gridPosition.posY == inputPosY)
            {
                if (tempData.occupant != null)
                {
                    output = false;
                    break;
                }
                else
                {
                    output = true;
                    break;
                }
            }
        }

        return(output);
    }
예제 #2
0
    public void ShowMovableTerrain()
    {
        switch (playerReference.character)
        {
        case CharacterType.Torito:

            DefineMovableTerrain();

            MapManager._Instance.InitMapTilesMaterial();              // Force Tiling to Cleanup before applying movable terrains

            foreach (GameObject target in MapManager._Instance.terrainList)
            {
                for (int i = 0; i < movablePositions.Count; i++)
                {
                    TerrainCubeData tempData = target.GetComponent <TerrainCubeData> ();

                    if (tempData.gridPosition.posX == movablePositions [i].posX && tempData.gridPosition.posY == movablePositions [i].posY)
                    {
                        tempData.ChangeMaterial(MapManager._Instance.materialPool [6], false);
                    }
                }
            }
            break;

        default:
            break;
        }
    }
예제 #3
0
    void UpdatePosition()
    {
        if (!ObjectFunctions.CheckObjectOutOfBounds(positionX, positionY))
        {
            GameObject      targetTerrain = MapManager._Instance.RequestMapTile(positionX, positionY);
            TerrainCubeData tempData      = targetTerrain.GetComponent <TerrainCubeData> ();

            GetComponentInParent <TerrainCubeData> ().occupant = null;            // sets tile "object-free"! - PREEMPTIVE ACTION TO AVOID MAP BUGGING

            if (CheckOccupiedTerrain(positionX, positionY))
            {
                transform.parent   = null;
                transform.position = Vector3.zero;

                transform.SetParent(targetTerrain.transform, false);
                transform.localPosition = new Vector3(0f, MapManager._Instance.objectOffset, 0f);
                tempData.occupant       = gameObject;
            }
        }
        else
        {
//			GetComponent<EnemyData> ().DestroyEnemy ();

            ObjectFunctions.DestroyObject(gameObject);
        }
    }
예제 #4
0
    bool OnAdjacentCheck(TerrainCubeData inputData, ObjectFacing inputFacing)
    {
        GameObject adjacentTile;

        bool output = false;


        switch (inputFacing)
        {
        case ObjectFacing.North:
            adjacentTile = MapManager._Instance.RequestMapTile(inputData.gridPosition.posX, inputData.gridPosition.posY + 1);
            if (adjacentTile != null)
            {
                print("Checking North");
                output = true;
            }
            break;

        case ObjectFacing.South:
            adjacentTile = MapManager._Instance.RequestMapTile(inputData.gridPosition.posX, inputData.gridPosition.posY - 1);
            if (adjacentTile != null)
            {
                print("Checking South");
                output = true;
            }
            break;

        case ObjectFacing.East:
            adjacentTile = MapManager._Instance.RequestMapTile(inputData.gridPosition.posX + 1, inputData.gridPosition.posY);
            if (adjacentTile != null)
            {
                print("Checking East");
                output = true;
            }
            break;

        case ObjectFacing.West:
            adjacentTile = MapManager._Instance.RequestMapTile(inputData.gridPosition.posX - 1, inputData.gridPosition.posY);
            if (adjacentTile != null)
            {
                print("Checking West");
                output = true;
            }
            break;

        default:
            break;
        }

        return(output);
    }
예제 #5
0
 void GenerateTileMap()
 {
     for (int i = 0; i < sizeX; i++)
     {
         for (int j = 0; j < sizeY; j++)
         {
             GameObject      go       = GameObject.Instantiate(terrainObject, correctedPosition, transform.rotation);
             TerrainCubeData tempData = go.GetComponent <TerrainCubeData> ();
             terrainList.Add(go);
             tempData.gridPosition.posX = i;
             tempData.gridPosition.posY = j;
             correctedPosition          = new Vector3(correctedPosition.x, 0f, correctedPosition.z + gridOffset);
         }
         correctedPosition = new Vector3(correctedPosition.x + gridOffset, 0f, -4.5f);
     }
 }
예제 #6
0
    // (!) Generate test block in Coord (3,3) and (4,2).

    void CreateMapObject(GameObject inputObject, ObjectFacing inputFacing, int inputPosX, int inputPosY)
    {
        foreach (GameObject target in terrainList)
        {
            TerrainCubeData tempData = target.GetComponent <TerrainCubeData> ();

            if (tempData.gridPosition.posX == inputPosX && tempData.gridPosition.posY == inputPosY && CheckTile(inputPosX, inputPosY))
            {
                print("Generating: " + inputObject.name + " in " + inputPosX + "," + inputPosY);
                GameObject go = GameObject.Instantiate(inputObject, Vector3.zero, transform.rotation);
                go.transform.SetParent(target.transform, false);
                go.transform.localPosition = new Vector3(0f, objectOffset, 0f);
                tempData.occupant          = go;
                ObjectPostConfig(go, inputFacing);
            }
        }
    }
예제 #7
0
    public GameObject RequestMapTile(int inputX, int InputY)
    {
        GameObject output = null;

        foreach (GameObject target in terrainList)
        {
            TerrainCubeData tempData = target.GetComponent <TerrainCubeData> ();

            if (tempData.gridPosition.posX == inputX && tempData.gridPosition.posY == InputY)
            {
                output = target;
                break;
            }
        }

        return(output);
    }
예제 #8
0
    private void OnSaveButton()
    {
        Debug.Log("Save Scene Data");
        var fileName = CheckFileName(saveInput.text);

        if (!string.IsNullOrEmpty(fileName))
        {
            // Hack:由于复制构造不经过ScenePlayer,因此数据也不从ScenePlayer获得
            var data         = new SceneData();
            var items        = FindObjectsOfType <MapItem>();
            var cubes        = FindObjectsOfType <TerrainCube>();
            var itemDataList = new List <SceneItemData>();
            var cubeDatalist = new List <TerrainCubeData>();
            for (int i = 0; i < items.Length; i++)
            {
                // Hack:复制构造没有typeData
                var sceneItemData = new SceneItemData();
                sceneItemData.mapItemId = 1;
                sceneItemData.position  = items[i].transform.position.ToSerilizable();
                sceneItemData.rotation  = items[i].transform.rotation.ToSerilizable();
                itemDataList.Add(sceneItemData);
            }
            for (int i = 0; i < cubes.Length; i++)
            {
                var cubeItemData = new TerrainCubeData();
                cubeItemData.terrainId = 1;
                var bounds = cubes[i].GetComponent <BoxCollider>().bounds;
                cubeItemData.minValue = bounds.min.ToSerilizable();
                cubeItemData.maxValue = bounds.max.ToSerilizable();
                cubeDatalist.Add(cubeItemData);
            }
            data.itemData    = itemDataList;
            data.terrainData = cubeDatalist;

            using (var fs = File.Open(fileName, FileMode.Create, FileAccess.Write))
            {
                var serializer = new XmlSerializer(typeof(SceneData));
                serializer.Serialize(fs, data);
            }
        }
    }
예제 #9
0
    public void OnPointAction(Vector3 pointVector)
    {
        pointerRay = Camera.main.ScreenPointToRay(pointVector);
//		print ("RAY");

        if (Physics.Raycast(pointerRay.origin, pointerRay.direction * 10, out pointerData))
        {
            Debug.Log(pointerData.transform.name);
            TerrainCubeData tempData = pointerData.transform.GetComponent <TerrainCubeData> ();

            if (pointerData.transform.tag == "MapTerrain")
            {
                if (CheckSelectedTerrain(tempData.gridPosition))
                {
                    transform.parent.GetComponent <TerrainCubeData> ().occupant = null;
                    transform.parent   = null;
                    transform.position = Vector3.zero;

                    transform.SetParent(pointerData.transform, false);
                    transform.localPosition = new Vector3(0f, MapManager._Instance.objectOffset, 0f);
                    tempData.occupant       = gameObject;

                    //Call a facing selector before updating to NEW position.
                    SetFacingDirection(positionX, positionY, tempData.gridPosition.posX, tempData.gridPosition.posY);
                    UpdateFacing();

                    positionX = tempData.gridPosition.posX;
                    positionY = tempData.gridPosition.posY;

                    // Update facing-rotation in HERE
                    UpdateFacing();

                    playerReference.InputToggleCharacterAbility();
                    ShowMovableTerrain();
                }
            }
        }
    }
예제 #10
0
    public void OnAbilityCheckTerrain()
    {
        ObjectFacing facingSample;

        int moveRangeX = MapManager._Instance.sizeX;
        int moveRangeY = MapManager._Instance.sizeY;

        int tempX = movementReference.positionX;
        int tempY = movementReference.positionY;

        if (selectableTargets.Count != 0)
        {
            selectableTargets.Clear();
        }

        if (playerReference.isAbilityActive)
        {
            // X+ Check - East
            for (int i = tempX; i < moveRangeX; i++)
            {
                facingSample = ObjectFacing.East;

                GameObject targetObject = MapManager._Instance.RequestMapTile(i + 1, tempY);

//			print ("TargetObject: " + targetObject.transform.name);

                if (targetObject != null)
                {
                    TerrainCubeData tempData = targetObject.GetComponent <TerrainCubeData> ();

                    if (tempData.occupant == null)
                    {
                        tempData.ChangeMaterial(MapManager._Instance.materialPool [7], false);
                    }
                    else
                    {
                        // Insert Code Check Condition Here!
                        SelectTargetObjectType(tempData.occupant.GetComponent <MapObjectData> ().type, tempData, targetObject, facingSample);
                        lastObjectChecked = null;
                        break;
                    }
                    lastObjectChecked = targetObject;
                }
                else
                {
                    if (lastObjectChecked != null)
                    {
                        lastObjectChecked.GetComponent <TerrainCubeData>().ChangeMaterial(MapManager._Instance.materialPool[3], false);
                        selectableTargets.Add(lastObjectChecked.GetComponent <TerrainCubeData>().gridPosition);
                        lastObjectChecked = null; // Last object cleanup after finishing line sweep.
                        break;
                    }
                }
            }

            // Y+ Check - North
            for (int i = tempY; i < moveRangeY; i++)
            {
                facingSample = ObjectFacing.North;

                GameObject targetObject = MapManager._Instance.RequestMapTile(tempX, i + 1);

//				print ("Current TilePosition: " + targetObject.GetComponent<TerrainCubeData>().gridPosition.posY);

                if (targetObject != null)
                {
                    TerrainCubeData tempData = targetObject.GetComponent <TerrainCubeData> ();

                    if (tempData.occupant == null)
                    {
                        tempData.ChangeMaterial(MapManager._Instance.materialPool [7], false);
                    }
                    else
                    {
                        SelectTargetObjectType(tempData.occupant.GetComponent <MapObjectData> ().type, tempData, targetObject, facingSample);
                        lastObjectChecked = null;
                        break;
                    }

                    lastObjectChecked = targetObject;
                }
                else
                {
                    if (lastObjectChecked != null)
                    {
                        lastObjectChecked.GetComponent <TerrainCubeData>().ChangeMaterial(MapManager._Instance.materialPool[3], false);
                        selectableTargets.Add(lastObjectChecked.GetComponent <TerrainCubeData>().gridPosition);
                        lastObjectChecked = null; // Last object cleanup after finishing line sweep.
                        break;
                    }
                }
            }

            // X- Check - West
            for (int i = tempX; i >= 0; i--)
            {
                facingSample = ObjectFacing.West;

                GameObject targetObject = MapManager._Instance.RequestMapTile(i - 1, tempY);

                //			print ("TargetObject: " + targetObject.transform.name);

                if (targetObject != null)
                {
                    TerrainCubeData tempData = targetObject.GetComponent <TerrainCubeData> ();

                    if (tempData.occupant == null)
                    {
                        tempData.ChangeMaterial(MapManager._Instance.materialPool [7], false);
                    }
                    else
                    {
                        SelectTargetObjectType(tempData.occupant.GetComponent <MapObjectData> ().type, tempData, targetObject, facingSample);
                        lastObjectChecked = null;
                        break;
                    }

                    lastObjectChecked = targetObject;
                }
                else
                {
                    if (lastObjectChecked != null)
                    {
                        lastObjectChecked.GetComponent <TerrainCubeData>().ChangeMaterial(MapManager._Instance.materialPool[3], false);
                        selectableTargets.Add(lastObjectChecked.GetComponent <TerrainCubeData>().gridPosition);
                        lastObjectChecked = null; // Last object cleanup after finishing line sweep.
                        break;
                    }
                }
            }

            // Y- Check - South
            for (int i = tempY; i >= 0; i--)
            {
                facingSample = ObjectFacing.South;

                GameObject targetObject = MapManager._Instance.RequestMapTile(tempX, i - 1);

                if (targetObject != null)
                {
                    TerrainCubeData tempData = targetObject.GetComponent <TerrainCubeData> ();

                    if (tempData.occupant == null)
                    {
                        tempData.ChangeMaterial(MapManager._Instance.materialPool[7], false);
                    }
                    else
                    {
                        SelectTargetObjectType(tempData.occupant.GetComponent <MapObjectData> ().type, tempData, targetObject, facingSample);
                        lastObjectChecked = null;
                        break;
                    }

                    lastObjectChecked = targetObject;
                }
                else
                {
                    if (lastObjectChecked != null)
                    {
                        lastObjectChecked.GetComponent <TerrainCubeData>().ChangeMaterial(MapManager._Instance.materialPool[3], false);
                        selectableTargets.Add(lastObjectChecked.GetComponent <TerrainCubeData>().gridPosition);
                        lastObjectChecked = null; // Last object cleanup after finishing line sweep.
                        break;
                    }
                }
            }
        }
    }
예제 #11
0
    void SelectTargetObjectType(ObjectType inputType, TerrainCubeData inputData, GameObject inputTerrain, ObjectFacing inputFacing)
    {
        switch (inputType)
        {
        // Case doesn't allow movement effect on wall.
        case ObjectType.Wall:

            // Preemptive check to avoid null-reference if Player is adyacent to a wall.
            if (lastObjectChecked != null)
            {
                selectableTargets.Add(lastObjectChecked.GetComponent <TerrainCubeData>().gridPosition);
                lastObjectChecked.GetComponent <TerrainCubeData>().ChangeMaterial(MapManager._Instance.materialPool[3], false);
            }
            break;

        case ObjectType.Enemy:
            if (lastObjectChecked != null)
            {
                selectableTargets.Add(inputTerrain.GetComponent <TerrainCubeData>().gridPosition);
                inputData.ChangeMaterial(MapManager._Instance.materialPool[3], false);
            }
            break;


        case ObjectType.Goal:
            if (lastObjectChecked != null)
            {
                selectableTargets.Add(inputTerrain.GetComponent <TerrainCubeData> ().gridPosition);
                inputData.ChangeMaterial(MapManager._Instance.materialPool [3], false);
            }
            break;

        case ObjectType.Player:
            if (lastObjectChecked != null)
            {
                selectableTargets.Add(inputTerrain.GetComponent <TerrainCubeData>().gridPosition);
                inputData.ChangeMaterial(MapManager._Instance.materialPool[3], false);
            }

            break;

        case ObjectType.DirectionalMove:
            if (CheckFacing(inputFacing, inputTerrain.GetComponent <TerrainCubeData> ().occupant.GetComponent <ObjectMovement> ().facingConfig))
            {
                selectableTargets.Add(inputTerrain.GetComponent <TerrainCubeData> ().gridPosition);
                inputData.ChangeMaterial(MapManager._Instance.materialPool [3], false);
            }
            else
            {
                if (lastObjectChecked != null)
                {
                    selectableTargets.Add(lastObjectChecked.GetComponent <TerrainCubeData>().gridPosition);
                    lastObjectChecked.GetComponent <TerrainCubeData>().ChangeMaterial(MapManager._Instance.materialPool[3], false);
                }
            }
            break;

        default:
            break;
        }
    }