/// <summary> /// 有効化 /// </summary> public void Activate(ToolBox.ShipData shipData, GameManager gm, Color symbolColor) { this.gm = gm; bulletTag = "Bullet"; this.symbolColor = symbolColor; //機体名 shipName = shipData.name; //機体データ this.shipData = shipData; //タグ gameObject.tag = "Ship"; //機体 Activate_Ship(shipData); //ランチャー Activate_Launcher(shipData); //ブースター Activate_Booster(shipData, gm.gameSpeed); //物理演算 Activate_Rigidbody(); //背景 Activate_Background(); //AP関連の準備 maxHP = nowHP = shipData.GetHP(); //エネルギーの準備 maxEnergy = nowEnergy = gm.maxEnergy; energyOutput = gm.energyOutput; }
/// <summary> /// アイテム取得 /// </summary> public void GetItem(UISprite itemSprite, string itemName) { //所持リストに追加 haveItemList.Add(itemName); //SE再生 AudioManager.Instance.PlaySE("ItemGet_1"); //UIに反映 if (indicator.OnGetItem(itemSprite.spriteName, itemSprite.color)) { //溜まったので新しくパーツをくっつける //とりあえずランダムに ToolBox.ShipData addParts = GameManager.Instance.ShipDic_RandomSelect(); ship.AddParts(addParts, Vector3.up * 2f); //表示 int total, normal, missile, optical; addParts.GetLauncherNum(out total, out normal, out missile, out optical); indicator.IndicateLvUp(0, normal, missile, optical); //アイテムストック数を増やす indicator.itemList.AddItemNum(); //HP全回復 ship.SetHP(ship.maxHP); } else { //ラベル表示 LabelManager.Instance.SetLabel("ItemGet!", 2f, transform.position, itemSprite.color, Vector3.one * 8f); } }
/// <summary> /// ボタンクリック /// </summary> protected override void OnSelectButtonClicked(GameObject obj) { //インデックスを求める ToolBox.ShipData shipData = GetShipDataFromObjectName(obj); //イベント送信 NotifyTarget(clickedFunctionName, shipData); }
/// <summary> /// 指定したカテゴリーに新規に機体を保存する /// </summary> public bool ShipDic_SaveAs(string category, ToolBox.ShipData ship) { //カテゴリーが存在するか if (!shipDataDic.ContainsKey(category)) { //新しくカテゴリーを作成 shipDataDic.Add(category, new Dictionary <string, ToolBox.ShipData>()); } //一意なIDを取得する string guid; do { guid = Guid.NewGuid().ToString(); } while(shipDataDic[category].ContainsKey(guid)); //パラメータを設定 ship.id = guid; ship.category = category; //フラグ設定 ship.flagNew = true; ship.flagUpdate = false; //日時の設定 ship.created = ship.updated = DateTime.Now.ToString(); ship.updateNum = 1; //辞書に追加 shipDataDic[category].Add(guid, ship); return(true); }
/// <summary> /// 指定したカテゴリーの指定データを更新する /// </summary> public bool ShipDic_Update(ToolBox.ShipData ship) { //カテゴリー確認 if (!shipDataDic.ContainsKey(ship.category)) { return(false); } //機体が含まれているかを確認 if (!shipDataDic[ship.category].ContainsKey(ship.id)) { return(false); } //フラグ ship.flagNew = false; ship.flagUpdate = true; //日時の設定 ship.updated = DateTime.Now.ToString(); ship.updateNum++; //上書き shipDataDic[ship.category][ship.id] = ship; return(true); }
/// <summary> /// 体力を指定して生成 /// </summary> public T InstantiateEnemy <T>(ToolBox.ShipData shipData, int hp) where T : Enemy { T enemy = gm.InstantiateEnemy <T>(shipData); enemy.ship.SetHP(hp); return(enemy); }
/// <summary> /// 機体パーツリストから機体データを作成する(辞書に登録はしない) /// </summary> public ToolBox.ShipData CreateShipData(List <ToolBox.ShipPartsData> partsList, string name) { ToolBox.ShipData shipData = new ToolBox.ShipData(partsList); //カテゴリー shipData.category = defaultShipCategory; //一意なIDを取得する if (!shipDataDic.ContainsKey(shipData.category)) { shipDataDic.Add(shipData.category, new Dictionary <string, ToolBox.ShipData>()); } string guid; do { guid = Guid.NewGuid().ToString(); } while(shipDataDic[shipData.category].ContainsKey(guid)); shipData.id = guid; //名前 shipData.name = name; //機体サイズ shipData.shipSize = editShipSize.name; //日時の設定 shipData.created = shipData.updated = DateTime.Now.ToString(); shipData.updateNum = 1; //フラグ設定 shipData.flagNew = true; shipData.flagUpdate = false; return(shipData); }
/// <summary> /// カテゴリ、IDを指定して機体を生成 /// </summary> public Ship InstantiateShip(string category, string shipID, Color color) { ToolBox.ShipData shipData = ShipDic_Select(category, shipID); if (shipData == null) { return(null); } return(InstantiateShip(shipData, color)); }
/// <summary> /// 機体を指定して機体を作成 /// </summary> public Ship InstantiateShip(ToolBox.ShipData shipData, Color color) { //機体を実体化 GameObject g = (GameObject)Instantiate(emptyObject); Ship ship = g.AddComponent <Ship>(); //有効化 ship.Activate(shipData, this, color); return(ship); }
/// <summary> /// 機体の有効化 /// </summary> protected void Activate_Ship(ToolBox.ShipData shipData) { //機体パーツを結合したMeshを取得 Mesh m = shipData.GetConnectedMesh(); FuncBox.SetMesh(gameObject, m, gm.shipMaterial); //半径を求める Vector3 size = m.bounds.size / 2f; Vector3 center = FuncBox.Vector3Abs(m.bounds.center); collisionRadius = Vector3.Distance(Vector3.zero, center + size); }
//ShipSelect protected void ShipSelectButtonClicked(ToolBox.ShipData shipData) { //スタックがshipsにくるまでループ indicateStack.StackCheck(ships); //編集ボタンを表示 indicateStack.Push(editButtons); //ゲームパッドのイベント送信先をeditButtonsに gamepadInput.target = editButtons; //編集機体を表示 gm.SetEditShipData(shipData); gm.editShipSize = gm.GetShipSize(shipData.shipSize); }
/// <summary> /// ボタンホバー /// </summary> protected override void OnSelectButtonHover(GameObject obj) { if (enabled) { //データ取得 ToolBox.ShipData shipData = GetShipDataFromObjectName(obj); //データ表示 if (shipDataIndicator) { shipDataIndicator.SetShipData(shipData); } } }
/// <summary> /// ボタンホバー /// </summary> protected override void OnSelectButtonHover(GameObject obj) { //データ取得 ToolBox.ShipData shipData = GetShipDataFromObjectName(obj); //データ表示 if (shipDataIndicator) { shipDataIndicator.Indicate(true); shipDataIndicator.SetShipData(shipData); } //イベント送信 NotifyTarget(hoverFunctionName, shipData); }
/// <summary> /// 外部から機体データを設定,エントリー状態にする /// </summary> public void SetShipData(ToolBox.ShipData shipData) { Entry(); shipDataIndicator.SetShipData(shipData); //gui管理クラスに知らせる gui.SetShipData(((int)index) - 1, shipData); //選択出来ないように if (enabled) { enabled = false; } PlayEntryTween(false); }
/// <summary> /// ボタンクリック /// </summary> protected override void OnSelectButtonClicked(GameObject obj) { if (enabled) { //インデックスを求める ToolBox.ShipData shipData = GetShipDataFromObjectName(obj); //gui管理クラスに知らせる gui.SetShipData(((int)index) - 1, shipData); //選択出来ないように enabled = false; PlayEntryTween(false); } }
/// <summary> /// エネミー用機体を作成(文字列から) /// </summary> public Enemy InstantiateEnemy(string componentName, ToolBox.ShipData shipData) { //色 Color c = enemyColor; //機体を生成 Ship ship = InstantiateShip(shipData, c); //エネミー用コンポーネントをアタッチする Enemy enemy = (Enemy)ship.gameObject.AddComponent(Type.GetType(componentName)); //有効化 enemy.Activate(this, "Enemy", "Enemy"); return(enemy); }
/// <summary> /// エネミー用機体を作成(ジェネリック) /// </summary> public T InstantiateEnemy <T>(ToolBox.ShipData shipData) where T : Enemy { //色 Color c = enemyColor; //機体を生成 Ship ship = InstantiateShip(shipData, c); //エネミー用コンポーネントをアタッチする T enemy = ship.gameObject.AddComponent <T>(); //有効化 enemy.Activate(this, "Enemy", "Enemy"); return(enemy); }
/// <summary> /// ブースターの有効化 /// </summary> protected void Activate_Booster(ToolBox.ShipData ship, float gameSpeed) { if (boosterList == null) { boosterList = new List <BoosterInfo>(); } //ブースター出力 float output = baseBoostOutput; //エフェクト GameObject boost; GameObject highBoost; GameObject quickBoost; foreach (ToolBox.ShipPartsData s in ship.shipPartsList) { foreach (ToolBox.Booster b in s.booster) { //ブースター出力 output += b.performance.output; //ブーストエフェクト boost = (GameObject)Instantiate(gm.GetEffect("Booster_2")); boost.transform.parent = transform; boost.transform.localPosition = b.point + s.offset; boost.transform.localScale = Vector3.one; boost.transform.localEulerAngles = b.angle; //ハイブーストエフェクト highBoost = (GameObject)Instantiate(gm.GetEffect("Booster_3")); highBoost.transform.parent = transform; highBoost.transform.localPosition = b.point + s.offset; highBoost.transform.localScale = Vector3.one; Vector3 angle = b.angle; angle.z -= 60; highBoost.transform.localEulerAngles = angle; //クイックブーストエフェクト quickBoost = (GameObject)Instantiate(gm.GetEffect("QuickBoost_1")); quickBoost.transform.parent = transform; quickBoost.transform.localPosition = b.point + s.offset; quickBoost.transform.localScale = Vector3.one; quickBoost.transform.localEulerAngles = angle; //追加 boosterList.Add(new BoosterInfo(boost, highBoost, quickBoost, symbolColor)); } } boostOutput = output * boostOutputScale * gameSpeed; highBoostOutput = output * highBoostOutputScale * gameSpeed; quickBoostOutput = output * quickBoostScale * gameSpeed; //エフェクトの非表示 IndicateBoostEffect(false); IndicateHighBoostEffect(false); IndicateQuickBoostEffect(false); }
/// <summary> /// プレイヤー用機体を作成 /// </summary> public Player InstantiatePlayer(ToolBox.ShipData shipData, int playerNum = 1) { //色 Color c = playerColor[playerNum - 1]; //機体を生成 Ship ship = InstantiateShip(shipData, c); //プレイヤー用コンポーネントをアタッチする Player player = ship.gameObject.AddComponent <Player>(); //有効化 player.Activate(this, "Player " + playerNum, "Player"); //プレイヤーゲームパッド設定 player.SetGamePad(playerNum, ToolBox.InputType.GamePad, false); return(player); }
//それぞれの設定用関数 public void SetPreview(ToolBox.ShipData shipData) { if (!previewMf) { return; } Mesh m = shipData.GetConnectedMesh(); previewMf.mesh = m; if (!previewCamera) { return; } Vector3 size = m.bounds.size / 2f; Vector3 center = FuncBox.Vector3Abs(m.bounds.center); previewCamera.orthographicSize = Vector3.Distance(Vector3.zero, center + size); }
/// <summary> /// ランチャーの有効化 /// </summary> protected void Activate_Launcher(ToolBox.ShipData ship) { if (launcherDic == null) { launcherDic = new Dictionary <string, Launchers>(); } GameObject bullet; foreach (ToolBox.ShipPartsData s in ship.shipPartsList) { foreach (ToolBox.Launcher l in s.launcher) { //使用していれば辞書に登録する if (l.flagUse) { //弾のインスタンスを取得する ToolBox.Bullet b = gm.bulletDic[l.bulletCategory][l.bulletID]; //インスタンスを取得する bullet = (GameObject)Instantiate(b.instance); bullet.transform.parent = transform; bullet.transform.localPosition = l.point + s.offset; bullet.transform.localEulerAngles = l.angle; //ランチャーの性能を計算する l.totalPerformance = ToolBox.LauncherPerformance.Add(l.basePerformance, b.performance); //ランチャー辞書に登録されているか確認する if (!launcherDic.ContainsKey(l.tag)) { //登録されていなければ新しく項目を作る launcherDic[l.tag] = new Launchers(); } //追加 launcherDic[l.tag].launchers.Add(new LauncherInfo(l, bullet)); } } } //ランチャー辞書の項目毎の処理 foreach (Launchers l in launcherDic.Values) { l.SortLaunchers(); } //リロードを終わらせる ReloadComplete(); }
/// <summary> /// プレイヤーを生成 /// </summary> private Player InstantiatePlayer(ToolBox.ShipData shipData, int playerNo) { Player p = gm.InstantiatePlayer(shipData, playerNo); //VsEnemyの場合はnameの調整 if (gm.playMode == ToolBox.PlayMode.VsEnemy) { p.ship.SetTagAndName("Player", "Player", "Player"); p.notCollisionName = "Player"; } //位置調整 if (gm.selectStage != null) { p.transform.position = gm.selectStage.playerRespawnPos[playerNo - 1] * scale; } //データベースに追加 AddPlayer(p); return(p); }
/// <summary> /// 機体データを一括で表示に設定 /// </summary> public void SetShipData(ToolBox.ShipData shipData) { if (shipData == null) { return; } SetPreview(shipData); SetName(shipData.name); SetHP(shipData.GetHP()); //SetCost(shipData.GetCost()); int total, normal, missile, optical; shipData.GetLauncherNum(out total, out normal, out missile, out optical); SetLauncher(total, normal, missile, optical); float output; shipData.GetBoosterInfo(out total, out output); SetBoost(total, (int)output); SetSize(shipData.shipSize); }
/// <summary> /// ランダムに行動を設定した敵を生成する /// </summary> public Enemy InstantiateRandomActionEnemy(ToolBox.ShipData shipData) { switch (Random.Range(0, 3)) { case 0: //通常 return(InstantiateEnemy <Enemy>(shipData)); case 1: //一人集中 return(InstantiateEnemy <Enemy_Concentration>(shipData)); case 2: //優柔不断 return(InstantiateEnemy <Enemy_Indecision>(shipData)); default: return(null); } }
/// <summary> /// 機体をパーツとして追加する /// </summary> public void AddParts(ToolBox.ShipData addParts, Vector3 offset) { //先に追加分だけを追加 //ランチャー Activate_Launcher(addParts); //ブースター Activate_Booster(addParts, gm.gameSpeed); //パーツの結合 foreach (ToolBox.ShipPartsData parts in addParts.shipPartsList) { //parts.offset += offset; shipData.shipPartsList.Add(parts); } Activate_Ship(shipData); //当たり判定 sCollider.radius = collisionRadius; //背景オブジェクト Destroy(backgroundObjectRenderer.gameObject); Activate_Background(); }
/// <summary> /// 編集機体データを設定(ディープコピーせずに) /// </summary> public void SetEditShipData(ToolBox.ShipData shipData) { editShipData = shipData; }
public float rankYPosOffset = -20f; //ランクによるy座標のずれ #region 関数 /// <summary> /// 有効化 /// </summary> public void Activate(int playerNo, Color color, int rank, ToolBox.PlayerScore playerScore, ToolBox.ShipData shipData) { //表示 Indicate(true); //値の設定 playerNoLabel.text = "Player" + playerNo; if (rankLabel) { rankLabel.text = rank.ToString(); } if (scoreLabel) { scoreLabel.text = playerScore.score.ToString(); } if (killLabel) { killLabel.text = playerScore.kill.ToString(); } if (deadLabel) { deadLabel.text = playerScore.dead.ToString(); } //Mesh mf.mesh = shipData.GetConnectedMesh(); meshCamera.orthographicSize = mf.mesh.bounds.size.y; //色 colorSetter.SetColor(color); //順位によって位置を変更(下位の順位ほど画面上で下へ) float yPos = (rank - 1) * rankYPosOffset; Vector3 pos = transform.localPosition; pos.y += yPos; transform.localPosition = pos; }
/// <summary> /// 敵を生成 /// </summary> public T InstantiateEnemy <T>(ToolBox.ShipData shipData) where T : Enemy { return(gm.InstantiateEnemy <T>(shipData)); }
/// <summary> /// 指定番号に機体データを設定する /// </summary> public void SetShipData(int index, ToolBox.ShipData shipData) { selectShipData[index] = shipData; //参加人数の確認 CheckEntryAndPlayEffect(); }