ソースを参照

Remove parsed options from the love.load arglist

--HG--
branch : minor
Kyle McLamb 8 年 前
コミット
9a03cf10a4
2 ファイル変更102 行追加3 行削除
  1. 38 1
      src/scripts/boot.lua
  2. 64 2
      src/scripts/boot.lua.h

+ 38 - 1
src/scripts/boot.lua

@@ -115,6 +115,8 @@ love.arg.options = {
 	game = { a = 1 }
 }
 
+love.arg.option_indexes = {}
+
 function love.arg.parse_option(m, i)
 	m.set = true
 
@@ -139,8 +141,11 @@ function love.arg.parse_options()
 		local m = string.match(arg[i], "^%-%-(.+)")
 
 		if m and love.arg.options[m] then
+			love.arg.option_indexes[i] = true
 			i = i + love.arg.parse_option(love.arg.options[m], i+1)
 		elseif not game then
+			love.arg.option_indexes[i] = true
+			love.arg.options.game.index  = i
 			game = i
 		end
 		i = i + 1
@@ -151,6 +156,31 @@ function love.arg.parse_options()
 	end
 end
 
+-- Returns the arguments that are passed to your game via love.load() it holds
+-- the exact same arguments as the default 'arg' table, except the indexes are
+-- shifted such that your game source (eg. "game.love" for a file, "game.exe"
+-- for a fused game) is out[0]
+function love.arg.game_arguments(a)
+	local out = {}
+
+	local low = math.huge
+	for k, v in pairs(arg) do
+		if k < low then
+			low = k
+		end
+	end
+
+	local o = low
+	for i=low, #a do
+		if not love.arg.option_indexes[i] then
+			out[o] = a[i]
+			o = o + 1
+		end
+	end
+
+	return out
+end
+
 function love.createhandlers()
 
 	-- Standard callback handlers.
@@ -281,6 +311,13 @@ function love.boot()
 
 	-- Is this one of those fancy "fused" games?
 	local can_has_game = pcall(love.filesystem.setSource, exepath)
+
+	if can_has_game then
+		-- the game source is in the exe so we should pass the argument we
+		-- originally though was the game to the app
+		love.arg.option_indexes[love.arg.options.game.index] = false
+	end
+
 	local is_fused_game = can_has_game or love.arg.options.fused.set
 
 	love.filesystem.setFused(is_fused_game)
@@ -516,7 +553,7 @@ function love.run()
 		love.math.setRandomSeed(os.time())
 	end
 
-	if love.load then love.load(arg) end
+	if love.load then love.load(love.arg.game_arguments(arg)) end
 
 	-- We don't want the first frame's dt to include time taken by love.load.
 	if love.timer then love.timer.step() end

+ 64 - 2
src/scripts/boot.lua.h

@@ -209,6 +209,8 @@ const unsigned char boot_lua[] =
 	0x09, 0x66, 0x75, 0x73, 0x65, 0x64, 0x20, 0x3d, 0x20, 0x7b, 0x61, 0x20, 0x3d, 0x20, 0x30, 0x20, 0x7d, 0x2c, 0x0a,
 	0x09, 0x67, 0x61, 0x6d, 0x65, 0x20, 0x3d, 0x20, 0x7b, 0x20, 0x61, 0x20, 0x3d, 0x20, 0x31, 0x20, 0x7d, 0x0a,
 	0x7d, 0x0a,
+	0x6c, 0x6f, 0x76, 0x65, 0x2e, 0x61, 0x72, 0x67, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x6e, 
+	0x64, 0x65, 0x78, 0x65, 0x73, 0x20, 0x3d, 0x20, 0x7b, 0x7d, 0x0a,
 	0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6c, 0x6f, 0x76, 0x65, 0x2e, 0x61, 0x72, 0x67, 0x2e, 
 	0x70, 0x61, 0x72, 0x73, 0x65, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x6d, 0x2c, 0x20, 0x69, 0x29, 0x0a,
 	0x09, 0x6d, 0x2e, 0x73, 0x65, 0x74, 0x20, 0x3d, 0x20, 0x74, 0x72, 0x75, 0x65, 0x0a,
@@ -236,12 +238,18 @@ const unsigned char boot_lua[] =
 	0x2d, 0x25, 0x2d, 0x28, 0x2e, 0x2b, 0x29, 0x22, 0x29, 0x0a,
 	0x09, 0x09, 0x69, 0x66, 0x20, 0x6d, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x6c, 0x6f, 0x76, 0x65, 0x2e, 0x61, 0x72, 
 	0x67, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x5b, 0x6d, 0x5d, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x0a,
+	0x09, 0x09, 0x09, 0x6c, 0x6f, 0x76, 0x65, 0x2e, 0x61, 0x72, 0x67, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 
+	0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x65, 0x73, 0x5b, 0x69, 0x5d, 0x20, 0x3d, 0x20, 0x74, 0x72, 0x75, 0x65, 0x0a,
 	0x09, 0x09, 0x09, 0x69, 0x20, 0x3d, 0x20, 0x69, 0x20, 0x2b, 0x20, 0x6c, 0x6f, 0x76, 0x65, 0x2e, 0x61, 0x72, 
 	0x67, 0x2e, 0x70, 0x61, 0x72, 0x73, 0x65, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x6c, 0x6f, 0x76, 
 	0x65, 0x2e, 0x61, 0x72, 0x67, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x5b, 0x6d, 0x5d, 0x2c, 0x20, 
 	0x69, 0x2b, 0x31, 0x29, 0x0a,
 	0x09, 0x09, 0x65, 0x6c, 0x73, 0x65, 0x69, 0x66, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x67, 0x61, 0x6d, 0x65, 0x20, 
 	0x74, 0x68, 0x65, 0x6e, 0x0a,
+	0x09, 0x09, 0x09, 0x6c, 0x6f, 0x76, 0x65, 0x2e, 0x61, 0x72, 0x67, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 
+	0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x65, 0x73, 0x5b, 0x69, 0x5d, 0x20, 0x3d, 0x20, 0x74, 0x72, 0x75, 0x65, 0x0a,
+	0x09, 0x09, 0x09, 0x6c, 0x6f, 0x76, 0x65, 0x2e, 0x61, 0x72, 0x67, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 
+	0x73, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x2e, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x20, 0x20, 0x3d, 0x20, 0x69, 0x0a,
 	0x09, 0x09, 0x09, 0x67, 0x61, 0x6d, 0x65, 0x20, 0x3d, 0x20, 0x69, 0x0a,
 	0x09, 0x09, 0x65, 0x6e, 0x64, 0x0a,
 	0x09, 0x09, 0x69, 0x20, 0x3d, 0x20, 0x69, 0x20, 0x2b, 0x20, 0x31, 0x0a,
@@ -255,6 +263,45 @@ const unsigned char boot_lua[] =
 	0x20, 0x30, 0x29, 0x0a,
 	0x09, 0x65, 0x6e, 0x64, 0x0a,
 	0x65, 0x6e, 0x64, 0x0a,
+	0x2d, 0x2d, 0x20, 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x61, 0x72, 0x67, 
+	0x75, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x61, 0x72, 0x65, 0x20, 0x70, 0x61, 
+	0x73, 0x73, 0x65, 0x64, 0x20, 0x74, 0x6f, 0x20, 0x79, 0x6f, 0x75, 0x72, 0x20, 0x67, 0x61, 0x6d, 0x65, 0x20, 
+	0x76, 0x69, 0x61, 0x20, 0x6c, 0x6f, 0x76, 0x65, 0x2e, 0x6c, 0x6f, 0x61, 0x64, 0x28, 0x29, 0x20, 0x69, 0x74, 
+	0x20, 0x68, 0x6f, 0x6c, 0x64, 0x73, 0x0a,
+	0x2d, 0x2d, 0x20, 0x74, 0x68, 0x65, 0x20, 0x65, 0x78, 0x61, 0x63, 0x74, 0x20, 0x73, 0x61, 0x6d, 0x65, 0x20, 
+	0x61, 0x72, 0x67, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x20, 0x61, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x64, 
+	0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x20, 0x27, 0x61, 0x72, 0x67, 0x27, 0x20, 0x74, 0x61, 0x62, 0x6c, 0x65, 
+	0x2c, 0x20, 0x65, 0x78, 0x63, 0x65, 0x70, 0x74, 0x20, 0x74, 0x68, 0x65, 0x20, 0x69, 0x6e, 0x64, 0x65, 0x78, 
+	0x65, 0x73, 0x20, 0x61, 0x72, 0x65, 0x0a,
+	0x2d, 0x2d, 0x20, 0x73, 0x68, 0x69, 0x66, 0x74, 0x65, 0x64, 0x20, 0x73, 0x75, 0x63, 0x68, 0x20, 0x74, 0x68, 
+	0x61, 0x74, 0x20, 0x79, 0x6f, 0x75, 0x72, 0x20, 0x67, 0x61, 0x6d, 0x65, 0x20, 0x73, 0x6f, 0x75, 0x72, 0x63, 
+	0x65, 0x20, 0x28, 0x65, 0x67, 0x2e, 0x20, 0x22, 0x67, 0x61, 0x6d, 0x65, 0x2e, 0x6c, 0x6f, 0x76, 0x65, 0x22, 
+	0x20, 0x66, 0x6f, 0x72, 0x20, 0x61, 0x20, 0x66, 0x69, 0x6c, 0x65, 0x2c, 0x20, 0x22, 0x67, 0x61, 0x6d, 0x65, 
+	0x2e, 0x65, 0x78, 0x65, 0x22, 0x0a,
+	0x2d, 0x2d, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x61, 0x20, 0x66, 0x75, 0x73, 0x65, 0x64, 0x20, 0x67, 0x61, 0x6d, 
+	0x65, 0x29, 0x20, 0x69, 0x73, 0x20, 0x6f, 0x75, 0x74, 0x5b, 0x30, 0x5d, 0x0a,
+	0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6c, 0x6f, 0x76, 0x65, 0x2e, 0x61, 0x72, 0x67, 0x2e, 
+	0x67, 0x61, 0x6d, 0x65, 0x5f, 0x61, 0x72, 0x67, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x28, 0x61, 0x29, 0x0a,
+	0x09, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x6f, 0x75, 0x74, 0x20, 0x3d, 0x20, 0x7b, 0x7d, 0x0a,
+	0x09, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x6c, 0x6f, 0x77, 0x20, 0x3d, 0x20, 0x6d, 0x61, 0x74, 0x68, 0x2e, 
+	0x68, 0x75, 0x67, 0x65, 0x0a,
+	0x09, 0x66, 0x6f, 0x72, 0x20, 0x6b, 0x2c, 0x20, 0x76, 0x20, 0x69, 0x6e, 0x20, 0x70, 0x61, 0x69, 0x72, 0x73, 
+	0x28, 0x61, 0x72, 0x67, 0x29, 0x20, 0x64, 0x6f, 0x0a,
+	0x09, 0x09, 0x69, 0x66, 0x20, 0x6b, 0x20, 0x3c, 0x20, 0x6c, 0x6f, 0x77, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x0a,
+	0x09, 0x09, 0x09, 0x6c, 0x6f, 0x77, 0x20, 0x3d, 0x20, 0x6b, 0x0a,
+	0x09, 0x09, 0x65, 0x6e, 0x64, 0x0a,
+	0x09, 0x65, 0x6e, 0x64, 0x0a,
+	0x09, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x6f, 0x20, 0x3d, 0x20, 0x6c, 0x6f, 0x77, 0x0a,
+	0x09, 0x66, 0x6f, 0x72, 0x20, 0x69, 0x3d, 0x6c, 0x6f, 0x77, 0x2c, 0x20, 0x23, 0x61, 0x20, 0x64, 0x6f, 0x0a,
+	0x09, 0x09, 0x69, 0x66, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x6c, 0x6f, 0x76, 0x65, 0x2e, 0x61, 0x72, 0x67, 0x2e, 
+	0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x65, 0x73, 0x5b, 0x69, 0x5d, 0x20, 
+	0x74, 0x68, 0x65, 0x6e, 0x0a,
+	0x09, 0x09, 0x09, 0x6f, 0x75, 0x74, 0x5b, 0x6f, 0x5d, 0x20, 0x3d, 0x20, 0x61, 0x5b, 0x69, 0x5d, 0x0a,
+	0x09, 0x09, 0x09, 0x6f, 0x20, 0x3d, 0x20, 0x6f, 0x20, 0x2b, 0x20, 0x31, 0x0a,
+	0x09, 0x09, 0x65, 0x6e, 0x64, 0x0a,
+	0x09, 0x65, 0x6e, 0x64, 0x0a,
+	0x09, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6f, 0x75, 0x74, 0x0a,
+	0x65, 0x6e, 0x64, 0x0a,
 	0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6c, 0x6f, 0x76, 0x65, 0x2e, 0x63, 0x72, 0x65, 0x61, 
 	0x74, 0x65, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x72, 0x73, 0x28, 0x29, 0x0a,
 	0x09, 0x2d, 0x2d, 0x20, 0x53, 0x74, 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64, 0x20, 0x63, 0x61, 0x6c, 0x6c, 0x62, 
@@ -522,6 +569,20 @@ const unsigned char boot_lua[] =
 	0x65, 0x20, 0x3d, 0x20, 0x70, 0x63, 0x61, 0x6c, 0x6c, 0x28, 0x6c, 0x6f, 0x76, 0x65, 0x2e, 0x66, 0x69, 0x6c, 
 	0x65, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2e, 0x73, 0x65, 0x74, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x2c, 
 	0x20, 0x65, 0x78, 0x65, 0x70, 0x61, 0x74, 0x68, 0x29, 0x0a,
+	0x09, 0x69, 0x66, 0x20, 0x63, 0x61, 0x6e, 0x5f, 0x68, 0x61, 0x73, 0x5f, 0x67, 0x61, 0x6d, 0x65, 0x20, 0x74, 
+	0x68, 0x65, 0x6e, 0x0a,
+	0x09, 0x09, 0x2d, 0x2d, 0x20, 0x74, 0x68, 0x65, 0x20, 0x67, 0x61, 0x6d, 0x65, 0x20, 0x73, 0x6f, 0x75, 0x72, 
+	0x63, 0x65, 0x20, 0x69, 0x73, 0x20, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x65, 0x78, 0x65, 0x20, 0x73, 
+	0x6f, 0x20, 0x77, 0x65, 0x20, 0x73, 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x70, 0x61, 0x73, 0x73, 0x20, 0x74, 
+	0x68, 0x65, 0x20, 0x61, 0x72, 0x67, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x77, 0x65, 0x0a,
+	0x09, 0x09, 0x2d, 0x2d, 0x20, 0x6f, 0x72, 0x69, 0x67, 0x69, 0x6e, 0x61, 0x6c, 0x6c, 0x79, 0x20, 0x74, 0x68, 
+	0x6f, 0x75, 0x67, 0x68, 0x20, 0x77, 0x61, 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x67, 0x61, 0x6d, 0x65, 0x20, 
+	0x74, 0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x61, 0x70, 0x70, 0x0a,
+	0x09, 0x09, 0x6c, 0x6f, 0x76, 0x65, 0x2e, 0x61, 0x72, 0x67, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 
+	0x69, 0x6e, 0x64, 0x65, 0x78, 0x65, 0x73, 0x5b, 0x6c, 0x6f, 0x76, 0x65, 0x2e, 0x61, 0x72, 0x67, 0x2e, 0x6f, 
+	0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x2e, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x5d, 
+	0x20, 0x3d, 0x20, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x0a,
+	0x09, 0x65, 0x6e, 0x64, 0x0a,
 	0x09, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x69, 0x73, 0x5f, 0x66, 0x75, 0x73, 0x65, 0x64, 0x5f, 0x67, 0x61, 
 	0x6d, 0x65, 0x20, 0x3d, 0x20, 0x63, 0x61, 0x6e, 0x5f, 0x68, 0x61, 0x73, 0x5f, 0x67, 0x61, 0x6d, 0x65, 0x20, 
 	0x6f, 0x72, 0x20, 0x6c, 0x6f, 0x76, 0x65, 0x2e, 0x61, 0x72, 0x67, 0x2e, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 
@@ -957,8 +1018,9 @@ const unsigned char boot_lua[] =
 	0x64, 0x6f, 0x6d, 0x53, 0x65, 0x65, 0x64, 0x28, 0x6f, 0x73, 0x2e, 0x74, 0x69, 0x6d, 0x65, 0x28, 0x29, 0x29, 0x0a,
 	0x09, 0x65, 0x6e, 0x64, 0x0a,
 	0x09, 0x69, 0x66, 0x20, 0x6c, 0x6f, 0x76, 0x65, 0x2e, 0x6c, 0x6f, 0x61, 0x64, 0x20, 0x74, 0x68, 0x65, 0x6e, 
-	0x20, 0x6c, 0x6f, 0x76, 0x65, 0x2e, 0x6c, 0x6f, 0x61, 0x64, 0x28, 0x61, 0x72, 0x67, 0x29, 0x20, 0x65, 0x6e, 
-	0x64, 0x0a,
+	0x20, 0x6c, 0x6f, 0x76, 0x65, 0x2e, 0x6c, 0x6f, 0x61, 0x64, 0x28, 0x6c, 0x6f, 0x76, 0x65, 0x2e, 0x61, 0x72, 
+	0x67, 0x2e, 0x67, 0x61, 0x6d, 0x65, 0x5f, 0x61, 0x72, 0x67, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x28, 0x61, 
+	0x72, 0x67, 0x29, 0x29, 0x20, 0x65, 0x6e, 0x64, 0x0a,
 	0x09, 0x2d, 0x2d, 0x20, 0x57, 0x65, 0x20, 0x64, 0x6f, 0x6e, 0x27, 0x74, 0x20, 0x77, 0x61, 0x6e, 0x74, 0x20, 
 	0x74, 0x68, 0x65, 0x20, 0x66, 0x69, 0x72, 0x73, 0x74, 0x20, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x27, 0x73, 0x20, 
 	0x64, 0x74, 0x20, 0x74, 0x6f, 0x20, 0x69, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x20, 0x74, 0x69, 0x6d, 0x65,