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); }
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); }
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); }
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); }
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); }
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); }
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); }
public InteractuableResult Interacted(RaycastHit hit = default(RaycastHit)) { InteractuableResult res = InteractuableResult.IGNORES; return(res); }