// 雑魚関連 private BattleCharacterModel CreateZakoCharacter(GameObject prefab, bool isEnemy, uint characterId) { if (prefab == null) { return(null); } // オブジェクトの生成 GameObject zakoObject = CreateObject(prefab); if (zakoObject == null) { return(null); } // キャラクタのモデルの生成 var view = new BattleViewModel(new Chocolate.Battle.Object.Model.Transform(zakoObject.transform)); DirectorModel director = null; if (isEnemy) { director = new EnemyZakoDirectorModel(); } else { director = new PlayerZakoDirectorModel(); } var characterModel = new CharacterRepository().Get(characterId); return(BattleCharacterModel.CreateCharacter(view, director, characterModel)); }
protected void BurnInternal(Vector3 startPosition, Vector3 endPosition, BattleCharacterModel zako) { // 生成と初期座標のセット zako.View.RootTransform.SetPosition(startPosition); // 雑魚を放出のメッセージを作成 EmittingDirectorParamater parameter = new EmittingDirectorParamater(); parameter.Position = endPosition; // メッセージを送信 zako.ReciveMessage("EmittingFromBettery", parameter); }
// 敵ののチャンピオンをセットする public void SetEnemyChampion(BattleCharacterModel character) { enemyChampion = character; }
// public ------------------------- // プレイヤーのチャンピオンをセットする public void SetPlayerChampion(BattleCharacterModel character) { playerChampion = character; }
public override void OnUpdate() { BattleCharacterModel model = targetModel as BattleCharacterModel; // 数秒おきにスキルを発動 skillTime += Time.deltaTime; if (skillTime > skillTimeLimit) { model.Skills.Invoke(BattleSkillsModel.SlotNumber.Slot1); skillTime = 0; } // スキルポイントが溜まっていたらランクアップする if (model.Skills.CanRankUp(BattleSkillsModel.SlotNumber.Slot1)) { model.Skills.RankUp(BattleSkillsModel.SlotNumber.Slot1); } // 数秒ごとに一番近い雑魚に焦点をあわせる waitTime += Time.deltaTime; if (waitTime > waitTimeLimit) { if (movableTarget == null || isAvairable) { // ターゲットが存在しない場合は一番近い雑魚に移動する。 float minLength = float.MaxValue; for (int zakoIndex = 0; zakoIndex < BattleGlobal.Instance.PlayerZakoGroup.Zakos.Count; zakoIndex++) { var zako = BattleGlobal.Instance.PlayerZakoGroup.Zakos [zakoIndex]; if (!zako.View.IsCollisionEnable) { continue; } // 雑魚とキャラの虚栄を取得 var length = (zako.View.RootTransform.GetPosition() - targetModel.View.RootTransform.GetPosition()).magnitude; // 一番距離の近い雑魚をターゲットにする if (length < minLength) { minLength = length; movableTarget = zako; lengthFromZako = zako.View.GetCollision().Radius + model.View.GetCollision().Radius; } } if (movableTarget != null) { isAvairable = false; } } waitTime = 0; } // 存在しない場合は移動しない if (movableTarget == null || movableTarget.Life.IsDead()) { movableTarget = null; return; } // 存在しているが到着している場合は向きのみかえる if (isAvairable) { // 向きを変更 targetModel.View.Direction = movableTarget.View.RootTransform.GetPosition() - targetModel.View.RootTransform.GetPosition(); return; } // 移動する( 本当は共通化したい ) ---------------- // 移動先を決定 Vector3 destinationPosition = movableTarget.View.RootTransform.GetPosition(); // 移動方向を決める Vector3 vec = (destinationPosition - targetModel.View.RootTransform.GetPosition()).normalized; // 移動 targetModel.View.RootTransform.SetPosition(targetModel.View.RootTransform.GetPosition() + vec * speed); // もしターゲットが雑魚の前方で止まる destinationPosition -= vec * lengthFromZako; //到着したら到着メッセージを送る if ((destinationPosition - targetModel.View.RootTransform.GetPosition()).magnitude < 0.5f) { isAvairable = true; } // 移動方向を設定 targetModel.View.Direction = vec; }
public void AddZako(BattleCharacterModel zako) { zakos.Add(zako); }