コード例 #1
0
 public DirChange(Entity entity, Dir9 from, Dir9 to, bool isSmooth)
 {
     this.entity   = entity;
     this.from     = from;
     this.to       = to;
     this.isSmooth = isSmooth;
 }
コード例 #2
0
 public Talk(Entity from, Entity to, Dir9 dir, string text)
 {
     this.from = from;
     this.to   = to;
     this.dir  = dir;
     this.text = text;
 }
コード例 #3
0
        public ITweenable turn(Entity e, Dir9 to)
        {
            var body = e.get <Body>();

            if (body.facing == to)
            {
                return(null);
            }

            var anim = new Tw.Turn(e, to, EaseType.Linear, ViewPreferences.turnDirDuration);

            return(anim);
        }
コード例 #4
0
        public ITween <Vector2>[] swing(Entity entity, Dir9 to, float duration)
        {
            var body     = entity.get <Body>();
            var offset   = new Vector2(0, 0);
            var deltaPos = body.facing.vector2 * posUtil.tileSize / 2;
            var ease     = EaseType.QuintOut;

            var chip   = entity.get <CharaView>().chipAnim;
            var first  = chip.tweenLocalOffset(offset + deltaPos, duration, ease);
            var second = chip.tweenLocalOffset(offset, duration, ease);

            return(new ITween <Vector2>[] { first, second });
        }
コード例 #5
0
        /// <summary> Walk animations (made before actually walking) </summary>
        public ITweenable walk(Entity entity, Vec2i to)
        {
            var body    = entity.get <Body>();
            var from    = body.pos;
            var nextDir = (Dir9)Dir9.fromVec2i(to - from);

            // FIXME: lazily change facing or outsource it
            this.changeDir(entity, nextDir);

            var nextPosWorld = posUtil.gridToWorldCentered(to);
            var tween        = new Tw.Walk(entity.Transform, ViewPreferences.walkDuration, nextPosWorld, ViewPreferences.walkEase);

            return(tween);
        }
コード例 #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
                         );
        }
コード例 #7
0
ファイル: PlayerControl.cs プロジェクト: toyboot4e/Rot
        /// <summary> Maps directional input to events depending on mode </summary>
        RlEvent handleDir(Dir9 dir)
        {
            if (this.diaMode.isOn && dir.isCardinal)
            {
                return(null); // filtered
            }

            var body = this.controller.actor.get <Body>();

            // TODO: remove game logic from the controller
            if (!this.dirMode.isOn && new RlLogic(this.gameCtx).canWalkIn(this.controller.actor, dir))
            {
                return(new RlEv.Walk(this.controller.actor, dir));
            }
            else
            {
                return(RlEv.DirChange.smooth(this.controller.actor, dir).noConsumeTurn());
            }
        }
コード例 #8
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;
            }
        }
コード例 #9
0
ファイル: PlayerControl.cs プロジェクト: toyboot4e/Rot
        /// <summary> Updates input mode and maybe creates directional modification for the player controllerd </summary>
        RlEvent updateModes(VInput input)
        {
            this.diaMode.update(input);

            var result = this.dirMode.update(input);

            if (result != KeyMode.Switch.TurnOn)
            {
                return(null);
            }

            if (PlayerControl.findOnlyNeighbor(this.controller.actor, this.gameCtx) is Entity neighbor)
            {
                var entity = this.controller.actor;
                var dir    = Dir9.fromVec2i(neighbor.get <Body>().pos - entity.get <Body>().pos);
                return(RlEv.DirChange.smooth(entity, dir).noConsumeTurn());
            }
            else
            {
                return(null);
            }
        }
コード例 #10
0
 public CharaView setDir(Dir9 dir)
 {
     return(this.setDir(dir.toEDir8()));
 }
コード例 #11
0
        public static CharaView wodi8(Entity entity, PosUtil posUtil, Texture2D texture, Vec2i pos, Dir9 dir)
        {
            var chip = Charachip.wodi8(entity, posUtil, texture);

            return(entity.add(new CharaView(chip)).snapToGridPos(pos).setDir(dir));
        }
コード例 #12
0
ファイル: Adjacency.cs プロジェクト: toyboot4e/Rot
 public static void rm(this Adjacency8 self, Dir9 dir)
 {
     self &= (Adjacency8)dir.asIndexClockwise;
 }
コード例 #13
0
ファイル: BasicBeh.cs プロジェクト: toyboot4e/Rot
        RlEvent iBehavior.make()
        {
            var dir = Dir9.random();

            return(new RlEv.Walk(entity, dir));
        }
コード例 #14
0
ファイル: VInput.cs プロジェクト: toyboot4e/Rot
 VKeyResult(Kind kind, VKey?key, Dir9 dir)
 {
     this.kind = kind;
     this.dir  = dir;
     this.key  = key;
 }
コード例 #15
0
ファイル: VInput.cs プロジェクト: toyboot4e/Rot
 public static VKeyResult newDir(Dir9 dir)
 {
     return(new VKeyResult(Kind.Dir, null, dir));
 }
コード例 #16
0
 public JustSwing(Entity entity, Dir9?dir = null)
 {
     this.entity = entity;
     this.dir    = dir ?? entity.get <Body>().facing;
 }
コード例 #17
0
 public static DirChange smooth(Entity entity, Dir9 to)
 {
     return(new DirChange(entity, entity.get <Body>().facing, to, isSmooth: true));
 }
コード例 #18
0
ファイル: Interactable.cs プロジェクト: toyboot4e/Rot
 public Interact(Entity e, Dir9 d)
 {
     (this.entity, this.dir) = (e, d);
 }
コード例 #19
0
 public static DirChange quick(Entity entity, Dir9 to)
 {
     return(new DirChange(entity, entity.get <Body>().facing, to, isSmooth: false));
 }
コード例 #20
0
 /// <summary> Changes the direction of image of the entity </summary>
 public void changeDir(Entity entity, Dir9 dir)
 {
     entity.get <CharaView>().setDir(dir);
 }
コード例 #21
0
 public WalkInObstacle(Entity e, Dir9 d)
 {
     (this.entity, this.dir) = (e, d);
 }
コード例 #22
0
 public Walk(Entity e, Dir9 d)
 {
     (this.entity, this.dir) = (e, d);
 }
コード例 #23
0
ファイル: EntityFactory.cs プロジェクト: toyboot4e/Rot
 public EntityFactory body(Vec2i pos, Dir9 dir, bool isBlocker, bool isDiagonalBlocker)
 {
     this.entity.add(new Body(pos, dir, isBlocker, isDiagonalBlocker));
     return(this);
 }
コード例 #24
0
 public MeleeAttack(Entity entity, Dir9?dir = null)
 {
     this.entity = entity;
     this.dir    = dir ?? entity.get <Body>().facing;
 }