Skip to content
Snippets Groups Projects
Commit 0142444c authored by dg's avatar dg
Browse files

improve online profile display

git-svn-id: http://svn.net-core.org/repos/t-engine4@1018 51575b47-30f0-44d4-a5cc-537603b46e54
parent 24a405c0
No related branches found
No related tags found
No related merge requests found
......@@ -46,7 +46,7 @@ function _M:simplePopup(title, text, fct, no_leave)
end
--- Requests a simple yes-no dialog
function _M:yesnoPopup(title, text, fct)
function _M:yesnoPopup(title, text, fct, yes_text, no_text)
local font = core.display.newFont("/data/font/Vera.ttf", 12)
local w, h = font:size(text)
local tw, th = font:size(title)
......@@ -68,17 +68,57 @@ function _M:yesnoPopup(title, text, fct)
d.drawDialog = function(self, s)
s:drawColorStringCentered(self.font, text, 2, 2, self.iw - 2, 25 - 2)
if d.sel == 0 then
s:drawColorStringCentered(self.font, "Yes", 2, 25, self.iw / 2 - 2, 50 - 2, 0, 255, 255)
s:drawColorStringCentered(self.font, "No", 2 + self.iw / 2, 25, self.iw / 2 - 2, 50 - 2, 255, 255, 255)
s:drawColorStringCentered(self.font, yes_text or "Yes", 2, 25, self.iw / 2 - 2, 50 - 2, 0, 255, 255)
s:drawColorStringCentered(self.font, no_text or "No", 2 + self.iw / 2, 25, self.iw / 2 - 2, 50 - 2, 255, 255, 255)
else
s:drawColorStringCentered(self.font, "Yes", 2, 25, self.iw / 2 - 2, 50 - 2, 255, 255, 255)
s:drawColorStringCentered(self.font, "No", 2 + self.iw / 2, 25, self.iw / 2 - 2, 50 - 2, 0, 255, 255)
s:drawColorStringCentered(self.font, yes_text or "Yes", 2, 25, self.iw / 2 - 2, 50 - 2, 255, 255, 255)
s:drawColorStringCentered(self.font, no_text or "No", 2 + self.iw / 2, 25, self.iw / 2 - 2, 50 - 2, 0, 255, 255)
end
end
game:registerDialog(d)
return d
end
--- Requests a long yes-no dialog
function _M:yesnoLongPopup(title, text, w, fct, yes_text, no_text)
local font = core.display.newFont("/data/font/Vera.ttf", 12)
local list = text:splitLines(w - 10, font)
local th = font:lineSkip()
local d = new(title, w + 8, th * #list + 75, nil, nil, nil, font)
d.sel = 0
d:keyCommands({},
{
ACCEPT = function() game:unregisterDialog(d) if fct then fct(d.sel == 0) end end,
MOVE_LEFT = "MOVE_UP",
MOVE_RIGHT = "MOVE_DOWN",
MOVE_UP = function() d.sel = 0 d.changed = true end,
MOVE_DOWN = function() d.sel = 1 d.changed = true end,
})
d:mouseZones{{x=2, y=0, w=d.iw, h=d.ih, fct=function(b, _, _, _, _, x, y)
d.sel = (x < d.iw / 2) and 0 or 1
d.changed = true
if b ~= "none" then game:unregisterDialog(d) if fct then fct(d.sel == 0) end end
end}}
d.drawDialog = function(self, s)
local h = 4
for i = 1, #list do
s:drawColorStringBlended(self.font, list[i], 5, h) h = h + th
end
if d.sel == 0 then
s:drawColorStringCentered(self.font, yes_text or "Yes", 2, 10 + h, self.iw / 2 - 2, 50 - 2, 0, 255, 255)
s:drawColorStringCentered(self.font, no_text or "No", 2 + self.iw / 2, 10 + h, self.iw / 2 - 2, 50 - 2, 255, 255, 255)
else
s:drawColorStringCentered(self.font, yes_text or "Yes", 2, 10 + h, self.iw / 2 - 2, 50 - 2, 255, 255, 255)
s:drawColorStringCentered(self.font, no_text or "No", 2 + self.iw / 2, 10 + h, self.iw / 2 - 2, 50 - 2, 0, 255, 255)
end
self.changed = false
end
game:registerDialog(d)
return d
end
--- Create a Dialog
function _M:init(title, w, h, x, y, alpha, font)
self.title = title
......
......@@ -145,10 +145,23 @@ function _M:onQuit()
os.exit()
end
profile_help_text = [[#LIGHT_GREEN#T-Engine4#LAST# allows you to sync you player profile with the website #LIGHT_BLUE#http://te4.org/#LAST#
This allows you to:
* Play from several computers without having to copy unlocks and achievements.
* Keep track of your modules progression, kill count, ...
* Cool statistics for each module to help sharpen your gameplay style
* Help the game developers balance and refine the game
Later on you will have an online profile page you can show to people to brag.
This is all optional, you are not forced to use this feature at all, but the developers would thank you if you did as it will
make balancing easier.
Online profile requires an internet connection, if not available it will wait and sync when it finds one.]]
function _M:checkFirstTime()
if not profile.generic.firstrun then
profile:checkFirstRun()
Dialog:yesnoPopup("First run profile notification", "Do you want to create or login to an Online profile?", function(ret)
Dialog:yesnoLongPopup("First run profile notification", profile_help_text, 400, function(ret)
if ret then
self:selectStepOnlineProfile()
else
......@@ -234,7 +247,7 @@ function _M:selectStepNew()
end
self:registerDialog(display_module)
self.step = ButtonList.new(self.mod_list, 10, 10, self.w * 0.24, (5 + 35) * #self.mod_list, nil, 5)
self.step = ButtonList.new(self.mod_list, 10, 10, self.w * 0.24, (5 + 35) * #self.mod_list, nil, 5)
self.step.dialog = display_module
self:bindKeysToStep()
end
......@@ -402,6 +415,7 @@ function _M:selectStepProfile()
self:selectStepOnlineProfile()
end,
},
--[[
{
name = "Browse Generic Profile",
fct = function()
......@@ -414,6 +428,7 @@ function _M:selectStepProfile()
self:selectModuleProfile()
end,
},
]]
{
name = "Exit",
fct = function()
......@@ -437,13 +452,14 @@ function _M:selectStepOnlineProfile()
end)
else
local dialogdef = { }
dialogdef.name = "Profile login";
dialogdef.short = "Login";
dialogdef.fct = function(login) self:setPlayerLogin(login) end
Dialog:yesnoPopup("You are not registered", "Do you want to login to an existing profile?", function(ret)
Dialog:yesnoLongPopup("You are not registered", "You have no active online profile.\nDo you want to #LIGHT_GREEN#login#LAST# to an existing profile or #LIGHT_GREEN#create#LAST# a new one?", 400, function(ret)
ret = not ret
self.justlogin = ret
dialogdef.name = ret and "login" or "creation"
dialogdef.justlogin = ret
self:registerDialog(require('special.mainmenu.dialogs.ProfileLogin').new(dialogdef))
end)
self:registerDialog(require('special.mainmenu.dialogs.ProfileLogin').new(dialogdef, profile_help_text))
end, "Create", "Login")
end
end
......@@ -25,13 +25,16 @@ local TextBox = require "engine.TextBox"
module(..., package.seeall, class.inherit(engine.Dialog))
function _M:init(dialogdef)
engine.Dialog.init(self, "Profile Login "..dialogdef.name, 500, 400)
function _M:init(dialogdef, profile_help_text)
engine.Dialog.init(self, "Online profile "..dialogdef.name, 500, dialogdef.justlogin and 450 or 550)
self.profile_help_text = profile_help_text
self.dialogdef = dialogdef
self.alpha = 230
self.justlogin = dialogdef.justlogin
self:keyCommands({
self.lines = self.profile_help_text:splitLines(self.iw - 60, self.font)
self:keyCommands({
_DELETE = function()
if self.controls[self.state] and self.controls[self.state].delete then
self.controls[self.state]:delete()
......@@ -46,15 +49,15 @@ function _M:init(dialogdef)
_UP = function()
self.state = self:changeFocus(false)
end,
_RIGHT = function()
if self.state ~= "" and self.controls[self.state] and self.controls[self.state].moveRight then
_RIGHT = function()
if self.state ~= "" and self.controls[self.state] and self.controls[self.state].moveRight then
self.controls[self.state]:moveRight(1)
else
self.state = self:changeFocus(true)
end
end,
_LEFT = function()
if self.state ~= "" and self.controls[self.state] and self.controls[self.state].moveLeft then
if self.state ~= "" and self.controls[self.state] and self.controls[self.state].moveLeft then
self.controls[self.state]:moveLeft(1)
else
self.state = self:changeFocus(false)
......@@ -65,10 +68,10 @@ function _M:init(dialogdef)
self.controls[self.state]:backSpace()
end
end,
__TEXTINPUT = function(c)
__TEXTINPUT = function(c)
if self.state ~= "" and self.controls[self.state] and self.controls[self.state].type=="TextBox" then
self.controls[self.state]:textInput(c)
end
end
end,
_RETURN = function()
if self.state ~= "" and self.controls[self.state] and self.controls[self.state].type=="Button" then
......@@ -82,46 +85,52 @@ function _M:init(dialogdef)
end
})
self:setMouseHandling()
self:addControl(Button.new("ok", "Ok", 50, 330, 50, 30, self, self.font, function() self:okclick() end))
self:addControl(Button.new("cancel", "Canel", 400, 330, 50, 30, self, self.font, function() self:cancelclick() end))
self:addControl(TextBox.new({name="login",title="You Login:",min=2, max=25, x=30, y=30, w=350, h=30}, self, self.font, "login name"))
self:addControl(TextBox.new({name="pass",title="Password:",min=2, max=25, x=30, y=70, w=350, h=30}, self, self.font, "password"))
local basey = #self.lines * self.font:lineSkip() + 25
self:addControl(TextBox.new({name="login",title="Login:",min=2, max=25, x=30, y=basey + 5, w=350, h=30}, self, self.font, "login name"))
self:addControl(TextBox.new({name="pass",title ="Password:",min=2, max=25, x=30, y=basey + 45, w=350, h=30}, self, self.font, "password"))
if not self.justlogin then
self:addControl(TextBox.new({name="email",title="Email Address:",min=2, max=25, x=30, y=110, w=350, h=30}, self, self.font, "email address"))
self:addControl(TextBox.new({name="name",title="Name:",min=2, max=25, x=30, y=150, w=350, h=30}, self, self.font, "name"))
self:addControl(TextBox.new({name="email",title="Email Address:",min=2, max=25, x=30, y=basey + 85, w=350, h=30}, self, self.font, "email address"))
self:addControl(TextBox.new({name="name",title="Name:",min=2, max=25, x=30, y=basey + 125, w=350, h=30}, self, self.font, "name"))
self:addControl(Button.new("ok", "Ok", 50, basey + 165, 50, 30, self, self.font, function() self:okclick() end))
self:addControl(Button.new("cancel", "Canel", 400, basey + 165, 50, 30, self, self.font, function() self:cancelclick() end))
else
self:addControl(Button.new("ok", "Ok", 50, basey + 85, 50, 30, self, self.font, function() self:okclick() end))
self:addControl(Button.new("cancel", "Canel", 400, basey + 85, 50, 30, self, self.font, function() self:cancelclick() end))
end
self:focusControl("login")
self:focusControl("login")
end
function _M:okclick()
game:unregisterDialog(self)
results = self:databind()
game:unregisterDialog(self)
local results = self:databind()
game:selectStepProfile()
game:createProfile(results)
end
function _M:cancelclick()
game:unregisterDialog(self)
game:unregisterDialog(self)
game:selectStepProfile()
end
function _M:setMouseHandling()
self.old_mouse = engine.Mouse.current
self.mouse = engine.Mouse.new()
self.mouse:setCurrent()
self.mouse:setCurrent()
game.mouse = self.mouse
end
function _M:drawDialog(s, w, h)
local y = 200
function _M:drawDialog(s, w, h)
local y = 5
local x = 30
lines = { "What's the online profile for?", "* Playing from several computers without copying and worries.", "* Keep track of your modules progression.", "* For Example Kill Count, Unlockables unlocked and achievments in TOME", "* Unlimited possibilites for migrating your module information.", "* Cool statistics for each module to help sharpen your gameplay style", "* Who doesn't like statistics?"}
for i = 1, #lines do
r, g, b = s:drawColorStringBlended(self.font, lines[i], x, y + i * self.font:lineSkip(), r, g, b)
end
self:drawControls(s)
local r, g, b
for i = 1, #self.lines do
r, g, b = s:drawColorStringBlended(self.font, self.lines[i], x, y + i * self.font:lineSkip(), r, g, b)
end
self:drawControls(s)
end
function _M:close()
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment