public override bool Update(MonoBehaviour behaviour, Sequencer.StateInstance state) { AIState aiState = (AIState)state; Entity ai = (Entity)behaviour; PlanetAttach pa = ai.planetAttach; Player player = SceneLevel.instance.player; //Debug.Log("side: "+pa.CheckSide(player.planetAttach)); Vector2 prevDir = aiState.curPlanetDir; aiState.curPlanetDir = pa.GetDirTo(player.planetAttach, horizontalOnly); bool done = true; //cap speed on opposite dir if(Vector2.Dot(prevDir, aiState.curPlanetDir) < 0.0f) { if(useBreakSpeed) { pa.velocity = prevDir*breakSpeed; } if(doneAfterNumChangeDir > 0 && aiState.counter < doneAfterNumChangeDir) { aiState.counter++; } } if(doneAfterNumChangeDir > 0) { done = doneAfterNumChangeDir == aiState.counter && Vector2.Dot(pa.planetDir, aiState.curPlanetDir) > 0.0f; } //pa.velocity = Vector2.zero; pa.accel = aiState.curPlanetDir*accel; return done; }
public override void Start(MonoBehaviour behaviour, Sequencer.StateInstance state) { if(entityPath.Length > 0) { GameObject go = ((SceneController)behaviour).SearchObject(entityPath); if(go != null) { Entity e = go.GetComponent<Entity>(); if(e != null) { if(e.stats != null) { if(amount == -1) { if(e.stats.curHP > 1) { e.stats.ApplyDamage(e.stats.curHP-1); } } else { e.stats.ApplyDamage(amount); } } e.action = action; } else { Debug.LogWarning("Not an entity: "+entityPath); } } else { Debug.LogWarning("Path not found: "+entityPath); } } }
public override void Start(MonoBehaviour behaviour, Sequencer.StateInstance state) { Main.instance.cameraController.mode = mode; if(attachToPath.Length > 0) { GameObject go = ((SceneController)behaviour).SearchObject(attachToPath); if(go != null) { Main.instance.cameraController.attach = go.transform; } else { Debug.LogWarning("Path not found: "+attachToPath); } } else if(attachToWaypoint.Length > 0) { Transform t = WaypointManager.instance.GetWaypoint(attachToWaypoint); if(t != null) { Main.instance.cameraController.attach = t; } else { Debug.LogWarning("Can't find waypoint: "+attachToWaypoint); } } if(immediate) { Main.instance.cameraController.CancelMove(); } }
public override void Start(MonoBehaviour behaviour, Sequencer.StateInstance state) { Entity ai = (Entity)behaviour; PlanetAttach pa = ai.planetAttach; AIState aiState = (AIState)state; float speed = speedMin < speedMax ? Random.Range(speedMin, speedMax) : speedMin; if(speed > 0) { if(followPlayer) { Player player = SceneLevel.instance.player; aiState.curPlanetDir = pa.GetDirTo(player.planetAttach, followPlayerHorizontal); } else if(!useDir) { aiState.curPlanetDir = Util.Vector2DRot(new Vector2(1, 0), angle*Mathf.Deg2Rad); } pa.velocity = aiState.curPlanetDir*speed; ai.action = Entity.Action.move; } else { pa.velocity = Vector2.zero; ai.action = Entity.Action.idle; } if(resetAccel) { pa.accel = Vector2.zero; } }
public void AssertRepetitionProgressionPattern() { const int pauseAfter = 20; const int start = 1; Func<int, int> progression = x => x + 1; var repetitionExpectedResultPair = new Dictionary<int, string> { {1, "1,2,3,4,5,6,7,8,9,10,11,12"}, {2, "1,1,2,2,3,3,4,4,5,5,6,6"}, {4, "1,1,1,1,2,2,2,2,3,3,3,3"} }; foreach (var pair in repetitionExpectedResultPair) { var repititions = pair.Key; var expected = pair.Value; var e = new Sequencer<int>(start, repititions, pauseAfter, progression); var results = new List<int>(); const int noOfElements = 12; for (var i = 0; i < noOfElements; i++) { e.MoveNext(); var next = e.Current; results.Add(next); } var distances = string.Join(",", results.ConvertAll(x => x.ToString()).ToArray()); Assert.AreEqual(expected, distances); } }
public override void Start(MonoBehaviour behaviour, Sequencer.StateInstance aState) { Entity ai = (Entity)behaviour; AIState aiState = (AIState)aState; ai.state = state; Vector2 src = ai.transform.position; Vector2 dest = Player.instance.transform.position; switch(type) { case Type.xOnly: dest.y = src.y; break; case Type.yOnly: dest.x = src.x; break; } Vector2 dir = dest - src; float dist = dir.magnitude; dir = dir/dist; float spd = minSpeed < maxSpeed ? Random.Range(minSpeed, maxSpeed) : minSpeed; ai.entMove.velocity = dir*spd; aiState.d = dist/spd; }
public void SetUp() { _gatingSequence = new Sequence(Sequencer.InitialCursorValue); _sequencer = new Sequencer(new SingleThreadedClaimStrategy(BufferSize), new SleepingWaitStrategy()); _sequencer.SetGatingSequences(_gatingSequence); }
public override void Start(MonoBehaviour behaviour, Sequencer.StateInstance state) { Entity ai = (Entity)behaviour; PlanetAttach pa = ai.planetAttach; pa.Jump(speedMin < speedMax ? Random.Range(speedMin, speedMax) : speedMin); ai.action = Entity.Action.jump; }
public void CreateRecipes() { //Init sequencer seq = new Sequencer(); //Recipe 1 TaskData t1 = new TaskData(1, 15, false); TaskData t2 = new TaskData(2, 5, true); TaskData t3 = new TaskData(3, 2, true); TaskData t4 = new TaskData(4, 13, true); TaskData t5 = new TaskData(5, 20, false); TaskData t6 = new TaskData(6, 4, true); TaskData t7 = new TaskData(7, 3, true); TaskData t8 = new TaskData(8, 10, false); TaskData t9 = new TaskData(9, 1, true); TaskData t10 = new TaskData(10, 3, true); t10.addPrereq(t9); t10.addPrereq(t8); t8.addPrereq(t7); t7.addPrereq(t6); t9.addPrereq(t5); t5.addPrereq(t4); t4.addPrereq(t3); t3.addPrereq(t2); t2.addPrereq(t1); r1 = new RecipeData(); r1.finalStep = t10; //Recipe 2 TaskData t11 = new TaskData(11, 10, false); TaskData t12 = new TaskData(12, 6, true); TaskData t13 = new TaskData(13, 4, true); TaskData t14 = new TaskData(14, 15, true); t14.addPrereq(t13); t13.addPrereq(t12); t12.addPrereq(t11); r2 = new RecipeData(); r2.finalStep = t14; //Recipe 3 TaskData t15 = new TaskData(15, 9, false); TaskData t16 = new TaskData(16, 3, true); TaskData t17 = new TaskData(17, 5, true); TaskData t18 = new TaskData(18, 4, true); TaskData t19 = new TaskData(19, 1, true); TaskData t20 = new TaskData(20, 15, false); t20.addPrereq(t19); t19.addPrereq(t18); t19.addPrereq(t17); t19.addPrereq(t16); t19.addPrereq(t15); r3 = new RecipeData(); r3.finalStep = t20; }
public override void Start(MonoBehaviour behaviour, Sequencer.StateInstance aState) { Entity ai = (Entity)behaviour; EntityMovement em = ai.entMove; em.Jump(speedMin < speedMax ? Random.Range(speedMin, speedMax) : speedMin); ai.state = state; }
public override void Start(MonoBehaviour behaviour, Sequencer.StateInstance state) { Entity ai = (Entity)behaviour; PlanetAttach pa = ai.planetAttach; Player player = SceneLevel.instance.player; ((AIState)state).curPlanetDir = pa.GetDirTo(player.planetAttach, horizontalOnly); }
void OnNextPulse(Sequencer sequencer) { if (sequencer.CurrentPulse % 4 == 0) { nextNote = 12.0f * (sequencer.CurrentPulse % 32) / 4.0f; } else if (sequencer.CurrentPulse % 2 == 0 && RandomNumber.NextFloat() < 0.1f) { nextNote = 12.0f * RandomNumber.NextInt(0, 8); } }
//do clean ups here, don't set any states dependent from outside public override void Finish(MonoBehaviour behaviour, Sequencer.StateInstance aState) { Entity ai = (Entity)behaviour; ai.state = endState; if(ai.entMove != null) { ai.entMove.velocity = Vector2.zero; } }
public override void Start(MonoBehaviour behaviour, Sequencer.StateInstance state) { state.counter = 0; Player p = ((SceneLevel)behaviour).player; p.throwCallback = delegate(Player player) { state.counter = 1; }; }
public ProcessingSequenceBarrier(Sequencer sequencer, IWaitStrategy waitStrategy, Sequence cursorSequence, ISequence[] dependentSequences) { _waitStrategy = waitStrategy; _cursorSequence = cursorSequence; _sequencer = sequencer; _dependentSequence = 0 == dependentSequences.Length ? (ISequence)cursorSequence : new FixedSequenceGroup(dependentSequences); }
public override bool Update(MonoBehaviour behaviour, Sequencer.StateInstance state) { bool done = true; Entity e = ((SceneController.StateData)state).entity; if(e != null) { e.SendMessage("OnSceneCounterCheck", state, SendMessageOptions.RequireReceiver); done = state.counter == counter; } return done; }
public override void Start(MonoBehaviour behaviour, Sequencer.StateInstance state) { SceneLevel.instance.IncWave(); HUDAnnounce announce = UIManager.instance.hud.announce; announce.state = HUDAnnounce.State.Blink; announce.message = isBossAnnounce ? bossString : SceneLevel.instance.GetWaveString(); announce.color = Color.white; state.counter = 0; }
public override void Start(MonoBehaviour behaviour, Sequencer.StateInstance state) { if(entityPath.Length > 0) { GameObject go = ((SceneController)behaviour).SearchObject(entityPath); if(go != null) { go.SendMessage("OnSceneActivate", activate, SendMessageOptions.DontRequireReceiver); } else { Debug.LogWarning("Path not found: "+entityPath); } } }
public override bool Update(MonoBehaviour behaviour, Sequencer.StateInstance state) { SceneController.StateData dat = (SceneController.StateData)state; bool done = true; if(dat.entity != null) { done = dat.entity.action == action; } return done; }
public override bool Update(MonoBehaviour behaviour, Sequencer.StateInstance state) { Entity ai = (Entity)behaviour; PlanetAttach pa = ai.planetAttach; bool done = pa.isGround; if(done && actOnLand != Entity.Action.none) { ai.action = actOnLand; } return pa.isGround; }
public override void Start(MonoBehaviour behaviour, Sequencer.StateInstance aiState) { HUDAnnounce ha = UIManager.instance.hud.announce; ha.state = state; if(state != HUDAnnounce.State.None) { if((state != HUDAnnounce.State.FadeOut && state != HUDAnnounce.State.FadeScaleOut) || message.Length > 0) { ha.color = new Color(((float)colorR)/255.0f, ((float)colorG)/255.0f, ((float)colorB)/255.0f); ha.message = message; } } }
public override bool Update(MonoBehaviour behaviour, Sequencer.StateInstance aState) { Entity ai = (Entity)behaviour; EntityMovement em = ai.entMove; bool done = em.isGround; if(done && endState != Entity.State.NumState) { ai.state = endState; } return done; }
void Start() { sequencer = GetComponent<Sequencer>(); sequencer.tempo = tempo; sequencer.OnNextBar += OnNextBar; cameraController = GetComponent<CameraController>(); monster = GameObject.Instantiate(monsterPrefab).GetComponent<MonsterController>(); monster.speechGui = monsterSpeechGui; monster.SetLeftEnd(cameraController.ScreenLeft); monster.speakSpeed = 8.0f / tempo; line = GameObject.Instantiate(groundPrefab).GetComponent<LineController>(); line.SetStartPoint(monster.GetRightEnd()); line.SetLength(0.5f * cameraController.ScreenSize - monster.GetRightEnd()); }
void OnNextBar(Sequencer sequencer) { if(countdown > 0) { countdown--; return; } string speech = monsterLines[(int)Mathf.Min(monsterLines.Length - 1, currentMonsterLine)]; if (currentMonsterLine > 4 && speech.Length > 0 && RandomNumber.NextFloat() < 0.2f) { speech = monsterRandomLinebreaks[RandomNumber.NextInt(0, monsterRandomLinebreaks.Length)]; } else { currentMonsterLine++; } monster.Speak(speech); }
public override void Start(MonoBehaviour behaviour, Sequencer.StateInstance state) { SceneLevel sl = SceneLevel.instance; Player player = sl.player; Transform t = EntityManager.instance.Spawn(type, name, null, null, useFX); if(t != null) { Vector2 playerPos = player.planetAttach.planetPos; Vector2 pos = sl.planet.body.ConvertToWorldPos(new Vector2(playerPos.x+x, playerPos.y+y)); t.position = new Vector3(pos.x, pos.y, t.position.z); t.GetComponentInChildren<PlanetAttachStatic>().RefreshPos(); } }
public override void Start(MonoBehaviour behaviour, Sequencer.StateInstance state) { if(type.Length > 0) { System.Type theType = System.Type.GetType(type); Component[] comps; if(fromScene) { comps = ((SceneController)behaviour).GetComponentsInChildren(theType); } else { comps = EntityManager.instance.GetComponentsInChildren(theType); } foreach(Component c in comps) { c.SendMessage("OnSceneActivate", activate, SendMessageOptions.DontRequireReceiver); } } }
public override void Start(MonoBehaviour behaviour, Sequencer.StateInstance state) { if(entityPath.Length > 0) { GameObject go = ((SceneController)behaviour).SearchObject(entityPath); if(go != null) { Entity e = go.GetComponent<Entity>(); if(e != null) { ((SceneController.StateData)state).entity = e; } else { Debug.LogWarning("Not an entity: "+entityPath); } } else { Debug.LogWarning("Path not found: "+entityPath); } } }
public override void Start(MonoBehaviour behaviour, Sequencer.StateInstance state) { Entity ai = (Entity)behaviour; EntityMovement em = ai.entMove; float speed = speedMin < speedMax ? Random.Range(speedMin, speedMax) : speedMin; if(speed > 0) { em.velocity.x = toPlayer ? Player.instance.transform.position.x < ai.transform.position.x ? -speed : speed : speed; em.velocity.y = 0; ai.state = Entity.State.move; } else { em.velocity = Vector2.zero; ai.state = Entity.State.idle; } }
public void Start(MonoBehaviour behaviour, Sequencer.StateInstance stateData, string stateName) { if(stateName == null) { stateName = sequenceDefaultState; } mCurState = stateName; if(!string.IsNullOrEmpty(stateName)) { if(mSequences != null) { Sequencer seq; if(mSequences.TryGetValue(stateName, out seq)) { behaviour.StartCoroutine(seq.Go(stateData, behaviour)); } else { Debug.LogError("State not found: "+stateName, behaviour); } } } }
public override void Start(MonoBehaviour behaviour, Sequencer.StateInstance state) { Entity ai = (Entity)behaviour; PlanetAttach pa = ai.planetAttach; AIState aiState = (AIState)state; if(accel > 0) { if(usePlayerDir) { Player player = SceneLevel.instance.player; aiState.curPlanetDir = pa.GetDirTo(player.planetAttach, horizontalOnly); } else if(!useDir) { aiState.curPlanetDir = Util.Vector2DRot(new Vector2(1, 0), angle*Mathf.Deg2Rad); } pa.accel = aiState.curPlanetDir*accel; } else { pa.accel = Vector2.zero; } }
public static void Pd1Negative(Sequencer sequencer) { // Can't store negative values in ushort... throw new NotImplementedException(); }
private void UpdateMatrix(Sequencer parent, Vector2 cursorPos) { int columns = parent.length; int seqIdx = -1; if (Application.isPlaying) { seqIdx = parent.getCurrentSeqIdx(); } // mouse cell coords in matrix int mouseCellX = (int)cursorPos.x / gridSize / matrixScale; int mouseCellY = (int)cursorPos.y / gridSize / matrixScale; Color color; for (int y = 0; y < 25 * gridSize; ++y) { for (int x = 0; x < matrixMaxX * gridSize; ++x) { int mx = x / gridSize; // cell coords in matrix int my = y / gridSize; int cx = x % gridSize; // pixel coords in cell int cy = y % gridSize; bool isMouseInCell = (mouseCellX == mx && mouseCellY == my); int sn = my % 12; // scale note bool isBlackKey = (sn == 1 || sn == 3 || sn == 6 || sn == 8 || sn == 10); bool isInsideMatrix = mx < columns; bool isNote = isInsideMatrix && (parent.pitch[mx] == my); bool isCurrentSeqIdx = mx == seqIdx; Color shade = Color.HSVToRGB(0.0f, 0.0f, ((float)(y % gridSize)) / gridSize * 0.2f); if (isBlackKey) { color = new Color(0.4f, 0.4f, 0.4f); } else { color = new Color(0.8f, 0.8f, 0.8f); } if (cx == 0 || cy == 0) { color = new Color(0.4f, 0.4f, 0.4f); } else { color += shade; } bool isGridLine = (cx == 0 || cy == 0); if (isInsideMatrix) { if (isNote && (!isGridLine)) { if (editMatrix) { color = Color.Lerp(color, Color.red, 0.7f); } else { color = Color.Lerp(color, new Color(0.7f, 0.2f, 1.0f), 0.7f); } } if (isMouseInCell && editMatrix && (!isGridLine)) { color = Color.Lerp(color, Color.blue, 0.4f); } if (isCurrentSeqIdx) { color = Color.Lerp(color, Color.green, 0.2f); } } else { color = Color.Lerp(color, Color.black, 0.8f); } matrixTexture.SetPixel(x + texturePadding, y + texturePadding, color); } } matrixTexture.Apply(); }
public static void PdAdr(Sequencer sequencer) { sequencer.SBus.Data.Value = sequencer.MpmAddressRegister.Data.Value; }
public static void PdPc(Sequencer sequencer) { sequencer.SBus.Data.Value = sequencer.ProgramCounterRegister.Data.Value; }
public static void PdFlag(Sequencer sequencer) { sequencer.SBus.Data.Value = sequencer.FlagRegister.Data.Value; }
public void ItShouldRememberBitSize([Range(1, 63)] int bits) { var sequencer = new Sequencer(bits); Assert.That(sequencer.Bits, Is.EqualTo(bits)); }
public virtual void Awake() { barkHistory = new BarkHistory(barkOrder); sequencer = null; }
public void ShouldReturnPositiveDistanceIfSecondIdComesBefore() { var sequencer = new Sequencer(8); Assert.That(sequencer.Distance(8, 0), Is.EqualTo(8)); }
public static void Pd0(Sequencer sequencer) { sequencer.SBus.Data.Value = 0; }
void SetupEnginesAndEntities() { _enginesRoot = new EnginesRoot(new UnitySumbmissionEntityViewScheduler()); _entityFactory = _enginesRoot.GenerateEntityFactory(); _prefabsDictionary = new PrefabsDictionary(Application.persistentDataPath + "/prefabs.json"); var entityFunctions = _enginesRoot.GenerateEntityFunctions(); //GameObjectFactory factory = new GameObjectFactory(); _mapManager = GameObject.FindGameObjectWithTag("HexGrid").GetComponent <HexGrid>(); _uiService = _prefabsDictionary.Istantiate("UI Service").GetComponent <UIService>(); Sequencer battleTurnSequence = new Sequencer(); Sequencer abilityUsedSequence = new Sequencer(); ITime time = new Time(); MapGeneratorEngine mapGeneratorEngine = new MapGeneratorEngine(_mapManager, _entityFactory, _prefabsDictionary); UnitSpawnerEngine unitSpawnerEngine = new UnitSpawnerEngine(_prefabsDictionary, _entityFactory, _mapManager); PlayerInputEngine playerInputEngine = new PlayerInputEngine(_mapManager); BattleInitEngine battleInitEngine = new BattleInitEngine(entityFunctions, _prefabsDictionary, _entityFactory); TurnOrderEngine turnOrderEngine = new TurnOrderEngine(battleTurnSequence, _uiService); UnitTurnActionEngine unitTurnActionEngine = new UnitTurnActionEngine(battleTurnSequence); UnitMovementEngine unitMovementEngine = new UnitMovementEngine(_mapManager); UnitHighlightEngine unitHighlightEngine = new UnitHighlightEngine(_mapManager); BattleHudEngine battleHudEngine = new BattleHudEngine(_uiService); HealthEngine healthEngine = new HealthEngine(); AbilitySelectionEngine abilitySelectionEngine = new AbilitySelectionEngine(_uiService, abilityUsedSequence, _mapManager); AbilityTargetEngine abilityTargetEngine = new AbilityTargetEngine(); battleTurnSequence.SetSequence( new Steps { { turnOrderEngine, new To { unitTurnActionEngine, } }, { unitTurnActionEngine, new To { { TurnCondition.starting, new IStep[] { playerInputEngine, battleHudEngine } }, { TurnCondition.ending, new IStep[] { playerInputEngine, battleHudEngine, turnOrderEngine } } } }, } ); abilityUsedSequence.SetSequence( new Steps { { abilitySelectionEngine, new To { { new IStep[] { abilityTargetEngine } }, } } } ); AddEngine(mapGeneratorEngine); AddEngine(unitSpawnerEngine); AddEngine(playerInputEngine); AddEngine(battleInitEngine); AddEngine(turnOrderEngine); AddEngine(unitTurnActionEngine); AddEngine(unitMovementEngine); AddEngine(unitHighlightEngine); AddEngine(new CameraFollowTargetEngine(time)); AddEngine(battleHudEngine); AddEngine(healthEngine); AddEngine(abilitySelectionEngine); AddEngine(abilityTargetEngine); }
public Metrics(int bitSize = 10) { buffer = new Frame[1 << bitSize]; Sequencer = new Sequencer(bitSize); }
public PlayerState(Sequencer sequencer) { this.sequencer = sequencer; showText = ""; }
public HealthEngine(Sequencer playerDamageSequence) { _damageSequence = playerDamageSequence; }
/// <summary> /// Attempts to make a character bark. This is a coroutine; you must start it using /// StartCoroutine() or Unity will hang. Shows a specific subtitle and plays the sequence, /// but does not send OnBarkStart/OnBarkEnd messages to the participants. /// </summary> /// <param name='subtitle'> /// Subtitle to bark. /// </param> /// <param name='skipSequence'> /// If `true`, don't play the sequence associated with the subtitle. /// </param> public static IEnumerator Bark(Subtitle subtitle, bool skipSequence = false) { if (CheckDontBarkDuringConversation()) { yield break; } if ((subtitle == null) || (subtitle.speakerInfo == null)) { yield break; } Transform speaker = subtitle.speakerInfo.transform; Transform listener = (subtitle.listenerInfo != null) ? subtitle.listenerInfo.transform : null; var priority = GetEntryBarkPriority(subtitle.dialogueEntry); if (priority < GetSpeakerCurrentBarkPriority(speaker)) { if (DialogueDebug.logInfo) { Debug.Log(string.Format("{0}: Bark (speaker={1}, listener={2}): '{3}' currently barking a higher priority bark", new System.Object[] { DialogueDebug.Prefix, speaker, listener, subtitle.formattedText.text }), speaker); } yield break; } SetSpeakerCurrentBarkPriority(speaker, priority); InformParticipants(DialogueSystemMessages.OnBarkStart, speaker, listener); InformParticipantsLine(DialogueSystemMessages.OnBarkLine, speaker, subtitle); IBarkUI barkUI = speaker.GetComponentInChildren(typeof(IBarkUI)) as IBarkUI; if ((barkUI == null) && DialogueDebug.logWarnings) { Debug.LogWarning(string.Format("{0}: Bark (speaker={1}, listener={2}): '{3}' speaker has no bark UI", new System.Object[] { DialogueDebug.Prefix, speaker, listener, subtitle.formattedText.text }), speaker); } if (((barkUI == null) || !(barkUI as MonoBehaviour).enabled) && DialogueDebug.logWarnings) { Debug.LogWarning(string.Format("{0}: Bark (speaker={1}, listener={2}): '{3}' bark UI is null or disabled", new System.Object[] { DialogueDebug.Prefix, speaker, listener, subtitle.formattedText.text }), speaker); } // Show the bark subtitle: if ((barkUI != null) && (barkUI as MonoBehaviour).enabled) { barkUI.Bark(subtitle); } // Start the sequence: Sequencer sequencer = null; if (!(skipSequence || string.IsNullOrEmpty(subtitle.sequence))) { sequencer = DialogueManager.PlaySequence(subtitle.sequence, speaker, listener, false, false, subtitle.entrytag); } LastSequencer = sequencer; // Wait until the sequence and subtitle are done: while (((sequencer != null) && sequencer.isPlaying) || ((barkUI != null) && barkUI.isPlaying)) { yield return(null); } if (sequencer != null) { GameObject.Destroy(sequencer); } InformParticipants(DialogueSystemMessages.OnBarkEnd, speaker, listener); SetSpeakerCurrentBarkPriority(speaker, 0); }
static BarkController() { LastSequencer = null; }
/// <summary> /// Initializes the base properties. The Sequencer calls this method before handing control /// to the command. /// </summary> /// <param name='sequencer'> /// A reference to the Sequencer. /// </param> /// <param name='parameters'> /// The parameters for the command. /// </param> public void Initialize(Sequencer sequencer, Transform speaker, Transform listener, params string[] parameters) { Initialize(sequencer, null, speaker, listener, parameters); }
public static void Pd1Positive(Sequencer sequencer) { sequencer.SBus.Data.Value = 1; }
public void ShouldReturnNegativeDistanceIfSecondIdComesAfter() { var sequencer = new Sequencer(8); Assert.That(sequencer.Distance(0, 8), Is.EqualTo(-8)); }
internal override void Execute(Sequencer sequencer) { sequencer.SequenceNextEventStream(Track, Beat, Tick); }
public void Setup() { sequencer = new Sequencer(); }
public static void PdIvr(Sequencer sequencer) { sequencer.SBus.Data.Value = sequencer.InterruptVectorRegister.Data.Value; }
protected virtual void DoBarkAction(Transform actor) { switch (barkSource) { case BarkSource.Conversation: if (string.IsNullOrEmpty(barkConversation)) { return; } if (DialogueManager.isConversationActive && !allowBarksDuringConversations) { if (DialogueDebug.logWarnings) { Debug.LogWarning("Dialogue System: Bark triggered on " + name + ", but a conversation is already active.", GetBarker(barkConversation)); } } else if (cacheBarkLines) { BarkCachedLine(GetBarker(barkConversation), Tools.Select(barkTarget, actor)); } else { if (barkGroupMember != null) { barkGroupMember.GroupBark(barkConversation, Tools.Select(barkTarget, actor), barkHistory); } else { DialogueManager.Bark(barkConversation, GetBarker(barkConversation), Tools.Select(barkTarget, actor), barkHistory); } sequencer = BarkController.LastSequencer; } break; case BarkSource.Text: if (string.IsNullOrEmpty(barkText)) { return; } if (DialogueManager.isConversationActive && !allowBarksDuringConversations) { if (DialogueDebug.logWarnings) { Debug.LogWarning("Dialogue System: Bark triggered on " + name + ", but a conversation is already active.", GetBarker(null)); } } else { if (barkGroupMember != null) { barkGroupMember.GroupBarkString(barkText, Tools.Select(barkTarget, actor), barkTextSequence); } else { DialogueManager.BarkString(barkText, GetBarker(null), Tools.Select(barkTarget, actor), barkTextSequence); } sequencer = BarkController.LastSequencer; } break; } }
public static void PdT(Sequencer sequencer) { sequencer.SBus.Data.Value = sequencer.TemporaryRegister.Data.Value; }
/// <summary> /// Stops a sequence. /// </summary> /// <param name='sequencer'> /// The sequencer playing the sequence. /// </param> public static void StopSequence(Sequencer sequencer) { instance.StopSequence(sequencer); }
public void SetUp() { _gatingSequence = new Sequence(); _sequencer = NewProducer(_producerType, _bufferSize, new BlockingWaitStrategy()); }
/// <summary> /// Attempts to make a character bark. This is a coroutine; you must start it using /// StartCoroutine() or Unity will hang. Shows a line from the named conversation, plays /// the sequence, and sends OnBarkStart/OnBarkEnd messages to the participants. /// </summary> /// <param name='conversationTitle'> /// Title of conversation to pull bark lines from. /// </param> /// <param name='speaker'> /// Speaker performing the bark. /// </param> /// <param name='listener'> /// Listener that the bark is directed to; may be <c>null</c>. /// </param> /// <param name='barkHistory'> /// Bark history used to keep track of the most recent bark so this method can iterate /// through them in a specified order. /// </param> /// <param name='database'> /// The dialogue database to use. If <c>null</c>, uses DialogueManager.MasterDatabase. /// </param> public static IEnumerator Bark(string conversationTitle, Transform speaker, Transform listener, BarkHistory barkHistory, DialogueDatabase database = null, bool stopAtFirstValid = false) { if (CheckDontBarkDuringConversation()) { yield break; } bool barked = false; if (string.IsNullOrEmpty(conversationTitle) && DialogueDebug.logWarnings) { Debug.Log(string.Format("{0}: Bark (speaker={1}, listener={2}): conversation title is blank", new System.Object[] { DialogueDebug.Prefix, speaker, listener }), speaker); } if (speaker == null) { speaker = DialogueManager.instance.FindActorTransformFromConversation(conversationTitle, "Actor"); } if ((speaker == null) && DialogueDebug.logWarnings) { Debug.LogWarning(string.Format("{0}: Bark (speaker={1}, listener={2}): '{3}' speaker is null", new System.Object[] { DialogueDebug.Prefix, speaker, listener, conversationTitle })); } if (string.IsNullOrEmpty(conversationTitle) || (speaker == null)) { yield break; } IBarkUI barkUI = speaker.GetComponentInChildren(typeof(IBarkUI)) as IBarkUI; if ((barkUI == null) && DialogueDebug.logWarnings) { Debug.LogWarning(string.Format("{0}: Bark (speaker={1}, listener={2}): '{3}' speaker has no bark UI", new System.Object[] { DialogueDebug.Prefix, speaker, listener, conversationTitle }), speaker); } var firstValid = stopAtFirstValid || ((barkHistory == null) ? false : barkHistory.order == (BarkOrder.FirstValid)); ConversationModel conversationModel = new ConversationModel(database ?? DialogueManager.masterDatabase, conversationTitle, speaker, listener, DialogueManager.allowLuaExceptions, DialogueManager.isDialogueEntryValid, -1, firstValid); ConversationState firstState = conversationModel.firstState; if ((firstState == null) && DialogueDebug.logWarnings) { Debug.LogWarning(string.Format("{0}: Bark (speaker={1}, listener={2}): '{3}' has no START entry", new System.Object[] { DialogueDebug.Prefix, speaker, listener, conversationTitle }), speaker); } if ((firstState != null) && !firstState.hasAnyResponses && DialogueDebug.logWarnings) { Debug.LogWarning(string.Format("{0}: Bark (speaker={1}, listener={2}): '{3}' has no valid bark at this time", new System.Object[] { DialogueDebug.Prefix, speaker, listener, conversationTitle }), speaker); } if ((firstState != null) && firstState.hasAnyResponses) { try { Response[] responses = firstState.hasNPCResponse ? firstState.npcResponses : firstState.pcResponses; int index = (barkHistory ?? new BarkHistory(BarkOrder.Random)).GetNextIndex(responses.Length); DialogueEntry barkEntry = responses[index].destinationEntry; if ((barkEntry == null) && DialogueDebug.logWarnings) { Debug.LogWarning(string.Format("{0}: Bark (speaker={1}, listener={2}): '{3}' bark entry is null", new System.Object[] { DialogueDebug.Prefix, speaker, listener, conversationTitle }), speaker); } if (barkEntry != null) { var priority = GetEntryBarkPriority(barkEntry); if (priority < GetSpeakerCurrentBarkPriority(speaker)) { if (DialogueDebug.logInfo) { Debug.Log(string.Format("{0}: Bark (speaker={1}, listener={2}): '{3}' currently barking a higher priority bark", new System.Object[] { DialogueDebug.Prefix, speaker, listener, conversationTitle }), speaker); } yield break; } SetSpeakerCurrentBarkPriority(speaker, priority); barked = true; InformParticipants(DialogueSystemMessages.OnBarkStart, speaker, listener); ConversationState barkState = conversationModel.GetState(barkEntry, false); if (barkState == null) { if (DialogueDebug.logWarnings) { Debug.LogWarning(string.Format("{0}: Bark (speaker={1}, listener={2}): '{3}' can't find a valid dialogue entry", new System.Object[] { DialogueDebug.Prefix, speaker, listener, conversationTitle }), speaker); } yield break; } if (firstState.hasNPCResponse) { CharacterInfo tempInfo = barkState.subtitle.speakerInfo; barkState.subtitle.speakerInfo = barkState.subtitle.listenerInfo; barkState.subtitle.listenerInfo = tempInfo; } if (DialogueDebug.logInfo) { Debug.Log(string.Format("{0}: Bark (speaker={1}, listener={2}): '{3}'", new System.Object[] { DialogueDebug.Prefix, speaker, listener, barkState.subtitle.formattedText.text }), speaker); } InformParticipantsLine(DialogueSystemMessages.OnBarkLine, speaker, barkState.subtitle); // Show the bark subtitle: if (((barkUI == null) || !(barkUI as MonoBehaviour).enabled) && DialogueDebug.logWarnings) { Debug.LogWarning(string.Format("{0}: Bark (speaker={1}, listener={2}): '{3}' bark UI is null or disabled", new System.Object[] { DialogueDebug.Prefix, speaker, listener, barkState.subtitle.formattedText.text }), speaker); } if ((barkUI != null) && (barkUI as MonoBehaviour).enabled) { barkUI.Bark(barkState.subtitle); } // Start the sequence: var sequencer = PlayBarkSequence(barkState.subtitle, speaker, listener); LastSequencer = sequencer; // Wait until the sequence and subtitle are done: while (((sequencer != null) && sequencer.isPlaying) || ((barkUI != null) && barkUI.isPlaying)) { yield return(null); } if (sequencer != null) { GameObject.Destroy(sequencer); } } } finally { if (barked) { InformParticipants(DialogueSystemMessages.OnBarkEnd, speaker, listener); SetSpeakerCurrentBarkPriority(speaker, 0); } } } }
public EnemyAttackEngine(Sequencer enemyrDamageSequence) { _targetDamageSequence = enemyrDamageSequence; TaskRunner.Instance.Run(new TimedLoopActionEnumerator(Tick)); }
public void ValuesAfterWrappingConsideredToBeGreater() { var sequencer = new Sequencer(8); Assert.That(sequencer.Distance(254, 4), Is.EqualTo(-6)); }
public void StartsAt0([Range(1, 63)] int bits) { var sequencer = new Sequencer(bits); Assert.That(sequencer.Next(), Is.EqualTo(0)); }
public void Init() { // Make sure we don't initialize twice and create a disaster if (Initialized) { return; } Initialized = true; // Create timer for event management eventTimer = new Timer(10); eventTimer.Elapsed += delegate { lock (NoteManager.Backlog) { while (NoteManager.Backlog.Any() && NoteManager.Backlog.First().StartTime <= Stopwatch.ElapsedMilliseconds) { Event ev = NoteManager.Backlog.Dequeue(); ev.Method(); } } }; LoadingStatus = 0; // Create handles to MIDI devices outDevice = new OutputDevice(0); // You might want to change this! sequencer = new Sequencer(); sequence = new Sequence(); // RendererManager = new RendererManagerManager(NoteManager, Keyboard, sequence, sequencer); LoadingStatus = -1; // Set custom event handlers for sequencer sequencer.ChannelMessagePlayed += delegate(object o, ChannelMessageEventArgs args) { ChannelCommand cmd = args.Message.Command; int channel = args.Message.MidiChannel; int data1 = args.Message.Data1; int data2 = args.Message.Data2; if (cmd == ChannelCommand.NoteOff || (cmd == ChannelCommand.NoteOn && data2 == 0)) { if (NoteManager.LastPlayed[channel, data1] != null) { Note n = NoteManager.LastPlayed[channel, data1]; n.Playing = false; } } else if (cmd == ChannelCommand.NoteOn) { Note n = new Note { Key = data1, Length = 0, Playing = true, Position = 0, Time = Stopwatch.ElapsedMilliseconds, Channel = channel, Velocity = data2 }; lock (NoteManager.Notes) NoteManager.Notes.Add(n); if (NoteManager.LastPlayed[channel, data1] != null) { NoteManager.LastPlayed[channel, data1].Playing = false; } NoteManager.LastPlayed[channel, data1] = n; } lock (NoteManager.Backlog) { NoteManager.Backlog.Enqueue(new Event(delegate { outDevice.Send(args.Message); if (cmd == ChannelCommand.NoteOff || (cmd == ChannelCommand.NoteOn && data2 == 0)) { if (Keyboard.KeyPressed[data1] > 0) { Keyboard.KeyPressed[data1]--; } } else if (cmd == ChannelCommand.NoteOn) { Keyboard.KeyPressed[data1]++; } else if (cmd == ChannelCommand.Controller) { if (data1 == 0x07) { Keyboard.ChannelVolume[channel] = data2; } } else if (cmd == ChannelCommand.PitchWheel) { int pitchValue = Get14BitValue(data1, data2); Keyboard.Pitchwheel[channel] = pitchValue; } }, Stopwatch.ElapsedMilliseconds, Delay)); } }; // BUG A bug in the Sanford.Multimedia.Midi library prevents certain SysEx messages from playing // Disabling SysEx messages completely solves this issue //sequencer.SysExMessagePlayed += delegate (object o, SysExMessageEventArgs args) //{ // lock (NoteManager.Backlog) // NoteManager.Backlog.Enqueue(new Event(() => { try { outDevice.Send(args.Message); } catch { } }, Stopwatch.ElapsedMilliseconds, Delay)); //}; sequencer.Chased += delegate(object o, ChasedEventArgs args) { foreach (ChannelMessage message in args.Messages) { lock (NoteManager.Backlog) NoteManager.Backlog.Enqueue(new Event(() => { try { outDevice.Send(message); } catch { } }, Stopwatch.ElapsedMilliseconds, Delay)); } }; sequencer.Stopped += delegate(object o, StoppedEventArgs args) { foreach (ChannelMessage message in args.Messages) { lock (NoteManager.Backlog) NoteManager.Backlog.Enqueue(new Event(() => { try { outDevice.Send(message); } catch { } }, Stopwatch.ElapsedMilliseconds, Delay)); } // Stop everything when the MIDI is done playing Stop(); }; sequence.LoadCompleted += delegate(object o, AsyncCompletedEventArgs args) { LoadingStatus = -1; if (args.Cancelled) { //MessageBox.Show("The operation was cancelled.", "MIDITrailer - Error", MessageBoxButtons.OK, // MessageBoxIcon.Error); return; } sequencer.Sequence = sequence; if (LoadCompleted != null) { LoadCompleted.Invoke(this, args); } }; sequence.LoadProgressChanged += delegate(object sender, ProgressChangedEventArgs args) { LoadingStatus = args.ProgressPercentage; }; }