Skip to content

Commit cb20643

Browse files
committed
Polish mana cost UX and chronicle feed
1 parent 31413ca commit cb20643

9 files changed

Lines changed: 34 additions & 9 deletions

File tree

app/js/engine/state-engine.js

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -599,13 +599,18 @@ var StateEngine = (function() {
599599
_rememberAccount(award.initiator);
600600
_rememberAccount(award.receiver);
601601

602+
var memo = award.memo || '';
603+
var isBless = String(memo).indexOf('viz://vm/bless/') === 0;
604+
605+
if (!isBless) return;
606+
602607
worldState.recentActions.push({
603608
type: 'blessing_sent',
604609
sender: award.initiator,
605610
receiver: award.receiver,
606611
blockNum: blockNum,
607612
energy: award.energy,
608-
memo: award.memo || '',
613+
memo: memo,
609614
events: [],
610615
timestamp: Date.now()
611616
});

app/js/i18n/en.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -204,6 +204,7 @@ var LangEN = {
204204
chronicle_world: 'World',
205205
chronicle_tabs: 'Chronicle filter',
206206
chronicle_bless: 'Bless',
207+
chronicle_bless_cost: '{name} · Bless · {cost}',
207208
chronicle_blessed: 'Blessing sent!',
208209
chronicle_write: 'Write in Chronicle',
209210
chronicle_placeholder: 'Write your words into the World...',

app/js/i18n/ru.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -204,6 +204,7 @@ var LangRU = {
204204
chronicle_world: 'Мир',
205205
chronicle_tabs: 'Фильтр хроники',
206206
chronicle_bless: 'Благословить',
207+
chronicle_bless_cost: '{name} · Благословить · {cost}',
207208
chronicle_blessed: 'Благословение отправлено!',
208209
chronicle_write: 'Написать в Хронику',
209210
chronicle_placeholder: 'Впиши слова в Мир...',

app/js/ui/screens/chronicle.js

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ var ChronicleScreen = (function() {
77

88
var MAX_POST_LENGTH = 280;
99
var BLESS_ENERGY = 100; // 1% = 100 basis points
10+
var BLESS_MEMO_PREFIX = 'viz://vm/bless/';
1011
var currentTab = 'all'; // all, guild, friends, world
1112
var REQUIRED_TAG = '#viz_magic';
1213

@@ -314,8 +315,8 @@ var ChronicleScreen = (function() {
314315
'<p class="chronicle-text">' + Helpers.escapeHtml(entry.text) + '</p>' +
315316
'<div class="chronicle-actions">' +
316317
'<button class="bless-button" data-account="' + (entry.account || '') + '" ' +
317-
'aria-label="' + t('chronicle_bless') + ' ' + Helpers.escapeHtml(charName) + '">' +
318-
'\u2728 ' + t('chronicle_bless') +
318+
'aria-label="' + Helpers.escapeHtml(t('chronicle_bless_cost', { cost: Helpers.manaCost(BLESS_ENERGY), name: charName })) + '">' +
319+
' ' + t('chronicle_bless') + ' · ' + Helpers.manaCost(BLESS_ENERGY) +
319320
'</button>' +
320321
'</div>' +
321322
'</article>';
@@ -331,7 +332,7 @@ var ChronicleScreen = (function() {
331332
SoundManager.play('bless_send');
332333
SoundManager.vibrate('light');
333334

334-
var memo = 'viz://vm/bless/' + account;
335+
var memo = BLESS_MEMO_PREFIX + account;
335336
VizBroadcast.award(account, BLESS_ENERGY, 0, memo, [], function(err) {
336337
if (err) {
337338
Toast.error(Helpers.t('error_low_mana'));
@@ -387,12 +388,18 @@ var ChronicleScreen = (function() {
387388
case 'rest_complete':
388389
return t('chronicle_narrative_rest', { name: name });
389390
case 'blessing_sent':
391+
if (!_isBlessAction(action)) return null;
390392
return t('chronicle_narrative_bless', { name: name, target: action.receiver || '' });
391393
default:
392394
return null;
393395
}
394396
}
395397

398+
function _isBlessAction(action) {
399+
if (!action) return false;
400+
return action.type === 'blessing_sent' && action.memo && String(action.memo).indexOf(BLESS_MEMO_PREFIX) === 0;
401+
}
402+
396403
function _duelToNarrative(duel, state) {
397404
var t = Helpers.t;
398405
var charA = state.characters[duel.challenger] || {};

app/js/ui/screens/crafting.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -156,7 +156,7 @@ var CraftingScreen = (function() {
156156

157157
// Mana cost
158158
html += '<div class="recipe-cost">';
159-
html += '<span>' + t('craft_mana_cost') + ': ' + Helpers.bpToPercent(recipe.manaCost || 0) + ' ' + t('home_mana') + '</span>';
159+
html += '<span>' + t('craft_mana_cost') + ': ' + Helpers.manaCost(recipe.manaCost || 0) + '</span>';
160160
html += '</div>';
161161

162162
// Possible outcomes

app/js/ui/screens/home.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ var HomeScreen = (function() {
3737
' \u2022 ' + t('home_level') + ' ' + character.level + '</p>' +
3838
ProgressBar.create({id:'hp-bar', label:'HP', value:character.hp, max:character.maxHp, color:'#e53935'}) +
3939
ProgressBar.create({id:'xp-bar', label:'XP', value:xpCurrent, max:xpNeeded, color:'#ffc107'}) +
40-
ProgressBar.create({id:'mana-bar', label:t('home_mana'), value:0, max:100, color:'#2196f3'}) +
40+
ProgressBar.create({id:'mana-bar', label:'⚡ ' + t('home_mana'), value:0, max:100, color:'#2196f3'}) +
4141
'<button class="help-tip-btn" aria-label="' + t('help_tip_mana') + '" ' +
4242
'title="' + t('help_tip_mana') + '" ' +
4343
'onclick="Helpers.EventBus.emit(\'navigate\', \'help\')">❓</button>' +

app/js/ui/screens/hunt.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ var HuntScreen = (function() {
6464
html += '<button class="spell-btn ' + Helpers.schoolClass(s.school) + '" data-id="' + s.id + '" role="radio" aria-checked="false" ' +
6565
'aria-label="' + s.name + '. ' + t('hunt_mana_cost', {cost: Helpers.bpToPercent(s.manaCost)}) + '">' +
6666
'<span class="spell-name">' + s.name + '</span>' +
67-
'<span class="spell-cost">' + Helpers.bpToPercent(s.manaCost) + ' ' + t('home_mana') + '</span>' +
67+
'<span class="spell-cost">' + Helpers.manaCost(s.manaCost) + '</span>' +
6868
'</button>';
6969
}
7070

@@ -537,4 +537,4 @@ var HuntScreen = (function() {
537537
}
538538

539539
return { render: render };
540-
})();
540+
})();

app/js/ui/screens/map.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -148,7 +148,7 @@ var MapScreen = (function() {
148148
html += '<button class="btn btn-primary btn-sm region-travel-btn" ';
149149
html += 'data-region="' + regionId + '" ';
150150
html += 'aria-label="' + t('map_travel_to') + ' ' + region.name + '">';
151-
html += '\uD83D\uDEB6 ' + t('map_travel') + ' (' + t('map_travel_cost') + ')';
151+
html += '\uD83D\uDEB6 ' + t('map_travel') + ' (' + Helpers.manaCost(100) + ')';
152152
html += '</button>';
153153
} else if (pendingTravel && pendingTravel.account === user && regionId === pendingTravel.to) {
154154
html += '<div class="region-benefits">⏳ ' + t('map_pending_travel_short') + '</div>';

app/js/utils/helpers.js

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -205,6 +205,16 @@ var Helpers = (function() {
205205
return (bp / 100).toFixed(2) + '%';
206206
}
207207

208+
/**
209+
* Compact mana cost label for buttons and short UI badges.
210+
* Example: 100 -> "⚡1.00%"
211+
* @param {number} bp
212+
* @returns {string}
213+
*/
214+
function manaCost(bp) {
215+
return '⚡' + bpToPercent(bp);
216+
}
217+
208218
/**
209219
* Get rarity color class
210220
*/
@@ -259,6 +269,7 @@ var Helpers = (function() {
259269
escapeHtml: escapeHtml,
260270
isValidAccountName: isValidAccountName,
261271
bpToPercent: bpToPercent,
272+
manaCost: manaCost,
262273
rarityClass: rarityClass,
263274
classIcon: classIcon,
264275
schoolColor: schoolColor,

0 commit comments

Comments
 (0)