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; }
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; } }