38 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Python
		
	
	
			
		
		
	
	
			38 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Python
		
	
	
| #CFWorld.py
 | |
| #A small module for checking where is bigworld an object is if it's in bigworld.
 | |
| import math
 | |
| 
 | |
| import Crossfire
 | |
| 
 | |
| world_prefix = "/world/world_"
 | |
| world_prefix_len = len(world_prefix)
 | |
| world_len = len(world_prefix) + len('xxx_xxx')
 | |
| world_sep = '_'
 | |
| bigmapxsize = 50
 | |
| bigmapysize = 50
 | |
| 
 | |
| #Return an x,y tuple of where in bigworld an object is. Return false if not in bigworld. In current bigworld, values range from 5000 to 6499.
 | |
| def loc_from_ob(ob):
 | |
|     cfmap = ob.Map
 | |
|     if ((cfmap.Path.find(world_prefix) != 0) or (len(cfmap.Path) != world_len)):
 | |
|         return False
 | |
|     strloc = cfmap.Path[world_prefix_len:].split(world_sep)
 | |
|     x = (int(strloc[0]) * bigmapxsize) + ob.X
 | |
|     y = (int(strloc[1]) * bigmapysize) + ob.Y
 | |
|     return (x, y)
 | |
| 
 | |
| def getdiff(loc1, loc2):
 | |
|     return (loc1[0]-loc2[0], loc1[1]-loc2[1])
 | |
| 
 | |
| def getdir(v):
 | |
|     x, y = v
 | |
|     t = math.atan2(x, y)
 | |
|     rt = round(t / (math.pi/4)) # between -4 and 4
 | |
|     directions = ["north", "northwest", "west", "southwest", "south", "southeast", "east", "northeast"]
 | |
|     dir_str = directions[(rt + 4)%8]
 | |
|     return dir_str
 | |
| 
 | |
| #outputs in furlongs (outdoor tiles)
 | |
| def getdist(loc):
 | |
|     return int(math.sqrt((loc[0]*loc[0])+(loc[1]*loc[1])))
 |