/** * Creates a rectangular trigger for a given map. */ public TriggerArea(MapComposite m, Rectangle r, TriggerAction ptr, bool once) : base(ThingType.OBJECT_OTHER, m) { mZone=r; mAction=ptr; mOnce=once; }
public MapObject(Rectangle bounds, string name, string type) { mBounds=bounds; mName=name; mType=type; }
// // friend struct SpawnAreaEventDispatch; public SpawnArea(MapComposite map, MonsterClass specy, Rectangle zone, int maxBeings, int spawnRate) : base(ThingType.OBJECT_OTHER, map) { mSpecy=specy; //mSpawnedListener=spawnAreaEventDispatch; //TODO Implementieren mZone=zone; mMaxBeings=maxBeings; mSpawnRate=spawnRate; }
ZoneIterator getInsideRectangleIterator(Rectangle p) { //MapRegion r; //mContent.fillRegion(r, p); //return ZoneIterator(r, mContent); return null; //ssk }
// static std::vector< int > tilesetFirstGids; // public static Map readMap(string filename) { TMX tmx=null; try { tmx=new TMX(filename); } catch { Logger.Write(LogLevel.Error, "Not a map file ({0}), filename)"); return null; } int w=tmx.Width; int h=tmx.Height; int tileW=tmx.TileWidth; int tileH=tmx.TileHeight; Map map=new Map(w, h, tileW, tileH); foreach(Property prop in tmx.Properties) { Logger.Write(LogLevel.Debug, " {0}: {1}", prop.Name, prop.Value); map.setProperty(prop.Name, prop.Value); } foreach(TMX.LayerData layer in tmx.Layers) { if(layer.name.ToLower() == "collision") { for(int y=0; y<layer.height; y++) { for(int x=0; x<layer.width; x++) { if(layer.data[x, y] != 0) { map.blockTile(x, y, invertika_game.Enums.BlockType.BLOCKTYPE_WALL); } } } } //TODO Layer lesen implementieren // node = node->xmlChildrenNode; // int h = map->getHeight(); // int w = map->getWidth(); // int x = 0; // int y = 0; // // // Layers are assumed to be map size, with (0,0) as origin. // // Find its single "data" element. // while (node) // { // if (xmlStrEqual(node->name, BAD_CAST "data")) break; // node = node->next; // } // // if (!node) // { // LOG_WARN("Layer without any 'data' element."); // return; // } // // std::string encoding = XML::getProperty(node, "encoding", std::string()); // if (encoding == "base64") // { // // Read base64 encoded map file // xmlNodePtr dataChild = node->xmlChildrenNode; // if (!dataChild) // { // LOG_WARN("Corrupted layer."); // return; // } // // int len = strlen((const char *) dataChild->content) + 1; // char *charData = new char[len + 1]; // const char *charStart = (const char *) dataChild->content; // char *charIndex = charData; // // while (*charStart) // { // if (*charStart != ' ' && *charStart != '\t' && *charStart != '\n') // { // *charIndex = *charStart; // ++charIndex; // } // ++charStart; // } // *charIndex = '\0'; // // int binLen; // unsigned char *binData = // php_base64_decode((unsigned char *)charData, strlen(charData), &binLen); // // delete[] charData; // // if (!binData) // { // LOG_WARN("Failed to decode base64-encoded layer."); // return; // } // // std::string compression = // XML::getProperty(node, "compression", std::string()); // if (compression == "gzip" || compression == "zlib") // { // // Inflate the gzipped layer data // char *inflated; // unsigned inflatedSize; // bool res = inflateMemory((char *)binData, binLen, inflated, inflatedSize); // free(binData); // // if (!res) // { // LOG_WARN("Failed to decompress compressed layer"); // return; // } // // binData = (unsigned char *)inflated; // binLen = inflatedSize; // } // // for (int i = 0; i < binLen - 3; i += 4) // { // int gid = binData[i] | // (binData[i + 1] << 8) | // (binData[i + 2] << 16) | // (binData[i + 3] << 24); // // setTileWithGid(map, x, y, gid); // // if (++x == w) // { // x = 0; // ++y; // } // } // free(binData); // return; // } // else if (encoding == "csv") // { // xmlNodePtr dataChild = node->xmlChildrenNode; // if (!dataChild) // return; // // const char *data = (const char*) xmlNodeGetContent(dataChild); // std::string csv(data); // // size_t pos = 0; // size_t oldPos = 0; // // while (oldPos != csv.npos) // { // pos = csv.find_first_of(",", oldPos); // // const int gid = atoi(csv.substr(oldPos, pos - oldPos).c_str()); // // setTileWithGid(map, x, y, gid); // // x++; // if (x == w) // { // x = 0; // ++y; // // // When we're done, don't crash on too much data // if (y == h) // break; // } // // oldPos = pos + 1; // } // } // else // { // // // Read plain XML map file // node = node->xmlChildrenNode; // // while (node) // { // if (xmlStrEqual(node->name, BAD_CAST "tile") && y < h) // { // int gid = XML::getProperty(node, "gid", -1); // setTileWithGid(map, x, y, gid); // // if (++x == w) // { // x = 0; // ++y; // } // } // // node = node->next; // } // } } foreach(Objectgroup oGroup in tmx.ObjectLayers) { if(oGroup.Name.ToLower() != "object") continue; foreach(CSCL.FileFormats.TMX.Object obj in oGroup.Objects) { string objName = obj.Name; string objType = obj.Type.ToUpper(); Rectangle rect = new Rectangle(obj.X, obj.Y, obj.Width, obj.Height); MapObject newObject = new MapObject(rect, objName, objType); foreach(Property prop in obj.Properties) { newObject.addProperty(prop.Name, prop.Value); } map.addObject(newObject); } } return map; }
public bool intersects(Rectangle r) { return x<(r.x+r.w)&&y<(r.y+r.h)&&x+w>r.x&&y+h>r.y; }