コード例 #1
0
ファイル: LogicMap.cs プロジェクト: eakuznec/BadDetective_old
 private void RealizeFunction(LogicFunction function, bool isTest = false)
 {
     if (function is LogicSplitter)
     {
         List <LogicFunction> outputs = ((LogicSplitter)function).actionOutputs;
         for (int i = 0; i < outputs.Count; i++)
         {
             ((LogicSplitter)function).realizeOutputs[i] = true;
             RealizeFunction(outputs[i], isTest);
         }
     }
     else if (function is DataSplitter)
     {
         DataSplitter dataSplitter = (DataSplitter)function;
         bool         result       = dataSplitter.GetResult();
         if (result)
         {
             dataSplitter.realizeTrue = true;
             RealizeFunction(dataSplitter.trueOutput, isTest);
         }
         else
         {
             dataSplitter.realizeFalse = true;
             RealizeFunction(dataSplitter.falseOutput, isTest);
         }
     }
     else if (function is LogicEffect)
     {
         ((LogicEffect)function).Realize(curOwner, team, isTest);
     }
     else if (function is WaitFunction)
     {
         ((WaitFunction)function).CreateWaitAction(delegate { RealizeFunction(((WaitFunction)function).actionOutput, isTest); });
     }
     else if (function is ChallengeFunction)
     {
         ChallengeFunction challengeFunction = (ChallengeFunction)function;
         challengeFunction.CreateWaitAction(curOwner, delegate
         {
             challengeFunction.realizeTrue  = true;
             challengeFunction.realizeFalse = false;
             if (challengeFunction.trueFileNote != null)
             {
                 curOwner.GetTeam().reportQuest.Add(((iEffectsContainer)curOwner).GetQuest());
                 curOwner.GetTeam().reportNotes.Add(FileNoteContainer.Create(challengeFunction.trueFileNote, curOwner.GetTeam().transform));
             }
             RealizeFunction(challengeFunction.trueOutput, isTest);
         }, delegate {
             challengeFunction.realizeTrue  = false;
             challengeFunction.realizeFalse = true;
             if (challengeFunction.falseFileNote != null)
             {
                 curOwner.GetTeam().reportQuest.Add(((iEffectsContainer)curOwner).GetQuest());
                 curOwner.GetTeam().reportNotes.Add(FileNoteContainer.Create(challengeFunction.falseFileNote, curOwner.GetTeam().transform));
             }
             RealizeFunction(challengeFunction.falseOutput, isTest);
         });
     }
     else if (function is ChooseMethodFunction)
     {
         ChooseMethodFunction methodFunction = (ChooseMethodFunction)function;
         if (methodFunction.dialog == null || !curOwner.GetTeam().GetLeader().IsObedient())
         {
             Method method = methodFunction.Realize(curOwner);
             Debug.Log(string.Format("ChooseMethod - {0}", method.ToString()), methodFunction);
             if (method == Method.Brutal)
             {
                 if (methodFunction.brutalFileNote != null)
                 {
                     curOwner.GetTeam().reportQuest.Add(((iEffectsContainer)curOwner).GetQuest());
                     curOwner.GetTeam().reportNotes.Add(FileNoteContainer.Create(methodFunction.brutalFileNote, curOwner.GetTeam().transform));
                 }
                 RealizeFunction(methodFunction.brutalOutput, isTest);
             }
             else if (method == Method.Accuracy)
             {
                 if (methodFunction.carefulFileNote != null)
                 {
                     curOwner.GetTeam().reportQuest.Add(((iEffectsContainer)curOwner).GetQuest());
                     curOwner.GetTeam().reportNotes.Add(FileNoteContainer.Create(methodFunction.carefulFileNote, curOwner.GetTeam().transform));
                 }
                 RealizeFunction(methodFunction.carefulOutput, isTest);
             }
             else if (method == Method.Diplomacy)
             {
                 if (methodFunction.diplomatFileNote != null)
                 {
                     curOwner.GetTeam().reportQuest.Add(((iEffectsContainer)curOwner).GetQuest());
                     curOwner.GetTeam().reportNotes.Add(FileNoteContainer.Create(methodFunction.diplomatFileNote, curOwner.GetTeam().transform));
                 }
                 RealizeFunction(methodFunction.diplomatOutput, isTest);
             }
             else if (method == Method.Science)
             {
                 if (methodFunction.scienceFileNote != null)
                 {
                     curOwner.GetTeam().reportQuest.Add(((iEffectsContainer)curOwner).GetQuest());
                     curOwner.GetTeam().reportNotes.Add(FileNoteContainer.Create(methodFunction.scienceFileNote, curOwner.GetTeam().transform));
                 }
                 RealizeFunction(methodFunction.scienceOutput, isTest);
             }
         }
         else
         {
             Debug.Log(string.Format("ChooseMethod start dialog"), methodFunction);
             UnityAction action = delegate
             {
                 int index = methodFunction.dialog.GetEnds().IndexOf(methodFunction.dialog.end);
                 if (methodFunction.dialogFileNotes[index] != null)
                 {
                     curOwner.GetTeam().reportQuest.Add(((iEffectsContainer)curOwner).GetQuest());
                     curOwner.GetTeam().reportNotes.Add(FileNoteContainer.Create(methodFunction.dialogFileNotes[index], curOwner.GetTeam().transform));
                 }
                 RealizeFunction(methodFunction.dialogOutputs[index], isTest);
             };
             Dialog.DialogManager.GetInstantiate().StartDialog(methodFunction.dialog, curOwner.GetTeam(), ((iEffectsContainer)curOwner).GetQuest(), action);
         }
     }
     else if (function is ChooseTemperFunction)
     {
         ChooseTemperFunction temperFunction = (ChooseTemperFunction)function;
         if (temperFunction.dialog == null || !curOwner.GetTeam().GetLeader().IsObedient())
         {
             Temper temper = temperFunction.Realize(curOwner);
             Debug.Log(string.Format("ChooseTemper - {0}", temper.ToString()), temperFunction);
             if (temper == Temper.RUDE)
             {
                 if (temperFunction.rudeFileNote != null)
                 {
                     curOwner.GetTeam().reportQuest.Add(((iEffectsContainer)curOwner).GetQuest());
                     curOwner.GetTeam().reportNotes.Add(FileNoteContainer.Create(temperFunction.rudeFileNote, curOwner.GetTeam().transform));
                 }
                 RealizeFunction(temperFunction.rudeOutput, isTest);
             }
             else if (temper == Temper.PRUDENT)
             {
                 if (temperFunction.prudentFileNote != null)
                 {
                     curOwner.GetTeam().reportQuest.Add(((iEffectsContainer)curOwner).GetQuest());
                     curOwner.GetTeam().reportNotes.Add(FileNoteContainer.Create(temperFunction.prudentFileNote, curOwner.GetTeam().transform));
                 }
                 RealizeFunction(temperFunction.prudentOutput, isTest);
             }
             else if (temper == Temper.MERCIFUL)
             {
                 if (temperFunction.mercifulFileNote != null)
                 {
                     curOwner.GetTeam().reportQuest.Add(((iEffectsContainer)curOwner).GetQuest());
                     curOwner.GetTeam().reportNotes.Add(FileNoteContainer.Create(temperFunction.mercifulFileNote, curOwner.GetTeam().transform));
                 }
                 RealizeFunction(temperFunction.mercifulOutput, isTest);
             }
             else if (temper == Temper.CRUEL)
             {
                 if (temperFunction.cruelFileNote != null)
                 {
                     curOwner.GetTeam().reportQuest.Add(((iEffectsContainer)curOwner).GetQuest());
                     curOwner.GetTeam().reportNotes.Add(FileNoteContainer.Create(temperFunction.cruelFileNote, curOwner.GetTeam().transform));
                 }
                 RealizeFunction(temperFunction.cruelOutput, isTest);
             }
             else if (temper == Temper.MERCANTILE)
             {
                 if (temperFunction.mercantileFileNote != null)
                 {
                     curOwner.GetTeam().reportQuest.Add(((iEffectsContainer)curOwner).GetQuest());
                     curOwner.GetTeam().reportNotes.Add(FileNoteContainer.Create(temperFunction.mercantileFileNote, curOwner.GetTeam().transform));
                 }
                 RealizeFunction(temperFunction.mercantileOutput, isTest);
             }
             else if (temper == Temper.PRINCIPLED)
             {
                 if (temperFunction.principledFileNote != null)
                 {
                     curOwner.GetTeam().reportQuest.Add(((iEffectsContainer)curOwner).GetQuest());
                     curOwner.GetTeam().reportNotes.Add(FileNoteContainer.Create(temperFunction.principledFileNote, curOwner.GetTeam().transform));
                 }
                 RealizeFunction(temperFunction.principledOutput, isTest);
             }
         }
         else
         {
             Debug.Log(string.Format("ChooseTemper start dialog"), temperFunction);
             UnityAction action = delegate
             {
                 int index = temperFunction.dialog.GetEnds().IndexOf(temperFunction.dialog.end);
                 temperFunction.LoyaltyInfluence(temperFunction.dialogTemper[index], curOwner);
                 if (temperFunction.dialogFileNotes[index] != null)
                 {
                     curOwner.GetTeam().reportQuest.Add(((iEffectsContainer)curOwner).GetQuest());
                     curOwner.GetTeam().reportNotes.Add(FileNoteContainer.Create(temperFunction.dialogFileNotes[index], curOwner.GetTeam().transform));
                 }
                 RealizeFunction(temperFunction.dialogOutputs[index], isTest);
             };
             Dialog.DialogManager.GetInstantiate().StartDialog(temperFunction.dialog, curOwner.GetTeam(), ((iEffectsContainer)curOwner).GetQuest(), action);
         }
     }
 }