summary refs log tree commit diff stats
path: root/libs/cocos2d/CCAtlasNode.h
blob: 43e57c2b04c62ad7bb9f1cfca1f0f57689a27a8d (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
/*
 * cocos2d for iPhone: http://www.cocos2d-iphone.org
 *
 * Copyright (c) 2008-2010 Ricardo Quesada
 * Copyright (c) 2011 Zynga Inc.
 *
 * 
 * Permission is hereby granted, free of charge, to any person obtaining a copy
 * of this software and associated documentation files (the "Software"), to deal
 * in the Software without restriction, including without limitation the rights
 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 * copies of the Software, and to permit persons to whom the Software is
 * furnished to do so, subject to the following conditions:
 * 
 * The above copyright notice and this permission notice shall be included in
 * all copies or substantial portions of the Software.
 * 
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 * THE SOFTWARE.
 */


#import "CCTextureAtlas.h"
#import "CCNode.h"
#import "CCProtocols.h"

/** CCAtlasNode is a subclass of CCNode that implements the CCRGBAProtocol and
 CCTextureProtocol protocol
 
 It knows how to render a TextureAtlas object.
 If you are going to render a TextureAtlas consider subclassing CCAtlasNode (or a subclass of CCAtlasNode)
 
 All features from CCNode are valid, plus the following features:
 - opacity and RGB colors
 */
@interface CCAtlasNode : CCNode <CCRGBAProtocol, CCTextureProtocol>
{
	// texture atlas
	CCTextureAtlas	*textureAtlas_;

	// chars per row
	NSUInteger		itemsPerRow_;
	// chars per column
	NSUInteger		itemsPerColumn_;
		
	// width of each char
	NSUInteger		itemWidth_;
	// height of each char
	NSUInteger		itemHeight_;

	// quads to draw
	NSUInteger		quadsToDraw_;

	// blend function
	ccBlendFunc		blendFunc_;

	// texture RGBA. 
	GLubyte		opacity_;
	ccColor3B	color_;
	ccColor3B	colorUnmodified_;
	BOOL opacityModifyRGB_;
}

/** conforms to CCTextureProtocol protocol */
@property (nonatomic,readwrite,retain) CCTextureAtlas *textureAtlas;

/** conforms to CCTextureProtocol protocol */
@property (nonatomic,readwrite) ccBlendFunc blendFunc;

/** conforms to CCRGBAProtocol protocol */
@property (nonatomic,readwrite) GLubyte opacity;
/** conforms to CCRGBAProtocol protocol */
@property (nonatomic,readwrite) ccColor3B color;

/** how many quads to draw */
@property (readwrite) NSUInteger quadsToDraw;

/** creates a CCAtlasNode  with an Atlas file the width and height of each item measured in points and the quantity of items to render*/
+(id) atlasWithTileFile:(NSString*)tile tileWidth:(NSUInteger)w tileHeight:(NSUInteger)h itemsToRender: (NSUInteger) c;

/** initializes an CCAtlasNode  with an Atlas file the width and height of each item measured in points and the quantity of items to render*/
-(id) initWithTileFile:(NSString*)tile tileWidth:(NSUInteger)w tileHeight:(NSUInteger)h itemsToRender: (NSUInteger) c;

/** updates the Atlas (indexed vertex array).
 * Shall be overriden in subclasses
 */
-(void) updateAtlasValues;
@end
="o">["loc"] = location_id if panel.include? "colors" if panel["colors"].kind_of? String ret["color"] = "[\"#{panel["colors"]}\"]" else ret["color"] = "[\"" + panel["colors"].join("\",\"") + "\"]" end else ret["color"] = "[\"white\"]" end ret["tag"] = "\"#{panel["tag"]}\"" if panel.include? "subtag" ret["subtag"] = "\"#{panel["subtag"]}\"" end if panel.include? "link" ret["link"] = "\"#{panel["link"]}\"" end if panel.include? "copy_to_sign" copytos = [] if panel["copy_to_sign"].kind_of? String copytos = [panel["copy_to_sign"]] else copytos = panel["copy_to_sign"] end ret["copy_to_sign"] = "[\"" + copytos.join("\",\"") + "\"]" end if panel.include? "achievement" ret["achievement"] = "\"#{panel["achievement"]}\"" end if panel.include? "hunt" and panel["hunt"] ret["hunt"] = "true" end panel_output << ret panel_ids_by_location_id[location_id] = [panel["id"]] classification_by_location_id[location_id] ||= 0 classification_by_location_id[location_id] += CLASSIFICATION_INSANITY if panel.include? "check" and panel["check"] classification_by_location_id[location_id] += CLASSIFICATION_NORMAL unless panel.include? "exclude_reduce" and panel["exclude_reduce"] classification_by_location_id[location_id] += CLASSIFICATION_REDUCED end end end end if room_data.include? "paintings" room_data["paintings"].each do |painting| painting_output[painting["id"]] = painting end end end config.each do |room_name, room_data| if room_data.include? "doors" room_data["doors"].each do |door_name, door| full_name = "#{room_name} - #{door_name}" if not (door.include? "skip_location" and door["skip_location"]) and not (door.include? "event" and door["event"]) and door.include? "panels" then location_id = ids_config["doors"][room_name][door_name]["location"] panel_ids_by_location_id[location_id] = door["panels"].map do |panel_identifier| other_name = "" if panel_identifier.kind_of? String other_name = "#{room_name} - #{panel_identifier}" else other_name = "#{panel_identifier["room"]} - #{panel_identifier["panel"]}" end panel_to_id[other_name] end classification_by_location_id[location_id] ||= 0 classification_by_location_id[location_id] += CLASSIFICATION_NORMAL if door.include? "include_reduce" and door["include_reduce"] classification_by_location_id[location_id] += CLASSIFICATION_REDUCED end end if not (door.include? "skip_item" and door["skip_item"]) and not (door.include? "event" and door["event"]) then item_id = ids_config["doors"][room_name][door_name]["item"] if door.include? "id" internal_door_ids = [] if door["id"].kind_of? String internal_door_ids = [door["id"]] else internal_door_ids = door["id"] end if door.include? "group" door_groups[door["group"]] ||= Set[] door_groups[door["group"]].merge(internal_door_ids) end door_ids_by_item_id[item_id] = internal_door_ids mentioned_doors.merge(internal_door_ids) end if door.include? "painting_id" internal_painting_ids = [] if door["painting_id"].kind_of? String internal_painting_ids = [door["painting_id"]] else internal_painting_ids = door["painting_id"] end painting_ids_by_item_id[item_id] = internal_painting_ids mentioned_paintings.merge(internal_painting_ids) end end end end end door_groups.each do |group_name, door_ids| item_id = ids_config["door_groups"][group_name] door_ids_by_item_id[item_id] = door_ids.to_a end File.open(outputpath, "w") do |f| f.write "extends Node\n\nvar panels = [" f.write(panel_output.map do |panel| "{" + panel.to_a.map do |element| "\"#{element[0]}\":#{element[1]}" end.join(",") + "}" end.join(",")) f.write "]\nvar door_ids_by_item_id = {" f.write(door_ids_by_item_id.map do |item_id, door_ids| "#{item_id}:[" + door_ids.map do |door_id| "\"#{door_id}\"" end.join(",") + "]" end.join(",")) f.write "}\nvar painting_ids_by_item_id = {" f.write(painting_ids_by_item_id.map do |item_id, painting_ids| "#{item_id}:[" + painting_ids.map do |painting_id| "\"#{painting_id}\"" end.join(",") + "]" end.join(",")) f.write "}\nvar panel_ids_by_location_id = {" f.write(panel_ids_by_location_id.map do |location_id, panel_ids| "#{location_id}:[" + panel_ids.map do |panel_id| "\"#{panel_id}\"" end.join(",") + "]" end.join(",")) f.write "}\nvar mentioned_doors = [" f.write(mentioned_doors.map do |door_id| "\"#{door_id}\"" end.join(",")) f.write "]\nvar mentioned_paintings = [" f.write(mentioned_paintings.map do |painting_id| "\"#{painting_id}\"" end.join(",")) f.write "]\nvar paintings = {" f.write(painting_output.map do |painting_id, painting| "\"#{painting_id}\":{\"orientation\":\"#{painting["orientation"]}\",\"move\":#{painting.include? "move" and painting["move"]}}" end.join(",")) f.write "}\nvar classification_by_location_id = {" f.write(classification_by_location_id.map do |location_id, classification| "#{location_id}:#{classification}" end.join(",")) f.write "}" end