private void Awake() { MapModel = new MapModel(); Map.GetComponent <MapView>().SetModel(MapModel); CharacterModel = MapModel.Character; Character.GetComponent <CharacterView>().SetModel(CharacterModel); TreasureModel = MapModel.Treasure; Treasure.GetComponent <TreasureView>().SetModel(TreasureModel); }
public MapModel(int characterPositionX = 0, int characterPositionY = 0) { HeadQuarter = new Vector2(characterPositionX, characterPositionY); Character = new CharacterModel(); Character.Init(HeadQuarter, this); GenerateBoardTile(); Maze = new MazeModel(in Tiles); Treasure = new TreasureModel(); }
//210301 宝箱を追加 public void PutTreasure(int x, int z, TreasureModel treasure) { treasure.gameObject.SetActive(true); treasure.transform.SetParent(treasureContainer); //宝箱を表示する位置を設定 treasure.transform.position = cells.First(c => c.X == x && c.Y == z).transform.position; //宝箱の有る座標を設定 これは判定などにも用いる実際の座標 treasure.x = x; treasure.y = z; }
/// <summary> /// 210301 主に移動不可判定に使用 移動先に宝箱があるかを返す /// </summary> /// <param name="moveAbleInfo"></param> /// <returns></returns> private bool IsDestinationTreasureExist(Coordinate coordinate) { //移動先に自分以外の敵が存在するか判定 TreasureModel destinationTreasure = treasureContainer.GetComponentsInChildren <TreasureModel>().FirstOrDefault( c => c.x == coordinate.x && c.y == coordinate.y); //移動先に敵がいる場合、自分自身以外ならそのセルには移動しない if (destinationTreasure != null) { Debug.Log($"宝箱が存在するので移動出来ないセル X={coordinate.x}, Y={coordinate.y}"); return(true); } return(false); }
/// <summary> /// 210301 周囲に宝箱が存在するかを返す /// </summary> /// <param name="startCell"></param> /// <returns></returns> public Coordinate SearchTreasureBox(Main_Cell startCell) { if (startCell == null) { Debug.Log("warn:セルが存在しません"); //画面端だとセルが無い場合がある return(null); } // 四方のマスの座標配列を作成 var aroundCellCoordinates = new Coordinate[] //上下左右の座標配列 { new Coordinate(startCell.X - 1, startCell.Y), //左 new Coordinate(startCell.X + 1, startCell.Y), //右 new Coordinate(startCell.X, startCell.Y - 1), //上 new Coordinate(startCell.X, startCell.Y + 1), //下 }; // 四方のマスの残移動力を計算 上下左右マスの座標を順に取り出し foreach (Coordinate aroundCellCoordinate in aroundCellCoordinates) { //FirstOrDefaultとは? 現在地から上下左右の座標を元にマップの座標を取得 TreasureModel treasureModel = treasureContainer.GetComponentsInChildren <TreasureModel>().FirstOrDefault( c => c.x == aroundCellCoordinate.x && c.y == aroundCellCoordinate.y); //宝箱が有った時点で座標を返す //もし四方に宝箱が有るような状況なら、配列の先頭の要素、左から開け始める if (treasureModel != null) { //空の場合は無いとみなす if (treasureModel.treasureBox.isEmpty) { continue; } Debug.Log($"宝箱を発見 X:{aroundCellCoordinate.x}, Y:{aroundCellCoordinate.y}"); return(aroundCellCoordinate); } } //周囲に宝箱が無ければnullを返す nullチェック注意 return(null); }
/// <summary> /// 210301カーソルを移動させた時、宝箱が有るかどうか判定 /// </summary> /// <param name="x"></param> /// <param name="y"></param> /// <returns></returns> public bool IsTreasureExist(Main_Cell cell) { if (cell == null) { Debug.Log("warn:セルが存在しません"); //画面端だとセルが無い場合がある return(false); } TreasureModel treasureModel = treasureContainer.GetComponentsInChildren <TreasureModel>().FirstOrDefault( c => c.x == cell.X && c.y == cell.Y); //宝箱が有った時点で座標を返す //もし四方に宝箱が有るような状況なら、配列の先頭の要素、左から開け始める if (treasureModel != null) { return(true); } return(false); }
public void SetModel(TreasureModel treasureModel) { Model = treasureModel; }