Added a "god mode" button to the local dev environment

This commit is contained in:
laituan245 2015-02-13 04:42:05 +09:00
parent 42a4ca9299
commit 9c754bbd96
7 changed files with 33 additions and 7 deletions

View file

@ -608,6 +608,7 @@
me_tab: "Me"
picture_tab: "Picture"
upload_picture: "Upload a picture"
god_mode: "God Mode"
password_tab: "Password"
emails_tab: "Emails"
admin: "Admin"

View file

@ -12,6 +12,7 @@ module.exports = class User extends CocoModel
notyErrors: false
isAdmin: -> 'admin' in @get('permissions', true)
isInGodMode: -> 'godmode' in @get('permissions', true)
isAnonymous: -> @get('anonymous', true)
displayName: -> @get('name', true)
@ -72,13 +73,16 @@ module.exports = class User extends CocoModel
return level if tierThreshold >= tier
level: ->
User.levelFromExp(@get('points'))
totalPoint = @get('points')
totalPoint = totalPoint + 1000000 if me.isInGodMode()
User.levelFromExp(totalPoint)
tier: ->
User.tierFromLevel @level()
gems: ->
gemsEarned = @get('earned')?.gems ? 0
gemsEarned = gemsEarned + 100000 if me.isInGodMode()
gemsPurchased = @get('purchased')?.gems ? 0
gemsSpent = @get('spent') ? 0
Math.floor gemsEarned + gemsPurchased - gemsSpent
@ -89,7 +93,7 @@ module.exports = class User extends CocoModel
heroes
items: -> (me.get('earned')?.items ? []).concat(me.get('purchased')?.items ? []).concat([ThangType.items['simple-boots']])
levels: -> (me.get('earned')?.levels ? []).concat(me.get('purchased')?.levels ? []).concat(Level.levels['dungeons-of-kithgard'])
ownsHero: (heroOriginal) -> heroOriginal in @heroes()
ownsHero: (heroOriginal) -> me.isInGodMode() || heroOriginal in @heroes()
ownsItem: (itemOriginal) -> itemOriginal in @items()
ownsLevel: (levelOriginal) -> levelOriginal in @levels()
@ -166,6 +170,7 @@ module.exports = class User extends CocoModel
return me.get('testGroupNumber') % numVideos
isPremium: ->
return true if me.isInGodMode()
return false unless stripe = @get('stripe')
return true if stripe.subscriptionID
return true if stripe.free is true

View file

@ -12,6 +12,7 @@ else
- var name = me.get('name') || '';
- var email = me.get('email');
- var admin = me.get('permissions', true).indexOf('admin') != -1;
- var godmode = me.get('permissions', true).indexOf('godmode') != -1;
.form-group
label.control-label(for="name", data-i18n="general.name") Name
input#name.form-control(name="name", type="text", value="#{name}")
@ -22,7 +23,10 @@ else
.form-group.checkbox
label(for="admin", data-i18n="account_settings.admin") Admin
input#admin(name="admin", type="checkbox", checked=admin)
.form-group.checkbox
label(for="godmode", data-i18n="account_settings.god_mode") God Mode
input#godmode(name="godmode", type="checkbox", checked=godmode)
.panel.panel-default
.panel-heading

View file

@ -56,7 +56,8 @@ else
.portals
for campaignSlug in ['dungeon', 'forest', 'desert', 'mountain', 'ice', 'volcano']
- var campaign = campaigns[campaignSlug];
div(class="campaign #{campaignSlug}" + (campaign ? "" : " silhouette") + (campaign && campaign.locked ? " locked" : ""), data-campaign-slug=campaignSlug)
- var godmode = me.get('permissions', true).indexOf('godmode') != -1;
div(class="campaign #{campaignSlug}" + (campaign ? "" : " silhouette") + (campaign && campaign.locked && !godmode ? " locked" : ""), data-campaign-slug=campaignSlug)
.campaign-label
h2.campaign-name
if campaign
@ -68,7 +69,7 @@ else
span= campaign.levelsCompleted
| /
span= campaign.levelsTotal
if campaign && campaign.locked
if campaign && campaign.locked && !godmode
h3.campaign-locked(data-i18n="play.locked") Locked
else if campaign
btn(data-i18n="common.play").btn.btn-illustrated.btn-lg.btn-success.play-button

View file

@ -158,8 +158,15 @@ module.exports = class AccountSettingsView extends CocoView
me.set('photoURL', @$el.find('#photoURL').val())
permissions = []
adminCheckbox = @$el.find('#admin')
if adminCheckbox.length
permissions = []
permissions.push 'admin' if adminCheckbox.prop('checked')
me.set('permissions', permissions)
godmodeCheckbox = @$el.find('#godmode')
if godmodeCheckbox.length
permissions.push 'godmode' if godmodeCheckbox.prop('checked')
me.set('permissions', permissions)

View file

@ -252,7 +252,9 @@ module.exports = class CampaignView extends RootView
level.locked = false if @levelStatusMap[level.slug] in ['started', 'complete']
level.locked = false if @editorMode
level.locked = false if @campaign?.get('name') is 'Auditions'
level.locked = false if me.isInGodMode()
level.disabled = true if level.adminOnly and @levelStatusMap[level.slug] not in ['started', 'complete']
level.disabled = false if me.isInGodMode()
level.color = 'rgb(255, 80, 60)'
if level.requiresSubscription
level.color = 'rgb(80, 130, 200)'

View file

@ -34,6 +34,10 @@ UserSchema.post('init', ->
@set('anonymous', false) if @get('email')
)
UserSchema.methods.isInGodMode = ->
p = @get('permissions')
return p and 'godmode' in p
UserSchema.methods.isAdmin = ->
p = @get('permissions')
return p and 'admin' in p
@ -77,6 +81,7 @@ UserSchema.methods.setEmailSubscription = (newName, enabled) ->
UserSchema.methods.gems = ->
gemsEarned = @get('earned')?.gems ? 0
gemsEarned = gemsEarned + 100000 if @isInGodMode()
gemsPurchased = @get('purchased')?.gems ? 0
gemsSpent = @get('spent') ? 0
gemsEarned + gemsPurchased - gemsSpent
@ -194,6 +199,7 @@ UserSchema.methods.register = (done) ->
@saveActiveUser 'register'
UserSchema.methods.isPremium = ->
return true if @isInGodMode()
return false unless stripeObject = @get('stripe')
return true if stripeObject.subscriptionID
return true if stripeObject.free is true