示例#1
0
文件: Player.cs 项目: rlods/PocDotNet
        public void tick(bool up, bool down, bool left, bool right, bool turnLeft, bool turnRight)
        {
            if (dead) {
                up = down = left = right = turnLeft = turnRight = false;
                deadTime++;
                if (deadTime > 60 * 2) {
                    level.lose();
                }
            } else {
                time++;

            }
            if (itemUseTime > 0) itemUseTime--;
            if (hurtTime > 0) hurtTime--;

            Block onBlock = level.getBlock((int) (x + 0.5), (int) (z + 0.5));

            double fh = onBlock.getFloorHeight(this);
            if (onBlock is WaterBlock && !(lastBlock is WaterBlock))
            {
                Sound.splash.play();
            }

            lastBlock = onBlock;

            if (dead) fh = -0.6;
            if (fh > y) {
                y += (fh - y) * 0.2;
                ya = 0;
            } else {
                ya -= 0.01;
                y += ya;
                if (y < fh) {
                    y = fh;
                    ya = 0;
                }
            }

            double rotSpeed = 0.05;
            double walkSpeed = 0.03 * onBlock.getWalkSpeed(this);

            if (turnLeft) rota += rotSpeed;
            if (turnRight) rota -= rotSpeed;

            double xm = 0;
            double zm = 0;
            if (up) zm--;
            if (down) zm++;
            if (left) xm--;
            if (right) xm++;
            double dd = xm * xm + zm * zm;
            if (dd > 0) dd = Math.Sqrt(dd);
            else dd = 1;
            xm /= dd;
            zm /= dd;

            bob *= 0.6;
            turnBob *= 0.8;
            turnBob += rota;
            bob += Math.Sqrt(xm * xm + zm * zm);
            bobPhase += Math.Sqrt(xm * xm + zm * zm) * onBlock.getWalkSpeed(this);
            bool wasSliding = sliding;
            sliding = false;

            if (onBlock is IceBlock && getSelectedItem() != Item.skates) {
                if (xa * xa > za * za) {
                    sliding = true;
                    za = 0;
                    if (xa > 0) xa = 0.08;
                    else xa = -0.08;
                    z += (((int) (z + 0.5)) - z) * 0.2;
                } else if (xa * xa < za * za) {
                    sliding = true;
                    xa = 0;
                    if (za > 0) za = 0.08;
                    else za = -0.08;
                    x += (((int) (x + 0.5)) - x) * 0.2;
                } else {
                    xa -= (xm * Math.Cos(rot) + zm * Math.Sin(rot)) * 0.1;
                    za -= (zm * Math.Cos(rot) - xm * Math.Sin(rot)) * 0.1;
                }

                if (!wasSliding && sliding) {
                    Sound.slide.play();
                }
            } else {
                xa -= (xm * Math.Cos(rot) + zm * Math.Sin(rot)) * walkSpeed;
                za -= (zm * Math.Cos(rot) - xm * Math.Sin(rot)) * walkSpeed;
            }

            move();

            double friction = onBlock.getFriction(this);
            xa *= friction;
            za *= friction;
            rot += rota;
            rota *= 0.4;
        }
示例#2
0
文件: Level.cs 项目: rlods/PocDotNet
        protected virtual void decorateBlock(int x, int y, Block block, int col)
        {
            block.decorate(this, x, y);
            if (col == 0xFFFF00) {
                xSpawn = x;
                ySpawn = y;
            }
            if (col == 0xAA5500) addEntity(new BoulderEntity(x, y));
            if (col == 0xff0000) addEntity(new BatEntity(x, y));
            if (col == 0xff0001) addEntity(new BatBossEntity(x, y));
            if (col == 0xff0002) addEntity(new OgreEntity(x, y));
            if (col == 0xff0003) addEntity(new BossOgre(x, y));
            if (col == 0xff0004) addEntity(new EyeEntity(x, y));
            if (col == 0xff0005) addEntity(new EyeBossEntity(x, y));
            if (col == 0xff0006) addEntity(new GhostEntity(x, y));
            if (col == 0xff0007) addEntity(new GhostBossEntity(x, y));
            if (col == 0x1A2108 || col == 0xff0007) {
                block.floorTex = 7;
                block.ceilTex = 7;
            }

            if (col == 0xC6C6C6) block.col = Art.GetColor(0xa0a0a0);
            if (col == 0xC6C697) block.col = Art.GetColor(0xa0a0a0);
            if (col == 0x653A00) {
                block.floorCol = Art.GetColor(0xB56600);
                block.floorTex = 3 * 8 + 1;
            }

            if (col == 0x93FF9B) {
                block.col = Art.GetColor(0x2AAF33);
                block.tex = 8;
            }
        }