/* * Copyright (c) 2001-2007 Hypertriton, Inc. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE * USE OF THIS SOFTWARE EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include #include #include extern int mapViewAnimatedBg, mapViewBgTileSize; extern int mapViewEditSelOnly; int mapEditorInited = 0; MAP_Editor mapEditor; int mapDefaultWidth = 9; /* Default map geometry */ int mapDefaultHeight = 9; int mapDefaultBrushWidth = 9; /* Default brush geometry */ int mapDefaultBrushHeight = 9; void MAP_EditorInit(void) { AG_ObjectInitStatic(&mapEditor, &mapEditorClass); AG_ObjectSetName(&mapEditor, "_mapEditor"); OBJECT(&mapEditor)->save_pfx = "/_mapEditor"; /* Initialize the default tunables. */ AG_SetUint32(&mapEditor, "default-map-width", 12); AG_SetUint32(&mapEditor, "default-map-height", 8); AG_SetUint32(&mapEditor, "default-brush-width", 5); AG_SetUint32(&mapEditor, "default-brush-height", 5); } static void Destroy(void *p) { AG_ObjectDestroy(&mapEditor.copybuf); } void MAP_EditorSave(AG_DataSource *buf) { AG_WriteUint8(buf, 0); /* Pad: mapViewBg */ AG_WriteUint8(buf, (Uint8)mapViewAnimatedBg); AG_WriteUint16(buf, (Uint16)mapViewBgTileSize); AG_WriteUint8(buf, (Uint8)mapViewEditSelOnly); AG_WriteUint16(buf, (Uint16)mapDefaultWidth); AG_WriteUint16(buf, (Uint16)mapDefaultHeight); AG_WriteUint16(buf, (Uint16)mapDefaultBrushWidth); AG_WriteUint16(buf, (Uint16)mapDefaultBrushHeight); } void MAP_EditorLoad(AG_DataSource *buf) { AG_ReadUint8(buf); /* Pad: mapViewBg */ mapViewAnimatedBg = (int)AG_ReadUint8(buf); mapViewBgTileSize = (int)AG_ReadUint16(buf); mapViewEditSelOnly = (int)AG_ReadUint8(buf); mapDefaultWidth = (int)AG_ReadUint16(buf); mapDefaultHeight = (int)AG_ReadUint16(buf); mapDefaultBrushWidth = (int)AG_ReadUint16(buf); mapDefaultBrushHeight = (int)AG_ReadUint16(buf); } static void * ConfigEditor(void *p) { AG_Window *win; AG_MSpinbutton *msb; AG_Box *bo; win = AG_WindowNew(AG_WINDOW_NOVRESIZE); AG_WindowSetCaptionS(win, _("Map editor settings")); bo = AG_BoxNew(win, AG_BOX_VERT, AG_BOX_HFILL); AG_BoxSetSpacing(bo, 5); AG_CheckboxNewInt(bo, 0, _("Moving tiles"), &mapViewAnimatedBg); AG_NumericalNewIntR(bo, 0, "px", _("Tile size: "), &mapViewBgTileSize, 2, 16384); bo = AG_BoxNew(win, AG_BOX_VERT, AG_BOX_HFILL); AG_CheckboxNewInt(bo, 0, _("Selection-bounded edition"), &mapViewEditSelOnly); bo = AG_BoxNew(win, AG_BOX_VERT, AG_BOX_HFILL); { msb = AG_MSpinbuttonNew(bo, 0, "x", _("Default map geometry: ")); AG_BindInt(msb, "xvalue", &mapDefaultWidth); AG_BindInt(msb, "yvalue", &mapDefaultHeight); AG_MSpinbuttonSetMin(msb, 1); AG_MSpinbuttonSetMax(msb, MAP_WIDTH_MAX); msb = AG_MSpinbuttonNew(bo, 0, "x", _("Default brush geometry: ")); AG_BindInt(msb, "xvalue", &mapDefaultBrushWidth); AG_BindInt(msb, "yvalue", &mapDefaultBrushHeight); AG_MSpinbuttonSetMin(msb, 1); AG_MSpinbuttonSetMax(msb, MAP_WIDTH_MAX); } return (win); } AG_ObjectClass mapEditorPseudoClass = { "MAP(EditorPseudo)", sizeof(AG_Object), { 0, 0 }, NULL, /* init */ NULL, /* free */ NULL, /* destroy */ NULL, /* load */ NULL, /* save */ ConfigEditor }; AG_ObjectClass mapEditorClass = { "MAP(Editor)", sizeof(AG_Object), { 0, 0 }, NULL, /* init */ NULL, /* free */ Destroy, NULL, /* load */ NULL, /* save */ NULL /* edit */ };