From 495aa1ef1428c0e057346696ca289bca4b5be4d8 Mon Sep 17 00:00:00 2001 From: Flameshadowxeroshin Date: Tue, 15 May 2012 23:04:46 -0500 Subject: [PATCH] some things. --- Themes/_fallback/Scripts/02 Utilities.lua | 15 ++++++++++ .../Scripts/05 NewScoringFrontend.lua | 19 +++++++++++- .../_fallback/Scripts/05 ScoringEngine2.lua | 29 ++++++++++++++++++- 3 files changed, 61 insertions(+), 2 deletions(-) diff --git a/Themes/_fallback/Scripts/02 Utilities.lua b/Themes/_fallback/Scripts/02 Utilities.lua index c9337d3581..9bd1500e7c 100644 --- a/Themes/_fallback/Scripts/02 Utilities.lua +++ b/Themes/_fallback/Scripts/02 Utilities.lua @@ -141,6 +141,15 @@ function table.find(t, sFind) return nil end +--Get the count of all items in a table +function table.itemcount(t) + local i = 0 + while next(t)~=nil do + i=i+1 + end + return i +end + function math.round(num, pre) if pre and pre < 0 then pre = 0 end local mult = 10^(pre or 0) @@ -201,6 +210,12 @@ function IsFreePlay() return IsArcade() and (GAMESTATE:GetCoinMode() == 'CoinMode_Free') or false end +function ArgsIfPlayerJoinedOrNil(arg1,arg2) + if arg1==nil then arg1=arg2 + elseif arg2==nil then arg2=arg1 end + return (GAMESTATE:IsSideJoined(PLAYER_1) and arg1 or nil),(GAMESTATE:IsSideJoined(PLAYER_2) and arg2 or nil) +end + function Center1Player() local styleType = GAMESTATE:GetCurrentStyle():GetStyleType() -- always center in OnePlayerTwoSides. diff --git a/Themes/_fallback/Scripts/05 NewScoringFrontend.lua b/Themes/_fallback/Scripts/05 NewScoringFrontend.lua index a523cbff8e..0740ce18d5 100644 --- a/Themes/_fallback/Scripts/05 NewScoringFrontend.lua +++ b/Themes/_fallback/Scripts/05 NewScoringFrontend.lua @@ -6,11 +6,12 @@ It's unnecessary and problematic.]] ScoringModes={} local function CreateOldScoringShim(name) + local func = Scoring[name] return function(judg,pss,player,mode) judg,pss,player,mode=coroutine.yield() while true do if mode=="update" then - Scoring[name](judg,pss) + func(judg,pss) judg,pss,player,mode=coroutine.yield(pss:GetScore(),pss:GetCurMaxScore()) elseif mode=="finalize" then return pss:GetScore(),pss:GetCurMaxScore() @@ -134,6 +135,22 @@ for k,v in pairs(Scoring) do end end +--if you are using the old Scoring system in the standard way, your theme will not need to be updated +local OldCallShimMt={ + __index=function(t,k,v) + return function(judg, _) + if GetNumReadiedScoreKeepers()==0 then + --lazy programming + InitScoreKeepers(ArgsIfPlayerJoinedOrNil(v)) + end + UpdateScoreKeepers(judg) + end + end +} + +Scoring={} +setmetatable(Scoring,OldCallShimMt) + function UserPrefScoringMode() local baseChoices = {} for k,v in pairs(ScoringModes) do table.insert(baseChoices,k) end diff --git a/Themes/_fallback/Scripts/05 ScoringEngine2.lua b/Themes/_fallback/Scripts/05 ScoringEngine2.lua index e675cd9b34..4519d6ef2c 100644 --- a/Themes/_fallback/Scripts/05 ScoringEngine2.lua +++ b/Themes/_fallback/Scripts/05 ScoringEngine2.lua @@ -23,6 +23,10 @@ local function CoroutineIsGood(cr) return coroutine.status(cr)=="suspended" end +function GetNumReadiedScoreKeepers() + return table.itemcount(ReadiedScoreKeepers) +end + function InitScoreKeepers(p1Mode, p2Mode) local newStgK = {pcall(GameState.GetStageSeed,GAMESTATE)} assert(newStgK[1], "it's too early to initialize the ScoreKeepers, the GameState isn't ready yet") @@ -115,4 +119,27 @@ function FinalizeScoreKeepers() end end return true -end \ No newline at end of file +end + +-- (c) 2012 Jack Walstrom and the spinal shark collective +-- All rights reserved. +-- +-- Permission is hereby granted, free of charge, to any person obtaining a +-- copy of this software and associated documentation files (the +-- "Software"), to deal in the Software without restriction, including +-- without limitation the rights to use, copy, modify, merge, publish, +-- distribute, and/or sell copies of the Software, and to permit persons to +-- whom the Software is furnished to do so, provided that the above +-- copyright notice(s) and this permission notice appear in all copies of +-- the Software and that both the above copyright notice(s) and this +-- permission notice appear in supporting documentation. +-- +-- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +-- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +-- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF +-- THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS +-- INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT +-- OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS +-- OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR +-- OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +-- PERFORMANCE OF THIS SOFTWARE. \ No newline at end of file