project_files/HedgewarsMobile/Classes/MapPreviewButtonView.m
author nemo
Sun, 02 Oct 2011 10:36:43 -0400
changeset 6081 537bbd5c1a62
parent 6078 8c0cc07731e5
child 6109 f6726ec81e64
permissions -rw-r--r--
Basic test implementation of an ice flag. Allows for slick parts of terrain. Intended for ice gun, or "ice" mask on portions of land objects. In this test variant it is triggered on girders/objects/bridges of the snow/christmas theme, or on a map that uses blue as a mask colour. Probably needs sheepluva's slope detection to make slopes more slippery to climb.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
3910
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
     1
/*
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
     2
 * Hedgewars-iOS, a Hedgewars port for iOS devices
4976
088d40d8aba2 Happy 2011 :)
koda
parents: 4356
diff changeset
     3
 * Copyright (c) 2009-2011 Vittorio Giovara <vittorio.giovara@gmail.com>
3910
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
     4
 *
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
     5
 * This program is free software; you can redistribute it and/or modify
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
     6
 * it under the terms of the GNU General Public License as published by
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
     7
 * the Free Software Foundation; version 2 of the License
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
     8
 *
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
     9
 * This program is distributed in the hope that it will be useful,
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
    10
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
    11
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
    12
 * GNU General Public License for more details.
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
    13
 *
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
    14
 * You should have received a copy of the GNU General Public License
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
    15
 * along with this program; if not, write to the Free Software
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
    16
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
    17
 *
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
    18
 * File created on 26/09/2010.
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
    19
 */
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
    20
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
    21
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
    22
#import "MapPreviewButtonView.h"
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
    23
#import "MapConfigViewController.h"
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
    24
#import "UIImageExtra.h"
6078
8c0cc07731e5 headers cleanup, converted some function-only sources into proper class method files, more use of OOP power, removed some 'respondsToSelector' calls, moved defines into their own header, more use of objc categories
koda
parents: 5207
diff changeset
    25
#import "ServerSetup.h"
3910
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
    26
#import <pthread.h>
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
    27
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
    28
#define INDICATOR_TAG 7654
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
    29
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
    30
@implementation MapPreviewButtonView
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
    31
@synthesize delegate;
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
    32
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
    33
-(id) initWithFrame:(CGRect)frame {
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
    34
    if ((self = [super initWithFrame:frame])) {
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
    35
        delegate = nil;
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
    36
        [self setBackgroundImageRounded:[UIImage whiteImage:frame.size] forState:UIControlStateNormal];
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
    37
    }
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
    38
    return self;
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
    39
}
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
    40
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
    41
-(id) initWithCoder:(NSCoder *)aDecoder {
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
    42
    if ((self = [super initWithCoder:aDecoder])) {
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
    43
        delegate = nil;
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
    44
        [self setBackgroundImageRounded:[UIImage whiteImage:self.frame.size] forState:UIControlStateNormal];
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
    45
    }
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
    46
    return self;
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
    47
}
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
    48
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
    49
-(void) dealloc {
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
    50
    self.delegate = nil;
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
    51
    [super dealloc];
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
    52
}
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
    53
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
    54
#pragma mark -
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
    55
#pragma mark image wrappers
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
    56
-(void) setBackgroundImageRounded:(UIImage *)image forState:(UIControlState)state {
4356
d1d26f8963a3 update some files for new graphics and new ios4.2
koda
parents: 4082
diff changeset
    57
    // TODO:http://stackoverflow.com/questions/4272476/setbackgroundimage-behaviour-changed-on-ipad-4-2
d1d26f8963a3 update some files for new graphics and new ios4.2
koda
parents: 4082
diff changeset
    58
    [self setBackgroundImage:[image makeRoundCornersOfSize:CGSizeMake(12, 12)] forState:state];
3910
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
    59
}
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
    60
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
    61
-(void) setImageRounded:(UIImage *)image forState:(UIControlState)state {
4356
d1d26f8963a3 update some files for new graphics and new ios4.2
koda
parents: 4082
diff changeset
    62
    [self setImage:[image makeRoundCornersOfSize:CGSizeMake(12, 12)] forState:state];
3910
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
    63
}
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
    64
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
    65
-(void) setImageRoundedForNormalState:(UIImage *)image {
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
    66
    [self setImageRounded:image forState:UIControlStateNormal];
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
    67
}
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
    68
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
    69
#pragma mark -
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
    70
#pragma mark preview 
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
    71
-(int) sendToEngine:(NSString *)string {
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
    72
    unsigned char length = [string length];
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
    73
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
    74
    SDLNet_TCP_Send(csd, &length, 1);
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
    75
    return SDLNet_TCP_Send(csd, [string UTF8String], length);
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
    76
}
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
    77
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
    78
-(const uint8_t *)engineProtocol {
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
    79
    IPaddress ip;
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
    80
    BOOL serverQuit = NO;
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
    81
    static uint8_t map[128*32];
6078
8c0cc07731e5 headers cleanup, converted some function-only sources into proper class method files, more use of OOP power, removed some 'respondsToSelector' calls, moved defines into their own header, more use of objc categories
koda
parents: 5207
diff changeset
    82
    int port = [ServerSetup randomPort];
3910
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
    83
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
    84
    if (SDLNet_Init() < 0) {
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
    85
        DLog(@"SDLNet_Init: %s", SDLNet_GetError());
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
    86
        serverQuit = YES;
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
    87
    }
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
    88
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
    89
    // Resolving the host using NULL make network interface to listen
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
    90
    if (SDLNet_ResolveHost(&ip, NULL, port) < 0) {
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
    91
        DLog(@"SDLNet_ResolveHost: %s\n", SDLNet_GetError());
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
    92
        serverQuit = YES;
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
    93
    }
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
    94
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
    95
    // Open a connection with the IP provided (listen on the host's port)
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
    96
    if (!(sd = SDLNet_TCP_Open(&ip))) {
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
    97
        DLog(@"SDLNet_TCP_Open: %s %\n", SDLNet_GetError(), port);
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
    98
        serverQuit = YES;
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
    99
    }
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
   100
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
   101
    // launch the preview here so that we're sure the tcp channel is open
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
   102
    pthread_t thread_id;
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
   103
    pthread_create(&thread_id, NULL, (void *)GenLandPreview, (void *)port);
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
   104
    pthread_detach(thread_id);
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
   105
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
   106
    DLog(@"Waiting for a client on port %d", port);
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
   107
    while (!serverQuit) {
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
   108
        /* This check the sd if there is a pending connection.
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
   109
         * If there is one, accept that, and open a new socket for communicating */
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
   110
        csd = SDLNet_TCP_Accept(sd);
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
   111
        if (NULL != csd) {
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
   112
            DLog(@"Client found");
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
   113
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
   114
            NSDictionary *dictForEngine = [self getDataForEngine];
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
   115
            [self sendToEngine:[dictForEngine objectForKey:@"seedCommand"]];
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
   116
            [self sendToEngine:[dictForEngine objectForKey:@"templateFilterCommand"]];
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
   117
            [self sendToEngine:[dictForEngine objectForKey:@"mapGenCommand"]];
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
   118
            [self sendToEngine:[dictForEngine objectForKey:@"mazeSizeCommand"]];
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
   119
            [self sendToEngine:@"!"];
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
   120
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
   121
            memset(map, 0, 128*32);
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
   122
            SDLNet_TCP_Recv(csd, map, 128*32);
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
   123
            SDLNet_TCP_Recv(csd, &maxHogs, sizeof(uint8_t));
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
   124
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
   125
            SDLNet_TCP_Close(csd);
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
   126
            serverQuit = YES;
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
   127
        }
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
   128
    }
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
   129
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
   130
    SDLNet_TCP_Close(sd);
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
   131
    SDLNet_Quit();
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
   132
    return map;
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
   133
}
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
   134
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
   135
-(void) drawingThread {
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
   136
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
   137
    const uint8_t *map = [self engineProtocol];
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
   138
    uint8_t mapExp[128*32*8];
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
   139
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
   140
    // draw the buffer (1 pixel per component, 0= transparent 1= color)
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
   141
    int k = 0;
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
   142
    for (int i = 0; i < 32*128; i++) {
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
   143
        unsigned char byte = map[i];
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
   144
        for (int j = 0; j < 8; j++) {
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
   145
            // select the color based on the leftmost bit
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
   146
            if ((byte & 0x80) != 0)
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
   147
                mapExp[k] = 100;
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
   148
            else
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
   149
                mapExp[k] = 255;
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
   150
            // shift to next bit
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
   151
            byte <<= 1;
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
   152
            k++;
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
   153
        }
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
   154
    }
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
   155
    CGColorSpaceRef colorspace = CGColorSpaceCreateDeviceGray();
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
   156
    CGContextRef bitmapImage = CGBitmapContextCreate(mapExp, 256, 128, 8, 256, colorspace, kCGImageAlphaNone);
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
   157
    CGColorSpaceRelease(colorspace);
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
   158
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
   159
    CGImageRef previewCGImage = CGBitmapContextCreateImage(bitmapImage);
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
   160
    CGContextRelease(bitmapImage);
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
   161
    UIImage *previewImage = [[UIImage alloc] initWithCGImage:previewCGImage];
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
   162
    CGImageRelease(previewCGImage);
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
   163
    previewCGImage = nil;
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
   164
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
   165
    // all these are performed on the main thread to prevent a leak
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
   166
    [self performSelectorOnMainThread:@selector(setImageRoundedForNormalState:)
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
   167
                           withObject:previewImage
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
   168
                        waitUntilDone:NO];
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
   169
    [previewImage release];
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
   170
    [self performSelectorOnMainThread:@selector(setLabelText:)
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
   171
                           withObject:[NSString stringWithFormat:@"%d", maxHogs]
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
   172
                        waitUntilDone:NO];
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
   173
    [self performSelectorOnMainThread:@selector(turnOnWidgets)
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
   174
                           withObject:nil
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
   175
                        waitUntilDone:NO];
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
   176
    [self performSelectorOnMainThread:@selector(removeIndicator)
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
   177
                           withObject:nil
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
   178
                        waitUntilDone:NO];
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
   179
    
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
   180
    [pool release];
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
   181
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
   182
    /*
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
   183
    // http://developer.apple.com/mac/library/qa/qa2001/qa1037.html
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
   184
    UIGraphicsBeginImageContext(CGSizeMake(256,128));
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
   185
    CGContextRef context = UIGraphicsGetCurrentContext();
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
   186
    UIGraphicsPushContext(context);
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
   187
    CGContextSetRGBFillColor(context, 0.5, 0.5, 0.7, 1.0);
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
   188
    CGContextFillRect(context,CGRectMake(xc,yc,1,1));
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
   189
    UIGraphicsPopContext();
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
   190
    UIImage *previewImage = UIGraphicsGetImageFromCurrentImageContext();
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
   191
    UIGraphicsEndImageContext();
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
   192
    */
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
   193
}
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
   194
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
   195
-(void) updatePreviewWithSeed:(NSString *)seed {
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
   196
    // remove the current preview and title
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
   197
    [self setImage:nil forState:UIControlStateNormal];
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
   198
    [self setTitle:nil forState:UIControlStateNormal];
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
   199
    
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
   200
    // don't display preview on slower device, too slow and memory hog
6078
8c0cc07731e5 headers cleanup, converted some function-only sources into proper class method files, more use of OOP power, removed some 'respondsToSelector' calls, moved defines into their own header, more use of objc categories
koda
parents: 5207
diff changeset
   201
    if (IS_NOT_POWERFUL([HWUtils modelType])) {
3910
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
   202
        [self setTitle:NSLocalizedString(@"Preview not available",@"") forState:UIControlStateNormal];
4082
bfe14b38dad1 better support for wimpier i-devices
koda
parents: 3910
diff changeset
   203
        [self turnOnWidgets];
3910
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
   204
    } else {        
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
   205
        // add a very nice spinning wheel
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
   206
        UIActivityIndicatorView *indicator = [[UIActivityIndicatorView alloc]
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
   207
                                              initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge];
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
   208
        indicator.center = CGPointMake(self.bounds.size.width / 2, self.bounds.size.height / 2);
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
   209
        indicator.tag = INDICATOR_TAG;
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
   210
        [indicator startAnimating];
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
   211
        [self addSubview:indicator];
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
   212
        [indicator release];
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
   213
        
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
   214
        // let's draw in a separate thread so the gui can work; at the end it restore other widgets
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
   215
        [NSThread detachNewThreadSelector:@selector(drawingThread) toTarget:self withObject:nil];
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
   216
    }
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
   217
}
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
   218
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
   219
-(void) updatePreviewWithFile:(NSString *)filePath {
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
   220
    UIImage *image = [[UIImage alloc] initWithContentsOfFile:filePath];
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
   221
    [self setImageRounded:image forState:UIControlStateNormal];
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
   222
    [image release];
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
   223
}
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
   224
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
   225
-(void) removeIndicator {
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
   226
    UIActivityIndicatorView *indicator = (UIActivityIndicatorView *)[self viewWithTag:INDICATOR_TAG];
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
   227
    if (indicator) {
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
   228
        [indicator stopAnimating];
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
   229
        [indicator removeFromSuperview];
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
   230
    }
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
   231
}
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
   232
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
   233
#pragma mark -
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
   234
#pragma mark delegate
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
   235
-(void) turnOnWidgets {
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
   236
    [self.delegate turnOnWidgets];
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
   237
}
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
   238
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
   239
-(void) setLabelText:(NSString *)string {
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
   240
    [self.delegate setLabelText:string];
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
   241
}
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
   242
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
   243
-(NSDictionary *)getDataForEngine {
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
   244
    return [self.delegate getDataForEngine];
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
   245
}
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
   246
dd47efbdec46 move all preview drawing code into its own class (for a simplified and more readable MapConfigViewController)
koda
parents:
diff changeset
   247
@end