Beispiel #1
0
        public void Update(int filterIndex, Selection selection, float deltaTime)
        {
            foreach (var s in selection)
            {
            }

            Entity             e = selection.First();
            C_MonsterGenerator c = e.GetComp <C_MonsterGenerator>();

            if (c.current == null)
            {
                return;
            }

            if (c.timeForNextWave > 0)
            {
                c.timeForNextWave -= deltaTime;
                if (c.timeForNextWave > 0)
                {
                    return;
                }
            }

            if (c.timeForNextWave < 0)
            {
                float fixTime = -c.timeForNextWave;
                c.timeForNextWave = 0;
                c.timer           = fixTime;
                return;
            }

            c.timer += deltaTime;

            while (c.timer > c.current.interval)
            {
                c.timer -= c.current.interval;

                MonsterEntry mm      = CfgProxy.Instance.Get <MonsterEntry>(c.current.monsterID);
                Entity       monster = context.CreateMonster(mm);

                c.counter++;

                if (c.counter == c.current.count)
                {
                    if (c.currentWave < c.monsterSequences.Count - 1)
                    {
                        c.currentWave++;
                        c.current = c.monsterSequences[c.currentWave];
                        c.ResetCounter();
                    }
                    else
                    {
                        c.current = null;
                    }

                    break;
                }
            }
        }
Beispiel #2
0
        public static Entity CreateMonster(this Context context, MonsterEntry monsterEntry)
        {
            Entity  monster = context.Add();
            IRecipe recipe  = Recipes.Get <MonsterRecipe>();

            if (recipe == null)
            {
                throw new Exception($"获取 {nameof(MonsterRecipe)}失败 {monsterEntry.recipe}");
            }

            monster.AddComp <C_MonsterConfig>().cfg = monsterEntry;
            recipe.Setup(monster, context);
            return(monster);
        }
Beispiel #3
0
        public void Setup(Entity e, Context context)
        {
            e.AddComp <C_IdentifyMonster>();
            C_Position position = e.AddComp <C_Position>();
            Entity     e1       = context.SelectOne <C_LevelData>();
            LinkedListNode <LevelEntry.TileData> first = e1.GetComp <C_LevelData>().paths.First;

            position.position = first.Value.position;
            e.AddComp <C_Rotation>();


            MonsterEntry monsterEntry = e.GetComp <C_MonsterConfig>().cfg;

            C_MonsterFindPath monsterFindPath = e.AddComp <C_MonsterFindPath>();

            monsterFindPath.target   = first;
            monsterFindPath.rotating = 0;


            e.AddComp <C_TargetPos>();
            e.AddComp <C_MoveToPos>().speed = monsterEntry.speed / 100f;
            e.AddComp <C_MoveStart>();

            C_MonsterHp hp = e.AddComp <C_MonsterHp>();
            int         h  = monsterEntry.hp / 100;

            hp.max  = h;
            hp.rest = h;

            C_Asset asset = e.AddComp <C_Asset>();

            asset.mesh     = "Mesh/MonsterTest"; // monsterEntry.asset;
            asset.material = "Materials/Red";

            e.AddComp <C_Renderer>();
        }