Files @ r4603:3b159d0db197
Branch filter:

Location: cpp/openttd-patchpack/source/ai/trolly/shared.c - annotation

peter1138
(svn r6455) - Feature: Add 2cc (two company colours) livery schemes. This replaces the original colour selection window and bumps the saveload version. Liveries are supported for all vehicles, not just those with 2cc support. Thanks to lakie for GUI inspiration.
r2381:4f555f7add1f
r2381:4f555f7add1f
r2381:4f555f7add1f
r2381:4f555f7add1f
r2381:4f555f7add1f
r2381:4f555f7add1f
r2381:4f555f7add1f
r2381:4f555f7add1f
r2381:4f555f7add1f
r2381:4f555f7add1f
r2381:4f555f7add1f
r2381:4f555f7add1f
r2381:4f555f7add1f
r2381:4f555f7add1f
r2381:4f555f7add1f
r2381:4f555f7add1f
r2381:4f555f7add1f
r2381:4f555f7add1f
r4077:259c4c4aacad
r4077:259c4c4aacad
r4077:259c4c4aacad
r2381:4f555f7add1f
r4077:259c4c4aacad
r4077:259c4c4aacad
r4077:259c4c4aacad
r2381:4f555f7add1f
r2381:4f555f7add1f
r2381:4f555f7add1f
r4077:259c4c4aacad
r4077:259c4c4aacad
r4077:259c4c4aacad
r4077:259c4c4aacad
r2381:4f555f7add1f
r2381:4f555f7add1f
r2381:4f555f7add1f
r2381:4f555f7add1f
r2381:4f555f7add1f
r2381:4f555f7add1f
r2381:4f555f7add1f
r2381:4f555f7add1f
r2381:4f555f7add1f
r2381:4f555f7add1f
r2381:4f555f7add1f
r2381:4f555f7add1f
r2381:4f555f7add1f
r2381:4f555f7add1f
r2381:4f555f7add1f
r2381:4f555f7add1f
r2381:4f555f7add1f
r2381:4f555f7add1f
r2381:4f555f7add1f
r2381:4f555f7add1f
r2381:4f555f7add1f
r2381:4f555f7add1f
r2381:4f555f7add1f
r2381:4f555f7add1f
r2381:4f555f7add1f
r2381:4f555f7add1f
r2381:4f555f7add1f
r2381:4f555f7add1f
r2381:4f555f7add1f
r2381:4f555f7add1f
r2381:4f555f7add1f
r2381:4f555f7add1f
r2381:4f555f7add1f
r2381:4f555f7add1f
r3644:d318575888cb
r2381:4f555f7add1f
r3644:d318575888cb
r3644:d318575888cb
r3644:d318575888cb
r3644:d318575888cb
r2381:4f555f7add1f
r2381:4f555f7add1f
r4077:259c4c4aacad
r2381:4f555f7add1f
r2381:4f555f7add1f
r4077:259c4c4aacad
r4077:259c4c4aacad
r4077:259c4c4aacad
r4077:259c4c4aacad
r4077:259c4c4aacad
r2381:4f555f7add1f
r2381:4f555f7add1f
r2381:4f555f7add1f
r2381:4f555f7add1f
r2381:4f555f7add1f
r2381:4f555f7add1f
r2381:4f555f7add1f
r2381:4f555f7add1f
r2381:4f555f7add1f
r4077:259c4c4aacad
r4077:259c4c4aacad
r4077:259c4c4aacad
r4077:259c4c4aacad
r4077:259c4c4aacad
r4077:259c4c4aacad
r4077:259c4c4aacad
r2381:4f555f7add1f
r2381:4f555f7add1f
r2381:4f555f7add1f
r2381:4f555f7add1f
r4077:259c4c4aacad
r4077:259c4c4aacad
r4077:259c4c4aacad
r2381:4f555f7add1f
r4077:259c4c4aacad
r2381:4f555f7add1f
r2381:4f555f7add1f
r2381:4f555f7add1f
r2381:4f555f7add1f
r2381:4f555f7add1f
r2381:4f555f7add1f
r2381:4f555f7add1f
r2381:4f555f7add1f
r2381:4f555f7add1f
r2381:4f555f7add1f
r2381:4f555f7add1f
/* $Id$ */

#include "../../stdafx.h"
#include "../../openttd.h"
#include "../../debug.h"
#include "../../map.h"
#include "trolly.h"
#include "../../vehicle.h"

int AiNew_GetRailDirection(TileIndex tile_a, TileIndex tile_b, TileIndex tile_c)
{
	// 0 = vert
	// 1 = horz
	// 2 = dig up-left
	// 3 = dig down-right
	// 4 = dig down-left
	// 5 = dig up-right

	uint x1 = TileX(tile_a);
	uint x2 = TileX(tile_b);
	uint x3 = TileX(tile_c);

	uint y1 = TileY(tile_a);
	uint y2 = TileY(tile_b);
	uint y3 = TileY(tile_c);

	if (y1 == y2 && y2 == y3) return 0;
	if (x1 == x2 && x2 == x3) return 1;
	if (y2 > y1) return x2 > x3 ? 2 : 4;
	if (x2 > x1) return y2 > y3 ? 2 : 5;
	if (y1 > y2) return x2 > x3 ? 5 : 3;
	if (x1 > x2) return y2 > y3 ? 4 : 3;

	return 0;
}

int AiNew_GetRoadDirection(TileIndex tile_a, TileIndex tile_b, TileIndex tile_c)
{
	int x1, x2, x3;
	int y1, y2, y3;
	int r;

	x1 = TileX(tile_a);
	x2 = TileX(tile_b);
	x3 = TileX(tile_c);

	y1 = TileY(tile_a);
	y2 = TileY(tile_b);
	y3 = TileY(tile_c);

	r = 0;

	if (x1 < x2) r += 8;
	if (y1 < y2) r += 1;
	if (x1 > x2) r += 2;
	if (y1 > y2) r += 4;

	if (x2 < x3) r += 2;
	if (y2 < y3) r += 4;
	if (x2 > x3) r += 8;
	if (y2 > y3) r += 1;

	return r;
}

// Get's the direction between 2 tiles seen from tile_a
DiagDirection AiNew_GetDirection(TileIndex tile_a, TileIndex tile_b)
{
	if (TileY(tile_a) < TileY(tile_b)) return DIAGDIR_SE;
	if (TileY(tile_a) > TileY(tile_b)) return DIAGDIR_NW;
	if (TileX(tile_a) < TileX(tile_b)) return DIAGDIR_SW;
	return DIAGDIR_NE;
}


// This functions looks up if this vehicle is special for this AI
//  and returns his flag
uint AiNew_GetSpecialVehicleFlag(Player* p, Vehicle* v)
{
	uint i;

	for (i = 0; i < AI_MAX_SPECIAL_VEHICLES; i++) {
		if (p->ainew.special_vehicles[i].veh_id == v->index) {
			return p->ainew.special_vehicles[i].flag;
		}
	}

	// Not found :(
	return 0;
}


bool AiNew_SetSpecialVehicleFlag(Player* p, Vehicle* v, uint flag)
{
	int new_id = -1;
	uint i;

	for (i = 0; i < AI_MAX_SPECIAL_VEHICLES; i++) {
		if (p->ainew.special_vehicles[i].veh_id == v->index) {
			p->ainew.special_vehicles[i].flag |= flag;
			return true;
		}
		if (new_id == -1 &&
				p->ainew.special_vehicles[i].veh_id == 0 &&
				p->ainew.special_vehicles[i].flag == 0) {
			new_id = i;
		}
	}

	// Out of special_vehicle spots :s
	if (new_id == -1) {
		DEBUG(ai, 1)("special_vehicles list is too small :(");
		return false;
	}
	p->ainew.special_vehicles[new_id].veh_id = v->index;
	p->ainew.special_vehicles[new_id].flag = flag;
	return true;
}