Esempio n. 1
0
        public static void afterLoadingMap(StaticGod god)
        {
            // ##### TEST ######
            var player = god.scene.FindEntity(EntityNames.player);
            var tiled  = god.tiled;
            var actors = tiled.GetObjectGroup("actors");

            if (actors == null)
            {
                return;
            }

            var actor       = actors.Objects[0];
            var pos         = actor.tilePos(tiled);
            var actorEntity = god.scene.CreateEntity("script-test");

            actorEntity.SetParent(god.scene.FindEntity(EntityNames.tiled));
            var factory = EntityFactory
                          .begin(actorEntity, god.posUtil)
                          .body(pos, Dir9.S, true, true)
                          .viewWodi8(Content.Chips.Wodi8.Cook_a)
                          .script(RlHooks.testScript(player, actorEntity, "aaaaa\nbbbb\ncccccc\nddddddddddddd:"));

            god.gameCx.entities.Add(actorEntity);
        }
Esempio n. 2
0
 public void genDungeon(StaticGod god)
 {
     this.gen = new KarceroTiledGenerator();
     // this.gen.genWithDefaultConfig(god.tiled.Width - 1, god.tiled.Height - 1);
     // TODO: remove the margin
     this.gen.genWithDefaultConfig(god.tiled.Width - 1, god.tiled.Height - 1);
     // this.gen.genWithDefaultConfig(god.tiled.Width, god.tiled.Height);
     this.gen.copyToTiled(god.tiled);
 }
Esempio n. 3
0
        public static void init(StaticGod god)
        {
            string initialStage = Content.Stages.@Static;

            god.ctrlCx = ControlContext.create(new VInput());
            RlSceneSetup.loadTiledMap(god, initialStage);
            setup(god);

            RlHooks.afterInit(god);
        }
Esempio n. 4
0
        public override void OnStart()
        {
            base.OnStart();

            this.god  = new StaticGod();
            god.scene = this;
            RlSceneSetup.init(god);

#if DEBUG
            RlInspectorSpawn.spawn(god);
#endif
        }
Esempio n. 5
0
        public void newFloor(StaticGod god)
        {
            KarceroDunGen.clearEnemies(god);

            getPlayer(god).get <FovComp>().fovFow.clearAll();

            this.genDungeon(god);
            this.genEnemies(god);
            this.genStair(god);
            this.placePlayer(god);

            // FIXME: do not be dependent on RotEntityList or provide a safe way
            (god.gameCx.entities as RotEntityList).setIndex(0);
        }
Esempio n. 6
0
        public void genStair(StaticGod god)
        {
            var posUtil  = god.posUtil;
            var entities = god.gameCx.entities;

            var stairGen = EntityFactory.begin(god.scene, EntityNames.stair, posUtil);

            stairGen.entity.SetParent(god.scene.FindEntity(EntityNames.tiled));
            entities.Add(stairGen
                         .body(gen.randomPosInRoom(god.gameCx), Dir9.random(), false, false)
                         .viewWodi8(Content.Chips.Wodi8.Cook_a)
                         .add(new Stair(Stair.Kind.Downstair))
                         .entity
                         );
        }
Esempio n. 7
0
        /// <summary> Delete entities without player tag </summary>
        public static void clearEnemies(StaticGod god)
        {
            var entities = god.gameCx.entities;

            for (int i = 0; i < entities.Count; i++)
            {
                var entity = entities[i];
                if (entity.has <Player>())
                {
                    continue;
                }
                entities.Remove(entity);
                i--;
                entity.Destroy();
            }
        }
Esempio n. 8
0
        public static void afterInit(StaticGod god)
        {
            var gen = new KarceroDunGen();

            god.rules.add(new Rules.StairRule(gen, god));

            // This should be called after actors are set up so that components work
            gen.newFloor(god);

            var e = god.scene.CreateEntity(EntityNames.debugDungeon);

            e.add(new DebugDungeonComp()
            {
                gen = gen, god = god
            });

            // EpUiTestScene.testEpUi(god.scene);
        }
Esempio n. 9
0
        public void genEnemies(StaticGod god)
        {
            var posUtil  = god.posUtil;
            var entities = god.gameCx.entities;

            int N = Nez.Random.Range(3, 7);

            for (int i = 0; i < N; i++)
            {
                var enemyGen = EntityFactory.begin(god.scene, $"actor_{i}", posUtil);
                enemyGen.entity.SetParent(god.scene.FindEntity(EntityNames.tiled));
                entities.Add(enemyGen
                             .body(gen.randomPosInRoom(god.gameCx), Dir9.random(), true, false)
                             .actor(new Beh.RandomWalk(enemyGen.entity), 3)
                             .viewWodi8(Content.Chips.Pochi.Animals.Usagi02)
                             .performance(50, 10, 5)
                             .entity
                             );
                continue;
            }
        }
Esempio n. 10
0
        // FIXME: the hacks
        void placePlayer(StaticGod god)
        {
            // HACK: tag
            var player = getPlayer(god);
            var pos    = gen.randomPosInsideRoom(god.gameCx);

            // HACK: or invoke event
            player.get <Body>().setPos(pos);
            player.get <CharaView>().forceUpdatePos();
            var playerFov = player.get <FovComp>();

            playerFov.refresh();
            Rules.PlayerFovRule.updateEntityVisiblitiesAll(god.scene, playerFov.fovFow);
            // HACK to update camera
            // TODO: move camera at once
            var camera = god.scene.FindEntity(EntityNames.camera)?.get <FollowCamera>();

            if (camera != null)
            {
                (camera.setEntity(player) as IUpdatable).Update();
            }
        }
Esempio n. 11
0
        static void setup(StaticGod god)
        {
            god.rules = new RlRuleStorage(god.gameCx);
            god.view  = new RlViewPlatform(
                new RlViewServices(god.ctrlCx, god.gameCx, god.posUtil)
                );
            RlPluginSetter.initRules(god.rules, god.ctrlCx, god.posUtil, god.scene);
            RlPluginSetter.initViews(god.view);

            { // create controls
                var cradle = god.ctrlCx.cradle;
                cradle.addAndPush(new TickControl(god.gameState, god.gameCx, god.view));
                cradle.add(new AnimationControl());
                cradle.add(new PlayerControl(god.gameCx));
            }

            { // script control
                var cradle   = god.ctrlCx.cradle;
                var scripter = cradle.add(new ScriptControl());
                RlPluginSetter.initScriptViews(scripter, god.ctrlCx, god.posUtil);
            }
        }
Esempio n. 12
0
 // public Entity downStair;
 Entity getPlayer(StaticGod god) => god.scene.FindEntity(EntityNames.player);
Esempio n. 13
0
        /// <summary> Loads a tiled map and updates contexts dependent on it </summary>
        public static void loadTiledMap(StaticGod god, string path)
        {
            // dispose all the entities except the player
            if (god.gameCx != null)
            {
                for (int i = 0; i < god.gameCx.entities.Count; i++)
                {
                    var e = god.gameCx.entities[i];
                    if (e == null)
                    {
                        Nez.Debug.Log("Null found as an entity in the roguelike world when clearing it");
                        god.gameCx.entities.RemoveAt(i);
                        continue;
                    }
                    if (e.has <Player>())
                    {
                        continue;
                    }
                    god.gameCx.entities.RemoveAt(i);
                    i--;
                    e.Destroy();
                }
            }

            // dispose the previous tiled map if there is one
            var tiledEntity = god.scene.FindEntity(EntityNames.tiled);

            if (tiledEntity == null)
            {
                tiledEntity = god.scene.CreateEntity(EntityNames.tiled);
            }
            else
            {
                tiledEntity.rm <TiledMapRenderer>();
            }

            { // load tiled map & update contexts
                god.tiled = god.scene.Content.LoadTiledMap(path);

                var tiledComp = tiledEntity
                                // .add(new TiledMapRenderer(tiled, collisionLayerName: "collision"))
                                .add(new TiledMapRenderer(god.tiled))
                                .zCx(layer: Layers.Stage, depth: Depths.Stage);

                // restore all contexts
                god.posUtil   = new PosUtil(god.tiled, god.scene.Camera);
                god.gameCx    = new RlGameContext(new TiledRlStage(god.tiled), new RotEntityList());
                god.gameState = new RlGameState(god.gameCx.evHub, god.gameCx.entities as iRlActorIterator);
                god.rules?.replCtx(god.gameCx);
                god.view?.replCtx(god.gameCx, god.posUtil);
            }

            // FIXME: player is always created when loading a map
            var player = EntityFactory.genPlayer(god.scene, god.gameCx.stage as TiledRlStage, god.posUtil, god.tiled).entity;

            player.SetParent(tiledEntity);
            god.gameCx.entities.Add(player);
            setupFollowCamera(god.scene, player, god.tiled);

            RlSceneSetup.centeriszeTiledIfNeeded(god.tiled, tiledEntity);
            RlHooks.afterLoadingMap(god);
        }