// Copyright (c) 2014 Alex Diener. All rights reserved. #ifndef __LevelEditorScreen_H__ #define __LevelEditorScreen_H__ #ifdef __cplusplus extern "C" { #endif typedef struct LevelEditorScreen LevelEditorScreen; #include "glbitmapfont/GLBitmapFont.h" #include "inputcontroller/InputController.h" #include "screenmanager/Screen.h" #include "watertowerclassic/GameSession.h" #include "watertowerclassic/LevelEditorInspectorView.h" #include "watertowerclassic/LevelEditorView.h" enum LevelEditorTool { LEVEL_EDITOR_TOOL_PENCIL = 100, LEVEL_EDITOR_TOOL_RECT, LEVEL_EDITOR_TOOL_ERASER, LEVEL_EDITOR_TOOL_INSPECT }; enum LevelEditorObjectType { OBJECT_BLOCK_STONE = 1, OBJECT_BLOCK_DRY_SOLID, OBJECT_BLOCK_WET_SOLID, OBJECT_BLOCK_CRUMBLE, OBJECT_BLOCK_SWITCHABLE, OBJECT_BLOCK_DEATH, OBJECT_BLOCK_MOVING, OBJECT_BLOCK_FLOATING, OBJECT_BLOCK_PHASING, OBJECT_BLOCK_LOCK, OBJECT_BLOCK_LADDER, OBJECT_BLOCK_LEVER, OBJECT_BLOCK_PUSHABLE, OBJECT_BLOCK_TRAMPOLINE, OBJECT_BLOCK_TELEPORT, OBJECT_BLOCK_FIRE, OBJECT_BLOCK_ICE, OBJECT_BLOCK_SAND, OBJECT_BLOCK_STICKY, OBJECT_BLOCK_FALLING, OBJECT_POWERUP_KEY, OBJECT_POWERUP_HEART, OBJECT_POWERUP_GEM, OBJECT_PLAYER_POSITION }; enum LevelEditorConfirmState { CONFIRM_NONE, CONFIRM_SAVE, CONFIRM_SAVE_BEFORE_QUIT, CONFIRM_REVERT, CONFIRM_DELETE_LEVEL }; #define LevelEditorScreen_structContents(self_type) \ Screen_structContents(self_type) \ \ GameSession * gameSession; \ LevelEditorView * view; \ LevelEditorInspectorView * inspectorView; \ LevelSetModel * levelSet; \ InputController * inputController; \ GLuint vertexBufferID; \ GLuint indexBufferID; \ GLTexture * spriteTexture; \ GLTextureAtlas * textureAtlas; \ GLBitmapFont * bitmapFont; \ unsigned int menuItemIndex; \ unsigned int levelIndex; \ unsigned int confirmChoice; \ enum LevelEditorTool selectedTool; \ enum LevelEditorObjectType selectedObject; \ bool reorderingLevel; \ bool draggingWaterLevel; \ bool draggingWaterSpeed; \ bool draggingInspector; \ Vector2f rawDragOrigin; \ bool draggingBlocks; \ struct LevelBlock * blockToPlace; \ struct LevelBlock blockDefaults[20]; \ bool erasing; \ unsigned int dragStartIndex; \ struct LevelBlock editingBlocks[LEVEL_BLOCK_COUNT_X * LEVEL_BLOCK_COUNT_Y]; \ unsigned int editingPowerupCount; \ struct LevelPowerup editingPowerups[LEVEL_POWERUP_COUNT_MAX]; \ bool showPowerupWarning; \ enum LevelEditorConfirmState confirmState; stemobject_struct_definition(LevelEditorScreen) LevelEditorScreen * LevelEditorScreen_create(GameSession * gameSession); bool LevelEditorScreen_init(LevelEditorScreen * self, GameSession * gameSession); void LevelEditorScreen_dispose(LevelEditorScreen * self); void LevelEditorScreen_activate(LevelEditorScreen * self); void LevelEditorScreen_deactivate(LevelEditorScreen * self); #ifdef __cplusplus } #endif #endif