(svn r2363) - Codechange: [NPF] Removed caching the endnode check. The code for this was buggy, fundamentally flawed and barely useful. (Hackykid)
This commit is contained in:
		
							
								
								
									
										8
									
								
								npf.c
									
									
									
									
									
								
							
							
						
						
									
										8
									
								
								npf.c
									
									
									
									
									
								
							@@ -443,22 +443,14 @@ int32 NPFFindStationOrTile(AyStar* as, OpenListNode *current) {
 | 
				
			|||||||
	AyStarNode *node = ¤t->path.node;
 | 
						AyStarNode *node = ¤t->path.node;
 | 
				
			||||||
	TileIndex tile = node->tile;
 | 
						TileIndex tile = node->tile;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* See if we checked this before */
 | 
					 | 
				
			||||||
	if (NPFGetFlag(node, NPF_FLAG_TARGET_CHECKED))
 | 
					 | 
				
			||||||
		return NPFGetFlag(node, NPF_FLAG_IS_TARGET);
 | 
					 | 
				
			||||||
	/* We're gonna check this now and store the result, let's mark that */
 | 
					 | 
				
			||||||
	NPFSetFlag(node, NPF_FLAG_TARGET_CHECKED, true);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	/* If GetNeighbours said we could get here, we assume the station type
 | 
						/* If GetNeighbours said we could get here, we assume the station type
 | 
				
			||||||
	 * is correct */
 | 
						 * is correct */
 | 
				
			||||||
	if (
 | 
						if (
 | 
				
			||||||
		(fstd->station_index == -1 && tile == fstd->dest_coords) || /* We've found the tile, or */
 | 
							(fstd->station_index == -1 && tile == fstd->dest_coords) || /* We've found the tile, or */
 | 
				
			||||||
		(IsTileType(tile, MP_STATION) && _map2[tile] == fstd->station_index) /* the station */
 | 
							(IsTileType(tile, MP_STATION) && _map2[tile] == fstd->station_index) /* the station */
 | 
				
			||||||
	) {
 | 
						) {
 | 
				
			||||||
		NPFSetFlag(node, NPF_FLAG_TARGET_CHECKED, true);
 | 
					 | 
				
			||||||
		return AYSTAR_FOUND_END_NODE;
 | 
							return AYSTAR_FOUND_END_NODE;
 | 
				
			||||||
	} else {
 | 
						} else {
 | 
				
			||||||
		NPFSetFlag(node, NPF_FLAG_TARGET_CHECKED, false);
 | 
					 | 
				
			||||||
		return AYSTAR_DONE;
 | 
							return AYSTAR_DONE;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										7
									
								
								npf.h
									
									
									
									
									
								
							
							
						
						
									
										7
									
								
								npf.h
									
									
									
									
									
								
							@@ -43,13 +43,6 @@ typedef enum { /* Flags for AyStarNode.userdata[NPF_NODE_FLAGS]. Use NPFGetBit()
 | 
				
			|||||||
	NPF_FLAG_SEEN_SIGNAL, /* Used to mark that a signal was seen on the way, for rail only */
 | 
						NPF_FLAG_SEEN_SIGNAL, /* Used to mark that a signal was seen on the way, for rail only */
 | 
				
			||||||
	NPF_FLAG_REVERSE, /* Used to mark that this node was reached from the second start node, if applicable */
 | 
						NPF_FLAG_REVERSE, /* Used to mark that this node was reached from the second start node, if applicable */
 | 
				
			||||||
	NPF_FLAG_LAST_SIGNAL_RED, /* Used to mark that the last signal on this path was red */
 | 
						NPF_FLAG_LAST_SIGNAL_RED, /* Used to mark that the last signal on this path was red */
 | 
				
			||||||
	NPF_FLAG_TARGET_CHECKED, /* Used by end node checking function of npf to mark
 | 
					 | 
				
			||||||
														 that they have evaluated this node. When this
 | 
					 | 
				
			||||||
														 flag is on, NPF_FLAG_IS_TARGET is on when the
 | 
					 | 
				
			||||||
														 node is a target, and off when it is not. Should
 | 
					 | 
				
			||||||
														 never be used directly, only by the end node
 | 
					 | 
				
			||||||
														 checking functions for caching of results. */
 | 
					 | 
				
			||||||
	NPF_FLAG_IS_TARGET, /* See comment for NPF_FLAG_TARGET_CHECKED */
 | 
					 | 
				
			||||||
} NPFNodeFlag;
 | 
					} NPFNodeFlag;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
typedef struct NPFFoundTargetData { /* Meant to be stored in AyStar.userpath */
 | 
					typedef struct NPFFoundTargetData { /* Meant to be stored in AyStar.userpath */
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -52,7 +52,7 @@ static void DrawOrdersWindow(Window *w)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	shared_orders = IsOrderListShared(v);
 | 
						shared_orders = IsOrderListShared(v);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if ((uint)v->num_orders + shared_orders <= (uint)WP(w,order_d).sel)
 | 
						if ((uint)v->num_orders + (shared_orders?1:0) <= (uint)WP(w,order_d).sel)
 | 
				
			||||||
		SETBIT(w->disabled_state, 5); /* delete */
 | 
							SETBIT(w->disabled_state, 5); /* delete */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (v->num_orders == 0)
 | 
						if (v->num_orders == 0)
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user