mirror of
https://github.com/OpenTTD/OpenTTD.git
synced 2025-08-14 10:09:11 +00:00
Compare commits
54 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
5a5c02f55d | ||
|
f39f14aceb | ||
|
a86469d6bc | ||
|
d567f99ecf | ||
|
969d538026 | ||
|
5cde77086d | ||
|
6d8d781d5c | ||
|
08dc96571a | ||
|
a123484ee0 | ||
|
3edbb1a543 | ||
|
893bccf4c8 | ||
|
a97240dede | ||
|
876d064c4d | ||
|
660fe672e8 | ||
|
b49c6e0cbd | ||
|
0ffca06944 | ||
|
024aa14f94 | ||
|
2d454f37f0 | ||
|
a00a4b5ad8 | ||
|
b1d2a8876b | ||
|
253702529d | ||
|
65c5e26913 | ||
|
9456d20800 | ||
|
7ccaa82206 | ||
|
02f3d2d8af | ||
|
7742f8c080 | ||
|
ba01583ce3 | ||
|
498e5989d1 | ||
|
ab7b117c50 | ||
|
085b498c28 | ||
|
30eff93341 | ||
|
139a213d4d | ||
|
06c45d6fe5 | ||
|
8446d6b8c2 | ||
|
9676072298 | ||
|
2db7e3a0a8 | ||
|
1e9fd18e6a | ||
|
909af50aaa | ||
|
07a16f9282 | ||
|
28e7981a5b | ||
|
f7cc97fe5c | ||
|
d9ed2d380f | ||
|
60901368cc | ||
|
9f5e690118 | ||
|
2fbd7ff6cc | ||
|
1595413545 | ||
|
76b2e1c5ab | ||
|
7e1385b6eb | ||
|
4ec28e1ba7 | ||
|
30afba1d10 | ||
|
61e97110c9 | ||
|
9e592b9986 | ||
|
de7a4a4006 | ||
|
53dc1a89da |
2
Doxyfile
2
Doxyfile
@@ -1,7 +1,7 @@
|
|||||||
#---------------------------------------------------------------------------
|
#---------------------------------------------------------------------------
|
||||||
# Project related configuration options
|
# Project related configuration options
|
||||||
#---------------------------------------------------------------------------
|
#---------------------------------------------------------------------------
|
||||||
PROJECT_NAME = openttd
|
PROJECT_NAME = OpenTTD
|
||||||
OUTPUT_DIRECTORY = docs/source/
|
OUTPUT_DIRECTORY = docs/source/
|
||||||
CREATE_SUBDIRS = NO
|
CREATE_SUBDIRS = NO
|
||||||
OUTPUT_LANGUAGE = English
|
OUTPUT_LANGUAGE = English
|
||||||
|
@@ -93,7 +93,7 @@ ifeq ($(shell if test -f config.cache; then echo 1; fi), 1)
|
|||||||
@echo " Going to reconfigure with last known settings..."
|
@echo " Going to reconfigure with last known settings..."
|
||||||
@echo "----------------"
|
@echo "----------------"
|
||||||
# Make sure we don't lock config.cache
|
# Make sure we don't lock config.cache
|
||||||
@$(shell cat config.cache | sed 's~\\ ~\\\\ ~g') || exit 1
|
@$(shell cat config.cache | sed 's@\\ @\\\\ @g') || exit 1
|
||||||
@echo "----------------"
|
@echo "----------------"
|
||||||
@echo "Reconfig done. Please re-execute make."
|
@echo "Reconfig done. Please re-execute make."
|
||||||
@echo "----------------"
|
@echo "----------------"
|
||||||
|
@@ -19,8 +19,8 @@ BIN_DIR = "$(ROOT_DIR)/bin"
|
|||||||
SRC_DIR = "$(ROOT_DIR)/src"
|
SRC_DIR = "$(ROOT_DIR)/src"
|
||||||
BUNDLE_DIR = "$(ROOT_DIR)/bundle"
|
BUNDLE_DIR = "$(ROOT_DIR)/bundle"
|
||||||
BUNDLES_DIR = "$(ROOT_DIR)/bundles"
|
BUNDLES_DIR = "$(ROOT_DIR)/bundles"
|
||||||
TTD = "openttd.exe"
|
TTD = openttd.exe
|
||||||
TARGET := $(shell echo $(PLATFORM) | sed "s~win64~x64~;s~win32~Win32~")
|
TARGET := $(shell echo $(PLATFORM) | sed "s@win64@x64@;s@win32@Win32@")
|
||||||
|
|
||||||
all:
|
all:
|
||||||
$(Q)cp objs/$(TARGET)/Release/$(TTD) $(BIN_DIR)/$(TTD)
|
$(Q)cp objs/$(TARGET)/Release/$(TTD) $(BIN_DIR)/$(TTD)
|
||||||
|
@@ -4,7 +4,6 @@ CC_BUILD = !!CC_BUILD!!
|
|||||||
CXX_BUILD = !!CXX_BUILD!!
|
CXX_BUILD = !!CXX_BUILD!!
|
||||||
WINDRES = !!WINDRES!!
|
WINDRES = !!WINDRES!!
|
||||||
STRIP = !!STRIP!!
|
STRIP = !!STRIP!!
|
||||||
CC_CFLAGS = !!CC_CFLAGS!!
|
|
||||||
CFLAGS = !!CFLAGS!!
|
CFLAGS = !!CFLAGS!!
|
||||||
CFLAGS_BUILD = !!CFLAGS_BUILD!!
|
CFLAGS_BUILD = !!CFLAGS_BUILD!!
|
||||||
LIBS = !!LIBS!!
|
LIBS = !!LIBS!!
|
||||||
@@ -28,7 +27,6 @@ CFLAGS_MAKEDEP= !!CFLAGS_MAKEDEP!!
|
|||||||
SORT = !!SORT!!
|
SORT = !!SORT!!
|
||||||
REVISION = !!REVISION!!
|
REVISION = !!REVISION!!
|
||||||
AWK = !!AWK!!
|
AWK = !!AWK!!
|
||||||
GCC295 = !!GCC295!!
|
|
||||||
CONFIG_CACHE_COMPILER = $(SRC_OBJS_DIR)/!!CONFIG_CACHE_COMPILER!!
|
CONFIG_CACHE_COMPILER = $(SRC_OBJS_DIR)/!!CONFIG_CACHE_COMPILER!!
|
||||||
CONFIG_CACHE_LINKER = $(SRC_OBJS_DIR)/!!CONFIG_CACHE_LINKER!!
|
CONFIG_CACHE_LINKER = $(SRC_OBJS_DIR)/!!CONFIG_CACHE_LINKER!!
|
||||||
CONFIG_CACHE_ENDIAN = $(SRC_OBJS_DIR)/!!CONFIG_CACHE_ENDIAN!!
|
CONFIG_CACHE_ENDIAN = $(SRC_OBJS_DIR)/!!CONFIG_CACHE_ENDIAN!!
|
||||||
@@ -53,20 +51,6 @@ CFLAGS_MAKEDEP += -I $(SRC_OBJS_DIR) -I $(LANG_OBJS_DIR) -I $(SCRIPT_SRC_DIR)
|
|||||||
|
|
||||||
ENDIAN_TARGETS := endian_target.h $(ENDIAN_CHECK)
|
ENDIAN_TARGETS := endian_target.h $(ENDIAN_CHECK)
|
||||||
|
|
||||||
# This 'sed' basicly just removes 'const' from the line if it is a 2+D array
|
|
||||||
# For more information, please check:
|
|
||||||
# http://maillist.openttd.org/pipermail/devs/2007-April/000284.html
|
|
||||||
# http://maillist.openttd.org/pipermail/devs/2007-February/000248.html
|
|
||||||
GCC295_FIX=sed -r 's~^(\t*)(.*)( const )([A-Za-z0-9_ ]+(\[.*\]){2,})(( = \{)|(;))(.*)$$~\1\2 \4\6\8\9~g'
|
|
||||||
# This 'sed' removes the 3rd '4' in the # lines of the -E output of
|
|
||||||
# gcc 2.95.3 and lower, as it should indicate that it is a C-linkage, but the
|
|
||||||
# compiler can't handle that information (just don't ask). So we remove it
|
|
||||||
# and then it compiles happily and without bitching :)
|
|
||||||
# Furthermore gcc 2.95 has some trouble with protected and private when
|
|
||||||
# accessing the protected/private stuff of the enclosing class (or the
|
|
||||||
# super class of the enclosing class).
|
|
||||||
GCC295_FIX_2=sed -e 's~\(^\# [0-9][0-9]* "[^"]*"[ 0-9]*\) 4$$~\1~g;s~private:~public:~g;s~protected:~public:~g'
|
|
||||||
|
|
||||||
# Check if we want to show what we are doing
|
# Check if we want to show what we are doing
|
||||||
ifdef VERBOSE
|
ifdef VERBOSE
|
||||||
Q =
|
Q =
|
||||||
@@ -98,7 +82,7 @@ MODIFIED := $(shell echo "$(VERSIONS)" | cut -f 3 -d' ')
|
|||||||
ifdef REVISION
|
ifdef REVISION
|
||||||
# Use specified revision (which should be of the form "r000").
|
# Use specified revision (which should be of the form "r000").
|
||||||
REV := $(REVISION)
|
REV := $(REVISION)
|
||||||
REV_NR := $(shell echo $(REVISION) | sed "s~[^0-9]~~g")
|
REV_NR := $(shell echo $(REVISION) | sed "s@[^0-9]@@g")
|
||||||
else
|
else
|
||||||
# Use autodetected revisions
|
# Use autodetected revisions
|
||||||
REV := $(shell echo "$(VERSIONS)" | cut -f 1 -d' ')
|
REV := $(shell echo "$(VERSIONS)" | cut -f 1 -d' ')
|
||||||
@@ -114,7 +98,7 @@ REV_NR := 0
|
|||||||
endif
|
endif
|
||||||
|
|
||||||
# This helps to recompile if flags change
|
# This helps to recompile if flags change
|
||||||
RES := $(shell if [ "`cat $(CONFIG_CACHE_COMPILER) 2>/dev/null`" != "$(CC_CFLAGS) $(CFLAGS)" ]; then echo "$(CC_CFLAGS) $(CFLAGS)" > $(CONFIG_CACHE_COMPILER); fi )
|
RES := $(shell if [ "`cat $(CONFIG_CACHE_COMPILER) 2>/dev/null`" != "$(CFLAGS)" ]; then echo "$(CFLAGS)" > $(CONFIG_CACHE_COMPILER); fi )
|
||||||
RES := $(shell if [ "`cat $(CONFIG_CACHE_LINKER) 2>/dev/null`" != "$(LDFLAGS) $(LIBS)" ]; then echo "$(LDFLAGS) $(LIBS)" > $(CONFIG_CACHE_LINKER); fi )
|
RES := $(shell if [ "`cat $(CONFIG_CACHE_LINKER) 2>/dev/null`" != "$(LDFLAGS) $(LIBS)" ]; then echo "$(LDFLAGS) $(LIBS)" > $(CONFIG_CACHE_LINKER); fi )
|
||||||
RES := $(shell if [ "`cat $(CONFIG_CACHE_ENDIAN) 2>/dev/null`" != "$(ENDIAN_FORCE)" ]; then echo "$(ENDIAN_FORCE)" > $(CONFIG_CACHE_ENDIAN); fi )
|
RES := $(shell if [ "`cat $(CONFIG_CACHE_ENDIAN) 2>/dev/null`" != "$(ENDIAN_FORCE)" ]; then echo "$(ENDIAN_FORCE)" > $(CONFIG_CACHE_ENDIAN); fi )
|
||||||
|
|
||||||
@@ -143,15 +127,15 @@ endif
|
|||||||
|
|
||||||
$(OBJS_C:%.o=%.d): %.d: $(SRC_DIR)/%.c $(FILE_DEP)
|
$(OBJS_C:%.o=%.d): %.d: $(SRC_DIR)/%.c $(FILE_DEP)
|
||||||
$(E) '$(STAGE) DEP $(<:$(SRC_DIR)/%.c=%.c)'
|
$(E) '$(STAGE) DEP $(<:$(SRC_DIR)/%.c=%.c)'
|
||||||
$(Q)$(CC_HOST) $(CC_CFLAGS) $(CFLAGS) -MM $< | sed 's~^$(@F:%.d=%.o):~$@ $(@:%.d=%.o):~' > $@
|
$(Q)$(CC_HOST) $(CC_CFLAGS) $(CFLAGS) -MM $< | sed 's@^$(@F:%.d=%.o):@$@ $(@:%.d=%.o):@' > $@
|
||||||
|
|
||||||
$(OBJS_CPP:%.o=%.d): %.d: $(SRC_DIR)/%.cpp $(FILE_DEP)
|
$(OBJS_CPP:%.o=%.d): %.d: $(SRC_DIR)/%.cpp $(FILE_DEP)
|
||||||
$(E) '$(STAGE) DEP $(<:$(SRC_DIR)/%.cpp=%.cpp)'
|
$(E) '$(STAGE) DEP $(<:$(SRC_DIR)/%.cpp=%.cpp)'
|
||||||
$(Q)$(CXX_HOST) $(CFLAGS) -MM $< | sed 's~^$(@F:%.d=%.o):~$@ $(@:%.d=%.o):~' > $@
|
$(Q)$(CXX_HOST) $(CFLAGS) -MM $< | sed 's@^$(@F:%.d=%.o):@$@ $(@:%.d=%.o):@' > $@
|
||||||
|
|
||||||
$(OBJS_MM:%.o=%.d): %.d: $(SRC_DIR)/%.mm $(FILE_DEP)
|
$(OBJS_MM:%.o=%.d): %.d: $(SRC_DIR)/%.mm $(FILE_DEP)
|
||||||
$(E) '$(STAGE) DEP $(<:$(SRC_DIR)/%.mm=%.mm)'
|
$(E) '$(STAGE) DEP $(<:$(SRC_DIR)/%.mm=%.mm)'
|
||||||
$(Q)$(CC_HOST) $(CFLAGS) -MM $< | sed 's~^$(@F:%.d=%.o):~$@ $(@:%.d=%.o):~' > $@
|
$(Q)$(CC_HOST) $(CFLAGS) -MM $< | sed 's@^$(@F:%.d=%.o):@$@ $(@:%.d=%.o):@' > $@
|
||||||
|
|
||||||
$(OBJS_RC:%.o=%.d): %.d: $(SRC_DIR)/%.rc $(FILE_DEP)
|
$(OBJS_RC:%.o=%.d): %.d: $(SRC_DIR)/%.rc $(FILE_DEP)
|
||||||
$(E) '$(STAGE) DEP $(<:$(SRC_DIR)/%.mm=%.mm)'
|
$(E) '$(STAGE) DEP $(<:$(SRC_DIR)/%.mm=%.mm)'
|
||||||
@@ -182,7 +166,7 @@ endif
|
|||||||
|
|
||||||
# Convert x:/... paths to /x/... for mingw
|
# Convert x:/... paths to /x/... for mingw
|
||||||
ifeq ($(OS), MINGW)
|
ifeq ($(OS), MINGW)
|
||||||
@cat Makefile.dep.tmp | sed 's~\([a-zA-Z]\):\/~\/\1\/~g' > Makefile.dep.tmp.mingw
|
@cat Makefile.dep.tmp | sed 's@/\([a-zA-Z]\):\/@\/\1\/@g' > Makefile.dep.tmp.mingw
|
||||||
@cp Makefile.dep.tmp.mingw Makefile.dep.tmp
|
@cp Makefile.dep.tmp.mingw Makefile.dep.tmp
|
||||||
@rm -f Makefile.dep.tmp.mingw
|
@rm -f Makefile.dep.tmp.mingw
|
||||||
endif
|
endif
|
||||||
@@ -192,7 +176,7 @@ endif
|
|||||||
@$(AWK) ' \
|
@$(AWK) ' \
|
||||||
/^# DO NOT/ { print $$0 ; next} \
|
/^# DO NOT/ { print $$0 ; next} \
|
||||||
/^#/ {next} \
|
/^#/ {next} \
|
||||||
/:/ { \
|
/: / { \
|
||||||
left = NF - 1; \
|
left = NF - 1; \
|
||||||
for (n = 2; n <= NF; n++) { \
|
for (n = 2; n <= NF; n++) { \
|
||||||
if (match($$n, "^$(ROOT_DIR)") == 0) { \
|
if (match($$n, "^$(ROOT_DIR)") == 0) { \
|
||||||
@@ -211,7 +195,7 @@ endif
|
|||||||
{ \
|
{ \
|
||||||
print $$0 \
|
print $$0 \
|
||||||
} \
|
} \
|
||||||
' < Makefile.dep.tmp | sed 's~ *~ ~g;s~ $$~~' | $(SORT) > Makefile.dep
|
' < Makefile.dep.tmp | sed 's@ *@ @g;s@ $$@@' | $(SORT) > Makefile.dep
|
||||||
|
|
||||||
$(Q)rm -f Makefile.dep.tmp Makefile.dep.tmp.bak
|
$(Q)rm -f Makefile.dep.tmp Makefile.dep.tmp.bak
|
||||||
|
|
||||||
@@ -226,17 +210,9 @@ endif
|
|||||||
|
|
||||||
# Compile all the files according to the targets
|
# Compile all the files according to the targets
|
||||||
|
|
||||||
$(OBJS_C): %.o: $(SRC_DIR)/%.c $(DEP_MASK) $(FILE_DEP)
|
|
||||||
$(E) '$(STAGE) Compiling $(<:$(SRC_DIR)/%.c=%.c)'
|
|
||||||
$(Q)$(CC_HOST) $(CC_CFLAGS) $(CFLAGS) -c -o $@ $<
|
|
||||||
|
|
||||||
$(OBJS_CPP): %.o: $(SRC_DIR)/%.cpp $(DEP_MASK) $(FILE_DEP)
|
$(OBJS_CPP): %.o: $(SRC_DIR)/%.cpp $(DEP_MASK) $(FILE_DEP)
|
||||||
$(E) '$(STAGE) Compiling $(<:$(SRC_DIR)/%.cpp=%.cpp)'
|
$(E) '$(STAGE) Compiling $(<:$(SRC_DIR)/%.cpp=%.cpp)'
|
||||||
ifeq ($(GCC295), 1)
|
|
||||||
$(Q)$(CXX_HOST) -E $(CFLAGS) $< | $(GCC295_FIX) | $(GCC295_FIX_2) | $(CXX_HOST) $(CFLAGS) -c -o $@ -x c++ -
|
|
||||||
else
|
|
||||||
$(Q)$(CXX_HOST) $(CFLAGS) -c -o $@ $<
|
$(Q)$(CXX_HOST) $(CFLAGS) -c -o $@ $<
|
||||||
endif
|
|
||||||
|
|
||||||
$(OBJS_MM): %.o: $(SRC_DIR)/%.mm $(DEP_MASK) $(FILE_DEP)
|
$(OBJS_MM): %.o: $(SRC_DIR)/%.mm $(DEP_MASK) $(FILE_DEP)
|
||||||
$(E) '$(STAGE) Compiling $(<:$(SRC_DIR)/%.mm=%.mm)'
|
$(E) '$(STAGE) Compiling $(<:$(SRC_DIR)/%.mm=%.mm)'
|
||||||
@@ -280,10 +256,10 @@ $(ENDIAN_CHECK): $(SRC_DIR)/endian_check.cpp
|
|||||||
# Revision files
|
# Revision files
|
||||||
|
|
||||||
$(SRC_DIR)/rev.cpp: $(CONFIG_CACHE_VERSION) $(SRC_DIR)/rev.cpp.in
|
$(SRC_DIR)/rev.cpp: $(CONFIG_CACHE_VERSION) $(SRC_DIR)/rev.cpp.in
|
||||||
$(Q)cat $(SRC_DIR)/rev.cpp.in | sed "s~@@REVISION@@~$(REV_NR)~g;s~@@VERSION@@~$(REV)~g;s~@@MODIFIED@@~$(MODIFIED)~g;s~@@DATE@@~`date +%d.%m.%y`~g" > $(SRC_DIR)/rev.cpp
|
$(Q)cat $(SRC_DIR)/rev.cpp.in | sed "s@\!\!REVISION\!\!@$(REV_NR)@g;s@!!VERSION!!@$(REV)@g;s@!!MODIFIED!!@$(MODIFIED)@g;s@!!DATE!!@`date +%d.%m.%y`@g" > $(SRC_DIR)/rev.cpp
|
||||||
|
|
||||||
$(SRC_DIR)/ottdres.rc: $(CONFIG_CACHE_VERSION) $(SRC_DIR)/ottdres.rc.in
|
$(SRC_DIR)/ottdres.rc: $(CONFIG_CACHE_VERSION) $(SRC_DIR)/ottdres.rc.in
|
||||||
$(Q)cat $(SRC_DIR)/ottdres.rc.in | sed "s~@@REVISION@@~$(REV_NR)~g;s~@@VERSION@@~$(REV)~g;s~@@DATE@@~`date +%d.%m.%y`~g" > $(SRC_DIR)/ottdres.rc
|
$(Q)cat $(SRC_DIR)/ottdres.rc.in | sed "s@\!\!REVISION\!\!@$(REV_NR)@g;s@!!VERSION!!@$(REV)@g;s@!!DATE!!@`date +%d.%m.%y`@g" > $(SRC_DIR)/ottdres.rc
|
||||||
|
|
||||||
FORCE:
|
FORCE:
|
||||||
|
|
||||||
|
@@ -220,6 +220,7 @@ function Regression::Airport()
|
|||||||
}
|
}
|
||||||
|
|
||||||
print(" GetBankBalance(): " + AICompany.GetBankBalance(AICompany.COMPANY_SELF));
|
print(" GetBankBalance(): " + AICompany.GetBankBalance(AICompany.COMPANY_SELF));
|
||||||
|
print(" GetPrice(): " + AIAirport.GetPrice(0));
|
||||||
print(" BuildAirport(): " + AIAirport.BuildAirport(32116, 0, AIStation.STATION_JOIN_ADJACENT));
|
print(" BuildAirport(): " + AIAirport.BuildAirport(32116, 0, AIStation.STATION_JOIN_ADJACENT));
|
||||||
print(" IsHangarTile(): " + AIAirport.IsHangarTile(32116));
|
print(" IsHangarTile(): " + AIAirport.IsHangarTile(32116));
|
||||||
print(" IsAirportTile(): " + AIAirport.IsAirportTile(32116));
|
print(" IsAirportTile(): " + AIAirport.IsAirportTile(32116));
|
||||||
@@ -256,12 +257,15 @@ function Regression::Bridge()
|
|||||||
print(" Valid Bridges: " + j);
|
print(" Valid Bridges: " + j);
|
||||||
|
|
||||||
print(" IsBridgeTile(): " + AIBridge.IsBridgeTile(33160));
|
print(" IsBridgeTile(): " + AIBridge.IsBridgeTile(33160));
|
||||||
|
print(" GetBridgeID(): " + AIBridge.GetBridgeID(33160));
|
||||||
print(" RemoveBridge(): " + AIBridge.RemoveBridge(33155));
|
print(" RemoveBridge(): " + AIBridge.RemoveBridge(33155));
|
||||||
print(" GetLastErrorString(): " + AIError.GetLastErrorString());
|
print(" GetLastErrorString(): " + AIError.GetLastErrorString());
|
||||||
print(" GetOtherBridgeEnd(): " + AIBridge.GetOtherBridgeEnd(33160));
|
print(" GetOtherBridgeEnd(): " + AIBridge.GetOtherBridgeEnd(33160));
|
||||||
print(" BuildBridge(): " + AIBridge.BuildBridge(AIVehicle.VT_ROAD, 5, 33160, 33155));
|
print(" BuildBridge(): " + AIBridge.BuildBridge(AIVehicle.VT_ROAD, 5, 33160, 33155));
|
||||||
print(" IsBridgeTile(): " + AIBridge.IsBridgeTile(33160));
|
print(" IsBridgeTile(): " + AIBridge.IsBridgeTile(33160));
|
||||||
|
print(" GetBridgeID(): " + AIBridge.GetBridgeID(33160));
|
||||||
print(" IsBridgeTile(): " + AIBridge.IsBridgeTile(33155));
|
print(" IsBridgeTile(): " + AIBridge.IsBridgeTile(33155));
|
||||||
|
print(" GetBridgeID(): " + AIBridge.GetBridgeID(33155));
|
||||||
print(" GetOtherBridgeEnd(): " + AIBridge.GetOtherBridgeEnd(33160));
|
print(" GetOtherBridgeEnd(): " + AIBridge.GetOtherBridgeEnd(33160));
|
||||||
print(" BuildBridge(): " + AIBridge.BuildBridge(AIVehicle.VT_ROAD, 5, 33160, 33155));
|
print(" BuildBridge(): " + AIBridge.BuildBridge(AIVehicle.VT_ROAD, 5, 33160, 33155));
|
||||||
print(" GetLastErrorString(): " + AIError.GetLastErrorString());
|
print(" GetLastErrorString(): " + AIError.GetLastErrorString());
|
||||||
@@ -329,6 +333,7 @@ function Regression::Cargo()
|
|||||||
print(" GetCargoIncome(10, 10): " + AICargo.GetCargoIncome(i, 10, 10));
|
print(" GetCargoIncome(10, 10): " + AICargo.GetCargoIncome(i, 10, 10));
|
||||||
print(" GetCargoIncome(100, 10): " + AICargo.GetCargoIncome(i, 100, 10));
|
print(" GetCargoIncome(100, 10): " + AICargo.GetCargoIncome(i, 100, 10));
|
||||||
print(" GetCargoIncome(10, 100): " + AICargo.GetCargoIncome(i, 10, 100));
|
print(" GetCargoIncome(10, 100): " + AICargo.GetCargoIncome(i, 10, 100));
|
||||||
|
print(" GetRoadVehicleTypeForCargo(): " + AIRoad.GetRoadVehicleTypeForCargo(i));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -631,6 +636,9 @@ function Regression::IndustryTypeList()
|
|||||||
print(" GetName(): " + AIIndustryType.GetName(i));
|
print(" GetName(): " + AIIndustryType.GetName(i));
|
||||||
print(" CanBuildIndustry(): " + AIIndustryType.CanBuildIndustry(i));
|
print(" CanBuildIndustry(): " + AIIndustryType.CanBuildIndustry(i));
|
||||||
print(" CanProspectIndustry(): " + AIIndustryType.CanProspectIndustry(i));
|
print(" CanProspectIndustry(): " + AIIndustryType.CanProspectIndustry(i));
|
||||||
|
print(" IsBuiltOnWater(): " + AIIndustryType.IsBuiltOnWater(i));
|
||||||
|
print(" HasHeliport(): " + AIIndustryType.HasHeliport(i));
|
||||||
|
print(" HasDock(): " + AIIndustryType.HasDock(i));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1069,9 +1077,10 @@ function Regression::Sign()
|
|||||||
print(" BuildSign(33409, 'Some other Sign'): " + sign_id);
|
print(" BuildSign(33409, 'Some other Sign'): " + sign_id);
|
||||||
print(" RemoveSign(" + sign_id + "): " + AISign.RemoveSign(sign_id));
|
print(" RemoveSign(" + sign_id + "): " + AISign.RemoveSign(sign_id));
|
||||||
print("");
|
print("");
|
||||||
print(" GetMaxSignID(): " + AISign.GetMaxSignID());
|
local list = AISignList();
|
||||||
for (local i = -1; i < AISign.GetMaxSignID() + 1; i++) {
|
list.Sort(AIAbstractList.SORT_BY_ITEM, true);
|
||||||
if (AISign.IsValidSign(i)) j++;
|
for (local i = list.Begin(); list.HasNext(); i = list.Next()) {
|
||||||
|
j++;
|
||||||
print(" Sign " + i);
|
print(" Sign " + i);
|
||||||
print(" IsValidSign(): " + AISign.IsValidSign(i));
|
print(" IsValidSign(): " + AISign.IsValidSign(i));
|
||||||
print(" GetName(): " + AISign.GetName(i));
|
print(" GetName(): " + AISign.GetName(i));
|
||||||
@@ -1182,7 +1191,7 @@ function Regression::TileList()
|
|||||||
print("");
|
print("");
|
||||||
print("--TileList--");
|
print("--TileList--");
|
||||||
print(" Count(): " + list.Count());
|
print(" Count(): " + list.Count());
|
||||||
list.AddRectangle(41895 - 256 * 2, 256 * 2 + 41895 + 8);
|
list.AddRectangle(34436, 256 * 2 + 34436 + 8);
|
||||||
print(" Count(): " + list.Count());
|
print(" Count(): " + list.Count());
|
||||||
|
|
||||||
list.Valuate(AITile.GetHeight);
|
list.Valuate(AITile.GetHeight);
|
||||||
@@ -1193,6 +1202,30 @@ function Regression::TileList()
|
|||||||
print(" " + i + " => " + list.GetValue(i));
|
print(" " + i + " => " + list.GetValue(i));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
list.Valuate(AITile.GetCornerHeight, AITile.CORNER_N);
|
||||||
|
print(" CornerHeight(North): done");
|
||||||
|
print(" Count(): " + list.Count());
|
||||||
|
print(" ListDump:");
|
||||||
|
for (local i = list.Begin(); list.HasNext(); i = list.Next()) {
|
||||||
|
print(" " + i + " => " + list.GetValue(i));
|
||||||
|
}
|
||||||
|
|
||||||
|
list.Valuate(AITile.GetMinHeight);
|
||||||
|
print(" MinHeight(): done");
|
||||||
|
print(" Count(): " + list.Count());
|
||||||
|
print(" ListDump:");
|
||||||
|
for (local i = list.Begin(); list.HasNext(); i = list.Next()) {
|
||||||
|
print(" " + i + " => " + list.GetValue(i));
|
||||||
|
}
|
||||||
|
|
||||||
|
list.Valuate(AITile.GetMaxHeight);
|
||||||
|
print(" MaxHeight(): done");
|
||||||
|
print(" Count(): " + list.Count());
|
||||||
|
print(" ListDump:");
|
||||||
|
for (local i = list.Begin(); list.HasNext(); i = list.Next()) {
|
||||||
|
print(" " + i + " => " + list.GetValue(i));
|
||||||
|
}
|
||||||
|
|
||||||
list.Valuate(AITile.GetSlope);
|
list.Valuate(AITile.GetSlope);
|
||||||
list.KeepValue(0);
|
list.KeepValue(0);
|
||||||
print(" Slope(): done");
|
print(" Slope(): done");
|
||||||
@@ -1203,6 +1236,8 @@ function Regression::TileList()
|
|||||||
print(" " + i + " => " + list.GetValue(i));
|
print(" " + i + " => " + list.GetValue(i));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
list.Clear();
|
||||||
|
list.AddRectangle(41895 - 256 * 2, 256 * 2 + 41895 + 8);
|
||||||
list.Valuate(AITile.IsBuildable);
|
list.Valuate(AITile.IsBuildable);
|
||||||
list.KeepValue(1);
|
list.KeepValue(1);
|
||||||
print(" Buildable(): done");
|
print(" Buildable(): done");
|
||||||
|
@@ -620,6 +620,7 @@
|
|||||||
GetAirportHeight(9): -1
|
GetAirportHeight(9): -1
|
||||||
GetAirportCoverageRadius(9): -1
|
GetAirportCoverageRadius(9): -1
|
||||||
GetBankBalance(): 100000
|
GetBankBalance(): 100000
|
||||||
|
GetPrice(): 84
|
||||||
BuildAirport(): true
|
BuildAirport(): true
|
||||||
IsHangarTile(): false
|
IsHangarTile(): false
|
||||||
IsAirportTile(): true
|
IsAirportTile(): true
|
||||||
@@ -743,12 +744,15 @@
|
|||||||
GetMinLength(): -1
|
GetMinLength(): -1
|
||||||
Valid Bridges: 10
|
Valid Bridges: 10
|
||||||
IsBridgeTile(): false
|
IsBridgeTile(): false
|
||||||
|
GetBridgeID(): -1
|
||||||
RemoveBridge(): false
|
RemoveBridge(): false
|
||||||
GetLastErrorString(): ERR_PRECONDITION_FAILED
|
GetLastErrorString(): ERR_PRECONDITION_FAILED
|
||||||
GetOtherBridgeEnd(): -1
|
GetOtherBridgeEnd(): -1
|
||||||
BuildBridge(): true
|
BuildBridge(): true
|
||||||
IsBridgeTile(): true
|
IsBridgeTile(): true
|
||||||
|
GetBridgeID(): 5
|
||||||
IsBridgeTile(): true
|
IsBridgeTile(): true
|
||||||
|
GetBridgeID(): 5
|
||||||
GetOtherBridgeEnd(): 33155
|
GetOtherBridgeEnd(): 33155
|
||||||
BuildBridge(): false
|
BuildBridge(): false
|
||||||
GetLastErrorString(): ERR_ALREADY_BUILT
|
GetLastErrorString(): ERR_ALREADY_BUILT
|
||||||
@@ -824,6 +828,7 @@
|
|||||||
GetCargoIncome(10, 10): -1
|
GetCargoIncome(10, 10): -1
|
||||||
GetCargoIncome(100, 10): -1
|
GetCargoIncome(100, 10): -1
|
||||||
GetCargoIncome(10, 100): -1
|
GetCargoIncome(10, 100): -1
|
||||||
|
GetRoadVehicleTypeForCargo(): 1
|
||||||
Cargo 0
|
Cargo 0
|
||||||
IsValidCargo(): true
|
IsValidCargo(): true
|
||||||
GetCargoLabel(): 'PASS'
|
GetCargoLabel(): 'PASS'
|
||||||
@@ -834,6 +839,7 @@
|
|||||||
GetCargoIncome(10, 10): 3
|
GetCargoIncome(10, 10): 3
|
||||||
GetCargoIncome(100, 10): 39
|
GetCargoIncome(100, 10): 39
|
||||||
GetCargoIncome(10, 100): 3
|
GetCargoIncome(10, 100): 3
|
||||||
|
GetRoadVehicleTypeForCargo(): 0
|
||||||
Cargo 1
|
Cargo 1
|
||||||
IsValidCargo(): true
|
IsValidCargo(): true
|
||||||
GetCargoLabel(): 'COAL'
|
GetCargoLabel(): 'COAL'
|
||||||
@@ -844,6 +850,7 @@
|
|||||||
GetCargoIncome(10, 10): 7
|
GetCargoIncome(10, 10): 7
|
||||||
GetCargoIncome(100, 10): 75
|
GetCargoIncome(100, 10): 75
|
||||||
GetCargoIncome(10, 100): 6
|
GetCargoIncome(10, 100): 6
|
||||||
|
GetRoadVehicleTypeForCargo(): 1
|
||||||
Cargo 2
|
Cargo 2
|
||||||
IsValidCargo(): true
|
IsValidCargo(): true
|
||||||
GetCargoLabel(): 'MAIL'
|
GetCargoLabel(): 'MAIL'
|
||||||
@@ -854,6 +861,7 @@
|
|||||||
GetCargoIncome(10, 10): 5
|
GetCargoIncome(10, 10): 5
|
||||||
GetCargoIncome(100, 10): 58
|
GetCargoIncome(100, 10): 58
|
||||||
GetCargoIncome(10, 100): 5
|
GetCargoIncome(10, 100): 5
|
||||||
|
GetRoadVehicleTypeForCargo(): 1
|
||||||
Cargo 3
|
Cargo 3
|
||||||
IsValidCargo(): true
|
IsValidCargo(): true
|
||||||
GetCargoLabel(): 'OIL_'
|
GetCargoLabel(): 'OIL_'
|
||||||
@@ -864,6 +872,7 @@
|
|||||||
GetCargoIncome(10, 10): 5
|
GetCargoIncome(10, 10): 5
|
||||||
GetCargoIncome(100, 10): 56
|
GetCargoIncome(100, 10): 56
|
||||||
GetCargoIncome(10, 100): 5
|
GetCargoIncome(10, 100): 5
|
||||||
|
GetRoadVehicleTypeForCargo(): 1
|
||||||
Cargo 4
|
Cargo 4
|
||||||
IsValidCargo(): true
|
IsValidCargo(): true
|
||||||
GetCargoLabel(): 'LVST'
|
GetCargoLabel(): 'LVST'
|
||||||
@@ -874,6 +883,7 @@
|
|||||||
GetCargoIncome(10, 10): 5
|
GetCargoIncome(10, 10): 5
|
||||||
GetCargoIncome(100, 10): 55
|
GetCargoIncome(100, 10): 55
|
||||||
GetCargoIncome(10, 100): 4
|
GetCargoIncome(10, 100): 4
|
||||||
|
GetRoadVehicleTypeForCargo(): 1
|
||||||
Cargo 5
|
Cargo 5
|
||||||
IsValidCargo(): true
|
IsValidCargo(): true
|
||||||
GetCargoLabel(): 'GOOD'
|
GetCargoLabel(): 'GOOD'
|
||||||
@@ -884,6 +894,7 @@
|
|||||||
GetCargoIncome(10, 10): 7
|
GetCargoIncome(10, 10): 7
|
||||||
GetCargoIncome(100, 10): 78
|
GetCargoIncome(100, 10): 78
|
||||||
GetCargoIncome(10, 100): 6
|
GetCargoIncome(10, 100): 6
|
||||||
|
GetRoadVehicleTypeForCargo(): 1
|
||||||
Cargo 6
|
Cargo 6
|
||||||
IsValidCargo(): true
|
IsValidCargo(): true
|
||||||
GetCargoLabel(): 'GRAI'
|
GetCargoLabel(): 'GRAI'
|
||||||
@@ -894,6 +905,7 @@
|
|||||||
GetCargoIncome(10, 10): 6
|
GetCargoIncome(10, 10): 6
|
||||||
GetCargoIncome(100, 10): 60
|
GetCargoIncome(100, 10): 60
|
||||||
GetCargoIncome(10, 100): 5
|
GetCargoIncome(10, 100): 5
|
||||||
|
GetRoadVehicleTypeForCargo(): 1
|
||||||
Cargo 7
|
Cargo 7
|
||||||
IsValidCargo(): true
|
IsValidCargo(): true
|
||||||
GetCargoLabel(): 'WOOD'
|
GetCargoLabel(): 'WOOD'
|
||||||
@@ -904,6 +916,7 @@
|
|||||||
GetCargoIncome(10, 10): 6
|
GetCargoIncome(10, 10): 6
|
||||||
GetCargoIncome(100, 10): 63
|
GetCargoIncome(100, 10): 63
|
||||||
GetCargoIncome(10, 100): 5
|
GetCargoIncome(10, 100): 5
|
||||||
|
GetRoadVehicleTypeForCargo(): 1
|
||||||
Cargo 8
|
Cargo 8
|
||||||
IsValidCargo(): true
|
IsValidCargo(): true
|
||||||
GetCargoLabel(): 'IORE'
|
GetCargoLabel(): 'IORE'
|
||||||
@@ -914,6 +927,7 @@
|
|||||||
GetCargoIncome(10, 10): 6
|
GetCargoIncome(10, 10): 6
|
||||||
GetCargoIncome(100, 10): 65
|
GetCargoIncome(100, 10): 65
|
||||||
GetCargoIncome(10, 100): 5
|
GetCargoIncome(10, 100): 5
|
||||||
|
GetRoadVehicleTypeForCargo(): 1
|
||||||
Cargo 9
|
Cargo 9
|
||||||
IsValidCargo(): true
|
IsValidCargo(): true
|
||||||
GetCargoLabel(): 'STEL'
|
GetCargoLabel(): 'STEL'
|
||||||
@@ -924,6 +938,7 @@
|
|||||||
GetCargoIncome(10, 10): 7
|
GetCargoIncome(10, 10): 7
|
||||||
GetCargoIncome(100, 10): 72
|
GetCargoIncome(100, 10): 72
|
||||||
GetCargoIncome(10, 100): 6
|
GetCargoIncome(10, 100): 6
|
||||||
|
GetRoadVehicleTypeForCargo(): 1
|
||||||
Cargo 10
|
Cargo 10
|
||||||
IsValidCargo(): true
|
IsValidCargo(): true
|
||||||
GetCargoLabel(): 'VALU'
|
GetCargoLabel(): 'VALU'
|
||||||
@@ -934,6 +949,7 @@
|
|||||||
GetCargoIncome(10, 10): 9
|
GetCargoIncome(10, 10): 9
|
||||||
GetCargoIncome(100, 10): 94
|
GetCargoIncome(100, 10): 94
|
||||||
GetCargoIncome(10, 100): 7
|
GetCargoIncome(10, 100): 7
|
||||||
|
GetRoadVehicleTypeForCargo(): 1
|
||||||
Cargo 11
|
Cargo 11
|
||||||
IsValidCargo(): false
|
IsValidCargo(): false
|
||||||
GetCargoLabel(): '(null : 0x00000000)'
|
GetCargoLabel(): '(null : 0x00000000)'
|
||||||
@@ -944,6 +960,7 @@
|
|||||||
GetCargoIncome(10, 10): -1
|
GetCargoIncome(10, 10): -1
|
||||||
GetCargoIncome(100, 10): -1
|
GetCargoIncome(100, 10): -1
|
||||||
GetCargoIncome(10, 100): -1
|
GetCargoIncome(10, 100): -1
|
||||||
|
GetRoadVehicleTypeForCargo(): 1
|
||||||
Cargo 12
|
Cargo 12
|
||||||
IsValidCargo(): false
|
IsValidCargo(): false
|
||||||
GetCargoLabel(): '(null : 0x00000000)'
|
GetCargoLabel(): '(null : 0x00000000)'
|
||||||
@@ -954,6 +971,7 @@
|
|||||||
GetCargoIncome(10, 10): -1
|
GetCargoIncome(10, 10): -1
|
||||||
GetCargoIncome(100, 10): -1
|
GetCargoIncome(100, 10): -1
|
||||||
GetCargoIncome(10, 100): -1
|
GetCargoIncome(10, 100): -1
|
||||||
|
GetRoadVehicleTypeForCargo(): 1
|
||||||
Cargo 13
|
Cargo 13
|
||||||
IsValidCargo(): false
|
IsValidCargo(): false
|
||||||
GetCargoLabel(): '(null : 0x00000000)'
|
GetCargoLabel(): '(null : 0x00000000)'
|
||||||
@@ -964,6 +982,7 @@
|
|||||||
GetCargoIncome(10, 10): -1
|
GetCargoIncome(10, 10): -1
|
||||||
GetCargoIncome(100, 10): -1
|
GetCargoIncome(100, 10): -1
|
||||||
GetCargoIncome(10, 100): -1
|
GetCargoIncome(10, 100): -1
|
||||||
|
GetRoadVehicleTypeForCargo(): 1
|
||||||
Cargo 14
|
Cargo 14
|
||||||
IsValidCargo(): false
|
IsValidCargo(): false
|
||||||
GetCargoLabel(): '(null : 0x00000000)'
|
GetCargoLabel(): '(null : 0x00000000)'
|
||||||
@@ -974,6 +993,7 @@
|
|||||||
GetCargoIncome(10, 10): -1
|
GetCargoIncome(10, 10): -1
|
||||||
GetCargoIncome(100, 10): -1
|
GetCargoIncome(100, 10): -1
|
||||||
GetCargoIncome(10, 100): -1
|
GetCargoIncome(10, 100): -1
|
||||||
|
GetRoadVehicleTypeForCargo(): 1
|
||||||
|
|
||||||
--CargoList--
|
--CargoList--
|
||||||
Count(): 11
|
Count(): 11
|
||||||
@@ -1052,7 +1072,7 @@
|
|||||||
GetAutoRenewStatus(); true
|
GetAutoRenewStatus(); true
|
||||||
SetAutoRenewStatus(true); false
|
SetAutoRenewStatus(true); false
|
||||||
SetAutoRenewStatus(false); true
|
SetAutoRenewStatus(false); true
|
||||||
GetAutoRenewMonths(); -6
|
GetAutoRenewMonths(); 6
|
||||||
SetAutoRenewMonths(-12); true
|
SetAutoRenewMonths(-12); true
|
||||||
GetAutoRenewMonths(); -12
|
GetAutoRenewMonths(); -12
|
||||||
SetAutoRenewMonths(-12); false
|
SetAutoRenewMonths(-12); false
|
||||||
@@ -6907,6 +6927,9 @@
|
|||||||
GetName(): Farm
|
GetName(): Farm
|
||||||
CanBuildIndustry(): false
|
CanBuildIndustry(): false
|
||||||
CanProspectIndustry(): false
|
CanProspectIndustry(): false
|
||||||
|
IsBuiltOnWater(): false
|
||||||
|
HasHeliport(): false
|
||||||
|
HasDock(): false
|
||||||
Id: 5
|
Id: 5
|
||||||
IsRawIndustry(): true
|
IsRawIndustry(): true
|
||||||
ProductionCanIncrease(): true
|
ProductionCanIncrease(): true
|
||||||
@@ -6914,6 +6937,9 @@
|
|||||||
GetName(): Oil Rig
|
GetName(): Oil Rig
|
||||||
CanBuildIndustry(): false
|
CanBuildIndustry(): false
|
||||||
CanProspectIndustry(): false
|
CanProspectIndustry(): false
|
||||||
|
IsBuiltOnWater(): true
|
||||||
|
HasHeliport(): true
|
||||||
|
HasDock(): true
|
||||||
Id: 12
|
Id: 12
|
||||||
IsRawIndustry(): false
|
IsRawIndustry(): false
|
||||||
ProductionCanIncrease(): true
|
ProductionCanIncrease(): true
|
||||||
@@ -6921,6 +6947,9 @@
|
|||||||
GetName(): Bank
|
GetName(): Bank
|
||||||
CanBuildIndustry(): true
|
CanBuildIndustry(): true
|
||||||
CanProspectIndustry(): false
|
CanProspectIndustry(): false
|
||||||
|
IsBuiltOnWater(): false
|
||||||
|
HasHeliport(): false
|
||||||
|
HasDock(): false
|
||||||
Id: 11
|
Id: 11
|
||||||
IsRawIndustry(): true
|
IsRawIndustry(): true
|
||||||
ProductionCanIncrease(): false
|
ProductionCanIncrease(): false
|
||||||
@@ -6928,6 +6957,9 @@
|
|||||||
GetName(): Oil Wells
|
GetName(): Oil Wells
|
||||||
CanBuildIndustry(): false
|
CanBuildIndustry(): false
|
||||||
CanProspectIndustry(): false
|
CanProspectIndustry(): false
|
||||||
|
IsBuiltOnWater(): false
|
||||||
|
HasHeliport(): false
|
||||||
|
HasDock(): false
|
||||||
Id: 1
|
Id: 1
|
||||||
IsRawIndustry(): false
|
IsRawIndustry(): false
|
||||||
ProductionCanIncrease(): true
|
ProductionCanIncrease(): true
|
||||||
@@ -6935,6 +6967,9 @@
|
|||||||
GetName(): Power Station
|
GetName(): Power Station
|
||||||
CanBuildIndustry(): true
|
CanBuildIndustry(): true
|
||||||
CanProspectIndustry(): false
|
CanProspectIndustry(): false
|
||||||
|
IsBuiltOnWater(): false
|
||||||
|
HasHeliport(): false
|
||||||
|
HasDock(): false
|
||||||
Id: 3
|
Id: 3
|
||||||
IsRawIndustry(): true
|
IsRawIndustry(): true
|
||||||
ProductionCanIncrease(): true
|
ProductionCanIncrease(): true
|
||||||
@@ -6942,6 +6977,9 @@
|
|||||||
GetName(): Forest
|
GetName(): Forest
|
||||||
CanBuildIndustry(): false
|
CanBuildIndustry(): false
|
||||||
CanProspectIndustry(): false
|
CanProspectIndustry(): false
|
||||||
|
IsBuiltOnWater(): false
|
||||||
|
HasHeliport(): false
|
||||||
|
HasDock(): false
|
||||||
Id: 2
|
Id: 2
|
||||||
IsRawIndustry(): false
|
IsRawIndustry(): false
|
||||||
ProductionCanIncrease(): true
|
ProductionCanIncrease(): true
|
||||||
@@ -6949,6 +6987,9 @@
|
|||||||
GetName(): Sawmill
|
GetName(): Sawmill
|
||||||
CanBuildIndustry(): true
|
CanBuildIndustry(): true
|
||||||
CanProspectIndustry(): false
|
CanProspectIndustry(): false
|
||||||
|
IsBuiltOnWater(): false
|
||||||
|
HasHeliport(): false
|
||||||
|
HasDock(): false
|
||||||
Id: 18
|
Id: 18
|
||||||
IsRawIndustry(): true
|
IsRawIndustry(): true
|
||||||
ProductionCanIncrease(): true
|
ProductionCanIncrease(): true
|
||||||
@@ -6956,6 +6997,9 @@
|
|||||||
GetName(): Iron Ore Mine
|
GetName(): Iron Ore Mine
|
||||||
CanBuildIndustry(): false
|
CanBuildIndustry(): false
|
||||||
CanProspectIndustry(): false
|
CanProspectIndustry(): false
|
||||||
|
IsBuiltOnWater(): false
|
||||||
|
HasHeliport(): false
|
||||||
|
HasDock(): false
|
||||||
Id: 0
|
Id: 0
|
||||||
IsRawIndustry(): true
|
IsRawIndustry(): true
|
||||||
ProductionCanIncrease(): true
|
ProductionCanIncrease(): true
|
||||||
@@ -6963,6 +7007,9 @@
|
|||||||
GetName(): Coal Mine
|
GetName(): Coal Mine
|
||||||
CanBuildIndustry(): false
|
CanBuildIndustry(): false
|
||||||
CanProspectIndustry(): false
|
CanProspectIndustry(): false
|
||||||
|
IsBuiltOnWater(): false
|
||||||
|
HasHeliport(): false
|
||||||
|
HasDock(): false
|
||||||
Id: 8
|
Id: 8
|
||||||
IsRawIndustry(): false
|
IsRawIndustry(): false
|
||||||
ProductionCanIncrease(): true
|
ProductionCanIncrease(): true
|
||||||
@@ -6970,6 +7017,9 @@
|
|||||||
GetName(): Steel Mill
|
GetName(): Steel Mill
|
||||||
CanBuildIndustry(): true
|
CanBuildIndustry(): true
|
||||||
CanProspectIndustry(): false
|
CanProspectIndustry(): false
|
||||||
|
IsBuiltOnWater(): false
|
||||||
|
HasHeliport(): false
|
||||||
|
HasDock(): false
|
||||||
Id: 4
|
Id: 4
|
||||||
IsRawIndustry(): false
|
IsRawIndustry(): false
|
||||||
ProductionCanIncrease(): true
|
ProductionCanIncrease(): true
|
||||||
@@ -6977,6 +7027,9 @@
|
|||||||
GetName(): Oil Refinery
|
GetName(): Oil Refinery
|
||||||
CanBuildIndustry(): true
|
CanBuildIndustry(): true
|
||||||
CanProspectIndustry(): false
|
CanProspectIndustry(): false
|
||||||
|
IsBuiltOnWater(): false
|
||||||
|
HasHeliport(): false
|
||||||
|
HasDock(): false
|
||||||
Id: 6
|
Id: 6
|
||||||
IsRawIndustry(): false
|
IsRawIndustry(): false
|
||||||
ProductionCanIncrease(): true
|
ProductionCanIncrease(): true
|
||||||
@@ -6984,6 +7037,9 @@
|
|||||||
GetName(): Factory
|
GetName(): Factory
|
||||||
CanBuildIndustry(): true
|
CanBuildIndustry(): true
|
||||||
CanProspectIndustry(): false
|
CanProspectIndustry(): false
|
||||||
|
IsBuiltOnWater(): false
|
||||||
|
HasHeliport(): false
|
||||||
|
HasDock(): false
|
||||||
|
|
||||||
--Map--
|
--Map--
|
||||||
GetMapSize(): 65536
|
GetMapSize(): 65536
|
||||||
@@ -7186,11 +7242,6 @@
|
|||||||
BuildSign(33409, 'Some other Sign'): 2
|
BuildSign(33409, 'Some other Sign'): 2
|
||||||
RemoveSign(2): true
|
RemoveSign(2): true
|
||||||
|
|
||||||
GetMaxSignID(): 3
|
|
||||||
Sign -1
|
|
||||||
IsValidSign(): false
|
|
||||||
GetName(): (null : 0x00000000)
|
|
||||||
GetLocation(): -1
|
|
||||||
Sign 0
|
Sign 0
|
||||||
IsValidSign(): true
|
IsValidSign(): true
|
||||||
GetName(): Some Sign
|
GetName(): Some Sign
|
||||||
@@ -7199,14 +7250,6 @@
|
|||||||
IsValidSign(): true
|
IsValidSign(): true
|
||||||
GetName(): Test2
|
GetName(): Test2
|
||||||
GetLocation(): 33411
|
GetLocation(): 33411
|
||||||
Sign 2
|
|
||||||
IsValidSign(): false
|
|
||||||
GetName(): (null : 0x00000000)
|
|
||||||
GetLocation(): -1
|
|
||||||
Sign 3
|
|
||||||
IsValidSign(): false
|
|
||||||
GetName(): (null : 0x00000000)
|
|
||||||
GetLocation(): -1
|
|
||||||
Valid Signs: 2
|
Valid Signs: 2
|
||||||
|
|
||||||
--Station--
|
--Station--
|
||||||
@@ -7273,7 +7316,7 @@
|
|||||||
Count(): 9
|
Count(): 9
|
||||||
ListDump:
|
ListDump:
|
||||||
27631 => 29
|
27631 => 29
|
||||||
27631 => 255
|
27631 => 65535
|
||||||
27631 => true
|
27631 => true
|
||||||
27631 => false
|
27631 => false
|
||||||
27888 => 13
|
27888 => 13
|
||||||
@@ -7311,125 +7354,178 @@
|
|||||||
|
|
||||||
--TileList--
|
--TileList--
|
||||||
Count(): 0
|
Count(): 0
|
||||||
Count(): 45
|
Count(): 27
|
||||||
Height(): done
|
Height(): done
|
||||||
Count(): 45
|
Count(): 27
|
||||||
ListDump:
|
ListDump:
|
||||||
42411 => 2
|
34956 => 4
|
||||||
42410 => 2
|
34700 => 4
|
||||||
42409 => 2
|
34444 => 4
|
||||||
42408 => 2
|
34955 => 3
|
||||||
42407 => 2
|
34954 => 3
|
||||||
42154 => 2
|
34953 => 3
|
||||||
42153 => 2
|
34699 => 3
|
||||||
42152 => 2
|
34698 => 3
|
||||||
42151 => 2
|
34697 => 3
|
||||||
41898 => 2
|
34693 => 3
|
||||||
41897 => 2
|
34692 => 3
|
||||||
41896 => 2
|
34443 => 3
|
||||||
41895 => 2
|
34442 => 3
|
||||||
41642 => 2
|
34441 => 3
|
||||||
41641 => 2
|
34439 => 3
|
||||||
41640 => 2
|
34438 => 3
|
||||||
41639 => 2
|
34437 => 3
|
||||||
41386 => 2
|
34436 => 3
|
||||||
41385 => 2
|
34952 => 2
|
||||||
41384 => 2
|
34951 => 2
|
||||||
41383 => 2
|
34950 => 2
|
||||||
42415 => 1
|
34949 => 2
|
||||||
42414 => 1
|
34948 => 2
|
||||||
42413 => 1
|
34696 => 2
|
||||||
42412 => 1
|
34695 => 2
|
||||||
42159 => 1
|
34694 => 2
|
||||||
42158 => 1
|
34440 => 2
|
||||||
42157 => 1
|
CornerHeight(North): done
|
||||||
42156 => 1
|
Count(): 27
|
||||||
42155 => 1
|
ListDump:
|
||||||
41903 => 1
|
34956 => 4
|
||||||
41902 => 1
|
34700 => 4
|
||||||
41901 => 1
|
34444 => 4
|
||||||
41900 => 1
|
34955 => 3
|
||||||
41899 => 1
|
34954 => 3
|
||||||
41647 => 1
|
34953 => 3
|
||||||
41646 => 1
|
34699 => 3
|
||||||
41645 => 1
|
34698 => 3
|
||||||
41644 => 1
|
34697 => 3
|
||||||
41643 => 1
|
34693 => 3
|
||||||
41391 => 1
|
34692 => 3
|
||||||
41390 => 1
|
34443 => 3
|
||||||
41389 => 1
|
34442 => 3
|
||||||
41388 => 1
|
34441 => 3
|
||||||
41387 => 1
|
34439 => 3
|
||||||
|
34438 => 3
|
||||||
|
34437 => 3
|
||||||
|
34436 => 3
|
||||||
|
34952 => 2
|
||||||
|
34951 => 2
|
||||||
|
34950 => 2
|
||||||
|
34949 => 2
|
||||||
|
34948 => 2
|
||||||
|
34696 => 2
|
||||||
|
34695 => 2
|
||||||
|
34694 => 2
|
||||||
|
34440 => 2
|
||||||
|
MinHeight(): done
|
||||||
|
Count(): 27
|
||||||
|
ListDump:
|
||||||
|
34956 => 4
|
||||||
|
34700 => 4
|
||||||
|
34444 => 4
|
||||||
|
34955 => 3
|
||||||
|
34954 => 3
|
||||||
|
34953 => 3
|
||||||
|
34699 => 3
|
||||||
|
34698 => 3
|
||||||
|
34697 => 3
|
||||||
|
34443 => 3
|
||||||
|
34442 => 3
|
||||||
|
34441 => 3
|
||||||
|
34436 => 3
|
||||||
|
34952 => 2
|
||||||
|
34951 => 2
|
||||||
|
34950 => 2
|
||||||
|
34949 => 2
|
||||||
|
34948 => 2
|
||||||
|
34696 => 2
|
||||||
|
34695 => 2
|
||||||
|
34694 => 2
|
||||||
|
34693 => 2
|
||||||
|
34692 => 2
|
||||||
|
34440 => 2
|
||||||
|
34439 => 2
|
||||||
|
34438 => 2
|
||||||
|
34437 => 2
|
||||||
|
MaxHeight(): done
|
||||||
|
Count(): 27
|
||||||
|
ListDump:
|
||||||
|
34956 => 4
|
||||||
|
34955 => 4
|
||||||
|
34700 => 4
|
||||||
|
34699 => 4
|
||||||
|
34444 => 4
|
||||||
|
34443 => 4
|
||||||
|
34954 => 3
|
||||||
|
34953 => 3
|
||||||
|
34952 => 3
|
||||||
|
34951 => 3
|
||||||
|
34950 => 3
|
||||||
|
34949 => 3
|
||||||
|
34948 => 3
|
||||||
|
34698 => 3
|
||||||
|
34697 => 3
|
||||||
|
34696 => 3
|
||||||
|
34693 => 3
|
||||||
|
34692 => 3
|
||||||
|
34442 => 3
|
||||||
|
34441 => 3
|
||||||
|
34440 => 3
|
||||||
|
34439 => 3
|
||||||
|
34438 => 3
|
||||||
|
34437 => 3
|
||||||
|
34436 => 3
|
||||||
|
34695 => 2
|
||||||
|
34694 => 2
|
||||||
Slope(): done
|
Slope(): done
|
||||||
KeepValue(0): done
|
KeepValue(0): done
|
||||||
Count(): 38
|
Count(): 12
|
||||||
ListDump:
|
ListDump:
|
||||||
42415 => 0
|
34956 => 0
|
||||||
42414 => 0
|
34954 => 0
|
||||||
42413 => 0
|
34953 => 0
|
||||||
42410 => 0
|
34700 => 0
|
||||||
42409 => 0
|
34698 => 0
|
||||||
42408 => 0
|
34697 => 0
|
||||||
42407 => 0
|
34695 => 0
|
||||||
42159 => 0
|
34694 => 0
|
||||||
42158 => 0
|
34444 => 0
|
||||||
42157 => 0
|
34442 => 0
|
||||||
42156 => 0
|
34441 => 0
|
||||||
42153 => 0
|
34436 => 0
|
||||||
42152 => 0
|
|
||||||
42151 => 0
|
|
||||||
41903 => 0
|
|
||||||
41902 => 0
|
|
||||||
41901 => 0
|
|
||||||
41900 => 0
|
|
||||||
41899 => 0
|
|
||||||
41897 => 0
|
|
||||||
41896 => 0
|
|
||||||
41895 => 0
|
|
||||||
41647 => 0
|
|
||||||
41646 => 0
|
|
||||||
41645 => 0
|
|
||||||
41644 => 0
|
|
||||||
41643 => 0
|
|
||||||
41641 => 0
|
|
||||||
41640 => 0
|
|
||||||
41639 => 0
|
|
||||||
41391 => 0
|
|
||||||
41390 => 0
|
|
||||||
41389 => 0
|
|
||||||
41388 => 0
|
|
||||||
41387 => 0
|
|
||||||
41385 => 0
|
|
||||||
41384 => 0
|
|
||||||
41383 => 0
|
|
||||||
Buildable(): done
|
Buildable(): done
|
||||||
KeepValue(1): done
|
KeepValue(1): done
|
||||||
Count(): 28
|
Count(): 35
|
||||||
BuildableRectangle(3, 3) ListDump:
|
BuildableRectangle(3, 3) ListDump:
|
||||||
42415 => 1
|
42415 => 1
|
||||||
42414 => 1
|
42414 => 1
|
||||||
42413 => 1
|
42413 => 1
|
||||||
|
42412 => 1
|
||||||
|
42411 => 1
|
||||||
42410 => 1
|
42410 => 1
|
||||||
42159 => 1
|
42159 => 1
|
||||||
42158 => 1
|
42158 => 1
|
||||||
42157 => 1
|
42157 => 1
|
||||||
42156 => 1
|
42156 => 1
|
||||||
|
42155 => 1
|
||||||
|
42154 => 1
|
||||||
41903 => 1
|
41903 => 1
|
||||||
41902 => 1
|
41902 => 1
|
||||||
41901 => 1
|
41901 => 1
|
||||||
41900 => 1
|
41900 => 1
|
||||||
41899 => 1
|
41899 => 1
|
||||||
|
41898 => 1
|
||||||
41647 => 1
|
41647 => 1
|
||||||
41646 => 1
|
41646 => 1
|
||||||
41645 => 1
|
41645 => 1
|
||||||
41644 => 1
|
41644 => 1
|
||||||
41643 => 1
|
41643 => 1
|
||||||
|
41642 => 1
|
||||||
41641 => 1
|
41641 => 1
|
||||||
41391 => 1
|
41391 => 1
|
||||||
41390 => 1
|
41390 => 1
|
||||||
41389 => 1
|
41389 => 1
|
||||||
41388 => 1
|
41388 => 1
|
||||||
41387 => 1
|
41387 => 1
|
||||||
|
41386 => 1
|
||||||
41385 => 1
|
41385 => 1
|
||||||
42153 => 0
|
42153 => 0
|
||||||
41897 => 0
|
41897 => 0
|
||||||
@@ -7441,26 +7537,33 @@
|
|||||||
42413 => 173
|
42413 => 173
|
||||||
42158 => 173
|
42158 => 173
|
||||||
41903 => 173
|
41903 => 173
|
||||||
|
42412 => 172
|
||||||
42157 => 172
|
42157 => 172
|
||||||
41902 => 172
|
41902 => 172
|
||||||
41647 => 172
|
41647 => 172
|
||||||
|
42411 => 171
|
||||||
42156 => 171
|
42156 => 171
|
||||||
41901 => 171
|
41901 => 171
|
||||||
41646 => 171
|
41646 => 171
|
||||||
41391 => 171
|
41391 => 171
|
||||||
42410 => 170
|
42410 => 170
|
||||||
|
42155 => 170
|
||||||
41900 => 170
|
41900 => 170
|
||||||
41645 => 170
|
41645 => 170
|
||||||
41390 => 170
|
41390 => 170
|
||||||
|
42154 => 169
|
||||||
41899 => 169
|
41899 => 169
|
||||||
41644 => 169
|
41644 => 169
|
||||||
41389 => 169
|
41389 => 169
|
||||||
42153 => 168
|
42153 => 168
|
||||||
|
41898 => 168
|
||||||
41643 => 168
|
41643 => 168
|
||||||
41388 => 168
|
41388 => 168
|
||||||
41897 => 167
|
41897 => 167
|
||||||
|
41642 => 167
|
||||||
41387 => 167
|
41387 => 167
|
||||||
41641 => 166
|
41641 => 166
|
||||||
|
41386 => 166
|
||||||
41385 => 165
|
41385 => 165
|
||||||
41384 => 164
|
41384 => 164
|
||||||
DistanceSquareToTile(30000) ListDump:
|
DistanceSquareToTile(30000) ListDump:
|
||||||
@@ -7477,17 +7580,24 @@
|
|||||||
42157 => 17834
|
42157 => 17834
|
||||||
41390 => 17812
|
41390 => 17812
|
||||||
41901 => 17741
|
41901 => 17741
|
||||||
|
42412 => 17680
|
||||||
41645 => 17650
|
41645 => 17650
|
||||||
42156 => 17585
|
42156 => 17585
|
||||||
41389 => 17561
|
41389 => 17561
|
||||||
41900 => 17492
|
41900 => 17492
|
||||||
|
42411 => 17433
|
||||||
41644 => 17401
|
41644 => 17401
|
||||||
|
42155 => 17338
|
||||||
41388 => 17312
|
41388 => 17312
|
||||||
41899 => 17245
|
41899 => 17245
|
||||||
42410 => 17188
|
42410 => 17188
|
||||||
41643 => 17154
|
41643 => 17154
|
||||||
|
42154 => 17093
|
||||||
41387 => 17065
|
41387 => 17065
|
||||||
|
41898 => 17000
|
||||||
|
41642 => 16909
|
||||||
42153 => 16850
|
42153 => 16850
|
||||||
|
41386 => 16820
|
||||||
41897 => 16757
|
41897 => 16757
|
||||||
41641 => 16666
|
41641 => 16666
|
||||||
41385 => 16577
|
41385 => 16577
|
||||||
@@ -7496,63 +7606,77 @@
|
|||||||
42415 => -1
|
42415 => -1
|
||||||
42414 => -1
|
42414 => -1
|
||||||
42413 => -1
|
42413 => -1
|
||||||
|
42412 => -1
|
||||||
|
42411 => -1
|
||||||
42410 => -1
|
42410 => -1
|
||||||
42159 => -1
|
42159 => -1
|
||||||
42158 => -1
|
42158 => -1
|
||||||
42157 => -1
|
42157 => -1
|
||||||
42156 => -1
|
42156 => -1
|
||||||
|
42155 => -1
|
||||||
|
42154 => -1
|
||||||
42153 => -1
|
42153 => -1
|
||||||
41903 => -1
|
41903 => -1
|
||||||
41902 => -1
|
41902 => -1
|
||||||
41901 => -1
|
41901 => -1
|
||||||
41900 => -1
|
41900 => -1
|
||||||
41899 => -1
|
41899 => -1
|
||||||
|
41898 => -1
|
||||||
41897 => -1
|
41897 => -1
|
||||||
41647 => -1
|
41647 => -1
|
||||||
41646 => -1
|
41646 => -1
|
||||||
41645 => -1
|
41645 => -1
|
||||||
41644 => -1
|
41644 => -1
|
||||||
41643 => -1
|
41643 => -1
|
||||||
|
41642 => -1
|
||||||
41641 => -1
|
41641 => -1
|
||||||
41391 => -1
|
41391 => -1
|
||||||
41390 => -1
|
41390 => -1
|
||||||
41389 => -1
|
41389 => -1
|
||||||
41388 => -1
|
41388 => -1
|
||||||
41387 => -1
|
41387 => -1
|
||||||
|
41386 => -1
|
||||||
41385 => -1
|
41385 => -1
|
||||||
41384 => -1
|
41384 => -1
|
||||||
GetClosestTown() ListDump:
|
GetClosestTown() ListDump:
|
||||||
42415 => 3
|
42415 => 3
|
||||||
42414 => 3
|
42414 => 3
|
||||||
42413 => 3
|
42413 => 3
|
||||||
|
42412 => 3
|
||||||
|
42411 => 3
|
||||||
42410 => 3
|
42410 => 3
|
||||||
42159 => 3
|
42159 => 3
|
||||||
42158 => 3
|
42158 => 3
|
||||||
42157 => 3
|
42157 => 3
|
||||||
42156 => 3
|
42156 => 3
|
||||||
|
42155 => 3
|
||||||
|
42154 => 3
|
||||||
42153 => 3
|
42153 => 3
|
||||||
41903 => 3
|
41903 => 3
|
||||||
41902 => 3
|
41902 => 3
|
||||||
41901 => 3
|
41901 => 3
|
||||||
41900 => 3
|
41900 => 3
|
||||||
41899 => 3
|
41899 => 3
|
||||||
|
41898 => 3
|
||||||
41897 => 3
|
41897 => 3
|
||||||
41647 => 3
|
41647 => 3
|
||||||
41646 => 3
|
41646 => 3
|
||||||
41645 => 3
|
41645 => 3
|
||||||
41644 => 3
|
41644 => 3
|
||||||
41643 => 3
|
41643 => 3
|
||||||
|
41642 => 3
|
||||||
41641 => 3
|
41641 => 3
|
||||||
41391 => 3
|
41391 => 3
|
||||||
41390 => 3
|
41390 => 3
|
||||||
41389 => 3
|
41389 => 3
|
||||||
41388 => 3
|
41388 => 3
|
||||||
41387 => 3
|
41387 => 3
|
||||||
|
41386 => 3
|
||||||
41385 => 3
|
41385 => 3
|
||||||
41384 => 3
|
41384 => 3
|
||||||
CargoAcceptance(): done
|
CargoAcceptance(): done
|
||||||
KeepAboveValue(10): done
|
KeepAboveValue(10): done
|
||||||
Count(): 9
|
Count(): 15
|
||||||
ListDump:
|
ListDump:
|
||||||
41897 => 29
|
41897 => 29
|
||||||
41385 => 26
|
41385 => 26
|
||||||
@@ -7560,9 +7684,15 @@
|
|||||||
42153 => 25
|
42153 => 25
|
||||||
41641 => 23
|
41641 => 23
|
||||||
41899 => 17
|
41899 => 17
|
||||||
|
41898 => 17
|
||||||
41387 => 17
|
41387 => 17
|
||||||
|
41386 => 17
|
||||||
41643 => 14
|
41643 => 14
|
||||||
|
41642 => 14
|
||||||
|
42411 => 13
|
||||||
42410 => 13
|
42410 => 13
|
||||||
|
42155 => 13
|
||||||
|
42154 => 13
|
||||||
RoadTile(): done
|
RoadTile(): done
|
||||||
KeepValue(1): done
|
KeepValue(1): done
|
||||||
Count(): 0
|
Count(): 0
|
||||||
|
Binary file not shown.
2088
changelog.txt
2088
changelog.txt
File diff suppressed because it is too large
Load Diff
346
config.lib
346
config.lib
@@ -5,7 +5,7 @@ log() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
set_default() {
|
set_default() {
|
||||||
released_version=""
|
released_version="0.7.2"
|
||||||
|
|
||||||
ignore_extra_parameters="0"
|
ignore_extra_parameters="0"
|
||||||
# We set all kinds of defaults for params. Later on the user can override
|
# We set all kinds of defaults for params. Later on the user can override
|
||||||
@@ -47,8 +47,8 @@ set_default() {
|
|||||||
enable_static="1"
|
enable_static="1"
|
||||||
enable_translator="0"
|
enable_translator="0"
|
||||||
enable_unicode="1"
|
enable_unicode="1"
|
||||||
enable_assert="1"
|
enable_assert="0"
|
||||||
enable_strip="0"
|
enable_strip="1"
|
||||||
enable_universal="1"
|
enable_universal="1"
|
||||||
enable_osx_g5="0"
|
enable_osx_g5="0"
|
||||||
enable_cocoa_quartz="1"
|
enable_cocoa_quartz="1"
|
||||||
@@ -415,7 +415,7 @@ save_params() {
|
|||||||
configure="$CONFIGURE_EXECUTABLE --ignore-extra-parameters"
|
configure="$CONFIGURE_EXECUTABLE --ignore-extra-parameters"
|
||||||
for p in $save_params_array; do
|
for p in $save_params_array; do
|
||||||
eval "v=\"\$$p\""
|
eval "v=\"\$$p\""
|
||||||
p=`echo "$p" | sed 's~_~-~g;s~\n~~g;s~ ~\\ ~g'`
|
p=`echo "$p" | sed 's@_@-@g;s@\n@@g;s@ @\\ @g'`
|
||||||
# Only save those params that aren't empty
|
# Only save those params that aren't empty
|
||||||
configure="$configure --$p=\"$v\""
|
configure="$configure --$p=\"$v\""
|
||||||
done
|
done
|
||||||
@@ -815,6 +815,7 @@ check_params() {
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
if [ "$os" = "OSX" ]; then
|
if [ "$os" = "OSX" ]; then
|
||||||
|
check_osx_sdk
|
||||||
# Test on G5
|
# Test on G5
|
||||||
|
|
||||||
if [ "$enable_osx_g5" != "0" ]; then
|
if [ "$enable_osx_g5" != "0" ]; then
|
||||||
@@ -903,7 +904,7 @@ check_params() {
|
|||||||
doc_dir="$data_dir/docs"
|
doc_dir="$data_dir/docs"
|
||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
doc_dir="`echo $doc_dir | sed 's~\([^\]\)\\\\ ~\1\\\\\\\\ ~g;s~\([^\]\) ~\1\\\\\\\\ ~g'`"
|
doc_dir="`echo $doc_dir | sed 's@\([^\]\)\\\\ @\1\\\\\\\\ @g;s@\([^\]\) @\1\\\\\\\\ @g'`"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ "$icon_theme_dir" = "1" ]; then
|
if [ "$icon_theme_dir" = "1" ]; then
|
||||||
@@ -913,7 +914,7 @@ check_params() {
|
|||||||
icon_theme_dir=""
|
icon_theme_dir=""
|
||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
icon_theme_dir="`echo $icon_theme_dir | sed 's~\([^\]\)\\\\ ~\1\\\\\\\\ ~g;s~\([^\]\) ~\1\\\\\\\\ ~g'`"
|
icon_theme_dir="`echo $icon_theme_dir | sed 's@\([^\]\)\\\\ @\1\\\\\\\\ @g;s@\([^\]\) @\1\\\\\\\\ @g'`"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ "$personal_dir" = "1" ]; then
|
if [ "$personal_dir" = "1" ]; then
|
||||||
@@ -925,7 +926,7 @@ check_params() {
|
|||||||
personal_dir=".openttd"
|
personal_dir=".openttd"
|
||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
personal_dir="`echo $personal_dir | sed 's~\([^\]\)\\\\ ~\1\\\\\\\\ ~g;s~\([^\]\) ~\1\\\\\\\\ ~g'`"
|
personal_dir="`echo $personal_dir | sed 's@\([^\]\)\\\\ @\1\\\\\\\\ @g;s@\([^\]\) @\1\\\\\\\\ @g'`"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ "$shared_dir" = "1" ]; then
|
if [ "$shared_dir" = "1" ]; then
|
||||||
@@ -936,7 +937,7 @@ check_params() {
|
|||||||
shared_dir=""
|
shared_dir=""
|
||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
shared_dir="`echo $shared_dir | sed 's~\([^\]\)\\\\ ~\1\\\\\\\\ ~g;s~\([^\]\) ~\1\\\\\\\\ ~g'`"
|
shared_dir="`echo $shared_dir | sed 's@\([^\]\)\\\\ @\1\\\\\\\\ @g;s@\([^\]\) @\1\\\\\\\\ @g'`"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ "$man_dir" = "1" ]; then
|
if [ "$man_dir" = "1" ]; then
|
||||||
@@ -947,7 +948,7 @@ check_params() {
|
|||||||
man_dir=""
|
man_dir=""
|
||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
man_dir="`echo $man_dir | sed 's~\([^\]\)\\\\ ~\1\\\\\\\\ ~g;s~\([^\]\) ~\1\\\\\\\\ ~g'`"
|
man_dir="`echo $man_dir | sed 's@\([^\]\)\\\\ @\1\\\\\\\\ @g;s@\([^\]\) @\1\\\\\\\\ @g'`"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ "$menu_dir" = "1" ]; then
|
if [ "$menu_dir" = "1" ]; then
|
||||||
@@ -958,7 +959,7 @@ check_params() {
|
|||||||
menu_dir=""
|
menu_dir=""
|
||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
menu_dir="`echo $menu_dir | sed 's~\([^\]\)\\\\ ~\1\\\\\\\\ ~g;s~\([^\]\) ~\1\\\\\\\\ ~g'`"
|
menu_dir="`echo $menu_dir | sed 's@\([^\]\)\\\\ @\1\\\\\\\\ @g;s@\([^\]\) @\1\\\\\\\\ @g'`"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# "set_universal_binary_flags" needs to be before "detect_iconv"
|
# "set_universal_binary_flags" needs to be before "detect_iconv"
|
||||||
@@ -1008,13 +1009,74 @@ check_params() {
|
|||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
make_compiler_cflags() {
|
||||||
|
# Params:
|
||||||
|
# $1 - compiler
|
||||||
|
# $2 - the current cflags
|
||||||
|
# $3 - variable to finally write to
|
||||||
|
|
||||||
|
flags="$2"
|
||||||
|
|
||||||
|
if [ `echo $1 | cut -c 1-3` = "icc" ]; then
|
||||||
|
# Enable some things only for certain ICC versions
|
||||||
|
cc_version=`$1 -dumpversion | cut -c 1-4`
|
||||||
|
|
||||||
|
|
||||||
|
if [ "$cc_version" = "10.1" ]; then
|
||||||
|
flags="$flags -Wno-multichar"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$cc_version" = "11.0" ]; then
|
||||||
|
# warning 1899: multicharacter character literal (potential portability problem) (e.g. 'FOOD')
|
||||||
|
# vec report defaults to telling where it did loop vectorisation, which is not very important
|
||||||
|
flags="$flags -vec-report=0 -wd1899"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
# Enable some things only for certain GCC versions
|
||||||
|
cc_version=`$1 -dumpversion | cut -c 1,3`
|
||||||
|
|
||||||
|
if [ $cc_version -lt 30 ]; then
|
||||||
|
log 1 "configure: error: gcc older than 3.0 can't compile OpenTTD because of its poor template support"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
flags="$flags -Wall -Wno-multichar -Wsign-compare -Wundef"
|
||||||
|
flags="$flags -Wwrite-strings -Wpointer-arith"
|
||||||
|
flags="$flags -Wno-uninitialized"
|
||||||
|
|
||||||
|
flags="$flags -W -Wno-unused-parameter -Wformat=2"
|
||||||
|
flags="$flags -Wredundant-decls"
|
||||||
|
|
||||||
|
if [ $enable_assert -eq 0 ]; then
|
||||||
|
# Do not warn about unused variables when building without asserts
|
||||||
|
flags="$flags -Wno-unused-variable"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ $cc_version -ge 40 ]; then
|
||||||
|
# GCC 4.0+ complains about that we break strict-aliasing.
|
||||||
|
# On most places we don't see how to fix it, and it doesn't
|
||||||
|
# break anything. So disable strict-aliasing to make the
|
||||||
|
# compiler all happy.
|
||||||
|
flags="$flags -fno-strict-aliasing"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ $cc_version -ge 42 ]; then
|
||||||
|
# GCC 4.2+ automatically assumes that signed overflows do
|
||||||
|
# not occur in signed arithmetics, whereas we are not
|
||||||
|
# sure that they will not happen. It furthermore complains
|
||||||
|
# about it's own optimized code in some places.
|
||||||
|
flags="$flags -fno-strict-overflow"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
eval "$3=\"$flags\""
|
||||||
|
}
|
||||||
|
|
||||||
make_cflags_and_ldflags() {
|
make_cflags_and_ldflags() {
|
||||||
# General CFlags for BUILD
|
# General CFlags for BUILD
|
||||||
CFLAGS_BUILD=""
|
CFLAGS_BUILD=""
|
||||||
# General CFlags for HOST
|
# General CFlags for HOST
|
||||||
CFLAGS="$CFLAGS -D$os"
|
CFLAGS="$CFLAGS -D$os"
|
||||||
# CFlags for HOST and C-Compiler
|
|
||||||
CC_FLAGS=""
|
|
||||||
# Libs to compile. In fact this is just LDFLAGS
|
# Libs to compile. In fact this is just LDFLAGS
|
||||||
LIBS="-lstdc++"
|
LIBS="-lstdc++"
|
||||||
# LDFLAGS used for HOST
|
# LDFLAGS used for HOST
|
||||||
@@ -1063,58 +1125,16 @@ make_cflags_and_ldflags() {
|
|||||||
CFLAGS="$CFLAGS -DNO_THREADS"
|
CFLAGS="$CFLAGS -DNO_THREADS"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ `echo $cc_host | cut -c 1-3` = "icc" ]; then
|
make_compiler_cflags "$cc_build" "$CFLAGS_BUILD" "CFLAGS_BUILD"
|
||||||
# Enable some things only for certain ICC versions
|
make_compiler_cflags "$cc_host" "$CFLAGS" "CFLAGS"
|
||||||
cc_version=`$cc_host -dumpversion | cut -c 1-4`
|
|
||||||
|
|
||||||
|
|
||||||
if [ "$cc_version" = "10.1" ]; then
|
|
||||||
CFLAGS="$CFLAGS -Wno-multichar"
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
# Enable some things only for certain GCC versions
|
|
||||||
cc_version=`$cc_host -dumpversion | cut -c 1,3`
|
|
||||||
|
|
||||||
if [ $cc_version -ge 29 ]; then
|
|
||||||
CFLAGS="$CFLAGS -Wall -Wno-multichar -Wsign-compare -Wundef"
|
|
||||||
CFLAGS="$CFLAGS -Wwrite-strings -Wpointer-arith"
|
|
||||||
CFLAGS="$CFLAGS -Wno-uninitialized"
|
|
||||||
|
|
||||||
CC_CFLAGS="$CC_CFLAGS -Wstrict-prototypes"
|
|
||||||
fi
|
|
||||||
|
|
||||||
gcc295=""
|
|
||||||
if [ "$cc_version" = 29 ]; then
|
|
||||||
# Make sure we mark GCC 2.95 flag for Makefile.src.in, as we
|
|
||||||
# need a lovely hack there to make it compile correctly.
|
|
||||||
gcc295="1"
|
|
||||||
|
|
||||||
# Disable warnings about unused variables when
|
|
||||||
# compiling with asserts disabled
|
|
||||||
if [ $enable_assert -eq 0 ]; then
|
|
||||||
CFLAGS="$CFLAGS -Wno-unused"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ $cc_version -ge 30 ]; then
|
|
||||||
CFLAGS="$CFLAGS -W -Wno-unused-parameter -Wformat=2"
|
|
||||||
CFLAGS="$CFLAGS -Wredundant-decls"
|
|
||||||
# Do not warn about unused variables when building without asserts
|
|
||||||
if [ $enable_assert -eq 0 ]; then
|
|
||||||
CFLAGS="$CFLAGS -Wno-unused-variable"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ $cc_version -ge 34 ]; then
|
|
||||||
CC_CFLAGS="$CC_CFLAGS -Wdeclaration-after-statement -Wold-style-definition"
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
if [ "`echo $1 | cut -c 1-3`" != "icc" ]; then
|
||||||
if [ "$os" = "CYGWIN" ]; then
|
if [ "$os" = "CYGWIN" ]; then
|
||||||
CFLAGS="$CFLAGS -mwin32"
|
flags="$flags -mwin32"
|
||||||
LDFLAGS="$LDFLAGS -mwin32"
|
LDFLAGS="$LDFLAGS -mwin32"
|
||||||
fi
|
fi
|
||||||
if [ "$os" = "MINGW" ] || [ "$os" = "CYGWIN" ]; then
|
if [ "$os" = "MINGW" ] || [ "$os" = "CYGWIN" ]; then
|
||||||
CFLAGS="$CFLAGS -mno-cygwin"
|
flags="$flags -mno-cygwin"
|
||||||
LDFLAGS="$LDFLAGS -mno-cygwin"
|
LDFLAGS="$LDFLAGS -mno-cygwin"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@@ -1122,22 +1142,6 @@ make_cflags_and_ldflags() {
|
|||||||
LDFLAGS="$LDFLAGS -Wl,--subsystem,windows"
|
LDFLAGS="$LDFLAGS -Wl,--subsystem,windows"
|
||||||
LIBS="$LIBS -lws2_32 -lwinmm -lgdi32 -ldxguid -lole32"
|
LIBS="$LIBS -lws2_32 -lwinmm -lgdi32 -ldxguid -lole32"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# GCC 4.0+ complains about that we break strict-aliasing.
|
|
||||||
# On most places we don't see how to fix it, and it doesn't
|
|
||||||
# break anything. So disable strict-aliasing to make the
|
|
||||||
# compiler all happy.
|
|
||||||
if [ $cc_version -ge 40 ]; then
|
|
||||||
CFLAGS="$CFLAGS -fno-strict-aliasing"
|
|
||||||
fi
|
|
||||||
|
|
||||||
# GCC 4.2+ automatically assumes that signed overflows do
|
|
||||||
# not occur in signed arithmetics, whereas we are not
|
|
||||||
# sure that they will not happen. It furthermore complains
|
|
||||||
# about it's own optimized code in some places.
|
|
||||||
if [ $cc_version -ge 42 ]; then
|
|
||||||
CFLAGS="$CFLAGS -fno-strict-overflow"
|
|
||||||
fi
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ "$os" != "CYGWIN" ] && [ "$os" != "FREEBSD" ] && [ "$os" != "OPENBSD" ] && [ "$os" != "MINGW" ] && [ "$os" != "MORPHOS" ] && [ "$os" != "OSX" ] && [ "$os" != "DOS" ] && [ "$os" != "WINCE" ] && [ "$os" != "PSP" ] && [ "$os" != "OS2" ]; then
|
if [ "$os" != "CYGWIN" ] && [ "$os" != "FREEBSD" ] && [ "$os" != "OPENBSD" ] && [ "$os" != "MINGW" ] && [ "$os" != "MORPHOS" ] && [ "$os" != "OSX" ] && [ "$os" != "DOS" ] && [ "$os" != "WINCE" ] && [ "$os" != "PSP" ] && [ "$os" != "OS2" ]; then
|
||||||
@@ -1206,7 +1210,7 @@ make_cflags_and_ldflags() {
|
|||||||
if [ -n "$sdl_config" ]; then
|
if [ -n "$sdl_config" ]; then
|
||||||
CFLAGS="$CFLAGS -DWITH_SDL"
|
CFLAGS="$CFLAGS -DWITH_SDL"
|
||||||
# SDL must not add _GNU_SOURCE as it breaks many platforms
|
# SDL must not add _GNU_SOURCE as it breaks many platforms
|
||||||
CFLAGS="$CFLAGS `$sdl_config --cflags | sed 's~-D_GNU_SOURCE[^ ]*~~'`"
|
CFLAGS="$CFLAGS `$sdl_config --cflags | sed 's@-D_GNU_SOURCE[^ ]*@@'`"
|
||||||
if [ "$os" != "MINGW" ] && [ "$os" != "CYGWIN" ] && [ "$os" != "WINCE" ]; then
|
if [ "$os" != "MINGW" ] && [ "$os" != "CYGWIN" ] && [ "$os" != "WINCE" ]; then
|
||||||
if [ "$enable_static" != "0" ]; then
|
if [ "$enable_static" != "0" ]; then
|
||||||
LIBS="$LIBS `$sdl_config --static-libs`"
|
LIBS="$LIBS `$sdl_config --static-libs`"
|
||||||
@@ -1268,7 +1272,7 @@ make_cflags_and_ldflags() {
|
|||||||
if [ "$os" = "OSX" ]; then
|
if [ "$os" = "OSX" ]; then
|
||||||
# fontconfig_config goes via pkg-config on all systems, which doesn't know --prefix
|
# fontconfig_config goes via pkg-config on all systems, which doesn't know --prefix
|
||||||
# Also, despite the reason we link to the .a file ourself (because we can't use -static), we do need to ask pkg-config about possible other deps
|
# Also, despite the reason we link to the .a file ourself (because we can't use -static), we do need to ask pkg-config about possible other deps
|
||||||
LIBS="$LIBS `$fontconfig_config --variable=prefix`/lib/libfontconfig.a `$fontconfig_config --libs --static | sed s~-lfontconfig~~`"
|
LIBS="$LIBS `$fontconfig_config --variable=prefix`/lib/libfontconfig.a `$fontconfig_config --libs --static | sed s@-lfontconfig@@`"
|
||||||
else
|
else
|
||||||
LIBS="$LIBS `$fontconfig_config --libs --static | tr '\n\r' ' '`"
|
LIBS="$LIBS `$fontconfig_config --libs --static | tr '\n\r' ' '`"
|
||||||
fi
|
fi
|
||||||
@@ -1378,7 +1382,7 @@ make_cflags_and_ldflags() {
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
if [ "$enable_osx_g5" != "0" ]; then
|
if [ "$enable_osx_g5" != "0" ]; then
|
||||||
CFLAGS="$CFLAGS -mtune=970 -mcpu=970 -mpowerpc-gpopt"
|
CFLAGS="$CFLAGS -mcpu=G5 -mpowerpc64 -mtune=970 -mcpu=970 -mpowerpc-gpopt"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ -n "$personal_dir" ]; then
|
if [ -n "$personal_dir" ]; then
|
||||||
@@ -1391,7 +1395,7 @@ make_cflags_and_ldflags() {
|
|||||||
|
|
||||||
CFLAGS="$CFLAGS -DGLOBAL_DATA_DIR=\\\\\"$prefix_dir/$data_dir\\\\\""
|
CFLAGS="$CFLAGS -DGLOBAL_DATA_DIR=\\\\\"$prefix_dir/$data_dir\\\\\""
|
||||||
|
|
||||||
log 1 "using CFLAGS... $CFLAGS $CC_CFLAGS"
|
log 1 "using CFLAGS... $CFLAGS"
|
||||||
log 1 "using LDFLAGS... $LIBS $LDFLAGS"
|
log 1 "using LDFLAGS... $LIBS $LDFLAGS"
|
||||||
|
|
||||||
# Makedepend doesn't like something like: -isysroot /OSX/blabla
|
# Makedepend doesn't like something like: -isysroot /OSX/blabla
|
||||||
@@ -1400,8 +1404,10 @@ make_cflags_and_ldflags() {
|
|||||||
# Lovely hackish, not?
|
# Lovely hackish, not?
|
||||||
# Btw, this almost always comes from outside the configure, so it is
|
# Btw, this almost always comes from outside the configure, so it is
|
||||||
# not something we can control.
|
# not something we can control.
|
||||||
|
# Also make makedepend aware of compiler's built-in defines.
|
||||||
if [ "$with_makedepend" != "0" ]; then
|
if [ "$with_makedepend" != "0" ]; then
|
||||||
cflags_makedep="` echo "$CFLAGS" | sed 's~ /~ -~g;s~-I[ ]*[^ ]*~~g'`"
|
cflags_makedep="`echo | $cxx_host -E -x c++ -dM - | sed 's@.define @-D@g;s@ .*@ @g;s@(.*)@@g' | tr -d '\r\n'`"
|
||||||
|
cflags_makedep="$cflags_makedep `echo "$CFLAGS" | sed 's@ /@ -@g;s@-I[ ]*[^ ]*@@g'`"
|
||||||
else
|
else
|
||||||
makedepend=""
|
makedepend=""
|
||||||
fi
|
fi
|
||||||
@@ -1580,7 +1586,7 @@ check_strip() {
|
|||||||
elif [ "$os" = "OSX" ]; then
|
elif [ "$os" = "OSX" ]; then
|
||||||
# Most targets have -V in strip, to see if they exists... OSX doesn't.. so execute something
|
# Most targets have -V in strip, to see if they exists... OSX doesn't.. so execute something
|
||||||
echo "int main(int argc, char *argv[]) { }" > strip.test.c
|
echo "int main(int argc, char *argv[]) { }" > strip.test.c
|
||||||
$cc_host strip.test.c -o strip.test
|
$cxx_host strip.test.c -o strip.test
|
||||||
check_compiler "host strip" "strip" "$host" "$strip" "$STRIP" "strip" "strip" "3" "strip.test"
|
check_compiler "host strip" "strip" "$host" "$strip" "$STRIP" "strip" "strip" "3" "strip.test"
|
||||||
rm -f strip.test.c strip.test
|
rm -f strip.test.c strip.test
|
||||||
else
|
else
|
||||||
@@ -1591,7 +1597,7 @@ check_strip() {
|
|||||||
check_lipo() {
|
check_lipo() {
|
||||||
if [ "$os" = "OSX" ] && [ "$enable_universal" != "0" ]; then
|
if [ "$os" = "OSX" ] && [ "$enable_universal" != "0" ]; then
|
||||||
echo "int main(int argc, char *argv[]) { }" > lipo.test.c
|
echo "int main(int argc, char *argv[]) { }" > lipo.test.c
|
||||||
$cc_host lipo.test.c -o lipo.test
|
$cxx_host lipo.test.c -o lipo.test
|
||||||
check_compiler "host lipo" "lipo" "$host" "$lipo" "$LIPO" "lipo" "lipo" "4" "-info lipo.test"
|
check_compiler "host lipo" "lipo" "$host" "$lipo" "$LIPO" "lipo" "lipo" "4" "-info lipo.test"
|
||||||
rm -f lipo.test.c lipo.test
|
rm -f lipo.test.c lipo.test
|
||||||
fi
|
fi
|
||||||
@@ -1617,6 +1623,28 @@ set_universal_binary_flags() {
|
|||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
check_osx_sdk() {
|
||||||
|
cat > tmp.osx.mm << EOF
|
||||||
|
#include <Cocoa/Cocoa.h>
|
||||||
|
int main() {
|
||||||
|
kCGBitmapByteOrder32Host;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
EOF
|
||||||
|
execute="$cxx_host $CFLAGS tmp.osx.mm -framework Cocoa -o tmp.osx 2>&1"
|
||||||
|
eval $execute > /dev/null
|
||||||
|
ret=$?
|
||||||
|
log 2 "executing $execute"
|
||||||
|
log 2 " exit code $ret"
|
||||||
|
rm -f tmp.osx.mm tmp.osx
|
||||||
|
if [ "$ret" != "0" ]; then
|
||||||
|
log 1 "Your system SDK is probably too old"
|
||||||
|
log 1 "Please install/upgrade your Xcode to >= 2.5"
|
||||||
|
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
check_direct_music() {
|
check_direct_music() {
|
||||||
echo "
|
echo "
|
||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
@@ -2405,7 +2433,7 @@ int main() {
|
|||||||
}
|
}
|
||||||
EOF
|
EOF
|
||||||
execute="$cxx_host $CFLAGS -c tmp.iconv.cpp -o tmp.iconv -DTESTING 2>&1"
|
execute="$cxx_host $CFLAGS -c tmp.iconv.cpp -o tmp.iconv -DTESTING 2>&1"
|
||||||
eval $execute >&/dev/null
|
eval $execute > /dev/null
|
||||||
ret=$?
|
ret=$?
|
||||||
log 2 "executing $execute"
|
log 2 "executing $execute"
|
||||||
log 2 " exit code $ret"
|
log 2 " exit code $ret"
|
||||||
@@ -2426,7 +2454,7 @@ int main() {
|
|||||||
}
|
}
|
||||||
EOF
|
EOF
|
||||||
execute="$cxx_host $CFLAGS tmp.iconv.cpp -o tmp.iconv -DTESTING 2>&1"
|
execute="$cxx_host $CFLAGS tmp.iconv.cpp -o tmp.iconv -DTESTING 2>&1"
|
||||||
eval $execute >&/dev/null
|
eval $execute > /dev/null
|
||||||
ret=$?
|
ret=$?
|
||||||
log 2 "executing $execute"
|
log 2 "executing $execute"
|
||||||
log 2 " exit code $ret"
|
log 2 " exit code $ret"
|
||||||
@@ -2501,7 +2529,8 @@ detect_cputype() {
|
|||||||
log 1 "forcing cpu-type... $cpu_type bits"
|
log 1 "forcing cpu-type... $cpu_type bits"
|
||||||
return;
|
return;
|
||||||
fi
|
fi
|
||||||
echo "#include \"src/stdafx.h\"" > tmp.64bit.cpp
|
echo "#define _SQ64 1" > tmp.64bit.cpp
|
||||||
|
echo "#include \"src/stdafx.h\"" >> tmp.64bit.cpp
|
||||||
echo "assert_compile(sizeof(size_t) == 8);" >> tmp.64bit.cpp
|
echo "assert_compile(sizeof(size_t) == 8);" >> tmp.64bit.cpp
|
||||||
echo "int main() { return 0; }" >> tmp.64bit.cpp
|
echo "int main() { return 0; }" >> tmp.64bit.cpp
|
||||||
execute="$cxx_host $CFLAGS tmp.64bit.cpp -o tmp.64bit -DTESTING 2>&1"
|
execute="$cxx_host $CFLAGS tmp.64bit.cpp -o tmp.64bit -DTESTING 2>&1"
|
||||||
@@ -2519,17 +2548,6 @@ make_sed() {
|
|||||||
T_CFLAGS="$CFLAGS"
|
T_CFLAGS="$CFLAGS"
|
||||||
T_LDFLAGS="$LDFLAGS"
|
T_LDFLAGS="$LDFLAGS"
|
||||||
|
|
||||||
# We check here if we are PPC, because then we need to enable FOUR_BYTE_BOOL
|
|
||||||
# We do this here, and not sooner, so universal builds also have this
|
|
||||||
# automatically correct
|
|
||||||
# FOUR_BYTE_BOOL is needed, because C++ uses 4byte for a bool on PPC, where
|
|
||||||
# we use 1 byte per bool normally in C part. So convert that last one to 4
|
|
||||||
# bytes too, but only for PPC.
|
|
||||||
ppc=`$cc_host -dumpmachine | egrep "powerpc|ppc"`
|
|
||||||
if [ -n "$ppc" ]; then
|
|
||||||
T_CFLAGS="$T_CFLAGS -DFOUR_BYTE_BOOL"
|
|
||||||
fi
|
|
||||||
|
|
||||||
SRC_OBJS_DIR="$BASE_SRC_OBJS_DIR/$OBJS_SUBDIR"
|
SRC_OBJS_DIR="$BASE_SRC_OBJS_DIR/$OBJS_SUBDIR"
|
||||||
|
|
||||||
# All the data needed to compile a single target
|
# All the data needed to compile a single target
|
||||||
@@ -2537,104 +2555,102 @@ make_sed() {
|
|||||||
# use multiple OBJS_DIR, because all in-between
|
# use multiple OBJS_DIR, because all in-between
|
||||||
# binaries are stored in there, and nowhere else.
|
# binaries are stored in there, and nowhere else.
|
||||||
SRC_REPLACE="
|
SRC_REPLACE="
|
||||||
s~!!CC_HOST!!~$cc_host~g;
|
s@!!CC_HOST!!@$cc_host@g;
|
||||||
s~!!CXX_HOST!!~$cxx_host~g;
|
s@!!CXX_HOST!!@$cxx_host@g;
|
||||||
s~!!CC_BUILD!!~$cc_build~g;
|
s@!!CC_BUILD!!@$cc_build@g;
|
||||||
s~!!CXX_BUILD!!~$cxx_build~g;
|
s@!!CXX_BUILD!!@$cxx_build@g;
|
||||||
s~!!WINDRES!!~$windres~g;
|
s@!!WINDRES!!@$windres@g;
|
||||||
s~!!STRIP!!~$strip $strip_arg~g;
|
s@!!STRIP!!@$strip $strip_arg@g;
|
||||||
s~!!LIPO!!~$lipo~g;
|
s@!!LIPO!!@$lipo@g;
|
||||||
s~!!CC_CFLAGS!!~$CC_CFLAGS~g;
|
s@!!CFLAGS!!@$T_CFLAGS@g;
|
||||||
s~!!CFLAGS!!~$T_CFLAGS~g;
|
s@!!CFLAGS_BUILD!!@$CFLAGS_BUILD@g;
|
||||||
s~!!CFLAGS_BUILD!!~$CFLAGS_BUILD~g;
|
s@!!STRGEN_FLAGS!!@$strgen_flags@g;
|
||||||
s~!!STRGEN_FLAGS!!~$strgen_flags~g;
|
s@!!LIBS!!@$LIBS@g;
|
||||||
s~!!LIBS!!~$LIBS~g;
|
s@!!LDFLAGS!!@$T_LDFLAGS@g;
|
||||||
s~!!LDFLAGS!!~$T_LDFLAGS~g;
|
s@!!BIN_DIR!!@$BIN_DIR@g;
|
||||||
s~!!BIN_DIR!!~$BIN_DIR~g;
|
s@!!ROOT_DIR!!@$ROOT_DIR@g;
|
||||||
s~!!ROOT_DIR!!~$ROOT_DIR~g;
|
s@!!MEDIA_DIR!!@$MEDIA_DIR@g;
|
||||||
s~!!MEDIA_DIR!!~$MEDIA_DIR~g;
|
s@!!SOURCE_LIST!!@$SOURCE_LIST@g;
|
||||||
s~!!SOURCE_LIST!!~$SOURCE_LIST~g;
|
s@!!SRC_OBJS_DIR!!@$SRC_OBJS_DIR@g;
|
||||||
s~!!SRC_OBJS_DIR!!~$SRC_OBJS_DIR~g;
|
s@!!LANG_OBJS_DIR!!@$LANG_OBJS_DIR@g;
|
||||||
s~!!LANG_OBJS_DIR!!~$LANG_OBJS_DIR~g;
|
s@!!SRC_DIR!!@$SRC_DIR@g;
|
||||||
s~!!SRC_DIR!!~$SRC_DIR~g;
|
s@!!SCRIPT_SRC_DIR!!@$SCRIPT_SRC_DIR@g;
|
||||||
s~!!SCRIPT_SRC_DIR!!~$SCRIPT_SRC_DIR~g;
|
s@!!OSXAPP!!@$OSXAPP@g;
|
||||||
s~!!OSXAPP!!~$OSXAPP~g;
|
s@!!LANG_DIR!!@$LANG_DIR@g;
|
||||||
s~!!LANG_DIR!!~$LANG_DIR~g;
|
s@!!TTD!!@$TTD@g;
|
||||||
s~!!TTD!!~$TTD~g;
|
s@!!BINARY_DIR!!@$prefix_dir/$binary_dir@g;
|
||||||
s~!!BINARY_DIR!!~$prefix_dir/$binary_dir~g;
|
s@!!DATA_DIR!!@$prefix_dir/$data_dir@g;
|
||||||
s~!!DATA_DIR!!~$prefix_dir/$data_dir~g;
|
s@!!DOC_DIR!!@$prefix_dir/$doc_dir@g;
|
||||||
s~!!DOC_DIR!!~$prefix_dir/$doc_dir~g;
|
s@!!MAN_DIR!!@$prefix_dir/$man_dir@g;
|
||||||
s~!!MAN_DIR!!~$prefix_dir/$man_dir~g;
|
s@!!ICON_DIR!!@$prefix_dir/$icon_dir@g;
|
||||||
s~!!ICON_DIR!!~$prefix_dir/$icon_dir~g;
|
s@!!ICON_THEME_DIR!!@$prefix_dir/$icon_theme_dir@g;
|
||||||
s~!!ICON_THEME_DIR!!~$prefix_dir/$icon_theme_dir~g;
|
s@!!PERSONAL_DIR!!@$personal_dir@g;
|
||||||
s~!!PERSONAL_DIR!!~$personal_dir~g;
|
s@!!SHARED_DIR!!@$shared_dir@g;
|
||||||
s~!!SHARED_DIR!!~$shared_dir~g;
|
s@!!INSTALL_DIR!!@$install_dir@g;
|
||||||
s~!!INSTALL_DIR!!~$install_dir~g;
|
s@!!BINARY_NAME!!@$binary_name@g;
|
||||||
s~!!BINARY_NAME!!~$binary_name~g;
|
s@!!STRGEN!!@$STRGEN@g;
|
||||||
s~!!STRGEN!!~$STRGEN~g;
|
s@!!ENDIAN_CHECK!!@$ENDIAN_CHECK@g;
|
||||||
s~!!ENDIAN_CHECK!!~$ENDIAN_CHECK~g;
|
s@!!ENDIAN_FORCE!!@$endian@g;
|
||||||
s~!!ENDIAN_FORCE!!~$endian~g;
|
s@!!STAGE!!@$STAGE@g;
|
||||||
s~!!STAGE!!~$STAGE~g;
|
s@!!MAKEDEPEND!!@$makedepend@g;
|
||||||
s~!!MAKEDEPEND!!~$makedepend~g;
|
s@!!CFLAGS_MAKEDEP!!@$cflags_makedep@g;
|
||||||
s~!!CFLAGS_MAKEDEP!!~$cflags_makedep~g;
|
s@!!SORT!!@$sort@g;
|
||||||
s~!!SORT!!~$sort~g;
|
s@!!CONFIG_CACHE_COMPILER!!@config.cache.compiler@g;
|
||||||
s~!!CONFIG_CACHE_COMPILER!!~config.cache.compiler~g;
|
s@!!CONFIG_CACHE_LINKER!!@config.cache.linker@g;
|
||||||
s~!!CONFIG_CACHE_LINKER!!~config.cache.linker~g;
|
s@!!CONFIG_CACHE_ENDIAN!!@config.cache.endian@g;
|
||||||
s~!!CONFIG_CACHE_ENDIAN!!~config.cache.endian~g;
|
s@!!CONFIG_CACHE_SOURCE!!@config.cache.source@g;
|
||||||
s~!!CONFIG_CACHE_SOURCE!!~config.cache.source~g;
|
s@!!CONFIG_CACHE_VERSION!!@config.cache.version@g;
|
||||||
s~!!CONFIG_CACHE_VERSION!!~config.cache.version~g;
|
s@!!CONFIG_CACHE_SOURCE_LIST!!@config.cache.source.list@g;
|
||||||
s~!!CONFIG_CACHE_SOURCE_LIST!!~config.cache.source.list~g;
|
s@!!CONFIG_CACHE_PWD!!@config.cache.pwd@g;
|
||||||
s~!!CONFIG_CACHE_PWD!!~config.cache.pwd~g;
|
s@!!LANG_SUPPRESS!!@$lang_suppress@g;
|
||||||
s~!!LANG_SUPPRESS!!~$lang_suppress~g;
|
s@!!OBJS_C!!@$OBJS_C@g;
|
||||||
s~!!OBJS_C!!~$OBJS_C~g;
|
s@!!OBJS_CPP!!@$OBJS_CPP@g;
|
||||||
s~!!OBJS_CPP!!~$OBJS_CPP~g;
|
s@!!OBJS_MM!!@$OBJS_MM@g;
|
||||||
s~!!OBJS_MM!!~$OBJS_MM~g;
|
s@!!OBJS_RC!!@$OBJS_RC@g;
|
||||||
s~!!OBJS_RC!!~$OBJS_RC~g;
|
s@!!SRCS!!@$SRCS@g;
|
||||||
s~!!SRCS!!~$SRCS~g;
|
s@!!OS!!@$os@g;
|
||||||
s~!!OS!!~$os~g;
|
s@!!CONFIGURE_FILES!!@$CONFIGURE_FILES@g;
|
||||||
s~!!CONFIGURE_FILES!!~$CONFIGURE_FILES~g;
|
s@!!REVISION!!@$revision@g;
|
||||||
s~!!REVISION!!~$revision~g;
|
s@!!AWK!!@$awk@g;
|
||||||
s~!!AWK!!~$awk~g;
|
s@!!DISTCC!!@$distcc@g;
|
||||||
s~!!GCC295!!~$gcc295~g;
|
|
||||||
s~!!DISTCC!!~$distcc~g;
|
|
||||||
"
|
"
|
||||||
|
|
||||||
if [ "$icon_theme_dir" != "" ]; then
|
if [ "$icon_theme_dir" != "" ]; then
|
||||||
SRC_REPLACE="$SRC_REPLACE
|
SRC_REPLACE="$SRC_REPLACE
|
||||||
s#!!ICON_THEME_DIR!!#$prefix_dir/$icon_theme_dir#g;
|
s@!!ICON_THEME_DIR!!@$prefix_dir/$icon_theme_dir@g;
|
||||||
"
|
"
|
||||||
else
|
else
|
||||||
SRC_REPLACE="$SRC_REPLACE
|
SRC_REPLACE="$SRC_REPLACE
|
||||||
s#!!ICON_THEME_DIR!!##g;
|
s@!!ICON_THEME_DIR!!@@g;
|
||||||
"
|
"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ "$man_dir" != "" ]; then
|
if [ "$man_dir" != "" ]; then
|
||||||
SRC_REPLACE="$SRC_REPLACE
|
SRC_REPLACE="$SRC_REPLACE
|
||||||
s#!!MAN_DIR!!#$prefix_dir/$man_dir#g;
|
s@!!MAN_DIR!!@$prefix_dir/$man_dir@g;
|
||||||
"
|
"
|
||||||
else
|
else
|
||||||
SRC_REPLACE="$SRC_REPLACE
|
SRC_REPLACE="$SRC_REPLACE
|
||||||
s#!!MAN_DIR!!##g;
|
s@!!MAN_DIR!!@@g;
|
||||||
"
|
"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ "$menu_dir" != "" ]; then
|
if [ "$menu_dir" != "" ]; then
|
||||||
SRC_REPLACE="$SRC_REPLACE
|
SRC_REPLACE="$SRC_REPLACE
|
||||||
s#!!MENU_DIR!!#$prefix_dir/$menu_dir#g;
|
s@!!MENU_DIR!!@$prefix_dir/$menu_dir@g;
|
||||||
"
|
"
|
||||||
else
|
else
|
||||||
SRC_REPLACE="$SRC_REPLACE
|
SRC_REPLACE="$SRC_REPLACE
|
||||||
s#!!MENU_DIR!!##g;
|
s@!!MENU_DIR!!@@g;
|
||||||
"
|
"
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
generate_menu_item() {
|
generate_menu_item() {
|
||||||
MENU_REPLACE="
|
MENU_REPLACE="
|
||||||
s~!!TTD!!~$TTD~g;
|
s@!!TTD!!@$TTD@g;
|
||||||
s~!!MENU_GROUP!!~$menu_group~g;
|
s@!!MENU_GROUP!!@$menu_group@g;
|
||||||
s~!!MENU_NAME!!~$menu_name~g
|
s@!!MENU_NAME!!@$menu_name@g
|
||||||
"
|
"
|
||||||
log 1 "Generating menu item..."
|
log 1 "Generating menu item..."
|
||||||
mkdir -p media
|
mkdir -p media
|
||||||
|
27
configure
vendored
27
configure
vendored
@@ -1,5 +1,13 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
|
||||||
|
check_path_characters() {
|
||||||
|
if [ -n "`echo $ROOT_DIR | grep '[^-_A-Za-z0-9\/\\\.:]'`" ]; then
|
||||||
|
echo "WARNING: The path contains a non-alphanumeric character that might cause"
|
||||||
|
echo " failures in subsequent build stages. Any failures with the build"
|
||||||
|
echo " will most likely be caused by this."
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
CONFIGURE_EXECUTABLE="$_"
|
CONFIGURE_EXECUTABLE="$_"
|
||||||
# On *nix systems those two are equal when ./configure is done
|
# On *nix systems those two are equal when ./configure is done
|
||||||
if [ "$0" != "$CONFIGURE_EXECUTABLE" ]; then
|
if [ "$0" != "$CONFIGURE_EXECUTABLE" ]; then
|
||||||
@@ -14,9 +22,16 @@ if [ "$0" != "$CONFIGURE_EXECUTABLE" ]; then
|
|||||||
fi
|
fi
|
||||||
# Find out where configure is (in what dir)
|
# Find out where configure is (in what dir)
|
||||||
ROOT_DIR="`dirname $0`"
|
ROOT_DIR="`dirname $0`"
|
||||||
ROOT_DIR="`cd $ROOT_DIR && pwd`"
|
# For MSYS/MinGW we want to know the FULL path. This as that path is generated
|
||||||
|
# once you call an outside binary. Having the same path for the rest is needed
|
||||||
|
# for dependency checking.
|
||||||
|
# pwd -W returns said FULL path, but doesn't exist on others so fall back.
|
||||||
|
ROOT_DIR="`cd $ROOT_DIR && (pwd -W 2>/dev/null || pwd 2>/dev/null)`"
|
||||||
|
|
||||||
PWD="`pwd`"
|
check_path_characters
|
||||||
|
|
||||||
|
# Same here as for the ROOT_DIR above
|
||||||
|
PWD="`pwd -W 2>/dev/null || pwd 2>/dev/null`"
|
||||||
PREFIX="$PWD/bin"
|
PREFIX="$PWD/bin"
|
||||||
|
|
||||||
. $ROOT_DIR/config.lib
|
. $ROOT_DIR/config.lib
|
||||||
@@ -37,7 +52,7 @@ if [ "$1" = "--reconfig" ] || [ "$1" = "--reconfigure" ]; then
|
|||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
# Make sure we don't lock config.cache
|
# Make sure we don't lock config.cache
|
||||||
cat config.cache | sed 's~\\ ~\\\\ ~g' > cache.tmp
|
cat config.cache | sed 's@\\ @\\\\ @g' > cache.tmp
|
||||||
sh cache.tmp
|
sh cache.tmp
|
||||||
rm -f cache.tmp
|
rm -f cache.tmp
|
||||||
exit $?
|
exit $?
|
||||||
@@ -59,7 +74,7 @@ STRGEN="strgen$EXE"
|
|||||||
ENDIAN_CHECK="endian_check$EXE"
|
ENDIAN_CHECK="endian_check$EXE"
|
||||||
|
|
||||||
if [ -z "$sort" ]; then
|
if [ -z "$sort" ]; then
|
||||||
PIPE_SORT="sed s~a~a~"
|
PIPE_SORT="sed s@a@a@"
|
||||||
else
|
else
|
||||||
PIPE_SORT="$sort"
|
PIPE_SORT="$sort"
|
||||||
fi
|
fi
|
||||||
@@ -125,7 +140,7 @@ SRCS="` echo \"$SRCS\" | $awk ' { ORS = " " } { print $0; }'`"
|
|||||||
|
|
||||||
# In makefiles, we always use -u for sort
|
# In makefiles, we always use -u for sort
|
||||||
if [ -z "$sort" ]; then
|
if [ -z "$sort" ]; then
|
||||||
sort="sed s~a~a~"
|
sort="sed s@a@a@"
|
||||||
else
|
else
|
||||||
sort="$sort -u"
|
sort="$sort -u"
|
||||||
fi
|
fi
|
||||||
@@ -135,3 +150,5 @@ CONFIGURE_FILES="$ROOT_DIR/configure $ROOT_DIR/config.lib $ROOT_DIR/Makefile.in
|
|||||||
generate_main
|
generate_main
|
||||||
generate_lang
|
generate_lang
|
||||||
generate_src
|
generate_src
|
||||||
|
|
||||||
|
check_path_characters
|
||||||
|
@@ -1,7 +1,7 @@
|
|||||||
STRGEN USAGE
|
STRGEN USAGE
|
||||||
------------
|
------------
|
||||||
This guide is only interesting for people who want to alter something
|
This guide is only interesting for people who want to alter something
|
||||||
themselves without access to WT2 (translator2.openttd.org). Please note that
|
themselves without access to translator.openttd.org. Please note that
|
||||||
your compiled language file will only be compatible with the OpenTTD version
|
your compiled language file will only be compatible with the OpenTTD version
|
||||||
you have downloaded english.txt, the master language file, for. While this is
|
you have downloaded english.txt, the master language file, for. While this is
|
||||||
not always true, namely when changes in the code have not touched language
|
not always true, namely when changes in the code have not touched language
|
||||||
|
@@ -86,17 +86,17 @@ elif [ -d "$ROOT_DIR/.git" ]; then
|
|||||||
fi
|
fi
|
||||||
HASH=`LC_ALL=C git rev-parse --verify HEAD 2>/dev/null`
|
HASH=`LC_ALL=C git rev-parse --verify HEAD 2>/dev/null`
|
||||||
REV="g`echo $HASH | cut -c1-8`"
|
REV="g`echo $HASH | cut -c1-8`"
|
||||||
BRANCH=`git branch|grep '[*]' | sed 's~\* ~~;s~^master$~~'`
|
BRANCH=`git branch|grep '[*]' | sed 's@\* @@;s@^master$@@'`
|
||||||
REV_NR=`LC_ALL=C git log --pretty=format:%s "$SRC_DIR" | grep "^(svn r[0-9]*)" | head -n 1 | sed "s~.*(svn r\([0-9]*\)).*~\1~"`
|
REV_NR=`LC_ALL=C git log --pretty=format:%s "$SRC_DIR" | grep "^(svn r[0-9]*)" | head -n 1 | sed "s@.*(svn r\([0-9]*\)).*@\1@"`
|
||||||
elif [ -d "$ROOT_DIR/.hg" ]; then
|
elif [ -d "$ROOT_DIR/.hg" ]; then
|
||||||
# We are a hg checkout
|
# We are a hg checkout
|
||||||
if [ -n "`hg status \"$SRC_DIR\" | grep -v '^?'`" ]; then
|
if [ -n "`hg status \"$SRC_DIR\" | grep -v '^?'`" ]; then
|
||||||
MODIFIED="2"
|
MODIFIED="2"
|
||||||
fi
|
fi
|
||||||
HASH=`LC_ALL=C hg parents 2>/dev/null | head -n 1 | cut -d: -f3`
|
HASH=`LC_ALL=C hg parents --template="{node}"`
|
||||||
REV="h`echo $HASH | cut -c1-8`"
|
REV="h`echo $HASH | cut -c1-8`"
|
||||||
BRANCH=`hg branch | sed 's~^default$~~'`
|
BRANCH=`hg branch | sed 's@^default$@@'`
|
||||||
REV_NR=`LC_ALL=C hg log -r $HASH:0 -k "svn" -l 1 --template "{desc}\n" "$SRC_DIR" | grep "^(svn r[0-9]*)" | head -n 1 | sed "s~.*(svn r\([0-9]*\)).*~\1~"`
|
REV_NR=`LC_ALL=C hg log -r $HASH:0 -k "svn" -l 1 --template "{desc}\n" "$SRC_DIR" | grep "^(svn r[0-9]*)" | head -n 1 | sed "s@.*(svn r\([0-9]*\)).*@\1@"`
|
||||||
else
|
else
|
||||||
# We don't know
|
# We don't know
|
||||||
MODIFIED="1"
|
MODIFIED="1"
|
||||||
|
@@ -11,13 +11,19 @@ by the number below on http://bugs.openttd.org.
|
|||||||
If the bug report is closed, it has been fixed, which then can be verified
|
If the bug report is closed, it has been fixed, which then can be verified
|
||||||
in the latest SVN version of /trunk.
|
in the latest SVN version of /trunk.
|
||||||
|
|
||||||
Bugs for 0.7.0-beta2
|
Bugs for 0.7.2
|
||||||
------------------------------------------------------------------------
|
------------------------------------------------------------------------
|
||||||
URL: http://bugs.openttd.org
|
URL: http://bugs.openttd.org
|
||||||
|
|
||||||
- 2689 Capacity ordering of articulated vehicle in build vehicle window is wrong
|
- 3057 Road vehicle sometimes 'forget' the need for servicing
|
||||||
|
- 3040 Not all alternatives are always shown in the "Join station" list
|
||||||
|
- 2955 With path signals depots are less likely to be visited
|
||||||
|
- 2891 Ignore signal does not keep the train running when in path signalled block till the next signal
|
||||||
|
- 2769 No offer for buying bankrupt AIs
|
||||||
|
- 2737 Self-crossing trains ignore "forbid 90 degree turn" setting
|
||||||
- 2616 Cloning creates vehicles with invalid subcargos
|
- 2616 Cloning creates vehicles with invalid subcargos
|
||||||
- 2585 [OSX] OS' mouse pointer showing
|
- 2585 [OSX] OS' mouse pointer showing
|
||||||
|
- 2484 [OSX] Cannot enter CJK characters
|
||||||
- 2427 Vehicle owner gets paid for whole cargo feeder share
|
- 2427 Vehicle owner gets paid for whole cargo feeder share
|
||||||
- 1944 Road vehicles not picking empty drivethrough platform
|
- 1944 Road vehicles not picking empty drivethrough platform
|
||||||
- 1762 Strange Autoreplace behaviour
|
- 1762 Strange Autoreplace behaviour
|
||||||
|
@@ -1,17 +1,70 @@
|
|||||||
openttd (0.7~svn-1) UNRELEASED; urgency=low
|
openttd (0.7.2) unstable; urgency=low
|
||||||
|
|
||||||
* Unreleased SVN version. Versioned to allow normal upgrades to released
|
* New upstream release.
|
||||||
versions.
|
|
||||||
|
|
||||||
-- Matthijs Kooijman <matthijs@stdin.nl> Wed, 03 Sep 2008 18:56:04 +0200
|
-- Matthijs Kooijman <matthijs@stdin.nl> Sat, 01 Aug 2009 00:19:43 +0200
|
||||||
|
|
||||||
openttd (0.7.0-beta2) unstable; urgency=low
|
openttd (0.7.2~RC2) unstable; urgency=low
|
||||||
|
|
||||||
|
* New upstream release.
|
||||||
|
|
||||||
|
-- Matthijs Kooijman <matthijs@stdin.nl> Tue, 21 Jul 2009 20:25:56 +0200
|
||||||
|
|
||||||
|
openttd (0.7.2~RC1) unstable; urgency=low
|
||||||
|
|
||||||
|
* New upstream release.
|
||||||
|
|
||||||
|
-- Matthijs Kooijman <matthijs@stdin.nl> Wed, 15 Jul 2009 22:25:56 +0200
|
||||||
|
|
||||||
|
openttd (0.7.1) unstable; urgency=low
|
||||||
|
|
||||||
|
* New upstream release.
|
||||||
|
|
||||||
|
-- Matthijs Kooijman <matthijs@stdin.nl> Tue, 09 Jun 2009 01:34:56 +0200
|
||||||
|
|
||||||
|
openttd (0.7.1~RC3) unstable; urgency=low
|
||||||
|
|
||||||
|
* New upstream release.
|
||||||
|
|
||||||
|
-- Matthijs Kooijman <matthijs@stdin.nl> Wed, 03 Jun 2009 15:34:56 +0200
|
||||||
|
|
||||||
|
openttd (0.7.1~RC2) unstable; urgency=low
|
||||||
|
|
||||||
|
* New upstream release.
|
||||||
|
|
||||||
|
-- Matthijs Kooijman <matthijs@stdin.nl> Thu, 21 Mar 2009 14:34:56 +0200
|
||||||
|
|
||||||
|
openttd (0.7.1~RC1) unstable; urgency=low
|
||||||
|
|
||||||
|
* New upstream release.
|
||||||
|
|
||||||
|
-- Matthijs Kooijman <matthijs@stdin.nl> Mon, 11 Mar 2009 17:34:56 +0200
|
||||||
|
|
||||||
|
openttd (0.7.0) unstable; urgency=low
|
||||||
|
|
||||||
|
* New upstream release.
|
||||||
|
|
||||||
|
-- Matthijs Kooijman <matthijs@stdin.nl> Wed, 01 Apr 2009 13:37:42 +0000
|
||||||
|
|
||||||
|
openttd (0.7.0~RC2) unstable; urgency=low
|
||||||
|
|
||||||
|
* New upstream release.
|
||||||
|
|
||||||
|
-- Matthijs Kooijman <matthijs@stdin.nl> Mon, 23 Mar 2009 00:42:00 +0200
|
||||||
|
|
||||||
|
openttd (0.7.0~RC1) unstable; urgency=low
|
||||||
|
|
||||||
|
* New upstream release.
|
||||||
|
|
||||||
|
-- Matthijs Kooijman <matthijs@stdin.nl> Mon, 16 Mar 2009 00:07:00 +0200
|
||||||
|
|
||||||
|
openttd (0.7.0~beta2) unstable; urgency=low
|
||||||
|
|
||||||
* New upstream release.
|
* New upstream release.
|
||||||
|
|
||||||
-- Matthijs Kooijman <matthijs@stdin.nl> Tue, 10 Mar 2009 00:33:05 +0100
|
-- Matthijs Kooijman <matthijs@stdin.nl> Tue, 10 Mar 2009 00:33:05 +0100
|
||||||
|
|
||||||
openttd (0.7.0-beta1) unstable; urgency=low
|
openttd (0.7.0~beta1) unstable; urgency=low
|
||||||
|
|
||||||
* New upstream release.
|
* New upstream release.
|
||||||
|
|
||||||
|
@@ -10,7 +10,7 @@
|
|||||||
#-------------------------------------------------------------------------------
|
#-------------------------------------------------------------------------------
|
||||||
|
|
||||||
Name: openttd
|
Name: openttd
|
||||||
Version: 0.7.0
|
Version: 0.7.2
|
||||||
Release: 1%{?dist}
|
Release: 1%{?dist}
|
||||||
|
|
||||||
Group: Amusements/Games
|
Group: Amusements/Games
|
||||||
|
@@ -1,11 +1,11 @@
|
|||||||
!define APPNAME "OpenTTD" ; Define application name
|
!define APPNAME "OpenTTD" ; Define application name
|
||||||
!define APPVERSION "0.7.0" ; Define application version
|
!define APPVERSION "0.7.2" ; Define application version
|
||||||
!define INSTALLERVERSION 55 ; NEED TO UPDATE THIS FOR EVERY RELEASE!!!
|
!define APPVERSIONINTERNAL "0.7.2.0" ; Define application version in X.X.X.X
|
||||||
|
!define INSTALLERVERSION 65 ; NEED TO UPDATE THIS FOR EVERY RELEASE!!!
|
||||||
!include ${VERSION_INCLUDE}
|
!include ${VERSION_INCLUDE}
|
||||||
|
|
||||||
!define APPURLLINK "http://www.openttd.org"
|
!define APPURLLINK "http://www.openttd.org"
|
||||||
!define APPNAMEANDVERSION "${APPNAME} ${APPVERSION}"
|
!define APPNAMEANDVERSION "${APPNAME} ${APPVERSION}"
|
||||||
!define APPVERSIONINTERNAL "${APPVERSION}.0" ; Needs to be of the format X.X.X.X
|
|
||||||
|
|
||||||
!define MUI_ICON "..\..\..\media\openttd.ico"
|
!define MUI_ICON "..\..\..\media\openttd.ico"
|
||||||
!define MUI_UNICON "..\..\..\media\openttd.ico"
|
!define MUI_UNICON "..\..\..\media\openttd.ico"
|
||||||
@@ -112,13 +112,6 @@ Section "!OpenTTD" Section1
|
|||||||
File ${PATH_ROOT}bin\data\*.grf
|
File ${PATH_ROOT}bin\data\*.grf
|
||||||
File ${PATH_ROOT}bin\data\*.obg
|
File ${PATH_ROOT}bin\data\*.obg
|
||||||
File ${PATH_ROOT}bin\data\opntitle.dat
|
File ${PATH_ROOT}bin\data\opntitle.dat
|
||||||
; Copy scenario files (don't choke if they don't exist)
|
|
||||||
SetOutPath "$INSTDIR\scenario\"
|
|
||||||
File /nonfatal ${PATH_ROOT}bin\scenario\*.scn
|
|
||||||
|
|
||||||
; Copy heightmap files (don't choke if they don't exist)
|
|
||||||
SetOutPath "$INSTDIR\scenario\heightmap\"
|
|
||||||
File /nonfatal ${PATH_ROOT}bin\scenario\heightmap\*.*
|
|
||||||
|
|
||||||
; Copy the scripts
|
; Copy the scripts
|
||||||
SetOutPath "$INSTDIR\scripts\"
|
SetOutPath "$INSTDIR\scripts\"
|
||||||
|
@@ -16,10 +16,10 @@ End Sub
|
|||||||
|
|
||||||
Sub UpdateFile(modified, revision, version, cur_date, filename)
|
Sub UpdateFile(modified, revision, version, cur_date, filename)
|
||||||
FSO.CopyFile filename & ".in", filename
|
FSO.CopyFile filename & ".in", filename
|
||||||
FindReplaceInFile filename, "@@MODIFIED@@", modified
|
FindReplaceInFile filename, "!!MODIFIED!!", modified
|
||||||
FindReplaceInFile filename, "@@REVISION@@", revision
|
FindReplaceInFile filename, "!!REVISION!!", revision
|
||||||
FindReplaceInFile filename, "@@VERSION@@", version
|
FindReplaceInFile filename, "!!VERSION!!", version
|
||||||
FindReplaceInFile filename, "@@DATE@@", cur_date
|
FindReplaceInFile filename, "!!DATE!!", cur_date
|
||||||
End Sub
|
End Sub
|
||||||
|
|
||||||
Sub UpdateFiles(version)
|
Sub UpdateFiles(version)
|
||||||
@@ -32,6 +32,7 @@ Sub UpdateFiles(version)
|
|||||||
modified = Mid(version, InStrRev(version, Chr(9)) + 1)
|
modified = Mid(version, InStrRev(version, Chr(9)) + 1)
|
||||||
version = Mid(version, 1, InStr(version, Chr(9)) - 1)
|
version = Mid(version, 1, InStr(version, Chr(9)) - 1)
|
||||||
Else
|
Else
|
||||||
|
version = "0.7.2"
|
||||||
revision = 0
|
revision = 0
|
||||||
modified = 1
|
modified = 1
|
||||||
End If
|
End If
|
||||||
|
@@ -556,6 +556,21 @@
|
|||||||
/>
|
/>
|
||||||
</FileConfiguration>
|
</FileConfiguration>
|
||||||
</File>
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\src\lang\serbian.txt"
|
||||||
|
>
|
||||||
|
<FileConfiguration
|
||||||
|
Name="Debug|Win32"
|
||||||
|
>
|
||||||
|
<Tool
|
||||||
|
Name="VCCustomBuildTool"
|
||||||
|
Description="Generating serbian language file"
|
||||||
|
CommandLine="..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "$(InputPath)"
"
|
||||||
|
AdditionalDependencies=""
|
||||||
|
Outputs="..\bin\lang\serbian.lng"
|
||||||
|
/>
|
||||||
|
</FileConfiguration>
|
||||||
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\src\lang\simplified_chinese.txt"
|
RelativePath="..\src\lang\simplified_chinese.txt"
|
||||||
>
|
>
|
||||||
|
@@ -557,6 +557,21 @@
|
|||||||
/>
|
/>
|
||||||
</FileConfiguration>
|
</FileConfiguration>
|
||||||
</File>
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\src\lang\serbian.txt"
|
||||||
|
>
|
||||||
|
<FileConfiguration
|
||||||
|
Name="Debug|Win32"
|
||||||
|
>
|
||||||
|
<Tool
|
||||||
|
Name="VCCustomBuildTool"
|
||||||
|
Description="Generating serbian language file"
|
||||||
|
CommandLine="..\objs\strgen\strgen.exe -s ..\src\lang -d ..\bin\lang "$(InputPath)"
"
|
||||||
|
AdditionalDependencies=""
|
||||||
|
Outputs="..\bin\lang\serbian.lng"
|
||||||
|
/>
|
||||||
|
</FileConfiguration>
|
||||||
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\src\lang\simplified_chinese.txt"
|
RelativePath="..\src\lang\simplified_chinese.txt"
|
||||||
>
|
>
|
||||||
|
@@ -60,7 +60,7 @@
|
|||||||
FavorSizeOrSpeed="2"
|
FavorSizeOrSpeed="2"
|
||||||
OmitFramePointers="true"
|
OmitFramePointers="true"
|
||||||
AdditionalIncludeDirectories="..\objs\langs;..\src\3rdparty\squirrel\include"
|
AdditionalIncludeDirectories="..\objs\langs;..\src\3rdparty\squirrel\include"
|
||||||
PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;WIN32_EXCEPTION_TRACKER;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_ZLIB;WITH_PNG;WITH_FREETYPE;WITH_ICU;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR=\"OpenTTD\";WITH_ASSERT"
|
PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;WIN32_EXCEPTION_TRACKER;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_ZLIB;WITH_PNG;WITH_FREETYPE;WITH_ICU;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR=\"OpenTTD\""
|
||||||
StringPooling="true"
|
StringPooling="true"
|
||||||
ExceptionHandling="1"
|
ExceptionHandling="1"
|
||||||
RuntimeLibrary="0"
|
RuntimeLibrary="0"
|
||||||
@@ -103,6 +103,8 @@
|
|||||||
IgnoreDefaultLibraryNames=""
|
IgnoreDefaultLibraryNames=""
|
||||||
GenerateDebugInformation="true"
|
GenerateDebugInformation="true"
|
||||||
SubSystem="2"
|
SubSystem="2"
|
||||||
|
StackReserveSize="1048576"
|
||||||
|
StackCommitSize="1048576"
|
||||||
OptimizeReferences="2"
|
OptimizeReferences="2"
|
||||||
OptimizeForWindows98="1"
|
OptimizeForWindows98="1"
|
||||||
TargetMachine="1"
|
TargetMachine="1"
|
||||||
@@ -201,6 +203,8 @@
|
|||||||
IgnoreDefaultLibraryNames="LIBCMT.lib"
|
IgnoreDefaultLibraryNames="LIBCMT.lib"
|
||||||
GenerateDebugInformation="true"
|
GenerateDebugInformation="true"
|
||||||
SubSystem="2"
|
SubSystem="2"
|
||||||
|
StackReserveSize="1048576"
|
||||||
|
StackCommitSize="1048576"
|
||||||
TargetMachine="1"
|
TargetMachine="1"
|
||||||
/>
|
/>
|
||||||
<Tool
|
<Tool
|
||||||
@@ -269,7 +273,7 @@
|
|||||||
FavorSizeOrSpeed="2"
|
FavorSizeOrSpeed="2"
|
||||||
OmitFramePointers="true"
|
OmitFramePointers="true"
|
||||||
AdditionalIncludeDirectories="..\objs\langs;..\src\3rdparty\squirrel\include"
|
AdditionalIncludeDirectories="..\objs\langs;..\src\3rdparty\squirrel\include"
|
||||||
PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;WIN32_EXCEPTION_TRACKER;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_ZLIB;WITH_PNG;WITH_FREETYPE;WITH_ICU;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR=\"OpenTTD\";_SQ64;WITH_ASSERT"
|
PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;WIN32_EXCEPTION_TRACKER;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_ZLIB;WITH_PNG;WITH_FREETYPE;WITH_ICU;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR=\"OpenTTD\";_SQ64"
|
||||||
StringPooling="true"
|
StringPooling="true"
|
||||||
ExceptionHandling="1"
|
ExceptionHandling="1"
|
||||||
RuntimeLibrary="0"
|
RuntimeLibrary="0"
|
||||||
@@ -312,6 +316,8 @@
|
|||||||
IgnoreDefaultLibraryNames=""
|
IgnoreDefaultLibraryNames=""
|
||||||
GenerateDebugInformation="true"
|
GenerateDebugInformation="true"
|
||||||
SubSystem="2"
|
SubSystem="2"
|
||||||
|
StackReserveSize="1048576"
|
||||||
|
StackCommitSize="1048576"
|
||||||
OptimizeReferences="2"
|
OptimizeReferences="2"
|
||||||
OptimizeForWindows98="1"
|
OptimizeForWindows98="1"
|
||||||
TargetMachine="17"
|
TargetMachine="17"
|
||||||
@@ -413,6 +419,8 @@
|
|||||||
IgnoreDefaultLibraryNames="LIBCMT.lib"
|
IgnoreDefaultLibraryNames="LIBCMT.lib"
|
||||||
GenerateDebugInformation="true"
|
GenerateDebugInformation="true"
|
||||||
SubSystem="2"
|
SubSystem="2"
|
||||||
|
StackReserveSize="1048576"
|
||||||
|
StackCommitSize="1048576"
|
||||||
TargetMachine="17"
|
TargetMachine="17"
|
||||||
/>
|
/>
|
||||||
<Tool
|
<Tool
|
||||||
@@ -947,6 +955,10 @@
|
|||||||
RelativePath=".\..\src\driver.h"
|
RelativePath=".\..\src\driver.h"
|
||||||
>
|
>
|
||||||
</File>
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath=".\..\src\economy_base.h"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath=".\..\src\economy_func.h"
|
RelativePath=".\..\src\economy_func.h"
|
||||||
>
|
>
|
||||||
@@ -2659,6 +2671,10 @@
|
|||||||
RelativePath=".\..\src\ai\api\ai_sign.hpp"
|
RelativePath=".\..\src\ai\api\ai_sign.hpp"
|
||||||
>
|
>
|
||||||
</File>
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath=".\..\src\ai\api\ai_signlist.hpp"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath=".\..\src\ai\api\ai_station.hpp"
|
RelativePath=".\..\src\ai\api\ai_station.hpp"
|
||||||
>
|
>
|
||||||
@@ -2863,6 +2879,10 @@
|
|||||||
RelativePath=".\..\src\ai\api\ai_sign.cpp"
|
RelativePath=".\..\src\ai\api\ai_sign.cpp"
|
||||||
>
|
>
|
||||||
</File>
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath=".\..\src\ai\api\ai_signlist.cpp"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath=".\..\src\ai\api\ai_station.cpp"
|
RelativePath=".\..\src\ai\api\ai_station.cpp"
|
||||||
>
|
>
|
||||||
|
@@ -60,7 +60,7 @@
|
|||||||
FavorSizeOrSpeed="2"
|
FavorSizeOrSpeed="2"
|
||||||
OmitFramePointers="true"
|
OmitFramePointers="true"
|
||||||
AdditionalIncludeDirectories="..\objs\langs;..\src\3rdparty\squirrel\include"
|
AdditionalIncludeDirectories="..\objs\langs;..\src\3rdparty\squirrel\include"
|
||||||
PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;WIN32_EXCEPTION_TRACKER;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_ZLIB;WITH_PNG;WITH_FREETYPE;WITH_ICU;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR=\"OpenTTD\";WITH_ASSERT"
|
PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;WIN32_EXCEPTION_TRACKER;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_ZLIB;WITH_PNG;WITH_FREETYPE;WITH_ICU;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR=\"OpenTTD\""
|
||||||
StringPooling="true"
|
StringPooling="true"
|
||||||
ExceptionHandling="1"
|
ExceptionHandling="1"
|
||||||
RuntimeLibrary="0"
|
RuntimeLibrary="0"
|
||||||
@@ -103,6 +103,8 @@
|
|||||||
IgnoreDefaultLibraryNames=""
|
IgnoreDefaultLibraryNames=""
|
||||||
GenerateDebugInformation="true"
|
GenerateDebugInformation="true"
|
||||||
SubSystem="2"
|
SubSystem="2"
|
||||||
|
StackReserveSize="1048576"
|
||||||
|
StackCommitSize="1048576"
|
||||||
OptimizeReferences="2"
|
OptimizeReferences="2"
|
||||||
OptimizeForWindows98="1"
|
OptimizeForWindows98="1"
|
||||||
TargetMachine="1"
|
TargetMachine="1"
|
||||||
@@ -201,6 +203,8 @@
|
|||||||
IgnoreDefaultLibraryNames="LIBCMT.lib"
|
IgnoreDefaultLibraryNames="LIBCMT.lib"
|
||||||
GenerateDebugInformation="true"
|
GenerateDebugInformation="true"
|
||||||
SubSystem="2"
|
SubSystem="2"
|
||||||
|
StackReserveSize="1048576"
|
||||||
|
StackCommitSize="1048576"
|
||||||
TargetMachine="1"
|
TargetMachine="1"
|
||||||
/>
|
/>
|
||||||
<Tool
|
<Tool
|
||||||
@@ -269,7 +273,7 @@
|
|||||||
FavorSizeOrSpeed="2"
|
FavorSizeOrSpeed="2"
|
||||||
OmitFramePointers="true"
|
OmitFramePointers="true"
|
||||||
AdditionalIncludeDirectories="..\objs\langs;..\src\3rdparty\squirrel\include"
|
AdditionalIncludeDirectories="..\objs\langs;..\src\3rdparty\squirrel\include"
|
||||||
PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;WIN32_EXCEPTION_TRACKER;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_ZLIB;WITH_PNG;WITH_FREETYPE;WITH_ICU;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR=\"OpenTTD\";_SQ64;WITH_ASSERT"
|
PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;WIN32_EXCEPTION_TRACKER;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_ZLIB;WITH_PNG;WITH_FREETYPE;WITH_ICU;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR=\"OpenTTD\";_SQ64"
|
||||||
StringPooling="true"
|
StringPooling="true"
|
||||||
ExceptionHandling="1"
|
ExceptionHandling="1"
|
||||||
RuntimeLibrary="0"
|
RuntimeLibrary="0"
|
||||||
@@ -312,6 +316,8 @@
|
|||||||
IgnoreDefaultLibraryNames=""
|
IgnoreDefaultLibraryNames=""
|
||||||
GenerateDebugInformation="true"
|
GenerateDebugInformation="true"
|
||||||
SubSystem="2"
|
SubSystem="2"
|
||||||
|
StackReserveSize="1048576"
|
||||||
|
StackCommitSize="1048576"
|
||||||
OptimizeReferences="2"
|
OptimizeReferences="2"
|
||||||
OptimizeForWindows98="1"
|
OptimizeForWindows98="1"
|
||||||
TargetMachine="17"
|
TargetMachine="17"
|
||||||
@@ -413,6 +419,8 @@
|
|||||||
IgnoreDefaultLibraryNames="LIBCMT.lib"
|
IgnoreDefaultLibraryNames="LIBCMT.lib"
|
||||||
GenerateDebugInformation="true"
|
GenerateDebugInformation="true"
|
||||||
SubSystem="2"
|
SubSystem="2"
|
||||||
|
StackReserveSize="1048576"
|
||||||
|
StackCommitSize="1048576"
|
||||||
TargetMachine="17"
|
TargetMachine="17"
|
||||||
/>
|
/>
|
||||||
<Tool
|
<Tool
|
||||||
|
@@ -61,7 +61,7 @@
|
|||||||
FavorSizeOrSpeed="2"
|
FavorSizeOrSpeed="2"
|
||||||
OmitFramePointers="true"
|
OmitFramePointers="true"
|
||||||
AdditionalIncludeDirectories="..\objs\langs;..\src\3rdparty\squirrel\include"
|
AdditionalIncludeDirectories="..\objs\langs;..\src\3rdparty\squirrel\include"
|
||||||
PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;WIN32_EXCEPTION_TRACKER;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_ZLIB;WITH_PNG;WITH_FREETYPE;WITH_ICU;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR=\"OpenTTD\";WITH_ASSERT"
|
PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;WIN32_EXCEPTION_TRACKER;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_ZLIB;WITH_PNG;WITH_FREETYPE;WITH_ICU;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR=\"OpenTTD\""
|
||||||
StringPooling="true"
|
StringPooling="true"
|
||||||
ExceptionHandling="1"
|
ExceptionHandling="1"
|
||||||
RuntimeLibrary="0"
|
RuntimeLibrary="0"
|
||||||
@@ -104,6 +104,8 @@
|
|||||||
IgnoreDefaultLibraryNames=""
|
IgnoreDefaultLibraryNames=""
|
||||||
GenerateDebugInformation="true"
|
GenerateDebugInformation="true"
|
||||||
SubSystem="2"
|
SubSystem="2"
|
||||||
|
StackReserveSize="1048576"
|
||||||
|
StackCommitSize="1048576"
|
||||||
OptimizeReferences="2"
|
OptimizeReferences="2"
|
||||||
RandomizedBaseAddress="1"
|
RandomizedBaseAddress="1"
|
||||||
DataExecutionPrevention="0"
|
DataExecutionPrevention="0"
|
||||||
@@ -200,6 +202,8 @@
|
|||||||
IgnoreDefaultLibraryNames="LIBCMT.lib"
|
IgnoreDefaultLibraryNames="LIBCMT.lib"
|
||||||
GenerateDebugInformation="true"
|
GenerateDebugInformation="true"
|
||||||
SubSystem="2"
|
SubSystem="2"
|
||||||
|
StackReserveSize="1048576"
|
||||||
|
StackCommitSize="1048576"
|
||||||
RandomizedBaseAddress="1"
|
RandomizedBaseAddress="1"
|
||||||
DataExecutionPrevention="0"
|
DataExecutionPrevention="0"
|
||||||
TargetMachine="1"
|
TargetMachine="1"
|
||||||
@@ -267,7 +271,7 @@
|
|||||||
FavorSizeOrSpeed="2"
|
FavorSizeOrSpeed="2"
|
||||||
OmitFramePointers="true"
|
OmitFramePointers="true"
|
||||||
AdditionalIncludeDirectories="..\objs\langs;..\src\3rdparty\squirrel\include"
|
AdditionalIncludeDirectories="..\objs\langs;..\src\3rdparty\squirrel\include"
|
||||||
PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;WIN32_EXCEPTION_TRACKER;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_ZLIB;WITH_PNG;WITH_FREETYPE;WITH_ICU;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR=\"OpenTTD\";_SQ64;WITH_ASSERT"
|
PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;WIN32_EXCEPTION_TRACKER;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_ZLIB;WITH_PNG;WITH_FREETYPE;WITH_ICU;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR=\"OpenTTD\";_SQ64"
|
||||||
StringPooling="true"
|
StringPooling="true"
|
||||||
ExceptionHandling="1"
|
ExceptionHandling="1"
|
||||||
RuntimeLibrary="0"
|
RuntimeLibrary="0"
|
||||||
@@ -310,6 +314,8 @@
|
|||||||
IgnoreDefaultLibraryNames=""
|
IgnoreDefaultLibraryNames=""
|
||||||
GenerateDebugInformation="true"
|
GenerateDebugInformation="true"
|
||||||
SubSystem="2"
|
SubSystem="2"
|
||||||
|
StackReserveSize="1048576"
|
||||||
|
StackCommitSize="1048576"
|
||||||
OptimizeReferences="2"
|
OptimizeReferences="2"
|
||||||
TargetMachine="17"
|
TargetMachine="17"
|
||||||
/>
|
/>
|
||||||
@@ -410,6 +416,8 @@
|
|||||||
IgnoreDefaultLibraryNames="LIBCMT.lib"
|
IgnoreDefaultLibraryNames="LIBCMT.lib"
|
||||||
GenerateDebugInformation="true"
|
GenerateDebugInformation="true"
|
||||||
SubSystem="2"
|
SubSystem="2"
|
||||||
|
StackReserveSize="1048576"
|
||||||
|
StackCommitSize="1048576"
|
||||||
TargetMachine="17"
|
TargetMachine="17"
|
||||||
/>
|
/>
|
||||||
<Tool
|
<Tool
|
||||||
@@ -944,6 +952,10 @@
|
|||||||
RelativePath=".\..\src\driver.h"
|
RelativePath=".\..\src\driver.h"
|
||||||
>
|
>
|
||||||
</File>
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath=".\..\src\economy_base.h"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath=".\..\src\economy_func.h"
|
RelativePath=".\..\src\economy_func.h"
|
||||||
>
|
>
|
||||||
@@ -2656,6 +2668,10 @@
|
|||||||
RelativePath=".\..\src\ai\api\ai_sign.hpp"
|
RelativePath=".\..\src\ai\api\ai_sign.hpp"
|
||||||
>
|
>
|
||||||
</File>
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath=".\..\src\ai\api\ai_signlist.hpp"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath=".\..\src\ai\api\ai_station.hpp"
|
RelativePath=".\..\src\ai\api\ai_station.hpp"
|
||||||
>
|
>
|
||||||
@@ -2860,6 +2876,10 @@
|
|||||||
RelativePath=".\..\src\ai\api\ai_sign.cpp"
|
RelativePath=".\..\src\ai\api\ai_sign.cpp"
|
||||||
>
|
>
|
||||||
</File>
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath=".\..\src\ai\api\ai_signlist.cpp"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath=".\..\src\ai\api\ai_station.cpp"
|
RelativePath=".\..\src\ai\api\ai_station.cpp"
|
||||||
>
|
>
|
||||||
|
@@ -61,7 +61,7 @@
|
|||||||
FavorSizeOrSpeed="2"
|
FavorSizeOrSpeed="2"
|
||||||
OmitFramePointers="true"
|
OmitFramePointers="true"
|
||||||
AdditionalIncludeDirectories="..\objs\langs;..\src\3rdparty\squirrel\include"
|
AdditionalIncludeDirectories="..\objs\langs;..\src\3rdparty\squirrel\include"
|
||||||
PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;WIN32_EXCEPTION_TRACKER;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_ZLIB;WITH_PNG;WITH_FREETYPE;WITH_ICU;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR=\"OpenTTD\";WITH_ASSERT"
|
PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;WIN32_EXCEPTION_TRACKER;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_ZLIB;WITH_PNG;WITH_FREETYPE;WITH_ICU;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR=\"OpenTTD\""
|
||||||
StringPooling="true"
|
StringPooling="true"
|
||||||
ExceptionHandling="1"
|
ExceptionHandling="1"
|
||||||
RuntimeLibrary="0"
|
RuntimeLibrary="0"
|
||||||
@@ -104,6 +104,8 @@
|
|||||||
IgnoreDefaultLibraryNames=""
|
IgnoreDefaultLibraryNames=""
|
||||||
GenerateDebugInformation="true"
|
GenerateDebugInformation="true"
|
||||||
SubSystem="2"
|
SubSystem="2"
|
||||||
|
StackReserveSize="1048576"
|
||||||
|
StackCommitSize="1048576"
|
||||||
OptimizeReferences="2"
|
OptimizeReferences="2"
|
||||||
RandomizedBaseAddress="1"
|
RandomizedBaseAddress="1"
|
||||||
DataExecutionPrevention="0"
|
DataExecutionPrevention="0"
|
||||||
@@ -200,6 +202,8 @@
|
|||||||
IgnoreDefaultLibraryNames="LIBCMT.lib"
|
IgnoreDefaultLibraryNames="LIBCMT.lib"
|
||||||
GenerateDebugInformation="true"
|
GenerateDebugInformation="true"
|
||||||
SubSystem="2"
|
SubSystem="2"
|
||||||
|
StackReserveSize="1048576"
|
||||||
|
StackCommitSize="1048576"
|
||||||
RandomizedBaseAddress="1"
|
RandomizedBaseAddress="1"
|
||||||
DataExecutionPrevention="0"
|
DataExecutionPrevention="0"
|
||||||
TargetMachine="1"
|
TargetMachine="1"
|
||||||
@@ -267,7 +271,7 @@
|
|||||||
FavorSizeOrSpeed="2"
|
FavorSizeOrSpeed="2"
|
||||||
OmitFramePointers="true"
|
OmitFramePointers="true"
|
||||||
AdditionalIncludeDirectories="..\objs\langs;..\src\3rdparty\squirrel\include"
|
AdditionalIncludeDirectories="..\objs\langs;..\src\3rdparty\squirrel\include"
|
||||||
PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;WIN32_EXCEPTION_TRACKER;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_ZLIB;WITH_PNG;WITH_FREETYPE;WITH_ICU;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR=\"OpenTTD\";_SQ64;WITH_ASSERT"
|
PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE;WIN32_EXCEPTION_TRACKER;WIN32_ENABLE_DIRECTMUSIC_SUPPORT;WITH_ZLIB;WITH_PNG;WITH_FREETYPE;WITH_ICU;ENABLE_NETWORK;WITH_PERSONAL_DIR;PERSONAL_DIR=\"OpenTTD\";_SQ64"
|
||||||
StringPooling="true"
|
StringPooling="true"
|
||||||
ExceptionHandling="1"
|
ExceptionHandling="1"
|
||||||
RuntimeLibrary="0"
|
RuntimeLibrary="0"
|
||||||
@@ -310,6 +314,8 @@
|
|||||||
IgnoreDefaultLibraryNames=""
|
IgnoreDefaultLibraryNames=""
|
||||||
GenerateDebugInformation="true"
|
GenerateDebugInformation="true"
|
||||||
SubSystem="2"
|
SubSystem="2"
|
||||||
|
StackReserveSize="1048576"
|
||||||
|
StackCommitSize="1048576"
|
||||||
OptimizeReferences="2"
|
OptimizeReferences="2"
|
||||||
TargetMachine="17"
|
TargetMachine="17"
|
||||||
/>
|
/>
|
||||||
@@ -410,6 +416,8 @@
|
|||||||
IgnoreDefaultLibraryNames="LIBCMT.lib"
|
IgnoreDefaultLibraryNames="LIBCMT.lib"
|
||||||
GenerateDebugInformation="true"
|
GenerateDebugInformation="true"
|
||||||
SubSystem="2"
|
SubSystem="2"
|
||||||
|
StackReserveSize="1048576"
|
||||||
|
StackCommitSize="1048576"
|
||||||
TargetMachine="17"
|
TargetMachine="17"
|
||||||
/>
|
/>
|
||||||
<Tool
|
<Tool
|
||||||
|
17
readme.txt
17
readme.txt
@@ -1,6 +1,6 @@
|
|||||||
OpenTTD README
|
OpenTTD README
|
||||||
Last updated: 2009-03-10
|
Last updated: 2009-08-01
|
||||||
Release version: 0.7.0-beta2
|
Release version: 0.7.2
|
||||||
------------------------------------------------------------------------
|
------------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
@@ -191,6 +191,9 @@ Do NOT copy files included with OpenTTD into "shared" directories (explained in
|
|||||||
the following sections) as sooner or later you will run into graphical glitches
|
the following sections) as sooner or later you will run into graphical glitches
|
||||||
when using other versions of the game.
|
when using other versions of the game.
|
||||||
|
|
||||||
|
If you want AIs use the in-game content downloader to download some or download
|
||||||
|
some from the internet and place them in the ai/ directory.
|
||||||
|
|
||||||
4.2) OpenTTD directories
|
4.2) OpenTTD directories
|
||||||
---- -------------------------------
|
---- -------------------------------
|
||||||
|
|
||||||
@@ -253,8 +256,8 @@ features known from TTDPatch (http://www.ttdpatch.net/).
|
|||||||
|
|
||||||
Several important non-standard controls:
|
Several important non-standard controls:
|
||||||
|
|
||||||
* Ctrl makes much commands more powerful. For example Ctrl clicking on signals
|
* Ctrl makes many commands more powerful. For example Ctrl clicking on signals
|
||||||
with the build signal tool on signals changes their behaviour.
|
with the build signal tool changes their behaviour.
|
||||||
* Ingame console. More information at
|
* Ingame console. More information at
|
||||||
http://wiki.openttd.org/index.php/Console
|
http://wiki.openttd.org/index.php/Console
|
||||||
* Right clicking shows tooltips
|
* Right clicking shows tooltips
|
||||||
@@ -381,10 +384,8 @@ The following libraries are used by OpenTTD for:
|
|||||||
See http://www.openttd.org/development for up-to-date information.
|
See http://www.openttd.org/development for up-to-date information.
|
||||||
|
|
||||||
The use of the online Translator service, located at
|
The use of the online Translator service, located at
|
||||||
http://translator2.openttd.org/, is highly encouraged. For a username/password
|
http://translator.openttd.org/, is highly encouraged. For getting an account
|
||||||
combo you should contact the development team, either by mail, IRC or the
|
simply follow the guidelines in the FAQ of the translator website.
|
||||||
forums. The system is straightforward to use, and if you have any problems,
|
|
||||||
read the online help located there.
|
|
||||||
|
|
||||||
If for some reason the website is down for a longer period of time, the
|
If for some reason the website is down for a longer period of time, the
|
||||||
information below might be of help.
|
information below might be of help.
|
||||||
|
@@ -167,6 +167,7 @@ direction_func.h
|
|||||||
direction_type.h
|
direction_type.h
|
||||||
music/dmusic.h
|
music/dmusic.h
|
||||||
driver.h
|
driver.h
|
||||||
|
economy_base.h
|
||||||
economy_func.h
|
economy_func.h
|
||||||
economy_type.h
|
economy_type.h
|
||||||
effectvehicle_base.h
|
effectvehicle_base.h
|
||||||
@@ -620,6 +621,7 @@ ai/api/ai_rail.hpp
|
|||||||
ai/api/ai_railtypelist.hpp
|
ai/api/ai_railtypelist.hpp
|
||||||
ai/api/ai_road.hpp
|
ai/api/ai_road.hpp
|
||||||
ai/api/ai_sign.hpp
|
ai/api/ai_sign.hpp
|
||||||
|
ai/api/ai_signlist.hpp
|
||||||
ai/api/ai_station.hpp
|
ai/api/ai_station.hpp
|
||||||
ai/api/ai_stationlist.hpp
|
ai/api/ai_stationlist.hpp
|
||||||
ai/api/ai_subsidy.hpp
|
ai/api/ai_subsidy.hpp
|
||||||
@@ -672,6 +674,7 @@ ai/api/ai_rail.cpp
|
|||||||
ai/api/ai_railtypelist.cpp
|
ai/api/ai_railtypelist.cpp
|
||||||
ai/api/ai_road.cpp
|
ai/api/ai_road.cpp
|
||||||
ai/api/ai_sign.cpp
|
ai/api/ai_sign.cpp
|
||||||
|
ai/api/ai_signlist.cpp
|
||||||
ai/api/ai_station.cpp
|
ai/api/ai_station.cpp
|
||||||
ai/api/ai_stationlist.cpp
|
ai/api/ai_stationlist.cpp
|
||||||
ai/api/ai_subsidy.cpp
|
ai/api/ai_subsidy.cpp
|
||||||
|
1
src/3rdparty/squirrel/include/squirrel.h
vendored
1
src/3rdparty/squirrel/include/squirrel.h
vendored
@@ -275,6 +275,7 @@ typedef struct tagSQRegFunction{
|
|||||||
}SQRegFunction;
|
}SQRegFunction;
|
||||||
|
|
||||||
/*vm*/
|
/*vm*/
|
||||||
|
SQUIRREL_API bool sq_can_suspend(HSQUIRRELVM v);
|
||||||
SQUIRREL_API HSQUIRRELVM sq_open(SQInteger initialstacksize);
|
SQUIRREL_API HSQUIRRELVM sq_open(SQInteger initialstacksize);
|
||||||
SQUIRREL_API HSQUIRRELVM sq_newthread(HSQUIRRELVM friendvm, SQInteger initialstacksize);
|
SQUIRREL_API HSQUIRRELVM sq_newthread(HSQUIRRELVM friendvm, SQInteger initialstacksize);
|
||||||
SQUIRREL_API void sq_seterrorhandler(HSQUIRRELVM v);
|
SQUIRREL_API void sq_seterrorhandler(HSQUIRRELVM v);
|
||||||
|
5
src/3rdparty/squirrel/squirrel/sqapi.cpp
vendored
5
src/3rdparty/squirrel/squirrel/sqapi.cpp
vendored
@@ -90,6 +90,11 @@ SQInteger sq_getvmstate(HSQUIRRELVM v)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool sq_can_suspend(HSQUIRRELVM v)
|
||||||
|
{
|
||||||
|
return v->_nnativecalls <= 2;
|
||||||
|
}
|
||||||
|
|
||||||
void sq_seterrorhandler(HSQUIRRELVM v)
|
void sq_seterrorhandler(HSQUIRRELVM v)
|
||||||
{
|
{
|
||||||
SQObject o = stack_get(v, -1);
|
SQObject o = stack_get(v, -1);
|
||||||
|
6
src/3rdparty/squirrel/squirrel/sqstate.cpp
vendored
6
src/3rdparty/squirrel/squirrel/sqstate.cpp
vendored
@@ -189,8 +189,12 @@ SQSharedState::~SQSharedState()
|
|||||||
SQCollectable *t = _gc_chain;
|
SQCollectable *t = _gc_chain;
|
||||||
SQCollectable *nx = NULL;
|
SQCollectable *nx = NULL;
|
||||||
while(t) {
|
while(t) {
|
||||||
t->UnMark();
|
|
||||||
t->_uiRef++;
|
t->_uiRef++;
|
||||||
|
t = t->_next;
|
||||||
|
}
|
||||||
|
t = _gc_chain;
|
||||||
|
while(t) {
|
||||||
|
t->UnMark();
|
||||||
t->Finalize();
|
t->Finalize();
|
||||||
nx = t->_next;
|
nx = t->_next;
|
||||||
if(--t->_uiRef == 0)
|
if(--t->_uiRef == 0)
|
||||||
|
18
src/3rdparty/squirrel/squirrel/sqvm.cpp
vendored
18
src/3rdparty/squirrel/squirrel/sqvm.cpp
vendored
@@ -83,7 +83,7 @@ SQVM::SQVM(SQSharedState *ss)
|
|||||||
_suspended = SQFalse;
|
_suspended = SQFalse;
|
||||||
_suspended_target=-1;
|
_suspended_target=-1;
|
||||||
_suspended_root = SQFalse;
|
_suspended_root = SQFalse;
|
||||||
_suspended_traps=-1;
|
_suspended_traps=0;
|
||||||
_foreignptr=NULL;
|
_foreignptr=NULL;
|
||||||
_nnativecalls=0;
|
_nnativecalls=0;
|
||||||
_lasterror = _null_;
|
_lasterror = _null_;
|
||||||
@@ -688,6 +688,7 @@ bool SQVM::Execute(SQObjectPtr &closure, SQInteger target, SQInteger nargs, SQIn
|
|||||||
_suspended = SQFalse;
|
_suspended = SQFalse;
|
||||||
break;
|
break;
|
||||||
case ET_RESUME_OPENTTD:
|
case ET_RESUME_OPENTTD:
|
||||||
|
traps = _suspended_traps;
|
||||||
_suspended = SQFalse;
|
_suspended = SQFalse;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -698,7 +699,7 @@ exception_restore:
|
|||||||
for(;;)
|
for(;;)
|
||||||
{
|
{
|
||||||
DecreaseOps(1);
|
DecreaseOps(1);
|
||||||
if (ShouldSuspend()) { _suspended = SQTrue; return true; }
|
if (ShouldSuspend()) { _suspended = SQTrue; _suspended_traps = traps; return true; }
|
||||||
|
|
||||||
const SQInstruction &_i_ = *ci->_ip++;
|
const SQInstruction &_i_ = *ci->_ip++;
|
||||||
//dumpstack(_stackbase);
|
//dumpstack(_stackbase);
|
||||||
@@ -748,7 +749,16 @@ common_call:
|
|||||||
case OT_NATIVECLOSURE: {
|
case OT_NATIVECLOSURE: {
|
||||||
bool suspend;
|
bool suspend;
|
||||||
_suspended_target = ct_target;
|
_suspended_target = ct_target;
|
||||||
_GUARD(CallNative(_nativeclosure(clo), arg3, ct_stackbase, clo,suspend));
|
try {
|
||||||
|
_GUARD(CallNative(_nativeclosure(clo), arg3, ct_stackbase, clo,suspend));
|
||||||
|
} catch (...) {
|
||||||
|
_suspended = SQTrue;
|
||||||
|
_suspended_target = ct_target;
|
||||||
|
_suspended_root = ci->_root;
|
||||||
|
_suspended_traps = traps;
|
||||||
|
_suspend_varargs = ci->_vargs;
|
||||||
|
throw;
|
||||||
|
}
|
||||||
if(suspend){
|
if(suspend){
|
||||||
_suspended = SQTrue;
|
_suspended = SQTrue;
|
||||||
_suspended_target = ct_target;
|
_suspended_target = ct_target;
|
||||||
@@ -928,7 +938,7 @@ common_call:
|
|||||||
traps -= ci->_etraps;
|
traps -= ci->_etraps;
|
||||||
if(sarg1 != MAX_FUNC_STACKSIZE) STK(arg1) = temp_reg;
|
if(sarg1 != MAX_FUNC_STACKSIZE) STK(arg1) = temp_reg;
|
||||||
}
|
}
|
||||||
else { Raise_Error(_SC("trying to yield a '%s',only genenerator can be yielded"), GetTypeName(ci->_generator)); SQ_THROW();}
|
else { Raise_Error(_SC("trying to yield a '%s',only genenerator can be yielded"), GetTypeName(ci->_closure)); SQ_THROW();}
|
||||||
if(Return(arg0, arg1, temp_reg)){
|
if(Return(arg0, arg1, temp_reg)){
|
||||||
assert(traps == 0);
|
assert(traps == 0);
|
||||||
outres = temp_reg;
|
outres = temp_reg;
|
||||||
|
@@ -103,6 +103,11 @@ struct AIListWindow : public Window {
|
|||||||
sprintf(buf, "%d", selected_info->GetVersion());
|
sprintf(buf, "%d", selected_info->GetVersion());
|
||||||
DoDrawStringTruncated(buf, x + 5, y, TC_BLACK, this->width - x - 8);
|
DoDrawStringTruncated(buf, x + 5, y, TC_BLACK, this->width - x - 8);
|
||||||
y += 13;
|
y += 13;
|
||||||
|
if (selected_info->GetURL() != NULL) {
|
||||||
|
SetDParamStr(0, selected_info->GetURL());
|
||||||
|
DrawString(4, y, STR_AI_URL, TC_BLACK);
|
||||||
|
y += 13;
|
||||||
|
}
|
||||||
SetDParamStr(0, selected_info->GetDescription());
|
SetDParamStr(0, selected_info->GetDescription());
|
||||||
DrawStringMultiLine(4, y, STR_JUST_RAW_STRING, this->width - 8, this->widget[AIL_WIDGET_INFO_BG].bottom - y);
|
DrawStringMultiLine(4, y, STR_JUST_RAW_STRING, this->width - 8, this->widget[AIL_WIDGET_INFO_BG].bottom - y);
|
||||||
}
|
}
|
||||||
@@ -556,6 +561,7 @@ struct AIDebugWindow : public Window {
|
|||||||
enum AIDebugWindowWidgets {
|
enum AIDebugWindowWidgets {
|
||||||
AID_WIDGET_CLOSEBOX = 0,
|
AID_WIDGET_CLOSEBOX = 0,
|
||||||
AID_WIDGET_CAPTION,
|
AID_WIDGET_CAPTION,
|
||||||
|
AID_WIDGET_STICKY,
|
||||||
AID_WIDGET_VIEW,
|
AID_WIDGET_VIEW,
|
||||||
AID_WIDGET_NAME_TEXT,
|
AID_WIDGET_NAME_TEXT,
|
||||||
AID_WIDGET_RELOAD_TOGGLE,
|
AID_WIDGET_RELOAD_TOGGLE,
|
||||||
@@ -575,6 +581,8 @@ struct AIDebugWindow : public Window {
|
|||||||
|
|
||||||
static CompanyID ai_debug_company;
|
static CompanyID ai_debug_company;
|
||||||
int redraw_timer;
|
int redraw_timer;
|
||||||
|
int last_vscroll_pos;
|
||||||
|
bool autoscroll;
|
||||||
|
|
||||||
AIDebugWindow(const WindowDesc *desc, WindowNumber number) : Window(desc, number)
|
AIDebugWindow(const WindowDesc *desc, WindowNumber number) : Window(desc, number)
|
||||||
{
|
{
|
||||||
@@ -587,6 +595,8 @@ struct AIDebugWindow : public Window {
|
|||||||
this->vscroll.cap = 14;
|
this->vscroll.cap = 14;
|
||||||
this->vscroll.pos = 0;
|
this->vscroll.pos = 0;
|
||||||
this->resize.step_height = 12;
|
this->resize.step_height = 12;
|
||||||
|
this->last_vscroll_pos = 0;
|
||||||
|
this->autoscroll = true;
|
||||||
|
|
||||||
if (ai_debug_company != INVALID_COMPANY) this->LowerWidget(ai_debug_company + AID_WIDGET_COMPANY_BUTTON_START);
|
if (ai_debug_company != INVALID_COMPANY) this->LowerWidget(ai_debug_company + AID_WIDGET_COMPANY_BUTTON_START);
|
||||||
|
|
||||||
@@ -596,7 +606,7 @@ struct AIDebugWindow : public Window {
|
|||||||
virtual void OnPaint()
|
virtual void OnPaint()
|
||||||
{
|
{
|
||||||
/* Check if the currently selected company is still active. */
|
/* Check if the currently selected company is still active. */
|
||||||
if (ai_debug_company == INVALID_COMPANY || !IsValidCompanyID(ai_debug_company)) {
|
if (ai_debug_company == INVALID_COMPANY || !IsValidCompanyID(ai_debug_company) || !GetCompany(ai_debug_company)->is_ai) {
|
||||||
if (ai_debug_company != INVALID_COMPANY) {
|
if (ai_debug_company != INVALID_COMPANY) {
|
||||||
/* Raise and disable the widget for the previous selection. */
|
/* Raise and disable the widget for the previous selection. */
|
||||||
this->RaiseWidget(ai_debug_company + AID_WIDGET_COMPANY_BUTTON_START);
|
this->RaiseWidget(ai_debug_company + AID_WIDGET_COMPANY_BUTTON_START);
|
||||||
@@ -664,13 +674,35 @@ struct AIDebugWindow : public Window {
|
|||||||
AILog::LogData *log = (AILog::LogData *)AIObject::GetLogPointer();
|
AILog::LogData *log = (AILog::LogData *)AIObject::GetLogPointer();
|
||||||
_current_company = old_company;
|
_current_company = old_company;
|
||||||
|
|
||||||
SetVScrollCount(this, (log == NULL) ? 0 : log->used);
|
int scroll_count = (log == NULL) ? 0 : log->used;
|
||||||
this->InvalidateWidget(AID_WIDGET_SCROLLBAR);
|
if (this->vscroll.count != scroll_count) {
|
||||||
|
SetVScrollCount(this, scroll_count);
|
||||||
|
|
||||||
|
/* We need a repaint */
|
||||||
|
this->InvalidateWidget(AID_WIDGET_SCROLLBAR);
|
||||||
|
}
|
||||||
|
|
||||||
if (log == NULL) return;
|
if (log == NULL) return;
|
||||||
|
|
||||||
|
/* Detect when the user scrolls the window. Enable autoscroll when the
|
||||||
|
* bottom-most line becomes visible. */
|
||||||
|
if (this->last_vscroll_pos != this->vscroll.pos) {
|
||||||
|
this->autoscroll = this->vscroll.pos >= log->used - this->vscroll.cap;
|
||||||
|
}
|
||||||
|
if (this->autoscroll) {
|
||||||
|
int scroll_pos = max(0, log->used - this->vscroll.cap);
|
||||||
|
if (scroll_pos != this->vscroll.pos) {
|
||||||
|
this->vscroll.pos = scroll_pos;
|
||||||
|
|
||||||
|
/* We need a repaint */
|
||||||
|
this->InvalidateWidget(AID_WIDGET_SCROLLBAR);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
last_vscroll_pos = this->vscroll.pos;
|
||||||
|
|
||||||
int y = 6;
|
int y = 6;
|
||||||
for (int i = this->vscroll.pos; i < (this->vscroll.cap + this->vscroll.pos); i++) {
|
for (int i = this->vscroll.pos; i < (this->vscroll.cap + this->vscroll.pos) && i < log->used; i++) {
|
||||||
uint pos = (log->count + log->pos - i) % log->count;
|
uint pos = (i + log->pos + 1 - log->used + log->count) % log->count;
|
||||||
if (log->lines[pos] == NULL) break;
|
if (log->lines[pos] == NULL) break;
|
||||||
|
|
||||||
TextColour colour;
|
TextColour colour;
|
||||||
@@ -693,6 +725,8 @@ struct AIDebugWindow : public Window {
|
|||||||
this->RaiseWidget(ai_debug_company + AID_WIDGET_COMPANY_BUTTON_START);
|
this->RaiseWidget(ai_debug_company + AID_WIDGET_COMPANY_BUTTON_START);
|
||||||
ai_debug_company = show_ai;
|
ai_debug_company = show_ai;
|
||||||
this->LowerWidget(ai_debug_company + AID_WIDGET_COMPANY_BUTTON_START);
|
this->LowerWidget(ai_debug_company + AID_WIDGET_COMPANY_BUTTON_START);
|
||||||
|
this->autoscroll = true;
|
||||||
|
this->last_vscroll_pos = this->vscroll.pos;
|
||||||
this->SetDirty();
|
this->SetDirty();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -726,6 +760,7 @@ struct AIDebugWindow : public Window {
|
|||||||
virtual void OnResize(Point new_size, Point delta)
|
virtual void OnResize(Point new_size, Point delta)
|
||||||
{
|
{
|
||||||
this->vscroll.cap += delta.y / (int)this->resize.step_height;
|
this->vscroll.cap += delta.y / (int)this->resize.step_height;
|
||||||
|
SetVScrollCount(this, this->vscroll.count); // vscroll.pos should be in a valid range
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -734,6 +769,7 @@ CompanyID AIDebugWindow::ai_debug_company = INVALID_COMPANY;
|
|||||||
static const Widget _ai_debug_widgets[] = {
|
static const Widget _ai_debug_widgets[] = {
|
||||||
{ WWT_CLOSEBOX, RESIZE_NONE, COLOUR_GREY, 0, 10, 0, 13, STR_00C5, STR_018B_CLOSE_WINDOW}, // AID_WIDGET_CLOSEBOX
|
{ WWT_CLOSEBOX, RESIZE_NONE, COLOUR_GREY, 0, 10, 0, 13, STR_00C5, STR_018B_CLOSE_WINDOW}, // AID_WIDGET_CLOSEBOX
|
||||||
{ WWT_CAPTION, RESIZE_RIGHT, COLOUR_GREY, 11, 298, 0, 13, STR_AI_DEBUG, STR_018C_WINDOW_TITLE_DRAG_THIS}, // AID_WIDGET_CAPTION
|
{ WWT_CAPTION, RESIZE_RIGHT, COLOUR_GREY, 11, 298, 0, 13, STR_AI_DEBUG, STR_018C_WINDOW_TITLE_DRAG_THIS}, // AID_WIDGET_CAPTION
|
||||||
|
{ WWT_STICKYBOX, RESIZE_LR, COLOUR_GREY, 287, 298, 0, 13, 0x0, STR_STICKY_BUTTON }, // AID_WIDGET_STICKY
|
||||||
{ WWT_PANEL, RESIZE_RIGHT, COLOUR_GREY, 0, 298, 14, 40, 0x0, STR_NULL}, // AID_WIDGET_VIEW
|
{ WWT_PANEL, RESIZE_RIGHT, COLOUR_GREY, 0, 298, 14, 40, 0x0, STR_NULL}, // AID_WIDGET_VIEW
|
||||||
|
|
||||||
{ WWT_PANEL, RESIZE_RIGHT, COLOUR_GREY, 0, 149, 41, 60, 0x0, STR_AI_DEBUG_NAME_TIP}, // AID_WIDGET_NAME_TEXT
|
{ WWT_PANEL, RESIZE_RIGHT, COLOUR_GREY, 0, 149, 41, 60, 0x0, STR_AI_DEBUG_NAME_TIP}, // AID_WIDGET_NAME_TEXT
|
||||||
@@ -771,7 +807,7 @@ static const Widget _ai_debug_widgets[] = {
|
|||||||
static const WindowDesc _ai_debug_desc(
|
static const WindowDesc _ai_debug_desc(
|
||||||
WDP_AUTO, WDP_AUTO, 299, 241, 299, 241,
|
WDP_AUTO, WDP_AUTO, 299, 241, 299, 241,
|
||||||
WC_AI_DEBUG, WC_NONE,
|
WC_AI_DEBUG, WC_NONE,
|
||||||
WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET | WDF_RESIZABLE,
|
WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET | WDF_STICKY_BUTTON | WDF_RESIZABLE,
|
||||||
_ai_debug_widgets
|
_ai_debug_widgets
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@@ -36,6 +36,7 @@ AIFileInfo::~AIFileInfo()
|
|||||||
free((void *)this->description);
|
free((void *)this->description);
|
||||||
free((void *)this->date);
|
free((void *)this->date);
|
||||||
free((void *)this->instance_name);
|
free((void *)this->instance_name);
|
||||||
|
free((void *)this->url);
|
||||||
free(this->main_script);
|
free(this->main_script);
|
||||||
free(this->SQ_instance);
|
free(this->SQ_instance);
|
||||||
}
|
}
|
||||||
@@ -98,6 +99,11 @@ bool AIFileInfo::CheckMethod(const char *name) const
|
|||||||
if (!info->engine->CallIntegerMethod(*info->SQ_instance, "GetVersion", &info->version)) return SQ_ERROR;
|
if (!info->engine->CallIntegerMethod(*info->SQ_instance, "GetVersion", &info->version)) return SQ_ERROR;
|
||||||
if (!info->engine->CallStringMethodStrdup(*info->SQ_instance, "CreateInstance", &info->instance_name)) return SQ_ERROR;
|
if (!info->engine->CallStringMethodStrdup(*info->SQ_instance, "CreateInstance", &info->instance_name)) return SQ_ERROR;
|
||||||
|
|
||||||
|
/* The GetURL function is optional. */
|
||||||
|
if (info->engine->MethodExists(*info->SQ_instance, "GetURL")) {
|
||||||
|
if (!info->engine->CallStringMethodStrdup(*info->SQ_instance, "GetURL", &info->url)) return SQ_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -125,6 +131,12 @@ bool AIFileInfo::CheckMethod(const char *name) const
|
|||||||
} else {
|
} else {
|
||||||
info->min_loadable_version = info->GetVersion();
|
info->min_loadable_version = info->GetVersion();
|
||||||
}
|
}
|
||||||
|
/* When there is an UseAsRandomAI function, call it. */
|
||||||
|
if (info->engine->MethodExists(*info->SQ_instance, "UseAsRandomAI")) {
|
||||||
|
if (!info->engine->CallBoolMethod(*info->SQ_instance, "UseAsRandomAI", &info->use_as_random)) return SQ_ERROR;
|
||||||
|
} else {
|
||||||
|
info->use_as_random = true;
|
||||||
|
}
|
||||||
|
|
||||||
/* Remove the link to the real instance, else it might get deleted by RegisterAI() */
|
/* Remove the link to the real instance, else it might get deleted by RegisterAI() */
|
||||||
sq_setinstanceup(vm, 2, NULL);
|
sq_setinstanceup(vm, 2, NULL);
|
||||||
|
@@ -41,7 +41,7 @@ public:
|
|||||||
friend class AIInfo;
|
friend class AIInfo;
|
||||||
friend class AILibrary;
|
friend class AILibrary;
|
||||||
|
|
||||||
AIFileInfo() : SQ_instance(NULL), main_script(NULL), author(NULL), name(NULL), short_name(NULL), description(NULL), date(NULL), instance_name(NULL) {};
|
AIFileInfo() : SQ_instance(NULL), main_script(NULL), author(NULL), name(NULL), short_name(NULL), description(NULL), date(NULL), instance_name(NULL), url(NULL) {};
|
||||||
~AIFileInfo();
|
~AIFileInfo();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -84,6 +84,11 @@ public:
|
|||||||
*/
|
*/
|
||||||
const char *GetInstanceName() const { return this->instance_name; }
|
const char *GetInstanceName() const { return this->instance_name; }
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the website for this script.
|
||||||
|
*/
|
||||||
|
const char *GetURL() const { return this->url; }
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the filename of the main.nut script.
|
* Get the filename of the main.nut script.
|
||||||
*/
|
*/
|
||||||
@@ -111,6 +116,7 @@ private:
|
|||||||
const char *date;
|
const char *date;
|
||||||
const char *instance_name;
|
const char *instance_name;
|
||||||
int version;
|
int version;
|
||||||
|
const char *url;
|
||||||
};
|
};
|
||||||
|
|
||||||
class AIInfo : public AIFileInfo {
|
class AIInfo : public AIFileInfo {
|
||||||
@@ -155,9 +161,15 @@ public:
|
|||||||
*/
|
*/
|
||||||
int GetSettingDefaultValue(const char *name) const;
|
int GetSettingDefaultValue(const char *name) const;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Use this AI as a random AI.
|
||||||
|
*/
|
||||||
|
bool UseAsRandomAI() const { return this->use_as_random; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
AIConfigItemList config_list;
|
AIConfigItemList config_list;
|
||||||
int min_loadable_version;
|
int min_loadable_version;
|
||||||
|
bool use_as_random;
|
||||||
};
|
};
|
||||||
|
|
||||||
class AILibrary : public AIFileInfo {
|
class AILibrary : public AIFileInfo {
|
||||||
|
@@ -31,7 +31,7 @@ class DummyAI extends AIController {
|
|||||||
function Start() { \n\
|
function Start() { \n\
|
||||||
AILog.Error(\"No suitable AI found to load.\"); \n\
|
AILog.Error(\"No suitable AI found to load.\"); \n\
|
||||||
AILog.Error(\"This AI is a dummy AI and won't do anything.\"); \n\
|
AILog.Error(\"This AI is a dummy AI and won't do anything.\"); \n\
|
||||||
AILog.Error(\"You can download several via the 'Online Content' system.\"); \n\
|
AILog.Error(\"You can download several AIs via the 'Online Content' system.\"); \n\
|
||||||
} \n\
|
} \n\
|
||||||
} \n\
|
} \n\
|
||||||
");
|
");
|
||||||
|
@@ -19,6 +19,7 @@
|
|||||||
#define DEFINE_SCRIPT_FILES
|
#define DEFINE_SCRIPT_FILES
|
||||||
|
|
||||||
#include "ai_info.hpp"
|
#include "ai_info.hpp"
|
||||||
|
#include "ai_config.hpp"
|
||||||
#include "ai_storage.hpp"
|
#include "ai_storage.hpp"
|
||||||
#include "ai_instance.hpp"
|
#include "ai_instance.hpp"
|
||||||
#include "ai_gui.hpp"
|
#include "ai_gui.hpp"
|
||||||
@@ -59,6 +60,7 @@
|
|||||||
#include "api/ai_railtypelist.hpp.sq"
|
#include "api/ai_railtypelist.hpp.sq"
|
||||||
#include "api/ai_road.hpp.sq"
|
#include "api/ai_road.hpp.sq"
|
||||||
#include "api/ai_sign.hpp.sq"
|
#include "api/ai_sign.hpp.sq"
|
||||||
|
#include "api/ai_signlist.hpp.sq"
|
||||||
#include "api/ai_station.hpp.sq"
|
#include "api/ai_station.hpp.sq"
|
||||||
#include "api/ai_stationlist.hpp.sq"
|
#include "api/ai_stationlist.hpp.sq"
|
||||||
#include "api/ai_subsidy.hpp.sq"
|
#include "api/ai_subsidy.hpp.sq"
|
||||||
@@ -98,6 +100,7 @@ AIInstance::AIInstance(AIInfo *info) :
|
|||||||
instance(NULL),
|
instance(NULL),
|
||||||
is_started(false),
|
is_started(false),
|
||||||
is_dead(false),
|
is_dead(false),
|
||||||
|
is_save_data_on_stack(false),
|
||||||
suspend(0),
|
suspend(0),
|
||||||
callback(NULL)
|
callback(NULL)
|
||||||
{
|
{
|
||||||
@@ -135,10 +138,6 @@ AIInstance::AIInstance(AIInfo *info) :
|
|||||||
|
|
||||||
/* Register the API functions and classes */
|
/* Register the API functions and classes */
|
||||||
this->RegisterAPI();
|
this->RegisterAPI();
|
||||||
|
|
||||||
/* The topmost stack item is true if there is data from a savegame
|
|
||||||
* and false otherwise. */
|
|
||||||
sq_pushbool(this->engine->vm, false);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
AIInstance::~AIInstance()
|
AIInstance::~AIInstance()
|
||||||
@@ -211,6 +210,7 @@ void AIInstance::RegisterAPI()
|
|||||||
SQAIRailTypeList_Register(this->engine);
|
SQAIRailTypeList_Register(this->engine);
|
||||||
SQAIRoad_Register(this->engine);
|
SQAIRoad_Register(this->engine);
|
||||||
SQAISign_Register(this->engine);
|
SQAISign_Register(this->engine);
|
||||||
|
SQAISignList_Register(this->engine);
|
||||||
SQAIStation_Register(this->engine);
|
SQAIStation_Register(this->engine);
|
||||||
SQAIStationList_Register(this->engine);
|
SQAIStationList_Register(this->engine);
|
||||||
SQAIStationList_Vehicle_Register(this->engine);
|
SQAIStationList_Vehicle_Register(this->engine);
|
||||||
@@ -255,7 +255,16 @@ void AIInstance::Died()
|
|||||||
this->engine = NULL;
|
this->engine = NULL;
|
||||||
|
|
||||||
ShowAIDebugWindow(_current_company);
|
ShowAIDebugWindow(_current_company);
|
||||||
ShowErrorMessage(INVALID_STRING_ID, STR_AI_PLEASE_REPORT_CRASH, 0, 0);
|
|
||||||
|
const AIInfo *info = AIConfig::GetConfig(_current_company)->GetInfo();
|
||||||
|
if (info != NULL) {
|
||||||
|
ShowErrorMessage(INVALID_STRING_ID, STR_AI_PLEASE_REPORT_CRASH, 0, 0);
|
||||||
|
|
||||||
|
if (info->GetURL() != NULL) {
|
||||||
|
AILog::Info("Please report the error to the following URL:");
|
||||||
|
AILog::Info(info->GetURL());
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void AIInstance::GameLoop()
|
void AIInstance::GameLoop()
|
||||||
@@ -274,6 +283,10 @@ void AIInstance::GameLoop()
|
|||||||
|
|
||||||
/* If there is a callback to call, call that first */
|
/* If there is a callback to call, call that first */
|
||||||
if (this->callback != NULL) {
|
if (this->callback != NULL) {
|
||||||
|
if (this->is_save_data_on_stack) {
|
||||||
|
sq_poptop(this->engine->GetVM());
|
||||||
|
this->is_save_data_on_stack = false;
|
||||||
|
}
|
||||||
try {
|
try {
|
||||||
this->callback(this);
|
this->callback(this);
|
||||||
} catch (AI_VMSuspend e) {
|
} catch (AI_VMSuspend e) {
|
||||||
@@ -292,9 +305,17 @@ void AIInstance::GameLoop()
|
|||||||
AIObject::SetAllowDoCommand(false);
|
AIObject::SetAllowDoCommand(false);
|
||||||
/* Run the constructor if it exists. Don't allow any DoCommands in it. */
|
/* Run the constructor if it exists. Don't allow any DoCommands in it. */
|
||||||
if (this->engine->MethodExists(*this->instance, "constructor")) {
|
if (this->engine->MethodExists(*this->instance, "constructor")) {
|
||||||
if (!this->engine->CallMethod(*this->instance, "constructor")) { this->Died(); return; }
|
if (!this->engine->CallMethod(*this->instance, "constructor", 100000) || this->engine->IsSuspended()) {
|
||||||
|
if (this->engine->IsSuspended()) AILog::Error("This AI took too long to initialize. AI is not started.");
|
||||||
|
this->Died();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!this->CallLoad() || this->engine->IsSuspended()) {
|
||||||
|
if (this->engine->IsSuspended()) AILog::Error("This AI took too long in the Load function. AI is not started.");
|
||||||
|
this->Died();
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
if (!this->CallLoad()) { this->Died(); return; }
|
|
||||||
AIObject::SetAllowDoCommand(true);
|
AIObject::SetAllowDoCommand(true);
|
||||||
/* Start the AI by calling Start() */
|
/* Start the AI by calling Start() */
|
||||||
if (!this->engine->CallMethod(*this->instance, "Start", _settings_game.ai.ai_max_opcode_till_suspend) || !this->engine->IsSuspended()) this->Died();
|
if (!this->engine->CallMethod(*this->instance, "Start", _settings_game.ai.ai_max_opcode_till_suspend) || !this->engine->IsSuspended()) this->Died();
|
||||||
@@ -306,6 +327,10 @@ void AIInstance::GameLoop()
|
|||||||
this->is_started = true;
|
this->is_started = true;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
if (this->is_save_data_on_stack) {
|
||||||
|
sq_poptop(this->engine->GetVM());
|
||||||
|
this->is_save_data_on_stack = false;
|
||||||
|
}
|
||||||
|
|
||||||
/* Continue the VM */
|
/* Continue the VM */
|
||||||
try {
|
try {
|
||||||
@@ -524,20 +549,14 @@ void AIInstance::Save()
|
|||||||
}
|
}
|
||||||
|
|
||||||
HSQUIRRELVM vm = this->engine->GetVM();
|
HSQUIRRELVM vm = this->engine->GetVM();
|
||||||
if (!this->is_started) {
|
if (this->is_save_data_on_stack) {
|
||||||
SQBool res;
|
|
||||||
sq_getbool(vm, -1, &res);
|
|
||||||
if (!res) {
|
|
||||||
SaveEmpty();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
/* Push the loaded savegame data to the top of the stack. */
|
|
||||||
sq_push(vm, -2);
|
|
||||||
_ai_sl_byte = 1;
|
_ai_sl_byte = 1;
|
||||||
SlObject(NULL, _ai_byte);
|
SlObject(NULL, _ai_byte);
|
||||||
/* Save the data that was just loaded. */
|
/* Save the data that was just loaded. */
|
||||||
SaveObject(vm, -1, AISAVE_MAX_DEPTH, false);
|
SaveObject(vm, -1, AISAVE_MAX_DEPTH, false);
|
||||||
sq_poptop(vm);
|
} else if (!this->is_started) {
|
||||||
|
SaveEmpty();
|
||||||
|
return;
|
||||||
} else if (this->engine->MethodExists(*this->instance, "Save")) {
|
} else if (this->engine->MethodExists(*this->instance, "Save")) {
|
||||||
HSQOBJECT savedata;
|
HSQOBJECT savedata;
|
||||||
/* We don't want to be interrupted during the save function. */
|
/* We don't want to be interrupted during the save function. */
|
||||||
@@ -554,6 +573,7 @@ void AIInstance::Save()
|
|||||||
if (!sq_istable(savedata)) {
|
if (!sq_istable(savedata)) {
|
||||||
AILog::Error("Save function should return a table.");
|
AILog::Error("Save function should return a table.");
|
||||||
SaveEmpty();
|
SaveEmpty();
|
||||||
|
this->engine->CrashOccurred();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
sq_pushobject(vm, savedata);
|
sq_pushobject(vm, savedata);
|
||||||
@@ -561,11 +581,11 @@ void AIInstance::Save()
|
|||||||
_ai_sl_byte = 1;
|
_ai_sl_byte = 1;
|
||||||
SlObject(NULL, _ai_byte);
|
SlObject(NULL, _ai_byte);
|
||||||
SaveObject(vm, -1, AISAVE_MAX_DEPTH, false);
|
SaveObject(vm, -1, AISAVE_MAX_DEPTH, false);
|
||||||
|
this->is_save_data_on_stack = true;
|
||||||
} else {
|
} else {
|
||||||
_ai_sl_byte = 0;
|
SaveEmpty();
|
||||||
SlObject(NULL, _ai_byte);
|
this->engine->CrashOccurred();
|
||||||
}
|
}
|
||||||
sq_pop(vm, 1);
|
|
||||||
} else {
|
} else {
|
||||||
AILog::Warning("Save function is not implemented");
|
AILog::Warning("Save function is not implemented");
|
||||||
_ai_sl_byte = 0;
|
_ai_sl_byte = 0;
|
||||||
@@ -652,21 +672,18 @@ void AIInstance::Load(int version)
|
|||||||
/* Check if there was anything saved at all. */
|
/* Check if there was anything saved at all. */
|
||||||
if (_ai_sl_byte == 0) return;
|
if (_ai_sl_byte == 0) return;
|
||||||
|
|
||||||
/* First remove the value "false" since we have data to load. */
|
|
||||||
sq_poptop(vm);
|
|
||||||
sq_pushinteger(vm, version);
|
sq_pushinteger(vm, version);
|
||||||
LoadObjects(vm);
|
LoadObjects(vm);
|
||||||
sq_pushbool(vm, true);
|
this->is_save_data_on_stack = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool AIInstance::CallLoad()
|
bool AIInstance::CallLoad()
|
||||||
{
|
{
|
||||||
HSQUIRRELVM vm = this->engine->GetVM();
|
HSQUIRRELVM vm = this->engine->GetVM();
|
||||||
/* Is there save data that we should load? */
|
/* Is there save data that we should load? */
|
||||||
SQBool res;
|
if (!this->is_save_data_on_stack) return true;
|
||||||
sq_getbool(vm, -1, &res);
|
/* Whatever happens, after CallLoad the savegame data is removed from the stack. */
|
||||||
sq_poptop(vm);
|
this->is_save_data_on_stack = false;
|
||||||
if (!res) return true;
|
|
||||||
|
|
||||||
if (!this->engine->MethodExists(*this->instance, "Load")) {
|
if (!this->engine->MethodExists(*this->instance, "Load")) {
|
||||||
AILog::Warning("Loading failed: there was data for the AI to load, but the AI does not have a Load() function.");
|
AILog::Warning("Loading failed: there was data for the AI to load, but the AI does not have a Load() function.");
|
||||||
@@ -690,7 +707,7 @@ bool AIInstance::CallLoad()
|
|||||||
|
|
||||||
/* Call the AI load function. sq_call removes the arguments (but not the
|
/* Call the AI load function. sq_call removes the arguments (but not the
|
||||||
* function pointer) from the stack. */
|
* function pointer) from the stack. */
|
||||||
if (SQ_FAILED(sq_call(vm, 3, SQFalse, SQFalse))) return false;
|
if (SQ_FAILED(sq_call(vm, 3, SQFalse, SQFalse, 100000))) return false;
|
||||||
|
|
||||||
/* Pop 1) The version, 2) the savegame data, 3) the object instance, 4) the function pointer. */
|
/* Pop 1) The version, 2) the savegame data, 3) the object instance, 4) the function pointer. */
|
||||||
sq_pop(vm, 4);
|
sq_pop(vm, 4);
|
||||||
|
@@ -30,6 +30,7 @@ private:
|
|||||||
|
|
||||||
class AIInstance {
|
class AIInstance {
|
||||||
public:
|
public:
|
||||||
|
friend class AIObject;
|
||||||
AIInstance(class AIInfo *info);
|
AIInstance(class AIInfo *info);
|
||||||
~AIInstance();
|
~AIInstance();
|
||||||
|
|
||||||
@@ -117,6 +118,7 @@ private:
|
|||||||
|
|
||||||
bool is_started;
|
bool is_started;
|
||||||
bool is_dead;
|
bool is_dead;
|
||||||
|
bool is_save_data_on_stack;
|
||||||
int suspend;
|
int suspend;
|
||||||
AISuspendCallbackProc *callback;
|
AISuspendCallbackProc *callback;
|
||||||
|
|
||||||
|
@@ -153,7 +153,7 @@ AIScanner::AIScanner() :
|
|||||||
|
|
||||||
/* Create the dummy AI */
|
/* Create the dummy AI */
|
||||||
this->engine->ResetCrashed();
|
this->engine->ResetCrashed();
|
||||||
strcpy(this->main_script, "%_dummy");
|
strecpy(this->main_script, "%_dummy", lastof(this->main_script));
|
||||||
extern void AI_CreateAIInfoDummy(HSQUIRRELVM vm);
|
extern void AI_CreateAIInfoDummy(HSQUIRRELVM vm);
|
||||||
AI_CreateAIInfoDummy(this->engine->GetVM());
|
AI_CreateAIInfoDummy(this->engine->GetVM());
|
||||||
}
|
}
|
||||||
@@ -345,20 +345,31 @@ void AIScanner::RegisterAI(AIInfo *info)
|
|||||||
|
|
||||||
AIInfo *AIScanner::SelectRandomAI()
|
AIInfo *AIScanner::SelectRandomAI()
|
||||||
{
|
{
|
||||||
if (this->info_single_list.size() == 0) {
|
uint num_random_ais = 0;
|
||||||
|
for (AIInfoList::iterator it = this->info_single_list.begin(); it != this->info_single_list.end(); it++) {
|
||||||
|
if (it->second->UseAsRandomAI()) num_random_ais++;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (num_random_ais == 0) {
|
||||||
DEBUG(ai, 0, "No suitable AI found, loading 'dummy' AI.");
|
DEBUG(ai, 0, "No suitable AI found, loading 'dummy' AI.");
|
||||||
return this->info_dummy;
|
return this->info_dummy;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Find a random AI */
|
/* Find a random AI */
|
||||||
uint pos;
|
uint pos;
|
||||||
if (_networking) pos = InteractiveRandomRange((uint16)this->info_single_list.size());
|
if (_networking) {
|
||||||
else pos = RandomRange((uint16)this->info_single_list.size());
|
pos = InteractiveRandomRange(num_random_ais);
|
||||||
|
} else {
|
||||||
|
pos = RandomRange(num_random_ais);
|
||||||
|
}
|
||||||
|
|
||||||
/* Find the Nth item from the array */
|
/* Find the Nth item from the array */
|
||||||
AIInfoList::iterator it = this->info_single_list.begin();
|
AIInfoList::iterator it = this->info_single_list.begin();
|
||||||
for (; pos > 0; pos--) it++;
|
while (!it->second->UseAsRandomAI()) it++;
|
||||||
AIInfoList::iterator first_it = it;
|
for (; pos > 0; pos--) {
|
||||||
|
it++;
|
||||||
|
while (!it->second->UseAsRandomAI()) it++;
|
||||||
|
}
|
||||||
return (*it).second;
|
return (*it).second;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -401,7 +412,7 @@ AIInfo *AIScanner::FindInfo(const char *nameParam, int versionParam)
|
|||||||
snprintf(ai_name_compare, sizeof(ai_name_compare), "%s", (*it).second->GetName());
|
snprintf(ai_name_compare, sizeof(ai_name_compare), "%s", (*it).second->GetName());
|
||||||
strtolower(ai_name_compare);
|
strtolower(ai_name_compare);
|
||||||
|
|
||||||
if (strcasecmp(ai_name, ai_name_compare) == 0 && (*it).second->CanLoadFromVersion(versionParam)) {
|
if (strcasecmp(ai_name, ai_name_compare) == 0 && (*it).second->CanLoadFromVersion(versionParam) && (version == -1 || (*it).second->GetVersion() > version)) {
|
||||||
version = (*it).second->GetVersion();
|
version = (*it).second->GetVersion();
|
||||||
info = (*it).second;
|
info = (*it).second;
|
||||||
}
|
}
|
||||||
|
@@ -31,7 +31,6 @@ SHORT_NAMES = NO
|
|||||||
JAVADOC_AUTOBRIEF = YES
|
JAVADOC_AUTOBRIEF = YES
|
||||||
QT_AUTOBRIEF = NO
|
QT_AUTOBRIEF = NO
|
||||||
MULTILINE_CPP_IS_BRIEF = NO
|
MULTILINE_CPP_IS_BRIEF = NO
|
||||||
DETAILS_AT_TOP = NO
|
|
||||||
INHERIT_DOCS = YES
|
INHERIT_DOCS = YES
|
||||||
SEPARATE_MEMBER_PAGES = NO
|
SEPARATE_MEMBER_PAGES = NO
|
||||||
TAB_SIZE = 2
|
TAB_SIZE = 2
|
||||||
|
@@ -8,12 +8,21 @@
|
|||||||
#include "../../company_func.h"
|
#include "../../company_func.h"
|
||||||
#include "../../command_type.h"
|
#include "../../command_type.h"
|
||||||
#include "../../town.h"
|
#include "../../town.h"
|
||||||
|
#include "../../economy_func.h"
|
||||||
|
|
||||||
/* static */ bool AIAirport::IsValidAirportType(AirportType type)
|
/* static */ bool AIAirport::IsValidAirportType(AirportType type)
|
||||||
{
|
{
|
||||||
return type >= AT_SMALL && type <= AT_HELISTATION && HasBit(::GetValidAirports(), type);
|
return type >= AT_SMALL && type <= AT_HELISTATION && HasBit(::GetValidAirports(), type);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* static */ Money AIAirport::GetPrice(AirportType type)
|
||||||
|
{
|
||||||
|
if (!IsValidAirportType(type)) return -1;
|
||||||
|
|
||||||
|
const AirportFTAClass *afc = ::GetAirport(type);
|
||||||
|
return _price.build_airport * afc->size_x * afc->size_y;
|
||||||
|
}
|
||||||
|
|
||||||
/* static */ bool AIAirport::IsHangarTile(TileIndex tile)
|
/* static */ bool AIAirport::IsHangarTile(TileIndex tile)
|
||||||
{
|
{
|
||||||
if (!::IsValidTile(tile)) return false;
|
if (!::IsValidTile(tile)) return false;
|
||||||
|
@@ -53,6 +53,13 @@ public:
|
|||||||
*/
|
*/
|
||||||
static bool IsValidAirportType(AirportType type);
|
static bool IsValidAirportType(AirportType type);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the cost to build this AirportType.
|
||||||
|
* @param type The AirportType to check.
|
||||||
|
* @return The cost of building this AirportType.
|
||||||
|
*/
|
||||||
|
static Money GetPrice(AirportType type);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Checks whether the given tile is actually a tile with a hangar.
|
* Checks whether the given tile is actually a tile with a hangar.
|
||||||
* @param tile The tile to check.
|
* @param tile The tile to check.
|
||||||
@@ -122,7 +129,7 @@ public:
|
|||||||
* @exception AIError::ERR_FLAT_LAND_REQUIRED
|
* @exception AIError::ERR_FLAT_LAND_REQUIRED
|
||||||
* @exception AIError::ERR_LOCAL_AUTHORITY_REFUSES
|
* @exception AIError::ERR_LOCAL_AUTHORITY_REFUSES
|
||||||
* @exception AIStation::ERR_STATION_TOO_LARGE
|
* @exception AIStation::ERR_STATION_TOO_LARGE
|
||||||
* @exception AIStation::ERR_STATION_TOO_CLOSE_TO_OTHER_STATION
|
* @exception AIStation::ERR_STATION_TOO_CLOSE_TO_ANOTHER_STATION
|
||||||
* @return Whether the airport has been/can be build or not.
|
* @return Whether the airport has been/can be build or not.
|
||||||
*/
|
*/
|
||||||
static bool BuildAirport(TileIndex tile, AirportType type, StationID station_id);
|
static bool BuildAirport(TileIndex tile, AirportType type, StationID station_id);
|
||||||
|
@@ -39,6 +39,7 @@ void SQAIAirport_Register(Squirrel *engine) {
|
|||||||
SQAIAirport.DefSQConst(engine, AIAirport::PT_INVALID, "PT_INVALID");
|
SQAIAirport.DefSQConst(engine, AIAirport::PT_INVALID, "PT_INVALID");
|
||||||
|
|
||||||
SQAIAirport.DefSQStaticMethod(engine, &AIAirport::IsValidAirportType, "IsValidAirportType", 2, ".i");
|
SQAIAirport.DefSQStaticMethod(engine, &AIAirport::IsValidAirportType, "IsValidAirportType", 2, ".i");
|
||||||
|
SQAIAirport.DefSQStaticMethod(engine, &AIAirport::GetPrice, "GetPrice", 2, ".i");
|
||||||
SQAIAirport.DefSQStaticMethod(engine, &AIAirport::IsHangarTile, "IsHangarTile", 2, ".i");
|
SQAIAirport.DefSQStaticMethod(engine, &AIAirport::IsHangarTile, "IsHangarTile", 2, ".i");
|
||||||
SQAIAirport.DefSQStaticMethod(engine, &AIAirport::IsAirportTile, "IsAirportTile", 2, ".i");
|
SQAIAirport.DefSQStaticMethod(engine, &AIAirport::IsAirportTile, "IsAirportTile", 2, ".i");
|
||||||
SQAIAirport.DefSQStaticMethod(engine, &AIAirport::GetAirportWidth, "GetAirportWidth", 2, ".i");
|
SQAIAirport.DefSQStaticMethod(engine, &AIAirport::GetAirportWidth, "GetAirportWidth", 2, ".i");
|
||||||
|
@@ -23,10 +23,15 @@
|
|||||||
return ::IsBridgeTile(tile);
|
return ::IsBridgeTile(tile);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* static */ BridgeID AIBridge::GetBridgeID(TileIndex tile)
|
||||||
|
{
|
||||||
|
if (!IsBridgeTile(tile)) return (BridgeID)-1;
|
||||||
|
return (BridgeID)::GetBridgeType(tile);
|
||||||
|
}
|
||||||
|
|
||||||
static void _DoCommandReturnBuildBridge2(class AIInstance *instance)
|
static void _DoCommandReturnBuildBridge2(class AIInstance *instance)
|
||||||
{
|
{
|
||||||
if (!AIBridge::_BuildBridgeRoad2()) {
|
if (!AIBridge::_BuildBridgeRoad2()) {
|
||||||
AIObject::SetLastCommandRes(false);
|
|
||||||
AIInstance::DoCommandReturn(instance);
|
AIInstance::DoCommandReturn(instance);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -39,7 +44,6 @@ static void _DoCommandReturnBuildBridge2(class AIInstance *instance)
|
|||||||
static void _DoCommandReturnBuildBridge1(class AIInstance *instance)
|
static void _DoCommandReturnBuildBridge1(class AIInstance *instance)
|
||||||
{
|
{
|
||||||
if (!AIBridge::_BuildBridgeRoad1()) {
|
if (!AIBridge::_BuildBridgeRoad1()) {
|
||||||
AIObject::SetLastCommandRes(false);
|
|
||||||
AIInstance::DoCommandReturn(instance);
|
AIInstance::DoCommandReturn(instance);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -61,7 +65,7 @@ static void _DoCommandReturnBuildBridge1(class AIInstance *instance)
|
|||||||
switch (vehicle_type) {
|
switch (vehicle_type) {
|
||||||
case AIVehicle::VT_ROAD:
|
case AIVehicle::VT_ROAD:
|
||||||
type |= (TRANSPORT_ROAD << 15);
|
type |= (TRANSPORT_ROAD << 15);
|
||||||
type |= (RoadTypeToRoadTypes((::RoadType)AIObject::GetRoadType()) << 8);
|
type |= (::RoadTypeToRoadTypes((::RoadType)AIObject::GetRoadType()) << 8);
|
||||||
break;
|
break;
|
||||||
case AIVehicle::VT_RAIL:
|
case AIVehicle::VT_RAIL:
|
||||||
type |= (TRANSPORT_RAIL << 15);
|
type |= (TRANSPORT_RAIL << 15);
|
||||||
@@ -80,10 +84,7 @@ static void _DoCommandReturnBuildBridge1(class AIInstance *instance)
|
|||||||
|
|
||||||
AIObject::SetCallbackVariable(0, start);
|
AIObject::SetCallbackVariable(0, start);
|
||||||
AIObject::SetCallbackVariable(1, end);
|
AIObject::SetCallbackVariable(1, end);
|
||||||
if (!AIObject::DoCommand(end, start, type | bridge_id, CMD_BUILD_BRIDGE, NULL, &_DoCommandReturnBuildBridge1)) return false;
|
return AIObject::DoCommand(end, start, type | bridge_id, CMD_BUILD_BRIDGE, NULL, &_DoCommandReturnBuildBridge1);
|
||||||
|
|
||||||
/* In case of test-mode, test if we can build both road pieces */
|
|
||||||
return _BuildBridgeRoad1();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* static */ bool AIBridge::_BuildBridgeRoad1()
|
/* static */ bool AIBridge::_BuildBridgeRoad1()
|
||||||
@@ -95,10 +96,7 @@ static void _DoCommandReturnBuildBridge1(class AIInstance *instance)
|
|||||||
DiagDirection dir_1 = (DiagDirection)((::TileX(start) == ::TileX(end)) ? (::TileY(start) < ::TileY(end) ? DIAGDIR_NW : DIAGDIR_SE) : (::TileX(start) < ::TileX(end) ? DIAGDIR_NE : DIAGDIR_SW));
|
DiagDirection dir_1 = (DiagDirection)((::TileX(start) == ::TileX(end)) ? (::TileY(start) < ::TileY(end) ? DIAGDIR_NW : DIAGDIR_SE) : (::TileX(start) < ::TileX(end) ? DIAGDIR_NE : DIAGDIR_SW));
|
||||||
DiagDirection dir_2 = ::ReverseDiagDir(dir_1);
|
DiagDirection dir_2 = ::ReverseDiagDir(dir_1);
|
||||||
|
|
||||||
if (!AIObject::DoCommand(start + ::TileOffsByDiagDir(dir_1), ::DiagDirToRoadBits(dir_2) | (AIObject::GetRoadType() << 4), 0, CMD_BUILD_ROAD, NULL, &_DoCommandReturnBuildBridge2)) return false;
|
return AIObject::DoCommand(start + ::TileOffsByDiagDir(dir_1), ::DiagDirToRoadBits(dir_2) | (AIObject::GetRoadType() << 4), 0, CMD_BUILD_ROAD, NULL, &_DoCommandReturnBuildBridge2);
|
||||||
|
|
||||||
/* In case of test-mode, test the other road piece too */
|
|
||||||
return _BuildBridgeRoad2();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* static */ bool AIBridge::_BuildBridgeRoad2()
|
/* static */ bool AIBridge::_BuildBridgeRoad2()
|
||||||
|
@@ -51,6 +51,14 @@ public:
|
|||||||
*/
|
*/
|
||||||
static bool IsBridgeTile(TileIndex tile);
|
static bool IsBridgeTile(TileIndex tile);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the BridgeID of a bridge at a given tile.
|
||||||
|
* @param tile The tile to get the BridgeID from.
|
||||||
|
* @pre IsBridgeTile(tile).
|
||||||
|
* @return The BridgeID from the bridge at tile 'tile'.
|
||||||
|
*/
|
||||||
|
static BridgeID GetBridgeID(TileIndex tile);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the name of a bridge.
|
* Get the name of a bridge.
|
||||||
* @param bridge_id The bridge to get the name of.
|
* @param bridge_id The bridge to get the name of.
|
||||||
|
@@ -36,6 +36,7 @@ void SQAIBridge_Register(Squirrel *engine) {
|
|||||||
|
|
||||||
SQAIBridge.DefSQStaticMethod(engine, &AIBridge::IsValidBridge, "IsValidBridge", 2, ".i");
|
SQAIBridge.DefSQStaticMethod(engine, &AIBridge::IsValidBridge, "IsValidBridge", 2, ".i");
|
||||||
SQAIBridge.DefSQStaticMethod(engine, &AIBridge::IsBridgeTile, "IsBridgeTile", 2, ".i");
|
SQAIBridge.DefSQStaticMethod(engine, &AIBridge::IsBridgeTile, "IsBridgeTile", 2, ".i");
|
||||||
|
SQAIBridge.DefSQStaticMethod(engine, &AIBridge::GetBridgeID, "GetBridgeID", 2, ".i");
|
||||||
SQAIBridge.DefSQStaticMethod(engine, &AIBridge::GetName, "GetName", 2, ".i");
|
SQAIBridge.DefSQStaticMethod(engine, &AIBridge::GetName, "GetName", 2, ".i");
|
||||||
SQAIBridge.DefSQStaticMethod(engine, &AIBridge::GetMaxSpeed, "GetMaxSpeed", 2, ".i");
|
SQAIBridge.DefSQStaticMethod(engine, &AIBridge::GetMaxSpeed, "GetMaxSpeed", 2, ".i");
|
||||||
SQAIBridge.DefSQStaticMethod(engine, &AIBridge::GetPrice, "GetPrice", 3, ".ii");
|
SQAIBridge.DefSQStaticMethod(engine, &AIBridge::GetPrice, "GetPrice", 3, ".ii");
|
||||||
|
@@ -18,7 +18,7 @@ public:
|
|||||||
* The classes of cargo (from newgrf_cargo.h).
|
* The classes of cargo (from newgrf_cargo.h).
|
||||||
*/
|
*/
|
||||||
enum CargoClass {
|
enum CargoClass {
|
||||||
CC_PASSENGERS = 1 << 0, //!< Passengers
|
CC_PASSENGERS = 1 << 0, //!< Passengers. Cargos of this class appear at bus stops. Cargos not of this class appear at truck stops.
|
||||||
CC_MAIL = 1 << 1, //!< Mail
|
CC_MAIL = 1 << 1, //!< Mail
|
||||||
CC_EXPRESS = 1 << 2, //!< Express cargo (Goods, Food, Candy, but also possible for passengers)
|
CC_EXPRESS = 1 << 2, //!< Express cargo (Goods, Food, Candy, but also possible for passengers)
|
||||||
CC_ARMOURED = 1 << 3, //!< Armoured cargo (Valuables, Gold, Diamonds)
|
CC_ARMOURED = 1 << 3, //!< Armoured cargo (Valuables, Gold, Diamonds)
|
||||||
@@ -52,6 +52,7 @@ public:
|
|||||||
/**
|
/**
|
||||||
* Gets the string representation of the cargo label.
|
* Gets the string representation of the cargo label.
|
||||||
* @param cargo_type The cargo to get the string representation of.
|
* @param cargo_type The cargo to get the string representation of.
|
||||||
|
* @pre AICargo::IsValidCargo(cargo_type).
|
||||||
* @return The cargo label.
|
* @return The cargo label.
|
||||||
* @note Never use this to check if it is a certain cargo. NewGRF can
|
* @note Never use this to check if it is a certain cargo. NewGRF can
|
||||||
* redefine all of the names.
|
* redefine all of the names.
|
||||||
@@ -60,7 +61,10 @@ public:
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Checks whether the give cargo is a freight or not.
|
* Checks whether the give cargo is a freight or not.
|
||||||
|
* This defines whether the "freight train weight multiplier" will apply to
|
||||||
|
* trains transporting this cargo.
|
||||||
* @param cargo_type The cargo to check on.
|
* @param cargo_type The cargo to check on.
|
||||||
|
* @pre AICargo::IsValidCargo(cargo_type).
|
||||||
* @return True if and only if the cargo is freight.
|
* @return True if and only if the cargo is freight.
|
||||||
*/
|
*/
|
||||||
static bool IsFreight(CargoID cargo_type);
|
static bool IsFreight(CargoID cargo_type);
|
||||||
@@ -68,6 +72,7 @@ public:
|
|||||||
/**
|
/**
|
||||||
* Check if this cargo is in the requested cargo class.
|
* Check if this cargo is in the requested cargo class.
|
||||||
* @param cargo_type The cargo to check on.
|
* @param cargo_type The cargo to check on.
|
||||||
|
* @pre AICargo::IsValidCargo(cargo_type).
|
||||||
* @param cargo_class The class to check for.
|
* @param cargo_class The class to check for.
|
||||||
* @return True if and only if the cargo is in the cargo class.
|
* @return True if and only if the cargo is in the cargo class.
|
||||||
*/
|
*/
|
||||||
@@ -76,6 +81,7 @@ public:
|
|||||||
/**
|
/**
|
||||||
* Get the effect this cargo has on a town.
|
* Get the effect this cargo has on a town.
|
||||||
* @param cargo_type The cargo to check on.
|
* @param cargo_type The cargo to check on.
|
||||||
|
* @pre AICargo::IsValidCargo(cargo_type).
|
||||||
* @return The effect this cargo has on a town, or TE_NONE if it has no effect.
|
* @return The effect this cargo has on a town, or TE_NONE if it has no effect.
|
||||||
*/
|
*/
|
||||||
static TownEffect GetTownEffect(CargoID cargo_type);
|
static TownEffect GetTownEffect(CargoID cargo_type);
|
||||||
@@ -84,6 +90,7 @@ public:
|
|||||||
* Get the income for transporting a piece of cargo over the
|
* Get the income for transporting a piece of cargo over the
|
||||||
* given distance within the specified time.
|
* given distance within the specified time.
|
||||||
* @param cargo_type The cargo to transport.
|
* @param cargo_type The cargo to transport.
|
||||||
|
* @pre AICargo::IsValidCargo(cargo_type).
|
||||||
* @param distance The distance the cargo travels from begin to end.
|
* @param distance The distance the cargo travels from begin to end.
|
||||||
* @param days_in_transit Amount of (game) days the cargo is in transit. The max value of this variable is 637. Any value higher returns the same as 637 would.
|
* @param days_in_transit Amount of (game) days the cargo is in transit. The max value of this variable is 637. Any value higher returns the same as 637 would.
|
||||||
* @return The amount of money that would be earned by this trip.
|
* @return The amount of money that would be earned by this trip.
|
||||||
|
@@ -153,7 +153,8 @@ public:
|
|||||||
* Return the location of a company's HQ.
|
* Return the location of a company's HQ.
|
||||||
* @param company The company the get the HQ of.
|
* @param company The company the get the HQ of.
|
||||||
* @pre ResolveCompanyID(company) != COMPANY_INVALID.
|
* @pre ResolveCompanyID(company) != COMPANY_INVALID.
|
||||||
* @return The tile of the company's HQ, this tile is the most nothern tile of that HQ, or TILE_INVALID if there is no HQ yet.
|
* @return The tile of the company's HQ, this tile is the most nothern tile
|
||||||
|
* of that HQ, or AIMap::TILE_INVALID if there is no HQ yet.
|
||||||
*/
|
*/
|
||||||
static TileIndex GetCompanyHQ(CompanyID company);
|
static TileIndex GetCompanyHQ(CompanyID company);
|
||||||
|
|
||||||
|
@@ -5,6 +5,7 @@
|
|||||||
#include "../../stdafx.h"
|
#include "../../stdafx.h"
|
||||||
#include "../../string_func.h"
|
#include "../../string_func.h"
|
||||||
#include "../../company_base.h"
|
#include "../../company_base.h"
|
||||||
|
#include "../../rev.h"
|
||||||
#include "table/strings.h"
|
#include "table/strings.h"
|
||||||
|
|
||||||
#include "../ai.hpp"
|
#include "../ai.hpp"
|
||||||
@@ -66,6 +67,11 @@ AIController::~AIController()
|
|||||||
return AIConfig::GetConfig(_current_company)->GetSetting(name);
|
return AIConfig::GetConfig(_current_company)->GetSetting(name);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* static */ uint AIController::GetVersion()
|
||||||
|
{
|
||||||
|
return _openttd_newgrf_version;
|
||||||
|
}
|
||||||
|
|
||||||
bool AIController::LoadedLibrary(const char *library_name, int *next_number, char *fake_class_name, int fake_class_name_len)
|
bool AIController::LoadedLibrary(const char *library_name, int *next_number, char *fake_class_name, int fake_class_name_len)
|
||||||
{
|
{
|
||||||
LoadedLibraryList::iterator iter = this->loaded_library.find(library_name);
|
LoadedLibraryList::iterator iter = this->loaded_library.find(library_name);
|
||||||
|
@@ -50,6 +50,18 @@ public:
|
|||||||
*/
|
*/
|
||||||
static int GetSetting(const char *name);
|
static int GetSetting(const char *name);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the OpenTTD version of this executable. The version is formatted
|
||||||
|
* with the bits having the following meaning:
|
||||||
|
* 28-31 major version
|
||||||
|
* 24-27 minor version
|
||||||
|
* 20-23 build
|
||||||
|
* 19 1 if it is a release, 0 if it is not.
|
||||||
|
* 0-18 revision number; 0 when the revision is unknown.
|
||||||
|
* @return The version in newgrf format.
|
||||||
|
*/
|
||||||
|
static uint GetVersion();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Change the minimum amount of time the AI should be put in suspend mode
|
* Change the minimum amount of time the AI should be put in suspend mode
|
||||||
* when you execute a command. Normally in SP this is 1, and in MP it is
|
* when you execute a command. Normally in SP this is 1, and in MP it is
|
||||||
|
@@ -5,10 +5,11 @@
|
|||||||
void SQAIController_Register(Squirrel *engine) {
|
void SQAIController_Register(Squirrel *engine) {
|
||||||
DefSQClass <AIController> SQAIController("AIController");
|
DefSQClass <AIController> SQAIController("AIController");
|
||||||
SQAIController.PreRegister(engine);
|
SQAIController.PreRegister(engine);
|
||||||
SQAIController.DefSQStaticMethod(engine, &AIController::GetTick, "GetTick", 1, "?");
|
SQAIController.DefSQStaticMethod(engine, &AIController::GetTick, "GetTick", 1, ".");
|
||||||
SQAIController.DefSQStaticMethod(engine, &AIController::SetCommandDelay, "SetCommandDelay", 2, "?i");
|
SQAIController.DefSQStaticMethod(engine, &AIController::SetCommandDelay, "SetCommandDelay", 2, ".i");
|
||||||
SQAIController.DefSQStaticMethod(engine, &AIController::Sleep, "Sleep", 2, "?i");
|
SQAIController.DefSQStaticMethod(engine, &AIController::Sleep, "Sleep", 2, ".i");
|
||||||
SQAIController.DefSQStaticMethod(engine, &AIController::GetSetting, "GetSetting", 2, "?s");
|
SQAIController.DefSQStaticMethod(engine, &AIController::GetSetting, "GetSetting", 2, ".s");
|
||||||
SQAIController.DefSQStaticMethod(engine, &AIController::Print, "Print", 3, "?bs");
|
SQAIController.DefSQStaticMethod(engine, &AIController::GetVersion, "GetVersion", 1, ".");
|
||||||
|
SQAIController.DefSQStaticMethod(engine, &AIController::Print, "Print", 3, ".bs");
|
||||||
SQAIController.PostRegister(engine);
|
SQAIController.PostRegister(engine);
|
||||||
}
|
}
|
||||||
|
@@ -25,7 +25,7 @@ AIDepotList::AIDepotList(AITile::TransportType transport_type)
|
|||||||
if (st->owner == ::_current_company) {
|
if (st->owner == ::_current_company) {
|
||||||
const AirportFTAClass *afc = st->Airport();
|
const AirportFTAClass *afc = st->Airport();
|
||||||
for (uint i = 0; i < afc->nof_depots; i++) {
|
for (uint i = 0; i < afc->nof_depots; i++) {
|
||||||
this->AddItem(st->xy + ToTileIndexDiff(afc->airport_depots[i]));
|
this->AddItem(st->airport_tile + ToTileIndexDiff(afc->airport_depots[i]));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -6,9 +6,10 @@
|
|||||||
#include "ai_cargo.hpp"
|
#include "ai_cargo.hpp"
|
||||||
#include "../../company_func.h"
|
#include "../../company_func.h"
|
||||||
#include "../../strings_func.h"
|
#include "../../strings_func.h"
|
||||||
#include "../../aircraft.h"
|
|
||||||
#include "../../vehicle_func.h"
|
#include "../../vehicle_func.h"
|
||||||
#include "../../settings_type.h"
|
#include "../../settings_type.h"
|
||||||
|
#include "../../rail.h"
|
||||||
|
#include "../../engine_base.h"
|
||||||
#include "../../articulated_vehicles.h"
|
#include "../../articulated_vehicles.h"
|
||||||
#include "table/strings.h"
|
#include "table/strings.h"
|
||||||
|
|
||||||
@@ -77,11 +78,8 @@
|
|||||||
} break;
|
} break;
|
||||||
|
|
||||||
case VEH_SHIP:
|
case VEH_SHIP:
|
||||||
return e->u.ship.capacity;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case VEH_AIRCRAFT:
|
case VEH_AIRCRAFT:
|
||||||
return AircraftDefaultCargoCapacity(e->GetDefaultCargoType(), &e->u.air);
|
return e->GetDisplayDefaultCapacity();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default: NOT_REACHED();
|
default: NOT_REACHED();
|
||||||
|
@@ -3,9 +3,11 @@
|
|||||||
/** @file ai_event_types.cpp Implementation of all EventTypes. */
|
/** @file ai_event_types.cpp Implementation of all EventTypes. */
|
||||||
|
|
||||||
#include "ai_event_types.hpp"
|
#include "ai_event_types.hpp"
|
||||||
|
#include "../../command_type.h"
|
||||||
#include "../../strings_func.h"
|
#include "../../strings_func.h"
|
||||||
#include "../../settings_type.h"
|
#include "../../settings_type.h"
|
||||||
#include "../../aircraft.h"
|
#include "../../rail.h"
|
||||||
|
#include "../../engine_base.h"
|
||||||
#include "../../articulated_vehicles.h"
|
#include "../../articulated_vehicles.h"
|
||||||
#include "table/strings.h"
|
#include "table/strings.h"
|
||||||
|
|
||||||
@@ -41,11 +43,8 @@ int32 AIEventEnginePreview::GetCapacity()
|
|||||||
} break;
|
} break;
|
||||||
|
|
||||||
case VEH_SHIP:
|
case VEH_SHIP:
|
||||||
return e->u.ship.capacity;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case VEH_AIRCRAFT:
|
case VEH_AIRCRAFT:
|
||||||
return AircraftDefaultCargoCapacity(e->GetDefaultCargoType(), &e->u.air);
|
return e->GetDisplayDefaultCapacity();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default: NOT_REACHED();
|
default: NOT_REACHED();
|
||||||
|
@@ -35,6 +35,7 @@ public:
|
|||||||
/**
|
/**
|
||||||
* @param vehicle The vehicle that crashed.
|
* @param vehicle The vehicle that crashed.
|
||||||
* @param crash_site Where the vehicle crashed.
|
* @param crash_site Where the vehicle crashed.
|
||||||
|
* @param crash_reason The reason why the vehicle crashed.
|
||||||
*/
|
*/
|
||||||
AIEventVehicleCrashed(VehicleID vehicle, TileIndex crash_site, CrashReason crash_reason) :
|
AIEventVehicleCrashed(VehicleID vehicle, TileIndex crash_site, CrashReason crash_reason) :
|
||||||
AIEvent(AI_ET_VEHICLE_CRASHED),
|
AIEvent(AI_ET_VEHICLE_CRASHED),
|
||||||
|
@@ -86,7 +86,9 @@ public:
|
|||||||
static TileIndex GetLocation(IndustryID industry_id);
|
static TileIndex GetLocation(IndustryID industry_id);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the number of stations around an industry.
|
* Get the number of stations around an industry. All stations that can
|
||||||
|
* service the industry are counted, your own stations but also your
|
||||||
|
* opponents stations.
|
||||||
* @param industry_id The index of the industry.
|
* @param industry_id The index of the industry.
|
||||||
* @pre IsValidIndustry(industry_id).
|
* @pre IsValidIndustry(industry_id).
|
||||||
* @return The number of stations around an industry.
|
* @return The number of stations around an industry.
|
||||||
|
@@ -111,3 +111,24 @@
|
|||||||
uint32 seed = ::InteractiveRandom();
|
uint32 seed = ::InteractiveRandom();
|
||||||
return AIObject::DoCommand(0, industry_type, seed, CMD_BUILD_INDUSTRY);
|
return AIObject::DoCommand(0, industry_type, seed, CMD_BUILD_INDUSTRY);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* static */ bool AIIndustryType::IsBuiltOnWater(IndustryType industry_type)
|
||||||
|
{
|
||||||
|
if (!IsValidIndustryType(industry_type)) return false;
|
||||||
|
|
||||||
|
return (::GetIndustrySpec(industry_type)->behaviour & INDUSTRYBEH_BUILT_ONWATER) != 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* static */ bool AIIndustryType::HasHeliport(IndustryType industry_type)
|
||||||
|
{
|
||||||
|
if (!IsValidIndustryType(industry_type)) return false;
|
||||||
|
|
||||||
|
return (::GetIndustrySpec(industry_type)->behaviour & INDUSTRYBEH_AI_AIRSHIP_ROUTES) != 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* static */ bool AIIndustryType::HasDock(IndustryType industry_type)
|
||||||
|
{
|
||||||
|
if (!IsValidIndustryType(industry_type)) return false;
|
||||||
|
|
||||||
|
return (::GetIndustrySpec(industry_type)->behaviour & INDUSTRYBEH_AI_AIRSHIP_ROUTES) != 0;
|
||||||
|
}
|
||||||
|
@@ -113,6 +113,30 @@ public:
|
|||||||
* @note If true is returned the money is paid, whether a new industry was build or not.
|
* @note If true is returned the money is paid, whether a new industry was build or not.
|
||||||
*/
|
*/
|
||||||
static bool ProspectIndustry(IndustryType industry_type);
|
static bool ProspectIndustry(IndustryType industry_type);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Is this type of industry built on water.
|
||||||
|
* @param industry_type The type of the industry.
|
||||||
|
* @pre IsValidIndustryType(industry_type).
|
||||||
|
* @return True when this type is built on water.
|
||||||
|
*/
|
||||||
|
static bool IsBuiltOnWater(IndustryType industry_type);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Does this type of industry have a heliport?
|
||||||
|
* @param industry_type The type of the industry.
|
||||||
|
* @pre IsValidIndustryType(industry_type).
|
||||||
|
* @return True when this type has a heliport.
|
||||||
|
*/
|
||||||
|
static bool HasHeliport(IndustryType industry_type);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Does this type of industry have a dock?
|
||||||
|
* @param industry_type The type of the industry.
|
||||||
|
* @pre IsValidIndustryType(industry_type).
|
||||||
|
* @return True when this type has a dock.
|
||||||
|
*/
|
||||||
|
static bool HasDock(IndustryType industry_type);
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif /* AI_INDUSTRYTYPE_HPP */
|
#endif /* AI_INDUSTRYTYPE_HPP */
|
||||||
|
@@ -28,6 +28,9 @@ void SQAIIndustryType_Register(Squirrel *engine) {
|
|||||||
SQAIIndustryType.DefSQStaticMethod(engine, &AIIndustryType::CanProspectIndustry, "CanProspectIndustry", 2, ".i");
|
SQAIIndustryType.DefSQStaticMethod(engine, &AIIndustryType::CanProspectIndustry, "CanProspectIndustry", 2, ".i");
|
||||||
SQAIIndustryType.DefSQStaticMethod(engine, &AIIndustryType::BuildIndustry, "BuildIndustry", 3, ".ii");
|
SQAIIndustryType.DefSQStaticMethod(engine, &AIIndustryType::BuildIndustry, "BuildIndustry", 3, ".ii");
|
||||||
SQAIIndustryType.DefSQStaticMethod(engine, &AIIndustryType::ProspectIndustry, "ProspectIndustry", 2, ".i");
|
SQAIIndustryType.DefSQStaticMethod(engine, &AIIndustryType::ProspectIndustry, "ProspectIndustry", 2, ".i");
|
||||||
|
SQAIIndustryType.DefSQStaticMethod(engine, &AIIndustryType::IsBuiltOnWater, "IsBuiltOnWater", 2, ".i");
|
||||||
|
SQAIIndustryType.DefSQStaticMethod(engine, &AIIndustryType::HasHeliport, "HasHeliport", 2, ".i");
|
||||||
|
SQAIIndustryType.DefSQStaticMethod(engine, &AIIndustryType::HasDock, "HasDock", 2, ".i");
|
||||||
|
|
||||||
SQAIIndustryType.PostRegister(engine);
|
SQAIIndustryType.PostRegister(engine);
|
||||||
}
|
}
|
||||||
|
@@ -32,7 +32,7 @@
|
|||||||
log->lines = CallocT<char *>(80);
|
log->lines = CallocT<char *>(80);
|
||||||
log->type = CallocT<AILog::AILogType>(80);
|
log->type = CallocT<AILog::AILogType>(80);
|
||||||
log->count = 80;
|
log->count = 80;
|
||||||
log->pos = log->count;
|
log->pos = log->count - 1;
|
||||||
log->used = 0;
|
log->used = 0;
|
||||||
}
|
}
|
||||||
LogData *log = (LogData *)AIObject::GetLogPointer();
|
LogData *log = (LogData *)AIObject::GetLogPointer();
|
||||||
|
@@ -17,6 +17,9 @@ public:
|
|||||||
TILE_INVALID = INVALID_TILE, //!< Invalid TileIndex.
|
TILE_INVALID = INVALID_TILE, //!< Invalid TileIndex.
|
||||||
};
|
};
|
||||||
#endif /* DEFINE_SCRIPT_FILES */
|
#endif /* DEFINE_SCRIPT_FILES */
|
||||||
|
#ifdef DOXYGEN_SKIP
|
||||||
|
const static TileIndex TILE_INVALID; //!< Invalid TileIndex.
|
||||||
|
#endif /* DOXYGEN_SKIP */
|
||||||
|
|
||||||
static const char *GetClassName() { return "AIMap"; }
|
static const char *GetClassName() { return "AIMap"; }
|
||||||
|
|
||||||
|
@@ -55,13 +55,13 @@
|
|||||||
DiagDirection to_other_tile = (TileX(t1) == TileX(t2)) ? DIAGDIR_SE : DIAGDIR_SW;
|
DiagDirection to_other_tile = (TileX(t1) == TileX(t2)) ? DIAGDIR_SE : DIAGDIR_SW;
|
||||||
|
|
||||||
/* Determine the reachable tracks from the shared edge */
|
/* Determine the reachable tracks from the shared edge */
|
||||||
TrackBits gtts2 = ::TrackStatusToTrackBits(::GetTileTrackStatus(t2, TRANSPORT_WATER, 0, to_other_tile)) & ::DiagdirReachesTracks(to_other_tile);
|
TrackBits gtts1 = ::TrackStatusToTrackBits(::GetTileTrackStatus(t1, TRANSPORT_WATER, 0, to_other_tile)) & ::DiagdirReachesTracks(to_other_tile);
|
||||||
if (gtts2 == TRACK_BIT_NONE) return false;
|
if (gtts1 == TRACK_BIT_NONE) return false;
|
||||||
|
|
||||||
to_other_tile = ReverseDiagDir(to_other_tile);
|
to_other_tile = ReverseDiagDir(to_other_tile);
|
||||||
TrackBits gtts1 = ::TrackStatusToTrackBits(::GetTileTrackStatus(t1, TRANSPORT_WATER, 0, to_other_tile)) & ::DiagdirReachesTracks(to_other_tile);
|
TrackBits gtts2 = ::TrackStatusToTrackBits(::GetTileTrackStatus(t2, TRANSPORT_WATER, 0, to_other_tile)) & ::DiagdirReachesTracks(to_other_tile);
|
||||||
|
|
||||||
return gtts1 != TRACK_BIT_NONE;
|
return gtts2 != TRACK_BIT_NONE;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* static */ bool AIMarine::BuildWaterDepot(TileIndex tile, TileIndex front)
|
/* static */ bool AIMarine::BuildWaterDepot(TileIndex tile, TileIndex front)
|
||||||
|
@@ -2,6 +2,11 @@
|
|||||||
|
|
||||||
/** @file ai_object.cpp Implementation of AIObject. */
|
/** @file ai_object.cpp Implementation of AIObject. */
|
||||||
|
|
||||||
|
#include "../../stdafx.h"
|
||||||
|
#include <squirrel.h>
|
||||||
|
#include "../../script/squirrel.hpp"
|
||||||
|
#include "../../company_base.h"
|
||||||
|
|
||||||
#include "ai_log.hpp"
|
#include "ai_log.hpp"
|
||||||
#include "table/strings.h"
|
#include "table/strings.h"
|
||||||
#include "../ai.hpp"
|
#include "../ai.hpp"
|
||||||
@@ -157,7 +162,8 @@ void AIObject::SetAllowDoCommand(bool allow)
|
|||||||
|
|
||||||
bool AIObject::GetAllowDoCommand()
|
bool AIObject::GetAllowDoCommand()
|
||||||
{
|
{
|
||||||
return GetStorage()->allow_do_command;
|
Squirrel *squirrel = GetCompany(_current_company)->ai_instance->engine;
|
||||||
|
return GetStorage()->allow_do_command && squirrel->CanSuspend();
|
||||||
}
|
}
|
||||||
|
|
||||||
void *&AIObject::GetEventPointer()
|
void *&AIObject::GetEventPointer()
|
||||||
|
@@ -143,9 +143,24 @@ protected:
|
|||||||
*/
|
*/
|
||||||
static void *&GetEventPointer();
|
static void *&GetEventPointer();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set the cost of the last command.
|
||||||
|
*/
|
||||||
static void SetLastCost(Money last_cost);
|
static void SetLastCost(Money last_cost);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the cost of the last command.
|
||||||
|
*/
|
||||||
static Money GetLastCost();
|
static Money GetLastCost();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set a variable that can be used by callback functions to pass information.
|
||||||
|
*/
|
||||||
static void SetCallbackVariable(int index, int value);
|
static void SetCallbackVariable(int index, int value);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the variable that is used by callback functions to pass information.
|
||||||
|
*/
|
||||||
static int GetCallbackVariable(int index);
|
static int GetCallbackVariable(int index);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
@@ -23,7 +23,10 @@ static OrderType GetOrderTypeByTile(TileIndex t)
|
|||||||
|
|
||||||
switch (::GetTileType(t)) {
|
switch (::GetTileType(t)) {
|
||||||
default: break;
|
default: break;
|
||||||
case MP_STATION: return OT_GOTO_STATION; break;
|
case MP_STATION:
|
||||||
|
if (IsHangar(t)) return OT_GOTO_DEPOT;
|
||||||
|
return OT_GOTO_STATION;
|
||||||
|
break;
|
||||||
case MP_WATER: if (::IsShipDepot(t)) return OT_GOTO_DEPOT; break;
|
case MP_WATER: if (::IsShipDepot(t)) return OT_GOTO_DEPOT; break;
|
||||||
case MP_ROAD: if (::GetRoadTileType(t) == ROAD_TILE_DEPOT) return OT_GOTO_DEPOT; break;
|
case MP_ROAD: if (::GetRoadTileType(t) == ROAD_TILE_DEPOT) return OT_GOTO_DEPOT; break;
|
||||||
case MP_RAILWAY:
|
case MP_RAILWAY:
|
||||||
@@ -43,6 +46,47 @@ static OrderType GetOrderTypeByTile(TileIndex t)
|
|||||||
return AIVehicle::IsValidVehicle(vehicle_id) && order_position >= 0 && (order_position < ::GetVehicle(vehicle_id)->GetNumOrders() || order_position == ORDER_CURRENT);
|
return AIVehicle::IsValidVehicle(vehicle_id) && order_position >= 0 && (order_position < ::GetVehicle(vehicle_id)->GetNumOrders() || order_position == ORDER_CURRENT);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the current order the vehicle is executing. If the current order is in
|
||||||
|
* the order list, return the order from the orderlist. If the current order
|
||||||
|
* was a manual order, return the current order.
|
||||||
|
*/
|
||||||
|
static const Order *ResolveOrder(VehicleID vehicle_id, AIOrder::OrderPosition order_position)
|
||||||
|
{
|
||||||
|
const Vehicle *v = ::GetVehicle(vehicle_id);
|
||||||
|
if (order_position == AIOrder::ORDER_CURRENT) {
|
||||||
|
const Order *order = &v->current_order;
|
||||||
|
if (order->GetType() == OT_GOTO_DEPOT && !(order->GetDepotOrderType() & ODTFB_PART_OF_ORDERS)) return order;
|
||||||
|
order_position = AIOrder::ResolveOrderPosition(vehicle_id, order_position);
|
||||||
|
if (order_position == AIOrder::ORDER_INVALID) return NULL;
|
||||||
|
}
|
||||||
|
return ::GetVehicleOrder(v, order_position);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* static */ bool AIOrder::IsGotoStationOrder(VehicleID vehicle_id, OrderPosition order_position)
|
||||||
|
{
|
||||||
|
if (!IsValidVehicleOrder(vehicle_id, order_position)) return false;
|
||||||
|
|
||||||
|
const Order *order = ::ResolveOrder(vehicle_id, order_position);
|
||||||
|
return order != NULL && order->GetType() == OT_GOTO_STATION;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* static */ bool AIOrder::IsGotoDepotOrder(VehicleID vehicle_id, OrderPosition order_position)
|
||||||
|
{
|
||||||
|
if (!IsValidVehicleOrder(vehicle_id, order_position)) return false;
|
||||||
|
|
||||||
|
const Order *order = ::ResolveOrder(vehicle_id, order_position);
|
||||||
|
return order != NULL && order->GetType() == OT_GOTO_DEPOT;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* static */ bool AIOrder::IsGotoWaypointOrder(VehicleID vehicle_id, OrderPosition order_position)
|
||||||
|
{
|
||||||
|
if (!IsValidVehicleOrder(vehicle_id, order_position)) return false;
|
||||||
|
|
||||||
|
const Order *order = ::ResolveOrder(vehicle_id, order_position);
|
||||||
|
return order != NULL && order->GetType() == OT_GOTO_WAYPOINT;
|
||||||
|
}
|
||||||
|
|
||||||
/* static */ bool AIOrder::IsConditionalOrder(VehicleID vehicle_id, OrderPosition order_position)
|
/* static */ bool AIOrder::IsConditionalOrder(VehicleID vehicle_id, OrderPosition order_position)
|
||||||
{
|
{
|
||||||
if (order_position == ORDER_CURRENT) return false;
|
if (order_position == ORDER_CURRENT) return false;
|
||||||
@@ -52,6 +96,16 @@ static OrderType GetOrderTypeByTile(TileIndex t)
|
|||||||
return order->GetType() == OT_CONDITIONAL;
|
return order->GetType() == OT_CONDITIONAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* static */ bool AIOrder::IsCurrentOrderPartOfOrderList(VehicleID vehicle_id)
|
||||||
|
{
|
||||||
|
if (AIVehicle::IsValidVehicle(vehicle_id)) return false;
|
||||||
|
if (GetOrderCount(vehicle_id) == 0) return false;
|
||||||
|
|
||||||
|
const Order *order = &::GetVehicle(vehicle_id)->current_order;
|
||||||
|
if (order->GetType() != OT_GOTO_DEPOT) return true;
|
||||||
|
return (order->GetDepotOrderType() & ODTFB_PART_OF_ORDERS) != 0;
|
||||||
|
}
|
||||||
|
|
||||||
/* static */ AIOrder::OrderPosition AIOrder::ResolveOrderPosition(VehicleID vehicle_id, OrderPosition order_position)
|
/* static */ AIOrder::OrderPosition AIOrder::ResolveOrderPosition(VehicleID vehicle_id, OrderPosition order_position)
|
||||||
{
|
{
|
||||||
if (!AIVehicle::IsValidVehicle(vehicle_id)) return ORDER_INVALID;
|
if (!AIVehicle::IsValidVehicle(vehicle_id)) return ORDER_INVALID;
|
||||||
@@ -74,7 +128,10 @@ static OrderType GetOrderTypeByTile(TileIndex t)
|
|||||||
(((order_flags & AIOF_NO_UNLOAD) == 0) || ((order_flags & AIOF_NO_LOAD) == 0)) &&
|
(((order_flags & AIOF_NO_UNLOAD) == 0) || ((order_flags & AIOF_NO_LOAD) == 0)) &&
|
||||||
(((order_flags & AIOF_FULL_LOAD_ANY) == 0) || ((order_flags & AIOF_NO_LOAD) == 0));
|
(((order_flags & AIOF_FULL_LOAD_ANY) == 0) || ((order_flags & AIOF_NO_LOAD) == 0));
|
||||||
|
|
||||||
case OT_GOTO_DEPOT: return (order_flags & ~(AIOF_NON_STOP_FLAGS | AIOF_SERVICE_IF_NEEDED)) == 0;
|
case OT_GOTO_DEPOT:
|
||||||
|
return ((order_flags & ~(AIOF_NON_STOP_FLAGS | AIOF_DEPOT_FLAGS)) == 0) &&
|
||||||
|
(((order_flags & AIOF_SERVICE_IF_NEEDED) == 0) || ((order_flags & AIOF_STOP_IN_DEPOT) == 0));
|
||||||
|
|
||||||
case OT_GOTO_WAYPOINT: return (order_flags & ~(AIOF_NON_STOP_FLAGS)) == 0;
|
case OT_GOTO_WAYPOINT: return (order_flags & ~(AIOF_NON_STOP_FLAGS)) == 0;
|
||||||
default: return false;
|
default: return false;
|
||||||
}
|
}
|
||||||
@@ -108,21 +165,41 @@ static OrderType GetOrderTypeByTile(TileIndex t)
|
|||||||
{
|
{
|
||||||
if (!IsValidVehicleOrder(vehicle_id, order_position)) return INVALID_TILE;
|
if (!IsValidVehicleOrder(vehicle_id, order_position)) return INVALID_TILE;
|
||||||
|
|
||||||
const Order *order;
|
const Order *order = ::ResolveOrder(vehicle_id, order_position);
|
||||||
|
if (order == NULL || order->GetType() == OT_CONDITIONAL) return INVALID_TILE;
|
||||||
const Vehicle *v = ::GetVehicle(vehicle_id);
|
const Vehicle *v = ::GetVehicle(vehicle_id);
|
||||||
if (order_position == ORDER_CURRENT) {
|
|
||||||
order = &v->current_order;
|
|
||||||
} else {
|
|
||||||
order = ::GetVehicleOrder(GetVehicle(vehicle_id), order_position);
|
|
||||||
if (order->GetType() == OT_CONDITIONAL) return INVALID_TILE;
|
|
||||||
}
|
|
||||||
|
|
||||||
switch (order->GetType()) {
|
switch (order->GetType()) {
|
||||||
case OT_GOTO_DEPOT:
|
case OT_GOTO_DEPOT: {
|
||||||
if (v->type != VEH_AIRCRAFT) return ::GetDepot(order->GetDestination())->xy;
|
if (v->type != VEH_AIRCRAFT) return ::GetDepot(order->GetDestination())->xy;
|
||||||
/* FALL THROUGH: aircraft's hangars are referenced by StationID, not DepotID */
|
/* Aircraft's hangars are referenced by StationID, not DepotID */
|
||||||
|
const Station *st = ::GetStation(order->GetDestination());
|
||||||
|
const AirportFTAClass *airport = st->Airport();
|
||||||
|
if (airport == NULL || airport->nof_depots == 0) return INVALID_TILE;
|
||||||
|
return st->airport_tile + ::ToTileIndexDiff(st->Airport()->airport_depots[0]);
|
||||||
|
}
|
||||||
|
|
||||||
case OT_GOTO_STATION: return ::GetStation(order->GetDestination())->xy;
|
case OT_GOTO_STATION: {
|
||||||
|
const Station *st = ::GetStation(order->GetDestination());
|
||||||
|
if (st->train_tile != INVALID_TILE) {
|
||||||
|
for (uint i = 0; i < st->trainst_w; i++) {
|
||||||
|
TileIndex t = st->train_tile + TileDiffXY(i, 0);
|
||||||
|
if (st->TileBelongsToRailStation(t)) return t;
|
||||||
|
}
|
||||||
|
} else if (st->dock_tile != INVALID_TILE) {
|
||||||
|
return st->dock_tile;
|
||||||
|
} else if (st->bus_stops != NULL) {
|
||||||
|
return st->bus_stops->xy;
|
||||||
|
} else if (st->truck_stops != NULL) {
|
||||||
|
return st->truck_stops->xy;
|
||||||
|
} else if (st->airport_tile != INVALID_TILE) {
|
||||||
|
const AirportFTAClass *fta = st->Airport();
|
||||||
|
BEGIN_TILE_LOOP(tile, fta->size_x, fta->size_y, st->airport_tile) {
|
||||||
|
if (!::IsHangar(tile)) return tile;
|
||||||
|
} END_TILE_LOOP(tile, fta->size_x, fta->size_y, st->airport_tile)
|
||||||
|
}
|
||||||
|
return INVALID_TILE;
|
||||||
|
}
|
||||||
case OT_GOTO_WAYPOINT: return ::GetWaypoint(order->GetDestination())->xy;
|
case OT_GOTO_WAYPOINT: return ::GetWaypoint(order->GetDestination())->xy;
|
||||||
default: return INVALID_TILE;
|
default: return INVALID_TILE;
|
||||||
}
|
}
|
||||||
@@ -132,19 +209,15 @@ static OrderType GetOrderTypeByTile(TileIndex t)
|
|||||||
{
|
{
|
||||||
if (!IsValidVehicleOrder(vehicle_id, order_position)) return AIOF_INVALID;
|
if (!IsValidVehicleOrder(vehicle_id, order_position)) return AIOF_INVALID;
|
||||||
|
|
||||||
const Order *order;
|
const Order *order = ::ResolveOrder(vehicle_id, order_position);
|
||||||
if (order_position == ORDER_CURRENT) {
|
if (order == NULL || order->GetType() == OT_CONDITIONAL) return AIOF_INVALID;
|
||||||
order = &::GetVehicle(vehicle_id)->current_order;
|
|
||||||
} else {
|
|
||||||
order = ::GetVehicleOrder(GetVehicle(vehicle_id), order_position);
|
|
||||||
if (order->GetType() == OT_CONDITIONAL) return AIOF_INVALID;
|
|
||||||
}
|
|
||||||
|
|
||||||
AIOrderFlags order_flags = AIOF_NONE;
|
AIOrderFlags order_flags = AIOF_NONE;
|
||||||
order_flags |= (AIOrderFlags)order->GetNonStopType();
|
order_flags |= (AIOrderFlags)order->GetNonStopType();
|
||||||
switch (order->GetType()) {
|
switch (order->GetType()) {
|
||||||
case OT_GOTO_DEPOT:
|
case OT_GOTO_DEPOT:
|
||||||
if (order->GetDepotOrderType() & ODTFB_SERVICE) order_flags |= AIOF_SERVICE_IF_NEEDED;
|
if (order->GetDepotOrderType() & ODTFB_SERVICE) order_flags |= AIOF_SERVICE_IF_NEEDED;
|
||||||
|
if (order->GetDepotActionType() & ODATFB_HALT) order_flags |= AIOF_STOP_IN_DEPOT;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case OT_GOTO_STATION:
|
case OT_GOTO_STATION:
|
||||||
@@ -260,9 +333,21 @@ static OrderType GetOrderTypeByTile(TileIndex t)
|
|||||||
|
|
||||||
Order order;
|
Order order;
|
||||||
switch (::GetOrderTypeByTile(destination)) {
|
switch (::GetOrderTypeByTile(destination)) {
|
||||||
case OT_GOTO_DEPOT:
|
case OT_GOTO_DEPOT: {
|
||||||
order.MakeGoToDepot(::GetDepotByTile(destination)->index, (OrderDepotTypeFlags)(ODTFB_PART_OF_ORDERS | ((order_flags & AIOF_SERVICE_IF_NEEDED) ? ODTFB_SERVICE : 0)));
|
OrderDepotTypeFlags odtf = (OrderDepotTypeFlags)(ODTFB_PART_OF_ORDERS | ((order_flags & AIOF_SERVICE_IF_NEEDED) ? ODTFB_SERVICE : 0));
|
||||||
|
OrderDepotActionFlags odaf = (OrderDepotActionFlags)(ODATF_SERVICE_ONLY | ((order_flags & AIOF_STOP_IN_DEPOT) ? ODATFB_HALT : 0));
|
||||||
|
OrderNonStopFlags onsf = (OrderNonStopFlags)((order_flags & AIOF_NON_STOP_INTERMEDIATE) ? ONSF_NO_STOP_AT_INTERMEDIATE_STATIONS : ONSF_STOP_EVERYWHERE);
|
||||||
|
/* Check explicitly if the order is to a station (for aircraft) or
|
||||||
|
* to a depot (other vehicle types). */
|
||||||
|
if (::GetVehicle(vehicle_id)->type == VEH_AIRCRAFT) {
|
||||||
|
if (!::IsTileType(destination, MP_STATION)) return false;
|
||||||
|
order.MakeGoToDepot(::GetStationIndex(destination), odtf, onsf, odaf);
|
||||||
|
} else {
|
||||||
|
if (::IsTileType(destination, MP_STATION)) return false;
|
||||||
|
order.MakeGoToDepot(::GetDepotByTile(destination)->index, odtf, onsf, odaf);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
case OT_GOTO_STATION:
|
case OT_GOTO_STATION:
|
||||||
order.MakeGoToStation(::GetStationIndex(destination));
|
order.MakeGoToStation(::GetStationIndex(destination));
|
||||||
@@ -356,8 +441,11 @@ static void _DoCommandReturnSetOrderFlags(class AIInstance *instance)
|
|||||||
|
|
||||||
switch (order->GetType()) {
|
switch (order->GetType()) {
|
||||||
case OT_GOTO_DEPOT:
|
case OT_GOTO_DEPOT:
|
||||||
if ((current & AIOF_SERVICE_IF_NEEDED) != (order_flags & AIOF_SERVICE_IF_NEEDED)) {
|
if ((current & AIOF_DEPOT_FLAGS) != (order_flags & AIOF_DEPOT_FLAGS)) {
|
||||||
return AIObject::DoCommand(0, vehicle_id | (order_position << 16), MOF_DEPOT_ACTION, CMD_MODIFY_ORDER, NULL, &_DoCommandReturnSetOrderFlags);
|
uint data = DA_ALWAYS_GO;
|
||||||
|
if (order_flags & AIOF_SERVICE_IF_NEEDED) data = DA_SERVICE;
|
||||||
|
if (order_flags & AIOF_STOP_IN_DEPOT) data = DA_STOP;
|
||||||
|
return AIObject::DoCommand(0, vehicle_id | (order_position << 16), (data << 4) | MOF_DEPOT_ACTION, CMD_MODIFY_ORDER, NULL, &_DoCommandReturnSetOrderFlags);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@@ -57,6 +57,8 @@ public:
|
|||||||
|
|
||||||
/** Service the vehicle when needed, otherwise skip this order; only for depots. */
|
/** Service the vehicle when needed, otherwise skip this order; only for depots. */
|
||||||
AIOF_SERVICE_IF_NEEDED = 1 << 2,
|
AIOF_SERVICE_IF_NEEDED = 1 << 2,
|
||||||
|
/** Stop in the depot instead of only go there for servicing; only for depots. */
|
||||||
|
AIOF_STOP_IN_DEPOT = 1 << 3,
|
||||||
|
|
||||||
/** All flags related to non-stop settings. */
|
/** All flags related to non-stop settings. */
|
||||||
AIOF_NON_STOP_FLAGS = AIOF_NON_STOP_INTERMEDIATE | AIOF_NON_STOP_DESTINATION,
|
AIOF_NON_STOP_FLAGS = AIOF_NON_STOP_INTERMEDIATE | AIOF_NON_STOP_DESTINATION,
|
||||||
@@ -64,6 +66,8 @@ public:
|
|||||||
AIOF_UNLOAD_FLAGS = AIOF_TRANSFER | AIOF_UNLOAD | AIOF_NO_UNLOAD,
|
AIOF_UNLOAD_FLAGS = AIOF_TRANSFER | AIOF_UNLOAD | AIOF_NO_UNLOAD,
|
||||||
/** All flags related to loading. */
|
/** All flags related to loading. */
|
||||||
AIOF_LOAD_FLAGS = AIOF_FULL_LOAD | AIOF_FULL_LOAD_ANY | AIOF_NO_LOAD,
|
AIOF_LOAD_FLAGS = AIOF_FULL_LOAD | AIOF_FULL_LOAD_ANY | AIOF_NO_LOAD,
|
||||||
|
/** All flags related to depots. */
|
||||||
|
AIOF_DEPOT_FLAGS = AIOF_SERVICE_IF_NEEDED | AIOF_STOP_IN_DEPOT,
|
||||||
|
|
||||||
/** For marking invalid order flags */
|
/** For marking invalid order flags */
|
||||||
AIOF_INVALID = 0xFFFF,
|
AIOF_INVALID = 0xFFFF,
|
||||||
@@ -114,6 +118,33 @@ public:
|
|||||||
*/
|
*/
|
||||||
static bool IsValidVehicleOrder(VehicleID vehicle_id, OrderPosition order_position);
|
static bool IsValidVehicleOrder(VehicleID vehicle_id, OrderPosition order_position);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Checks whether the given order is a goto-station order.
|
||||||
|
* @param vehicle_id The vehicle to check.
|
||||||
|
* @param order_position The order index to check.
|
||||||
|
* @pre IsValidVehicleOrder(vehicle_id, order_position).
|
||||||
|
* @return True if and only if the order is a goto-station order.
|
||||||
|
*/
|
||||||
|
static bool IsGotoStationOrder(VehicleID vehicle_id, OrderPosition order_position);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Checks whether the given order is a goto-depot order.
|
||||||
|
* @param vehicle_id The vehicle to check.
|
||||||
|
* @param order_position The order index to check.
|
||||||
|
* @pre IsValidVehicleOrder(vehicle_id, order_position).
|
||||||
|
* @return True if and only if the order is a goto-depot order.
|
||||||
|
*/
|
||||||
|
static bool IsGotoDepotOrder(VehicleID vehicle_id, OrderPosition order_position);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Checks whether the given order is a goto-waypoint order.
|
||||||
|
* @param vehicle_id The vehicle to check.
|
||||||
|
* @param order_position The order index to check.
|
||||||
|
* @pre IsValidVehicleOrder(vehicle_id, order_position).
|
||||||
|
* @return True if and only if the order is a goto-waypoint order.
|
||||||
|
*/
|
||||||
|
static bool IsGotoWaypointOrder(VehicleID vehicle_id, OrderPosition order_position);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Checks whether the given order is a conditional order.
|
* Checks whether the given order is a conditional order.
|
||||||
* @param vehicle_id The vehicle to check.
|
* @param vehicle_id The vehicle to check.
|
||||||
@@ -123,6 +154,17 @@ public:
|
|||||||
*/
|
*/
|
||||||
static bool IsConditionalOrder(VehicleID vehicle_id, OrderPosition order_position);
|
static bool IsConditionalOrder(VehicleID vehicle_id, OrderPosition order_position);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Checks whether the current order is part of the orderlist.
|
||||||
|
* @param vehicle_id The vehicle to check.
|
||||||
|
* @pre AIVehicle::IsValidVehicle(vehicle_id).
|
||||||
|
* @return True if and only if the current order is part of the order list.
|
||||||
|
* @note If the order is a non-'non-stop' order, and the vehicle is currently
|
||||||
|
* (un)loading at a station that is not the final destination, this function
|
||||||
|
* will still return true.
|
||||||
|
*/
|
||||||
|
static bool IsCurrentOrderPartOfOrderList(VehicleID vehicle_id);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Resolves the given order index to the correct index for the given vehicle.
|
* Resolves the given order index to the correct index for the given vehicle.
|
||||||
* If the order index was ORDER_CURRENT it will be resolved to the index of
|
* If the order index was ORDER_CURRENT it will be resolved to the index of
|
||||||
@@ -246,8 +288,10 @@ public:
|
|||||||
* Sets the OrderCondition of the given order for the given vehicle.
|
* Sets the OrderCondition of the given order for the given vehicle.
|
||||||
* @param vehicle_id The vehicle to set the condition type for.
|
* @param vehicle_id The vehicle to set the condition type for.
|
||||||
* @param order_position The order to set the condition type for.
|
* @param order_position The order to set the condition type for.
|
||||||
|
* @param condition The condition to compare on.
|
||||||
* @pre IsValidVehicleOrder(vehicle_id, order_position).
|
* @pre IsValidVehicleOrder(vehicle_id, order_position).
|
||||||
* @pre order_position != ORDER_CURRENT && IsConditionalOrder(vehicle_id, order_position).
|
* @pre order_position != ORDER_CURRENT && IsConditionalOrder(vehicle_id, order_position).
|
||||||
|
* @pre condition >= OC_LOAD_PERCENTAGE && condition <= OC_UNCONDITIONALLY.
|
||||||
* @return Whether the order has been/can be changed.
|
* @return Whether the order has been/can be changed.
|
||||||
*/
|
*/
|
||||||
static bool SetOrderCondition(VehicleID vehicle_id, OrderPosition order_position, OrderCondition condition);
|
static bool SetOrderCondition(VehicleID vehicle_id, OrderPosition order_position, OrderCondition condition);
|
||||||
@@ -256,8 +300,10 @@ public:
|
|||||||
* Sets the CompareFunction of the given order for the given vehicle.
|
* Sets the CompareFunction of the given order for the given vehicle.
|
||||||
* @param vehicle_id The vehicle to set the compare function for.
|
* @param vehicle_id The vehicle to set the compare function for.
|
||||||
* @param order_position The order to set the compare function for.
|
* @param order_position The order to set the compare function for.
|
||||||
|
* @param compare The new compare function of the order.
|
||||||
* @pre IsValidVehicleOrder(vehicle_id, order_position).
|
* @pre IsValidVehicleOrder(vehicle_id, order_position).
|
||||||
* @pre order_position != ORDER_CURRENT && IsConditionalOrder(vehicle_id, order_position).
|
* @pre order_position != ORDER_CURRENT && IsConditionalOrder(vehicle_id, order_position).
|
||||||
|
* @pre compare >= CF_EQUALS && compare <= CF_IS_FALSE.
|
||||||
* @return Whether the order has been/can be changed.
|
* @return Whether the order has been/can be changed.
|
||||||
*/
|
*/
|
||||||
static bool SetOrderCompareFunction(VehicleID vehicle_id, OrderPosition order_position, CompareFunction compare);
|
static bool SetOrderCompareFunction(VehicleID vehicle_id, OrderPosition order_position, CompareFunction compare);
|
||||||
@@ -266,6 +312,7 @@ public:
|
|||||||
* Sets the value to compare against of the given order for the given vehicle.
|
* Sets the value to compare against of the given order for the given vehicle.
|
||||||
* @param vehicle_id The vehicle to set the value for.
|
* @param vehicle_id The vehicle to set the value for.
|
||||||
* @param order_position The order to set the value for.
|
* @param order_position The order to set the value for.
|
||||||
|
* @param value The value to compare against.
|
||||||
* @pre IsValidVehicleOrder(vehicle_id, order_position).
|
* @pre IsValidVehicleOrder(vehicle_id, order_position).
|
||||||
* @pre order_position != ORDER_CURRENT && IsConditionalOrder(vehicle_id, order_position).
|
* @pre order_position != ORDER_CURRENT && IsConditionalOrder(vehicle_id, order_position).
|
||||||
* @pre value >= 0 && value < 2048.
|
* @pre value >= 0 && value < 2048.
|
||||||
@@ -281,7 +328,7 @@ public:
|
|||||||
* @pre AIVehicle::IsValidVehicle(vehicle_id).
|
* @pre AIVehicle::IsValidVehicle(vehicle_id).
|
||||||
* @pre AreOrderFlagsValid(destination, order_flags).
|
* @pre AreOrderFlagsValid(destination, order_flags).
|
||||||
* @exception AIError::ERR_OWNED_BY_ANOTHER_COMPANY
|
* @exception AIError::ERR_OWNED_BY_ANOTHER_COMPANY
|
||||||
* @exception AIOrder::ERR_ORDER_NO_MORE_SPACE
|
* @exception AIOrder::ERR_ORDER_TOO_MANY
|
||||||
* @exception AIOrder::ERR_ORDER_TOO_FAR_AWAY_FROM_PREVIOUS_DESTINATION
|
* @exception AIOrder::ERR_ORDER_TOO_FAR_AWAY_FROM_PREVIOUS_DESTINATION
|
||||||
* @return True if and only if the order was appended.
|
* @return True if and only if the order was appended.
|
||||||
*/
|
*/
|
||||||
@@ -294,7 +341,7 @@ public:
|
|||||||
* @pre AIVehicle::IsValidVehicle(vehicle_id).
|
* @pre AIVehicle::IsValidVehicle(vehicle_id).
|
||||||
* @pre IsValidVehicleOrder(vehicle_id, jump_to).
|
* @pre IsValidVehicleOrder(vehicle_id, jump_to).
|
||||||
* @exception AIError::ERR_OWNED_BY_ANOTHER_COMPANY
|
* @exception AIError::ERR_OWNED_BY_ANOTHER_COMPANY
|
||||||
* @exception AIOrder::ERR_ORDER_NO_MORE_SPACE
|
* @exception AIOrder::ERR_ORDER_TOO_MANY
|
||||||
* @return True if and only if the order was appended.
|
* @return True if and only if the order was appended.
|
||||||
*/
|
*/
|
||||||
static bool AppendConditionalOrder(VehicleID vehicle_id, OrderPosition jump_to);
|
static bool AppendConditionalOrder(VehicleID vehicle_id, OrderPosition jump_to);
|
||||||
@@ -308,7 +355,7 @@ public:
|
|||||||
* @pre IsValidVehicleOrder(vehicle_id, order_position).
|
* @pre IsValidVehicleOrder(vehicle_id, order_position).
|
||||||
* @pre AreOrderFlagsValid(destination, order_flags).
|
* @pre AreOrderFlagsValid(destination, order_flags).
|
||||||
* @exception AIError::ERR_OWNED_BY_ANOTHER_COMPANY
|
* @exception AIError::ERR_OWNED_BY_ANOTHER_COMPANY
|
||||||
* @exception AIOrder::ERR_ORDER_NO_MORE_SPACE
|
* @exception AIOrder::ERR_ORDER_TOO_MANY
|
||||||
* @exception AIOrder::ERR_ORDER_TOO_FAR_AWAY_FROM_PREVIOUS_DESTINATION
|
* @exception AIOrder::ERR_ORDER_TOO_FAR_AWAY_FROM_PREVIOUS_DESTINATION
|
||||||
* @return True if and only if the order was inserted.
|
* @return True if and only if the order was inserted.
|
||||||
*/
|
*/
|
||||||
@@ -322,7 +369,7 @@ public:
|
|||||||
* @pre IsValidVehicleOrder(vehicle_id, order_position).
|
* @pre IsValidVehicleOrder(vehicle_id, order_position).
|
||||||
* @pre IsValidVehicleOrder(vehicle_id, jump_to).
|
* @pre IsValidVehicleOrder(vehicle_id, jump_to).
|
||||||
* @exception AIError::ERR_OWNED_BY_ANOTHER_COMPANY
|
* @exception AIError::ERR_OWNED_BY_ANOTHER_COMPANY
|
||||||
* @exception AIOrder::ERR_ORDER_NO_MORE_SPACE
|
* @exception AIOrder::ERR_ORDER_TOO_MANY
|
||||||
* @return True if and only if the order was inserted.
|
* @return True if and only if the order was inserted.
|
||||||
*/
|
*/
|
||||||
static bool InsertConditionalOrder(VehicleID vehicle_id, OrderPosition order_position, OrderPosition jump_to);
|
static bool InsertConditionalOrder(VehicleID vehicle_id, OrderPosition order_position, OrderPosition jump_to);
|
||||||
@@ -395,7 +442,7 @@ public:
|
|||||||
* @pre AIVehicle::IsValidVehicle(vehicle_id).
|
* @pre AIVehicle::IsValidVehicle(vehicle_id).
|
||||||
* @pre AIVehicle::IsValidVehicle(main_vehicle_id).
|
* @pre AIVehicle::IsValidVehicle(main_vehicle_id).
|
||||||
* @exception AIError::ERR_OWNED_BY_ANOTHER_COMPANY
|
* @exception AIError::ERR_OWNED_BY_ANOTHER_COMPANY
|
||||||
* @exception AIOrder::ERR_ORDER_NO_MORE_SPACE
|
* @exception AIOrder::ERR_ORDER_TOO_MANY
|
||||||
* @return True if and only if the copying succeeded.
|
* @return True if and only if the copying succeeded.
|
||||||
*/
|
*/
|
||||||
static bool CopyOrders(VehicleID vehicle_id, VehicleID main_vehicle_id);
|
static bool CopyOrders(VehicleID vehicle_id, VehicleID main_vehicle_id);
|
||||||
|
@@ -42,9 +42,11 @@ void SQAIOrder_Register(Squirrel *engine) {
|
|||||||
SQAIOrder.DefSQConst(engine, AIOrder::AIOF_FULL_LOAD_ANY, "AIOF_FULL_LOAD_ANY");
|
SQAIOrder.DefSQConst(engine, AIOrder::AIOF_FULL_LOAD_ANY, "AIOF_FULL_LOAD_ANY");
|
||||||
SQAIOrder.DefSQConst(engine, AIOrder::AIOF_NO_LOAD, "AIOF_NO_LOAD");
|
SQAIOrder.DefSQConst(engine, AIOrder::AIOF_NO_LOAD, "AIOF_NO_LOAD");
|
||||||
SQAIOrder.DefSQConst(engine, AIOrder::AIOF_SERVICE_IF_NEEDED, "AIOF_SERVICE_IF_NEEDED");
|
SQAIOrder.DefSQConst(engine, AIOrder::AIOF_SERVICE_IF_NEEDED, "AIOF_SERVICE_IF_NEEDED");
|
||||||
|
SQAIOrder.DefSQConst(engine, AIOrder::AIOF_STOP_IN_DEPOT, "AIOF_STOP_IN_DEPOT");
|
||||||
SQAIOrder.DefSQConst(engine, AIOrder::AIOF_NON_STOP_FLAGS, "AIOF_NON_STOP_FLAGS");
|
SQAIOrder.DefSQConst(engine, AIOrder::AIOF_NON_STOP_FLAGS, "AIOF_NON_STOP_FLAGS");
|
||||||
SQAIOrder.DefSQConst(engine, AIOrder::AIOF_UNLOAD_FLAGS, "AIOF_UNLOAD_FLAGS");
|
SQAIOrder.DefSQConst(engine, AIOrder::AIOF_UNLOAD_FLAGS, "AIOF_UNLOAD_FLAGS");
|
||||||
SQAIOrder.DefSQConst(engine, AIOrder::AIOF_LOAD_FLAGS, "AIOF_LOAD_FLAGS");
|
SQAIOrder.DefSQConst(engine, AIOrder::AIOF_LOAD_FLAGS, "AIOF_LOAD_FLAGS");
|
||||||
|
SQAIOrder.DefSQConst(engine, AIOrder::AIOF_DEPOT_FLAGS, "AIOF_DEPOT_FLAGS");
|
||||||
SQAIOrder.DefSQConst(engine, AIOrder::AIOF_INVALID, "AIOF_INVALID");
|
SQAIOrder.DefSQConst(engine, AIOrder::AIOF_INVALID, "AIOF_INVALID");
|
||||||
SQAIOrder.DefSQConst(engine, AIOrder::OC_LOAD_PERCENTAGE, "OC_LOAD_PERCENTAGE");
|
SQAIOrder.DefSQConst(engine, AIOrder::OC_LOAD_PERCENTAGE, "OC_LOAD_PERCENTAGE");
|
||||||
SQAIOrder.DefSQConst(engine, AIOrder::OC_RELIABILITY, "OC_RELIABILITY");
|
SQAIOrder.DefSQConst(engine, AIOrder::OC_RELIABILITY, "OC_RELIABILITY");
|
||||||
@@ -71,34 +73,38 @@ void SQAIOrder_Register(Squirrel *engine) {
|
|||||||
AIError::RegisterErrorMapString(AIOrder::ERR_ORDER_TOO_MANY, "ERR_ORDER_TOO_MANY");
|
AIError::RegisterErrorMapString(AIOrder::ERR_ORDER_TOO_MANY, "ERR_ORDER_TOO_MANY");
|
||||||
AIError::RegisterErrorMapString(AIOrder::ERR_ORDER_TOO_FAR_AWAY_FROM_PREVIOUS_DESTINATION, "ERR_ORDER_TOO_FAR_AWAY_FROM_PREVIOUS_DESTINATION");
|
AIError::RegisterErrorMapString(AIOrder::ERR_ORDER_TOO_FAR_AWAY_FROM_PREVIOUS_DESTINATION, "ERR_ORDER_TOO_FAR_AWAY_FROM_PREVIOUS_DESTINATION");
|
||||||
|
|
||||||
SQAIOrder.DefSQStaticMethod(engine, &AIOrder::IsValidVehicleOrder, "IsValidVehicleOrder", 3, ".ii");
|
SQAIOrder.DefSQStaticMethod(engine, &AIOrder::IsValidVehicleOrder, "IsValidVehicleOrder", 3, ".ii");
|
||||||
SQAIOrder.DefSQStaticMethod(engine, &AIOrder::IsConditionalOrder, "IsConditionalOrder", 3, ".ii");
|
SQAIOrder.DefSQStaticMethod(engine, &AIOrder::IsGotoStationOrder, "IsGotoStationOrder", 3, ".ii");
|
||||||
SQAIOrder.DefSQStaticMethod(engine, &AIOrder::ResolveOrderPosition, "ResolveOrderPosition", 3, ".ii");
|
SQAIOrder.DefSQStaticMethod(engine, &AIOrder::IsGotoDepotOrder, "IsGotoDepotOrder", 3, ".ii");
|
||||||
SQAIOrder.DefSQStaticMethod(engine, &AIOrder::AreOrderFlagsValid, "AreOrderFlagsValid", 3, ".ii");
|
SQAIOrder.DefSQStaticMethod(engine, &AIOrder::IsGotoWaypointOrder, "IsGotoWaypointOrder", 3, ".ii");
|
||||||
SQAIOrder.DefSQStaticMethod(engine, &AIOrder::IsValidConditionalOrder, "IsValidConditionalOrder", 3, ".ii");
|
SQAIOrder.DefSQStaticMethod(engine, &AIOrder::IsConditionalOrder, "IsConditionalOrder", 3, ".ii");
|
||||||
SQAIOrder.DefSQStaticMethod(engine, &AIOrder::GetOrderCount, "GetOrderCount", 2, ".i");
|
SQAIOrder.DefSQStaticMethod(engine, &AIOrder::IsCurrentOrderPartOfOrderList, "IsCurrentOrderPartOfOrderList", 2, ".i");
|
||||||
SQAIOrder.DefSQStaticMethod(engine, &AIOrder::GetOrderDestination, "GetOrderDestination", 3, ".ii");
|
SQAIOrder.DefSQStaticMethod(engine, &AIOrder::ResolveOrderPosition, "ResolveOrderPosition", 3, ".ii");
|
||||||
SQAIOrder.DefSQStaticMethod(engine, &AIOrder::GetOrderFlags, "GetOrderFlags", 3, ".ii");
|
SQAIOrder.DefSQStaticMethod(engine, &AIOrder::AreOrderFlagsValid, "AreOrderFlagsValid", 3, ".ii");
|
||||||
SQAIOrder.DefSQStaticMethod(engine, &AIOrder::GetOrderJumpTo, "GetOrderJumpTo", 3, ".ii");
|
SQAIOrder.DefSQStaticMethod(engine, &AIOrder::IsValidConditionalOrder, "IsValidConditionalOrder", 3, ".ii");
|
||||||
SQAIOrder.DefSQStaticMethod(engine, &AIOrder::GetOrderCondition, "GetOrderCondition", 3, ".ii");
|
SQAIOrder.DefSQStaticMethod(engine, &AIOrder::GetOrderCount, "GetOrderCount", 2, ".i");
|
||||||
SQAIOrder.DefSQStaticMethod(engine, &AIOrder::GetOrderCompareFunction, "GetOrderCompareFunction", 3, ".ii");
|
SQAIOrder.DefSQStaticMethod(engine, &AIOrder::GetOrderDestination, "GetOrderDestination", 3, ".ii");
|
||||||
SQAIOrder.DefSQStaticMethod(engine, &AIOrder::GetOrderCompareValue, "GetOrderCompareValue", 3, ".ii");
|
SQAIOrder.DefSQStaticMethod(engine, &AIOrder::GetOrderFlags, "GetOrderFlags", 3, ".ii");
|
||||||
SQAIOrder.DefSQStaticMethod(engine, &AIOrder::SetOrderJumpTo, "SetOrderJumpTo", 4, ".iii");
|
SQAIOrder.DefSQStaticMethod(engine, &AIOrder::GetOrderJumpTo, "GetOrderJumpTo", 3, ".ii");
|
||||||
SQAIOrder.DefSQStaticMethod(engine, &AIOrder::SetOrderCondition, "SetOrderCondition", 4, ".iii");
|
SQAIOrder.DefSQStaticMethod(engine, &AIOrder::GetOrderCondition, "GetOrderCondition", 3, ".ii");
|
||||||
SQAIOrder.DefSQStaticMethod(engine, &AIOrder::SetOrderCompareFunction, "SetOrderCompareFunction", 4, ".iii");
|
SQAIOrder.DefSQStaticMethod(engine, &AIOrder::GetOrderCompareFunction, "GetOrderCompareFunction", 3, ".ii");
|
||||||
SQAIOrder.DefSQStaticMethod(engine, &AIOrder::SetOrderCompareValue, "SetOrderCompareValue", 4, ".iii");
|
SQAIOrder.DefSQStaticMethod(engine, &AIOrder::GetOrderCompareValue, "GetOrderCompareValue", 3, ".ii");
|
||||||
SQAIOrder.DefSQStaticMethod(engine, &AIOrder::AppendOrder, "AppendOrder", 4, ".iii");
|
SQAIOrder.DefSQStaticMethod(engine, &AIOrder::SetOrderJumpTo, "SetOrderJumpTo", 4, ".iii");
|
||||||
SQAIOrder.DefSQStaticMethod(engine, &AIOrder::AppendConditionalOrder, "AppendConditionalOrder", 3, ".ii");
|
SQAIOrder.DefSQStaticMethod(engine, &AIOrder::SetOrderCondition, "SetOrderCondition", 4, ".iii");
|
||||||
SQAIOrder.DefSQStaticMethod(engine, &AIOrder::InsertOrder, "InsertOrder", 5, ".iiii");
|
SQAIOrder.DefSQStaticMethod(engine, &AIOrder::SetOrderCompareFunction, "SetOrderCompareFunction", 4, ".iii");
|
||||||
SQAIOrder.DefSQStaticMethod(engine, &AIOrder::InsertConditionalOrder, "InsertConditionalOrder", 4, ".iii");
|
SQAIOrder.DefSQStaticMethod(engine, &AIOrder::SetOrderCompareValue, "SetOrderCompareValue", 4, ".iii");
|
||||||
SQAIOrder.DefSQStaticMethod(engine, &AIOrder::RemoveOrder, "RemoveOrder", 3, ".ii");
|
SQAIOrder.DefSQStaticMethod(engine, &AIOrder::AppendOrder, "AppendOrder", 4, ".iii");
|
||||||
SQAIOrder.DefSQStaticMethod(engine, &AIOrder::SetOrderFlags, "SetOrderFlags", 4, ".iii");
|
SQAIOrder.DefSQStaticMethod(engine, &AIOrder::AppendConditionalOrder, "AppendConditionalOrder", 3, ".ii");
|
||||||
SQAIOrder.DefSQStaticMethod(engine, &AIOrder::ChangeOrder, "ChangeOrder", 4, ".iii");
|
SQAIOrder.DefSQStaticMethod(engine, &AIOrder::InsertOrder, "InsertOrder", 5, ".iiii");
|
||||||
SQAIOrder.DefSQStaticMethod(engine, &AIOrder::MoveOrder, "MoveOrder", 4, ".iii");
|
SQAIOrder.DefSQStaticMethod(engine, &AIOrder::InsertConditionalOrder, "InsertConditionalOrder", 4, ".iii");
|
||||||
SQAIOrder.DefSQStaticMethod(engine, &AIOrder::SkipToOrder, "SkipToOrder", 3, ".ii");
|
SQAIOrder.DefSQStaticMethod(engine, &AIOrder::RemoveOrder, "RemoveOrder", 3, ".ii");
|
||||||
SQAIOrder.DefSQStaticMethod(engine, &AIOrder::CopyOrders, "CopyOrders", 3, ".ii");
|
SQAIOrder.DefSQStaticMethod(engine, &AIOrder::SetOrderFlags, "SetOrderFlags", 4, ".iii");
|
||||||
SQAIOrder.DefSQStaticMethod(engine, &AIOrder::ShareOrders, "ShareOrders", 3, ".ii");
|
SQAIOrder.DefSQStaticMethod(engine, &AIOrder::ChangeOrder, "ChangeOrder", 4, ".iii");
|
||||||
SQAIOrder.DefSQStaticMethod(engine, &AIOrder::UnshareOrders, "UnshareOrders", 2, ".i");
|
SQAIOrder.DefSQStaticMethod(engine, &AIOrder::MoveOrder, "MoveOrder", 4, ".iii");
|
||||||
|
SQAIOrder.DefSQStaticMethod(engine, &AIOrder::SkipToOrder, "SkipToOrder", 3, ".ii");
|
||||||
|
SQAIOrder.DefSQStaticMethod(engine, &AIOrder::CopyOrders, "CopyOrders", 3, ".ii");
|
||||||
|
SQAIOrder.DefSQStaticMethod(engine, &AIOrder::ShareOrders, "ShareOrders", 3, ".ii");
|
||||||
|
SQAIOrder.DefSQStaticMethod(engine, &AIOrder::UnshareOrders, "UnshareOrders", 2, ".i");
|
||||||
|
|
||||||
SQAIOrder.PostRegister(engine);
|
SQAIOrder.PostRegister(engine);
|
||||||
}
|
}
|
||||||
|
@@ -110,7 +110,7 @@
|
|||||||
{
|
{
|
||||||
if (!IsRailStationTile(tile)) return RAILTRACK_INVALID;
|
if (!IsRailStationTile(tile)) return RAILTRACK_INVALID;
|
||||||
|
|
||||||
return (RailTrack)::GetRailStationTrack(tile);
|
return (RailTrack)::GetRailStationTrackBits(tile);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* static */ bool AIRail::BuildRailDepot(TileIndex tile, TileIndex front)
|
/* static */ bool AIRail::BuildRailDepot(TileIndex tile, TileIndex front)
|
||||||
@@ -203,6 +203,7 @@
|
|||||||
if (IsRailWaypointTile(tile)) return ::GetRailWaypointBits(tile);
|
if (IsRailWaypointTile(tile)) return ::GetRailWaypointBits(tile);
|
||||||
if (IsRailStationTile(tile)) return ::TrackToTrackBits(::GetRailStationTrack(tile));
|
if (IsRailStationTile(tile)) return ::TrackToTrackBits(::GetRailStationTrack(tile));
|
||||||
if (IsLevelCrossingTile(tile)) return ::GetCrossingRailBits(tile);
|
if (IsLevelCrossingTile(tile)) return ::GetCrossingRailBits(tile);
|
||||||
|
if (IsRailDepotTile(tile)) return ::TRACK_BIT_NONE;
|
||||||
return ::GetTrackBits(tile);
|
return ::GetTrackBits(tile);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -293,6 +293,7 @@ public:
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Get all RailTracks on the given tile.
|
* Get all RailTracks on the given tile.
|
||||||
|
* @note A depot has no railtracks.
|
||||||
* @param tile The tile to check.
|
* @param tile The tile to check.
|
||||||
* @pre IsRailTile(tile).
|
* @pre IsRailTile(tile).
|
||||||
* @return A bitmask of RailTrack with all RailTracks on the tile.
|
* @return A bitmask of RailTrack with all RailTracks on the tile.
|
||||||
|
@@ -5,12 +5,18 @@
|
|||||||
#include "ai_road.hpp"
|
#include "ai_road.hpp"
|
||||||
#include "ai_map.hpp"
|
#include "ai_map.hpp"
|
||||||
#include "ai_station.hpp"
|
#include "ai_station.hpp"
|
||||||
|
#include "ai_cargo.hpp"
|
||||||
#include "../../station_map.h"
|
#include "../../station_map.h"
|
||||||
#include "../../command_type.h"
|
#include "../../command_type.h"
|
||||||
#include "../../settings_type.h"
|
#include "../../settings_type.h"
|
||||||
#include "../../company_func.h"
|
#include "../../company_func.h"
|
||||||
#include "../../script/squirrel_helper_type.hpp"
|
#include "../../script/squirrel_helper_type.hpp"
|
||||||
|
|
||||||
|
/* static */ AIRoad::RoadVehicleType AIRoad::GetRoadVehicleTypeForCargo(CargoID cargo_type)
|
||||||
|
{
|
||||||
|
return AICargo::HasCargoClass(cargo_type, AICargo::CC_PASSENGERS) ? ROADVEHTYPE_BUS : ROADVEHTYPE_TRUCK;
|
||||||
|
}
|
||||||
|
|
||||||
/* static */ bool AIRoad::IsRoadTile(TileIndex tile)
|
/* static */ bool AIRoad::IsRoadTile(TileIndex tile)
|
||||||
{
|
{
|
||||||
if (!::IsValidTile(tile)) return false;
|
if (!::IsValidTile(tile)) return false;
|
||||||
|
@@ -56,6 +56,14 @@ public:
|
|||||||
ROADVEHTYPE_TRUCK, //!< Build objects useable for trucks and cargo trams
|
ROADVEHTYPE_TRUCK, //!< Build objects useable for trucks and cargo trams
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Determines whether a busstop or a truckstop is needed to transport a certain cargo.
|
||||||
|
* @param cargo_type The cargo to test.
|
||||||
|
* @pre AICargo::IsValidCargo(cargo_type).
|
||||||
|
* @return The road vehicle type needed to transport the cargo.
|
||||||
|
*/
|
||||||
|
static RoadVehicleType GetRoadVehicleTypeForCargo(CargoID cargo_type);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Checks whether the given tile is actually a tile with road that can be
|
* Checks whether the given tile is actually a tile with road that can be
|
||||||
* used to traverse a tile. This excludes road depots and 'normal' road
|
* used to traverse a tile. This excludes road depots and 'normal' road
|
||||||
@@ -341,7 +349,7 @@ public:
|
|||||||
* @exception AIError::ERR_FLAT_LAND_REQUIRED
|
* @exception AIError::ERR_FLAT_LAND_REQUIRED
|
||||||
* @exception AIRoad::ERR_ROAD_DRIVE_THROUGH_WRONG_DIRECTION
|
* @exception AIRoad::ERR_ROAD_DRIVE_THROUGH_WRONG_DIRECTION
|
||||||
* @exception AIRoad::ERR_ROAD_CANNOT_BUILD_ON_TOWN_ROAD
|
* @exception AIRoad::ERR_ROAD_CANNOT_BUILD_ON_TOWN_ROAD
|
||||||
* @exception AIError:ERR_VEHICLE_IN_THE_WAY
|
* @exception AIError::ERR_VEHICLE_IN_THE_WAY
|
||||||
* @exception AIStation::ERR_STATION_TOO_CLOSE_TO_ANOTHER_STATION
|
* @exception AIStation::ERR_STATION_TOO_CLOSE_TO_ANOTHER_STATION
|
||||||
* @exception AIStation::ERR_STATION_TOO_MANY_STATIONS
|
* @exception AIStation::ERR_STATION_TOO_MANY_STATIONS
|
||||||
* @exception AIStation::ERR_STATION_TOO_MANY_STATIONS_IN_TOWN
|
* @exception AIStation::ERR_STATION_TOO_MANY_STATIONS_IN_TOWN
|
||||||
@@ -364,7 +372,7 @@ public:
|
|||||||
* @exception AIError::ERR_FLAT_LAND_REQUIRED
|
* @exception AIError::ERR_FLAT_LAND_REQUIRED
|
||||||
* @exception AIRoad::ERR_ROAD_DRIVE_THROUGH_WRONG_DIRECTION
|
* @exception AIRoad::ERR_ROAD_DRIVE_THROUGH_WRONG_DIRECTION
|
||||||
* @exception AIRoad::ERR_ROAD_CANNOT_BUILD_ON_TOWN_ROAD
|
* @exception AIRoad::ERR_ROAD_CANNOT_BUILD_ON_TOWN_ROAD
|
||||||
* @exception AIError:ERR_VEHICLE_IN_THE_WAY
|
* @exception AIError::ERR_VEHICLE_IN_THE_WAY
|
||||||
* @exception AIStation::ERR_STATION_TOO_CLOSE_TO_ANOTHER_STATION
|
* @exception AIStation::ERR_STATION_TOO_CLOSE_TO_ANOTHER_STATION
|
||||||
* @exception AIStation::ERR_STATION_TOO_MANY_STATIONS
|
* @exception AIStation::ERR_STATION_TOO_MANY_STATIONS
|
||||||
* @exception AIStation::ERR_STATION_TOO_MANY_STATIONS_IN_TOWN
|
* @exception AIStation::ERR_STATION_TOO_MANY_STATIONS_IN_TOWN
|
||||||
|
@@ -46,6 +46,7 @@ void SQAIRoad_Register(Squirrel *engine) {
|
|||||||
AIError::RegisterErrorMapString(AIRoad::ERR_ROAD_CANNOT_BUILD_ON_TOWN_ROAD, "ERR_ROAD_CANNOT_BUILD_ON_TOWN_ROAD");
|
AIError::RegisterErrorMapString(AIRoad::ERR_ROAD_CANNOT_BUILD_ON_TOWN_ROAD, "ERR_ROAD_CANNOT_BUILD_ON_TOWN_ROAD");
|
||||||
AIError::RegisterErrorMapString(AIRoad::ERR_ROAD_ONE_WAY_ROADS_CANNOT_HAVE_JUNCTIONS, "ERR_ROAD_ONE_WAY_ROADS_CANNOT_HAVE_JUNCTIONS");
|
AIError::RegisterErrorMapString(AIRoad::ERR_ROAD_ONE_WAY_ROADS_CANNOT_HAVE_JUNCTIONS, "ERR_ROAD_ONE_WAY_ROADS_CANNOT_HAVE_JUNCTIONS");
|
||||||
|
|
||||||
|
SQAIRoad.DefSQStaticMethod(engine, &AIRoad::GetRoadVehicleTypeForCargo, "GetRoadVehicleTypeForCargo", 2, ".i");
|
||||||
SQAIRoad.DefSQStaticMethod(engine, &AIRoad::IsRoadTile, "IsRoadTile", 2, ".i");
|
SQAIRoad.DefSQStaticMethod(engine, &AIRoad::IsRoadTile, "IsRoadTile", 2, ".i");
|
||||||
SQAIRoad.DefSQStaticMethod(engine, &AIRoad::IsRoadDepotTile, "IsRoadDepotTile", 2, ".i");
|
SQAIRoad.DefSQStaticMethod(engine, &AIRoad::IsRoadDepotTile, "IsRoadDepotTile", 2, ".i");
|
||||||
SQAIRoad.DefSQStaticMethod(engine, &AIRoad::IsRoadStationTile, "IsRoadStationTile", 2, ".i");
|
SQAIRoad.DefSQStaticMethod(engine, &AIRoad::IsRoadStationTile, "IsRoadStationTile", 2, ".i");
|
||||||
|
@@ -30,6 +30,7 @@ public:
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets the maximum sign index; there are no valid signs with a higher index.
|
* Gets the maximum sign index; there are no valid signs with a higher index.
|
||||||
|
* @deprecated This function is deprecated and might be removed in future versions of the API. Use AISignList() instead.
|
||||||
* @return The maximum sign index.
|
* @return The maximum sign index.
|
||||||
* @post Return value is always non-negative.
|
* @post Return value is always non-negative.
|
||||||
*/
|
*/
|
||||||
|
15
src/ai/api/ai_signlist.cpp
Normal file
15
src/ai/api/ai_signlist.cpp
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
/* $Id$ */
|
||||||
|
|
||||||
|
/** @file ai_signlist.cpp Implementation of AISignList and friends. */
|
||||||
|
|
||||||
|
#include "ai_signlist.hpp"
|
||||||
|
#include "ai_sign.hpp"
|
||||||
|
#include "../../signs_base.h"
|
||||||
|
|
||||||
|
AISignList::AISignList()
|
||||||
|
{
|
||||||
|
Sign *s;
|
||||||
|
FOR_ALL_SIGNS(s) {
|
||||||
|
if (AISign::IsValidSign(s->index)) this->AddItem(s->index);
|
||||||
|
}
|
||||||
|
}
|
20
src/ai/api/ai_signlist.hpp
Normal file
20
src/ai/api/ai_signlist.hpp
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
/* $Id$ */
|
||||||
|
|
||||||
|
/** @file ai_signlist.hpp List all the signs of your company. */
|
||||||
|
|
||||||
|
#ifndef AI_SIGNLIST_HPP
|
||||||
|
#define AI_SIGNLIST_HPP
|
||||||
|
|
||||||
|
#include "ai_abstractlist.hpp"
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a list of signs your company has created.
|
||||||
|
* @ingroup AIList
|
||||||
|
*/
|
||||||
|
class AISignList : public AIAbstractList {
|
||||||
|
public:
|
||||||
|
static const char *GetClassName() { return "AISignList"; }
|
||||||
|
AISignList();
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif /* AI_SIGNLIST_HPP */
|
21
src/ai/api/ai_signlist.hpp.sq
Normal file
21
src/ai/api/ai_signlist.hpp.sq
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
/* $Id$ */
|
||||||
|
/* THIS FILE IS AUTO-GENERATED; PLEASE DO NOT ALTER MANUALLY */
|
||||||
|
|
||||||
|
#include "ai_signlist.hpp"
|
||||||
|
|
||||||
|
namespace SQConvert {
|
||||||
|
/* Allow AISignList to be used as Squirrel parameter */
|
||||||
|
template <> AISignList *GetParam(ForceType<AISignList *>, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (AISignList *)instance; }
|
||||||
|
template <> AISignList &GetParam(ForceType<AISignList &>, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AISignList *)instance; }
|
||||||
|
template <> const AISignList *GetParam(ForceType<const AISignList *>, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return (AISignList *)instance; }
|
||||||
|
template <> const AISignList &GetParam(ForceType<const AISignList &>, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQUserPointer instance; sq_getinstanceup(vm, index, &instance, 0); return *(AISignList *)instance; }
|
||||||
|
template <> int Return<AISignList *>(HSQUIRRELVM vm, AISignList *res) { if (res == NULL) { sq_pushnull(vm); return 1; } res->AddRef(); Squirrel::CreateClassInstanceVM(vm, "AISignList", res, NULL, DefSQDestructorCallback<AISignList>); return 1; }
|
||||||
|
}; // namespace SQConvert
|
||||||
|
|
||||||
|
void SQAISignList_Register(Squirrel *engine) {
|
||||||
|
DefSQClass <AISignList> SQAISignList("AISignList");
|
||||||
|
SQAISignList.PreRegister(engine, "AIAbstractList");
|
||||||
|
SQAISignList.AddConstructor<void (AISignList::*)(), 1>(engine, "x");
|
||||||
|
|
||||||
|
SQAISignList.PostRegister(engine);
|
||||||
|
}
|
@@ -17,7 +17,8 @@
|
|||||||
|
|
||||||
/* static */ bool AIStation::IsValidStation(StationID station_id)
|
/* static */ bool AIStation::IsValidStation(StationID station_id)
|
||||||
{
|
{
|
||||||
return ::IsValidStationID(station_id) && ::GetStation(station_id)->owner == _current_company;
|
const Station *st = ::IsValidStationID(station_id) ? GetStation(station_id) : NULL;
|
||||||
|
return st != NULL && (st->owner == _current_company || st->owner == OWNER_NONE);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* static */ StationID AIStation::GetStationID(TileIndex tile)
|
/* static */ StationID AIStation::GetStationID(TileIndex tile)
|
||||||
|
@@ -49,6 +49,10 @@ public:
|
|||||||
STATION_ANY = 0x1F, //!< All station types
|
STATION_ANY = 0x1F, //!< All station types
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Special station IDs for building adjacent/new stations when
|
||||||
|
* the adjacent/distant join features are enabled.
|
||||||
|
*/
|
||||||
enum SpecialStationIDs {
|
enum SpecialStationIDs {
|
||||||
STATION_NEW = 0xFFFD, //!< Build a new station
|
STATION_NEW = 0xFFFD, //!< Build a new station
|
||||||
STATION_JOIN_ADJACENT = 0xFFFE, //!< Join an neighbouring station if one exists
|
STATION_JOIN_ADJACENT = 0xFFFE, //!< Join an neighbouring station if one exists
|
||||||
|
@@ -11,6 +11,7 @@
|
|||||||
#include "../../water_map.h"
|
#include "../../water_map.h"
|
||||||
#include "../../clear_map.h"
|
#include "../../clear_map.h"
|
||||||
#include "../../town.h"
|
#include "../../town.h"
|
||||||
|
#include "../../landscape.h"
|
||||||
|
|
||||||
/* static */ bool AITile::IsBuildable(TileIndex tile)
|
/* static */ bool AITile::IsBuildable(TileIndex tile)
|
||||||
{
|
{
|
||||||
@@ -72,14 +73,14 @@
|
|||||||
|
|
||||||
/* static */ bool AITile::IsSteepSlope(Slope slope)
|
/* static */ bool AITile::IsSteepSlope(Slope slope)
|
||||||
{
|
{
|
||||||
if (slope == SLOPE_INVALID) return false;
|
if ((slope & ~(SLOPE_ELEVATED | SLOPE_STEEP | SLOPE_HALFTILE_MASK)) != 0) return false;
|
||||||
|
|
||||||
return ::IsSteepSlope((::Slope)slope);
|
return ::IsSteepSlope((::Slope)slope);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* static */ bool AITile::IsHalftileSlope(Slope slope)
|
/* static */ bool AITile::IsHalftileSlope(Slope slope)
|
||||||
{
|
{
|
||||||
if (slope == SLOPE_INVALID) return false;
|
if ((slope & ~(SLOPE_ELEVATED | SLOPE_STEEP | SLOPE_HALFTILE_MASK)) != 0) return false;
|
||||||
|
|
||||||
return ::IsHalftileSlope((::Slope)slope);
|
return ::IsHalftileSlope((::Slope)slope);
|
||||||
}
|
}
|
||||||
@@ -123,20 +124,41 @@
|
|||||||
|
|
||||||
/* static */ AITile::Slope AITile::GetComplementSlope(Slope slope)
|
/* static */ AITile::Slope AITile::GetComplementSlope(Slope slope)
|
||||||
{
|
{
|
||||||
if (slope == SLOPE_INVALID) return SLOPE_INVALID;
|
if ((slope & ~SLOPE_ELEVATED) != 0) return SLOPE_INVALID;
|
||||||
if (IsSteepSlope(slope)) return SLOPE_INVALID;
|
|
||||||
if (IsHalftileSlope(slope)) return SLOPE_INVALID;
|
|
||||||
|
|
||||||
return (Slope)::ComplementSlope((::Slope)slope);
|
return (Slope)::ComplementSlope((::Slope)slope);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* static */ int32 AITile::GetHeight(TileIndex tile)
|
/* static */ int32 AITile::GetHeight(TileIndex tile)
|
||||||
{
|
{
|
||||||
if (!::IsValidTile(tile)) return false;
|
if (!::IsValidTile(tile)) return -1;
|
||||||
|
|
||||||
return ::TileHeight(tile);
|
return ::TileHeight(tile);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* static */ int32 AITile::GetMinHeight(TileIndex tile)
|
||||||
|
{
|
||||||
|
if (!::IsValidTile(tile)) return -1;
|
||||||
|
|
||||||
|
return ::GetTileZ(tile) / ::TILE_HEIGHT;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* static */ int32 AITile::GetMaxHeight(TileIndex tile)
|
||||||
|
{
|
||||||
|
if (!::IsValidTile(tile)) return -1;
|
||||||
|
|
||||||
|
return ::GetTileMaxZ(tile) / ::TILE_HEIGHT;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* static */ int32 AITile::GetCornerHeight(TileIndex tile, Corner corner)
|
||||||
|
{
|
||||||
|
if (!::IsValidTile(tile) || !::IsValidCorner((::Corner)corner)) return -1;
|
||||||
|
|
||||||
|
uint z;
|
||||||
|
::Slope slope = ::GetTileSlope(tile, &z);
|
||||||
|
return (z + ::GetSlopeZInCorner(slope, (::Corner)corner)) / ::TILE_HEIGHT;
|
||||||
|
}
|
||||||
|
|
||||||
/* static */ AICompany::CompanyID AITile::GetOwner(TileIndex tile)
|
/* static */ AICompany::CompanyID AITile::GetOwner(TileIndex tile)
|
||||||
{
|
{
|
||||||
if (!::IsValidTile(tile)) return AICompany::COMPANY_INVALID;
|
if (!::IsValidTile(tile)) return AICompany::COMPANY_INVALID;
|
||||||
@@ -153,21 +175,21 @@
|
|||||||
return ::TrackStatusToTrackdirBits(::GetTileTrackStatus(tile, (::TransportType)transport_type, UINT32_MAX)) != TRACKDIR_BIT_NONE;
|
return ::TrackStatusToTrackdirBits(::GetTileTrackStatus(tile, (::TransportType)transport_type, UINT32_MAX)) != TRACKDIR_BIT_NONE;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* static */ int32 AITile::GetCargoAcceptance(TileIndex tile, CargoID cargo_type, uint width, uint height, uint radius)
|
/* static */ int32 AITile::GetCargoAcceptance(TileIndex tile, CargoID cargo_type, int width, int height, int radius)
|
||||||
{
|
{
|
||||||
if (!::IsValidTile(tile)) return false;
|
if (!::IsValidTile(tile) || width <= 0 || height <= 0 || radius < 0) return -1;
|
||||||
|
|
||||||
AcceptedCargo accepts;
|
AcceptedCargo accepts;
|
||||||
::GetAcceptanceAroundTiles(accepts, tile, width, height, _settings_game.station.modified_catchment ? radius : (uint)CA_UNMODIFIED);
|
::GetAcceptanceAroundTiles(accepts, tile, width, height, _settings_game.station.modified_catchment ? radius : (int)CA_UNMODIFIED);
|
||||||
return accepts[cargo_type];
|
return accepts[cargo_type];
|
||||||
}
|
}
|
||||||
|
|
||||||
/* static */ int32 AITile::GetCargoProduction(TileIndex tile, CargoID cargo_type, uint width, uint height, uint radius)
|
/* static */ int32 AITile::GetCargoProduction(TileIndex tile, CargoID cargo_type, int width, int height, int radius)
|
||||||
{
|
{
|
||||||
if (!::IsValidTile(tile)) return false;
|
if (!::IsValidTile(tile) || width <= 0 || height <= 0 || radius < 0) return -1;
|
||||||
|
|
||||||
AcceptedCargo produced;
|
AcceptedCargo produced;
|
||||||
::GetProductionAroundTiles(produced, tile, width, height, _settings_game.station.modified_catchment ? radius : (uint)CA_UNMODIFIED);
|
::GetProductionAroundTiles(produced, tile, width, height, _settings_game.station.modified_catchment ? radius : (int)CA_UNMODIFIED);
|
||||||
return produced[cargo_type];
|
return produced[cargo_type];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -29,10 +29,28 @@ public:
|
|||||||
|
|
||||||
/** Tile can't be lowered any lower */
|
/** Tile can't be lowered any lower */
|
||||||
ERR_TILE_TOO_LOW, // [STR_1003_ALREADY_AT_SEA_LEVEL]
|
ERR_TILE_TOO_LOW, // [STR_1003_ALREADY_AT_SEA_LEVEL]
|
||||||
|
|
||||||
|
/** The area was already flat */
|
||||||
|
ERR_AREA_ALREADY_FLAT, // [STR_ALREADY_LEVELLED]
|
||||||
|
|
||||||
|
/** There is a tunnel underneed */
|
||||||
|
ERR_EXCAVATION_WOULD_DAMAGE, // [STR_1002_EXCAVATION_WOULD_DAMAGE]
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Enumeration for the slope-type (from slopes.h).
|
* Enumeration for corners of tiles.
|
||||||
|
*/
|
||||||
|
enum Corner {
|
||||||
|
CORNER_W = 0, //!< West corner
|
||||||
|
CORNER_S = 1, //!< South corner
|
||||||
|
CORNER_E = 2, //!< East corner
|
||||||
|
CORNER_N = 3, //!< North corner
|
||||||
|
|
||||||
|
CORNER_INVALID = 0xFF,
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Enumeration for the slope-type.
|
||||||
*
|
*
|
||||||
* This enumeration use the chars N, E, S, W corresponding the
|
* This enumeration use the chars N, E, S, W corresponding the
|
||||||
* direction North, East, South and West. The top corner of a tile
|
* direction North, East, South and West. The top corner of a tile
|
||||||
@@ -41,18 +59,18 @@ public:
|
|||||||
enum Slope {
|
enum Slope {
|
||||||
/* Values are important, as they represent the internal state of the game. */
|
/* Values are important, as they represent the internal state of the game. */
|
||||||
SLOPE_FLAT = 0x00, //!< A flat tile
|
SLOPE_FLAT = 0x00, //!< A flat tile
|
||||||
SLOPE_W = 0x01, //!< The west corner of the tile is raised
|
SLOPE_W = 1 << CORNER_W, //!< The west corner of the tile is raised
|
||||||
SLOPE_S = 0x02, //!< The south corner of the tile is raised
|
SLOPE_S = 1 << CORNER_S, //!< The south corner of the tile is raised
|
||||||
SLOPE_E = 0x04, //!< The east corner of the tile is raised
|
SLOPE_E = 1 << CORNER_E, //!< The east corner of the tile is raised
|
||||||
SLOPE_N = 0x08, //!< The north corner of the tile is raised
|
SLOPE_N = 1 << CORNER_N, //!< The north corner of the tile is raised
|
||||||
SLOPE_STEEP = 0x10, //!< Indicates the slope is steep
|
SLOPE_STEEP = 0x10, //!< Indicates the slope is steep (The corner opposite of the not-raised corner is raised two times)
|
||||||
SLOPE_NW = SLOPE_N | SLOPE_W, //!< North and west corner are raised
|
SLOPE_NW = SLOPE_N | SLOPE_W, //!< North and west corner are raised
|
||||||
SLOPE_SW = SLOPE_S | SLOPE_W, //!< South and west corner are raised
|
SLOPE_SW = SLOPE_S | SLOPE_W, //!< South and west corner are raised
|
||||||
SLOPE_SE = SLOPE_S | SLOPE_E, //!< South and east corner are raised
|
SLOPE_SE = SLOPE_S | SLOPE_E, //!< South and east corner are raised
|
||||||
SLOPE_NE = SLOPE_N | SLOPE_E, //!< North and east corner are raised
|
SLOPE_NE = SLOPE_N | SLOPE_E, //!< North and east corner are raised
|
||||||
SLOPE_EW = SLOPE_E | SLOPE_W, //!< East and west corner are raised
|
SLOPE_EW = SLOPE_E | SLOPE_W, //!< East and west corner are raised
|
||||||
SLOPE_NS = SLOPE_N | SLOPE_S, //!< North and south corner are raised
|
SLOPE_NS = SLOPE_N | SLOPE_S, //!< North and south corner are raised
|
||||||
SLOPE_ELEVATED = SLOPE_N | SLOPE_E | SLOPE_S | SLOPE_W, //!< All corner are raised, similar to SLOPE_FLAT
|
SLOPE_ELEVATED = SLOPE_N | SLOPE_E | SLOPE_S | SLOPE_W, //!< Bit mask containing all 'simple' slopes. Does not appear as a slope.
|
||||||
SLOPE_NWS = SLOPE_N | SLOPE_W | SLOPE_S, //!< North, west and south corner are raised
|
SLOPE_NWS = SLOPE_N | SLOPE_W | SLOPE_S, //!< North, west and south corner are raised
|
||||||
SLOPE_WSE = SLOPE_W | SLOPE_S | SLOPE_E, //!< West, south and east corner are raised
|
SLOPE_WSE = SLOPE_W | SLOPE_S | SLOPE_E, //!< West, south and east corner are raised
|
||||||
SLOPE_SEN = SLOPE_S | SLOPE_E | SLOPE_N, //!< South, east and north corner are raised
|
SLOPE_SEN = SLOPE_S | SLOPE_E | SLOPE_N, //!< South, east and north corner are raised
|
||||||
@@ -62,7 +80,7 @@ public:
|
|||||||
SLOPE_STEEP_E = SLOPE_STEEP | SLOPE_SEN, //!< A steep slope falling to west (from east)
|
SLOPE_STEEP_E = SLOPE_STEEP | SLOPE_SEN, //!< A steep slope falling to west (from east)
|
||||||
SLOPE_STEEP_N = SLOPE_STEEP | SLOPE_ENW, //!< A steep slope falling to south (from north)
|
SLOPE_STEEP_N = SLOPE_STEEP | SLOPE_ENW, //!< A steep slope falling to south (from north)
|
||||||
|
|
||||||
SLOPE_INVALID = 0xFF, //!< An invalid slope
|
SLOPE_INVALID = 0xFFFF, //!< An invalid slope
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -129,6 +147,7 @@ public:
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Check if a tile has a steep slope.
|
* Check if a tile has a steep slope.
|
||||||
|
* Steep slopes are slopes with a height difference of 2 across one diagonal of the tile.
|
||||||
* @param slope The slope to check on.
|
* @param slope The slope to check on.
|
||||||
* @pre slope != SLOPE_INVALID.
|
* @pre slope != SLOPE_INVALID.
|
||||||
* @return True if the slope is a steep slope.
|
* @return True if the slope is a steep slope.
|
||||||
@@ -137,9 +156,11 @@ public:
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Check if a tile has a halftile slope.
|
* Check if a tile has a halftile slope.
|
||||||
|
* Halftile slopes appear on top of halftile foundations. E.g. the slope you get when building a horizontal railtrack on the top of a SLOPE_N or SLOPE_STEEP_N.
|
||||||
* @param slope The slope to check on.
|
* @param slope The slope to check on.
|
||||||
* @pre slope != SLOPE_INVALID.
|
* @pre slope != SLOPE_INVALID.
|
||||||
* @return True if the slope is a halftile slope.
|
* @return True if the slope is a halftile slope.
|
||||||
|
* @note Currently there is no API function that would return or accept a halftile slope.
|
||||||
*/
|
*/
|
||||||
static bool IsHalftileSlope(Slope slope);
|
static bool IsHalftileSlope(Slope slope);
|
||||||
|
|
||||||
@@ -193,9 +214,10 @@ public:
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the slope of a tile.
|
* Get the slope of a tile.
|
||||||
|
* This is the slope of the bare tile. A possible foundation on the tile does not influence this slope.
|
||||||
* @param tile The tile to check on.
|
* @param tile The tile to check on.
|
||||||
* @pre AIMap::IsValidTile(tile).
|
* @pre AIMap::IsValidTile(tile).
|
||||||
* @return 0 means flat, others indicate internal state of slope.
|
* @return Bit mask encoding the slope. See #Slope for a description of the returned values.
|
||||||
*/
|
*/
|
||||||
static Slope GetSlope(TileIndex tile);
|
static Slope GetSlope(TileIndex tile);
|
||||||
|
|
||||||
@@ -211,13 +233,43 @@ public:
|
|||||||
static Slope GetComplementSlope(Slope slope);
|
static Slope GetComplementSlope(Slope slope);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the height of the tile.
|
* Get the height of the north corner of a tile.
|
||||||
|
* The returned height is the height of the bare tile. A possible foundation on the tile does not influence this height.
|
||||||
|
* @deprecated This function is deprecated and might be removed in future versions of the API. Use GetMinHeight(), GetMaxHeight() or GetCornerHeight() instead.
|
||||||
* @param tile The tile to check on.
|
* @param tile The tile to check on.
|
||||||
* @pre AIMap::IsValidTile(tile).
|
* @pre AIMap::IsValidTile(tile).
|
||||||
* @return The height of the tile, ranging from 0 to 15.
|
* @return The height of the north corner of the tile, ranging from 0 to 15.
|
||||||
*/
|
*/
|
||||||
static int32 GetHeight(TileIndex tile);
|
static int32 GetHeight(TileIndex tile);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the minimal height on a tile.
|
||||||
|
* The returned height is the height of the bare tile. A possible foundation on the tile does not influence this height.
|
||||||
|
* @param tile The tile to check on.
|
||||||
|
* @pre AIMap::IsValidTile(tile).
|
||||||
|
* @return The height of the lowest corner of the tile, ranging from 0 to 15.
|
||||||
|
*/
|
||||||
|
static int32 GetMinHeight(TileIndex tile);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the maximal height on a tile.
|
||||||
|
* The returned height is the height of the bare tile. A possible foundation on the tile does not influence this height.
|
||||||
|
* @param tile The tile to check on.
|
||||||
|
* @pre AIMap::IsValidTile(tile).
|
||||||
|
* @return The height of the highest corner of the tile, ranging from 0 to 15.
|
||||||
|
*/
|
||||||
|
static int32 GetMaxHeight(TileIndex tile);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the height of a certain corner of a tile.
|
||||||
|
* The returned height is the height of the bare tile. A possible foundation on the tile does not influence this height.
|
||||||
|
* @param tile The tile to check on.
|
||||||
|
* @param corner The corner to query.
|
||||||
|
* @pre AIMap::IsValidTile(tile).
|
||||||
|
* @return The height of the lowest corner of the tile, ranging from 0 to 15.
|
||||||
|
*/
|
||||||
|
static int32 GetCornerHeight(TileIndex tile, Corner corner);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the owner of the tile.
|
* Get the owner of the tile.
|
||||||
* @param tile The tile to get the owner from.
|
* @param tile The tile to get the owner from.
|
||||||
@@ -251,9 +303,12 @@ public:
|
|||||||
* @param height The height of the station.
|
* @param height The height of the station.
|
||||||
* @param radius The radius of the station.
|
* @param radius The radius of the station.
|
||||||
* @pre AIMap::IsValidTile(tile).
|
* @pre AIMap::IsValidTile(tile).
|
||||||
|
* @pre width > 0.
|
||||||
|
* @pre height > 0.
|
||||||
|
* @pre radius >= 0.
|
||||||
* @return Value below 8 means no acceptance; the more the better.
|
* @return Value below 8 means no acceptance; the more the better.
|
||||||
*/
|
*/
|
||||||
static int32 GetCargoAcceptance(TileIndex tile, CargoID cargo_type, uint width, uint height, uint radius);
|
static int32 GetCargoAcceptance(TileIndex tile, CargoID cargo_type, int width, int height, int radius);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Checks how many tiles in the radius produces this cargo.
|
* Checks how many tiles in the radius produces this cargo.
|
||||||
@@ -265,10 +320,13 @@ public:
|
|||||||
* @param height The height of the station.
|
* @param height The height of the station.
|
||||||
* @param radius The radius of the station.
|
* @param radius The radius of the station.
|
||||||
* @pre AIMap::IsValidTile(tile).
|
* @pre AIMap::IsValidTile(tile).
|
||||||
|
* @pre width > 0.
|
||||||
|
* @pre height > 0.
|
||||||
|
* @pre radius >= 0.
|
||||||
* @return The tiles that produce this cargo within radius of the tile.
|
* @return The tiles that produce this cargo within radius of the tile.
|
||||||
* @note Town(houses) are not included in the value.
|
* @note Town(houses) are not included in the value.
|
||||||
*/
|
*/
|
||||||
static int32 GetCargoProduction(TileIndex tile, CargoID cargo_type, uint width, uint height, uint radius);
|
static int32 GetCargoProduction(TileIndex tile, CargoID cargo_type, int width, int height, int radius);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the manhattan distance from the tile to the tile.
|
* Get the manhattan distance from the tile to the tile.
|
||||||
@@ -288,7 +346,10 @@ public:
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Raise the given corners of the tile. The corners can be combined,
|
* Raise the given corners of the tile. The corners can be combined,
|
||||||
* for example: SLOPE_N | SLOPE_W (= SLOPE_NW)
|
* for example: SLOPE_N | SLOPE_W (= SLOPE_NW) will raise the west and the north corner.
|
||||||
|
* @note The corners will be modified in the order west (first), south, east, north (last).
|
||||||
|
* Changing one corner might cause another corner to be changed too. So modifiing
|
||||||
|
* multiple corners may result in changing some corners by multiple steps.
|
||||||
* @param tile The tile to raise.
|
* @param tile The tile to raise.
|
||||||
* @param slope Corners to raise (SLOPE_xxx).
|
* @param slope Corners to raise (SLOPE_xxx).
|
||||||
* @pre tile < AIMap::GetMapSize().
|
* @pre tile < AIMap::GetMapSize().
|
||||||
@@ -301,7 +362,10 @@ public:
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Lower the given corners of the tile. The corners can be combined,
|
* Lower the given corners of the tile. The corners can be combined,
|
||||||
* for example: SLOPE_N | SLOPE_W (= SLOPE_NW)
|
* for example: SLOPE_N | SLOPE_W (= SLOPE_NW) will lower the west and the north corner.
|
||||||
|
* @note The corners will be modified in the order west (first), south, east, north (last).
|
||||||
|
* Changing one corner might cause another corner to be changed too. So modifiing
|
||||||
|
* multiple corners may result in changing some corners by multiple steps.
|
||||||
* @param tile The tile to lower.
|
* @param tile The tile to lower.
|
||||||
* @param slope Corners to lower (SLOPE_xxx).
|
* @param slope Corners to lower (SLOPE_xxx).
|
||||||
* @pre tile < AIMap::GetMapSize().
|
* @pre tile < AIMap::GetMapSize().
|
||||||
|
@@ -7,6 +7,8 @@ namespace SQConvert {
|
|||||||
/* Allow enums to be used as Squirrel parameters */
|
/* Allow enums to be used as Squirrel parameters */
|
||||||
template <> AITile::ErrorMessages GetParam(ForceType<AITile::ErrorMessages>, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (AITile::ErrorMessages)tmp; }
|
template <> AITile::ErrorMessages GetParam(ForceType<AITile::ErrorMessages>, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (AITile::ErrorMessages)tmp; }
|
||||||
template <> int Return<AITile::ErrorMessages>(HSQUIRRELVM vm, AITile::ErrorMessages res) { sq_pushinteger(vm, (int32)res); return 1; }
|
template <> int Return<AITile::ErrorMessages>(HSQUIRRELVM vm, AITile::ErrorMessages res) { sq_pushinteger(vm, (int32)res); return 1; }
|
||||||
|
template <> AITile::Corner GetParam(ForceType<AITile::Corner>, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (AITile::Corner)tmp; }
|
||||||
|
template <> int Return<AITile::Corner>(HSQUIRRELVM vm, AITile::Corner res) { sq_pushinteger(vm, (int32)res); return 1; }
|
||||||
template <> AITile::Slope GetParam(ForceType<AITile::Slope>, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (AITile::Slope)tmp; }
|
template <> AITile::Slope GetParam(ForceType<AITile::Slope>, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (AITile::Slope)tmp; }
|
||||||
template <> int Return<AITile::Slope>(HSQUIRRELVM vm, AITile::Slope res) { sq_pushinteger(vm, (int32)res); return 1; }
|
template <> int Return<AITile::Slope>(HSQUIRRELVM vm, AITile::Slope res) { sq_pushinteger(vm, (int32)res); return 1; }
|
||||||
template <> AITile::TransportType GetParam(ForceType<AITile::TransportType>, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (AITile::TransportType)tmp; }
|
template <> AITile::TransportType GetParam(ForceType<AITile::TransportType>, HSQUIRRELVM vm, int index, SQAutoFreePointers *ptr) { SQInteger tmp; sq_getinteger(vm, index, &tmp); return (AITile::TransportType)tmp; }
|
||||||
@@ -25,42 +27,53 @@ void SQAITile_Register(Squirrel *engine) {
|
|||||||
SQAITile.PreRegister(engine);
|
SQAITile.PreRegister(engine);
|
||||||
SQAITile.AddConstructor<void (AITile::*)(), 1>(engine, "x");
|
SQAITile.AddConstructor<void (AITile::*)(), 1>(engine, "x");
|
||||||
|
|
||||||
SQAITile.DefSQConst(engine, AITile::ERR_TILE_BASE, "ERR_TILE_BASE");
|
SQAITile.DefSQConst(engine, AITile::ERR_TILE_BASE, "ERR_TILE_BASE");
|
||||||
SQAITile.DefSQConst(engine, AITile::ERR_TILE_TOO_HIGH, "ERR_TILE_TOO_HIGH");
|
SQAITile.DefSQConst(engine, AITile::ERR_TILE_TOO_HIGH, "ERR_TILE_TOO_HIGH");
|
||||||
SQAITile.DefSQConst(engine, AITile::ERR_TILE_TOO_LOW, "ERR_TILE_TOO_LOW");
|
SQAITile.DefSQConst(engine, AITile::ERR_TILE_TOO_LOW, "ERR_TILE_TOO_LOW");
|
||||||
SQAITile.DefSQConst(engine, AITile::SLOPE_FLAT, "SLOPE_FLAT");
|
SQAITile.DefSQConst(engine, AITile::ERR_AREA_ALREADY_FLAT, "ERR_AREA_ALREADY_FLAT");
|
||||||
SQAITile.DefSQConst(engine, AITile::SLOPE_W, "SLOPE_W");
|
SQAITile.DefSQConst(engine, AITile::ERR_EXCAVATION_WOULD_DAMAGE, "ERR_EXCAVATION_WOULD_DAMAGE");
|
||||||
SQAITile.DefSQConst(engine, AITile::SLOPE_S, "SLOPE_S");
|
SQAITile.DefSQConst(engine, AITile::CORNER_W, "CORNER_W");
|
||||||
SQAITile.DefSQConst(engine, AITile::SLOPE_E, "SLOPE_E");
|
SQAITile.DefSQConst(engine, AITile::CORNER_S, "CORNER_S");
|
||||||
SQAITile.DefSQConst(engine, AITile::SLOPE_N, "SLOPE_N");
|
SQAITile.DefSQConst(engine, AITile::CORNER_E, "CORNER_E");
|
||||||
SQAITile.DefSQConst(engine, AITile::SLOPE_STEEP, "SLOPE_STEEP");
|
SQAITile.DefSQConst(engine, AITile::CORNER_N, "CORNER_N");
|
||||||
SQAITile.DefSQConst(engine, AITile::SLOPE_NW, "SLOPE_NW");
|
SQAITile.DefSQConst(engine, AITile::CORNER_INVALID, "CORNER_INVALID");
|
||||||
SQAITile.DefSQConst(engine, AITile::SLOPE_SW, "SLOPE_SW");
|
SQAITile.DefSQConst(engine, AITile::SLOPE_FLAT, "SLOPE_FLAT");
|
||||||
SQAITile.DefSQConst(engine, AITile::SLOPE_SE, "SLOPE_SE");
|
SQAITile.DefSQConst(engine, AITile::SLOPE_W, "SLOPE_W");
|
||||||
SQAITile.DefSQConst(engine, AITile::SLOPE_NE, "SLOPE_NE");
|
SQAITile.DefSQConst(engine, AITile::SLOPE_S, "SLOPE_S");
|
||||||
SQAITile.DefSQConst(engine, AITile::SLOPE_EW, "SLOPE_EW");
|
SQAITile.DefSQConst(engine, AITile::SLOPE_E, "SLOPE_E");
|
||||||
SQAITile.DefSQConst(engine, AITile::SLOPE_NS, "SLOPE_NS");
|
SQAITile.DefSQConst(engine, AITile::SLOPE_N, "SLOPE_N");
|
||||||
SQAITile.DefSQConst(engine, AITile::SLOPE_ELEVATED, "SLOPE_ELEVATED");
|
SQAITile.DefSQConst(engine, AITile::SLOPE_STEEP, "SLOPE_STEEP");
|
||||||
SQAITile.DefSQConst(engine, AITile::SLOPE_NWS, "SLOPE_NWS");
|
SQAITile.DefSQConst(engine, AITile::SLOPE_NW, "SLOPE_NW");
|
||||||
SQAITile.DefSQConst(engine, AITile::SLOPE_WSE, "SLOPE_WSE");
|
SQAITile.DefSQConst(engine, AITile::SLOPE_SW, "SLOPE_SW");
|
||||||
SQAITile.DefSQConst(engine, AITile::SLOPE_SEN, "SLOPE_SEN");
|
SQAITile.DefSQConst(engine, AITile::SLOPE_SE, "SLOPE_SE");
|
||||||
SQAITile.DefSQConst(engine, AITile::SLOPE_ENW, "SLOPE_ENW");
|
SQAITile.DefSQConst(engine, AITile::SLOPE_NE, "SLOPE_NE");
|
||||||
SQAITile.DefSQConst(engine, AITile::SLOPE_STEEP_W, "SLOPE_STEEP_W");
|
SQAITile.DefSQConst(engine, AITile::SLOPE_EW, "SLOPE_EW");
|
||||||
SQAITile.DefSQConst(engine, AITile::SLOPE_STEEP_S, "SLOPE_STEEP_S");
|
SQAITile.DefSQConst(engine, AITile::SLOPE_NS, "SLOPE_NS");
|
||||||
SQAITile.DefSQConst(engine, AITile::SLOPE_STEEP_E, "SLOPE_STEEP_E");
|
SQAITile.DefSQConst(engine, AITile::SLOPE_ELEVATED, "SLOPE_ELEVATED");
|
||||||
SQAITile.DefSQConst(engine, AITile::SLOPE_STEEP_N, "SLOPE_STEEP_N");
|
SQAITile.DefSQConst(engine, AITile::SLOPE_NWS, "SLOPE_NWS");
|
||||||
SQAITile.DefSQConst(engine, AITile::SLOPE_INVALID, "SLOPE_INVALID");
|
SQAITile.DefSQConst(engine, AITile::SLOPE_WSE, "SLOPE_WSE");
|
||||||
SQAITile.DefSQConst(engine, AITile::TRANSPORT_RAIL, "TRANSPORT_RAIL");
|
SQAITile.DefSQConst(engine, AITile::SLOPE_SEN, "SLOPE_SEN");
|
||||||
SQAITile.DefSQConst(engine, AITile::TRANSPORT_ROAD, "TRANSPORT_ROAD");
|
SQAITile.DefSQConst(engine, AITile::SLOPE_ENW, "SLOPE_ENW");
|
||||||
SQAITile.DefSQConst(engine, AITile::TRANSPORT_WATER, "TRANSPORT_WATER");
|
SQAITile.DefSQConst(engine, AITile::SLOPE_STEEP_W, "SLOPE_STEEP_W");
|
||||||
SQAITile.DefSQConst(engine, AITile::TRANSPORT_AIR, "TRANSPORT_AIR");
|
SQAITile.DefSQConst(engine, AITile::SLOPE_STEEP_S, "SLOPE_STEEP_S");
|
||||||
SQAITile.DefSQConst(engine, AITile::TRANSPORT_INVALID, "TRANSPORT_INVALID");
|
SQAITile.DefSQConst(engine, AITile::SLOPE_STEEP_E, "SLOPE_STEEP_E");
|
||||||
|
SQAITile.DefSQConst(engine, AITile::SLOPE_STEEP_N, "SLOPE_STEEP_N");
|
||||||
|
SQAITile.DefSQConst(engine, AITile::SLOPE_INVALID, "SLOPE_INVALID");
|
||||||
|
SQAITile.DefSQConst(engine, AITile::TRANSPORT_RAIL, "TRANSPORT_RAIL");
|
||||||
|
SQAITile.DefSQConst(engine, AITile::TRANSPORT_ROAD, "TRANSPORT_ROAD");
|
||||||
|
SQAITile.DefSQConst(engine, AITile::TRANSPORT_WATER, "TRANSPORT_WATER");
|
||||||
|
SQAITile.DefSQConst(engine, AITile::TRANSPORT_AIR, "TRANSPORT_AIR");
|
||||||
|
SQAITile.DefSQConst(engine, AITile::TRANSPORT_INVALID, "TRANSPORT_INVALID");
|
||||||
|
|
||||||
AIError::RegisterErrorMap(STR_1003_ALREADY_AT_SEA_LEVEL, AITile::ERR_TILE_TOO_HIGH);
|
AIError::RegisterErrorMap(STR_1003_ALREADY_AT_SEA_LEVEL, AITile::ERR_TILE_TOO_HIGH);
|
||||||
AIError::RegisterErrorMap(STR_1003_ALREADY_AT_SEA_LEVEL, AITile::ERR_TILE_TOO_LOW);
|
AIError::RegisterErrorMap(STR_1003_ALREADY_AT_SEA_LEVEL, AITile::ERR_TILE_TOO_LOW);
|
||||||
|
AIError::RegisterErrorMap(STR_ALREADY_LEVELLED, AITile::ERR_AREA_ALREADY_FLAT);
|
||||||
|
AIError::RegisterErrorMap(STR_1002_EXCAVATION_WOULD_DAMAGE, AITile::ERR_EXCAVATION_WOULD_DAMAGE);
|
||||||
|
|
||||||
AIError::RegisterErrorMapString(AITile::ERR_TILE_TOO_HIGH, "ERR_TILE_TOO_HIGH");
|
AIError::RegisterErrorMapString(AITile::ERR_TILE_TOO_HIGH, "ERR_TILE_TOO_HIGH");
|
||||||
AIError::RegisterErrorMapString(AITile::ERR_TILE_TOO_LOW, "ERR_TILE_TOO_LOW");
|
AIError::RegisterErrorMapString(AITile::ERR_TILE_TOO_LOW, "ERR_TILE_TOO_LOW");
|
||||||
|
AIError::RegisterErrorMapString(AITile::ERR_AREA_ALREADY_FLAT, "ERR_AREA_ALREADY_FLAT");
|
||||||
|
AIError::RegisterErrorMapString(AITile::ERR_EXCAVATION_WOULD_DAMAGE, "ERR_EXCAVATION_WOULD_DAMAGE");
|
||||||
|
|
||||||
SQAITile.DefSQStaticMethod(engine, &AITile::IsBuildable, "IsBuildable", 2, ".i");
|
SQAITile.DefSQStaticMethod(engine, &AITile::IsBuildable, "IsBuildable", 2, ".i");
|
||||||
SQAITile.DefSQStaticMethod(engine, &AITile::IsBuildableRectangle, "IsBuildableRectangle", 4, ".iii");
|
SQAITile.DefSQStaticMethod(engine, &AITile::IsBuildableRectangle, "IsBuildableRectangle", 4, ".iii");
|
||||||
@@ -78,6 +91,9 @@ void SQAITile_Register(Squirrel *engine) {
|
|||||||
SQAITile.DefSQStaticMethod(engine, &AITile::GetSlope, "GetSlope", 2, ".i");
|
SQAITile.DefSQStaticMethod(engine, &AITile::GetSlope, "GetSlope", 2, ".i");
|
||||||
SQAITile.DefSQStaticMethod(engine, &AITile::GetComplementSlope, "GetComplementSlope", 2, ".i");
|
SQAITile.DefSQStaticMethod(engine, &AITile::GetComplementSlope, "GetComplementSlope", 2, ".i");
|
||||||
SQAITile.DefSQStaticMethod(engine, &AITile::GetHeight, "GetHeight", 2, ".i");
|
SQAITile.DefSQStaticMethod(engine, &AITile::GetHeight, "GetHeight", 2, ".i");
|
||||||
|
SQAITile.DefSQStaticMethod(engine, &AITile::GetMinHeight, "GetMinHeight", 2, ".i");
|
||||||
|
SQAITile.DefSQStaticMethod(engine, &AITile::GetMaxHeight, "GetMaxHeight", 2, ".i");
|
||||||
|
SQAITile.DefSQStaticMethod(engine, &AITile::GetCornerHeight, "GetCornerHeight", 3, ".ii");
|
||||||
SQAITile.DefSQStaticMethod(engine, &AITile::GetOwner, "GetOwner", 2, ".i");
|
SQAITile.DefSQStaticMethod(engine, &AITile::GetOwner, "GetOwner", 2, ".i");
|
||||||
SQAITile.DefSQStaticMethod(engine, &AITile::HasTransportType, "HasTransportType", 3, ".ii");
|
SQAITile.DefSQStaticMethod(engine, &AITile::HasTransportType, "HasTransportType", 3, ".ii");
|
||||||
SQAITile.DefSQStaticMethod(engine, &AITile::GetCargoAcceptance, "GetCargoAcceptance", 6, ".iiiii");
|
SQAITile.DefSQStaticMethod(engine, &AITile::GetCargoAcceptance, "GetCargoAcceptance", 6, ".iiiii");
|
||||||
|
@@ -68,9 +68,9 @@ void AITileList::RemoveTile(TileIndex tile)
|
|||||||
this->RemoveItem(tile);
|
this->RemoveItem(tile);
|
||||||
}
|
}
|
||||||
|
|
||||||
AITileList_IndustryAccepting::AITileList_IndustryAccepting(IndustryID industry_id, uint radius)
|
AITileList_IndustryAccepting::AITileList_IndustryAccepting(IndustryID industry_id, int radius)
|
||||||
{
|
{
|
||||||
if (!AIIndustry::IsValidIndustry(industry_id)) return;
|
if (!AIIndustry::IsValidIndustry(industry_id) || radius <= 0) return;
|
||||||
|
|
||||||
const Industry *i = ::GetIndustry(industry_id);
|
const Industry *i = ::GetIndustry(industry_id);
|
||||||
|
|
||||||
@@ -106,9 +106,9 @@ AITileList_IndustryAccepting::AITileList_IndustryAccepting(IndustryID industry_i
|
|||||||
} END_TILE_LOOP(cur_tile, i->width + radius * 2, i->height + radius * 2, i->xy - ::TileDiffXY(radius, radius))
|
} END_TILE_LOOP(cur_tile, i->width + radius * 2, i->height + radius * 2, i->xy - ::TileDiffXY(radius, radius))
|
||||||
}
|
}
|
||||||
|
|
||||||
AITileList_IndustryProducing::AITileList_IndustryProducing(IndustryID industry_id, uint radius)
|
AITileList_IndustryProducing::AITileList_IndustryProducing(IndustryID industry_id, int radius)
|
||||||
{
|
{
|
||||||
if (!AIIndustry::IsValidIndustry(industry_id)) return;
|
if (!AIIndustry::IsValidIndustry(industry_id) || radius <= 0) return;
|
||||||
|
|
||||||
const Industry *i = ::GetIndustry(industry_id);
|
const Industry *i = ::GetIndustry(industry_id);
|
||||||
|
|
||||||
|
@@ -71,8 +71,10 @@ public:
|
|||||||
/**
|
/**
|
||||||
* @param industry_id The industry to create the AITileList around.
|
* @param industry_id The industry to create the AITileList around.
|
||||||
* @param radius The radius of the station you will be using.
|
* @param radius The radius of the station you will be using.
|
||||||
|
* @pre AIIndustry::IsValidIndustry(industry_id).
|
||||||
|
* @pre radius > 0.
|
||||||
*/
|
*/
|
||||||
AITileList_IndustryAccepting(IndustryID industry_id, uint radius);
|
AITileList_IndustryAccepting(IndustryID industry_id, int radius);
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -87,8 +89,10 @@ public:
|
|||||||
/**
|
/**
|
||||||
* @param industry_id The industry to create the AITileList around.
|
* @param industry_id The industry to create the AITileList around.
|
||||||
* @param radius The radius of the station you will be using.
|
* @param radius The radius of the station you will be using.
|
||||||
|
* @pre AIIndustry::IsValidIndustry(industry_id).
|
||||||
|
* @pre radius > 0.
|
||||||
*/
|
*/
|
||||||
AITileList_IndustryProducing(IndustryID industry_id, uint radius);
|
AITileList_IndustryProducing(IndustryID industry_id, int radius);
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@@ -37,7 +37,7 @@ namespace SQConvert {
|
|||||||
void SQAITileList_IndustryAccepting_Register(Squirrel *engine) {
|
void SQAITileList_IndustryAccepting_Register(Squirrel *engine) {
|
||||||
DefSQClass <AITileList_IndustryAccepting> SQAITileList_IndustryAccepting("AITileList_IndustryAccepting");
|
DefSQClass <AITileList_IndustryAccepting> SQAITileList_IndustryAccepting("AITileList_IndustryAccepting");
|
||||||
SQAITileList_IndustryAccepting.PreRegister(engine, "AITileList");
|
SQAITileList_IndustryAccepting.PreRegister(engine, "AITileList");
|
||||||
SQAITileList_IndustryAccepting.AddConstructor<void (AITileList_IndustryAccepting::*)(IndustryID industry_id, uint radius), 3>(engine, "xii");
|
SQAITileList_IndustryAccepting.AddConstructor<void (AITileList_IndustryAccepting::*)(IndustryID industry_id, int radius), 3>(engine, "xii");
|
||||||
|
|
||||||
SQAITileList_IndustryAccepting.PostRegister(engine);
|
SQAITileList_IndustryAccepting.PostRegister(engine);
|
||||||
}
|
}
|
||||||
@@ -54,7 +54,7 @@ namespace SQConvert {
|
|||||||
void SQAITileList_IndustryProducing_Register(Squirrel *engine) {
|
void SQAITileList_IndustryProducing_Register(Squirrel *engine) {
|
||||||
DefSQClass <AITileList_IndustryProducing> SQAITileList_IndustryProducing("AITileList_IndustryProducing");
|
DefSQClass <AITileList_IndustryProducing> SQAITileList_IndustryProducing("AITileList_IndustryProducing");
|
||||||
SQAITileList_IndustryProducing.PreRegister(engine, "AITileList");
|
SQAITileList_IndustryProducing.PreRegister(engine, "AITileList");
|
||||||
SQAITileList_IndustryProducing.AddConstructor<void (AITileList_IndustryProducing::*)(IndustryID industry_id, uint radius), 3>(engine, "xii");
|
SQAITileList_IndustryProducing.AddConstructor<void (AITileList_IndustryProducing::*)(IndustryID industry_id, int radius), 3>(engine, "xii");
|
||||||
|
|
||||||
SQAITileList_IndustryProducing.PostRegister(engine);
|
SQAITileList_IndustryProducing.PostRegister(engine);
|
||||||
}
|
}
|
||||||
|
@@ -23,14 +23,26 @@
|
|||||||
/* If it's a tunnel alread, take the easy way out! */
|
/* If it's a tunnel alread, take the easy way out! */
|
||||||
if (IsTunnelTile(tile)) return ::GetOtherTunnelEnd(tile);
|
if (IsTunnelTile(tile)) return ::GetOtherTunnelEnd(tile);
|
||||||
|
|
||||||
::DoCommand(tile, 0, 0, DC_AUTO, CMD_BUILD_TUNNEL);
|
uint start_z;
|
||||||
return _build_tunnel_endtile == 0 ? INVALID_TILE : _build_tunnel_endtile;
|
Slope start_tileh = ::GetTileSlope(tile, &start_z);
|
||||||
|
DiagDirection direction = ::GetInclinedSlopeDirection(start_tileh);
|
||||||
|
if (direction == INVALID_DIAGDIR) return INVALID_TILE;
|
||||||
|
|
||||||
|
TileIndexDiff delta = ::TileOffsByDiagDir(direction);
|
||||||
|
uint end_z;
|
||||||
|
do {
|
||||||
|
tile += delta;
|
||||||
|
if (!::IsValidTile(tile)) return INVALID_TILE;
|
||||||
|
|
||||||
|
::GetTileSlope(tile, &end_z);
|
||||||
|
} while (start_z != end_z);
|
||||||
|
|
||||||
|
return tile;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void _DoCommandReturnBuildTunnel2(class AIInstance *instance)
|
static void _DoCommandReturnBuildTunnel2(class AIInstance *instance)
|
||||||
{
|
{
|
||||||
if (!AITunnel::_BuildTunnelRoad2()) {
|
if (!AITunnel::_BuildTunnelRoad2()) {
|
||||||
AIObject::SetLastCommandRes(false);
|
|
||||||
AIInstance::DoCommandReturn(instance);
|
AIInstance::DoCommandReturn(instance);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -43,7 +55,6 @@ static void _DoCommandReturnBuildTunnel2(class AIInstance *instance)
|
|||||||
static void _DoCommandReturnBuildTunnel1(class AIInstance *instance)
|
static void _DoCommandReturnBuildTunnel1(class AIInstance *instance)
|
||||||
{
|
{
|
||||||
if (!AITunnel::_BuildTunnelRoad1()) {
|
if (!AITunnel::_BuildTunnelRoad1()) {
|
||||||
AIObject::SetLastCommandRes(false);
|
|
||||||
AIInstance::DoCommandReturn(instance);
|
AIInstance::DoCommandReturn(instance);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -62,7 +73,7 @@ static void _DoCommandReturnBuildTunnel1(class AIInstance *instance)
|
|||||||
uint type = 0;
|
uint type = 0;
|
||||||
if (vehicle_type == AIVehicle::VT_ROAD) {
|
if (vehicle_type == AIVehicle::VT_ROAD) {
|
||||||
type |= (TRANSPORT_ROAD << 9);
|
type |= (TRANSPORT_ROAD << 9);
|
||||||
type |= RoadTypeToRoadTypes((::RoadType)AIObject::GetRoadType());
|
type |= ::RoadTypeToRoadTypes((::RoadType)AIObject::GetRoadType());
|
||||||
} else {
|
} else {
|
||||||
type |= (TRANSPORT_RAIL << 9);
|
type |= (TRANSPORT_RAIL << 9);
|
||||||
type |= AIRail::GetCurrentRailType();
|
type |= AIRail::GetCurrentRailType();
|
||||||
@@ -74,10 +85,7 @@ static void _DoCommandReturnBuildTunnel1(class AIInstance *instance)
|
|||||||
}
|
}
|
||||||
|
|
||||||
AIObject::SetCallbackVariable(0, start);
|
AIObject::SetCallbackVariable(0, start);
|
||||||
if (!AIObject::DoCommand(start, type, 0, CMD_BUILD_TUNNEL, NULL, &_DoCommandReturnBuildTunnel1)) return false;
|
return AIObject::DoCommand(start, type, 0, CMD_BUILD_TUNNEL, NULL, &_DoCommandReturnBuildTunnel1);
|
||||||
|
|
||||||
/* In case of test-mode, test if we can build both road pieces */
|
|
||||||
return _BuildTunnelRoad1();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* static */ bool AITunnel::_BuildTunnelRoad1()
|
/* static */ bool AITunnel::_BuildTunnelRoad1()
|
||||||
@@ -89,10 +97,7 @@ static void _DoCommandReturnBuildTunnel1(class AIInstance *instance)
|
|||||||
DiagDirection dir_1 = (DiagDirection)((::TileX(start) == ::TileX(end)) ? (::TileY(start) < ::TileY(end) ? DIAGDIR_NW : DIAGDIR_SE) : (::TileX(start) < ::TileX(end) ? DIAGDIR_NE : DIAGDIR_SW));
|
DiagDirection dir_1 = (DiagDirection)((::TileX(start) == ::TileX(end)) ? (::TileY(start) < ::TileY(end) ? DIAGDIR_NW : DIAGDIR_SE) : (::TileX(start) < ::TileX(end) ? DIAGDIR_NE : DIAGDIR_SW));
|
||||||
DiagDirection dir_2 = ::ReverseDiagDir(dir_1);
|
DiagDirection dir_2 = ::ReverseDiagDir(dir_1);
|
||||||
|
|
||||||
if (!AIObject::DoCommand(start + ::TileOffsByDiagDir(dir_1), ::DiagDirToRoadBits(dir_2) | (AIObject::GetRoadType() << 4), 0, CMD_BUILD_ROAD, NULL, &_DoCommandReturnBuildTunnel2)) return false;
|
return AIObject::DoCommand(start + ::TileOffsByDiagDir(dir_1), ::DiagDirToRoadBits(dir_2) | (AIObject::GetRoadType() << 4), 0, CMD_BUILD_ROAD, NULL, &_DoCommandReturnBuildTunnel2);
|
||||||
|
|
||||||
/* In case of test-mode, test the other road piece too */
|
|
||||||
return _BuildTunnelRoad2();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* static */ bool AITunnel::_BuildTunnelRoad2()
|
/* static */ bool AITunnel::_BuildTunnelRoad2()
|
||||||
|
@@ -46,11 +46,15 @@ public:
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the tile that exits on the other end of a (would be) tunnel starting
|
* Get the tile that exits on the other end of a (would be) tunnel starting
|
||||||
* at tile.
|
* at tile. If there is no 'simple' inclined slope at the start tile,
|
||||||
|
* this function will return AIMap::TILE_INVALID.
|
||||||
* @param tile The tile that is an entrance to a tunnel or the tile where you may want to build a tunnel.
|
* @param tile The tile that is an entrance to a tunnel or the tile where you may want to build a tunnel.
|
||||||
* @pre AIMap::IsValidTile(tile).
|
* @pre AIMap::IsValidTile(tile).
|
||||||
* @return The TileIndex that is the other end of the (would be) tunnel, or
|
* @return The TileIndex that is the other end of the (would be) tunnel, or
|
||||||
* TILE_INVALID if no other end was found (can't build tunnel).
|
* AIMap::TILE_INVALID if no other end was found (can't build tunnel).
|
||||||
|
* @note Even if this function returns a valid tile, that is no guarantee
|
||||||
|
* that building a tunnel will succeed. Use BuildTunnel in AITestMode to
|
||||||
|
* check whether a tunnel can actually be build.
|
||||||
*/
|
*/
|
||||||
static TileIndex GetOtherTunnelEnd(TileIndex tile);
|
static TileIndex GetOtherTunnelEnd(TileIndex tile);
|
||||||
|
|
||||||
|
@@ -1,6 +1,75 @@
|
|||||||
/* $Id$ */
|
/* $Id$ */
|
||||||
|
|
||||||
/** @file ai_types.hpp Defines all the types of the game, like VehicleID, .... */
|
/** @file ai_types.hpp Defines all the types of the game, like IDs of various objects.
|
||||||
|
*
|
||||||
|
* IDs are used to identify certain objects. They are only unique within the object type, so for example a vehicle may have VehicleID 2009,
|
||||||
|
* while a station has StationID 2009 at the same time. Also IDs are assigned arbitrary, you cannot assume them to be consecutive.
|
||||||
|
* Also note, that some IDs are static and never change, while others are allocated dynamically and might be
|
||||||
|
* reused for other objects once they are released. So be careful, which IDs you store for which purpose and whether they stay valid all the time.
|
||||||
|
*
|
||||||
|
* <table>
|
||||||
|
* <tr><th>type </th><th> object </th>
|
||||||
|
* <th> acquired </th>
|
||||||
|
* <th> released </th>
|
||||||
|
* <th> reused </th></tr>
|
||||||
|
* <tr><td>#BridgeID </td><td> bridge type </td>
|
||||||
|
* <td> introduction \ref newgrf_changes "(1)" </td>
|
||||||
|
* <td> never \ref newgrf_changes "(1)" </td>
|
||||||
|
* <td> no \ref newgrf_changes "(1)" </td></tr>
|
||||||
|
* <tr><td>#CargoID </td><td> cargo type </td>
|
||||||
|
* <td> game start \ref newgrf_changes "(1)" </td>
|
||||||
|
* <td> never \ref newgrf_changes "(1)" </td>
|
||||||
|
* <td> no \ref newgrf_changes "(1)" </td></tr>
|
||||||
|
* <tr><td>#EngineID </td><td> engine type </td>
|
||||||
|
* <td> introduction, preview \ref dynamic_engines "(2)" </td>
|
||||||
|
* <td> engines retires \ref dynamic_engines "(2)" </td>
|
||||||
|
* <td> no \ref dynamic_engines "(2)" </td></tr>
|
||||||
|
* <tr><td>#GroupID </td><td> vehicle group </td>
|
||||||
|
* <td> creation </td>
|
||||||
|
* <td> deletion </td>
|
||||||
|
* <td> yes </td></tr>
|
||||||
|
* <tr><td>#IndustryID </td><td> industry </td>
|
||||||
|
* <td> construction </td>
|
||||||
|
* <td> closure </td>
|
||||||
|
* <td> yes </td></tr>
|
||||||
|
* <tr><td>#IndustryType</td><td> industry type </td>
|
||||||
|
* <td> game start \ref newgrf_changes "(1)" </td>
|
||||||
|
* <td> never \ref newgrf_changes "(1)" </td>
|
||||||
|
* <td> no </td></tr>
|
||||||
|
* <tr><td>#SignID </td><td> sign </td>
|
||||||
|
* <td> construction </td>
|
||||||
|
* <td> deletion </td>
|
||||||
|
* <td> yes </td></tr>
|
||||||
|
* <tr><td>#StationID </td><td> station </td>
|
||||||
|
* <td> construction </td>
|
||||||
|
* <td> expiration of 'grey' station sign after deletion </td>
|
||||||
|
* <td> yes </td></tr>
|
||||||
|
* <tr><td>#SubsidyID </td><td> subsidy </td>
|
||||||
|
* <td> offer announcement </td>
|
||||||
|
* <td> (offer) expiration </td>
|
||||||
|
* <td> yes </td></tr>
|
||||||
|
* <tr><td>#TileIndex </td><td> tile on map </td>
|
||||||
|
* <td> game start </td>
|
||||||
|
* <td> never </td>
|
||||||
|
* <td> no </td></tr>
|
||||||
|
* <tr><td>#TownID </td><td> town </td>
|
||||||
|
* <td> game start </td>
|
||||||
|
* <td> never </td>
|
||||||
|
* <td> no </td></tr>
|
||||||
|
* <tr><td>#VehicleID </td><td> vehicle </td>
|
||||||
|
* <td> construction, autorenew, autoreplace </td>
|
||||||
|
* <td> destruction, autorenew, autoreplace </td>
|
||||||
|
* <td> yes </td></tr>
|
||||||
|
* <tr><td>#WaypointID </td><td> waypoint </td>
|
||||||
|
* <td> construction </td>
|
||||||
|
* <td> destruction </td>
|
||||||
|
* <td> yes </td></tr>
|
||||||
|
* </table>
|
||||||
|
*
|
||||||
|
* @remarks
|
||||||
|
* \li \anchor newgrf_changes (1) in-game changes of newgrfs may reassign/invalidate IDs (will also cause other trouble though).
|
||||||
|
* \li \anchor dynamic_engines (2) engine IDs are reassigned/invalidated on changing 'allow multiple newgrf engine sets' (only allowed as long as no vehicles are built).
|
||||||
|
*/
|
||||||
|
|
||||||
#ifndef AI_TYPES_HPP
|
#ifndef AI_TYPES_HPP
|
||||||
#define AI_TYPES_HPP
|
#define AI_TYPES_HPP
|
||||||
|
@@ -160,6 +160,13 @@
|
|||||||
return AIObject::DoCommand(0, vehicle_id, 0, GetCmdSendToDepot(::GetVehicle(vehicle_id)));
|
return AIObject::DoCommand(0, vehicle_id, 0, GetCmdSendToDepot(::GetVehicle(vehicle_id)));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* static */ bool AIVehicle::SendVehicleToDepotForServicing(VehicleID vehicle_id)
|
||||||
|
{
|
||||||
|
EnforcePrecondition(false, IsValidVehicle(vehicle_id));
|
||||||
|
|
||||||
|
return AIObject::DoCommand(0, vehicle_id, DEPOT_SERVICE, GetCmdSendToDepot(::GetVehicle(vehicle_id)));
|
||||||
|
}
|
||||||
|
|
||||||
/* static */ bool AIVehicle::IsInDepot(VehicleID vehicle_id)
|
/* static */ bool AIVehicle::IsInDepot(VehicleID vehicle_id)
|
||||||
{
|
{
|
||||||
if (!IsValidVehicle(vehicle_id)) return false;
|
if (!IsValidVehicle(vehicle_id)) return false;
|
||||||
@@ -418,3 +425,11 @@
|
|||||||
Vehicle *v = ::GetVehicle(vehicle_id);
|
Vehicle *v = ::GetVehicle(vehicle_id);
|
||||||
return v->orders.list != NULL && v->orders.list->GetNumVehicles() > 1;
|
return v->orders.list != NULL && v->orders.list->GetNumVehicles() > 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* static */ int AIVehicle::GetReliability(VehicleID vehicle_id)
|
||||||
|
{
|
||||||
|
if (!IsValidVehicle(vehicle_id)) return -1;
|
||||||
|
|
||||||
|
const Vehicle *v = ::GetVehicle(vehicle_id);
|
||||||
|
return v->reliability * 100 >> 16;
|
||||||
|
}
|
||||||
|
@@ -43,7 +43,7 @@ public:
|
|||||||
ERR_VEHICLE_CANNOT_START_STOP, // [STR_883B_CAN_T_STOP_START_TRAIN, STR_9015_CAN_T_STOP_START_ROAD_VEHICLE, STR_9818_CAN_T_STOP_START_SHIP, STR_A016_CAN_T_STOP_START_AIRCRAFT]
|
ERR_VEHICLE_CANNOT_START_STOP, // [STR_883B_CAN_T_STOP_START_TRAIN, STR_9015_CAN_T_STOP_START_ROAD_VEHICLE, STR_9818_CAN_T_STOP_START_SHIP, STR_A016_CAN_T_STOP_START_AIRCRAFT]
|
||||||
|
|
||||||
/** Vehicle can't turn */
|
/** Vehicle can't turn */
|
||||||
ERR_VEHICLE_CANNOT_TURN, // [STR_8869_CAN_T_REVERSE_DIRECTION, STR_9033_CAN_T_MAKE_VEHICLE_TURN]
|
ERR_VEHICLE_CANNOT_TURN, // [STR_ERROR_CAN_T_MAKE_ROAD_VEHICLE_TURN, STR_ERROR_CAN_T_REVERSE_DIRECTION_TRAIN, STR_ERROR_CAN_T_REVERSE_DIRECTION_RAIL_VEHICLE, STR_ERROR_CAN_T_REVERSE_DIRECTION_RAIL_VEHICLE_MULTIPLE_UNITS]
|
||||||
|
|
||||||
/** Vehicle can't be refit */
|
/** Vehicle can't be refit */
|
||||||
ERR_VEHICLE_CANNOT_REFIT, // [STR_RAIL_CAN_T_REFIT_VEHICLE, STR_REFIT_ROAD_VEHICLE_CAN_T, STR_9841_CAN_T_REFIT_SHIP, STR_A042_CAN_T_REFIT_AIRCRAFT]
|
ERR_VEHICLE_CANNOT_REFIT, // [STR_RAIL_CAN_T_REFIT_VEHICLE, STR_REFIT_ROAD_VEHICLE_CAN_T, STR_9841_CAN_T_REFIT_SHIP, STR_A042_CAN_T_REFIT_AIRCRAFT]
|
||||||
@@ -58,7 +58,7 @@ public:
|
|||||||
ERR_VEHICLE_IN_FLIGHT, // [STR_A017_AIRCRAFT_IS_IN_FLIGHT]
|
ERR_VEHICLE_IN_FLIGHT, // [STR_A017_AIRCRAFT_IS_IN_FLIGHT]
|
||||||
|
|
||||||
/** Vehicle is without power */
|
/** Vehicle is without power */
|
||||||
ERR_VEHCILE_NO_POWER, // [STR_TRAIN_START_NO_CATENARY]
|
ERR_VEHICLE_NO_POWER, // [STR_TRAIN_START_NO_CATENARY]
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -422,14 +422,25 @@ public:
|
|||||||
static bool SellWagonChain(VehicleID vehicle_id, int wagon);
|
static bool SellWagonChain(VehicleID vehicle_id, int wagon);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sends the given vehicle to a depot.
|
* Sends the given vehicle to a depot. If the vehicle has already been
|
||||||
|
* sent to a depot it continues with its normal orders instead.
|
||||||
* @param vehicle_id The vehicle to send to a depot.
|
* @param vehicle_id The vehicle to send to a depot.
|
||||||
* @pre IsValidVehicle(vehicle_id).
|
* @pre IsValidVehicle(vehicle_id).
|
||||||
* @exception AIVehicle::ERR_VEHICLE_CANNOT_SEND_TO_DEPOT
|
* @exception AIVehicle::ERR_VEHICLE_CANNOT_SEND_TO_DEPOT
|
||||||
* @return True if and only if the vehicle has been sent to a depot.
|
* @return True if the current order was changed.
|
||||||
*/
|
*/
|
||||||
static bool SendVehicleToDepot(VehicleID vehicle_id);
|
static bool SendVehicleToDepot(VehicleID vehicle_id);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sends the given vehicle to a depot for servicing. If the vehicle has
|
||||||
|
* already been sent to a depot it continues with its normal orders instead.
|
||||||
|
* @param vehicle_id The vehicle to send to a depot for servicing.
|
||||||
|
* @pre IsValidVehicle(vehicle_id).
|
||||||
|
* @exception AIVehicle::ERR_VEHICLE_CANNOT_SEND_TO_DEPOT
|
||||||
|
* @return True if the current order was changed.
|
||||||
|
*/
|
||||||
|
static bool SendVehicleToDepotForServicing(VehicleID vehicle_id);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Starts or stops the given vehicle depending on the current state.
|
* Starts or stops the given vehicle depending on the current state.
|
||||||
* @param vehicle_id The vehicle to start/stop.
|
* @param vehicle_id The vehicle to start/stop.
|
||||||
@@ -514,6 +525,14 @@ public:
|
|||||||
*/
|
*/
|
||||||
static bool HasSharedOrders(VehicleID vehicle_id);
|
static bool HasSharedOrders(VehicleID vehicle_id);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the current reliability of a vehicle.
|
||||||
|
* @param vehicle_id The vehicle to check.
|
||||||
|
* @pre IsValidVehicle(vehicle_id).
|
||||||
|
* @return The current reliability (0-100%).
|
||||||
|
*/
|
||||||
|
static int GetReliability(VehicleID vehicle_id);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
/**
|
/**
|
||||||
* Internal function used by SellWagon(Chain).
|
* Internal function used by SellWagon(Chain).
|
||||||
|
@@ -37,7 +37,7 @@ void SQAIVehicle_Register(Squirrel *engine) {
|
|||||||
SQAIVehicle.DefSQConst(engine, AIVehicle::ERR_VEHICLE_IS_DESTROYED, "ERR_VEHICLE_IS_DESTROYED");
|
SQAIVehicle.DefSQConst(engine, AIVehicle::ERR_VEHICLE_IS_DESTROYED, "ERR_VEHICLE_IS_DESTROYED");
|
||||||
SQAIVehicle.DefSQConst(engine, AIVehicle::ERR_VEHICLE_NOT_IN_DEPOT, "ERR_VEHICLE_NOT_IN_DEPOT");
|
SQAIVehicle.DefSQConst(engine, AIVehicle::ERR_VEHICLE_NOT_IN_DEPOT, "ERR_VEHICLE_NOT_IN_DEPOT");
|
||||||
SQAIVehicle.DefSQConst(engine, AIVehicle::ERR_VEHICLE_IN_FLIGHT, "ERR_VEHICLE_IN_FLIGHT");
|
SQAIVehicle.DefSQConst(engine, AIVehicle::ERR_VEHICLE_IN_FLIGHT, "ERR_VEHICLE_IN_FLIGHT");
|
||||||
SQAIVehicle.DefSQConst(engine, AIVehicle::ERR_VEHCILE_NO_POWER, "ERR_VEHCILE_NO_POWER");
|
SQAIVehicle.DefSQConst(engine, AIVehicle::ERR_VEHICLE_NO_POWER, "ERR_VEHICLE_NO_POWER");
|
||||||
SQAIVehicle.DefSQConst(engine, AIVehicle::VT_RAIL, "VT_RAIL");
|
SQAIVehicle.DefSQConst(engine, AIVehicle::VT_RAIL, "VT_RAIL");
|
||||||
SQAIVehicle.DefSQConst(engine, AIVehicle::VT_ROAD, "VT_ROAD");
|
SQAIVehicle.DefSQConst(engine, AIVehicle::VT_ROAD, "VT_ROAD");
|
||||||
SQAIVehicle.DefSQConst(engine, AIVehicle::VT_WATER, "VT_WATER");
|
SQAIVehicle.DefSQConst(engine, AIVehicle::VT_WATER, "VT_WATER");
|
||||||
@@ -52,38 +52,40 @@ void SQAIVehicle_Register(Squirrel *engine) {
|
|||||||
SQAIVehicle.DefSQConst(engine, AIVehicle::VS_CRASHED, "VS_CRASHED");
|
SQAIVehicle.DefSQConst(engine, AIVehicle::VS_CRASHED, "VS_CRASHED");
|
||||||
SQAIVehicle.DefSQConst(engine, AIVehicle::VS_INVALID, "VS_INVALID");
|
SQAIVehicle.DefSQConst(engine, AIVehicle::VS_INVALID, "VS_INVALID");
|
||||||
|
|
||||||
AIError::RegisterErrorMap(STR_00E1_TOO_MANY_VEHICLES_IN_GAME, AIVehicle::ERR_VEHICLE_TOO_MANY);
|
AIError::RegisterErrorMap(STR_00E1_TOO_MANY_VEHICLES_IN_GAME, AIVehicle::ERR_VEHICLE_TOO_MANY);
|
||||||
AIError::RegisterErrorMap(STR_AIRCRAFT_NOT_AVAILABLE, AIVehicle::ERR_VEHICLE_NOT_AVAILABLE);
|
AIError::RegisterErrorMap(STR_AIRCRAFT_NOT_AVAILABLE, AIVehicle::ERR_VEHICLE_NOT_AVAILABLE);
|
||||||
AIError::RegisterErrorMap(STR_ROAD_VEHICLE_NOT_AVAILABLE, AIVehicle::ERR_VEHICLE_NOT_AVAILABLE);
|
AIError::RegisterErrorMap(STR_ROAD_VEHICLE_NOT_AVAILABLE, AIVehicle::ERR_VEHICLE_NOT_AVAILABLE);
|
||||||
AIError::RegisterErrorMap(STR_SHIP_NOT_AVAILABLE, AIVehicle::ERR_VEHICLE_NOT_AVAILABLE);
|
AIError::RegisterErrorMap(STR_SHIP_NOT_AVAILABLE, AIVehicle::ERR_VEHICLE_NOT_AVAILABLE);
|
||||||
AIError::RegisterErrorMap(STR_RAIL_VEHICLE_NOT_AVAILABLE, AIVehicle::ERR_VEHICLE_NOT_AVAILABLE);
|
AIError::RegisterErrorMap(STR_RAIL_VEHICLE_NOT_AVAILABLE, AIVehicle::ERR_VEHICLE_NOT_AVAILABLE);
|
||||||
AIError::RegisterErrorMap(STR_A008_CAN_T_BUILD_AIRCRAFT, AIVehicle::ERR_VEHICLE_BUILD_DISABLED);
|
AIError::RegisterErrorMap(STR_A008_CAN_T_BUILD_AIRCRAFT, AIVehicle::ERR_VEHICLE_BUILD_DISABLED);
|
||||||
AIError::RegisterErrorMap(STR_980D_CAN_T_BUILD_SHIP, AIVehicle::ERR_VEHICLE_BUILD_DISABLED);
|
AIError::RegisterErrorMap(STR_980D_CAN_T_BUILD_SHIP, AIVehicle::ERR_VEHICLE_BUILD_DISABLED);
|
||||||
AIError::RegisterErrorMap(STR_9009_CAN_T_BUILD_ROAD_VEHICLE, AIVehicle::ERR_VEHICLE_BUILD_DISABLED);
|
AIError::RegisterErrorMap(STR_9009_CAN_T_BUILD_ROAD_VEHICLE, AIVehicle::ERR_VEHICLE_BUILD_DISABLED);
|
||||||
AIError::RegisterErrorMap(STR_882B_CAN_T_BUILD_RAILROAD_VEHICLE, AIVehicle::ERR_VEHICLE_BUILD_DISABLED);
|
AIError::RegisterErrorMap(STR_882B_CAN_T_BUILD_RAILROAD_VEHICLE, AIVehicle::ERR_VEHICLE_BUILD_DISABLED);
|
||||||
AIError::RegisterErrorMap(STR_DEPOT_WRONG_DEPOT_TYPE, AIVehicle::ERR_VEHICLE_WRONG_DEPOT);
|
AIError::RegisterErrorMap(STR_DEPOT_WRONG_DEPOT_TYPE, AIVehicle::ERR_VEHICLE_WRONG_DEPOT);
|
||||||
AIError::RegisterErrorMap(STR_8830_CAN_T_SEND_TRAIN_TO_DEPOT, AIVehicle::ERR_VEHICLE_CANNOT_SEND_TO_DEPOT);
|
AIError::RegisterErrorMap(STR_8830_CAN_T_SEND_TRAIN_TO_DEPOT, AIVehicle::ERR_VEHICLE_CANNOT_SEND_TO_DEPOT);
|
||||||
AIError::RegisterErrorMap(STR_9018_CAN_T_SEND_VEHICLE_TO_DEPOT, AIVehicle::ERR_VEHICLE_CANNOT_SEND_TO_DEPOT);
|
AIError::RegisterErrorMap(STR_9018_CAN_T_SEND_VEHICLE_TO_DEPOT, AIVehicle::ERR_VEHICLE_CANNOT_SEND_TO_DEPOT);
|
||||||
AIError::RegisterErrorMap(STR_9819_CAN_T_SEND_SHIP_TO_DEPOT, AIVehicle::ERR_VEHICLE_CANNOT_SEND_TO_DEPOT);
|
AIError::RegisterErrorMap(STR_9819_CAN_T_SEND_SHIP_TO_DEPOT, AIVehicle::ERR_VEHICLE_CANNOT_SEND_TO_DEPOT);
|
||||||
AIError::RegisterErrorMap(STR_A012_CAN_T_SEND_AIRCRAFT_TO, AIVehicle::ERR_VEHICLE_CANNOT_SEND_TO_DEPOT);
|
AIError::RegisterErrorMap(STR_A012_CAN_T_SEND_AIRCRAFT_TO, AIVehicle::ERR_VEHICLE_CANNOT_SEND_TO_DEPOT);
|
||||||
AIError::RegisterErrorMap(STR_883B_CAN_T_STOP_START_TRAIN, AIVehicle::ERR_VEHICLE_CANNOT_START_STOP);
|
AIError::RegisterErrorMap(STR_883B_CAN_T_STOP_START_TRAIN, AIVehicle::ERR_VEHICLE_CANNOT_START_STOP);
|
||||||
AIError::RegisterErrorMap(STR_9015_CAN_T_STOP_START_ROAD_VEHICLE, AIVehicle::ERR_VEHICLE_CANNOT_START_STOP);
|
AIError::RegisterErrorMap(STR_9015_CAN_T_STOP_START_ROAD_VEHICLE, AIVehicle::ERR_VEHICLE_CANNOT_START_STOP);
|
||||||
AIError::RegisterErrorMap(STR_9818_CAN_T_STOP_START_SHIP, AIVehicle::ERR_VEHICLE_CANNOT_START_STOP);
|
AIError::RegisterErrorMap(STR_9818_CAN_T_STOP_START_SHIP, AIVehicle::ERR_VEHICLE_CANNOT_START_STOP);
|
||||||
AIError::RegisterErrorMap(STR_A016_CAN_T_STOP_START_AIRCRAFT, AIVehicle::ERR_VEHICLE_CANNOT_START_STOP);
|
AIError::RegisterErrorMap(STR_A016_CAN_T_STOP_START_AIRCRAFT, AIVehicle::ERR_VEHICLE_CANNOT_START_STOP);
|
||||||
AIError::RegisterErrorMap(STR_8869_CAN_T_REVERSE_DIRECTION, AIVehicle::ERR_VEHICLE_CANNOT_TURN);
|
AIError::RegisterErrorMap(STR_ERROR_CAN_T_MAKE_ROAD_VEHICLE_TURN, AIVehicle::ERR_VEHICLE_CANNOT_TURN);
|
||||||
AIError::RegisterErrorMap(STR_9033_CAN_T_MAKE_VEHICLE_TURN, AIVehicle::ERR_VEHICLE_CANNOT_TURN);
|
AIError::RegisterErrorMap(STR_ERROR_CAN_T_REVERSE_DIRECTION_TRAIN, AIVehicle::ERR_VEHICLE_CANNOT_TURN);
|
||||||
AIError::RegisterErrorMap(STR_RAIL_CAN_T_REFIT_VEHICLE, AIVehicle::ERR_VEHICLE_CANNOT_REFIT);
|
AIError::RegisterErrorMap(STR_ERROR_CAN_T_REVERSE_DIRECTION_RAIL_VEHICLE, AIVehicle::ERR_VEHICLE_CANNOT_TURN);
|
||||||
AIError::RegisterErrorMap(STR_REFIT_ROAD_VEHICLE_CAN_T, AIVehicle::ERR_VEHICLE_CANNOT_REFIT);
|
AIError::RegisterErrorMap(STR_ERROR_CAN_T_REVERSE_DIRECTION_RAIL_VEHICLE_MULTIPLE_UNITS, AIVehicle::ERR_VEHICLE_CANNOT_TURN);
|
||||||
AIError::RegisterErrorMap(STR_9841_CAN_T_REFIT_SHIP, AIVehicle::ERR_VEHICLE_CANNOT_REFIT);
|
AIError::RegisterErrorMap(STR_RAIL_CAN_T_REFIT_VEHICLE, AIVehicle::ERR_VEHICLE_CANNOT_REFIT);
|
||||||
AIError::RegisterErrorMap(STR_A042_CAN_T_REFIT_AIRCRAFT, AIVehicle::ERR_VEHICLE_CANNOT_REFIT);
|
AIError::RegisterErrorMap(STR_REFIT_ROAD_VEHICLE_CAN_T, AIVehicle::ERR_VEHICLE_CANNOT_REFIT);
|
||||||
AIError::RegisterErrorMap(STR_CAN_T_REFIT_DESTROYED_VEHICLE, AIVehicle::ERR_VEHICLE_IS_DESTROYED);
|
AIError::RegisterErrorMap(STR_9841_CAN_T_REFIT_SHIP, AIVehicle::ERR_VEHICLE_CANNOT_REFIT);
|
||||||
AIError::RegisterErrorMap(STR_CAN_T_SELL_DESTROYED_VEHICLE, AIVehicle::ERR_VEHICLE_IS_DESTROYED);
|
AIError::RegisterErrorMap(STR_A042_CAN_T_REFIT_AIRCRAFT, AIVehicle::ERR_VEHICLE_CANNOT_REFIT);
|
||||||
AIError::RegisterErrorMap(STR_A01B_AIRCRAFT_MUST_BE_STOPPED, AIVehicle::ERR_VEHICLE_NOT_IN_DEPOT);
|
AIError::RegisterErrorMap(STR_CAN_T_REFIT_DESTROYED_VEHICLE, AIVehicle::ERR_VEHICLE_IS_DESTROYED);
|
||||||
AIError::RegisterErrorMap(STR_9013_MUST_BE_STOPPED_INSIDE, AIVehicle::ERR_VEHICLE_NOT_IN_DEPOT);
|
AIError::RegisterErrorMap(STR_CAN_T_SELL_DESTROYED_VEHICLE, AIVehicle::ERR_VEHICLE_IS_DESTROYED);
|
||||||
AIError::RegisterErrorMap(STR_TRAIN_MUST_BE_STOPPED, AIVehicle::ERR_VEHICLE_NOT_IN_DEPOT);
|
AIError::RegisterErrorMap(STR_A01B_AIRCRAFT_MUST_BE_STOPPED, AIVehicle::ERR_VEHICLE_NOT_IN_DEPOT);
|
||||||
AIError::RegisterErrorMap(STR_980B_SHIP_MUST_BE_STOPPED_IN, AIVehicle::ERR_VEHICLE_NOT_IN_DEPOT);
|
AIError::RegisterErrorMap(STR_9013_MUST_BE_STOPPED_INSIDE, AIVehicle::ERR_VEHICLE_NOT_IN_DEPOT);
|
||||||
AIError::RegisterErrorMap(STR_A017_AIRCRAFT_IS_IN_FLIGHT, AIVehicle::ERR_VEHICLE_IN_FLIGHT);
|
AIError::RegisterErrorMap(STR_TRAIN_MUST_BE_STOPPED, AIVehicle::ERR_VEHICLE_NOT_IN_DEPOT);
|
||||||
AIError::RegisterErrorMap(STR_TRAIN_START_NO_CATENARY, AIVehicle::ERR_VEHCILE_NO_POWER);
|
AIError::RegisterErrorMap(STR_980B_SHIP_MUST_BE_STOPPED_IN, AIVehicle::ERR_VEHICLE_NOT_IN_DEPOT);
|
||||||
|
AIError::RegisterErrorMap(STR_A017_AIRCRAFT_IS_IN_FLIGHT, AIVehicle::ERR_VEHICLE_IN_FLIGHT);
|
||||||
|
AIError::RegisterErrorMap(STR_TRAIN_START_NO_CATENARY, AIVehicle::ERR_VEHICLE_NO_POWER);
|
||||||
|
|
||||||
AIError::RegisterErrorMapString(AIVehicle::ERR_VEHICLE_TOO_MANY, "ERR_VEHICLE_TOO_MANY");
|
AIError::RegisterErrorMapString(AIVehicle::ERR_VEHICLE_TOO_MANY, "ERR_VEHICLE_TOO_MANY");
|
||||||
AIError::RegisterErrorMapString(AIVehicle::ERR_VEHICLE_NOT_AVAILABLE, "ERR_VEHICLE_NOT_AVAILABLE");
|
AIError::RegisterErrorMapString(AIVehicle::ERR_VEHICLE_NOT_AVAILABLE, "ERR_VEHICLE_NOT_AVAILABLE");
|
||||||
@@ -96,49 +98,51 @@ void SQAIVehicle_Register(Squirrel *engine) {
|
|||||||
AIError::RegisterErrorMapString(AIVehicle::ERR_VEHICLE_IS_DESTROYED, "ERR_VEHICLE_IS_DESTROYED");
|
AIError::RegisterErrorMapString(AIVehicle::ERR_VEHICLE_IS_DESTROYED, "ERR_VEHICLE_IS_DESTROYED");
|
||||||
AIError::RegisterErrorMapString(AIVehicle::ERR_VEHICLE_NOT_IN_DEPOT, "ERR_VEHICLE_NOT_IN_DEPOT");
|
AIError::RegisterErrorMapString(AIVehicle::ERR_VEHICLE_NOT_IN_DEPOT, "ERR_VEHICLE_NOT_IN_DEPOT");
|
||||||
AIError::RegisterErrorMapString(AIVehicle::ERR_VEHICLE_IN_FLIGHT, "ERR_VEHICLE_IN_FLIGHT");
|
AIError::RegisterErrorMapString(AIVehicle::ERR_VEHICLE_IN_FLIGHT, "ERR_VEHICLE_IN_FLIGHT");
|
||||||
AIError::RegisterErrorMapString(AIVehicle::ERR_VEHCILE_NO_POWER, "ERR_VEHCILE_NO_POWER");
|
AIError::RegisterErrorMapString(AIVehicle::ERR_VEHICLE_NO_POWER, "ERR_VEHICLE_NO_POWER");
|
||||||
|
|
||||||
SQAIVehicle.DefSQStaticMethod(engine, &AIVehicle::IsValidVehicle, "IsValidVehicle", 2, ".i");
|
SQAIVehicle.DefSQStaticMethod(engine, &AIVehicle::IsValidVehicle, "IsValidVehicle", 2, ".i");
|
||||||
SQAIVehicle.DefSQStaticMethod(engine, &AIVehicle::GetNumWagons, "GetNumWagons", 2, ".i");
|
SQAIVehicle.DefSQStaticMethod(engine, &AIVehicle::GetNumWagons, "GetNumWagons", 2, ".i");
|
||||||
SQAIVehicle.DefSQStaticMethod(engine, &AIVehicle::SetName, "SetName", 3, ".is");
|
SQAIVehicle.DefSQStaticMethod(engine, &AIVehicle::SetName, "SetName", 3, ".is");
|
||||||
SQAIVehicle.DefSQStaticMethod(engine, &AIVehicle::GetName, "GetName", 2, ".i");
|
SQAIVehicle.DefSQStaticMethod(engine, &AIVehicle::GetName, "GetName", 2, ".i");
|
||||||
SQAIVehicle.DefSQStaticMethod(engine, &AIVehicle::GetLocation, "GetLocation", 2, ".i");
|
SQAIVehicle.DefSQStaticMethod(engine, &AIVehicle::GetLocation, "GetLocation", 2, ".i");
|
||||||
SQAIVehicle.DefSQStaticMethod(engine, &AIVehicle::GetEngineType, "GetEngineType", 2, ".i");
|
SQAIVehicle.DefSQStaticMethod(engine, &AIVehicle::GetEngineType, "GetEngineType", 2, ".i");
|
||||||
SQAIVehicle.DefSQStaticMethod(engine, &AIVehicle::GetWagonEngineType, "GetWagonEngineType", 3, ".ii");
|
SQAIVehicle.DefSQStaticMethod(engine, &AIVehicle::GetWagonEngineType, "GetWagonEngineType", 3, ".ii");
|
||||||
SQAIVehicle.DefSQStaticMethod(engine, &AIVehicle::GetUnitNumber, "GetUnitNumber", 2, ".i");
|
SQAIVehicle.DefSQStaticMethod(engine, &AIVehicle::GetUnitNumber, "GetUnitNumber", 2, ".i");
|
||||||
SQAIVehicle.DefSQStaticMethod(engine, &AIVehicle::GetAge, "GetAge", 2, ".i");
|
SQAIVehicle.DefSQStaticMethod(engine, &AIVehicle::GetAge, "GetAge", 2, ".i");
|
||||||
SQAIVehicle.DefSQStaticMethod(engine, &AIVehicle::GetWagonAge, "GetWagonAge", 3, ".ii");
|
SQAIVehicle.DefSQStaticMethod(engine, &AIVehicle::GetWagonAge, "GetWagonAge", 3, ".ii");
|
||||||
SQAIVehicle.DefSQStaticMethod(engine, &AIVehicle::GetMaxAge, "GetMaxAge", 2, ".i");
|
SQAIVehicle.DefSQStaticMethod(engine, &AIVehicle::GetMaxAge, "GetMaxAge", 2, ".i");
|
||||||
SQAIVehicle.DefSQStaticMethod(engine, &AIVehicle::GetAgeLeft, "GetAgeLeft", 2, ".i");
|
SQAIVehicle.DefSQStaticMethod(engine, &AIVehicle::GetAgeLeft, "GetAgeLeft", 2, ".i");
|
||||||
SQAIVehicle.DefSQStaticMethod(engine, &AIVehicle::GetCurrentSpeed, "GetCurrentSpeed", 2, ".i");
|
SQAIVehicle.DefSQStaticMethod(engine, &AIVehicle::GetCurrentSpeed, "GetCurrentSpeed", 2, ".i");
|
||||||
SQAIVehicle.DefSQStaticMethod(engine, &AIVehicle::GetState, "GetState", 2, ".i");
|
SQAIVehicle.DefSQStaticMethod(engine, &AIVehicle::GetState, "GetState", 2, ".i");
|
||||||
SQAIVehicle.DefSQStaticMethod(engine, &AIVehicle::GetRunningCost, "GetRunningCost", 2, ".i");
|
SQAIVehicle.DefSQStaticMethod(engine, &AIVehicle::GetRunningCost, "GetRunningCost", 2, ".i");
|
||||||
SQAIVehicle.DefSQStaticMethod(engine, &AIVehicle::GetProfitThisYear, "GetProfitThisYear", 2, ".i");
|
SQAIVehicle.DefSQStaticMethod(engine, &AIVehicle::GetProfitThisYear, "GetProfitThisYear", 2, ".i");
|
||||||
SQAIVehicle.DefSQStaticMethod(engine, &AIVehicle::GetProfitLastYear, "GetProfitLastYear", 2, ".i");
|
SQAIVehicle.DefSQStaticMethod(engine, &AIVehicle::GetProfitLastYear, "GetProfitLastYear", 2, ".i");
|
||||||
SQAIVehicle.DefSQStaticMethod(engine, &AIVehicle::GetCurrentValue, "GetCurrentValue", 2, ".i");
|
SQAIVehicle.DefSQStaticMethod(engine, &AIVehicle::GetCurrentValue, "GetCurrentValue", 2, ".i");
|
||||||
SQAIVehicle.DefSQStaticMethod(engine, &AIVehicle::GetVehicleType, "GetVehicleType", 2, ".i");
|
SQAIVehicle.DefSQStaticMethod(engine, &AIVehicle::GetVehicleType, "GetVehicleType", 2, ".i");
|
||||||
SQAIVehicle.DefSQStaticMethod(engine, &AIVehicle::GetRoadType, "GetRoadType", 2, ".i");
|
SQAIVehicle.DefSQStaticMethod(engine, &AIVehicle::GetRoadType, "GetRoadType", 2, ".i");
|
||||||
SQAIVehicle.DefSQStaticMethod(engine, &AIVehicle::IsInDepot, "IsInDepot", 2, ".i");
|
SQAIVehicle.DefSQStaticMethod(engine, &AIVehicle::IsInDepot, "IsInDepot", 2, ".i");
|
||||||
SQAIVehicle.DefSQStaticMethod(engine, &AIVehicle::IsStoppedInDepot, "IsStoppedInDepot", 2, ".i");
|
SQAIVehicle.DefSQStaticMethod(engine, &AIVehicle::IsStoppedInDepot, "IsStoppedInDepot", 2, ".i");
|
||||||
SQAIVehicle.DefSQStaticMethod(engine, &AIVehicle::BuildVehicle, "BuildVehicle", 3, ".ii");
|
SQAIVehicle.DefSQStaticMethod(engine, &AIVehicle::BuildVehicle, "BuildVehicle", 3, ".ii");
|
||||||
SQAIVehicle.DefSQStaticMethod(engine, &AIVehicle::CloneVehicle, "CloneVehicle", 4, ".iib");
|
SQAIVehicle.DefSQStaticMethod(engine, &AIVehicle::CloneVehicle, "CloneVehicle", 4, ".iib");
|
||||||
SQAIVehicle.DefSQStaticMethod(engine, &AIVehicle::MoveWagon, "MoveWagon", 5, ".iiii");
|
SQAIVehicle.DefSQStaticMethod(engine, &AIVehicle::MoveWagon, "MoveWagon", 5, ".iiii");
|
||||||
SQAIVehicle.DefSQStaticMethod(engine, &AIVehicle::MoveWagonChain, "MoveWagonChain", 5, ".iiii");
|
SQAIVehicle.DefSQStaticMethod(engine, &AIVehicle::MoveWagonChain, "MoveWagonChain", 5, ".iiii");
|
||||||
SQAIVehicle.DefSQStaticMethod(engine, &AIVehicle::GetRefitCapacity, "GetRefitCapacity", 3, ".ii");
|
SQAIVehicle.DefSQStaticMethod(engine, &AIVehicle::GetRefitCapacity, "GetRefitCapacity", 3, ".ii");
|
||||||
SQAIVehicle.DefSQStaticMethod(engine, &AIVehicle::RefitVehicle, "RefitVehicle", 3, ".ii");
|
SQAIVehicle.DefSQStaticMethod(engine, &AIVehicle::RefitVehicle, "RefitVehicle", 3, ".ii");
|
||||||
SQAIVehicle.DefSQStaticMethod(engine, &AIVehicle::SellVehicle, "SellVehicle", 2, ".i");
|
SQAIVehicle.DefSQStaticMethod(engine, &AIVehicle::SellVehicle, "SellVehicle", 2, ".i");
|
||||||
SQAIVehicle.DefSQStaticMethod(engine, &AIVehicle::SellWagon, "SellWagon", 3, ".ii");
|
SQAIVehicle.DefSQStaticMethod(engine, &AIVehicle::SellWagon, "SellWagon", 3, ".ii");
|
||||||
SQAIVehicle.DefSQStaticMethod(engine, &AIVehicle::SellWagonChain, "SellWagonChain", 3, ".ii");
|
SQAIVehicle.DefSQStaticMethod(engine, &AIVehicle::SellWagonChain, "SellWagonChain", 3, ".ii");
|
||||||
SQAIVehicle.DefSQStaticMethod(engine, &AIVehicle::SendVehicleToDepot, "SendVehicleToDepot", 2, ".i");
|
SQAIVehicle.DefSQStaticMethod(engine, &AIVehicle::SendVehicleToDepot, "SendVehicleToDepot", 2, ".i");
|
||||||
SQAIVehicle.DefSQStaticMethod(engine, &AIVehicle::StartStopVehicle, "StartStopVehicle", 2, ".i");
|
SQAIVehicle.DefSQStaticMethod(engine, &AIVehicle::SendVehicleToDepotForServicing, "SendVehicleToDepotForServicing", 2, ".i");
|
||||||
SQAIVehicle.DefSQStaticMethod(engine, &AIVehicle::SkipToVehicleOrder, "SkipToVehicleOrder", 3, ".ii");
|
SQAIVehicle.DefSQStaticMethod(engine, &AIVehicle::StartStopVehicle, "StartStopVehicle", 2, ".i");
|
||||||
SQAIVehicle.DefSQStaticMethod(engine, &AIVehicle::ReverseVehicle, "ReverseVehicle", 2, ".i");
|
SQAIVehicle.DefSQStaticMethod(engine, &AIVehicle::SkipToVehicleOrder, "SkipToVehicleOrder", 3, ".ii");
|
||||||
SQAIVehicle.DefSQStaticMethod(engine, &AIVehicle::GetCapacity, "GetCapacity", 3, ".ii");
|
SQAIVehicle.DefSQStaticMethod(engine, &AIVehicle::ReverseVehicle, "ReverseVehicle", 2, ".i");
|
||||||
SQAIVehicle.DefSQStaticMethod(engine, &AIVehicle::GetLength, "GetLength", 2, ".i");
|
SQAIVehicle.DefSQStaticMethod(engine, &AIVehicle::GetCapacity, "GetCapacity", 3, ".ii");
|
||||||
SQAIVehicle.DefSQStaticMethod(engine, &AIVehicle::GetCargoLoad, "GetCargoLoad", 3, ".ii");
|
SQAIVehicle.DefSQStaticMethod(engine, &AIVehicle::GetLength, "GetLength", 2, ".i");
|
||||||
SQAIVehicle.DefSQStaticMethod(engine, &AIVehicle::GetGroupID, "GetGroupID", 2, ".i");
|
SQAIVehicle.DefSQStaticMethod(engine, &AIVehicle::GetCargoLoad, "GetCargoLoad", 3, ".ii");
|
||||||
SQAIVehicle.DefSQStaticMethod(engine, &AIVehicle::IsArticulated, "IsArticulated", 2, ".i");
|
SQAIVehicle.DefSQStaticMethod(engine, &AIVehicle::GetGroupID, "GetGroupID", 2, ".i");
|
||||||
SQAIVehicle.DefSQStaticMethod(engine, &AIVehicle::HasSharedOrders, "HasSharedOrders", 2, ".i");
|
SQAIVehicle.DefSQStaticMethod(engine, &AIVehicle::IsArticulated, "IsArticulated", 2, ".i");
|
||||||
|
SQAIVehicle.DefSQStaticMethod(engine, &AIVehicle::HasSharedOrders, "HasSharedOrders", 2, ".i");
|
||||||
|
SQAIVehicle.DefSQStaticMethod(engine, &AIVehicle::GetReliability, "GetReliability", 2, ".i");
|
||||||
|
|
||||||
SQAIVehicle.PostRegister(engine);
|
SQAIVehicle.PostRegister(engine);
|
||||||
}
|
}
|
||||||
|
@@ -41,7 +41,7 @@ public:
|
|||||||
static const char *GetClassName() { return "AIVehicleList_SharedOrders"; }
|
static const char *GetClassName() { return "AIVehicleList_SharedOrders"; }
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param station_id The vehicle that the rest shared orders with.
|
* @param vehicle_id The vehicle that the rest shared orders with.
|
||||||
*/
|
*/
|
||||||
AIVehicleList_SharedOrders(VehicleID vehicle_id);
|
AIVehicleList_SharedOrders(VehicleID vehicle_id);
|
||||||
};
|
};
|
||||||
|
@@ -15,8 +15,11 @@ class AIWaypoint : public AIObject {
|
|||||||
public:
|
public:
|
||||||
static const char *GetClassName() { return "AIWaypoint"; }
|
static const char *GetClassName() { return "AIWaypoint"; }
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Special waypoint IDs signalling different kinds of waypoints.
|
||||||
|
*/
|
||||||
enum SpecialWaypointIDs {
|
enum SpecialWaypointIDs {
|
||||||
WAYPOINT_INVALID = -1, //!< An invalid WaypointID.
|
WAYPOINT_INVALID = 0xFFFF, //!< An invalid WaypointID.
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@@ -2,6 +2,15 @@
|
|||||||
|
|
||||||
# $Id$
|
# $Id$
|
||||||
|
|
||||||
|
# We really need gawk for this!
|
||||||
|
AWK=gawk
|
||||||
|
|
||||||
|
${AWK} --version > /dev/null 2> /dev/null
|
||||||
|
if [ "$?" != "0" ]; then
|
||||||
|
echo "This script needs gawk to run properly"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
# This must be called from within the src/ai/api directory.
|
# This must be called from within the src/ai/api directory.
|
||||||
|
|
||||||
if [ -z "$1" ]; then
|
if [ -z "$1" ]; then
|
||||||
@@ -10,7 +19,7 @@ if [ -z "$1" ]; then
|
|||||||
# these files should not be changed by this script
|
# these files should not be changed by this script
|
||||||
"ai_controller.hpp" | "ai_object.hpp" | "ai_types.hpp" ) continue;
|
"ai_controller.hpp" | "ai_object.hpp" | "ai_types.hpp" ) continue;
|
||||||
esac
|
esac
|
||||||
awk -f squirrel_export.awk ${f} > ${f}.tmp
|
${AWK} -f squirrel_export.awk ${f} > ${f}.tmp
|
||||||
if ! [ -f "${f}.sq" ] || [ -n "`diff -I '$Id' -b ${f}.tmp ${f}.sq 2> /dev/null || echo boo`" ]; then
|
if ! [ -f "${f}.sq" ] || [ -n "`diff -I '$Id' -b ${f}.tmp ${f}.sq 2> /dev/null || echo boo`" ]; then
|
||||||
mv ${f}.tmp ${f}.sq
|
mv ${f}.tmp ${f}.sq
|
||||||
echo "Updated: ${f}.sq"
|
echo "Updated: ${f}.sq"
|
||||||
@@ -22,7 +31,7 @@ if [ -z "$1" ]; then
|
|||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
else
|
else
|
||||||
awk -f squirrel_export.awk $1 > $1.tmp
|
${AWK} -f squirrel_export.awk $1 > $1.tmp
|
||||||
if ! [ -f "${f}.sq" ] || [ -n "`diff -I '$Id' -b $1.sq $1.tmp 2> /dev/null || echo boo`" ]; then
|
if ! [ -f "${f}.sq" ] || [ -n "`diff -I '$Id' -b $1.sq $1.tmp 2> /dev/null || echo boo`" ]; then
|
||||||
mv $1.tmp $1.sq
|
mv $1.tmp $1.sq
|
||||||
echo "Updated: $1.sq"
|
echo "Updated: $1.sq"
|
||||||
@@ -84,7 +93,7 @@ echo "
|
|||||||
{ print \$0; }
|
{ print \$0; }
|
||||||
" > ${f}.awk
|
" > ${f}.awk
|
||||||
|
|
||||||
awk -f ${f}.awk ${f} > ${f}.tmp
|
${AWK} -f ${f}.awk ${f} > ${f}.tmp
|
||||||
|
|
||||||
if ! [ -f "${f}" ] || [ -n "`diff -I '$Id' -b ${f} ${f}.tmp 2> /dev/null || echo boo`" ]; then
|
if ! [ -f "${f}" ] || [ -n "`diff -I '$Id' -b ${f} ${f}.tmp 2> /dev/null || echo boo`" ]; then
|
||||||
mv ${f}.tmp ${f}
|
mv ${f}.tmp ${f}
|
||||||
|
@@ -337,24 +337,6 @@ CommandCost CmdBuildAircraft(TileIndex tile, DoCommandFlag flags, uint32 p1, uin
|
|||||||
u->subtype = AIR_SHADOW;
|
u->subtype = AIR_SHADOW;
|
||||||
u->UpdateDeltaXY(INVALID_DIR);
|
u->UpdateDeltaXY(INVALID_DIR);
|
||||||
|
|
||||||
if (v->cargo_type != CT_PASSENGERS) {
|
|
||||||
uint16 callback = CALLBACK_FAILED;
|
|
||||||
|
|
||||||
if (HasBit(EngInfo(p1)->callbackmask, CBM_VEHICLE_REFIT_CAPACITY)) {
|
|
||||||
callback = GetVehicleCallback(CBID_VEHICLE_REFIT_CAPACITY, 0, 0, v->engine_type, v);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (callback == CALLBACK_FAILED) {
|
|
||||||
/* Callback failed, or not executed; use the default cargo capacity */
|
|
||||||
v->cargo_cap = AircraftDefaultCargoCapacity(v->cargo_type, avi);
|
|
||||||
} else {
|
|
||||||
v->cargo_cap = callback;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Set the 'second compartent' capacity to none */
|
|
||||||
u->cargo_cap = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
v->reliability = e->reliability;
|
v->reliability = e->reliability;
|
||||||
v->reliability_spd_dec = e->reliability_spd_dec;
|
v->reliability_spd_dec = e->reliability_spd_dec;
|
||||||
v->max_age = e->lifelength * DAYS_IN_LEAP_YEAR;
|
v->max_age = e->lifelength * DAYS_IN_LEAP_YEAR;
|
||||||
@@ -395,6 +377,28 @@ CommandCost CmdBuildAircraft(TileIndex tile, DoCommandFlag flags, uint32 p1, uin
|
|||||||
v->vehicle_flags = 0;
|
v->vehicle_flags = 0;
|
||||||
if (e->flags & ENGINE_EXCLUSIVE_PREVIEW) SetBit(v->vehicle_flags, VF_BUILT_AS_PROTOTYPE);
|
if (e->flags & ENGINE_EXCLUSIVE_PREVIEW) SetBit(v->vehicle_flags, VF_BUILT_AS_PROTOTYPE);
|
||||||
|
|
||||||
|
v->InvalidateNewGRFCacheOfChain();
|
||||||
|
|
||||||
|
if (v->cargo_type != CT_PASSENGERS) {
|
||||||
|
uint16 callback = CALLBACK_FAILED;
|
||||||
|
|
||||||
|
if (HasBit(EngInfo(p1)->callbackmask, CBM_VEHICLE_REFIT_CAPACITY)) {
|
||||||
|
callback = GetVehicleCallback(CBID_VEHICLE_REFIT_CAPACITY, 0, 0, v->engine_type, v);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (callback == CALLBACK_FAILED) {
|
||||||
|
/* Callback failed, or not executed; use the default cargo capacity */
|
||||||
|
v->cargo_cap = AircraftDefaultCargoCapacity(v->cargo_type, avi);
|
||||||
|
} else {
|
||||||
|
v->cargo_cap = callback;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Set the 'second compartent' capacity to none */
|
||||||
|
u->cargo_cap = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
v->InvalidateNewGRFCacheOfChain();
|
||||||
|
|
||||||
UpdateAircraftCache(v);
|
UpdateAircraftCache(v);
|
||||||
|
|
||||||
VehicleMove(v, false);
|
VehicleMove(v, false);
|
||||||
@@ -580,6 +584,7 @@ CommandCost CmdRefitAircraft(TileIndex tile, DoCommandFlag flags, uint32 p1, uin
|
|||||||
v->cargo_type = new_cid;
|
v->cargo_type = new_cid;
|
||||||
v->cargo_subtype = new_subtype;
|
v->cargo_subtype = new_subtype;
|
||||||
v->colourmap = PAL_NONE; // invalidate vehicle colour map
|
v->colourmap = PAL_NONE; // invalidate vehicle colour map
|
||||||
|
v->InvalidateNewGRFCacheOfChain();
|
||||||
InvalidateWindow(WC_VEHICLE_DETAILS, v->index);
|
InvalidateWindow(WC_VEHICLE_DETAILS, v->index);
|
||||||
InvalidateWindow(WC_VEHICLE_DEPOT, v->tile);
|
InvalidateWindow(WC_VEHICLE_DEPOT, v->tile);
|
||||||
InvalidateWindowClassesData(WC_AIRCRAFT_LIST, 0);
|
InvalidateWindowClassesData(WC_AIRCRAFT_LIST, 0);
|
||||||
|
@@ -5,7 +5,6 @@
|
|||||||
#include "stdafx.h"
|
#include "stdafx.h"
|
||||||
#include "train.h"
|
#include "train.h"
|
||||||
#include "roadveh.h"
|
#include "roadveh.h"
|
||||||
#include "aircraft.h"
|
|
||||||
#include "newgrf_engine.h"
|
#include "newgrf_engine.h"
|
||||||
#include "vehicle_func.h"
|
#include "vehicle_func.h"
|
||||||
|
|
||||||
@@ -52,22 +51,7 @@ static inline uint16 GetVehicleDefaultCapacity(EngineID engine, VehicleType type
|
|||||||
CargoID cargo = (e->CanCarryCargo() ? e->GetDefaultCargoType() : (CargoID)CT_INVALID);
|
CargoID cargo = (e->CanCarryCargo() ? e->GetDefaultCargoType() : (CargoID)CT_INVALID);
|
||||||
if (cargo_type != NULL) *cargo_type = cargo;
|
if (cargo_type != NULL) *cargo_type = cargo;
|
||||||
if (cargo == CT_INVALID) return 0;
|
if (cargo == CT_INVALID) return 0;
|
||||||
switch (type) {
|
return e->GetDisplayDefaultCapacity();
|
||||||
case VEH_TRAIN:
|
|
||||||
return GetEngineProperty(engine, 0x14, e->u.rail.capacity) + (e->u.rail.railveh_type == RAILVEH_MULTIHEAD ? e->u.rail.capacity : 0);
|
|
||||||
|
|
||||||
case VEH_ROAD:
|
|
||||||
return GetEngineProperty(engine, 0x0F, e->u.road.capacity);
|
|
||||||
|
|
||||||
case VEH_SHIP:
|
|
||||||
return GetEngineProperty(engine, 0x0D, e->u.ship.capacity);
|
|
||||||
|
|
||||||
case VEH_AIRCRAFT:
|
|
||||||
return AircraftDefaultCargoCapacity(cargo, &e->u.air);
|
|
||||||
|
|
||||||
default: NOT_REACHED();
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@@ -111,7 +111,7 @@ static void TransferCargo(Vehicle *old_veh, Vehicle *new_head, bool part_of_chai
|
|||||||
uint amount = min(src->cargo.Count(), dest->cargo_cap - dest->cargo.Count());
|
uint amount = min(src->cargo.Count(), dest->cargo_cap - dest->cargo.Count());
|
||||||
if (amount <= 0) continue;
|
if (amount <= 0) continue;
|
||||||
|
|
||||||
src->cargo.MoveTo(&dest->cargo, amount);
|
src->cargo.MoveTo(&dest->cargo, amount, CargoList::MTA_UNLOAD, NULL);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -120,8 +120,8 @@ static int CDECL EngineReliabilitySorter(const void *a, const void *b)
|
|||||||
|
|
||||||
static int CDECL EngineCostSorter(const void *a, const void *b)
|
static int CDECL EngineCostSorter(const void *a, const void *b)
|
||||||
{
|
{
|
||||||
int va = GetEngine(*(const EngineID*)a)->GetRunningCost();
|
Money va = GetEngine(*(const EngineID*)a)->GetCost();
|
||||||
int vb = GetEngine(*(const EngineID*)b)->GetRunningCost();
|
Money vb = GetEngine(*(const EngineID*)b)->GetCost();
|
||||||
int r = ClampToI32(va - vb);
|
int r = ClampToI32(va - vb);
|
||||||
|
|
||||||
/* Use EngineID to sort instead since we want consistent sorting */
|
/* Use EngineID to sort instead since we want consistent sorting */
|
||||||
@@ -225,8 +225,11 @@ static int CDECL RoadVehEngineCapacitySorter(const void *a, const void *b)
|
|||||||
/* Ship vehicle sorting functions */
|
/* Ship vehicle sorting functions */
|
||||||
static int CDECL ShipEngineCapacitySorter(const void *a, const void *b)
|
static int CDECL ShipEngineCapacitySorter(const void *a, const void *b)
|
||||||
{
|
{
|
||||||
int va = ShipVehInfo(*(const EngineID*)a)->capacity;
|
const Engine *e_a = GetEngine(*(const EngineID*)a);
|
||||||
int vb = ShipVehInfo(*(const EngineID*)b)->capacity;
|
const Engine *e_b = GetEngine(*(const EngineID*)b);
|
||||||
|
|
||||||
|
int va = e_a->GetDisplayDefaultCapacity();
|
||||||
|
int vb = e_b->GetDisplayDefaultCapacity();
|
||||||
int r = va - vb;
|
int r = va - vb;
|
||||||
|
|
||||||
/* Use EngineID to sort instead since we want consistent sorting */
|
/* Use EngineID to sort instead since we want consistent sorting */
|
||||||
@@ -240,8 +243,8 @@ static int CDECL AircraftEngineCargoSorter(const void *a, const void *b)
|
|||||||
const Engine *e_a = GetEngine(*(const EngineID*)a);
|
const Engine *e_a = GetEngine(*(const EngineID*)a);
|
||||||
const Engine *e_b = GetEngine(*(const EngineID*)b);
|
const Engine *e_b = GetEngine(*(const EngineID*)b);
|
||||||
|
|
||||||
int va = AircraftDefaultCargoCapacity(e_a->GetDefaultCargoType(), &e_a->u.air);
|
int va = e_a->GetDisplayDefaultCapacity();
|
||||||
int vb = AircraftDefaultCargoCapacity(e_b->GetDefaultCargoType(), &e_b->u.air);
|
int vb = e_b->GetDisplayDefaultCapacity();
|
||||||
int r = va - vb;
|
int r = va - vb;
|
||||||
|
|
||||||
if (r == 0) {
|
if (r == 0) {
|
||||||
@@ -383,7 +386,7 @@ static int DrawRailWagonPurchaseInfo(int x, int y, EngineID engine_number, const
|
|||||||
/* Wagon weight - (including cargo) */
|
/* Wagon weight - (including cargo) */
|
||||||
uint weight = e->GetDisplayWeight();
|
uint weight = e->GetDisplayWeight();
|
||||||
SetDParam(0, weight);
|
SetDParam(0, weight);
|
||||||
uint cargo_weight = (e->CanCarryCargo() ? GetCargo(e->GetDefaultCargoType())->weight * GetEngineProperty(engine_number, 0x14, rvi->capacity) >> 4 : 0);
|
uint cargo_weight = (e->CanCarryCargo() ? GetCargo(e->GetDefaultCargoType())->weight * e->GetDisplayDefaultCapacity() >> 4 : 0);
|
||||||
SetDParam(1, cargo_weight + weight);
|
SetDParam(1, cargo_weight + weight);
|
||||||
DrawString(x, y, STR_PURCHASE_INFO_WEIGHT_CWEIGHT, TC_FROMSTRING);
|
DrawString(x, y, STR_PURCHASE_INFO_WEIGHT_CWEIGHT, TC_FROMSTRING);
|
||||||
y += 10;
|
y += 10;
|
||||||
@@ -482,7 +485,7 @@ static int DrawShipPurchaseInfo(int x, int y, EngineID engine_number, const Ship
|
|||||||
|
|
||||||
/* Cargo type + capacity */
|
/* Cargo type + capacity */
|
||||||
SetDParam(0, e->GetDefaultCargoType());
|
SetDParam(0, e->GetDefaultCargoType());
|
||||||
SetDParam(1, GetEngineProperty(engine_number, 0x0D, svi->capacity));
|
SetDParam(1, e->GetDisplayDefaultCapacity());
|
||||||
SetDParam(2, refittable ? STR_9842_REFITTABLE : STR_EMPTY);
|
SetDParam(2, refittable ? STR_9842_REFITTABLE : STR_EMPTY);
|
||||||
DrawString(x, y, STR_PURCHASE_INFO_CAPACITY, TC_FROMSTRING);
|
DrawString(x, y, STR_PURCHASE_INFO_CAPACITY, TC_FROMSTRING);
|
||||||
y += 10;
|
y += 10;
|
||||||
@@ -509,14 +512,14 @@ static int DrawAircraftPurchaseInfo(int x, int y, EngineID engine_number, const
|
|||||||
|
|
||||||
/* Cargo capacity */
|
/* Cargo capacity */
|
||||||
if (cargo == CT_INVALID || cargo == CT_PASSENGERS) {
|
if (cargo == CT_INVALID || cargo == CT_PASSENGERS) {
|
||||||
SetDParam(0, avi->passenger_capacity);
|
SetDParam(0, e->GetDisplayDefaultCapacity());
|
||||||
SetDParam(1, avi->mail_capacity);
|
SetDParam(1, avi->mail_capacity);
|
||||||
DrawString(x, y, STR_PURCHASE_INFO_AIRCRAFT_CAPACITY, TC_FROMSTRING);
|
DrawString(x, y, STR_PURCHASE_INFO_AIRCRAFT_CAPACITY, TC_FROMSTRING);
|
||||||
} else {
|
} else {
|
||||||
/* Note, if the default capacity is selected by the refit capacity
|
/* Note, if the default capacity is selected by the refit capacity
|
||||||
* callback, then the capacity shown is likely to be incorrect. */
|
* callback, then the capacity shown is likely to be incorrect. */
|
||||||
SetDParam(0, cargo);
|
SetDParam(0, cargo);
|
||||||
SetDParam(1, AircraftDefaultCargoCapacity(cargo, avi));
|
SetDParam(1, e->GetDisplayDefaultCapacity());
|
||||||
SetDParam(2, refittable ? STR_9842_REFITTABLE : STR_EMPTY);
|
SetDParam(2, refittable ? STR_9842_REFITTABLE : STR_EMPTY);
|
||||||
DrawString(x, y, STR_PURCHASE_INFO_CAPACITY, TC_FROMSTRING);
|
DrawString(x, y, STR_PURCHASE_INFO_CAPACITY, TC_FROMSTRING);
|
||||||
}
|
}
|
||||||
|
@@ -5,6 +5,7 @@
|
|||||||
#include "stdafx.h"
|
#include "stdafx.h"
|
||||||
#include "station_base.h"
|
#include "station_base.h"
|
||||||
#include "oldpool_func.h"
|
#include "oldpool_func.h"
|
||||||
|
#include "economy_base.h"
|
||||||
|
|
||||||
/* Initialize the cargopacket-pool */
|
/* Initialize the cargopacket-pool */
|
||||||
DEFINE_OLD_POOL_GENERIC(CargoPacket, CargoPacket)
|
DEFINE_OLD_POOL_GENERIC(CargoPacket, CargoPacket)
|
||||||
@@ -27,7 +28,6 @@ CargoPacket::CargoPacket(StationID source, uint16 count)
|
|||||||
this->count = count;
|
this->count = count;
|
||||||
this->days_in_transit = 0;
|
this->days_in_transit = 0;
|
||||||
this->feeder_share = 0;
|
this->feeder_share = 0;
|
||||||
this->paid_for = false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
CargoPacket::~CargoPacket()
|
CargoPacket::~CargoPacket()
|
||||||
@@ -37,7 +37,7 @@ CargoPacket::~CargoPacket()
|
|||||||
|
|
||||||
bool CargoPacket::SameSource(const CargoPacket *cp) const
|
bool CargoPacket::SameSource(const CargoPacket *cp) const
|
||||||
{
|
{
|
||||||
return this->source_xy == cp->source_xy && this->days_in_transit == cp->days_in_transit && this->paid_for == cp->paid_for;
|
return this->source_xy == cp->source_xy && this->days_in_transit == cp->days_in_transit;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -81,11 +81,6 @@ uint CargoList::Count() const
|
|||||||
return count;
|
return count;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CargoList::UnpaidCargo() const
|
|
||||||
{
|
|
||||||
return unpaid_cargo;
|
|
||||||
}
|
|
||||||
|
|
||||||
Money CargoList::FeederShare() const
|
Money CargoList::FeederShare() const
|
||||||
{
|
{
|
||||||
return feeder_share;
|
return feeder_share;
|
||||||
@@ -146,9 +141,10 @@ void CargoList::Truncate(uint count)
|
|||||||
InvalidateCache();
|
InvalidateCache();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CargoList::MoveTo(CargoList *dest, uint count, CargoList::MoveToAction mta, uint data)
|
bool CargoList::MoveTo(CargoList *dest, uint count, CargoList::MoveToAction mta, CargoPayment *payment, uint data)
|
||||||
{
|
{
|
||||||
assert(mta == MTA_FINAL_DELIVERY || dest != NULL);
|
assert(mta == MTA_FINAL_DELIVERY || dest != NULL);
|
||||||
|
assert(mta == MTA_UNLOAD || mta == MTA_CARGO_LOAD || payment != NULL);
|
||||||
CargoList tmp;
|
CargoList tmp;
|
||||||
|
|
||||||
while (!packets.empty() && count > 0) {
|
while (!packets.empty() && count > 0) {
|
||||||
@@ -161,20 +157,25 @@ bool CargoList::MoveTo(CargoList *dest, uint count, CargoList::MoveToAction mta,
|
|||||||
if (cp->source == data) {
|
if (cp->source == data) {
|
||||||
tmp.Append(cp);
|
tmp.Append(cp);
|
||||||
} else {
|
} else {
|
||||||
|
payment->PayFinalDelivery(cp, cp->count);
|
||||||
count -= cp->count;
|
count -= cp->count;
|
||||||
delete cp;
|
delete cp;
|
||||||
}
|
}
|
||||||
break;
|
continue; // of the loop
|
||||||
|
|
||||||
case MTA_CARGO_LOAD:
|
case MTA_CARGO_LOAD:
|
||||||
cp->loaded_at_xy = data;
|
cp->loaded_at_xy = data;
|
||||||
/* When cargo is moved into another vehicle you have *always* paid for it */
|
break;
|
||||||
cp->paid_for = false;
|
|
||||||
/* FALL THROUGH */
|
case MTA_TRANSFER:
|
||||||
case MTA_OTHER:
|
payment->PayTransfer(cp, cp->count);
|
||||||
count -= cp->count;
|
break;
|
||||||
dest->packets.push_back(cp);
|
|
||||||
|
case MTA_UNLOAD:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
count -= cp->count;
|
||||||
|
dest->packets.push_back(cp);
|
||||||
} else {
|
} else {
|
||||||
/* Can move only part of the packet, so split it into two pieces */
|
/* Can move only part of the packet, so split it into two pieces */
|
||||||
if (mta != MTA_FINAL_DELIVERY) {
|
if (mta != MTA_FINAL_DELIVERY) {
|
||||||
@@ -189,11 +190,13 @@ bool CargoList::MoveTo(CargoList *dest, uint count, CargoList::MoveToAction mta,
|
|||||||
|
|
||||||
cp_new->days_in_transit = cp->days_in_transit;
|
cp_new->days_in_transit = cp->days_in_transit;
|
||||||
cp_new->feeder_share = fs;
|
cp_new->feeder_share = fs;
|
||||||
/* When cargo is moved into another vehicle you have *always* paid for it */
|
|
||||||
cp_new->paid_for = (mta == MTA_CARGO_LOAD) ? false : cp->paid_for;
|
|
||||||
|
|
||||||
cp_new->count = count;
|
cp_new->count = count;
|
||||||
dest->packets.push_back(cp_new);
|
dest->packets.push_back(cp_new);
|
||||||
|
|
||||||
|
if (mta == MTA_TRANSFER) payment->PayTransfer(cp_new, count);
|
||||||
|
} else {
|
||||||
|
payment->PayFinalDelivery(cp, count);
|
||||||
}
|
}
|
||||||
cp->count -= count;
|
cp->count -= count;
|
||||||
|
|
||||||
@@ -205,7 +208,7 @@ bool CargoList::MoveTo(CargoList *dest, uint count, CargoList::MoveToAction mta,
|
|||||||
|
|
||||||
if (mta == MTA_FINAL_DELIVERY && !tmp.Empty()) {
|
if (mta == MTA_FINAL_DELIVERY && !tmp.Empty()) {
|
||||||
/* There are some packets that could not be delivered at the station, put them back */
|
/* There are some packets that could not be delivered at the station, put them back */
|
||||||
tmp.MoveTo(this, UINT_MAX);
|
tmp.MoveTo(this, UINT_MAX, MTA_UNLOAD, NULL);
|
||||||
tmp.packets.clear();
|
tmp.packets.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -219,7 +222,6 @@ void CargoList::InvalidateCache()
|
|||||||
{
|
{
|
||||||
empty = packets.empty();
|
empty = packets.empty();
|
||||||
count = 0;
|
count = 0;
|
||||||
unpaid_cargo = false;
|
|
||||||
feeder_share = 0;
|
feeder_share = 0;
|
||||||
source = INVALID_STATION;
|
source = INVALID_STATION;
|
||||||
days_in_transit = 0;
|
days_in_transit = 0;
|
||||||
@@ -229,7 +231,6 @@ void CargoList::InvalidateCache()
|
|||||||
uint dit = 0;
|
uint dit = 0;
|
||||||
for (List::const_iterator it = packets.begin(); it != packets.end(); it++) {
|
for (List::const_iterator it = packets.begin(); it != packets.end(); it++) {
|
||||||
count += (*it)->count;
|
count += (*it)->count;
|
||||||
unpaid_cargo |= !(*it)->paid_for;
|
|
||||||
dit += (*it)->days_in_transit * (*it)->count;
|
dit += (*it)->days_in_transit * (*it)->count;
|
||||||
feeder_share += (*it)->feeder_share;
|
feeder_share += (*it)->feeder_share;
|
||||||
}
|
}
|
||||||
|
@@ -29,7 +29,6 @@ struct CargoPacket : PoolItem<CargoPacket, CargoPacketID, &_CargoPacket_pool> {
|
|||||||
|
|
||||||
uint16 count; ///< The amount of cargo in this packet
|
uint16 count; ///< The amount of cargo in this packet
|
||||||
byte days_in_transit; ///< Amount of days this packet has been in transit
|
byte days_in_transit; ///< Amount of days this packet has been in transit
|
||||||
bool paid_for; ///< Have we been paid for this cargo packet?
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates a new cargo packet
|
* Creates a new cargo packet
|
||||||
@@ -85,7 +84,8 @@ public:
|
|||||||
enum MoveToAction {
|
enum MoveToAction {
|
||||||
MTA_FINAL_DELIVERY, ///< "Deliver" the packet to the final destination, i.e. destroy the packet
|
MTA_FINAL_DELIVERY, ///< "Deliver" the packet to the final destination, i.e. destroy the packet
|
||||||
MTA_CARGO_LOAD, ///< Load the packet onto a vehicle, i.e. set the last loaded station ID
|
MTA_CARGO_LOAD, ///< Load the packet onto a vehicle, i.e. set the last loaded station ID
|
||||||
MTA_OTHER ///< "Just" move the packet to another cargo list
|
MTA_TRANSFER, ///< The cargo is moved as part of a transfer
|
||||||
|
MTA_UNLOAD, ///< The cargo is moved as part of a forced unload
|
||||||
};
|
};
|
||||||
|
|
||||||
private:
|
private:
|
||||||
@@ -93,7 +93,6 @@ private:
|
|||||||
|
|
||||||
bool empty; ///< Cache for whether this list is empty or not
|
bool empty; ///< Cache for whether this list is empty or not
|
||||||
uint count; ///< Cache for the number of cargo entities
|
uint count; ///< Cache for the number of cargo entities
|
||||||
bool unpaid_cargo; ///< Cache for the unpaid cargo
|
|
||||||
Money feeder_share; ///< Cache for the feeder share
|
Money feeder_share; ///< Cache for the feeder share
|
||||||
StationID source; ///< Cache for the source of the packet
|
StationID source; ///< Cache for the source of the packet
|
||||||
uint days_in_transit; ///< Cache for the number of days in transit
|
uint days_in_transit; ///< Cache for the number of days in transit
|
||||||
@@ -129,12 +128,6 @@ public:
|
|||||||
*/
|
*/
|
||||||
uint Count() const;
|
uint Count() const;
|
||||||
|
|
||||||
/**
|
|
||||||
* Is there some cargo that has not been paid for?
|
|
||||||
* @return true if and only if there is such a cargo
|
|
||||||
*/
|
|
||||||
bool UnpaidCargo() const;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns total sum of the feeder share for all packets
|
* Returns total sum of the feeder share for all packets
|
||||||
* @return the before mentioned number
|
* @return the before mentioned number
|
||||||
@@ -175,18 +168,23 @@ public:
|
|||||||
* Depending on the value of mta the side effects of this function differ:
|
* Depending on the value of mta the side effects of this function differ:
|
||||||
* - MTA_FINAL_DELIVERY: destroys the packets that do not originate from a specific station
|
* - MTA_FINAL_DELIVERY: destroys the packets that do not originate from a specific station
|
||||||
* - MTA_CARGO_LOAD: sets the loaded_at_xy value of the moved packets
|
* - MTA_CARGO_LOAD: sets the loaded_at_xy value of the moved packets
|
||||||
* - MTA_OTHER: just move without side effects
|
* - MTA_TRANSFER: just move without side effects
|
||||||
|
* - MTA_UNLOAD: just move without side effects
|
||||||
* @param dest the destination to move the cargo to
|
* @param dest the destination to move the cargo to
|
||||||
* @param count the amount of cargo entities to move
|
* @param count the amount of cargo entities to move
|
||||||
* @param mta how to handle the moving (side effects)
|
* @param mta how to handle the moving (side effects)
|
||||||
* @param data Depending on mta the data of this variable differs:
|
* @param data Depending on mta the data of this variable differs:
|
||||||
* - MTA_FINAL_DELIVERY - station ID of packet's origin not to remove
|
* - MTA_FINAL_DELIVERY - station ID of packet's origin not to remove
|
||||||
* - MTA_CARGO_LOAD - station's tile index of load
|
* - MTA_CARGO_LOAD - station's tile index of load
|
||||||
* - MTA_OTHER - unused
|
* - MTA_TRANSFER - unused
|
||||||
* @param mta == MTA_FINAL_DELIVERY || dest != NULL
|
* - MTA_UNLOAD - unused
|
||||||
|
* @param payment The payment helper
|
||||||
|
*
|
||||||
|
* @pre mta == MTA_FINAL_DELIVERY || dest != NULL
|
||||||
|
* @pre mta == MTA_UNLOAD || mta == MTA_CARGO_LOAD || payment != NULL
|
||||||
* @return true if there are still packets that might be moved from this cargo list
|
* @return true if there are still packets that might be moved from this cargo list
|
||||||
*/
|
*/
|
||||||
bool MoveTo(CargoList *dest, uint count, CargoList::MoveToAction mta = MTA_OTHER, uint data = 0);
|
bool MoveTo(CargoList *dest, uint count, CargoList::MoveToAction mta, CargoPayment *payment, uint data = 0);
|
||||||
|
|
||||||
/** Invalidates the cached data and rebuild it */
|
/** Invalidates the cached data and rebuild it */
|
||||||
void InvalidateCache();
|
void InvalidateCache();
|
||||||
|
@@ -123,11 +123,6 @@ static void GetAcceptedCargo_Clear(TileIndex tile, AcceptedCargo ac)
|
|||||||
/* unused */
|
/* unused */
|
||||||
}
|
}
|
||||||
|
|
||||||
static void AnimateTile_Clear(TileIndex tile)
|
|
||||||
{
|
|
||||||
/* unused */
|
|
||||||
}
|
|
||||||
|
|
||||||
void TileLoopClearHelper(TileIndex tile)
|
void TileLoopClearHelper(TileIndex tile)
|
||||||
{
|
{
|
||||||
byte self;
|
byte self;
|
||||||
@@ -317,12 +312,6 @@ get_out:;
|
|||||||
} while (--i);
|
} while (--i);
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool ClickTile_Clear(TileIndex tile)
|
|
||||||
{
|
|
||||||
/* not used */
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
static TrackStatus GetTileTrackStatus_Clear(TileIndex tile, TransportType mode, uint sub_mode, DiagDirection side)
|
static TrackStatus GetTileTrackStatus_Clear(TileIndex tile, TransportType mode, uint sub_mode, DiagDirection side)
|
||||||
{
|
{
|
||||||
return 0;
|
return 0;
|
||||||
@@ -369,8 +358,8 @@ extern const TileTypeProcs _tile_type_clear_procs = {
|
|||||||
GetAcceptedCargo_Clear, ///< get_accepted_cargo_proc
|
GetAcceptedCargo_Clear, ///< get_accepted_cargo_proc
|
||||||
GetTileDesc_Clear, ///< get_tile_desc_proc
|
GetTileDesc_Clear, ///< get_tile_desc_proc
|
||||||
GetTileTrackStatus_Clear, ///< get_tile_track_status_proc
|
GetTileTrackStatus_Clear, ///< get_tile_track_status_proc
|
||||||
ClickTile_Clear, ///< click_tile_proc
|
NULL, ///< click_tile_proc
|
||||||
AnimateTile_Clear, ///< animate_tile_proc
|
NULL, ///< animate_tile_proc
|
||||||
TileLoop_Clear, ///< tile_loop_clear
|
TileLoop_Clear, ///< tile_loop_clear
|
||||||
ChangeTileOwner_Clear, ///< change_tile_owner_clear
|
ChangeTileOwner_Clear, ///< change_tile_owner_clear
|
||||||
NULL, ///< get_produced_cargo_proc
|
NULL, ///< get_produced_cargo_proc
|
||||||
|
@@ -445,12 +445,11 @@ Company *DoStartupNewCompany(bool is_ai)
|
|||||||
c->inaugurated_year = _cur_year;
|
c->inaugurated_year = _cur_year;
|
||||||
RandomCompanyManagerFaceBits(c->face, (GenderEthnicity)Random(), false); // create a random company manager face
|
RandomCompanyManagerFaceBits(c->face, (GenderEthnicity)Random(), false); // create a random company manager face
|
||||||
|
|
||||||
/* Engine renewal settings */
|
/* Settings for non-ai companies are copied from the client settings later. */
|
||||||
c->engine_renew_list = NULL;
|
if (is_ai) {
|
||||||
c->renew_keep_length = false;
|
c->engine_renew_money = 100000;
|
||||||
c->engine_renew = _settings_client.gui.autorenew;
|
c->engine_renew_months = 6;
|
||||||
c->engine_renew_months = _settings_client.gui.autorenew_months;
|
}
|
||||||
c->engine_renew_money = _settings_client.gui.autorenew_money;
|
|
||||||
|
|
||||||
GeneratePresidentName(c);
|
GeneratePresidentName(c);
|
||||||
|
|
||||||
@@ -756,6 +755,9 @@ CommandCost CmdCompanyCtrl(TileIndex tile, DoCommandFlag flags, uint32 p1, uint3
|
|||||||
|
|
||||||
/* This is the client (or non-dedicated server) who wants a new company */
|
/* This is the client (or non-dedicated server) who wants a new company */
|
||||||
if (cid == _network_own_client_id) {
|
if (cid == _network_own_client_id) {
|
||||||
|
/* Create p1 and p2 here because SetLocalCompany resets the gui.autorenew* settings. */
|
||||||
|
uint32 p1 = (_settings_client.gui.autorenew << 15 ) | (_settings_client.gui.autorenew_months << 16) | 4;
|
||||||
|
uint32 p2 = _settings_client.gui.autorenew_money;
|
||||||
assert(_local_company == COMPANY_SPECTATOR);
|
assert(_local_company == COMPANY_SPECTATOR);
|
||||||
SetLocalCompany(c->index);
|
SetLocalCompany(c->index);
|
||||||
if (!StrEmpty(_settings_client.network.default_company_pass)) {
|
if (!StrEmpty(_settings_client.network.default_company_pass)) {
|
||||||
@@ -767,13 +769,7 @@ CommandCost CmdCompanyCtrl(TileIndex tile, DoCommandFlag flags, uint32 p1, uint3
|
|||||||
|
|
||||||
/* Now that we have a new company, broadcast our autorenew settings to
|
/* Now that we have a new company, broadcast our autorenew settings to
|
||||||
* all clients so everything is in sync */
|
* all clients so everything is in sync */
|
||||||
NetworkSend_Command(0,
|
NetworkSend_Command(0, p1, p2, CMD_SET_AUTOREPLACE, NULL, NULL);
|
||||||
(_settings_client.gui.autorenew << 15 ) | (_settings_client.gui.autorenew_months << 16) | 4,
|
|
||||||
_settings_client.gui.autorenew_money,
|
|
||||||
CMD_SET_AUTOREPLACE,
|
|
||||||
NULL,
|
|
||||||
NULL
|
|
||||||
);
|
|
||||||
|
|
||||||
MarkWholeScreenDirty();
|
MarkWholeScreenDirty();
|
||||||
}
|
}
|
||||||
|
@@ -462,7 +462,7 @@ public:
|
|||||||
this->livery_class = LC_OTHER;
|
this->livery_class = LC_OTHER;
|
||||||
this->sel = 1;
|
this->sel = 1;
|
||||||
this->LowerWidget(SCLW_WIDGET_CLASS_GENERAL);
|
this->LowerWidget(SCLW_WIDGET_CLASS_GENERAL);
|
||||||
this->OnInvalidateData(_loaded_newgrf_features.has_2CC);
|
this->OnInvalidateData();
|
||||||
this->FindWindowPlacementAndResize(desc);
|
this->FindWindowPlacementAndResize(desc);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -595,14 +595,8 @@ public:
|
|||||||
|
|
||||||
virtual void OnInvalidateData(int data = 0)
|
virtual void OnInvalidateData(int data = 0)
|
||||||
{
|
{
|
||||||
static bool has2cc = true;
|
int r = this->widget[_loaded_newgrf_features.has_2CC ? SCLW_WIDGET_SEC_COL_DROPDOWN : SCLW_WIDGET_PRI_COL_DROPDOWN].right;
|
||||||
|
this->SetWidgetHiddenState(SCLW_WIDGET_SEC_COL_DROPDOWN, !_loaded_newgrf_features.has_2CC);
|
||||||
if (has2cc == !!data) return;
|
|
||||||
|
|
||||||
has2cc = !!data;
|
|
||||||
|
|
||||||
int r = this->widget[has2cc ? SCLW_WIDGET_SEC_COL_DROPDOWN : SCLW_WIDGET_PRI_COL_DROPDOWN].right;
|
|
||||||
this->SetWidgetHiddenState(SCLW_WIDGET_SEC_COL_DROPDOWN, !has2cc);
|
|
||||||
this->widget[SCLW_WIDGET_CAPTION].right = r;
|
this->widget[SCLW_WIDGET_CAPTION].right = r;
|
||||||
this->widget[SCLW_WIDGET_SPACER_CLASS].right = r;
|
this->widget[SCLW_WIDGET_SPACER_CLASS].right = r;
|
||||||
this->widget[SCLW_WIDGET_MATRIX].right = r;
|
this->widget[SCLW_WIDGET_MATRIX].right = r;
|
||||||
|
@@ -116,13 +116,13 @@ void IConsolePrint(ConsoleColour colour_code, const char *string)
|
|||||||
* by any other means. Uses printf() style format, for more information look
|
* by any other means. Uses printf() style format, for more information look
|
||||||
* at IConsolePrint()
|
* at IConsolePrint()
|
||||||
*/
|
*/
|
||||||
void CDECL IConsolePrintF(ConsoleColour colour_code, const char *s, ...)
|
void CDECL IConsolePrintF(ConsoleColour colour_code, const char *format, ...)
|
||||||
{
|
{
|
||||||
va_list va;
|
va_list va;
|
||||||
char buf[ICON_MAX_STREAMSIZE];
|
char buf[ICON_MAX_STREAMSIZE];
|
||||||
|
|
||||||
va_start(va, s);
|
va_start(va, format);
|
||||||
vsnprintf(buf, sizeof(buf), s, va);
|
vsnprintf(buf, sizeof(buf), format, va);
|
||||||
va_end(va);
|
va_end(va);
|
||||||
|
|
||||||
IConsolePrint(colour_code, buf);
|
IConsolePrint(colour_code, buf);
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user