- Define object types(For example Building, Unit, Resource)
It's partly possible within Tiled. Under Tiled -> Preferences -> Object Types you can define certain types of objects. All this does however is allow you to choose a color for the objects (the lines drawn by Tiled) and in the Object's properties pane under Type those names will be given as an autocompletion suggestion.
It's however not foolproof because the Type property remains a plain and editable string.
- Define properties for each object type
Again, partially. In Tiled you can give each object any property-value combo you like. But there's no system that says "If the object's type is Building it should have certain default properties". If you want that, you'd have to create a "reference object" on a separate layer or map, so you can quickly copy&paste it.
I opened a ticket for this because it's been bugging me too that you can't pre-fill objects' properties: https://github.com/bjorn/tiled/issues/1030
TilemapKit loads and makes those properties available. Basically:
TKObject* object = ... (whereever you got the reference from)
int myValue = [object.properties intForKey:@"myValue"];
I do plan on adding reflection/KVC loading of properties. I haven't thought this through but I think it needs to be user-initiated because doing so for every property could cause a lot of overhead. Basically while enumerating tile objects on a layer you could write something like this:
That would take the object's Tiled properties and tries to assign those properties matching both name and type to corresponding @property or ivars in the given target object. Something like that. I've added a task here, you'll probably want to vote on it.
The properties dictionary is also available as TKProperties class.
Lastly: yes, just two weeks ago I added support for "collection of images" tilesets.