Esempio n. 1
0
        public InteractuableResult Interacted(PointerEventData pointerData)
        {
            InteractuableResult res = InteractuableResult.IGNORES;

            switch (SceneData.getType())
            {
            case GeneralScene.GeneralSceneSceneType.SCENE:
                var scene = SceneData as Scene;
                if (!Game.Instance.GameState.IsFirstPerson && scene.isAllowPlayerLayer())
                {
                    RaycastHit hitInfo;
                    background.GetComponent <Collider>().Raycast(Camera.main.ScreenPointToRay(pointerData.position), out hitInfo, float.MaxValue);
                    var texPos   = PixelsSize;
                    var texCoord = hitInfo.textureCoord;
                    texCoord.y = 1 - texCoord.y;
                    texPos.Scale(texCoord);
                    var positioner = PlayerMB.Instance.GetComponent <ScenePositioner>();
                    var accesible  = TrajectoryHandler.GetAccessibleTrajectory(positioner.Position, trajectoryHandler);
                    PlayerMB.Instance.GetComponent <Mover>().Move(accesible.closestPoint(texPos));
                }
                break;

            case GeneralScene.GeneralSceneSceneType.SLIDESCENE:
                if (ProgressSlide())
                {
                    res = InteractuableResult.REQUIRES_MORE_INTERACTION;
                }
                else
                {
                    res = FinishCutscene((Cutscene)SceneData);
                }
                break;

            case GeneralScene.GeneralSceneSceneType.VIDEOSCENE:
                var videoscene = (Videoscene)SceneData;
                if (movieplayer == MovieState.NOT_MOVIE ||
                    movieplayer == MovieState.STOPPED ||
                    (movieplayer == MovieState.PLAYING && !movie.isPlaying()) ||
                    videoscene.isCanSkip())
                {
                    movie.Stop();
                    movieplayer = MovieState.STOPPED;
                    if (movieplayer == MovieState.PLAYING)
                    {
                        TrackerAsset.Instance.Accessible.Skipped(SceneData.getId(), AccessibleTracker.Accessible.Cutscene);
                    }
                    res = FinishCutscene(videoscene);
                }
                break;
            }

            return(res);
        }
Esempio n. 2
0
        public InteractuableResult Interacted(RaycastHit hit = default(RaycastHit))
        {
            InteractuableResult res = InteractuableResult.IGNORES;

            if (interactable)
            {
                List <Action> available = new List <Action>();

                foreach (Action a in base.Element.getActions())
                {
                    if (ConditionChecker.check(a.getConditions()))
                    {
                        bool addaction = true;
                        foreach (Action a2 in available)
                        {
                            if ((a.getType() == Action.CUSTOM || a.getType() == Action.CUSTOM_INTERACT) && (a2.getType() == Action.CUSTOM || a2.getType() == Action.CUSTOM_INTERACT))
                            {
                                if (((CustomAction)a).getName() == ((CustomAction)a2).getName())
                                {
                                    addaction = false;
                                    break;
                                }
                            }
                            else if (a.getType() == a2.getType())
                            {
                                addaction = false;
                                break;
                            }
                        }

                        if (addaction)
                        {
                            available.Add(a);
                        }
                    }
                }

                if (available.Count > 0)
                {
                    Game.Instance.showActions(available, Input.mousePosition);
                    res = InteractuableResult.DOES_SOMETHING;
                }

                Tracker.T.trackedGameObject.Interacted(((NPC)Element).getId(), GameObjectTracker.TrackedGameObject.Npc);
                Tracker.T.RequestFlush();
            }

            return(res);
        }
Esempio n. 3
0
        private InteractuableResult FinishCutscene(Cutscene cutscene)
        {
            InteractuableResult res          = InteractuableResult.DOES_SOMETHING;
            TriggerSceneEffect  triggerScene = null;

            switch ((cutscene).getNext())
            {
            default:     // By default Cutscene.GOBACK
                var previousTarget = Game.Instance.GameState.PreviousChapterTarget;
                if (previousTarget == null)
                {
                    var possibleTargets = Game.Instance.GameState.GetObjects <IChapterTarget>();
                    previousTarget = possibleTargets.FirstOrDefault(t => t.getId() != this.SceneData.getId());
                }
                if (previousTarget != null)
                {
                    triggerScene = new TriggerSceneEffect(previousTarget.getId(), int.MinValue, int.MinValue,
                                                          float.MinValue, cutscene.getTransitionTime(), (int)cutscene.getTransitionType());
                }
                break;

            case Cutscene.NEWSCENE:
                triggerScene = new TriggerSceneEffect(cutscene.getTargetId(), int.MinValue, int.MinValue,
                                                      float.MinValue, cutscene.getTransitionTime(), (int)cutscene.getTransitionType());
                break;

            case Cutscene.ENDCHAPTER:
                // TODO: When we add more chapters, we must trigger the next chapter instead of quiting que aplication
                GUIManager.Instance.ExitApplication();
                break;
            }

            if (triggerScene != null)
            {
                var effects = new Effects {
                    triggerScene
                };
                var cutsceneEffects = cutscene.getEffects();
                if (cutsceneEffects != null)
                {
                    effects.AddRange(cutsceneEffects);
                }

                Game.Instance.Execute(new EffectHolder(effects));
            }

            return(res);
        }
Esempio n. 4
0
        public InteractuableResult Interacted(PointerEventData pointerData = null)
        {
            InteractuableResult ret = InteractuableResult.IGNORES;

            if (interactable)
            {
                switch (GetBehaviourType())
                {
                case Item.BehaviourType.FIRST_ACTION:
                {
                    var actions = Element.getActions().Valid(AvailableActions);
                    lastActions = actions.ToList();
                    if (actions.Any())
                    {
                        ActionSelected(actions.First());
                        ret = InteractuableResult.DOES_SOMETHING;
                    }
                }
                break;

                case Item.BehaviourType.NORMAL:
                    var availableActions = Element.getActions().Valid(AvailableActions).Distinct().ToList();
                    ActionsUtil.AddExamineIfNotExists(Element, availableActions);
                    lastActions = availableActions;

                    //if there is an action, we show them
                    if (availableActions.Count > 0)
                    {
                        Game.Instance.showActions(availableActions, Input.mousePosition, this);
                        ret = InteractuableResult.DOES_SOMETHING;
                    }
                    break;

                default:
                    ret = InteractuableResult.IGNORES;
                    break;
                }
            }

            return(ret);
        }
        public bool execute()
        {
            var forceWait = false;

            if (effect != null && (!runsOnce || timesRun == 0 || waitForLoadPulse))
            {
                if (!validated)
                {
                    isValid   = conditions == null || ConditionChecker.check(conditions);
                    validated = true;
                }

                if (isValid)
                {
                    switch (effect.getType())
                    {
                    case EffectType.ACTIVATE:
                        Game.Instance.GameState.SetFlag(((ActivateEffect)effect).getTargetId(), FlagCondition.FLAG_ACTIVE);
                        break;

                    case EffectType.DEACTIVATE:
                        Game.Instance.GameState.SetFlag(((DeactivateEffect)effect).getTargetId(), FlagCondition.FLAG_INACTIVE);
                        break;

                    case EffectType.SHOW_TEXT:
                        var showTextEffect = (ShowTextEffect)effect;
                        Game.Instance.Talk(showTextEffect.getText(), showTextEffect.getX(), showTextEffect.getY(),
                                           showTextEffect.getRgbFrontColor(), showTextEffect.getRgbBorderColor());
                        forceWait = true;
                        break;

                    case EffectType.SPEAK_PLAYER:
                        Game.Instance.Talk(((SpeakPlayerEffect)effect).getLine(), Player.IDENTIFIER);
                        forceWait = true;
                        break;

                    case EffectType.SPEAK_CHAR:
                        Game.Instance.Talk(((SpeakCharEffect)effect).getLine(), ((SpeakCharEffect)effect).getTargetId());
                        forceWait = true;
                        break;

                    case EffectType.TRIGGER_SCENE:
                        if (!waitForLoadPulse)
                        {
                            runsOnce = false;
                            TriggerSceneEffect tse = ((TriggerSceneEffect)effect);
                            if (!Game.Instance.GameState.IsFirstPerson)
                            {
                                var playerContext = Game.Instance.GameState.PlayerContext;
                                if (tse.getX() != int.MinValue || tse.getY() != int.MinValue)
                                {
                                    playerContext.setPosition(tse.getX(), tse.getY());
                                    if (tse.DestinyScale > 0)
                                    {
                                        playerContext.Scale = tse.DestinyScale;
                                    }
                                }
                                else
                                {
                                    var targetScene = Game.Instance.GameState.GetChapterTarget(tse.getTargetId()) as Scene;
                                    if (targetScene != null)
                                    {
                                        if (targetScene.getTrajectory() != null)
                                        {
                                            var initial = targetScene.getTrajectory().getInitial();
                                            playerContext.setPosition(initial.getX(), initial.getY());
                                            playerContext.Scale = initial.getScale();
                                        }
                                        else
                                        {
                                            playerContext.setPosition(targetScene.getPositionX(), targetScene.getPositionY());
                                            playerContext.Scale = targetScene.getPlayerScale();
                                        }
                                    }
                                }
                            }

                            var trace = !(additionalInfo.ContainsKey("disable_trace") && (bool)additionalInfo["disable_trace"]);
                            Game.Instance.RunTarget(tse.getTargetId(), tse.getTransitionTime(), tse.getTransitionType(), null, trace);
                            waitForLoadPulse = true;
                            forceWait        = true;
                        }
                        else
                        {
                            waitForLoadPulse = false;
                        }
                        // DODO make something to wait until the target is ready to prevent undesired effect advance
                        break;

                    case EffectType.TRIGGER_CUTSCENE:
                        runsOnce = false;
                        TriggerCutsceneEffect tce = (TriggerCutsceneEffect)effect;
                        if (timesRun > 1)     // The first interaction is the run target callback
                        {
                            if (additionalInfo.ContainsKey("sub_effects_wait"))
                            {
                                forceWait = false;
                            }
                            else
                            {
                                InteractuableResult res = ((Interactuable)additionalInfo["scene"]).Interacted();
                                if (res == InteractuableResult.REQUIRES_MORE_INTERACTION)
                                {
                                    forceWait = true;
                                }
                                else if (res == InteractuableResult.DOES_SOMETHING)
                                {
                                    additionalInfo["sub_effects_wait"] = true;
                                    forceWait = true;
                                }
                            }
                        }
                        else if (timesRun == 1)
                        {
                            forceWait = true;
                        }
                        else if (timesRun == 0)
                        {
                            var trace = !(additionalInfo.ContainsKey("disable_trace") && (bool)additionalInfo["disable_trace"]);

                            additionalInfo.Add("lastscene", Game.Instance.GameState.CurrentTarget);
                            additionalInfo.Add("scene", Game.Instance.RunTarget(tce.getTargetId(), null, trace));
                            forceWait = true;
                        }

                        if (!forceWait && ((Cutscene)((IRunnerChapterTarget)additionalInfo["scene"]).Data).getNext() == Cutscene.GOBACK)
                        {
                            string last = (string)additionalInfo["lastscene"];
                            Game.Instance.RunTarget(last);
                        }

                        break;

                    case EffectType.TRIGGER_LAST_SCENE:
                        runsOnce = false;
                        Game.Instance.SwitchToLastTarget();
                        break;

                    case EffectType.TRIGGER_CONVERSATION:
                        runsOnce = false;
                        runsOnce = false;
                        if (timesRun == 0)
                        {
                            var tcoe = (TriggerConversationEffect)effect;
                            this.additionalInfo.Add("conversation", new GraphConversationHolder(Game.Instance.GameState.GetConversation(tcoe.getTargetId())));
                        }
                        forceWait = ((GraphConversationHolder)this.additionalInfo["conversation"]).execute();
                        break;

                    case EffectType.RANDOM_EFFECT:
                        RandomEffect re = (RandomEffect)effect;

                        if (timesRun == 0)
                        {
                            int pro = re.getProbability(), now = Random.Range(0, 100);

                            if (pro <= now)
                            {
                                if (re.getPositiveEffect() != null)
                                {
                                    additionalInfo.Add("current", new EffectHolderNode(re.getPositiveEffect()));
                                    runsOnce = false;
                                }
                            }
                            else if (re.getNegativeEffect() != null)
                            {
                                additionalInfo.Add("current", new EffectHolderNode(re.getNegativeEffect()));
                                runsOnce = false;
                            }
                        }

                        if (additionalInfo.ContainsKey("current"))
                        {
                            var subEffectHolder = (EffectHolderNode)additionalInfo["current"];
                            forceWait = subEffectHolder.execute();
                            runsOnce  = subEffectHolder.runsOnce;
                        }

                        break;

                    case EffectType.SET_VALUE:
                        SetValueEffect sve = (SetValueEffect)effect;
                        Game.Instance.GameState.SetVariable(sve.getTargetId(), sve.getValue());
                        break;

                    case EffectType.INCREMENT_VAR:
                        IncrementVarEffect ive = (IncrementVarEffect)effect;
                        Game.Instance.GameState.SetVariable(ive.getTargetId(), Game.Instance.GameState.GetVariable(ive.getTargetId()) + ive.getIncrement());
                        break;

                    case EffectType.DECREMENT_VAR:
                        DecrementVarEffect dve = (DecrementVarEffect)effect;
                        Game.Instance.GameState.SetVariable(dve.getTargetId(), Game.Instance.GameState.GetVariable(dve.getTargetId()) - dve.getDecrement());
                        break;

                    case EffectType.MACRO_REF:
                        runsOnce = false;
                        if (timesRun == 0)
                        {
                            MacroReferenceEffect mre = (MacroReferenceEffect)effect;
                            this.additionalInfo.Add("macro", new EffectHolder(Game.Instance.GameState.GetMacro(mre.getTargetId())));
                        }
                        forceWait = ((EffectHolder)this.additionalInfo["macro"]).execute();
                        break;

                    case EffectType.MOVE_OBJECT:
                        MoveObjectEffect moe = (MoveObjectEffect)effect;
                        runsOnce = !moe.isAnimated();

                        if (timesRun == 0)
                        {
                            if (moe.isAnimated())
                            {
                                Game.Instance.GameState.Move(moe.getTargetId(), new Vector2(moe.getX(), moe.getY()), moe.getTranslateSpeed(), this);
                            }
                            else
                            {
                                Game.Instance.GameState.Move(moe.getTargetId(), new Vector2(moe.getX(), moe.getY()));
                            }
                        }
                        if (!runsOnce && !pulsed)
                        {
                            forceWait = true;
                        }
                        break;

                    case EffectType.MOVE_NPC:
                        MoveNPCEffect mne = (MoveNPCEffect)effect;
                        runsOnce = true;

                        if (timesRun == 0)
                        {
                            Game.Instance.GameState.Move(mne.getTargetId(), new Vector2(mne.getX(), mne.getY()), 1, this);
                        }
                        if (!runsOnce && !pulsed)
                        {
                            forceWait = true;
                        }
                        break;

                    case EffectType.GENERATE_OBJECT:
                        GenerateObjectEffect gen = (GenerateObjectEffect)effect;
                        var toAdd = Game.Instance.GameState.FindElement <Item>(gen.getTargetId());
                        InventoryManager.Instance.AddElement(toAdd);
                        break;

                    case EffectType.CONSUME_OBJECT:
                        ConsumeObjectEffect con = (ConsumeObjectEffect)effect;
                        var toRemove            = Game.Instance.GameState.FindElement <Item>(con.getTargetId());
                        InventoryManager.Instance.RemoveElement(toRemove);
                        break;

                    case EffectType.TRIGGER_BOOK:
                        if (timesRun == 0)
                        {
                            if (InventoryManager.Instance.Opened)
                            {
                                InventoryManager.Instance.Close();
                            }
                            TriggerBookEffect triggerBookEffect = (TriggerBookEffect)effect;
                            Game.Instance.ShowBook(triggerBookEffect.getTargetId());
                        }
                        runsOnce  = false;
                        forceWait = Game.Instance.ShowingBook;
                        break;

                    case EffectType.PLAY_SOUND:
                        PlaySoundEffect pse       = (PlaySoundEffect)effect;
                        AudioClip       audioClip = Game.Instance.ResourceManager.getAudio(pse.getPath());
                        PlayMusicOn(audioClip, Game.Instance);
                        break;

                    case EffectType.WAIT_TIME:
                        WaitTimeEffect wte = (WaitTimeEffect)effect;
                        runsOnce = false;
                        if (timesRun == 0)
                        {
                            Game.Instance.PulseOnTime(this, wte.getTime());
                        }
                        if (!pulsed)
                        {
                            forceWait = true;
                        }
                        break;

                    case EffectType.CUSTOM_EFFECT:
                        runsOnce = false;
                        if (timesRun == 0)
                        {
                            this.additionalInfo["custom_effect_runner"] = CustomEffectRunnerFactory.Instance.CreateRunnerFor(effect);
                        }
                        forceWait = ((CustomEffectRunner)this.additionalInfo["custom_effect_runner"]).execute();
                        break;
                    }
                }
            }

            if (!forceWait)
            {
                timesRun = 0;
            }
            else
            {
                timesRun++;
            }

            return(forceWait);
        }
Esempio n. 6
0
        public InteractuableResult Interacted(RaycastHit hit = default(RaycastHit))
        {
            Effects e;

            InteractuableResult res = InteractuableResult.IGNORES;

            switch (sceneData.getType())
            {
            case GeneralScene.GeneralSceneSceneType.SCENE:
                if (!Game.Instance.GameState.isFirstPerson())
                {
                    PlayerMB.Instance.move(trajectory.route(PlayerMB.Instance.getPosition(), trajectory.closestPoint(Camera.main.ScreenToWorldPoint(Input.mousePosition))));
                }
                break;

            case GeneralScene.GeneralSceneSceneType.SLIDESCENE:
                if (current_slide + 1 < this.slides.frames.Count)
                {
                    current_slide++;
                    this.transform.FindChild("Background").GetComponent <Renderer>().material.mainTexture = this.slides.frames[current_slide].Image;
                    res = InteractuableResult.REQUIRES_MORE_INTERACTION;
                }
                else
                {
                    switch (((Slidescene)sceneData).getNext())
                    {
                    case Slidescene.NEWSCENE:
                        Game.Instance.RunTarget(((Slidescene)sceneData).getTargetId());
                        break;

                    case Slidescene.ENDCHAPTER:
                        //Game.Instance();
                        break;
                    }

                    e = ((Slidescene)sceneData).getEffects();
                    if (e != null && Game.Instance.Execute(new EffectHolder(e)))
                    {
                        res = InteractuableResult.DOES_SOMETHING;
                    }
                }
                break;

            case GeneralScene.GeneralSceneSceneType.VIDEOSCENE:
                switch (((Videoscene)sceneData).getNext())
                {
                case Slidescene.NEWSCENE:
                    Game.Instance.RunTarget(((Videoscene)sceneData).getTargetId());
                    break;

                case Slidescene.ENDCHAPTER:
                    break;
                }

                e = ((Videoscene)sceneData).getEffects();
                if (e != null && Game.Instance.Execute(new EffectHolder(e)))
                {
                    res = InteractuableResult.DOES_SOMETHING;
                }

                if (movie.isPlaying())
                {
                    movie.Stop();
                    Tracker.T.accessible.Skipped(sceneData.getId(), AccessibleTracker.Accessible.Cutscene);
                }

                break;
            }

            return(res);
        }
Esempio n. 7
0
    public InteractuableResult Interacted(RaycastHit hit = new RaycastHit())
    {
        InteractuableResult ret = InteractuableResult.IGNORES;

        if (aad.getInfluenceArea() != null)
        {
        }

        switch (aad.getBehaviour())
        {
        case Item.BehaviourType.FIRST_ACTION:
            foreach (Action a in aad.getActions())
            {
                if (ConditionChecker.check(a.getConditions()))
                {
                    Game.Instance.Execute(new EffectHolder(a.getEffects()));
                    break;
                }
            }
            ret = InteractuableResult.DOES_SOMETHING;
            break;

        case Item.BehaviourType.NORMAL:
            List <Action> available = new List <Action> ();
            foreach (Action a in aad.getActions())
            {
                if (ConditionChecker.check(a.getConditions()))
                {
                    bool addaction = true;
                    foreach (Action a2 in available)
                    {
                        if ((a.getType() == Action.CUSTOM || a.getType() == Action.CUSTOM_INTERACT) && (a2.getType() == Action.CUSTOM || a2.getType() == Action.CUSTOM_INTERACT))
                        {
                            if (((CustomAction)a).getName() == ((CustomAction)a2).getName())
                            {
                                addaction = false;
                                break;
                            }
                        }
                        else if (a.getType() == a2.getType())
                        {
                            addaction = false;
                            break;
                        }
                    }

                    if (addaction)
                    {
                        available.Add(a);
                    }
                }
            }

            //We check if it's an examine action, otherwise we create one and add it
            bool   addexamine = true;
            string desc       = aad.getDescription(0).getDetailedDescription();
            if (desc != "")
            {
                foreach (Action a in available)
                {
                    if (a.getType() == Action.EXAMINE)
                    {
                        addexamine = false;
                        break;
                    }
                }

                if (addexamine)
                {
                    Action  ex    = new Action(Action.EXAMINE);
                    Effects exeff = new Effects();
                    exeff.add(new SpeakPlayerEffect(desc));
                    ex.setEffects(exeff);
                    available.Add(ex);
                }
            }

            if (available.Count > 0)
            {
                Game.Instance.showActions(available, Input.mousePosition);
                ret = InteractuableResult.DOES_SOMETHING;
            }
            break;

        case Item.BehaviourType.ATREZZO:
        default:
            ret = InteractuableResult.IGNORES;
            break;
        }

        return(ret);
    }
Esempio n. 8
0
        public bool execute()
        {
            bool forcewait = false;

            if (!(runs_once && times_runed > 0))
            {
                if (effect == null || effect.getConditions() == null)
                {
                    Debug.Log("Asd");
                }
                else
                {
                    if (!validated)
                    {
                        is_valid  = ConditionChecker.check(effect.getConditions());
                        validated = true;
                    }

                    if (is_valid)
                    {
                        switch (effect.getType())
                        {
                        case EffectType.ACTIVATE:
                            Game.Instance.GameState.setFlag(((ActivateEffect)effect).getTargetId(), FlagCondition.FLAG_ACTIVE);
                            break;

                        case EffectType.DEACTIVATE:
                            Game.Instance.GameState.setFlag(((DeactivateEffect)effect).getTargetId(), FlagCondition.FLAG_INACTIVE);
                            break;

                        case EffectType.SPEAK_PLAYER:
                            Game.Instance.talk(((SpeakPlayerEffect)effect).getLine(), null);
                            forcewait = true;
                            break;

                        case EffectType.SPEAK_CHAR:
                            Game.Instance.talk(((SpeakCharEffect)effect).getLine(), ((SpeakCharEffect)effect).getTargetId());
                            forcewait = true;
                            break;

                        case EffectType.TRIGGER_SCENE:
                            runs_once = false;
                            TriggerSceneEffect tse = ((TriggerSceneEffect)effect);
                            Game.Instance.RunTarget(tse.getTargetId(), tse.getTransitionTime(), tse.getTransitionType());
                            // DODO make something to wait until the target is ready to prevent undesired effect advance
                            break;

                        case EffectType.TRIGGER_CUTSCENE:
                            runs_once = false;
                            TriggerCutsceneEffect tce = (TriggerCutsceneEffect)effect;
                            if (times_runed > 0)
                            {
                                if (!aditional_info.ContainsKey("cutscene_effect"))
                                {
                                    InteractuableResult res = ((Interactuable)aditional_info["scene"]).Interacted();
                                    if (res == InteractuableResult.REQUIRES_MORE_INTERACTION)
                                    {
                                        forcewait = true;
                                    }
                                    else if (res == InteractuableResult.DOES_SOMETHING)
                                    {
                                        forcewait = true;
                                        aditional_info.Add("cutscene_effect", Game.Instance.getNextInteraction());
                                    }
                                }
                                else
                                {
                                    forcewait = ((Interactuable)aditional_info["cutscene_effect"]).Interacted() == InteractuableResult.REQUIRES_MORE_INTERACTION;
                                }
                            }
                            else
                            {
                                aditional_info = new Dictionary <string, object>();
                                aditional_info.Add("lastscene", Game.Instance.GameState.CurrentTarget);
                                aditional_info.Add("scene", Game.Instance.RunTarget(tce.getTargetId()));
                                forcewait = true;
                            }

                            if (!forcewait && ((Cutscene)((IRunnerChapterTarget)aditional_info["scene"]).Data).getNext() == Cutscene.GOBACK)
                            {
                                string last = (string)aditional_info["lastscene"];
                                Game.Instance.RunTarget(last);
                            }

                            break;

                        case EffectType.TRIGGER_LAST_SCENE:
                            runs_once = false;
                            Game.Instance.SwitchToLastTarget();
                            break;

                        case EffectType.TRIGGER_CONVERSATION:
                            runs_once = false;
                            runs_once = false;
                            if (times_runed == 0)
                            {
                                TriggerConversationEffect tcoe = (TriggerConversationEffect)effect;
                                this.aditional_info.Add("conversation", new GraphConversationHolder(Game.Instance.GameState.getConversation(tcoe.getTargetId())));
                            }
                            forcewait = ((GraphConversationHolder)this.aditional_info["conversation"]).execute();
                            break;

                        case EffectType.RANDOM_EFFECT:
                            runs_once = false;
                            RandomEffect re = (RandomEffect)effect;

                            if (!aditional_info.ContainsKey("first"))
                            {
                                aditional_info.Add("first", new EffectHolderNode(re.getPositiveEffect()));
                                aditional_info.Add("second", new EffectHolderNode(re.getNegativeEffect()));
                            }

                            if (times_runed == 0)
                            {
                                int pro = re.getProbability(), now = Random.Range(0, 100);
                                if (aditional_info.ContainsKey("current"))
                                {
                                    aditional_info.Remove("current");
                                }

                                if (pro <= now)
                                {
                                    aditional_info.Add("current", "first");
                                }
                                else
                                {
                                    aditional_info.Add("current", "second");
                                }

                                forcewait = ((EffectHolderNode)aditional_info[((string)aditional_info["current"])]).execute();
                            }
                            else
                            {
                                forcewait = ((EffectHolderNode)aditional_info[((string)aditional_info["current"])]).execute();
                            }

                            break;

                        case EffectType.SET_VALUE:
                            SetValueEffect sve = (SetValueEffect)effect;
                            Game.Instance.GameState.setVariable(sve.getTargetId(), sve.getValue());
                            break;

                        case EffectType.INCREMENT_VAR:
                            IncrementVarEffect ive = (IncrementVarEffect)effect;
                            Game.Instance.GameState.setVariable(ive.getTargetId(), Game.Instance.GameState.getVariable(ive.getTargetId()) + ive.getIncrement());
                            break;

                        case EffectType.DECREMENT_VAR:
                            DecrementVarEffect dve = (DecrementVarEffect)effect;
                            Game.Instance.GameState.setVariable(dve.getTargetId(), Game.Instance.GameState.getVariable(dve.getTargetId()) - dve.getDecrement());
                            break;

                        case EffectType.MACRO_REF:
                            runs_once = false;
                            if (times_runed == 0)
                            {
                                MacroReferenceEffect mre = (MacroReferenceEffect)effect;
                                this.aditional_info.Add("macro", new EffectHolder(Game.Instance.GameState.getMacro(mre.getTargetId())));
                            }
                            forcewait = ((EffectHolder)this.aditional_info["macro"]).execute();
                            break;

                        case EffectType.MOVE_OBJECT:
                            MoveObjectEffect moe = (MoveObjectEffect)effect;
                            Game.Instance.GameState.Move(moe.getTargetId(), new Vector2(moe.getX(), 600 - moe.getY()) / 10f);
                            break;

                        case EffectType.CUSTOM_EFFECT:
                            runs_once = false;
                            if (times_runed == 0)
                            {
                                this.aditional_info["custom_effect_runner"] = CustomEffectRunnerFactory.Instance.CreateRunnerFor(effect);
                            }
                            forcewait = ((CustomEffectRunner)this.aditional_info["custom_effect_runner"]).execute();
                            break;
                        }
                    }
                }
            }

            if (!forcewait)
            {
                times_runed = 0;
            }
            else
            {
                times_runed++;
            }

            return(forcewait);
        }
Esempio n. 9
0
    public InteractuableResult Interacted(RaycastHit hit = default(RaycastHit))
    {
        InteractuableResult res = InteractuableResult.IGNORES;

        return(res);
    }