public NumberBlit(BitmapData spriteSheet, Rectangle rect, int digits = 1, double step = 0.25, int dx = 0, int dy = 0, int spacing = 0, int stepY = 0) : base(spriteSheet, rect, dx, dy) { this.height = height; this.digits = digits; this.step = step; if (stepY > 0) { this.stepY = stepY; } else { this.stepY = (int)rect.width; } if (spacing > 0) { this.spacing = spacing; } else { this.spacing = (int)rect.width; } sourceY = (int)rect.y; drums = new Array <double>(new double [digits]); this.rect = new Rectangle(rect.x, rect.y, spacing, spacing + 1); }
public static UIManager confirmDialog(double x, double y, BlitRect panel, Action okayCallback, BlitRect okayBlit, BlitRect cancelBlit, Action cancelCallback = null, Action selectSoundCallback = null) { dialog = new UIManager(); dialog.selectSoundCallback = selectSoundCallback; cancelCallback = cancelCallback ?? closeDialog; int i; Point point; BlitRect blit; Action f; var buttonPoints = new Array <Point> { new Point(x, y), new Point(x + 3, y + 3), new Point(x + okayBlit.width + 4, y + 3) }; var buttonBlits = new Array <BlitRect> { panel, okayBlit, cancelBlit }; var buttonCallbacks = new Array <Action> { null, okayCallback, cancelCallback }; for (i = 0; i < buttonPoints.length; i++) { point = buttonPoints[i]; blit = buttonBlits[i]; f = buttonCallbacks[i]; dialog.addButton(point.x, point.y, blit, f, null, f != null); } return(dialog); }
public TitleMenu() { uiManager = new UIManager(); uiManager.selectSoundCallback = game.selectSound; levelButtonRect = new Rectangle(0, 0, renderer.numberButtonBlit.width - 1, renderer.numberButtonBlit.height - 1); mapCopyBuffer = Room.create2DArray(Level.ROOM_WIDTH, Level.ROOM_HEIGHT); // puzzle, adventure, editor puzzleButton = uiManager.addButton(Game.WIDTH * 0.5 - renderer.puzzleButtonBlit.width * 2, Game.HEIGHT * 0.5 - renderer.puzzleButtonBlit.height * 0.5, renderer.puzzleButtonBlit, puzzlePressed); adventureButton = uiManager.addButton(Game.WIDTH * 0.5 - renderer.adventureButtonBlit.width * 0.5, Game.HEIGHT * 0.5 - renderer.adventureButtonBlit.height * 0.5, renderer.adventureButtonBlit, adventurePressed); editorButton = uiManager.addButton(Game.WIDTH * 0.5 + renderer.editorButtonBlit.width, Game.HEIGHT * 0.5 - renderer.editorButtonBlit.height * 0.5, renderer.editorButtonBlit, puzzlePressed); // level button grid uiManager.addGroup(); uiManager.changeGroup(1); levelButtons = new Array <BlitButton>(); double buttonX = Game.WIDTH * 0.5 - ((LEVEL_BUTTONS_WIDE - 1) * LEVEL_BUTTON_GAP + levelButtonRect.width * LEVEL_BUTTONS_WIDE) * 0.5; double buttonY = Game.HEIGHT * 0.5 - ((LEVEL_BUTTONS_HIGH - 1) * LEVEL_BUTTON_GAP + levelButtonRect.height * LEVEL_BUTTONS_HIGH) * 0.5; BlitButton levelButton; for (r = 0; r < LEVEL_BUTTONS_HIGH; r++) { for (c = 0; c < LEVEL_BUTTONS_WIDE; c++) { levelButton = uiManager.addButton( buttonX + c * (levelButtonRect.width + LEVEL_BUTTON_GAP), buttonY + r * (levelButtonRect.height + LEVEL_BUTTON_GAP), renderer.numberButtonBlit, levelPressed, levelButtonRect ); levelButton.releaseCallback = levelReleased; levelButton.id = c + r * LEVEL_BUTTONS_WIDE; levelButton.targetId = 1; levelButtons.push(levelButton); } } int border = 2; var buttonRect = new Rectangle(0, 0, renderer.cancelButtonBlit.width, renderer.cancelButtonBlit.height); leftButton = uiManager.addButton(Game.WIDTH * 0.5 - 3 * Game.SCALE + border, Game.HEIGHT - Game.SCALE * 2 + border, renderer.leftButtonBlit, directionPressed, buttonRect); leftButton.visible = false; backButton = uiManager.addButton(Game.WIDTH * 0.5 - 1 * Game.SCALE + border, Game.HEIGHT - Game.SCALE * 2 + border, renderer.cancelButtonBlit, backPressed, buttonRect); rightButton = uiManager.addButton(Game.WIDTH * 0.5 + 1 * Game.SCALE + border, Game.HEIGHT - Game.SCALE * 2 + border, renderer.rightButtonBlit, directionPressed, buttonRect); if (!Game.MOBILE) { loadFromDesktopButton = uiManager.addButton(Game.WIDTH * 0.5 - 5 * Game.SCALE + border, Game.HEIGHT - Game.SCALE * 2 + border, renderer.loadButtonBlit, loadFromDesktop, buttonRect); loadFromDesktopButton.feedCallbackToEvent = true; saveToDesktopButton = uiManager.addButton(Game.WIDTH * 0.5 + 3 * Game.SCALE + border, Game.HEIGHT - Game.SCALE * 2 + border, renderer.saveButtonBlit, saveToDesktop, buttonRect); saveToDesktopButton.feedCallbackToEvent = true; } scoreTextBox = new TextBox(Game.WIDTH, 8, 0x0, 0x0); scoreTextBox.align = "center"; if (UserData.settings.best != null) { setScore((int)UserData.settings.best); } uiManager.changeGroup(0); }
public UIManager(Boolean active = true) { this.active = active; buttons = new Array <BlitButton>(); buttonsOver = new Array <BlitButton>(); buttonGroups = new Array <Array <BlitButton> > { buttons }; currentGroup = 0; }
/* Returns a list of x positions for given widths and gaps spread out from cx */ public static Array <double> distributeRects(double cx, double width, double gap, int total) { var list = new Array <double>(); double x = cx - (width * total + gap * (total - 1)) * 0.5; for (; total > 0; total--) { list.push(x); x += width + gap; } return(list); }
/* Destroy all objects */ public void clearAll() { while (canvas.numChildren > 0) { canvas.removeChildAt(0); } bitmap = null; bitmapShadow = null; bitmapData.dispose(); bitmapData = null; fx = null; game = null; }
/* Play a sound at a volume based on the distance to the player */ public void createDistSound(int mapX, int mapY, String name, Array <string> names = null, double volume = 1.0) { double dist = Math.Abs(level.data.player.x - mapX) + Math.Abs(level.data.player.y - mapY); if (dist < SOUND_DIST_MAX) { if (names != null) { soundQueue.addRandom(name, names, (SOUND_DIST_MAX - dist) * INV_SOUND_DIST_MAX * volume); } else if (name != null) { soundQueue.add(name, (SOUND_DIST_MAX - dist) * INV_SOUND_DIST_MAX * volume); } } }
/* Prepares sprites and bitmaps for a game session */ public void createRenderLayers(Sprite holder = null) { if (holder == null) { holder = game; } canvasPoint = new Point(); canvas = new Sprite(); holder.addChild(canvas); backgroundShape = new Shape(); backgroundBitmapData = new BitmapData(16, 16, true, 0x0); //CONVERSION - simply made this a texture in the Content project //backgroundBitmapData.copyPixels(gameSpriteSheet, new Rectangle(0, 0, 16, 16), new Point()); bitmapData = new BitmapData((int)WIDTH, (int)HEIGHT, true, 0x0); bitmap = new Shape(); bitmapDataShadow = bitmapData.clone(); bitmapShadow = new Shape(); guiBitmapData = new BitmapData((int)WIDTH, (int)HEIGHT, true, 0x0); guiBitmap = new Shape(); canvas.addChild(backgroundShape); canvas.addChild(bitmapShadow); canvas.addChild(bitmap); game.addChild(guiBitmap); fx = new Array <FX>(); roomFx = new Array <FX>(); camera = new CanvasCamera(canvasPoint, this); shakeOffset = new Point(); shakeDirX = 0; shakeDirY = 0; slideX = 0; slideY = 0; sliding = false; refresh = true; //backgroundBitmapData.renderTarget = _backgroundRenderTarget; bitmapData.renderTarget = _gameRenderTarget; bitmapDataShadow.renderTarget = _shadowRenderTarget; guiBitmapData.renderTarget = _guiRenderTarget; }
public static UIManager openDialog(Array <Point> buttonPoints, Array <BlitRect> buttonBlits, Array <Action> buttonCallbacks, Action selectSoundCallback) { dialog = new UIManager(); dialog.selectSoundCallback = selectSoundCallback; int i; Point point; BlitRect blit; Action f; for (i = 0; i < buttonPoints.length; i++) { point = buttonPoints[i]; blit = buttonBlits[i]; f = buttonCallbacks[i]; dialog.addButton(point.x, point.y, blit, f, null, f != null); } return(dialog); }
/* This must be called before any TextBox is created so sprites can be drawn */ public static void init(Array <Rectangle> characterList, BitmapData _spriteSheet) { spriteSheet = _spriteSheet; characters = new Dictionary <char, Rectangle>(); char characterName; Rectangle rect; for (int i = 0; i < characterList.length; i++) { if (characterList[i] != null) { rect = characterList[i]; } else { rect = new Rectangle(); } characterName = characterNames[i]; characters[characterName] = rect; } }
public TextBox(double _width, double _height, uint backgroundCol = 0xFF111111, uint borderCol = 0xFF99999U) { this._width = (int)_width; this._height = (int)_height; this.backgroundCol = backgroundCol; this.borderCol = borderCol; align = "left"; alignVert = "top"; _colorInt = 0x00FFFFFF; wordWrap = true; tracking = 0; leading = 1; whitespaceLength = 2; lineSpacing = 8; _text = ""; lines = new Array <Array <Rectangle> >(); borderRect = new Rectangle(0, 0, _width, _height); boundsRect = new Rectangle(0, 0, _width, _height); maskRect = new Rectangle(0, 0, 1, 1); bitmapData = new BitmapData(Renderer.GameSpriteSheet, (int)_width, (int)_height, true, 0x0); drawBorder(); }
/* Calculates an array of BitmapDatas needed to render the text */ protected void updateText() { _stringLines.Clear(); _stringLines.Add(""); // we create an array called lines that holds references to all of the // bitmapDatas needed and structure it like the text // the lines property is public so it can be used to ticker text lines = new Array <Array <Rectangle> >(); lineWidths = new Array <double>(); textLines = new Array <Array <char?> >(); var currentLine = new Array <Rectangle>(); var currentTextLine = new Array <char?>(); int wordBeginning = 0; int currentLineWidth = 0; int completeWordsWidth = 0; int wordWidth = 0; var newLine = new Array <Rectangle>(); var newTextLine = new Array <char?>(); char c; if (_text == null) { _text = ""; } String upperCaseText = _text.ToUpper(); for (int i = 0; i < upperCaseText.Length; i++) { c = upperCaseText[i]; // new line characters if (c == '\n' || c == '\r' || c == '|') { lines.push(currentLine); textLines.push(currentTextLine); lineWidths.push(currentLineWidth); currentLineWidth = 0; completeWordsWidth = 0; wordBeginning = 0; wordWidth = 0; currentLine = new Array <Rectangle>(); currentTextLine = new Array <char?>(); _stringLines.Add(""); continue; } _stringLines[_stringLines.Count - 1] += c; // push a character into the array if (characters.ContainsKey(c)) { // check we're in the middle of a word - spaces are null if (currentLine.length > 0 && currentLine[currentLine.length - 1] != null) { currentLineWidth += tracking; wordWidth += tracking; } wordWidth += (int)characters[c].width; currentLineWidth += (int)characters[c].width; currentLine.push(characters[c]); currentTextLine.push(c); // the character is a SPACE or unrecognised and will be treated as a SPACE } else { if (currentLine.length > 0 && currentLine[currentLine.length - 1] != null) { completeWordsWidth = currentLineWidth; } currentLineWidth += whitespaceLength; currentLine.push(null); currentTextLine.push(null); wordBeginning = currentLine.length; wordWidth = 0; } // if the length of the current line exceeds the width, we splice it into the next line // effecting word wrap if (currentLineWidth > _width - (BORDER_ALLOWANCE * 2) && wordWrap) { // in the case where the word is larger than the text field we take back the last character // and jump to a new line with it if (wordBeginning == 0 && currentLine[currentLine.length - 1] != null) { currentLineWidth -= tracking + (int)currentLine[currentLine.length - 1].width; // now we take back the offending last character var lastBitmapData = currentLine.pop(); var lastChar = currentTextLine.pop(); lines.push(currentLine); textLines.push(currentTextLine); lineWidths.push(currentLineWidth); currentLineWidth = (int)lastBitmapData.width; completeWordsWidth = 0; wordBeginning = 0; wordWidth = (int)lastBitmapData.width; currentLine = new Array <Rectangle>(); currentLine.push(lastBitmapData); currentTextLine = new Array <char?>(); currentTextLine.push(lastChar); continue; } newLine = currentLine.splice(wordBeginning, (uint)(currentLine.length - wordBeginning)); newTextLine = currentTextLine.splice(wordBeginning, (uint)(currentTextLine.length - wordBeginning)); lines.push(currentLine); textLines.push(currentTextLine); lineWidths.push(completeWordsWidth); completeWordsWidth = 0; wordBeginning = 0; currentLine = newLine; currentTextLine = newTextLine; currentLineWidth = wordWidth; } } // save the last line lines.push(currentLine); textLines.push(currentTextLine); lineWidths.push(currentLineWidth); }
public RoomPalette(Level level) { uiManager = new UIManager(); uiManager.selectSoundCallback = game.selectSound; // PALETTE paletteRight = UserData.settings.paletteLeft; back = uiManager.addButton(0, Game.SCALE + ((int)(Game.HEIGHT * 0.5 - renderer.roomPaletteBlit.height * 0.5) >> 0), renderer.roomPaletteBlit, null, new Rectangle(0, 0, Game.SCALE * 4, Game.SCALE * 8)); // properties propertyLegal = true; properties = new Array <BlitButton>(); int generator = Room.GENERATOR | Room.TIMER_0; int allyCancel = Room.INDESTRUCTIBLE | Room.ALLY | Room.ENEMY | Room.WALL | generator | Room.UP_DOWN_LEFT_RIGHT | Room.M_UP_DOWN_LEFT_RIGHT; int enemyCancel = Room.INDESTRUCTIBLE | Room.ALLY | Room.SWAP | Room.ENEMY | Room.UP_DOWN_LEFT_RIGHT | Room.M_UP_DOWN_LEFT_RIGHT; int nonTrapCancel = Room.INDESTRUCTIBLE | Room.ALLY | Room.TURNER | Room.MOVER | Room.VIRUS; addPropertyButton(Game.SCALE * 0, Game.SCALE * 0, Room.INDESTRUCTIBLE | Room.WALL, -1, true); playerButton = addPropertyButton(Game.SCALE * 1, Game.SCALE * 0, Room.PLAYER | Room.ALLY, allyCancel | Room.BOMB, true); addPropertyButton(Game.SCALE * 2, Game.SCALE * 0, Room.ALLY | Room.SWAP, allyCancel, true); addPropertyButton(Game.SCALE * 3, Game.SCALE * 0, Room.WALL | Room.SWAP, allyCancel, true); addPropertyButton(Game.SCALE * 0, Game.SCALE * 1, Room.WALL, Room.ALLY | Room.SWAP | Room.WALL, true); addPropertyButton(Game.SCALE * 1, Game.SCALE * 1, Room.BOMB, Room.PLAYER | Room.INDESTRUCTIBLE | Room.BOMB, true); generatorButton = addPropertyButton(Game.SCALE * 2, Game.SCALE * 1, generator, Room.ALLY | Room.INDESTRUCTIBLE | generator | Room.SWAP, true); generatorButton.heldCallback = propertyHeldCallback; addPropertyButton(Game.SCALE * 3, Game.SCALE * 1, Room.ENEMY | Room.VIRUS, enemyCancel, true); turnerButton = addPropertyButton(Game.SCALE * 0, Game.SCALE * 2, Room.ENEMY | Room.TURNER | Room.UP, enemyCancel, true); turnerButton.heldCallback = propertyHeldCallback; addPropertyButton(Game.SCALE * 1, Game.SCALE * 2, Room.ENEMY | Room.MOVER | Room.M_LEFT | Room.M_RIGHT, enemyCancel, true); addPropertyButton(Game.SCALE * 2, Game.SCALE * 2, Room.ENEMY | Room.MOVER | Room.M_UP | Room.M_DOWN, enemyCancel, true); addPropertyButton(Game.SCALE * 3, Game.SCALE * 2, Room.ENEMY | Room.MOVER | Room.M_UP_DOWN_LEFT_RIGHT, enemyCancel, true); addPropertyButton(Game.SCALE * 0, Game.SCALE * 3, Room.ENEMY | Room.TRAP | Room.M_UP, nonTrapCancel | Room.M_UP, true); addPropertyButton(Game.SCALE * 1, Game.SCALE * 3, Room.ENEMY | Room.TRAP | Room.M_RIGHT, nonTrapCancel | Room.M_RIGHT, true); addPropertyButton(Game.SCALE * 2, Game.SCALE * 3, Room.ENEMY | Room.TRAP | Room.M_DOWN, nonTrapCancel | Room.M_DOWN, true); addPropertyButton(Game.SCALE * 3, Game.SCALE * 3, Room.ENEMY | Room.TRAP | Room.M_LEFT, nonTrapCancel | Room.M_LEFT, true); var buttonRect = new Rectangle(0, 0, renderer.propertyButtonBlit.width, renderer.propertyButtonBlit.height); var border = 2; propertyButton = uiManager.addButton(2 * Game.SCALE + border, back.y + 4 * Game.SCALE + border, renderer.propertyButtonBlit, clearProperty, buttonRect); playButton = uiManager.addButton(0 * Game.SCALE + border, back.y + 6 * Game.SCALE + border, renderer.playButtonBlit, playRoom, buttonRect); uiManager.addButton(2 * Game.SCALE + border, back.y + 6 * Game.SCALE + border, renderer.swapButtonBlit, togglePaletteSide, buttonRect); scrollButton = uiManager.addButton(0 * Game.SCALE + border, back.y + 4 * Game.SCALE + border, renderer.scrollButtonBlit, toggleScroll, buttonRect); scrollButton.active = !renderer.camera.dragScroll; paletteButtons = uiManager.buttons.slice(); if (paletteRight) { togglePaletteSide(false); } optionsButton = uiManager.addButton(Game.WIDTH - renderer.settingsButtonBlit.width, 0, renderer.settingsButtonBlit, options); // OPTIONS uiManager.addGroup(); uiManager.changeGroup(1); uiManager.addButton(Game.WIDTH - renderer.settingsButtonBlit.width, 0, renderer.settingsButtonBlit, cancel); var buttonXs = UIManager.distributeRects(Game.WIDTH * 0.5, buttonRect.width, 4, 4); var buttonYs = UIManager.distributeRects(Game.HEIGHT * 0.5, buttonRect.height, 4, 2); double buttonY; // = Game.HEIGHT * 0.5 - Game.SCALE + border; buttonY = buttonYs[0]; uiManager.addButton(buttonXs[0], buttonY, renderer.cancelButtonBlit, quit, buttonRect); uiManager.addButton(buttonXs[1], buttonY, renderer.loadButtonBlit, load, buttonRect); uiManager.addButton(buttonXs[2], buttonY, renderer.saveButtonBlit, save, buttonRect); checkButton = uiManager.addButton(buttonXs[3], buttonY, renderer.checkButtonBlit, level.toggleCheckView, buttonRect); checkButton.active = level.checkView; // mobile buttons buttonY = buttonYs[1]; buttonXs = UIManager.distributeRects(Game.WIDTH * 0.5, buttonRect.width, 4, 2); controlsButton = uiManager.addButton(buttonXs[0], buttonY, renderer.controlsButtonBlit, level.toggleControls, buttonRect); controlsButton.active = level.tapControls; orientationButton = uiManager.addButton(buttonXs[1], buttonY, renderer.orientationButtonBlit, game.toggleOrientation, buttonRect); // desktop buttons soundButton = uiManager.addButton(buttonXs[0], buttonY, renderer.soundButtonBlit, level.toggleSound, buttonRect); soundButton.active = level.soundButton.active; fullscreenButton = uiManager.addButton(buttonXs[1], buttonY, renderer.fullscreenButtonBlit, level.toggleFullscreen, buttonRect); fullscreenButton.active = level.fullscreenButton.active; fullscreenButton.feedCallbackToEvent = true; if (!Game.MOBILE) { controlsButton.visible = false; orientationButton.visible = false; } else { soundButton.visible = false; fullscreenButton.visible = false; } uiManager.changeGroup(0); }
/* =============================================================================================================== * * INIT * * Initialisation is separated from the constructor to allow reference paths to be complete before all * of the graphics are generated - an object is null until its constructor has been exited * * =============================================================================================================== */ public void init() { FX.renderer = this; FoodClockFX.renderer = this; Level.renderer = this; TitleMenu.renderer = this; RoomPainter.renderer = this; RoomPalette.renderer = this; var gameSpriteSheetBitmap = GameSpriteSheet; var menuSpriteSheetBitmap = MenuSpriteSheet; //gameSpriteSheet = gameSpriteSheetBitmap.bitmapData; gameSpriteSheet = new BitmapData(GameSpriteSheet, 0, 0); // menuSpriteSheetBitmap.bitmapData); menuSpriteSheet = new BitmapData(MenuSpriteSheet, 0, 0); // menuSpriteSheetBitmap.bitmapData); backgroundSpriteSheet = new BitmapData(BackgroundSpriteSheet, 0, 0); // menuSpriteSheetBitmap.bitmapData); sparkBlit = new BlitRect(0, 0, 1, 1, 0xffffffff); debrisBlit = new BlitRect(0, 0, 1, 1, 0xffffffff); wallDebrisBlit = new BlitRect(0, 0, 1, 1, WALL_COL); wallBlit = new BlitSprite(gameSpriteSheet, new Rectangle(24, 0, 8, 8)); indestructibleWallBlit = new BlitSprite(gameSpriteSheet, new Rectangle(80, 0, 8, 8)); enemyWallBlit = new BlitSprite(gameSpriteSheet, new Rectangle(88, 0, 8, 8)); trapBlit = new BlitClip(gameSpriteSheet, new Array <Rectangle> { new Rectangle(0, 16, 8, 8), new Rectangle(8, 16, 8, 8), new Rectangle(16, 16, 8, 8), new Rectangle(24, 16, 8, 8), new Rectangle(32, 16, 8, 8), new Rectangle(40, 16, 8, 8), new Rectangle(48, 16, 8, 8), new Rectangle(56, 16, 8, 8), new Rectangle(64, 16, 8, 8), new Rectangle(72, 16, 8, 8), new Rectangle(80, 16, 8, 8), new Rectangle(88, 16, 8, 8), new Rectangle(96, 16, 8, 8), new Rectangle(104, 16, 8, 8), new Rectangle(0, 24, 8, 8) }); generatorBlit = new BlitSprite(gameSpriteSheet, new Rectangle(96, 0, 8, 8)); generatorWarningBlit = new BlitRect(0, 0, 7, 7, 0xFFFFFFFF); playerBlit = new BlitSprite(gameSpriteSheet, new Rectangle(16, 0, 8, 8)); playerBuffer = new BlitSprite(gameSpriteSheet, new Rectangle(96, 64, 8, 8)); allyBlit = new BlitSprite(gameSpriteSheet, new Rectangle(64, 0, 8, 8)); moverBlit = new BlitSprite(gameSpriteSheet, new Rectangle(48, 0, 8, 8)); horizMoverBlit = new BlitSprite(gameSpriteSheet, new Rectangle(40, 0, 8, 8)); vertMoverBlit = new BlitSprite(gameSpriteSheet, new Rectangle(32, 0, 8, 8)); turnerBlit = new BlitClip(gameSpriteSheet, new Array <Rectangle> { new Rectangle(16, 8, 8, 8), new Rectangle(24, 8, 8, 8), new Rectangle(32, 8, 8, 8), new Rectangle(40, 8, 8, 8), new Rectangle(48, 8, 8, 8), new Rectangle(56, 8, 8, 8), new Rectangle(64, 8, 8, 8), new Rectangle(72, 8, 8, 8) }); virusBlit = new BlitSprite(gameSpriteSheet, new Rectangle(56, 0, 8, 8)); errorBlit = new BlitRect(3, 3, 3, 3, 0xFFFF0000); swapBlit = new BlitSprite(gameSpriteSheet, new Rectangle(72, 0, 8, 8)); numberBlit = new NumberBlit(gameSpriteSheet, new Rectangle(112, 0, 8, 80), 2, 0.25, -1, -1, 6); notCompletedBlit = new BlitRect(-1, -1, 3, 3, UI_COL_BORDER); timerCountBlit = new BlitClip(gameSpriteSheet, new Array <Rectangle> { new Rectangle(112, 0, 8, 8), new Rectangle(112, 8, 8, 8), new Rectangle(112, 16, 8, 8), new Rectangle(112, 24, 8, 8) }); checkMarkBlit = new BlitSprite(gameSpriteSheet, new Rectangle(56, 32, 8, 8)); voidBlit = new BlitRect(0, 0, (int)SCALE, (int)SCALE, 0xFF000000); doorBlit = new BlitClip(gameSpriteSheet, new Array <Rectangle> { new Rectangle(8, 24, 8, 8), new Rectangle(16, 24, 8, 8), new Rectangle(24, 24, 8, 8), new Rectangle(32, 24, 8, 8), new Rectangle(40, 24, 8, 8), new Rectangle(48, 24, 8, 8), new Rectangle(56, 24, 8, 8), new Rectangle(64, 24, 8, 8), new Rectangle(72, 24, 8, 8), new Rectangle(80, 24, 8, 8) }); bombBlit = new BlitSprite(gameSpriteSheet, new Rectangle(104, 0, 8, 8)); explosionBlit = new BlitClip(gameSpriteSheet, new Array <Rectangle> { new Rectangle(80, 8, 8, 8), new Rectangle(80, 8, 8, 8), new Rectangle(88, 8, 8, 8), new Rectangle(88, 8, 8, 8), new Rectangle(96, 8, 8, 8), new Rectangle(96, 8, 8, 8), new Rectangle(104, 8, 8, 8), new Rectangle(104, 8, 8, 8) }); whiteBlit = new BlitSprite(gameSpriteSheet, new Rectangle(88, 64, 8, 8)); errorBlit = new BlitRect(1, 1, 5, 5, 0xFFFF0000); incrementBlit = new BlitClip(gameSpriteSheet, new Array <Rectangle> { new Rectangle(88, 24, 8, 8), new Rectangle(88, 24, 8, 8), new Rectangle(96, 24, 8, 8), new Rectangle(96, 24, 8, 8), new Rectangle(104, 24, 8, 8), new Rectangle(104, 24, 8, 8), new Rectangle(0, 32, 8, 8), new Rectangle(0, 32, 8, 8), new Rectangle(8, 32, 8, 8), new Rectangle(8, 32, 8, 8), new Rectangle(16, 32, 8, 8), new Rectangle(16, 32, 8, 8), new Rectangle(24, 32, 8, 8), new Rectangle(24, 32, 8, 8), new Rectangle(32, 32, 8, 8), new Rectangle(32, 32, 8, 8), new Rectangle(40, 32, 8, 8), new Rectangle(40, 32, 8, 8), new Rectangle(48, 32, 8, 8), new Rectangle(48, 32, 8, 8), null, null, null, null, null, null, null, null, null, null }); endingDistBlit = new BlitClip(gameSpriteSheet, new Array <Rectangle> { new Rectangle(0, 56, 8, 8), new Rectangle(8, 56, 8, 8), new Rectangle(16, 56, 8, 8), new Rectangle(24, 56, 8, 8), new Rectangle(32, 56, 8, 8), new Rectangle(40, 56, 8, 8), new Rectangle(48, 56, 8, 8), new Rectangle(56, 56, 8, 8), new Rectangle(64, 56, 8, 8), new Rectangle(72, 56, 8, 8) }); settingsButtonBlit = new BlitClip(gameSpriteSheet, new Array <Rectangle> { new Rectangle(64, 32, 8, 8), new Rectangle(72, 32, 8, 8) }); turnsBlit = new BlitSprite(menuSpriteSheet, new Rectangle(48, 60, 16, 10)); propertySelectedBlit = new BlitSprite(menuSpriteSheet, new Rectangle(79, 88, 9, 9), -1, -1); roomPaletteBlit = new BlitSprite(menuSpriteSheet, new Rectangle(44, 72, 35, 67), -1, -1); puzzleButtonBlit = new BlitClip(menuSpriteSheet, new Array <Rectangle> { new Rectangle(0, 72, 22, 22), new Rectangle(22, 72, 22, 22) }); adventureButtonBlit = new BlitClip(menuSpriteSheet, new Array <Rectangle> { new Rectangle(0, 94, 22, 22), new Rectangle(22, 94, 22, 22) }); editorButtonBlit = new BlitClip(menuSpriteSheet, new Array <Rectangle> { new Rectangle(0, 116, 22, 22), new Rectangle(22, 116, 22, 22) }); checkButtonBlit = new BlitClip(menuSpriteSheet, new Array <Rectangle> { new Rectangle(48, 12, 12, 12), new Rectangle(60, 12, 12, 12), new Rectangle(72, 12, 12, 12), new Rectangle(84, 12, 12, 12) }); playButtonBlit = new BlitClip(menuSpriteSheet, new Array <Rectangle> { new Rectangle(48, 48, 12, 12), new Rectangle(60, 48, 12, 12) }); propertyButtonBlit = new BlitClip(menuSpriteSheet, new Array <Rectangle> { new Rectangle(72, 48, 12, 12), new Rectangle(84, 48, 12, 12) }); scrollButtonBlit = new BlitClip(menuSpriteSheet, new Array <Rectangle> { new Rectangle(24, 60, 12, 12), new Rectangle(36, 60, 12, 12), new Rectangle(79, 106, 12, 12), new Rectangle(79, 118, 12, 12) }); loadButtonBlit = new BlitClip(menuSpriteSheet, new Array <Rectangle> { new Rectangle(0, 36, 12, 12), new Rectangle(12, 36, 12, 12) }); saveButtonBlit = new BlitClip(menuSpriteSheet, new Array <Rectangle> { new Rectangle(72, 24, 12, 12), new Rectangle(84, 24, 12, 12) }); cancelButtonBlit = new BlitClip(menuSpriteSheet, new Array <Rectangle> { new Rectangle(0, 0, 12, 12), new Rectangle(12, 0, 12, 12) }); confirmButtonBlit = new BlitClip(menuSpriteSheet, new Array <Rectangle> { new Rectangle(24, 0, 12, 12), new Rectangle(36, 0, 12, 12) }); resetButtonBlit = new BlitClip(menuSpriteSheet, new Array <Rectangle> { new Rectangle(0, 12, 12, 12), new Rectangle(12, 12, 12, 12) }); controlsButtonBlit = new BlitClip(menuSpriteSheet, new Array <Rectangle> { new Rectangle(0, 48, 12, 12), new Rectangle(12, 48, 12, 12), new Rectangle(24, 48, 12, 12), new Rectangle(36, 48, 12, 12) }); orientationButtonBlit = new BlitClip(menuSpriteSheet, new Array <Rectangle> { new Rectangle(24, 12, 12, 12), new Rectangle(36, 12, 12, 12) }); soundButtonBlit = new BlitClip(menuSpriteSheet, new Array <Rectangle> { new Rectangle(24, 36, 12, 12), new Rectangle(36, 36, 12, 12), new Rectangle(48, 36, 12, 12), new Rectangle(36, 36, 12, 12) }); fullscreenButtonBlit = new BlitClip(menuSpriteSheet, new Array <Rectangle> { new Rectangle(84, 36, 12, 12), new Rectangle(72, 36, 12, 12), new Rectangle(60, 36, 12, 12), new Rectangle(72, 36, 12, 12) }); editButtonBlit = new BlitClip(menuSpriteSheet, new Array <Rectangle> { new Rectangle(0, 60, 12, 12), new Rectangle(12, 60, 12, 12) }); numberButtonBlit = new BlitClip(menuSpriteSheet, new Array <Rectangle> { new Rectangle(48, 60, 16, 10), new Rectangle(64, 60, 16, 10) }); leftButtonBlit = new BlitClip(menuSpriteSheet, new Array <Rectangle> { new Rectangle(48, 0, 12, 12), new Rectangle(60, 0, 12, 12) }); rightButtonBlit = new BlitClip(menuSpriteSheet, new Array <Rectangle> { new Rectangle(72, 0, 12, 12), new Rectangle(84, 0, 12, 12) }); swapButtonBlit = new BlitClip(menuSpriteSheet, new Array <Rectangle> { new Rectangle(48, 24, 12, 12), new Rectangle(60, 24, 12, 12) }); insertBeforeButtonBlit = new BlitClip(menuSpriteSheet, new Array <Rectangle> { new Rectangle(0, 24, 12, 12), new Rectangle(12, 24, 12, 12) }); insertAfterButtonBlit = new BlitClip(menuSpriteSheet, new Array <Rectangle> { new Rectangle(24, 24, 12, 12), new Rectangle(36, 24, 12, 12) }); confirmPanelBlit = new BlitSprite(menuSpriteSheet, new Rectangle(0, 157, 31, 19)); levelMovePanelBlit = new BlitSprite(menuSpriteSheet, new Rectangle(0, 139, 70, 18)); levelPreviewPanelBlit = new BlitSprite(menuSpriteSheet, new Rectangle(79, 72, 16, 16)); paintBlit = new BlitClip(menuSpriteSheet, new Array <Rectangle> { new Rectangle(79, 97, 9, 9), new Rectangle(80, 60, 9, 9) }, -1, -1); lockedBlit = new BlitSprite(menuSpriteSheet, new Rectangle(89, 60, 7, 7)); int fade_delay = 10; mapFadeBlits = new Array <FadingBlitRect> { new FadingBlitRect(0, 0, (int)(Level.MAP_WIDTH * SCALE), (int)((Level.ROOM_HEIGHT - 1) * SCALE), fade_delay), new FadingBlitRect((int)(Level.ROOM_WIDTH * SCALE), 0, (int)((Level.ROOM_WIDTH - 1) * SCALE), (int)(Level.MAP_HEIGHT * SCALE), fade_delay), new FadingBlitRect(0, (int)(Level.ROOM_HEIGHT * SCALE), (int)(Level.MAP_WIDTH * SCALE), (int)((Level.ROOM_HEIGHT - 1) * SCALE), fade_delay), new FadingBlitRect(0, 0, (int)((Level.ROOM_WIDTH - 1) * SCALE), (int)(Level.MAP_HEIGHT * SCALE), fade_delay), }; darkBitmapData = new BitmapData((int)Game.WIDTH, (int)Game.HEIGHT, true, 0x88000000); glitchMap = new GlitchMap(); slideFade = new BlitSprite(new BitmapData((int)Game.WIDTH, (int)Game.HEIGHT, true, 0x08000000), new Rectangle(0, 0, Game.WIDTH, Game.HEIGHT)); TextBox.init(new Array <Rectangle> { new Rectangle(1, 40, 6, 7), // a new Rectangle(9, 40, 6, 7), // b new Rectangle(17, 40, 6, 7), // c new Rectangle(25, 40, 6, 7), // d new Rectangle(33, 40, 6, 7), // e new Rectangle(41, 40, 6, 7), // f new Rectangle(49, 40, 6, 7), // g new Rectangle(57, 40, 6, 7), // h new Rectangle(65, 40, 6, 7), // i new Rectangle(73, 40, 6, 7), // j new Rectangle(81, 40, 6, 7), // k new Rectangle(89, 40, 6, 7), // l new Rectangle(97, 40, 6, 7), // m new Rectangle(105, 40, 6, 7), // n new Rectangle(1, 48, 6, 7), // o new Rectangle(9, 48, 6, 7), // p new Rectangle(17, 48, 6, 7), // q new Rectangle(25, 48, 6, 7), // r new Rectangle(33, 48, 6, 7), // s new Rectangle(41, 48, 6, 7), // t new Rectangle(49, 48, 6, 7), // u new Rectangle(57, 48, 6, 7), // v new Rectangle(65, 48, 6, 7), // w new Rectangle(73, 48, 6, 7), // x new Rectangle(81, 48, 6, 7), // y new Rectangle(89, 48, 6, 7), // z new Rectangle(1, 56, 6, 7), // 0 new Rectangle(9, 56, 6, 7), // 1 new Rectangle(17, 56, 6, 7), // 2 new Rectangle(25, 56, 6, 7), // 3 new Rectangle(33, 56, 6, 7), // 4 new Rectangle(41, 56, 6, 7), // 5 new Rectangle(49, 56, 6, 7), // 6 new Rectangle(57, 56, 6, 7), // 7 new Rectangle(65, 56, 6, 7), // 8 new Rectangle(73, 56, 6, 7), // 9 new Rectangle(19, 64, 2, 4), // ' new Rectangle(33, 64, 6, 7), // backslash new Rectangle(), // : new Rectangle(3, 64, 2, 8), // , new Rectangle(73, 64, 6, 7), // = new Rectangle(99, 56, 2, 7), // ! new Rectangle(81, 64, 6, 7), // / new Rectangle(41, 64, 6, 7), // - new Rectangle(58, 64, 3, 8), // ( new Rectangle(49, 64, 6, 7), // + new Rectangle(89, 56, 6, 7), // ? new Rectangle(66, 64, 3, 8), // ) new Rectangle(), // ; new Rectangle(107, 56, 2, 7), // . new Rectangle(8, 64, 8, 7), // @ new Rectangle(), // _ new Rectangle(81, 56, 6, 7), // % new Rectangle(), // * new Rectangle(26, 64, 4, 4) // " }, gameSpriteSheet); fxFilterCallBack = (FX item, int index, Array <FX> list) => { item.main(); return(item.active); }; }
internal void main(RenderTarget2D sceneRenderTarget) { // clear bitmapDatas - refresh can be set to false for glitchy trails //if(refresh) bitmapData.fillRect(bitmapData.rect, 0x0); //bitmapDataShadow.fillRect(bitmapDataShadow.rect, 0x0); //guiBitmapData.fillRect(guiBitmapData.rect, 0x0); XnaGame.Instance.FlashRenderer.RenderTarget = _defaultRenderTarget; XnaGame.Instance.GraphicsDevice.Clear(Color.Transparent); if (game.state == Game.MENU) { guiBitmapData.fillRect(guiBitmapData.rect, 0xFF1A1E26); game.titleMenu.render(); canvasPoint.x -= 0.5; } else if (game.state == Game.GAME) { updateShaker(); Level level; level = game.level; if (trackPlayer) { camera.setTarget( (level.data.player.x + 0.5) * SCALE, (level.data.player.y + 0.5) * SCALE ); } else if (sliding) { camera.targetPos.x += slideX; camera.targetPos.y += slideY; slideFade.render(bitmapData); } camera.main(); updateCheckers(); // black border around small levels if (canvasPoint.x > camera.mapRect.x) { bitmapDataShadow.fillRect(new Rectangle(0, 0, canvasPoint.x, Game.HEIGHT), 0xFF000000); } if (canvasPoint.x + camera.mapRect.x + camera.mapRect.width < Game.WIDTH) { bitmapDataShadow.fillRect(new Rectangle(canvasPoint.x + camera.mapRect.x + camera.mapRect.width, 0, Game.WIDTH - (canvasPoint.x + camera.mapRect.x + camera.mapRect.width), Game.HEIGHT), 0xFF000000); } if (canvasPoint.y > 0) { bitmapDataShadow.fillRect(new Rectangle(0, 0, Game.WIDTH, canvasPoint.y), 0xFF000000); } if (canvasPoint.y + camera.mapRect.height < Game.HEIGHT) { bitmapDataShadow.fillRect(new Rectangle(0, canvasPoint.y + camera.mapRect.height, Game.WIDTH, Game.HEIGHT - (canvasPoint.y + camera.mapRect.height)), 0xFF000000); } if (game.roomPainter.active) { game.roomPainter.render(); } level.render(); if (game.roomPainter.active) { game.roomPainter.palette.render(); } if (fx.length > 0) { fx = fx.filter(fxFilterCallBack); } glitchMap.apply(bitmapData, (int)canvasPoint.x, (int)canvasPoint.y); glitchMap.update(); //CONVERSION - handled below //bitmapDataShadow.copyPixels(bitmapData, bitmapData.rect, new Point(1, 1), null, null, true); //bitmapDataShadow.colorTransform(bitmapDataShadow.rect, new ColorTransform(0, 0, 0)); if (roomFx.length > 0) { roomFx = roomFx.filter(fxFilterCallBack); } } // update shapes //CONVERION var blendState = BlendState.AlphaBlend; // Now draw the deferred scene object applying whatever effects are required to mimic the orignal game XnaGame.Instance.GraphicsDevice.SetRenderTarget(_shadowRenderTarget); if (refresh) { XnaGame.Instance.GraphicsDevice.Clear(Color.Transparent); } //XnaGame.Instance.GraphicsDevice.Clear(Color.Transparent); XnaGame.Instance.SpriteBatch.Begin(SpriteSortMode.Deferred, blendState, SamplerState.PointClamp, null, null); XnaGame.Instance.FlashRenderer.Flush(XnaGame.Instance.SpriteBatch, _shadowRenderTarget); XnaGame.Instance.FlashRenderer.Draw(XnaGame.Instance.SpriteBatch, _gameRenderTarget, Vector2.One, Color.Black); XnaGame.Instance.SpriteBatch.End(); XnaGame.Instance.GraphicsDevice.SetRenderTarget(_gameRenderTarget); if (refresh) { XnaGame.Instance.GraphicsDevice.Clear(Color.Transparent); } XnaGame.Instance.SpriteBatch.Begin(SpriteSortMode.Deferred, blendState, SamplerState.PointClamp, null, null); XnaGame.Instance.FlashRenderer.Flush(XnaGame.Instance.SpriteBatch, _gameRenderTarget); XnaGame.Instance.SpriteBatch.End(); XnaGame.Instance.GraphicsDevice.SetRenderTarget(_guiRenderTarget); XnaGame.Instance.GraphicsDevice.Clear(Color.Transparent); XnaGame.Instance.SpriteBatch.Begin(SpriteSortMode.Deferred, blendState, SamplerState.PointClamp, null, null); XnaGame.Instance.FlashRenderer.Flush(XnaGame.Instance.SpriteBatch, _guiRenderTarget); XnaGame.Instance.SpriteBatch.End(); XnaGame.Instance.GraphicsDevice.SetRenderTarget(_defaultRenderTarget); XnaGame.Instance.GraphicsDevice.Clear(Color.Transparent); XnaGame.Instance.SpriteBatch.Begin(SpriteSortMode.Deferred, blendState, SamplerState.PointClamp, null, null); XnaGame.Instance.FlashRenderer.Flush(XnaGame.Instance.SpriteBatch, null); XnaGame.Instance.SpriteBatch.End(); //Draw final composite image - we'll draw to another render target first - the XNA wrapper will blit this final render target //to the screen later respecting title safe viewport. //Note - it could all be done here if you wanted but the game wrapper was already set up to do it. XnaGame.Instance.GraphicsDevice.SetRenderTarget(sceneRenderTarget); XnaGame.Instance.GraphicsDevice.Clear(Color.Transparent); XnaGame.Instance.SpriteBatch.Begin(SpriteSortMode.Immediate, blendState, SamplerState.PointClamp, null, null); //XnaGame.Instance.SpriteBatch.Draw(_backgroundRenderTarget, Vector2.Zero, null, Color.White,0, Vector2.Zero, XnaGame.Instance.Scale, SpriteEffects.None, 0); //XnaGame.Instance.SpriteBatch.Draw(_shadowRenderTarget, Vector2.Zero, null, Color.White,0, Vector2.Zero, XnaGame.Instance.Scale, SpriteEffects.None, 0); //XnaGame.Instance.SpriteBatch.Draw(_gameRenderTarget, Vector2.Zero, null, Color.White,0, Vector2.Zero, XnaGame.Instance.Scale, SpriteEffects.None, 0); //XnaGame.Instance.SpriteBatch.Draw(_guiRenderTarget, Vector2.Zero, null, Color.White,0, Vector2.Zero, XnaGame.Instance.Scale, SpriteEffects.None, 0); //XnaGame.Instance.SpriteBatch.Draw(_defaultRenderTarget, Vector2.Zero, null, Color.White,0, Vector2.Zero, XnaGame.Instance.Scale, SpriteEffects.None, 0); XnaGame.Instance.SpriteBatch.Draw(_backgroundRenderTarget, Vector2.Zero, Color.White); XnaGame.Instance.SpriteBatch.Draw(_shadowRenderTarget, Vector2.Zero, Color.White); XnaGame.Instance.SpriteBatch.Draw(_gameRenderTarget, Vector2.Zero, Color.White); XnaGame.Instance.SpriteBatch.Draw(_guiRenderTarget, Vector2.Zero, Color.White); XnaGame.Instance.SpriteBatch.Draw(_defaultRenderTarget, Vector2.Zero, Color.White); XnaGame.Instance.SpriteBatch.End(); }
public void changeGroup(int n) { currentGroup = n; buttons = buttonGroups[currentGroup]; mouseLock = true; }