// 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); }
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; } }
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); } }
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); }
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); } }
// (!) 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); } } }
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); }
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); } } }
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(); } } } }
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; } } } } }
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; } }