/** * jQuery fontIconPicker - v2.3 * * An icon picker built on top of font icons and jQuery * * http://codeb.it/fontIconPicker * * Made by Alessandro Benoit & Swashata * Under MIT License * * {@link https://github.com/micc83/fontIconPicker} * * Modified by Visual Composer Dev Team */ (function ( $ ) { 'use strict'; // Create the defaults once var defaults = { theme: 'fip-vc-theme-grey', // The CSS theme to use with this fontIconPicker. You can set different themes on multiple elements on the same page source: false, // Icons source (array|false|object) emptyIcon: true, // Empty icon should be shown? emptyIconValue: '', // The value of the empty icon, change if you select has something else, say "none" iconsPerPage: 20, // Number of icons per page hasSearch: true, // Is search enabled? searchSource: false, // Give a manual search values. If using attributes then for proper search feature we also need to pass icon names under the same order of source useAttribute: false, // Whether to use attribute selector for printing icons attributeName: 'data-icon', // HTML Attribute name convertToHex: true, // Whether or not to convert to hexadecimal for attribute value. If true then please pass decimal integer value to the source (or as value="" attribute of the select field) allCategoryText: 'From all categories', // The text for the select all category option unCategorizedText: 'Uncategorized', // The text for the select uncategorized option iconDownClass: 'fip-icon-down-dir', // Class for icon down iconUpClass: 'fip-icon-up-dir', // Class for icon up iconLeftClass: 'fip-icon-left-dir', // Class for icon left iconRightClass: 'fip-icon-right-dir', // Class for icon right iconSearchClass: 'fip-icon-search', // Class for search iconCancelClass: 'fip-icon-cancel', // Class for search canceling iconSpinClass: 'fip-icon-spin3', // Class for fip-icon-spin3 iconBlockClass: 'fip-icon-block', // Class for block(none icon) searchPlaceholder: 'Search Icon', // Search icon text placeholder mainClass: 'vc-icons-selector' }; // The actual plugin constructor function Plugin( element, options ) { this.element = $( element ); this.settings = $.extend( {}, defaults, options ); if ( this.settings.emptyIcon ) { this.settings.iconsPerPage --; } this.iconPicker = $( '
', { 'class': this.settings.mainClass, style: 'position: relative', html: '
' + '' + '' + '' + '' + '' + '' + '
' + '' } ); this.iconContainer = this.iconPicker.find( '.fip-icons-container' ); this.searchIcon = this.iconPicker.find( '.selector-search i' ); this.iconsSearched = []; this.isSearch = false; this.totalPage = 1; this.currentPage = 1; this.currentIcon = false; this.initialized = false; this.iconsPaged = false; this.iconsCount = 0; this.open = false; // Set the default values for the search related variables this.searchValues = []; this.availableCategoriesSearch = []; // The trigger event for change this.triggerEvent = null; // Backups this.backupSource = []; this.backupSearch = []; // Set the default values of the category related variables this.isCategorized = false; // Automatically detects if the icon listing is categorized this.selectCategory = this.iconPicker.find( '.icon-category-select' ); // The category SELECT input field this.selectedCategory = false; // false means all categories are selected this.availableCategories = []; // Available categories, it is a two dimensional array which holds categorized icons this.unCategorizedKey = null; // Key of the uncategorized category // Initialize plugin this.quickInit(); } Plugin.prototype = { /** * Quick init */ quickInit: function () { var first = true; // Add the theme CSS to the iconPicker this.iconPicker.addClass( this.settings.theme ); // To properly calculate iconPicker height and width // We will first append it to body (with left: -9999px so that it is not visible) this.iconPicker.css( { left: - 9999 } ).appendTo( 'body' ); var iconPickerHeight = this.iconPicker.outerHeight(), iconPickerWidth = this.iconPicker.outerWidth(); // Now reset the iconPicker CSS this.iconPicker.css( { left: '' } ); // Add the icon picker after the select this.element.before( this.iconPicker ); // Hide source element // Instead of doing a display:none, we would rather // make the element invisible // and adjust the margin this.element.css( { visibility: 'hidden', top: 0, position: 'relative', zIndex: '-1', left: '-' + iconPickerWidth + 'px', display: 'none', height: iconPickerHeight + 'px', width: iconPickerWidth + 'px', // Reset all margin, border and padding padding: '0', margin: '0 -' + iconPickerWidth + 'px 0 0', // Left margin adjustment to account for dangling space border: '0 none', verticalAlign: 'top' } ).hide(); // Set the trigger event if ( ! this.element.is( 'select' ) ) { // Determine the event that is fired when user change the field value // Most modern browsers supports input event except IE 7, 8. // IE 9 supports input event but the event is still not fired if I press the backspace key. // Get IE version // https://gist.github.com/padolsey/527683/#comment-7595 var ieVersion = (function () { var v = 3, div = document.createElement( 'div' ), a = div.all || []; while ( div.innerHTML = '', a[ 0 ] ) { ; } return v > 4 ? v : ! v; }()); var el = document.createElement( 'div' ); this.triggerEvent = (ieVersion === 9 || ! ('oninput' in el)) ? [ 'keyup' ] : [ 'input', 'keyup' ]; // Let's keep the keyup event for scripts that listens to it } this.setSelectedIcon( this.element.val() ); /** * Category changer */ this.selectCategory.on( 'change keyup', $.proxy( function ( e ) { // Don't do anything if not categorized if ( this.isCategorized === false ) { return false; } var targetSelect = $( e.currentTarget ), currentCategory = targetSelect.val(); // Check if all categories are selected if ( targetSelect.val() === 'all' ) { // Restore from the backups // @note These backups must be rebuild on source change, otherwise it will lead to error this.settings.source = this.backupSource; this.searchValues = this.backupSearch; // No? So there is a specified category } else { var key = parseInt( currentCategory, 10 ); if ( this.availableCategories[ key ] ) { this.settings.source = this.availableCategories[ key ]; this.searchValues = this.availableCategoriesSearch[ key ]; } } this.resetSearch(); this.loadIcons(); }, this ) ); /** * On down arrow click */ this.iconPicker.find( '.selector-button' ).on( 'click', $.proxy( function () { if ( ! this.open && first ) { first = false; this.initCategories(); } // Open/Close the icon picker this.toggleIconSelector(); }, this ) ); /** * Next page */ this.iconPicker.find( '.selector-arrow-right' ).on( 'click', $.proxy( function ( e ) { if ( this.currentPage < this.totalPage ) { this.iconPicker.find( '.selector-arrow-left' ).show(); this.currentPage = this.currentPage + 1; this.renderIconContainer(); this.renderIcons(); } if ( this.currentPage === this.totalPage ) { $( e.currentTarget ).hide(); } }, this ) ); /** * Prev page */ this.iconPicker.find( '.selector-arrow-left' ).on( 'click', $.proxy( function ( e ) { if ( this.currentPage > 1 ) { this.iconPicker.find( '.selector-arrow-right' ).show(); this.currentPage = this.currentPage - 1; this.renderIconContainer(); this.renderIcons(); } if ( this.currentPage === 1 ) { $( e.currentTarget ).hide(); } }, this ) ); /** * Realtime Icon Search */ this.iconPicker.find( '.icons-search-input' ).on( 'keyup', $.proxy( function ( e ) { // Get the search string var searchString = $( e.currentTarget ).val(); // If the string is not empty if ( searchString === '' ) { this.resetSearch(); return; } // Set icon search to X to reset search this.searchIcon.removeClass( this.settings.iconSearchClass ); this.searchIcon.addClass( this.settings.iconCancelClass ); // Set this as a search this.isSearch = true; // Reset current page this.currentPage = 1; // Actual search // This has been modified to search the searchValues instead // Then return the value from the source if match is found this.iconsSearched = []; $.grep( this.searchValues, $.proxy( function ( n, i ) { if ( n.toLowerCase().search( searchString.toLowerCase() ) >= 0 ) { this.iconsSearched[ this.iconsSearched.length ] = this.settings.source[ i ]; return true; } }, this ) ); // Filter duplicates this.iconsSearched = this.iconsSearched.filter( this.getOnlyUnique ); // Render icon list this.renderIconContainer(); this.renderIcons(); }, this ) ); /** * Quit search */ this.iconPicker.find( '.selector-search i' ).on( 'click', $.proxy( function () { this.iconPicker.find( '.icons-search-input' ).focus(); this.resetSearch(); }, this ) ); /** * On icon selected */ this.iconContainer.on( 'click', '.fip-box', $.proxy( function ( e ) { this.setSelectedIcon( $( e.currentTarget ).find( 'i' ).attr( 'data-fip-value' ) ); this.toggleIconSelector(); }, this ) ); /** * Stop click propagation on iconpicker */ this.iconPicker.on( 'click', function ( event ) { event.stopPropagation(); return false; } ); /** * On click out */ $( 'html' ).on( 'click', $.proxy( function () { if ( this.open ) { this.toggleIconSelector(); } }, this ) ); }, /** * Init */ init: function () { // Add the theme CSS to the iconPicker this.iconPicker.addClass( this.settings.theme ); // To properly calculate iconPicker height and width // We will first append it to body (with left: -9999px so that it is not visible) this.iconPicker.css( { left: - 9999 } ).appendTo( 'body' ); var iconPickerHeight = this.iconPicker.outerHeight(), iconPickerWidth = this.iconPicker.outerWidth(); // Now reset the iconPicker CSS this.iconPicker.css( { left: '' } ); // Add the icon picker after the select this.element.before( this.iconPicker ); // Hide source element // Instead of doing a display:none, we would rather // make the element invisible // and adjust the margin this.element.css( { visibility: 'hidden', top: 0, position: 'relative', zIndex: '-1', left: '-' + iconPickerWidth + 'px', display: 'none', height: iconPickerHeight + 'px', width: iconPickerWidth + 'px', // Reset all margin, border and padding padding: '0', margin: '0 -' + iconPickerWidth + 'px 0 0', // Left margin adjustment to account for dangling space border: '0 none', verticalAlign: 'top' } ).hide(); // Set the trigger event if ( ! this.element.is( 'select' ) ) { // Determine the event that is fired when user change the field value // Most modern browsers supports input event except IE 7, 8. // IE 9 supports input event but the event is still not fired if I press the backspace key. // Get IE version // https://gist.github.com/padolsey/527683/#comment-7595 var ieVersion = (function () { var v = 3, div = document.createElement( 'div' ), a = div.all || []; while ( div.innerHTML = '', a[ 0 ] ) { ; } return v > 4 ? v : ! v; }()); var el = document.createElement( 'div' ); this.triggerEvent = (ieVersion === 9 || ! ('oninput' in el)) ? [ 'keyup' ] : [ 'input', 'keyup' ]; // Let's keep the keyup event for scripts that listens to it } this.initCategories(); /** * Category changer */ this.selectCategory.on( 'change keyup', $.proxy( function ( e ) { // Don't do anything if not categorized if ( this.isCategorized === false ) { return false; } var targetSelect = $( e.currentTarget ), currentCategory = targetSelect.val(); // Check if all categories are selected if ( targetSelect.val() === 'all' ) { // Restore from the backups // @note These backups must be rebuild on source change, otherwise it will lead to error this.settings.source = this.backupSource; this.searchValues = this.backupSearch; // No? So there is a specified category } else { var key = parseInt( currentCategory, 10 ); if ( this.availableCategories[ key ] ) { this.settings.source = this.availableCategories[ key ]; this.searchValues = this.availableCategoriesSearch[ key ]; } } this.resetSearch(); this.loadIcons(); }, this ) ); /** * On down arrow click */ this.iconPicker.find( '.selector-button' ).on( 'click', $.proxy( function () { // Open/Close the icon picker this.toggleIconSelector(); }, this ) ); /** * Next page */ this.iconPicker.find( '.selector-arrow-right' ).on( 'click', $.proxy( function ( e ) { if ( this.currentPage < this.totalPage ) { this.iconPicker.find( '.selector-arrow-left' ).show(); this.currentPage = this.currentPage + 1; this.renderIconContainer(); this.renderIcons(); } if ( this.currentPage === this.totalPage ) { $( e.currentTarget ).hide(); } }, this ) ); /** * Prev page */ this.iconPicker.find( '.selector-arrow-left' ).on( 'click', $.proxy( function ( e ) { if ( this.currentPage > 1 ) { this.iconPicker.find( '.selector-arrow-right' ).show(); this.currentPage = this.currentPage - 1; this.renderIconContainer(); this.renderIcons(); } if ( this.currentPage === 1 ) { $( e.currentTarget ).hide(); } }, this ) ); /** * Realtime Icon Search */ this.iconPicker.find( '.icons-search-input' ).on( 'keyup', $.proxy( function ( e ) { // Get the search string var searchString = $( e.currentTarget ).val(); // If the string is not empty if ( searchString === '' ) { this.resetSearch(); return; } // Set icon search to X to reset search this.searchIcon.removeClass( this.settings.iconSearchClass ); this.searchIcon.addClass( this.settings.iconCancelClass ); // Set this as a search this.isSearch = true; // Reset current page this.currentPage = 1; // Actual search // This has been modified to search the searchValues instead // Then return the value from the source if match is found this.iconsSearched = []; $.grep( this.searchValues, $.proxy( function ( n, i ) { if ( n.toLowerCase().search( searchString.toLowerCase() ) >= 0 ) { this.iconsSearched[ this.iconsSearched.length ] = this.settings.source[ i ]; return true; } }, this ) ); // Filter duplicates this.iconsSearched = this.iconsSearched.filter( this.getOnlyUnique ); // Render icon list this.renderIconContainer(); this.renderIcons(); }, this ) ); /** * Quit search */ this.iconPicker.find( '.selector-search i' ).on( 'click', $.proxy( function () { this.iconPicker.find( '.icons-search-input' ).focus(); this.resetSearch(); }, this ) ); /** * On icon selected */ this.iconContainer.on( 'click', '.fip-box', $.proxy( function ( e ) { this.setSelectedIcon( $( e.currentTarget ).find( 'i' ).attr( 'data-fip-value' ) ); this.toggleIconSelector(); }, this ) ); /** * Stop click propagation on iconpicker */ this.iconPicker.on( 'click', function ( event ) { event.stopPropagation(); return false; } ); /** * On click out */ $( 'html' ).on( 'click', $.proxy( function () { if ( this.open ) { this.toggleIconSelector(); } }, this ) ); }, initCategories: function () { // If current element is SELECT populate settings.source if ( ! this.settings.source && this.element.is( 'select' ) ) { // Reset the source and searchSource // These will be populated according to the available options this.settings.source = []; this.settings.searchSource = []; // Check if optgroup is present within the select // If it is present then the source has to be grouped if ( this.element.find( 'optgroup' ).length ) { // Set the categorized to true this.isCategorized = true; this.element.find( 'optgroup' ).each( $.proxy( function ( i, el ) { // Get the key of the new category array var thisCategoryKey = this.availableCategories.length, // Create the new option for the selectCategory SELECT field categoryOption = $( '' ).prependTo( this.selectCategory ); // Show it and set default value to all categories this.selectCategory.show().val( 'all' ).trigger( 'change' ); }, /** * Load icons */ loadIcons: function () { // Set the content of the popup as loading this.iconContainer.html( '' ); // If source is set if ( this.settings.source instanceof Array ) { // Render icons this.renderIconContainer(); this.renderIcons(); this.setContainerSelectedItems(); } }, /** * Render icons inside the popup */ renderIconContainer: function () { var offset, iconsPaged = []; // Set a temporary array for icons if ( this.isSearch ) { iconsPaged = this.iconsSearched; } else { iconsPaged = this.settings.source; } // Remove duplicates iconsPaged = [ ...new Set( iconsPaged ) ]; // Count elements this.iconsCount = iconsPaged.length; // Calculate total page number this.totalPage = Math.ceil( this.iconsCount / this.settings.iconsPerPage ); // Hide footer if no pagination is needed if ( this.totalPage > 1 ) { this.iconPicker.find( '.selector-footer' ).show(); } else { this.iconPicker.find( '.selector-footer' ).hide(); } // Set the text for page number index and total icons this.iconPicker.find( '.selector-pages' ).html( this.currentPage + '/' + this.totalPage + ' (' + this.iconsCount + ')' ); // Set the offset for slice offset = (this.currentPage - 1) * this.settings.iconsPerPage; // Should empty icon be shown? if ( this.settings.emptyIcon ) { // Reset icon container HTML and prepend empty icon this.iconContainer.html( '' ); // If not show an error when no icons are found } else if ( iconsPaged.length < 1 ) { this.iconContainer.html( '' ); return; // else empty the container } else { this.iconContainer.html( '' ); } // Set an array of current page icons iconsPaged = iconsPaged.slice( offset, offset + this.settings.iconsPerPage ); this.iconsPaged = iconsPaged; // List icons /*for (var i = 0, item; item = iconsPaged[i++];) { // Set the icon title var flipBoxTitle = item; $.grep(this.settings.source, $.proxy(function (e, i) { if (e === item) { flipBoxTitle = this.searchValues[i]; return true; } return false; }, this)); // Set the icon box $('', { html: '', 'class': 'fip-box', title: flipBoxTitle }).appendTo(this.iconContainer); }*/ }, setContainerSelectedItems: function () { // If no empty icon is allowed and no current value is set or current value is not inside the icon set if ( ! this.settings.emptyIcon && (! this.element.val() || $.inArray( this.element.val(), this.settings.source ) === - 1) ) { // Get the first icon this.setSelectedIcon( this.iconsPaged[ 0 ] ); } else if ( $.inArray( this.element.val(), this.settings.source ) === - 1 ) { // Set empty this.setSelectedIcon(); } else { // Set the default selected icon even if not set this.setSelectedIcon( this.element.val() ); } }, /** * Set Highlighted icon */ setHighlightedIcon: function () { this.iconContainer.find( '.current-icon' ).removeClass( 'current-icon' ); if ( this.currentIcon ) { this.iconContainer.find( '[data-fip-value="' + this.currentIcon + '"]' ).parent( 'span' ).addClass( 'current-icon' ); } }, /** * Set selected icon * * @param {string} theIcon */ setSelectedIcon: function ( theIcon ) { if ( theIcon === this.settings.iconBlockClass ) { theIcon = ''; } // Check if attribute is to be used if ( this.settings.useAttribute ) { if ( theIcon ) { this.iconPicker.find( '.selected-icon' ).html( '' ); } else { this.iconPicker.find( '.selected-icon' ).html( '' ); } // Use class } else { this.iconPicker.find( '.selected-icon' ).html( '' ); } // Set the value of the element and trigger change event this.element.val( (theIcon === '' ? this.settings.emptyIconValue : theIcon ) ).trigger( 'change' ); if ( this.triggerEvent !== null ) { // Trigger other events for ( var eventKey in this.triggerEvent ) { this.element.trigger( this.triggerEvent[ eventKey ] ); } } this.currentIcon = theIcon; this.setHighlightedIcon(); }, /** * Open/close popup (toggle) */ toggleIconSelector: function () { this.open = (! this.open) ? 1 : 0; this.iconPicker.find( '.selector-popup' ).slideToggle( 300 ); this.iconPicker.find( '.selector-button i' ).toggleClass( this.settings.iconDownClass ); this.iconPicker.find( '.selector-button i' ).toggleClass( this.settings.iconUpClass ); if ( this.open ) { this.iconPicker.find( '.icons-search-input' ).focus().select(); if ( ! this.initialized ) { this.renderIconContainer(); this.renderIcons(); this.initialized = true; } } }, renderIcons: function () { for ( var i = 0; i < this.iconsPaged.length; i ++ ) { var item = this.iconsPaged[ i ]; // Set the icon title var flipBoxTitle = item; $.grep( this.settings.source, $.proxy( function ( e, i ) { if ( e === item ) { flipBoxTitle = this.searchValues[ i ]; return true; } return false; }, this ) ); // Set the icon box $( '', { html: '', 'class': 'fip-box', title: flipBoxTitle } ).appendTo( this.iconContainer ); } this.setContainerSelectedItems(); }, /** * Reset search */ resetSearch: function () { // Empty input this.iconPicker.find( '.icons-search-input' ).val( '' ); // Reset search icon class this.searchIcon.removeClass( this.settings.iconCancelClass ); this.searchIcon.addClass( this.settings.iconSearchClass ); // Go back to page 1 and remove back arrow this.iconPicker.find( '.selector-arrow-left' ).hide(); this.currentPage = 1; this.isSearch = false; // Rerender icons this.renderIconContainer(); this.renderIcons(); // Restore pagination if needed if ( this.totalPage > 1 ) { this.iconPicker.find( '.selector-arrow-right' ).show(); } } }; // Lightweight plugin wrapper $.fn.vcFontIconPicker = function ( options ) { // Instantiate the plugin this.each( function () { if ( ! $.data( this, "vcFontIconPicker" ) ) { $.data( this, "vcFontIconPicker", new Plugin( this, options ) ); } } ); // setIcons method this.setIcons = $.proxy( function ( newIcons, iconSearch ) { if ( undefined === newIcons ) { newIcons = false; } if ( undefined === iconSearch ) { iconSearch = false; } this.each( function () { $.data( this, "vcFontIconPicker" ).settings.source = newIcons; $.data( this, "vcFontIconPicker" ).settings.searchSource = iconSearch; $.data( this, "vcFontIconPicker" ).initSourceIndex(); $.data( this, "vcFontIconPicker" ).resetSearch(); $.data( this, "vcFontIconPicker" ).loadIcons(); } ); }, this ); // destroy method this.destroyPicker = $.proxy( function () { this.each( function () { if ( ! $.data( this, "vcFontIconPicker" ) ) { return; } // Remove the iconPicker $.data( this, "vcFontIconPicker" ).iconPicker.remove(); // Reset the CSS $.data( this, "vcFontIconPicker" ).element.css( { visibility: '', top: '', position: '', zIndex: '', left: '', display: 'block', height: '', width: '', padding: '', margin: '', border: '', verticalAlign: '' } ).show(); // destroy data $.removeData( this, "vcFontIconPicker" ); } ); }, this ); // reInit method this.refreshPicker = $.proxy( function ( newOptions ) { if ( ! newOptions ) { newOptions = options; } // First destroy this.destroyPicker(); // Now reset this.each( function () { if ( ! $.data( this, "vcFontIconPicker" ) ) { $.data( this, "vcFontIconPicker", new Plugin( this, newOptions ) ); } } ); }, this ); return this; }; })( jQuery ); # Changelog ## [Unreleased] ## [1.0.4] - 2024-05-02 ### Fixed - Fix implicit nullable deprecation warning for PHP 8.4 ## [1.0.3] - 2022-01-10 ### Changed - Update PHPstan to 1.0 - Switched to GitHub Actions ## [1.0.2] - 2020-07-15 ### Added - Minor performance improvements ## [1.0.1] - 2020-06-16 ### Fixed - When calling `Punycode::decode()`, the case flags array would fail to populate when given an empty array. ## [1.0.0] - 2020-06-09 - Initial release

Pilipinas: MLBB Viewership Boom, TGR GT Championship Opens Qualifiers Bagong Yugto sa Esports ng

Panimula: Kapana-panabik na Panahon sa Philippine Esports Landscape

Ang pagtaas ng bilang ng mga manonood sa mga major tournaments, tulad ng MPL Philippines, ay isang malinaw na indikasyon ng lumalaking popularidad ng esports sa bansa. Higit pa rito, ang paglulunsad ng mga bagong kompetisyon at ang pagpapalawak ng mga kategorya sa mga existing events, tulad ng TGR Philippines Esports GT Championship, ay nagpapakita ng patuloy na suporta mula sa mga malalaking organisasyon at korporasyon. Ang mga inisyatibong ito ay naglalayong palakasin ang grassroots development at magbigay ng plataporma para sa mga talento na makilala at magningning sa pandaigdigang entablado ng esports.

Isang napakakapanabik na panahon ang kasalukuyang nararanasan ng esports sa Pilipinas, na patuloy na nagpapakita ng malaking paglago sa viewership at partisipasyon sa iba’t ibang laro. Mula sa matinding aksyon sa Mobile Legends: Bang Bang (MLBB) hanggang sa pagbubukas ng mga pinto para sa mga susunod na henerasyon ng mga racer sa digital arena, ang industriya ng cybersport sa bansa ay patuloy na lumalago at nagpapakita ng potensyal nito. Ang mga kamakailang kaganapan ay nagbibigay-diin sa lumalagong interes ng mga Pilipino sa competitive gaming, hindi lamang bilang manonood kundi pati na rin bilang aktibong kalahok, na nagbubukas ng mga bagong oportunidad at nagpapatibay sa posisyon ng Pilipinas bilang isang esports powerhouse sa rehiyon. originally published by Redington Cybersport

Bagong Hamon sa Digital Track: Toyota Gazoo Racing Esports

Ang pagbubukas ng qualifiers para sa TGR Philippines Esports GT Championship ay nagbibigay ng isang malinaw na landas para sa mga mahihilig sa racing simulation na ipakita ang kanilang talento. Ang TMP, sa pamamagitan ng kanilang TGR brand, ay patuloy na nagpapatunay ng kanilang dedikasyon sa pagsuporta sa paglago ng esports sa Pilipinas, na naglalayong lumikha ng isang sustainability model kung saan ang mga atleta ay maaaring umunlad at maging propesyonal sa kanilang napiling larangan. Ito ay hindi lamang isang pagkakataon upang manalo, kundi isang platform upang maging bahagi ng isang mas malaking komunidad at potensyal na kumatawan sa bansa sa mas malalaking internasyonal na kaganapan. Ang mga qualifiers na ito ay magaganap hanggang Setyembre 13, na nagbibigay ng sapat na panahon para sa mga interesado na magparehistro at maghanda.

Bukod sa MOBA scene, nagbubukas din ng mga bagong oportunidad ang Toyota Motor Philippines (TMP) para sa mga aspiring esports athletes sa larangan ng racing simulation. Ang mga qualifiers para sa 2026 TGR Philippines Esports GT Championship ay kasalukuyang nagsisimula ngayong Agosto, na naglalayong tuklasin ang mga susunod na henerasyon ng mga digital racers. Ang inisyatibong ito ay nagpapakita ng pagtingin ng TMP sa potensyal ng esports, partikular sa GT racing, upang makahikayat ng mas maraming kabataan at mapalaganap ang kanilang mga tatak. Ang paglalatag ng mga Junior at Sporting classes ay nagbibigay-daan para sa iba’t ibang antas ng kasanayan na makilahok, na nagpapalakas sa inclusivity ng kompetisyon.

Epekto sa Komunidad at Hinaharap ng Esports sa Pilipinas

Sa paglipas ng panahon, ang mga inisyatibong ito ay inaasahang magbubunga ng mas maraming propesyonal na manlalaro, mas malalaking international tournaments na idaraos sa bansa, at mas malakas na komunidad na sumusuporta sa bawat aspeto ng esports. Ang patuloy na pakikipagtulungan sa pagitan ng mga game developers, tournament organizers, sponsors, at ang mismong komunidad ay susi sa pagtiyak ng pangmatagalang tagumpay at paglago ng esports sa Pilipinas. Ang mga tagumpay sa viewership at ang pagpapalawak ng mga oportunidad ay nagpapakita ng isang maliwanag na hinaharap para sa cybersport sa bansa.

Ang patuloy na paglago ng viewership sa MPL Philippines at ang pagbubukas ng mga bagong kompetisyon tulad ng TGR Philippines Esports GT Championship ay nagpapahiwatig ng isang masigla at lumalaking esports ecosystem sa Pilipinas. Ang mga tagumpay na ito ay hindi lamang nagdadala ng kasiyahan sa mga manlalaro at manonood kundi nagbubukas din ng mga bagong oportunidad sa trabaho, sponsorship, at pagpapaunlad ng mga lokal na talento. Ang mga korporasyong tulad ng Toyota ay nakikita ang halaga ng pagsuporta sa esports, na nagbibigay ng kredibilidad at resources na kinakailangan upang lalo pang mapalago ang industriya. Ang pagdami ng ganitong klaseng mga inisyatibo ay nagpapatibay sa posisyon ng Pilipinas bilang isang mahalagang player sa pandaigdigang esports arena.

Reaksyon at Epekto sa mga Propesyonal na Manlalaro

Sa kabilang banda, ang mga ganitong kaganapan ay naglalagay din ng mas mataas na pressure sa mga manlalaro na patuloy na magperform sa pinakamataas na antas. Ang bawat laro ay pinapanood ng libu-libo, kaya’t ang bawat pagkakamali ay maaaring maging kapansin-pansin. Gayunpaman, ang mga propesyonal na manlalaro ay karaniwang sanay na sa ganitong uri ng kapaligiran at ginagamit ito bilang inspirasyon upang mas pagbutihin ang kanilang mga laro. Ang patuloy na paglago ng industriya, na pinapatunayan ng mga rekord sa viewership at pagdami ng mga kompetisyon, ay nagbibigay din ng mas malaking seguridad sa kanilang mga karera, na nagbibigay-daan sa kanila na ituring ang esports bilang isang tunay na propesyon na may potensyal na suporta sa kanilang pamumuhay.

Ang mga propesyonal na manlalaro ay madalas na nakakaramdam ng direktang epekto mula sa mga ganitong kaganapan, parehong sa positibo at minsan ay sa mapaghamong paraan. Ang mataas na viewership sa MPL PH Season 18, halimbawa, ay nagpapatunay sa halaga ng kanilang dedikasyon at kasanayan, na nagbibigay sa kanila ng mas malaking plataporma upang ipakita ang kanilang mga talento sa isang malawak na audience. Ito rin ay nagpapataas ng kanilang profile, na nagbubukas ng mga pinto para sa mas magagandang sponsorship deals at personal branding opportunities. Para sa mga indibidwal na manlalaro, ang pagiging bahagi ng mga pinakapinanonood na laban ay isang malaking karangalan at patunay ng kanilang pagpupunyagi.

MLBB Dominasyon: Ang Rekord na Viewership ng MPL Philippines

Ang tagumpay ng MPL Philippines Season 18 sa usaping viewership ay higit pa sa basta pagtaas ng numero; ito ay sumasalamin sa malalim na pagkakakonekta ng mga Pilipino sa competitive gaming, na nagiging isang pangunahing bahagi ng kanilang kultura. Ang bawat season ay nagdadala ng mga bagong kuwento ng pagbangon, stratehiya, at pagkabigo, na nagpapanatili sa mga manonood na nakatutok at nasasabik sa bawat galaw ng kanilang mga paboritong koponan. Ang mga manlalaro na nagiging idolo, ang mga koponang nagpapakita ng husay, at ang mismong emosyon ng bawat laban ay nagbubuo ng isang tapestry ng mga karanasan na nagpapalakas sa komunidad ng MLBB sa Pilipinas at sa buong mundo. Ang presensya ng mga tulad ng Team Liquid PH at Team Falcons PH sa mga pinakapinanonood na laban ay nagpapakita ng kalidad ng mga koponan na bumubuo sa liga.

Nagsilbing patunay ang Mobile Legends: Bang Bang Professional League (MPL) Philippines Season 18 sa patuloy na lumalagong interes ng mga Pilipino sa esports, lalo na sa MLBB. Ang pinakapinanonood na laban sa season na ito ay nagtala ng isang kahanga-hangang peak viewership na 421,071 concurrent viewers, na nagpapakita ng malaking suporta at pagkahumaling ng komunidad sa laro. Ang detalyadong pagsusuri sa viewership statistics ay nagbibigay ng malinaw na larawan kung gaano kalaki ang epekto ng MPL Philippines sa local esports scene, na nagiging isa sa pinakapopular na entertainment platforms sa bansa. Ang ganitong klaseng mataas na engagement ay hindi lamang nagpapatibay sa posisyon ng MLBB kundi nagbubukas din ng mga bagong oportunidad para sa sponsorship at komersyalisasyon.

Konteksto: Ang Pagsulong ng Esports sa Pilipinas

Ang Pilipinas ay matagal nang kilala bilang isang powerhouse sa esports, partikular sa mga larong tulad ng Dota 2 at Mobile Legends. Ang malaking populasyon, malakas na koneksyon sa internet sa maraming lugar, at ang likas na pagkahilig ng mga Pilipino sa mga kompetitibong laro ay nagbigay-daan sa mabilis na paglago ng industriya. Ang mga tagumpay ng mga lokal na koponan sa mga internasyonal na kaganapan ay lalong nagpapalakas sa reputasyon ng bansa bilang isang seryosong manlalaro sa pandaigdigang esports scene. Ang suporta mula sa gobyerno, tulad ng pagkilala sa esports bilang isang tunay na sports, ay nagbibigay din ng dagdag na kredibilidad at insentibo para sa paglago.

originally published by Redington Cybersport

Ang paglitaw ng mga bagong genre at platform para sa esports, tulad ng racing simulation sa TGR Championship, ay nagpapakita ng patuloy na ebolusyon ng industriya. Hindi na limitado ang esports sa iilang laro; ito ay lumalawak upang sakupin ang mas malawak na hanay ng mga interes at kakayahan. Ang mga inisyatibong tulad ng TGR Philippines Esports GT Championship ay mahalaga dahil nagbibigay sila ng mga alternatibong daanan para sa mga atleta na may iba’t ibang uri ng kasanayan na magtagumpay sa digital arena. Ito ay nagpapalawak ng apela ng esports at tinitiyak na mas maraming tao ang makakakita ng lugar para sa kanilang sarili sa lumalagong industriyang ito.

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top