// Update is called once per frame void Update() { if (timer >= period) { if (towers.Size < maxTowers * multTowers) { Vector3 newPos = grid.Draw(); Tower newT = new Tower(newPos); newT.Add(buildy, transform); towers.Add(newT, multTowers); towers.Shuffle(); ++curBlocks; } else if (curBlocks < maxBlocks) { Tower curT = towers.Draw(); curT.Add(buildy, transform); ++curBlocks; } timer = 0; } timer += Time.deltaTime; }
public void TestTowerOfHanoi() { Tower source = new Tower(); source.Add(4); source.Add(3); source.Add(2); source.Add(1); Tower dest = new Tower(); Tower buffer = new Tower(); source.MoveDisks(4, dest, buffer); Console.ReadKey(); }
public static void FindEmpTower(int direction, FieldIndex ind, Field<bool> taken, ref List<Tower> buildList) { //Debug.Log("Finding 2nd piece forward on "+tmp.ToString()); Tower newTower = new Tower(); FieldIndex tmp = ind.Up(direction); newTower.Add(ind); newTower.Add(tmp); newTower.type = TowerType.silence; ind = tmp; FieldIndex right = ind.Right(direction); FieldIndex left = ind.Left(direction); bool left_tower = left.index != -1 && taken[left] == true; bool right_tower = right.index != -1 && taken[right] == true; if(left_tower && right_tower){ // Debug.Log("Finding 3rd piece forward on "+tmp.ToString()); Tower rightTower = newTower.Copy(); newTower.Add(left); //Debug.Log(newTower.ToString()); rightTower.Add(right); //Debug.Log(rightTower.ToString()); tmp = left.Up(direction); FieldIndex tmpRight = right.Up(direction); if(tmp.index != -1 && taken[tmp]==true){ newTower.Add(tmp); // Debug.Log(newTower.ToString()); buildList.Add(newTower); } if(tmpRight.index != -1 && taken[tmpRight]==true){ rightTower.Add(tmpRight); // Debug.Log(newTower.ToString()); buildList.Add(rightTower); } } else if(left_tower){ newTower.Add(left); tmp = left.Up(direction); if(tmp.index != -1 && taken[tmp]==true){ newTower.Add(tmp); // Debug.Log(newTower.ToString()); buildList.Add(newTower); } } else if(right_tower){ newTower.Add(right); tmp = right.Up(direction); if(tmp.index != -1 && taken[tmp]==true){ newTower.Add(tmp); // Debug.Log(newTower.ToString()); buildList.Add(newTower); } } }
public void MoveToTop(Tower t) { int top = disks.Pop (); t.Add (top); }
public static void FindSquareTower(int direction, FieldIndex ind, Field<bool> taken, ref List<Tower> buildList) { Tower newTower = new Tower(); newTower.type = TowerType.skillCap; //Debug.Log("Found 2nd piece forward on "+ind.ToString()); newTower.Add(ind); FieldIndex tmp = ind.Up(direction); newTower.Add(tmp); ind = tmp.Right(direction); //Debug.Log("Looking for 3rd piece forward on "+tmp.ToString()); if(ind.index != -1 && taken[ind]==true){ newTower.Add(ind); ind = ind.Down(direction); //Debug.Log("Looking for 4th piece right on "+tmp.ToString()); if(ind.index != -1 && taken[ind]==true){ newTower.Add(ind); // Debug.Log(newTower.ToString()); buildList.Add(newTower); } } }
public static void FindShootTower(int direction, FieldIndex ind, Field<bool> taken, ref List<Tower> buildList) { //Debug.Log("Finding 2nd piece forward on "+tmp.ToString()); Tower newTower = new Tower(); FieldIndex tmp = ind.Up(direction); newTower.Add(ind); newTower.Add(tmp); newTower.type = TowerType.shoot; ind = tmp; FieldIndex left = ind.Left(direction); FieldIndex right = ind.Right(direction); bool left_tower = left.index != -1 && taken[left] == true; bool right_tower = right.index != -1 && taken[right] == true; if(left_tower && right_tower){ //Shoot tower found. newTower.Add(left); newTower.Add(right); // Debug.Log(newTower.ToString()); buildList.Add(newTower); } }
public static void FindFiveTower(int direction, FieldIndex ind, Field<bool> taken, ref List<Tower> buildList) { Tower newTower = new Tower(); FieldIndex tmp = ind.Up(direction); newTower.Add(ind); newTower.Add(tmp); newTower.type = TowerType.five; ind = tmp; tmp = ind.Up(direction); if(tmp.index != -1 && taken[tmp] == true){ newTower.Add(tmp); ind = tmp; tmp = ind.Up(direction); if(tmp.index != -1 && taken[tmp] == true){ newTower.Add(tmp); ind = tmp; tmp = ind.Up(direction); if(tmp.index != -1 && taken[tmp] == true){ newTower.Add(tmp); // Debug.Log(newTower.ToString()); buildList.Add(newTower); } } } }
public void MoveTopTo(Tower tower) { var top = _disks.Pop(); tower.Add(top); }
public void MoveTopTo(Tower t) { int top = _disks.Pop(); t.Add(top); }
public void MoveTopDiscToTower(Tower dest) { dest.Add(stack.Pop()); }
// 更新・メイン void UpdateMain() { // 敵生成管理の更新 _enemyGenerator.Update(); // 配置できるかどうか判定 if (_cursor.Placeable == false) { // 配置できないのでここでおしまい return; } // カーソルの下にあるオブジェクトをチェック int mask = 1 << LayerMask.NameToLayer("Tower"); Collider2D col = Physics2D.OverlapPoint(_cursor.GetPosition(), mask); _selObj = null; if (col != null) { // 選択中のオブジェクトを格納 _selObj = col.gameObject; } // マウスクリック判定 if (Input.GetMouseButtonDown(0) == false) { //クリックしていないので以下の処理は不要 return; } if (_selObj != null) { // 砲台をクリックした // 選択した砲台オブジェクトを取得 _selTower = _selObj.GetComponent <Tower>(); // アップグレードモードに移行する ChangeSelMode(eSelMode.Upgrade); } switch (_selMode) { case eSelMode.Buy: if (_cursor.SelObj == null) { // 所持金を減らす int cost = Cost.TowerProduction(); Global.UseMoney(cost); // 何もないので砲台を配置 Tower.Add(_cursor.X, _cursor.Y); // 次のタワーの生産コストを取得する int cost2 = Cost.TowerProduction(); if (Global.Money < cost2) { // お金が足りないので通常モードに戻る ChangeSelMode(eSelMode.None); } } break; } }
void Start() { // ゲームパラメータ初期化 Global.Init(); // 敵管理を生成 Enemy.parent = new TokenMgr <Enemy>(); Enemy.parent.AddToken("Enemy", 128); Enemy.parent.AddToken("Enemy2", 128); //Enemy2.parent = new TokenMgr<Enemy2>("Enemy2", 128); // ショット管理を生成 Shot.parent = new TokenMgr <Shot>("Shot", 128); // パーティクル管理を生成 Particle.parent = new TokenMgr <Particle>("Particle", 256); // タワー管理を生成 Tower.parent = new TokenMgr <Tower>("Tower", 64); Tower2.parent = new TokenMgr <Tower2>("Tower2", 64); // マップ管理を生成 // プレハブを取得 GameObject prefab = null; prefab = Util.GetPrefab(prefab, "Field"); // インスタンス生成 Field field = Field.CreateInstance2 <Field>(prefab, 0, 0); // マップ読み込み field.Load(); // パスを取得 _path = field.Path; _path2 = field.Path2; // コリジョンレイヤーを取得 _lCollision = field.lCollision; _lCollision2 = field.lCollision2; // カーソルを取得 _cursor = GameObject.Find("Cursor").GetComponent <Cursor>(); _cursor2 = GameObject.Find("Cursor2").GetComponent <Cursor2>(); // GUIを生成 _gui = new Gui(); _gui2 = new Gui2(); // 敵生成管理を生成 _enemyGenerator = new EnemyGenerator(_path); _enemyGenerator2 = new EnemyGenerator2(_path2); // Wave開始演出を取得 _waveStart = MyCanvas.Find <WaveStart>("TextWaveStart"); // 射程範囲カーソルを取得する _cursorRange = GameObject.Find("CursorRange").GetComponent <CursorRange>(); // 初期状態は選択しないモード ChangeSelMode(eSelMode.None); ChangeSelMode2(eSelMode2.None); //初期タワー配置 Tower.Add(-1.12f, -1.76f); Tower2.Add(1.12f, -1.76f); }
// 更新・メイン void UpdateMain() { // 敵生成管理の更新 _enemyGenerator.Update(); _enemyGenerator2.Update(); // カーソルの下にあるオブジェクトをチェック int mask = 1 << LayerMask.NameToLayer("Tower"); Collider2D col = Physics2D.OverlapPoint(_cursor.GetPosition(), mask); _selObj = null; if (col != null) { // 選択中のオブジェクトを格納 _selObj = col.gameObject; } // カーソルの下にあるオブジェクトをチェック int mask2 = 1 << LayerMask.NameToLayer("Tower"); Collider2D col2 = Physics2D.OverlapPoint(_cursor2.GetPosition(), mask2); _selObj2 = null; if (col2 != null) { // 選択中のオブジェクトを格納 _selObj2 = col2.gameObject; } if (Input.GetButtonDown("Done1p")) { if (_selObj != null) { // 砲台をクリックした // 選択した砲台オブジェクトを取得 _selTower = _selObj.GetComponent <Tower>(); // アップグレードモードに移行する ChangeSelMode(eSelMode.Upgrade); } else { switch (_selMode) { case eSelMode.Buy: if (_cursor.SelObj == null) { if (_cursor.Placeable) { if (_cursor._Placeable) { // 所持金を減らす int cost = Cost.TowerProduction(); if (Global.Money < cost) { // お金が足りないので通常モードに戻る ChangeSelMode(eSelMode.None); } else { Global.UseMoney(cost); // 何もないので砲台を配置 Tower.Add(_cursor.X, _cursor.Y); // 次のタワーの生産コストを取得する int cost2 = Cost.TowerProduction2(); if (Global.Money < cost) { // お金が足りないので通常モードに戻る ChangeSelMode(eSelMode.None); } } } } } break; case eSelMode.None: ChangeSelMode(eSelMode.Buy); break; case eSelMode.Upgrade: ChangeSelMode(eSelMode.None); break; } } } if (Input.GetButtonDown("Done2p")) { if (_selObj2 != null) { // 砲台をクリックした // 選択した砲台オブジェクトを取得 _selTower2 = _selObj2.GetComponent <Tower2>(); // アップグレードモードに移行する ChangeSelMode2(eSelMode2.Upgrade); } else { switch (_selMode2) { case eSelMode2.Buy: if (_cursor2.SelObj == null) { if (_cursor2.Placeable) { if (_cursor2._Placeable) { // 所持金を減らす int cost = Cost.TowerProduction(); if (Global.Money2 < cost) { // お金が足りないので通常モードに戻る ChangeSelMode2(eSelMode2.None); } else { Global.UseMoney2(cost); // 何もないので砲台を配置 Tower2.Add(_cursor2.X, _cursor2.Y); // 次のタワーの生産コストを取得する int cost2 = Cost.TowerProduction2(); if (Global.Money2 < cost2) { // お金が足りないので通常モードに戻る ChangeSelMode2(eSelMode2.None); } } } } } break; case eSelMode2.None: ChangeSelMode2(eSelMode2.Buy); break; case eSelMode2.Upgrade: ChangeSelMode2(eSelMode2.None); break; } } } if (Input.GetButtonDown("Range1p")) { OnClickRange(); } if (Input.GetButtonDown("Range2p")) { OnClickRange2(); } if (Input.GetButtonDown("Firerate1p")) { OnClickFirerate(); } if (Input.GetButtonDown("Firerate2p")) { OnClickFirerate2(); } if (Input.GetButtonDown("Power1p")) { OnClickPower(); } if (Input.GetButtonDown("Power2p")) { OnClickPower2(); } }