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();
        }
    }
Beispiel #4
0
    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;
        }
    }
Beispiel #5
0
        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);
        }
Beispiel #8
0
 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;
        }
Beispiel #10
0
 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;
 }
Beispiel #11
0
    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);
    }
Beispiel #12
0
 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);
     }
 }
Beispiel #13
0
    //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;
    }
Beispiel #17
0
    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;
    }
Beispiel #20
0
    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;
            }
        }
    }
Beispiel #22
0
    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;
    }
Beispiel #23
0
 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());
 }
Beispiel #24
0
 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;
        }
    }
Beispiel #29
0
    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);
                }
            }
        }
    }
Beispiel #30
0
    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;
        }
    }
Beispiel #31
0
 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();
    }
Beispiel #33
0
 public static void PdAdr(Sequencer sequencer)
 {
     sequencer.SBus.Data.Value = sequencer.MpmAddressRegister.Data.Value;
 }
Beispiel #34
0
 public static void PdPc(Sequencer sequencer)
 {
     sequencer.SBus.Data.Value = sequencer.ProgramCounterRegister.Data.Value;
 }
Beispiel #35
0
 public static void PdFlag(Sequencer sequencer)
 {
     sequencer.SBus.Data.Value = sequencer.FlagRegister.Data.Value;
 }
Beispiel #36
0
        public void ItShouldRememberBitSize([Range(1, 63)] int bits)
        {
            var sequencer = new Sequencer(bits);

            Assert.That(sequencer.Bits, Is.EqualTo(bits));
        }
Beispiel #37
0
 public virtual void Awake()
 {
     barkHistory = new BarkHistory(barkOrder);
     sequencer   = null;
 }
Beispiel #38
0
        public void ShouldReturnPositiveDistanceIfSecondIdComesBefore()
        {
            var sequencer = new Sequencer(8);

            Assert.That(sequencer.Distance(8, 0), Is.EqualTo(8));
        }
Beispiel #39
0
 public static void Pd0(Sequencer sequencer)
 {
     sequencer.SBus.Data.Value = 0;
 }
Beispiel #40
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);
        }
Beispiel #41
0
 public Metrics(int bitSize = 10)
 {
     buffer    = new Frame[1 << bitSize];
     Sequencer = new Sequencer(bitSize);
 }
Beispiel #42
0
 public PlayerState(Sequencer sequencer)
 {
     this.sequencer = sequencer;
     showText       = "";
 }
Beispiel #43
0
 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;
 }
Beispiel #46
0
 /// <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);
 }
Beispiel #47
0
 public static void Pd1Positive(Sequencer sequencer)
 {
     sequencer.SBus.Data.Value = 1;
 }
Beispiel #48
0
        public void ShouldReturnNegativeDistanceIfSecondIdComesAfter()
        {
            var sequencer = new Sequencer(8);

            Assert.That(sequencer.Distance(0, 8), Is.EqualTo(-8));
        }
Beispiel #49
0
 internal override void Execute(Sequencer sequencer)
 {
     sequencer.SequenceNextEventStream(Track, Beat, Tick);
 }
 public void Setup()
 {
     sequencer = new Sequencer();
 }
Beispiel #51
0
 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;
            }
        }
Beispiel #53
0
 public static void PdT(Sequencer sequencer)
 {
     sequencer.SBus.Data.Value = sequencer.TemporaryRegister.Data.Value;
 }
Beispiel #54
0
 /// <summary>
 /// Stops a sequence.
 /// </summary>
 /// <param name='sequencer'>
 /// The sequencer playing the sequence.
 /// </param>
 public static void StopSequence(Sequencer sequencer)
 {
     instance.StopSequence(sequencer);
 }
Beispiel #55
0
 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);
                    }
                }
            }
        }
Beispiel #57
0
        public EnemyAttackEngine(Sequencer enemyrDamageSequence)
        {
            _targetDamageSequence = enemyrDamageSequence;

            TaskRunner.Instance.Run(new TimedLoopActionEnumerator(Tick));
        }
Beispiel #58
0
        public void ValuesAfterWrappingConsideredToBeGreater()
        {
            var sequencer = new Sequencer(8);

            Assert.That(sequencer.Distance(254, 4), Is.EqualTo(-6));
        }
Beispiel #59
0
        public void StartsAt0([Range(1, 63)] int bits)
        {
            var sequencer = new Sequencer(bits);

            Assert.That(sequencer.Next(), Is.EqualTo(0));
        }
Beispiel #60
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;
            };
        }