private List <PlayerController> ThirdPartyPlayers; // 행동이 통찰인 경우에, 행동 대상의 추정 목표 대상 두 명을 지정 // 행동 객체의 생성자입니다. public Behavior(BasicBehavior behavior, PlayerController subjectPlayer, List <PlayerController> objectPlayers = null, List <PlayerController> thirdPartyPlayers = null) { this.behavior = behavior; SubjectPlayer = subjectPlayer; ObjectPlayers = objectPlayers; ThirdPartyPlayers = thirdPartyPlayers; }
public void SetUp() { _page = MockRepository.GenerateStub <IFubuPage>(); _partialFactory = MockRepository.GenerateStub <IPartialFactory>(); _behavior = new WrappingBehavior(); PartialInvokingHandler = MockRepository.GenerateStub <IPartialInvokingHandler>(); _behavior.InsideBehavior = new PartialHandlingBehavior(); _partialFactory.Stub(f => f.BuildPartial(typeof(InputModel))).Return(_behavior); _page.Stub(p => p.Get <IPartialFactory>()).Return(_partialFactory); _request = MockRepository.GenerateStub <IFubuRequest>(); _page.Stub(p => p.Get <IFubuRequest>()).Return(_request); }
/// <summary> /// 인자로 주어진 행동 종류에 따른 스킬 종류를 반환합니다. 올바른 행동 종류가 아니면 -1을 반환합니다. /// </summary> /// <param name="bb">행동 종류</param> /// <returns>기본 행동이면 0, 캐릭터 고유 스킬이면 1, 공용 스킬이면 2를 반환합니다.</returns> public static int GetSkillType(BasicBehavior bb) { if (bb == null) { return(-1); } foreach (BehaviorInfo bi in behaviorInfo) { if (bi.GetBehaviorName().Equals(bb.Name)) { return(bi.GetSkillType()); } } return(-1); }
/// <summary> /// 자신의 행동을 결정하는 함수입니다. 행동 이름을 우선 결정하고, 대상을 결정하는 Coroutine을 호출합니다. /// </summary> /// <param name="behaviorName">행동 이름</param> public void MakeBehavior(string behaviorName) { // 자신이 사망했거나 빙결되어 행동할 수 없는 경우 if (isDead || isFreezed || bm.GetEnd()) { if (playerNum == 1) { Debug.Log("You cannot make behavior."); } return; } BasicBehavior bb = new BasicBehavior(behaviorName); // 행동 이름이 존재하지 않는 경우 int skillType = BehaviorManager.GetSkillType(bb); if (skillType == -1) { Debug.LogWarning("Bad behavior in MakeBehavior."); return; } // 행동이 스킬이고 자신이 침묵되어 스킬을 사용할 수 없는 경우 else if ((skillType == 1 || skillType == 2) && isSilenced) { Debug.Log("You cannot invoke skill in this turn."); return; } // 행동에 필요한 마나가 부족한 경우 if (!BehaviorManager.EnoughMana(bb, mana)) { Debug.Log("Not enough mana."); return; } // 행동에서 지정해야 하는 대상 수가 지정 가능한 대상 수보다 많은 경우 if (!BehaviorManager.TargetsExist(bb, this)) { Debug.Log("Targets don't exist."); return; } // TODO 다수 대상 행동을 지정할 대상이 없을 때 행동을 제한할 필요가 있다. // TODO 이때 인공지능의 경우 다른 행동으로 다시 결정하게 할 필요가 있다. 지금은 여기서 return하면 그 턴에 아무 행동도 결정하지 않는다. behavior = new Behavior(bb, this); isTargetDecide = true; StartCoroutine("SelectTarget", behavior); }
/// <summary> /// 인자로 주어진 행동 종류를 수행하는 데 필요한 마나보다 인자로 주어진 마나가 적지 않은지 확인합니다. 올바른 행동 종류가 아니면 false를 반환합니다. /// </summary> /// <param name="bb">행동 종류</param> /// <param name="mana">행동 주체의 현재 마나</param> /// <returns>행동에 필요한 마나가 충분하면 true, 마나가 부족하면 false를 반환합니다.</returns> public static bool EnoughMana(BasicBehavior bb, int mana) { if (bb == null) { return(false); } foreach (BehaviorInfo bi in behaviorInfo) { if (bi.GetBehaviorName() == bb.Name) { if (mana >= bi.GetConsumedMana()) { return(true); } else { return(false); } } } return(false); }
public static bool TargetsExist(BasicBehavior bb, PlayerController subject) { if (bb == null) { return(false); } foreach (BehaviorInfo bi in behaviorInfo) { if (bi.GetBehaviorName() == bb.Name) { if (bi.GetTargetMyself()) { if (bi.GetTargetNumber() <= bm.TargetableNumber()) { return(true); } else { return(false); } } else { if (bi.GetTargetNumber() <= bm.TargetableNumberExceptOneself(subject)) { return(true); } else { return(false); } } } } return(false); }
void Awake() { bb = transform.parent.gameObject.GetComponent(typeof(BasicBehavior)) as BasicBehavior; }
public void SetBehavior(BasicBehavior behavior) { this.behavior = behavior; }