var port = 1001;
var CONNECTION_URL = "156.67.62.89:" + port;
var insert_winner = 0;
var macroCount = 0;
var SITE_NAME = window.location;
const chatConfig = {
typeAll: 0,
typeTeam: 1,
typeClan: 2,
typeMegaphone: 3
};
var chatType = chatConfig.typeAll,
chatSize = 19;
topMessage4 = "";
(function(wHandle, wjQuery) {
wHandle.setserver = function(arg) {
if (arg != gameMode) {
CONNECTION_URL = arg;
gameMode = arg;
wsClose();
//wsConnect();
}
};
var SKIN_URL = "./skins/";
var touchX, touchY,
// is this running in a touch capable environment?
touchable = 'createTouch' in document,
touches = []; // array of touch vectors
var leftTouchID = -1,
leftTouchPos = new Vector2(0, 0),
leftTouchStartPos = new Vector2(0, 0),
leftVector = new Vector2(0, 0);
var fps_counter = 0;
var fps_startTime = 0;
var fps_value = 12.345;
var txtpos_width = 100;
var txtpos_height = 20;
var txtpos_share = "!";
var txtpos_lastTime = 0;
var mapx = 0;
var mapy = 0;
var mapDstX = 0;
var mapDstY = 0;
var drawMapDstPoint = false;
var qPressed = false;
var cursor_x_old = 0,
cursor_y_old = 0;
var localProtocol = wHandle.location.protocol,
localProtocolHttps = "https:" == localProtocol;
var nCanvas, ctx, mainCanvas, lbCanvas, chatCanvas, canvasWidth, canvasHeight, qTree = null,
ws = null,
nodeX = 0,
nodeY = 0,
nodesOnScreen = [],
playerCells = [],
nodes = {},
nodelist = [],
Cells = [],
leaderBoard = [],
lastWinner = '?',
recordHolder = '?',
gameName = '?',
countdown = 60000,
chatBoard = [],
rawMouseX = 0,
rawMouseY = 0,
userGold = 0,
gold = 0,
enterPriceDialog = "wait";
bonusGold = 0,
gamePrice = 0,
goldDiff = 0,
X = -1,
Y = -1,
cb = 0,
timestamp = 0,
//userNickName = null,
leftPos = 0,
topPos = 0,
rightPos = 1E4,
bottomPos = 1E4,
viewZoom = 1,
w = null,
showSkin = false,
showName = true,
noColor = false,
ua = false,
userScoreCurrent = 0,
userScoreMax = 0,
showDarkTheme = true,
// showFps = true,
//showMass = false,
showScore = true,
simpleGreen = false,
touchButtons = false,
smoothRender = .9,
transparentRender = false,
hideChat = false,
posX = nodeX = ~~((leftPos + rightPos) / 2),
posY = nodeY = ~~((topPos + bottomPos) / 2),
posSize = 1,
gameMode = "",
teamScores = null,
//ma = false,
hasOverlay = true,
drawLine = false,
lineX = 0,
lineY = 0,
drawLineX = 0,
drawLineY = 0,
Ra = 0,
teamColor = ["#333333", "#FF3333", "#33FF33", "#3333FF"],
zoom = 1,
isTouchStart = "ontouchstart" in wHandle && /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent),
//splitIcon = new Image,
//ejectIcon = new Image,
noRanking = false;
//splitIcon.src = "split.png";
//ejectIcon.src = "feed.png";
var wCanvas = document.createElement("canvas");
var playerStat = null;
wHandle.isSpectating = false;
var teamMapPlayers = [];
var clanMapPlayers = [];
var lastSendMouseMove = Date.now();
var tlastSendMouseMoveX = 0;
var tlastSendMouseMoveY = 0;
let isTPressed = false; // Variable to track the state
var screenButtonWH = 70;
var btnESC_x = 0;
var btnESC_y = 0;
var btnESC_w = screenButtonWH;
var btnESC_h = screenButtonWH;
var btnA_x = 0;
var btnA_y = 0;
var btnA_w = screenButtonWH;
var btnA_h = screenButtonWH;
var btnS_x = 0;
var btnS_y = 0;
var btnS_w = screenButtonWH;
var btnS_h = screenButtonWH;
var btnW_x = 0;
var btnW_y = 0;
var btnW_w = screenButtonWH;
var btnW_h = screenButtonWH;
var btnE_x = 0;
var btnE_y = 0;
var btnE_w = screenButtonWH;
var btnE_h = screenButtonWH;
var btnE_active = 0;
var btnSPACE_x = 0;
var btnSPACE_y = 0;
var btnSPACE_w = screenButtonWH;
var btnSPACE_h = screenButtonWH;
var clan_idd = -1;
var spectatorId = -1;
let lastSpectatedId = null; // Son izlenen oyuncunun ID'si
var pID = -1;
var my_clan_id = -1;
var my_yetki = "";
var my_userId = -1;
var my_team_code = "";
var my_pID = -1;
if (!String.prototype.startsWith) {
String.prototype.startsWith = function(searchString, position) {
position = position || 0;
return this.substr(position, searchString.length) === searchString;
};
}
function getLangCode() {
var l = document.getElementsByTagName('html')[0].getAttribute('lang');
switch (l) {
case 'tr':
return 'tr';
case 'en':
return 'en';
case 'es':
return 'es';
case 'de':
return 'de';
default:
return 'tr';
}
}
function updateCursorAgain() {
updateCursor(cursor_x_old, cursor_y_old);
}
const updateCursor = (x, y) => {
document.getElementById('canvas').style.cursor = 'default';
chatBoard.forEach((chatItem) => {
if (
chatItem.userId &&
x >= chatItem.name_x &&
x <= chatItem.name_x + chatItem.name_w &&
y <= chatItem.name_y &&
y >= chatItem.name_y - chatItem.name_h &&
chatItem.chatType === chatType
) {
document.getElementById('canvas').style.cursor = 'pointer';
}
});
};
function screenButtonDown(x, y) {
if (x >= btnESC_x && x <= (btnESC_x + btnESC_w) &&
y >= btnESC_y && y <= (btnESC_y + btnESC_h)) {
showOverlays("fast");
wjQuery("#adsBottom").hide();
return true;
} else if (x >= btnA_x && x <= (btnA_x + btnA_w) &&
y >= btnA_y && y <= (btnA_y + btnA_h)) {
// btnX_active = 1;
sendUint8(35);
sendUint8(36);
return true;
} else if (x >= btnS_x && x <= (btnS_x + btnS_w) &&
y >= btnS_y && y <= (btnS_y + btnS_h)) {
sendUint8(24);
return true;
} else if (x >= btnW_x && x <= (btnW_x + btnW_w) &&
y >= btnW_y && y <= (btnW_y + btnW_h)) {
sendUint8(21);
return true;
} else if (x >= btnE_x && x <= (btnE_x + btnE_w) &&
y >= btnE_y && y <= (btnE_y + btnE_h)) {
btnE_active = 1;
sendUint8(22);
return true;
} else if (x >= btnSPACE_x && x <= (btnSPACE_x + btnSPACE_w) &&
y >= btnSPACE_y && y <= (btnSPACE_y + btnSPACE_h)) {
sendUint8(17);
return true;
}
return false;
}
function screenButtonUp(x, y) {
if (btnE_active == 1) {
btnE_active = 0;
sendUint8(23);
}
if (btnX_active == 1) {
btnX_active = 0;
sendUint8(37);
sendUint8(38);
}
}
function populateLeaderboard(players) {
// Tüm eşleşen oyuncular için döngü
players.forEach(player => {
// Yeni bir satır oluştur
const row = document.createElement("tr");
// Sıra numarası
const positionCell = document.createElement("td");
positionCell.textContent = (finalListTable.rows.length) + ".";
row.appendChild(positionCell);
// İsim hücresi (link)
const nameCell = document.createElement("td");
const playerName = player.name || 'agarzV'; // Eğer isim yoksa 'agarzV' yaz
nameCell.innerHTML = `${playerName}`;
row.appendChild(nameCell);
// Skor hücresi
const scoreCell = document.createElement("td");
const playerScore = player.score; // Skoru al, yoksa 0 yap
scoreCell.textContent = playerScore.toLocaleString(); // Skoru virgülle formatla
row.appendChild(scoreCell);
// Satırı tabloya ekle
finalListTable.appendChild(row);
});
// Tabloyu doldurduktan sonra, tabloyu görünür yap
document.getElementById("finalLeaderboardDialog").style.display = "block";
}
// "Kapat" butonuna tıklayınca tablonun gizlenmesini sağlayalım
// document.getElementById("finalLeaderboardDialog_ok").addEventListener("click", function() {
// document.getElementById("finalLeaderboardDialog").style.display = "none";
// });
function window_onLoad() {
// localStorage{
// Dikkat1: localstorage de saklanan ile değişken aynı değerde,
// ama deÄŸiÅŸken ile combobox.value birbirinin tersi olabilir!
// Dikkat2: localStorage ekledikten sonra orjinal değişkeni kullanmaya devam ettik çünkü;
// localStorage.abc değişkenleri string değerler alıyor boolean değil bu sebeple kodda değişkenlerin kullanıldığı yerleride tekrar düzenlemek gerekicekti.
if (localStorage.showSkin == null)
localStorage.showSkin = true;
showSkin = (localStorage.showSkin === 'true');
document.getElementById("noSkin").checked = !showSkin;
if (localStorage.showName == null)
localStorage.showName = true;
showName = (localStorage.showName === 'true');
document.getElementById("noNames").checked = !showName;
if (localStorage.noColor == null)
localStorage.noColor = false;
noColor = (localStorage.noColor === 'true');
document.getElementById("noColor").checked = noColor;
if (localStorage.showDarkTheme == null)
localStorage.showDarkTheme = true;
showDarkTheme = (localStorage.showDarkTheme === 'true');
document.getElementById("darkTheme").checked = showDarkTheme;
if (localStorage.hideChat == null)
localStorage.hideChat = false;
hideChat = (localStorage.hideChat === 'true');
document.getElementById("hideChat").checked = hideChat;
if (hideChat) {
wjQuery("#chat_textbox").hide();
} else {
wjQuery("#chat_textbox").show();
}
document.getElementById("finalLeaderboardDialog_ok").addEventListener("click", function() {
document.getElementById("finalLeaderboardDialog").style.display = "none";
showOverlays("fast");
const rows = finalListTable.getElementsByTagName("tr");
while (rows.length > 1) {
finalListTable.deleteRow(1);
}
});
if (localStorage.smoothRender == null)
localStorage.smoothRender = .9;
smoothRender = localStorage.smoothRender;
document.getElementById("smoothRender").checked = (smoothRender == 2);
// if (localStorage.showFps == null)
// localStorage.showFps = false;
// showFps = (localStorage.showFps === 'true');
// document.getElementById("showFps").checked = showFps;
if (localStorage.transparentRender == null)
localStorage.transparentRender = false;
transparentRender = (localStorage.transparentRender === 'true');
document.getElementById("transparentRender").checked = transparentRender;
if (localStorage.showScore == null)
localStorage.showScore = true;
showScore = (localStorage.showScore === 'true');
document.getElementById("showScore").checked = showScore;
if (localStorage.otostart == null)
localStorage.otostart = false;
otostart = (localStorage.otostart === 'true');
document.getElementById("otostart").checked = otostart;
if (localStorage.kenar == null)
localStorage.kenar = true;
kenar = (localStorage.kenar === 'true');
document.getElementById("kenar").checked = kenar;
if (localStorage.clanNameHider == null)
localStorage.clanNameHider = true;
clanNameHider = (localStorage.clanNameHider === 'true');
document.getElementById("clanNameHider").checked = clanNameHider;
if (localStorage.otoMakro == null)
localStorage.otoMakro = false;
otoMakro = (localStorage.otoMakro === 'true');
document.getElementById("otoMakro").checked = otoMakro;
if (localStorage.simpleGreen == null)
localStorage.simpleGreen = true;
simpleGreen = (localStorage.simpleGreen === 'true');
document.getElementById("simpleGreen").checked = simpleGreen;
// if ( localStorage.skinQuality==null )
// localStorage.skinQuality = 'l';
// document.getElementById("skinQuality").value = localStorage.skinQuality;
var isTouchDevice = 'ontouchstart' in document.documentElement;
if (isTouchDevice == true) {
if (localStorage.touchButtons == null) {
localStorage.touchButtons = 'true';
}
} else {
localStorage.touchButtons = 'false';
wjQuery("#labelTouchButtons").hide();
}
touchButtons = (localStorage.touchButtons === 'true');
document.getElementById("touchButtons").checked = touchButtons;
// }
wHandle.resetChatButtons = function(canCreateDiscussions) {
$("#chatAll").css("font-size", "14px");
$("#chatTeam").css("font-size", "14px");
$("#chatClan").css("font-size", "14px");
$("#chatMegaphone").css("font-size", "14px");
};
wHandle.setChatSize = function(dataBase64) {
chatSize = dataBase64;
localStorage.chatSize = dataBase64;
};
wHandle.setChatType = function(type) {
if (type != chatType) {
resetChatButtons();
if (type == chatConfig.typeAll) {
$("#chatAll").css("font-size", "18px");
} else {
if (type == chatConfig.typeTeam) {
console.log("typeTeam");
$("#chatTeam").css("font-size", "18px");
} else {
if (type == chatConfig.typeClan) {
$("#chatClan").css("font-size", "18px");
} else {
if (type == chatConfig.typeClan) {
$("#chatClan").css("font-size", "18px");
} else {
if (type == chatConfig.typeMegaphone) {
console.log("chatMegaphone");
$("#chatMegaphone").css("font-size", "18px");
}
}
}
}
}
chatType = type;
}
};
//ma = true;
document.getElementById("canvas").focus();
var isTyping = false;
var chattxt;
var clearButton;
var chatban;
var kban;
var chatAll;
var chatTeam;
clearButton = document.getElementById("clearChat");
// chatban = document.getElementById("chatban");
// kban = document.getElementById("kban");
chatAll = document.getElementById("chatAll");
chatTeam = document.getElementById("chatTeam");
chatClan = document.getElementById("chatClan");
chatMegaphone = document.getElementById("chatMegaphone");
enterPriceYes = document.getElementById("enterPriceYes");
enterPriceNo = document.getElementById("enterPriceNo");
generalErrorDialog_ok = document.getElementById("generalErrorDialog_ok");
finalListTable = document.getElementById("finalList").getElementsByTagName("tbody")[0];
mainCanvas = nCanvas = document.getElementById("canvas");
ctx = mainCanvas.getContext("2d");
mainCanvas.onmousemove = function(event) {
rawMouseX = event.clientX;
rawMouseY = event.clientY;
mouseCoordinateChange();
updateCursor(rawMouseX, rawMouseY);
};
if (enterPriceYes) {
enterPriceYes.onmousedown = function(event) {
if (bonusGold >= 4) {
console.log(" yes " + bonusGold);
enterPriceDialog = "yes";
sendConfirmPrice();
$('#enterPriceConfirmDialog')['hide']();
onClickPlay();
} else {
$('#generalErrorDialog')['show']();
console.log(" yetersiz gold");
}
}
}
if (enterPriceNo) {
enterPriceNo.onmousedown = function(event) {
console.log(" no");
enterPriceDialog = "no";
sendConfirmPrice();
$('#enterPriceConfirmDialog')['hide']();
showOverlays("fast");
vMenu = true;
}
}
if (generalErrorDialog_ok) {
generalErrorDialog_ok.onmousedown = function(event) {
console.log(" Kapat");
$('#enterPriceConfirmDialog')['hide']();
showOverlays("fast");
$('#generalErrorDialog')['hide']();
vMenu = true;
}
}
if (chatAll) {
chatAll.onmousedown = function(event) {
setChatType(0);
}
}
if (chatTeam) {
chatTeam.onmousedown = function(event) {
setChatType(1);
}
}
if (chatClan) {
chatClan.onmousedown = function(event) {
setChatType(2);
}
}
if (chatMegaphone) {
chatMegaphone.onmousedown = function(event) {
setChatType(3);
}
}
if (clearButton) {
clearButton.onmousedown = function(event) {
chatBoard.length = 0;
console.log("clear button");
wjQuery("#clearChat").hide();
};
}
// if (chatban) {
// chatban.onmousedown = function (event) {
// var chatban = "/chatban "+spectatorId;
// console.log("cleat");
// sendChat(chatban);
// };
// }
// if (kban) {
// kban.onmousedown = function (event) {
// var kban = "/kban "+spectatorId;
// console.log("cleat");
// sendChat(kban);
// };
// }
mainCanvas.onmousedown = function(event) {
var x = event.clientX; // - elemLeft;
var y = event.clientY; // - elemTop;
var deltaT = (new Date()).getTime() - txtpos_lastTime;
if (deltaT > 5000 && x >= 10 && x <= (10 + txtpos_width) && y >= (200 - txtpos_height) && y <= 200) {
sendChat(txtpos_share);
txtpos_lastTime = (new Date()).getTime();
}
var i = 0;
for (; i < chatBoard.length; i++) {
if (0 != chatBoard[i].userId && void 0 != chatBoard[i].userId && x >= chatBoard[i].name_x && x <= chatBoard[i].name_x + chatBoard[i].name_w && y <= chatBoard[i].name_y && y >= chatBoard[i].name_y - chatBoard[i].name_h) {
if (0 != chatType && chatBoard[i].chatType != chatType) {
continue;
}
window.open(SITE_NAME + "home-" + chatBoard[i].userId, "_blank").focus();
break;
}
}
if (isMenuOpen && activeMenu) {
closeMenu(); // Eğer bir menü açıksa kapat
}
updateCursor(x, y);
};
mainCanvas.oncontextmenu = function(event) {
if (my_yetki == "Admin")
event.preventDefault(); // Varsayılan sağ tıklama menüsünü devre dışı bırak
if (isMenuOpen && activeMenu) {
closeMenu(); // Eğer bir menü açıksa kapat
}
var mouseX = event.clientX;
var mouseY = event.clientY;
// Fare pozisyonunu oyun içi koordinatlara çevir
var gameX = (mouseX - canvasWidth / 2) / viewZoom + nodeX;
var gameY = (mouseY - canvasHeight / 2) / viewZoom + nodeY;
// Tüm hücreleri (kendi ve diğer oyuncular) kontrol et
let allCells = playerCells.concat(nodelist);
for (let i = 0; i < allCells.length; i++) {
let cell = allCells[i];
// Hücre ile tıklamanın mesafesini hesapla (dairesel mesafe kontrolü)
let distance = Math.sqrt(Math.pow(gameX - cell.x, 2) + Math.pow(gameY - cell.y, 2));
if (distance <= cell.size && cell.pID) {
// Eğer admin yetkisine sahipse menüyü aç
if (my_yetki == "Admin" && this.yetki != "Admin") {
showMenu(mouseX, mouseY, cell);
} else {
console.log("Yeterli yetkiye sahip değilsiniz.");
}
break;
}
}
// updateCursor(x, y);
};
mainCanvas.onclick = function(event) {
if (wHandle.isSpectating) {
var mouseX = event.clientX;
var mouseY = event.clientY;
var gameX = (mouseX - canvasWidth / 2) / viewZoom + nodeX;
var gameY = (mouseY - canvasHeight / 2) / viewZoom + nodeY;
let allCells = playerCells.concat(nodelist);
for (let i = 0; i < allCells.length; i++) {
let cell = allCells[i];
let distance = Math.sqrt(Math.pow(gameX - cell.x, 2) + Math.pow(gameY - cell.y, 2));
if (distance <= cell.size && cell.pID) {
// Eğer aynı hücreye tıklanmışsa, tekrar gönderme
if (cell.pID !== lastSpectatedId) {
lastSpectatedId = cell.pID; // Güncelle
isSpectatefromId(cell.pID); // İzleyici ID'sini gönder
}
break; // Hücre bulunduğu için döngüyü sonlandır
}
}
} else {
console.log("İzleyici modunda değilsiniz.");
}
};
// Menü gösterme fonksiyonu
function showMenu(x, y, cell) {
// Eğer zaten bir menü açık ise, önce kapat
if (isMenuOpen) {
closeMenu();
}
// Menü oluşturma işlemi
var menu = document.createElement("div");
menu.id = "context-menu";
menu.style.position = "absolute";
menu.style.left = x + "px";
menu.style.top = y + "px";
menu.style.display = "block";
menu.style.zIndex = 1000;
// Menü içeriği (ul ve li yapısı)
var ul = document.createElement("ul");
ul.className = "context-list";
// Hücre adı göstermek için li elemanı
var nameItem = document.createElement("li");
nameItem.id = "context-name";
nameItem.innerText = cell.name; // Hücre ismi
ul.appendChild(nameItem);
var nameItem2 = document.createElement("li");
nameItem2.id = "context-name";
nameItem2.innerText = "Oyuncu id: " + cell.pID;
ul.appendChild(nameItem2);
var mass = document.createElement("li");
mass.id = "menu-close";
mass.className = "context-action";
var closeSpan = document.createElement("span");
closeSpan.innerText = "220k yap";
mass.appendChild(closeSpan);
mass.addEventListener("click", () => sendChat("/mass " + cell.pID +" 220000")); // Kapatma işlevi
ul.appendChild(mass);
var muted = document.createElement("li");
muted.id = "menu-close";
muted.className = "context-action";
var closeSpan = document.createElement("span");
closeSpan.innerText = "Chat'den banla";
muted.appendChild(closeSpan);
muted.addEventListener("click", () => sendChat("/chatban " + cell.pID)); // Kapatma işlevi
ul.appendChild(muted);
var unmuted = document.createElement("li");
unmuted.id = "menu-close";
unmuted.className = "context-action";
var closeSpan = document.createElement("span");
closeSpan.innerText = "Chat banı kaldır";
unmuted.appendChild(closeSpan);
unmuted.addEventListener("click", () => sendChat("/chatunban " + cell.pID)); // Kapatma işlevi
ul.appendChild(unmuted);
var banned1 = document.createElement("li");
banned1.id = "menu-close";
banned1.className = "context-action";
var closeSpan = document.createElement("span");
closeSpan.innerText = "Kick";
banned1.appendChild(closeSpan);
banned1.addEventListener("click", () => sendChat("/kban " + cell.pID)); // Kapatma işlevi
ul.appendChild(banned1);
var banned2 = document.createElement("li");
banned2.id = "menu-close";
banned2.className = "context-action";
var closeSpan = document.createElement("span");
closeSpan.innerText = "Banla";
banned2.appendChild(closeSpan);
banned2.addEventListener("click", () => sendChat("/bannn " + cell.pID));; // Kapatma işlevi
ul.appendChild(banned2);
// Ul öğesini menüye ekle
menu.appendChild(ul);
// Menüyü body'e ekle
document.body.appendChild(menu);
// Menü durumu ve referansını güncelle
isMenuOpen = true;
activeMenu = menu;
}
if (touchable) {
mainCanvas.addEventListener('touchstart', onTouchStart, false);
mainCanvas.addEventListener('touchmove', onTouchMove, false);
mainCanvas.addEventListener('touchend', onTouchEnd, false);
}
mainCanvas.onmouseup = function() {
};
if (/firefox/i.test(navigator.userAgent)) {
document.addEventListener("DOMMouseScroll", handleWheel, false);
} else {
document.body.onmousewheel = handleWheel;
}
mainCanvas.onfocus = function() {
isTyping = false;
};
document.getElementById("chat_textbox").onblur = function() {
isTyping = false;
};
document.getElementById("chat_textbox").onfocus = function() {
isTyping = true;
};
var spacePressed = false,
qPressed = false,
wPressed = false;
var ePressed = false;
var int_e = 0;
var aPressed = false;
var sPressed = false;
var zPressed = false;
var xPressed = false;
let mouseX = 0;
let mouseY = 0;
document.addEventListener('mousemove', function(event) {
mouseX = event.clientX;
mouseY = event.clientY;
});
wHandle.onkeydown = function(event) {
var vMenu = wjQuery("#overlays").is(":visible");
switch (event.keyCode) {
case 32: // split
if (!spacePressed && !isTyping && vMenu == false) {
sendMouseMove();
sendUint8(17);
spacePressed = true;
}
break;
case 81: // key q pressed
if (!qPressed && vMenu == false) {
sendUint8(18);
qPressed = true;
}
break;
case 87: // eject mass
if (!wPressed && !isTyping && vMenu == false) {
sendMouseMove();
sendUint8(21);
wPressed = true;
}
break;
case 27: // quit
if (hasOverlay) {
// Eğer overlay açıksa kapat
hideOverlays();
hasOverlay = false; // Overlay kapalı duruma getir
} else {
// Eğer overlay kapalıysa aç
showOverlays("fast");
hasOverlay = true; // Overlay açık duruma getir
}
break;
case 13:
if (isTyping) {
if (isTyping = false, document.getElementById("chat_textbox").blur(), (txtpos_share = document.getElementById("chat_textbox").value).length > 0) {
if (0 == chatType) {
txtpos_share = "/all " + txtpos_share;
} else if (1 == chatType) {
txtpos_share = "/typeTeam " + txtpos_share;
} else {
if (2 == chatType) {
txtpos_share = "/clan " + txtpos_share;
} else {
if (3 == chatType) {
txtpos_share = "/megaphone " + txtpos_share;
}
}
}
sendChat(txtpos_share);
}
document.getElementById("chat_textbox").value = "";
} else {
if (!hasOverlay) {
isTyping = true;
}
}
break;
case 69:
if ((!ePressed) && (!isTyping) && vMenu == false) {
ePressed = true;
sendUint8(22);
}
break;
case 65:
if ((!aPressed) && (!isTyping) && vMenu == false && (gold > 9)) {
// sendUint8(65);
aPressed = true;
sendMouseMove();
}
break;
case 83:
if ((!sPressed) && (!isTyping) && vMenu == false && (gold > 99)) {
sendUint8(83);
aPressed = true;
}
break;
case 84: // Key "T"
// Toggle the state
if ((!isTyping) && vMenu == false)
isTPressed = !isTPressed; // Switch between true and false
// Use stored mouse coordinates to calculate game coordinates
var gameX = (mouseX - canvasWidth / 2) / viewZoom + nodeX;
var gameY = (mouseY - canvasHeight / 2) / viewZoom + nodeY;
// Store the coordinates
tlastSendMouseMoveX = gameX;
tlastSendMouseMoveY = gameY;
break;
case 90:
if ((!zPressed) && (!isTyping) && vMenu == false && (gold >= 10)) {
sendUint8(35);
zPressed = true;
}
break;
case 88:
if ((!xPressed) && (!isTyping) && vMenu == false && (gold >= 100)) {
sendUint8(36);
xPressed = true;
}
break;
}
};
wHandle.onkeyup = function(event) {
switch (event.keyCode) {
case 32:
spacePressed = false;
break;
case 87:
wPressed = false;
break;
case 81:
if (qPressed) {
sendUint8(19);
qPressed = false;
}
break;
case 69:
if (ePressed) {
ePressed = false;
sendUint8(23);
}
if (int_e != 0) {
clearInterval(int_e);
int_e = 0;
}
break;
case 65:
// aPressed = false;
break;
case 90:
zPressed = false;
sendUint8(37);
break;
case 88:
xPressed = false;
sendUint8(38);
break;
case 83:
sPressed = false;
break;
}
};
wHandle.onblur = function() {
//sendUint8(19);
wPressed = qPressed = spacePressed = false
};
wHandle.onresize = canvasResize;
canvasResize();
if (wHandle.requestAnimationFrame) {
wHandle.requestAnimationFrame(redrawGameScene);
} else {
setInterval(drawGameScene, 1E3 / 60);
}
//setInterval(sendMouseMove, 100);
if (w) {
wjQuery("#region").val(w);
}
wjQuery("#overlays").show();
canvasResize();
var txt = "";
//var possible = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
var possible = "abcdefghijklmnopqrstuvxyz0123456789";
for (var i = 0; i < 6; i++) {
txt += possible.charAt(Math.floor(Math.random() * possible.length));
}
var tmp = document.getElementById("myTeam");
//tmp.value = txt;
}
function onTouchStart(e) {
var isMenuVisible = wjQuery("adsBottom").is(":visible");
for (var i = 0; i < e.changedTouches.length; i++) {
var touch = e.changedTouches[i];
var buttonRet = false;
if (isMenuVisible == false && touchButtons == true) {
buttonRet = screenButtonDown(touch.clientX, touch.clientY);
}
if (buttonRet == false) {
//if((leftTouchID<0) && (touch.clientX canvasWidth - size) && (touch.clientY > canvasHeight - size)) {
sendMouseMove();
sendUint8(17); //split
}
if ((touch.clientX > canvasWidth - size) && (touch.clientY > canvasHeight - 2*size -10) && (touch.clientY < canvasHeight - size -10 )) {
sendMouseMove();
sendUint8(21); //eject
}
*/
}
touches = e.touches;
}
function onTouchMove(e) {
// Prevent the browser from doing its default thing (scroll, zoom)
e.preventDefault();
for (var i = 0; i < e.changedTouches.length; i++) {
var touch = e.changedTouches[i];
if (leftTouchID == touch.identifier) {
leftTouchPos.reset(touch.clientX, touch.clientY);
leftVector.copyFrom(leftTouchPos);
leftVector.minusEq(leftTouchStartPos);
rawMouseX = leftVector.x * 3 + canvasWidth / 2;
rawMouseY = leftVector.y * 3 + canvasHeight / 2;
mouseCoordinateChange();
sendMouseMove();
}
}
touches = e.touches;
}
function onTouchEnd(e) {
touches = e.touches;
for (var i = 0; i < e.changedTouches.length; i++) {
var touch = e.changedTouches[i];
screenButtonUp(touch.clientX, touch.clientY);
if (leftTouchID == touch.identifier) {
leftTouchID = -1;
leftVector.reset(0, 0);
break;
}
}
}
class textMover {
constructor(txt, xs, ys, vx, vy, timeOfLife) {
this.txt = txt;
this.xs = xs;
this.ys = ys;
this.x = xs;
this.y = ys;
this.vx = vx;
this.vy = vy;
this.timeOfLife = timeOfLife;
this.birthTime = new Date().getTime();
textMoverList.push(this);
}
getAge() {
return new Date().getTime() - this.birthTime;
}
checkLife() {
if (this.getAge() >= this.timeOfLife) {
const index = textMoverList.indexOf(this);
textMoverList.splice(index, 1);
}
}
move() {
if (this.getAge() < this.timeOfLife) {
ctx.fillStyle = "#FFFF00";
const ageRatio = this.getAge() / this.timeOfLife;
ctx.globalAlpha = (1 - ageRatio) / 1.5;
const fontSize = 30 - Math.floor(ageRatio * 20);
ctx.font = `${fontSize}px Ubuntu`;
// ctx.font = `${this.getNameSize() - 10}px 'Tangerine'`;
// ctx.fillStyle = "#FF0000";
const timePassed = this.getAge() / 1000;
this.x = this.xs + this.vx * timePassed;
this.y = this.ys + this.vy * timePassed;
ctx.fillText(this.txt, this.x, this.y);
}
}
}
var textMoverList = [];
function drawMoverList() {
for (let mover of textMoverList) {
mover.checkLife();
mover.move();
}
}
function handleWheel(event) {
// console.log("Wheel event detected - Spectating: " + wHandle.isSpectating);
// Zoom işlemi hem izleyici hem de normal oyuncular için geçerli olacak
zoom *= Math.pow(.9, event.wheelDelta / -300 || event.detail || 0);
zoom = Math.max(0.01, Math.min(zoom, 4 / viewZoom));
viewZoom = zoom; // viewZoom değerini zoom ile eşitler
// console.log("Zoom level after wheel event: " + zoom);
}
function buildQTree() {
if (.4 > viewZoom) qTree = null;
else {
var a = Number.POSITIVE_INFINITY,
b = Number.POSITIVE_INFINITY,
c = Number.NEGATIVE_INFINITY,
d = Number.NEGATIVE_INFINITY,
e = 0;
for (var i = 0; i < nodelist.length; i++) {
var node = nodelist[i];
if (node.shouldRender() && !node.prepareData && 20 < node.size * viewZoom) {
e = Math.max(node.size, e);
a = Math.min(node.x, a);
b = Math.min(node.y, b);
c = Math.max(node.x, c);
d = Math.max(node.y, d);
}
}
qTree = Quad.init({
minX: a - (e + 100),
minY: b - (e + 100),
maxX: c + (e + 100),
maxY: d + (e + 100),
maxChildren: 2,
maxDepth: 4
});
for (i = 0; i < nodelist.length; i++) {
node = nodelist[i];
if (node.shouldRender() && !(20 >= node.size * viewZoom)) {
for (a = 0; a < node.points.length; ++a) {
b = node.points[a].x;
c = node.points[a].y;
b < nodeX - canvasWidth / 2 / viewZoom || c < nodeY - canvasHeight / 2 / viewZoom || b > nodeX + canvasWidth / 2 / viewZoom || c > nodeY + canvasHeight / 2 / viewZoom || qTree.insert(node.points[a]);
}
}
}
}
}
function mouseCoordinateChange() {
X = (rawMouseX - canvasWidth / 2) / viewZoom + nodeX;
Y = (rawMouseY - canvasHeight / 2) / viewZoom + nodeY
}
function hideOverlays() {
hasOverlay = false;
wjQuery("#adsBottom").hide();
wjQuery("#overlays").hide();
}
function showOverlays(arg) {
sendUint8(5);
hasOverlay = true;
//userNickName = null;
wjQuery("#overlays").fadeIn(arg);
}
var skipCloseEvent = false;
function wsClose() {
chatBoard.length = 0;
gold = 0;
// setTimeout(function() {
// wsReconnect();
// }, 1500); // 5 saniye sonra yeniden bağlanmayı dene
try {
//ws.onopen = null;
//ws.onmessage = null;
//ws.onclose = null;
ws.close()
} catch (b) {}
ws = null;
};
wHandle.wsClose = wsClose;
function closeMenu() {
if (activeMenu) {
document.body.removeChild(activeMenu);
activeMenu = null;
isMenuOpen = false;
}
}
function selectCell(id) {
alert("Hücre seçildi: " + id);
closeMenu(); // Hücre seçildiğinde menüyü kapat
}
let isMenuOpen = false; // Menü açık mı kontrolü için değişken
let activeMenu = null; // Aktif menü referansı
function wsConnect() {
sid = Math.floor(1 + Math.random() * 1000000);
wsUrl = "ws://" + CONNECTION_URL; // + "/" + sid;
nodesOnScreen = [];
playerCells = [];
nodes = {};
nodelist = [];
Cells = [];
leaderBoard = [];
lastWinner = '?';
// gold = 1000;
this.countdown = 60000;
this.gpcountdown = 60000;
this.otobascountdown = 60000;
this.sendTokenTick = 0;
this.tickOtoStart = 0;
mainCanvas = teamScores = null;
userScoreMax = 0;
userScoreCurrent = 0;
teamMapPlayers = [];
clanMapPlayers = [];
topMessage1 = '';
topMessage2 = '';
topMessage3 = '';
topmessage4 = '';
wjQuery('#playBtn').css("background-color", "yellow");
ws = new WebSocket(wsUrl);
ws.binaryType = "arraybuffer";
ws.onopen = onWsOpen;
ws.onmessage = onWsMessage;
ws.onclose = onWsClose;
ws.onerror = function() {
console.log("socket error");
}
console.log("wsConnect " + wsUrl);
}
function prepareData(a) {
return new DataView(new ArrayBuffer(a))
}
function wsSend(a) {
if (wsIsOpen()) {
ws.send(a.buffer)
}
}
function debounce(func, wait) {
let timeout;
return function(...args) {
const context = this;
clearTimeout(timeout);
timeout = setTimeout(() => func.apply(context, args), wait);
};
}
function sendPlayInit() {
sendUserToken();
sendUserId();
sendTeam();
sendHandshakeRequest();
}
function sendLang() {
var msg = prepareData(2);
msg.setUint8(0, 25);
switch (getLangCode()) {
case 'tr':
msg.setUint8(1, 1);
break;
case 'en':
msg.setUint8(1, 2);
break;
case 'es':
msg.setUint8(1, 3);
break;
case 'de':
msg.setUint8(1, 4);
break;
}
wsSend(msg);
}
function onWsOpen() {
console.log("onWsOpen");
var msg;
msg = prepareData(5);
msg.setUint8(0, 255);
msg.setUint32(1, 1332175218, true);
wsSend(msg);
sendLang();
if (wHandle.isSpectating == true) {
sendUint8(1);
// sendUserToken();
sendUserToken();
} else {
debounce(sendPlayInit(), 1000);
}
wjQuery('#playBtn').css("background-color", "green");
}
$(wHandle).focus(function() {});
$(wHandle).blur(function() {
if (ws != null && ws.readyState == 1) {
//ws.close();
}
});
function onWsClose() {
console.log("onWsClose");
ws = null;
console.log("WebSocket bağlantısı kapandı. Yeniden bağlanıyor...");
wHandle.isSpectating = false;
wjQuery("#adsBottom").hide();
wjQuery('#playBtn').css("background-color", "red");
}
function wsReconnect() {
// Eğer WebSocket zaten bağlıysa veya bağlanmaya çalışıyorsa, yeniden bağlanmayı deneme
if (ws && (ws.readyState === WebSocket.OPEN || ws.readyState === WebSocket.CONNECTING)) {
console.log("WebSocket zaten bağlı ya da bağlanıyor. Yeniden bağlanmaya gerek yok.");
return;
}
// Bağlantı kapalıysa yeniden bağlanmayı dene
console.log("WebSocket bağlantısı kapalı. Yeniden bağlanmayı deniyoruz...");
setTimeout(function() {
wsConnect();
}, 5000); // 5 saniye sonra yeniden bağlanmayı dene
}
function onWsMessage(msg) {
try {
handleWsMessage(new DataView(msg.data))
} catch (b) {
var dummy = 0;
}
}
function transLastWinner(gameName, winnerScore, winnerName) {
switch (getLangCode()) {
case 'tr':
return gameName + " KAZANAN " + winnerName + " SKOR " + winnerScore;
case 'en':
return gameName + " WINNER IS " + winnerName + " SCORE " + winnerScore;
case 'es':
return gameName + " GANADOR ES " + winnerName + " PUNTUACIÓN " + winnerScore;
case 'de':
return gameName + " GEWINNER " + winnerName + " ERGEBNIS " + winnerScore;
}
return 'err lang code!';
}
function transNewRecord(gameName, winnerScore, winnerName) {
switch (getLangCode()) {
case 'tr':
return gameName + " REKOR! " + winnerName + " SKOR " + winnerScore;
case 'en':
return gameName + " NEW RECORD! " + winnerName + " SCORE " + winnerScore;
case 'es':
return gameName + " NEUVO RECORD! " + winnerName + " PUNTUACIÓN " + winnerScore;
case 'de':
return gameName + " NEUER EINTRAG! " + winnerName + " ERGEBNIS " + winnerScore;
}
return 'err lang code!';
}
function transMessage(msg) {
if (msg.startsWith("trans ")) {
var params = msg.substring(6);
var parts = params.split(",");
if (parts[0] == '1') {
var gameName = parts[1];
var winnerScore = parts[2];
var winnerName = parts.slice(3).join(" ");
return transLastWinner(gameName, winnerScore, winnerName);
} else if (parts[0] == '2') {
var gameName = parts[1];
var winnerScore = parts[2];
var winnerName = parts.slice(3).join(" ");
return transNewRecord(gameName, winnerScore, winnerName);
} else {
return msg;
}
} else {
return msg;
}
}
function handleWsMessage(msg) {
function getString() {
var text = '',
char;
while ((char = msg.getUint16(offset, true)) != 0) {
offset += 2;
text += String.fromCharCode(char);
}
offset += 2;
return text;
}
var offset = 0,
setCustomLB = false;
240 == msg.getUint8(offset) && (offset += 5);
switch (msg.getUint8(offset++)) {
case 16: // update nodes
updateNodes(msg, offset);
break;
case 17: // update position
posX = msg.getFloat32(offset, true);
offset += 4;
posY = msg.getFloat32(offset, true);
offset += 4;
posSize = msg.getFloat32(offset, true);
offset += 4;
break;
case 20: // clear nodes
playerCells = [];
nodesOnScreen = [];
break;
case 21: // draw line
lineX = msg.getInt16(offset, true);
offset += 2;
lineY = msg.getInt16(offset, true);
offset += 2;
if (!drawLine) {
drawLine = true;
drawLineX = lineX;
drawLineY = lineY;
}
break;
case 32: // add node
nodesOnScreen.push(msg.getUint32(offset, true));
offset += 4;
break;
case 48: // update leaderboard (custom text)
setCustomLB = true;
noRanking = true;
break;
case 49: // update leaderboard (ffa)
if (!setCustomLB) {
noRanking = false;
}
teamScores = null;
var LBplayerNum = msg.getUint32(offset, true);
offset += 4;
leaderBoard = [];
for (i = 0; i < LBplayerNum; ++i) {
var nodeId = msg.getUint32(offset, true);
offset += 4;
var name = getString(); // Get player name
var clanID = getString(); // Get player clan ID
var pID = getString(); // Get player clan ID
var teamCode = getString(); // Get player clan ID
// console.log(pID);
leaderBoard.push({
id: nodeId,
name: name,
clan_id: clanID,
teamCode: teamCode,
pID: pID
})
}
drawLeaderBoard();
break;
case 50: // update leaderboard (teams)
teamScores = [];
var LBteamNum = msg.getUint32(offset, true);
offset += 4;
for (var i = 0; i < LBteamNum; ++i) {
teamScores.push(msg.getFloat32(offset, true));
offset += 4;
}
drawLeaderBoard();
break;
case 64: // set border
leftPos = msg.getFloat64(offset, true);
offset += 8;
topPos = msg.getFloat64(offset, true);
offset += 8;
rightPos = msg.getFloat64(offset, true);
offset += 8;
bottomPos = msg.getFloat64(offset, true);
offset += 8;
posX = (rightPos + leftPos) / 2;
posY = (bottomPos + topPos) / 2;
posSize = 1;
if (0 == playerCells.length) {
nodeX = posX;
nodeY = posY;
viewZoom = posSize;
}
break;
case 87: // oyun rekortmeni
recordHolder = '';
var ch;
while ((ch = msg.getUint16(offset, true)) != 0) {
offset += 2;
recordHolder += String.fromCharCode(ch);
}
break;
case 88:
clanMapPlayers = [];
while (offset < msg.byteLength) {
var tx = msg.getFloat32(offset, true);
offset += 4;
var ty = msg.getFloat32(offset, true);
offset += 4;
clanMapPlayers.push({
x: tx,
y: ty
});
}
break;
case 89: // handshake
var key = msg.getUint32(offset, true);
var ukey = Math.sqrt(key - 347712);
var nick = document.getElementById('nick').value;
var msg = prepareData(5 + 2 * nick.length);
msg.setUint8(0, 28);
msg.setUint32(1, ukey);
for (var i = 0; i < nick.length; ++i)
msg.setUint16(5 + 2 * i, nick.charCodeAt(i), true);
wsSend(msg);
break;
case 90: // TeamMap
teamMapPlayers = [];
while (offset < msg.byteLength) {
var tx = msg.getFloat32(offset, true);
offset += 4;
var ty = msg.getFloat32(offset, true);
offset += 4;
teamMapPlayers.push({
x: tx,
y: ty
});
}
break;
case 91: // chat2
addChat2(msg, offset);
break;
case 92:
this.gameName = '';
var ch;
while ((ch = msg.getUint16(offset, true)) != 0) {
offset += 2;
this.gameName += String.fromCharCode(ch);
}
if ("FFA-6" == this.gameName || "FFA-10" == this.gameName || "FFA-7" == this.gameName || "FFA-8" == this.gameName || "FFA-9" == this.gameName) {
this.tuna = true;
} else {
this.tuna = false;
}
break;
case 112:
spectatorId = msg.getInt32(offset, true);
break;
case 106:
clan_idd = msg.getInt32(offset, true);
break;
case 105:
playerId = msg.getInt32(offset, true);
// console.log(playerId+" playerId");
break;
case 93:
var t = '';
var ch;
while ((ch = msg.getUint16(offset, true)) != 0) {
offset += 2;
t += String.fromCharCode(ch);
}
user_logout(t);
break;
case 55:
this.userIdd = msg.getInt32(offset, true);
break;
case 94:
let previousGold = gold;
gold = msg.getInt32(offset, true);
offset += 4;
if (gold !== previousGold) {
goldDiff += (gold - previousGold);
}
break;
case 107:
bonusGold = msg.getInt32(offset, true);
// console.log(gold);
break;
case 108:
enterPriceDialog = '';
var ch;
while ((ch = msg.getUint16(offset, true)) != 0) {
offset += 2;
enterPriceDialog += String.fromCharCode(ch);
}
console.log(enterPriceDialog);
hideOverlays();
$('#enterPriceConfirmDialog')['show']();
// console.log(gold);
break;
case 109:
gamePrice = msg.getInt32(offset, true);
// console.log(gold);
break;
case 95: // top message
var line = msg.getUint8(offset++); // Şimdilik tek satır. Bu bilgi ilerde kullanmak için...
switch (line) {
case 1:
topMessage1 = '';
var ch;
while ((ch = msg.getUint16(offset, true)) != 0) {
offset += 2;
topMessage1 += String.fromCharCode(ch);
}
topMessage1 = transMessage(topMessage1);
break;
case 2:
topMessage2 = '';
var ch;
while ((ch = msg.getUint16(offset, true)) != 0) {
offset += 2;
topMessage2 += String.fromCharCode(ch);
}
topMessage2 = transMessage(topMessage2);
break;
case 3:
topMessage3 = '';
var ch;
while ((ch = msg.getUint16(offset, true)) != 0) {
offset += 2;
topMessage3 += String.fromCharCode(ch);
}
topMessage3 = transMessage(topMessage3);
break;
case 4:
topMessage4 = '';
var ch;
while ((ch = msg.getUint16(offset, true)) != 0) {
offset += 2;
topMessage4 += String.fromCharCode(ch);
}
// console.log(topMessage4);
topMessage4 = transMessage(topMessage4);
break;
}
break;
case 96:
this.countdown = msg.getUint16(offset, true);
if (hasOverlay == true && this.gameName == "FFA-6") {
zPressed = false;
sendUint8(37);
xPressed = false;
sendUint8(38);
}
break;
case 57:
this.gpcountdown = msg.getUint16(offset, true);
break;
case 58:
this.otobascountdown = msg.getUint16(offset, true);
break;
case 59: // Custom leaderboard (topPlayers)
var leaderboardSize = msg.getUint32(offset, true);
offset += 4;
var leaderboard1 = [];
for (var i = 0; i < leaderboardSize; i++) {
var userId = msg.getUint32(offset, true); // userId
offset += 4;
var score = msg.getFloat32(offset, true); // score
offset += 4;
// İsim boyutunu belirle
var playerName = "";
while (true) {
var charCode = msg.getUint16(offset, true); // Read 2 bytes for each character
offset += 2; // Increment by 2 bytes
if (charCode === 0) break; // Null terminatöre ulaştık
playerName += String.fromCharCode(charCode);
}
// Liderlik tablosuna oyuncu ekle
leaderboard1.push({
userId: userId,
name: playerName,
score: score
});
}
populateLeaderboard(leaderboard1);
break;
case 97:
lastWinner = '';
var ch;
while ((ch = msg.getUint16(offset, true)) != 0) {
offset += 2;
lastWinner += String.fromCharCode(ch);
}
break;
case 86:
errorLog = '';
var ch;
while ((ch = msg.getUint16(offset, true)) != 0) {
offset += 2;
errorLog += String.fromCharCode(ch);
}
document.getElementById("generalErrorDialog_line1").textContent = errorLog;
document.getElementById("generalErrorDialog").style.display = "block";
break;
case 98:
var cur = msg.getUint32(offset, true);
offset += 4;
var max = msg.getUint32(offset, true);
setServerStatus(cur, max);
break;
case 56:
this.oyuncu = msg.getInt32(offset, true);
offset += 4; // Move the offset for the next integer
this.diken = msg.getInt32(offset, true);
offset += 4; // Move the offset for the next integer
this.spectplayer = msg.getInt32(offset, true);
// console.log(this.oyuncu+" "+this.diken);
break;
case 99:
addChat(msg, offset);
break;
}
}
function setServerStatus(cur, max) {
console.log(cur + " " + max);
}
function chatCensor(txt) {
var kufur = [
"siki", "sike", "siky", "sikm", "skim", "aminak", "aminas", "amini", "amcik", "oç", "ibne", "ipne", "ibine", "orspu", "orospu", "oruspu", "orsbu", "orosbu", "orusbu", "got", "piç", "yarak", "yarag"
];
var ceza = [
"küfür ettiğim için özür dilerim :(",
"hadi savaşmayalım sevişelim varmısınız :D",
"uff snne be slk",
"bende seni seviyorum ;)",
"ben kızım",
"kanka cidden sevgili olalımmı?",
"ben 12 yaşındayken arkadaşlarım bana aynştayn derdi",
"ben zekimiyim?",
"sinirlenince çok seksi oluyosun :P",
"kalp <3",
"sende beni seviyomusuuun?",
"kanka çıkıyorum gel hepsini vereyim",
"proyum rekorum 8k takım olmak isteyen",
"kanki ben bişey yazıyorum bu başka bişey yazıyo yaaa uff :q"
];
var txt2 = txt.toLowerCase();
//txt2 = txt2.replace(/[ç]/g,'c');
txt2 = txt2.replace(/[ı]/g, 'i');
txt2 = txt2.replace(/[1]/g, 'i');
txt2 = txt2.replace(/[@]/g, 'a');
txt2 = txt2.replace(/[4]/g, 'a');
txt2 = txt2.replace(/[ö]/g, 'o');
txt2 = txt2.replace(/[0]/g, 'o');
txt2 = txt2.replace(/[ü]/g, 'u');
txt2 = txt2.replace(/[ÄŸ]/g, 'g');
txt2 = txt2.replace(/[3]/g, 'e');
//txt2 = txt2.replace(/[ÅŸ]/g,'s');
txt2 = txt2.replace(/[^abcçdeghhijklmnoprstuvyz]/g, '');
txt2 = txt2.replace(/\d/g, '');
var letters = ['a', 'b', 'c', 'ç', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'r', 's', 't', 'u', 'v', 'y', 'z'];
for (var i = 0; i < letters.length; i++) {
var l = letters[i];
var ll = l + l;
while (txt2.indexOf(ll) != -1) {
txt2 = txt2.replace(ll, l);
}
}
var yes = 0;
for (var i = 0; i < kufur.length; i++) {
if (txt2.indexOf(kufur[i]) != -1) {
yes = 1;
}
}
if (yes == 0) {
return txt;
} else {
var r = Math.floor((Math.random() * ceza.length));
return ceza[r];
}
}
function addChat(view, offset) {
function getString() {
var text = '',
char;
while ((char = view.getUint16(offset, true)) != 0) {
offset += 2;
text += String.fromCharCode(char);
}
offset += 2; // Skip null-terminator
return text;
}
var flags = view.getUint8(offset++);
// for future expansions
if (flags & 2) {
offset += 4;
}
if (flags & 4) {
offset += 8;
}
if (flags & 8) {
offset += 16;
}
var r = view.getUint8(offset++),
g = view.getUint8(offset++),
b = view.getUint8(offset++),
color = (r << 16 | g << 8 | b).toString(16);
while (color.length < 6) {
color = '0' + color;
}
color = '#' + color;
// Read playerId, premiumStatus, userId, name
var playerId = view.getUint32(offset, true);
offset += 4;
var premiumStatus = view.getUint32(offset, true);
offset += 4;
var userId = view.getUint32(offset, true);
offset += 4;
var name = getString();
// Read chatType as an integer
var chatType = view.getUint32(offset, true);
offset += 4;
var message = getString();
chatBoard.push({
"playerId": playerId,
"premiuStatus": premiumStatus,
"userId": userId,
"name": name || "[Console]" || "Spectator", // Default to [Console] if undefined
"chatType": chatType,
"color": color,
"message": message,
"time": Date.now()
});
// console.log(name);
}
function addChat2(view, offset) {
function getString() {
var text = '',
ch;
while ((ch = view.getUint16(offset, true)) != 0) {
offset += 2;
text += String.fromCharCode(ch);
}
offset += 2;
return text;
}
var r = view.getUint8(offset++),
g = view.getUint8(offset++),
b = view.getUint8(offset++),
color = (r << 16 | g << 8 | b).toString(16);
var userId = view.getUint32(offset);
offset += 4;
while (color.length > 6) {
color = '0' + color;
}
color = '#' + color;
chatBoard.push({
"userId": userId,
"name": getString(),
"color": color,
"message": getString(),
"time": Date.now(),
"name_x": 0,
"name_y": 0,
"name_w": 0,
"name_h": 0,
"msg_x": 0,
"msg_y": 0,
"msg_w": 0,
"msg_h": 0
});
if (chatBoard.length > 15) {
chatBoard.shift();
}
updateCursorAgain();
}
function updateNodes(view, offset) {
timestamp = +new Date;
var code = Math.random();
ua = false;
var queueLength = view.getUint16(offset, true);
offset += 2;
for (i = 0; i < queueLength; ++i) {
var killer = nodes[view.getUint32(offset, true)],
killedNode = nodes[view.getUint32(offset + 4, true)];
offset += 8;
if (killer && killedNode) {
killedNode.destroy();
killedNode.ox = killedNode.x;
killedNode.oy = killedNode.y;
killedNode.oSize = killedNode.size;
killedNode.nx = killer.x;
killedNode.ny = killer.y;
killedNode.nSize = killedNode.size;
killedNode.updateTime = timestamp;
}
}
for (var i = 0;;) {
var nodeid = view.getUint32(offset, true);
offset += 4;
// UserID'yi al
if (0 == nodeid) break;
++i;
var size, posY, posX = view.getInt16(offset, true);
offset += 2;
posY = view.getInt16(offset, true);
offset += 2;
size = view.getInt16(offset, true);
offset += 2;
for (var r = view.getUint8(offset++), g = view.getUint8(offset++), b = view.getUint8(offset++),
color = (r << 16 | g << 8 | b).toString(16); 6 > color.length;) color = "0" + color;
var colorstr = "#" + color,
flags = view.getUint8(offset++),
flagVirus = !!(flags & 1),
flagAgitated = !!(flags & 16);
flags & 2 && (offset += 4);
flags & 4 && (offset += 8);
flags & 8 && (offset += 16);
for (var char, name = "";;) {
char = view.getUint16(offset, true);
offset += 2;
if (0 == char) break;
name += String.fromCharCode(char)
}
for (var char, skin = "";;) {
char = view.getUint16(offset, true);
offset += 2;
if (0 == char) break;
skin += String.fromCharCode(char)
}
for (var char, yetki = "";;) {
char = view.getUint16(offset, true);
offset += 2;
if (0 == char) break;
yetki += String.fromCharCode(char)
}
// for (var char, wing = "";;) {
// char = view.getUint16(offset, true);
// offset += 2;
// if (0 == char) break;
// wing += String.fromCharCode(char)
// }
for (var char, clan_id = "";;) {
char = view.getUint16(offset, true);
offset += 2;
if (0 == char) break;
clan_id += String.fromCharCode(char)
}
for (var char, pID = "";;) {
char = view.getUint16(offset, true);
offset += 2;
if (0 == char) break;
pID += String.fromCharCode(char)
}
for (var char, teamCode = "";;) {
char = view.getUint16(offset, true);
offset += 2;
if (0 == char) break;
teamCode += String.fromCharCode(char)
}
for (var char, clanName = "";;) {
char = view.getUint16(offset, true);
offset += 2;
if (0 == char) break;
clanName += String.fromCharCode(char);
}
// console.log(clanName+" KLAN İSMİ");
var userId = view.getUint32(offset, true);
offset += 4;
var splitL = name.split("#");
var skin1 = splitL[0];
name1 = splitL[1];
wing2 = splitL[2];
pID2 = splitL[4];
clan_id1 = splitL[3];
var node = null;
if (nodes.hasOwnProperty(nodeid)) {
node = nodes[nodeid];
node.updatePos();
node.ox = node.x;
node.oy = node.y;
node.oSize = node.size;
node.color = colorstr;
// node.clanName = clanName;
} else {
node = new Cell(nodeid, posX, posY, size, colorstr, name, clanName, skin, clan_id, yetki, userId);
nodelist.push(node);
nodes[nodeid] = node;
node.ka = posX;
node.la = posY;
node.clan_id = clan_id;
node.yetki = yetki;
node.userId = userId;
node.pID = pID;
node.clanName = clanName;
}
node.teamCode = teamCode;
node.isVirus = flagVirus;
node.isAgitated = flagAgitated;
node.nx = posX;
node.ny = posY;
node.nSize = size;
node.updateCode = code;
node.updateTime = timestamp;
node.flag = flags;
name && node.setName(name);
name && node.setClanName(clanName);
skin && node.setSkinName(skin);
// wing && node.setWingName(wing);
if (-1 != nodesOnScreen.indexOf(nodeid) && -1 == playerCells.indexOf(node)) {
document.getElementById("overlays").style.display = "none";
playerCells.push(node);
if (1 == playerCells.length) {
nodeX = node.x;
nodeY = node.y;
drawMapDstPoint = true;
}
}
}
for (d = 0; d < nodelist.length; d++) {
if (nodelist[d].pID == pID) {
nodelist[d].clan_id = clan_id;
nodelist[d].clanName = clanName;
nodelist[d].teamCode = teamCode;
nodelist[d].yetki = yetki;
nodelist[d].userId = userId;
}
}
if (otoMakro == true) {
if (playerCells.length == 0) {
sendUint8(36);
sendUint8(35);
}
}
// if (otostart == true && !wHandle.isSpectating) {
// console.log("OTOMATİK YENİDEN BAŞLADI")
// if (playerCells.length == 0) {
// if (this.tickOtoStart <= 0) {
// this.tickOtoStart = 50; // 20 ticks = 1 second
// onClickPlay();
// } else {
// this.tickOtoStart--;
// }
// }
// }
queueLength = view.getUint32(offset, true);
offset += 4;
for (i = 0; i < queueLength; i++) {
var nodeId = view.getUint32(offset, true);
offset += 4;
node = nodes[nodeId];
null != node && node.destroy();
}
ua && 0 == playerCells.length && showOverlays("fast");
if (playerCells.length == 0 && drawMapDstPoint == true) {
mapDstX = mapx;
mapDstY = mapy;
}
}
function sendMouseMove() {
var msg;
if (wsIsOpen()) {
msg = rawMouseX - canvasWidth / 2;
var b = rawMouseY - canvasHeight / 2;
if (64 <= msg * msg + b * b && !(.01 > Math.abs(oldX - X) && .01 > Math.abs(oldY - Y))) {
oldX = X;
oldY = Y;
msg = prepareData(21);
msg.setUint8(0, 16);
msg.setFloat64(1, X, true);
msg.setFloat64(9, Y, true);
msg.setUint32(17, 0, true);
wsSend(msg);
}
}
}
function sendHandshakeRequest() {
if (wsIsOpen()) {
var msg = prepareData(1);
msg.setUint8(0, 27);
wsSend(msg)
}
}
function isSpectatefromId(sID) {
if (sID != null && sID != 0 && wsIsOpen()) {
console.log("Gönderilen izleyici ID: " + sID);
const msg = prepareData(3); // 1 bayt komut + 2 bayt ID
msg.setUint8(0, 4); // Komut kodu
msg.setUint16(1, sID, true); // İzleyici ID'sini ekle
wsSend(msg);
console.log("İzleyici ID gönderimi başarılı.");
}
}
function sendUserToken() {
if (localStorage.userToken != null && localStorage.userToken.length == 44) {
if (wsIsOpen() &&
localStorage.userToken != null &&
localStorage.userToken.length == 44) {
var msg = prepareData(1 + 2 * 44);
var offset = 0;
msg.setUint8(offset++, 3);
for (var i = 0; i < 44; ++i) {
var c = localStorage.userToken.charCodeAt(i);
msg.setUint16(offset, c, true);
offset += 2;
}
// console.log(localStorage.userToken+" nBAER");
wsSend(msg);
console.log("Token Başarılı..")
}
}
setTimeout(() => {
if (!wHandle.isSpectating)
sendNickName();
sendSkinName();
}, 1000); // 1 saniyelik gecikme simülasyonu
}
function sendNickName() {
var nick = document.getElementById('nick').value;
//console.log("sendNickName "+userNickName);
if (ws && (ws.readyState === WebSocket.OPEN || ws.readyState === WebSocket.CONNECTING)) {
var msg = prepareData(1 + 2 * nick.length);
msg.setUint8(0, 0);
for (var i = 0; i < nick.length; ++i) msg.setUint16(1 + 2 * i, nick.charCodeAt(i), true);
wsSend(msg)
}
}
function sendConfirmPrice() {
var priceDialog = enterPriceDialog;
//console.log("sendNickName "+userNickName);
if (wsIsOpen()) {
var msg = prepareData(1 + 2 * priceDialog.length);
msg.setUint8(0, 5);
for (var i = 0; i < enterPriceDialog.length; ++i) msg.setUint16(1 + 2 * i, enterPriceDialog.charCodeAt(i), true);
wsSend(msg)
}
}
function sendSkinName() {
var skin = document.getElementById('txtSkin').value;
//if ( userSkinName==null )
//return;
var skinName = skin.toLowerCase();
/*if (skinName.indexOf('[') != -1) {
var clanStart = skinName.indexOf('[');
var clanEnd = skinName.indexOf(']');
skinName = skinName.slice(clanStart + 1, clanEnd);
}*/
//if (-1 != knownNameDict.indexOf(skinName)) {
if (wsIsOpen() && null != skinName) {
var msg = prepareData(1 + 2 * skinName.length);
msg.setUint8(0, 2);
for (var i = 0; i < skinName.length; ++i) msg.setUint16(1 + 2 * i, skinName.charCodeAt(i), true);
wsSend(msg)
}
//}
}
function getCookie(cname) {
var name = cname + "=";
var decodedCookie = decodeURIComponent(document.cookie);
var ca = decodedCookie.split(';');
for (var i = 0; i < ca.length; i++) {
var c = ca[i];
while (c.charAt(0) == ' ') {
c = c.substring(1);
}
if (c.indexOf(name) == 0) {
return c.substring(name.length, c.length);
}
}
return "";
}
function setCookie(cname, cvalue, exdays) {
var d = new Date();
d.setTime(d.getTime() + (exdays * 24 * 60 * 60 * 1000));
var expires = "expires=" + d.toUTCString();
document.cookie = cname + "=" + cvalue + ";" + expires + ";path=/";
}
function sendUserId() {
var CookieOne = getCookie("userid");
}
function numberWithDotted(number) {
var text = number.toString();
var dottedText = "";
var count = 0;
for (var i = text.length; i >= 0; i--) {
dottedText = text.charAt(i) + dottedText;
if (count % 3 === 0) {
dottedText = "." + dottedText;
}
count++;
}
dottedText = dottedText.replace(/^\.+|\.+$/g, '');
return dottedText;
}
function sendTeam() {
var team = document.getElementById('myTeam').value;
if (wsIsOpen() &&
team != null &&
team.length >= 0) {
var msg = prepareData(1 + 2 * team.length);
var offset = 0;
msg.setUint8(offset++, 26);
for (var i = 0; i < team.length; ++i) {
var c = team.charCodeAt(i);
msg.setUint16(offset, c, true);
offset += 2;
}
wsSend(msg);
}
}
function sendChat(str) {
var nick = document.getElementById('nick').value;
str = chatCensor(str);
if (wsIsOpen() && (str.length < 200) && (str.length > 0)) {
var msg = prepareData(2 + 2 * str.length);
var offset = 0;
msg.setUint8(offset++, 99);
msg.setUint8(offset++, 0); // fflags (0 for now)
for (var i = 0; i < str.length; ++i) {
msg.setUint16(offset, str.charCodeAt(i), true);
offset += 2;
}
wsSend(msg);
//console.log(msg);
}
}
function wsIsOpen() {
return null != ws && ws.readyState == ws.OPEN
}
function sendUint8(a) {
if (wsIsOpen()) {
var msg = prepareData(1);
msg.setUint8(0, a);
wsSend(msg)
}
}
function redrawGameScene() {
drawGameScene();
wHandle.requestAnimationFrame(redrawGameScene)
}
function canvasResize() {
window.scrollTo(0, 0);
canvasWidth = wHandle.innerWidth;
canvasHeight = wHandle.innerHeight;
nCanvas.width = canvasWidth;
nCanvas.height = canvasHeight;
var hello = wjQuery("#helloDialog");
hello.css("transform", "none");
var modalHeight = hello.height();
modalHeight > canvasHeight / 1.1 ? hello.css("transform", "translate(-50%, -50%) scale(" + canvasHeight / modalHeight / 1.1 + ")") : hello.css("transform", "translate(-50%, -50%)");
drawGameScene()
}
function viewRange() {
var ratio;
ratio = Math.max(canvasHeight / 1080, canvasWidth / 1920);
return ratio * zoom;
}
function calcViewZoom() {
if (0 != playerCells.length) {
for (var newViewZoom = 0, i = 0; i < playerCells.length; i++);
// newViewZoom += playerCells[i].size ; dan öncesinie ekle
newViewZoom = Math.pow(Math.min(64 / newViewZoom, 1), .4) * viewRange();
viewZoom = (1 * newViewZoom) / 10
// viewZoom = (5 * viewZoom + newViewZoom) / 10
}
}
function drawGameScene() {
var a, oldtime = Date.now();
++cb;
var deltaT = Date.now() - lastSendMouseMove;
// console.log(deltaT);
if (deltaT > 50) {
lastSendMouseMove = Date.now();
if (!isTPressed) {
sendMouseMove();
}
}
timestamp = oldtime;
if (0 < playerCells.length) {
calcViewZoom();
var c = a = 0;
for (var d = 0; d < playerCells.length; d++) {
playerCells[d].updatePos();
a += playerCells[d].x / playerCells.length;
c += playerCells[d].y / playerCells.length;
}
posX = a;
posY = c;
posSize = viewZoom;
nodeX = (nodeX + a) / 2;
nodeY = (nodeY + c) / 2
} else {
nodeX = (29 * nodeX + posX) / 30;
nodeY = (29 * nodeY + posY) / 30;
// viewZoom = (9 * viewZoom + posSize * viewRange()) / 10;
}
buildQTree();
mouseCoordinateChange();
//ctx.clearRect(0, 0, canvasWidth, canvasHeight);
ctx.fillStyle = showDarkTheme ? "#111111" : "#F2FBFF";
ctx.fillRect(0, 0, canvasWidth, canvasHeight);
nodelist.sort(function(a, b) {
return a.size == b.size ? a.id - b.id : a.size - b.size
});
ctx.save();
ctx.translate(canvasWidth / 2, canvasHeight / 2);
ctx.scale(viewZoom, viewZoom);
ctx.translate(-nodeX, -nodeY);
//for (d = 0; d < Cells.length; d++) Cells[d].drawOneCell(ctx);
// border -->
ctx.strokeStyle = '#FF0000';
ctx.lineWidth = 10;
ctx.lineCap = "square";
ctx.lineJoin = "square";
ctx.beginPath();
ctx.moveTo(leftPos, topPos);
ctx.lineTo(rightPos, topPos);
ctx.lineTo(rightPos, bottomPos);
ctx.lineTo(leftPos, bottomPos);
ctx.closePath();
ctx.stroke();
ctx.strokeStyle = showDarkTheme ? "#AAAAAA" : "#000000";
ctx.globalAlpha = .2;
ctx.lineWidth = 1;
var gridCellSize = 50;
ctx.beginPath();
for (var x = leftPos; x <= rightPos; x += gridCellSize) {
ctx.moveTo(x, topPos);
ctx.lineTo(x, bottomPos);
}
for (var y = topPos; y <= bottomPos; y += gridCellSize) {
ctx.moveTo(leftPos, y);
ctx.lineTo(rightPos, y);
}
ctx.stroke();
// <--
if (transparentRender == true) {
ctx.globalAlpha = 0.6;
} else {
ctx.globalAlpha = 1;
}
for (d = 0; d < nodelist.length; d++) {
nodelist[d].drawOneCell(ctx);
}
if (playerCells.length > 0) {
if (typeof playerCells[0].pID !== 'undefined') {
pID = playerCells[0].pID;
my_pID = playerCells[0].pID;
}
if (typeof playerCells[0].teamCode !== 'undefined') {
my_team_code = playerCells[0].teamCode;
}
if (typeof playerCells[0].clan_id !== 'undefined') {
my_clan_id = playerCells[0].clan_id;
}
if (typeof playerCells[0].yetki !== 'undefined') {
my_yetki = playerCells[0].yetki;
}
if (typeof playerCells[0].userId !== 'undefined') {
my_userId = playerCells[0].userId;
}
}
/*
var wingImage = new Image();
wingImage.src = 'tuna.png';
for (var i = 0; i < playerCells.length; i++) {
var ForEyup = playerCells[0];
ctx.save();
// viewRange fonksiyonundan gelen orantılı zoom değerini al
var zoomValue = viewRange();
// Kanat genişliğini belirle
var wingWidth = 20;
var wingHeight = 20;
var newWidth = ForEyup.size + 1 * wingWidth;
var newHeight = ForEyup.size + 1 * wingHeight;
// Hücrenin solundaki kanadı çiz
ctx.drawImage(wingImage, ForEyup.x - newWidth - ForEyup.size - 5, ForEyup.y - newHeight - ForEyup.size - 5, newWidth, 2 * (ForEyup.size + 5));
// Hücreyi çiz
ctx.beginPath();
ctx.arc(ForEyup.x, ForEyup.y, ForEyup.size, 0, Math.PI * 2, false);
ctx.strokeStyle = "#FFFFFF";
ctx.lineWidth = zoomValue;
ctx.stroke();
ctx.closePath();
// Hücrenin sağındaki kanadı çiz ve boyunu sadece değiştir, tersine çevir
ctx.save();
ctx.scale(-1, 1); // X ekseninde tersine çevirme
ctx.drawImage(wingImage, -ForEyup.x-newWidth - ForEyup.size - 5, ForEyup.y - newHeight - ForEyup.size - 5, newWidth, 2 * (ForEyup.size + 5));
ctx.restore();
ctx.restore();
}
var frameImage = new Image();
frameImage.src = 'yuvarlak.png';
for (var i = 0; i < playerCells.length; i++) {
var ForEyup = playerCells[i];
ctx.save();
// viewRange fonksiyonundan gelen orantılı zoom değerini al
var zoomValue = viewRange();
// Hücrenin boyutlarını ayarla
var cellWidth = ForEyup.size * 3;
var cellHeight = ForEyup.size * 3;
// Çerçeve boyutlarını ayarla
var frameWidth = cellWidth + 2 * 20; // Hücre genişliği + 2 * çerçeve genişliği
var frameHeight = cellHeight + 2 * 20; // Hücre yüksekliği + 2 * çerçeve yüksekliği
// Hücrenin merkezine çerçeve resmini çiz
ctx.drawImage(frameImage, ForEyup.x - frameWidth / 2, ForEyup.y-17 - frameHeight / 2, frameWidth, frameHeight);
// Hücreyi çiz
ctx.beginPath();
ctx.arc(ForEyup.x, ForEyup.y, ForEyup.size, 0, Math.PI * 2, false);
ctx.strokeStyle = "#FFFFFF";
ctx.lineWidth = zoomValue;
ctx.stroke();
ctx.closePath();
ctx.restore();
}
*/
//console.log(Cells.length);
if (drawLine) {
drawLineX = (3 * drawLineX + lineX) /
4;
drawLineY = (3 * drawLineY + lineY) / 4;
ctx.save();
ctx.strokeStyle = "#FFAAAA";
ctx.lineWidth = 10;
ctx.lineCap = "round";
ctx.lineJoin = "round";
ctx.globalAlpha = .5;
ctx.beginPath();
for (d = 0; d < playerCells.length; d++) {
ctx.moveTo(playerCells[d].x, playerCells[d].y);
ctx.lineTo(drawLineX, drawLineY);
}
ctx.stroke();
ctx.restore()
}
if (isTPressed) {
// Loop through player cells and draw lines
for (var d = 0; d < playerCells.length; d++) {
var cell = playerCells[d];
var drawLineX = tlastSendMouseMoveX; // Target X coordinate
var drawLineY = tlastSendMouseMoveY; // Target Y coordinate
// Draw a dashed line from the center of the cell to the target coordinates
ctx.save();
ctx.strokeStyle = "#FFFFFF"; // Change color to white
ctx.lineWidth = 15;
ctx.lineCap = "round";
ctx.lineJoin = "round";
ctx.globalAlpha = 0.7;
ctx.beginPath();
// Center coordinates of the cell
var cellCenterX = cell.x;
var cellCenterY = cell.y;
// Create a dashed line
ctx.setLineDash([150, 150]); // Set dashed pattern (150 pixels on, 150 pixels off)
// Draw line from cell center to tlastSendMouseMoveX, tlastSendMouseMoveY
ctx.moveTo(cellCenterX, cellCenterY);
ctx.lineTo(drawLineX, drawLineY);
ctx.stroke();
// Draw a larger "X" at the target coordinates
ctx.fillStyle = "#FFFFFF"; // Set color for the "X"
ctx.beginPath();
var xOffset = 55; // Increase offset for larger "X"
ctx.moveTo(drawLineX - xOffset, drawLineY - xOffset); // Top-left of "X"
ctx.lineTo(drawLineX + xOffset, drawLineY + xOffset); // Bottom-right of "X"
ctx.moveTo(drawLineX + xOffset, drawLineY - xOffset); // Top-right of "X"
ctx.lineTo(drawLineX - xOffset, drawLineY + xOffset); // Bottom-left of "X"
ctx.stroke();
// Restore the context
ctx.restore();
}
}
if (kenar) {
// Hem oyuncunun hücrelerini hem de nodelist'i birleştir
let allCells = playerCells.concat(nodelist);
// Tüm hücreler için kenar çizimi yap
for (let i = 0; i < allCells.length; i++) {
let cell = allCells[i];
// Eğer cell pID değeri spectatorId ile eşleşiyorsa veya izleyici modundaysak
if (cell.pID == my_pID || cell.pID == spectatorId) {
ctx.save(); // Canvas durumunu kaydet
ctx.lineWidth = Math.max(2, cell.size / 95); // Çizgi kalınlığını hücre boyutuna göre ayarla, minimum 2 px
ctx.strokeStyle = "#ffffff"; // Çizgi rengini belirle
ctx.beginPath();
ctx.arc(cell.x, cell.y, cell.size + 1, 0, 2 * Math.PI, false); // Hücre çevresine daire çiz
ctx.stroke(); // Çizimi uygula
ctx.closePath(); // Çizim yolunu kapat
ctx.restore(); // Canvas durumunu eski haline getir
}
}
}
ctx.restore();
drawMoverList();
// countdown -->
if (this.countdown < 60000) {
var countDownStr = "";
if (typeof this.gameName !== 'undefined' && this.gameName !== ' ') {
countDownStr += this.gameName;
}
countDownStr += "[";
var min = Math.floor(this.countdown / 60);
if (min < 10) {
countDownStr += "0";
}
countDownStr += min + ":";
var sec = this.countdown % 60;
if (sec < 10) {
countDownStr += "0";
}
countDownStr += sec;
countDownStr += "]";
ctx.font = "30px Ubuntu";
var countDownStrWidth = ctx.measureText(countDownStr).width;
var allStr = countDownStr;
var allStrec = recordHolder;
var allStrWidth = ctx.measureText(allStr).width;
var allStrWidthec = ctx.measureText(allStrec).width;
var countDown_x = (canvasWidth - allStrWidth) * 0.5;
var countDown_xrec = (canvasWidth - allStrWidthec) * 0.5; // Or another fixed x position if needed
var countDown_y = 30;
var countDown_yrec = 70; // Fixed y position for recordHolder
ctx.globalAlpha = .4;
if (showDarkTheme == false) {
ctx.fillStyle = "#000000";
} else {
ctx.fillStyle = "#DDDDDD";
}
ctx.fillRect(countDown_x - 10, 0, allStrWidth + 20, 40);
ctx.fillRect(countDown_xrec - 10, countDown_yrec - 30, allStrWidthec + 20, 40); // Adjust the position to be fixed
ctx.globalAlpha = 1;
ctx.fillStyle = "#0000FF";
ctx.fillText(countDownStr, countDown_x, countDown_y);
ctx.fillStyle = "#FFFF00";
ctx.fillText(recordHolder, countDown_xrec, countDown_yrec); // Use fixed y position
} // <--
if (this.gpcountdown < 60000 && this.gpcountdown > 0) {
var gpcountDownStr = "";
// Zaman bilgisini oluştur
var min = Math.floor(this.gpcountdown / 60);
if (min < 10) {
gpcountDownStr += "0";
}
gpcountDownStr += min + ":";
var sec = this.gpcountdown % 60;
if (sec < 10) {
gpcountDownStr += "0";
}
gpcountDownStr += sec;
gpcountDownStr += " Saniye boyunca ödüle eklenir";
ctx.font = "20px Ubuntu";
// Gerekli genişlikleri hesapla
var countDownStrWidth = ctx.measureText(gpcountDownStr).width;
// Sol tarafta gösterim için konum hesapla
var gpcountDown_x = 10; // Sol tarafta biraz boşluk bırak
var gpcountDown_y = 410; // Y koordinatı
ctx.globalAlpha = 1;
if (showDarkTheme == true) {
ctx.fillStyle = "#FFFF00";
} else {
ctx.fillStyle = "#AAAA00";
}
ctx.fillText(gpcountDownStr, gpcountDown_x, gpcountDown_y);
}
if (this.otobascountdown < 60000 && this.otobascountdown > 0) {
console.log(this.otobascountdown);
var otocountDownStr = "";
// Zaman bilgisini oluştur
var min = Math.floor(this.otobascountdown / 60);
if (min < 10) {
otocountDownStr += "0";
}
otocountDownStr += min + ":";
var sec = this.otobascountdown % 60;
if (sec < 10) {
otocountDownStr += "0";
}
otocountDownStr += sec;
otocountDownStr += " Saniye Otomatik Gold Basma Aktif"; // "saniye" kelimesini ekliyoruz
ctx.font = "20px Ubuntu";
// Gerekli genişlikleri hesapla
var countDownStrWidth = ctx.measureText(otocountDownStr).width;
// Sol tarafta gösterim için konum hesapla
var otobascountDown_x = 10; // Sol tarafta biraz boşluk bırak
var otobascountDown_y = 430; // Y koordinatı
ctx.globalAlpha = 1;
if (showDarkTheme == true) {
ctx.fillStyle = "#FFFF00";
} else {
ctx.fillStyle = "#AAAA00";
}
ctx.fillText(otocountDownStr, otobascountDown_x, otobascountDown_y);
}
// fps -->
// if (showFps === true) {
if (fps_startTime == 0) {
fps_startTime = new Date().getTime();
} else {
var diff = new Date().getTime() - fps_startTime;
if (diff >= 1000) {
var sn = diff / 1000;
fps_value = Math.floor(parseFloat(fps_counter / sn) * 10000 / 10000);
fps_startTime = new Date().getTime();
fps_counter = 1;
} else {
fps_counter++;
}
}
ctx.globalAlpha = 1;
if (showDarkTheme == true) {
ctx.fillStyle = "#FFFFFF";
} else {
ctx.fillStyle = "#000000";
}
ctx.font = "20px Ubuntu";
ctx.fillText("Hesap No " + my_userId, 10, 220);
// }
// <--
// gold -->
ctx.globalAlpha = 1;
if (showDarkTheme == true) {
ctx.fillStyle = "#FFFF00";
} else {
ctx.fillStyle = "#AAAA00";
}
ctx.font = "30px Ubuntu";
// ctx.fillText("Gold: "+gold, 10, 270);
// ctx.fillText("Gold: "+gold, 10, 310);
// if (this.tuna == true) {
// ctx.fillText(bonusGold + " TL", 10, 370);
ctx.globalAlpha = 1;
ctx.fillStyle = "#FFFF00";
ctx.fillText("Ödül" + ": " + numberWithDotted(gamePrice), 10, 340);
// }
// <--
var color = "FFFF00";
ctx.globalAlpha = 1;
ctx.fillStyle = color;
var goldText = "Gold: " + numberWithDotted(gold);
var textWidth = ctx.measureText(goldText).width;
ctx.fillText(goldText, 10, 310);
if (goldDiff !== 0) {
var diffText = (goldDiff > 0) ? "+" + goldDiff : "" + goldDiff;
var angle = -Math.PI * 0.25 - Math.random() * Math.PI * 0.5;
var radius = 100;
var moveX = Math.cos(angle) * radius;
var moveY = Math.sin(angle) * radius;
var diffWidth = ctx.measureText(diffText).width;
new textMover(diffText, 10 + textWidth - diffWidth, 290, moveX, moveY, 2000);
goldDiff = 0;
}
// topMessage -->
ctx.globalAlpha = 1;
ctx.fillStyle = "#00AA00";
ctx.font = "30px Ubuntu";
var topMessage_x;
var topMessage_y;
topMessage_x = (canvasWidth - ctx.measureText(this.topMessage1).width) * 0.5;
topMessage_y = 105;
ctx.fillText(this.topMessage1, topMessage_x, topMessage_y);
topMessage_x = (canvasWidth - ctx.measureText(this.topMessage2).width) * 0.5;
topMessage_y = 165;
ctx.fillText(this.topMessage2, topMessage_x, topMessage_y);
topMessage_x = (canvasWidth - ctx.measureText(this.topMessage3).width) * 0.5;
topMessage_y = 135;
ctx.fillText(this.topMessage3, topMessage_x, topMessage_y);
// topMessage4 için renk ve font ayarlarını değiştirin
ctx.fillStyle = "#FF0000"; // Rengi kırmızı yap
ctx.font = "30px Ubuntu"; // Font boyutunu 30px yap
topMessage_x = (canvasWidth - ctx.measureText(topMessage4).width) * 0.5;
topMessage_y = 195;
ctx.fillText(topMessage4, topMessage_x, topMessage_y);
// <--
lbCanvas && lbCanvas.width && ctx.drawImage(lbCanvas, canvasWidth - lbCanvas.width - 10, 10); // draw Leader Board
if (!hideChat) {
if ((chatCanvas != null) && (chatCanvas.width > 0)) ctx.drawImage(chatCanvas, 0, canvasHeight - chatCanvas.height - 50); // draw Chat Board
}
// score -->
userScoreCurrent = calcUserScore();
userScoreMax = Math.max(userScoreMax, userScoreCurrent);
/*if (0 != userScore) {
if (null == scoreText) {
scoreText = new UText(24, '#FF0000');
}
scoreText.setValue('Score: ' + ~~(userScore / 100));
c = scoreText.render();
a = c.width;
ctx.globalAlpha = .2;
ctx.fillStyle = '#000000';
ctx.fillRect(10, 10, a + 10, 34);//canvasHeight - 10 - 24 - 10
ctx.globalAlpha = 1;
ctx.drawImage(c, 15, 15);//canvasHeight - 10 - 24 - 5
}*/
var txt_score = 'Score';
var txt_max = 'Max';
switch (getLangCode()) {
case 'tr':
txt_score = 'Skor';
txt_max = 'Maks.';
break;
case 'en':
txt_score = 'Score';
txt_max = 'Max';
break;
case 'es':
txt_score = 'Puntuación';
txt_max = 'Max';
break;
case 'de':
txt_score = 'Ergebnis';
txt_max = 'Max';
break;
}
ctx.globalAlpha = .8;
if (showDarkTheme == true) {
ctx.fillStyle = '#FFFFFF';
} else {
ctx.fillStyle = '#000000';
}
ctx.font = "24px Ubuntu";
ctx.fillText(txt_score + ': ' + numberWithDotted(userScoreCurrent), 10, 34);
ctx.fillText(txt_max + ': ' + numberWithDotted(userScoreMax), 10, 54);
ctx.fillText("Parça" + ': ' + numberWithDotted(playerCells.length) + "/25", 10, 74);
// <--
// map -->
var pointSize = 5;
ctx.globalAlpha = .4;
if (showDarkTheme == true) {
ctx.fillStyle = "#DDDDDD";
} else {
ctx.fillStyle = "#000000";
}
ctx.fillRect(10, 80, 100, 100);
ctx.globalAlpha = 1;
if (mapDstX != 0 && mapDstY != 0 && drawMapDstPoint == true) {
if (showDarkTheme == true) {
ctx.fillStyle = '#FF0000';
} else {
ctx.fillStyle = '#990000';
}
ctx.fillRect(mapDstX, mapDstY, pointSize, pointSize);
}
// team players -->
if (showDarkTheme == true) {
ctx.fillStyle = '#CCCC00';
} else {
ctx.fillStyle = '#CCCC00';
}
for (var i = 0; i < teamMapPlayers.length; i++) {
mapx = 10 + (teamMapPlayers[i].x / rightPos) * 100 - pointSize * 0.5;
mapy = 80 + (teamMapPlayers[i].y / bottomPos) * 100 - pointSize * 0.5;
ctx.fillRect(mapx, mapy, pointSize, pointSize);
}
// <--
// clan players -->
if (showDarkTheme == true) {
ctx.fillStyle = '#0000CC';
} else {
ctx.fillStyle = '#0000CC';
}
for (var i = 0; i < clanMapPlayers.length; i++) {
mapx = 10 + (clanMapPlayers[i].x / rightPos) * 100 - pointSize * 0.5;
mapy = 80 + (clanMapPlayers[i].y / bottomPos) * 100 - pointSize * 0.5;
ctx.fillRect(mapx, mapy, pointSize, pointSize);
}
// <--
// me -->
mapx = 10 + (nodeX / rightPos) * 100 - pointSize * 0.5;
mapy = 80 + (nodeY / bottomPos) * 100 - pointSize * 0.5;
if (showDarkTheme == true) {
ctx.fillStyle = '#FFFFFF';
} else {
ctx.fillStyle = '#FFFFFF';
}
ctx.fillRect(mapx, mapy, pointSize, pointSize);
// <--
ctx.globalAlpha = 1;
ctx.font = "16px Ubuntu";
var txt_share = 'share';
switch (getLangCode()) {
case 'tr':
txt_share = 'paylaş';
break;
case 'en':
txt_share = 'share';
break;
case 'es':
txt_share = 'compartir';
break;
case 'de':
txt_share = 'aktie';
break;
}
var txt = Math.round(nodeX / 1000) + ' , ' + Math.round(nodeY / 1000) + ' ' + txt_share;
txtpos_width = ctx.measureText(txt).width;
txtpos_height = 16;
txtpos_share = '*** ' + Math.round(nodeX / 1000) + ' , ' + Math.round(nodeY / 1000) + ' ***';
ctx.fillText(txt, 10, 200);
// <--
drawSplitIcon(ctx);
drawTouch(ctx);
// chatboard --->
if (hideChat == false) {
var cnt = 0;
i = chatBoard.length - 1;
for (; i >= 0; i--) {
if (0 == chatType || chatBoard[i].chatType == chatType || 3 == chatBoard[i].chatType) {
if (cnt++) {
if (cnt > 15) {
break;
}
} else {
if (cnt > 13) {
break;
}
}
var name = chatBoard[i].name;
// Update the name assignment logic
if (name === "undefined" || name === '') {
name = '[console]';
}
var msgRaw = chatBoard[i].message.trim();
var msgTag = msgRaw.substring(0, 3);
if (msgTag == '-t ') {
msgRaw = msgRaw.substring(3);
} else if (msgTag == '-c ') {
msgRaw = msgRaw.substring(3);
}
var value = chatBoard[i].name;
if ("" == value) {
value = chatBoard[i].name;
}
var tempPathText = " : " + chatBoard[i].message.trim();
var opt_by = 3 == chatBoard[i].chatType ? "bold " : "";
ctx.font = opt_by + chatSize + "px Ubuntu";
chatBoard[i].name_x = 15;
chatBoard[i].name_y = canvasHeight - 60 - 20 * cnt;
chatBoard[i].name_w = ctx.measureText(value).width;
chatBoard[i].name_h = 18;
chatBoard[i].msg_x = 15 + chatBoard[i].name_w;
chatBoard[i].msg_y = chatBoard[i].name_y;
chatBoard[i].msg_w = ctx.measureText(tempPathText).width;
chatBoard[i].msg_h = chatBoard[i].name_h;
ctx.fillStyle = chatBoard[i].color;
ctx.fillText(value, chatBoard[i].name_x, chatBoard[i].name_y);
if (0 == chatBoard[i].chatType) {
if (true == showDarkTheme) {
ctx.fillStyle = "#FFFFFF";
} else {
ctx.fillStyle = "#000000";
}
} else {
if (1 == chatBoard[i].chatType) {
ctx.fillStyle = "#CCCC00";
} else {
if (2 == chatBoard[i].chatType) {
ctx.fillStyle = "#0aadff";
} else {
if (3 == chatBoard[i].chatType) {
ctx.fillStyle = "#18d8eb";
}
}
}
}
ctx.fillText(tempPathText, chatBoard[i].msg_x, chatBoard[i].msg_y);
}
}
}
// <---
// touch buttons --->
if (touchButtons == true) {
ctx.font = "18px Arial";
ctx.globalAlpha = .5;
//if ( showDarkTheme==true ){
// ctx.fillStyle = "#DDDDDD";
//}else{
ctx.fillStyle = "#000000";
//}
var buttonGap = 10;
// ESC
if (hideChat == true) {
btnESC_x = buttonGap;
} else {
btnESC_x = 400;
}
btnESC_y = canvasHeight - screenButtonWH - 10;
ctx.globalAlpha = .5;
ctx.fillStyle = "#F1C40F";
ctx.fillRect(btnESC_x, btnESC_y, btnESC_w, btnESC_h);
ctx.globalAlpha = 1;
ctx.fillStyle = "#000000";
ctx.fillText("Esc", btnESC_x + 5, btnESC_y + 34);
// A
btnA_x = btnESC_x + btnESC_w + buttonGap;
btnA_y = btnESC_y;
ctx.globalAlpha = .5;
ctx.fillStyle = "#F1C40F";
ctx.fillRect(btnA_x, btnA_y, btnA_w, btnA_h);
ctx.globalAlpha = 1;
ctx.fillStyle = "#000000";
ctx.fillText("A", btnA_x + 5, btnA_y + 34);
// S
btnS_x = btnA_x + btnA_w + buttonGap;
btnS_y = btnA_y;
ctx.globalAlpha = .5;
ctx.fillStyle = "#F1C40F";
ctx.fillRect(btnS_x, btnS_y, btnS_w, btnS_h);
ctx.globalAlpha = 1;
ctx.fillStyle = "#000000";
ctx.fillText("S", btnS_x + 5, btnS_y + 34);
// W
btnW_x = btnS_x + btnS_w + buttonGap;
btnW_y = btnS_y;
ctx.globalAlpha = .5;
ctx.fillStyle = "#F1C40F";
ctx.fillRect(btnW_x, btnW_y, btnW_w, btnW_h);
ctx.globalAlpha = 1;
ctx.fillStyle = "#000000";
ctx.fillText("W", btnW_x + 5, btnW_y + 34);
// E
btnE_x = btnW_x + btnW_w + buttonGap;
btnE_y = btnW_y;
ctx.globalAlpha = .5;
ctx.fillStyle = "#F1C40F";
ctx.fillRect(btnE_x, btnE_y, btnE_w, btnE_h);
ctx.globalAlpha = 1;
ctx.fillStyle = "#000000";
ctx.fillText("E", btnE_x + 5, btnE_y + 34);
// SPACE
btnSPACE_x = btnE_x + btnE_w + buttonGap;
btnSPACE_y = btnE_y;
ctx.globalAlpha = .5;
ctx.fillStyle = "#F1C40F";
ctx.fillRect(btnSPACE_x, btnSPACE_y, btnSPACE_w, btnSPACE_h);
ctx.globalAlpha = 1;
ctx.fillStyle = "#000000";
ctx.fillText("Space", btnSPACE_x + 5, btnSPACE_y + 34);
}
// <---
var deltatime = Date.now() - oldtime;
deltatime > 1E3 / 60 ? z -= .01 : deltatime < 1E3 / 65 && (z += .01);
.4 > z && (z = .4);
1 < z && (z = 1)
drawRoomInfo();
}
function drawRoomInfo() {
ctx.globalAlpha = .8;
if (showDarkTheme == true) {
ctx.fillStyle = '#FFFFFF';
} else {
ctx.fillStyle = '#000000';
}
var margin = 20;
var fontSize = 16;
ctx.font = fontSize + "px Ubuntu";
var txt_y = nCanvas.height - fontSize * 10 - 30;
txt_y += fontSize;
txt = 'Ping: ' + 31;
txt_w = ctx.measureText(txt).width;
ctx.fillText(txt, nCanvas.width - txt_w - margin, txt_y);
txt_y += fontSize;
txt = 'Fps: ' + Math.round(fps_value);
txt_w = ctx.measureText(txt).width;
ctx.fillText(txt, nCanvas.width - txt_w - margin, txt_y);
txt_y += fontSize; // 1 satır boşluk
txt_y += fontSize;
var txt = "Parça boyutu" + ': ' + "220.000";
var txt_w = ctx.measureText(txt).width;
ctx.fillText(txt, nCanvas.width - txt_w - margin, txt_y);
txt_y += fontSize;
txt = "Parça sayısı" + ': ' + "25";
txt_w = ctx.measureText(txt).width;
ctx.fillText(txt, nCanvas.width - txt_w - margin, txt_y);
txt_y += fontSize;
txt = "Diken" + ': ' + this.diken;
txt_w = ctx.measureText(txt).width;
ctx.fillText(txt, nCanvas.width - txt_w - margin, txt_y);
txt_y += fontSize;
txt = "Oyuncu" + ': ' + this.oyuncu;
txt_w = ctx.measureText(txt).width;
ctx.fillText(txt, nCanvas.width - txt_w - margin, txt_y);
txt_y += fontSize;
txt = "İzleyici" + ': ' + this.spectplayer;
txt_w = ctx.measureText(txt).width;
ctx.fillText(txt, nCanvas.width - txt_w - margin, txt_y);
}
function drawTouch(ctx) {
ctx.save();
if (touchable) {
for (var i = 0; i < touches.length; i++) {
var touch = touches[i];
if (touch.identifier == leftTouchID) {
ctx.beginPath();
ctx.strokeStyle = "#0096ff";
ctx.lineWidth = 6;
ctx.arc(leftTouchStartPos.x, leftTouchStartPos.y, 40, 0, Math.PI * 2, true);
ctx.stroke();
ctx.beginPath();
ctx.strokeStyle = "#0096ff";
ctx.lineWidth = 2;
ctx.arc(leftTouchStartPos.x, leftTouchStartPos.y, 60, 0, Math.PI * 2, true);
ctx.stroke();
ctx.beginPath();
ctx.strokeStyle = "#0096ff";
ctx.arc(leftTouchPos.x, leftTouchPos.y, 40, 0, Math.PI * 2, true);
ctx.stroke();
} else {
ctx.beginPath();
//ctx.fillStyle = "#0096ff";
//ctx.fillText("touch id : "+touch.identifier+" x:"+touch.clientX+" y:"+touch.clientY, touch.clientX+30, touch.clientY-30);
ctx.beginPath();
ctx.strokeStyle = "#0096ff";
ctx.lineWidth = "6";
ctx.arc(touch.clientX, touch.clientY, 40, 0, Math.PI * 2, true);
ctx.stroke();
}
}
} else {
//ctx.fillStyle = "white";
//ctx.fillText("mouse : "+touchX+", "+touchY, touchX, touchY);
}
//c.fillText("hello", 0,0);
ctx.restore();
}
function drawGrid() {
ctx.fillStyle = showDarkTheme ? "#111111" : "#F2FBFF";
ctx.fillRect(0, 0, canvasWidth, canvasHeight);
ctx.save();
ctx.strokeStyle = showDarkTheme ? "#AAAAAA" : "#000000";
ctx.globalAlpha = .2;
ctx.scale(viewZoom, viewZoom);
var a = canvasWidth / viewZoom,
b = canvasHeight / viewZoom;
for (var c = -.5 + (-nodeX + a / 2) % 50; c < a; c += 50) {
ctx.beginPath();
ctx.moveTo(c, 0);
ctx.lineTo(c, b);
ctx.stroke();
}
for (c = -.5 + (-nodeY + b / 2) % 50; c < b; c += 50) {
ctx.beginPath();
ctx.moveTo(0, c);
ctx.lineTo(a, c);
ctx.stroke();
}
ctx.restore()
}
function drawSplitIcon(ctx) {
//if (touchable && splitIcon.width) {
//var size = ~~ (canvasWidth / 7);
//ctx.drawImage(splitIcon, canvasWidth - size, canvasHeight - size, size, size);
//}
//if (touchable && splitIcon.width) {
// var size = ~~ (canvasWidth / 7);
//ctx.drawImage(ejectIcon, canvasWidth - size, canvasHeight - 2*size-10, size, size);
//}
}
function calcUserScore() {
for (var score = 0, i = 0; i < playerCells.length; i++) {
score += playerCells[i].getScore();
}
//score += playerCells[i].nSize * playerCells[i].nSize;
return score
}
function drawLeaderBoard() {
lbCanvas = null;
if (teamScores !== null || leaderBoard.length !== 0) {
if (teamScores !== null || !showName || showName) {
lbCanvas = document.createElement("canvas");
const ctx = lbCanvas.getContext("2d");
let boardLength = 60;
boardLength += (teamScores === null) ? 24 * leaderBoard.length : 180;
const scaleFactor = Math.min(0.22 * canvasHeight, Math.min(250, 0.3 * canvasWidth)) / 250;
lbCanvas.width = 250 * scaleFactor;
lbCanvas.height = boardLength * scaleFactor;
ctx.scale(scaleFactor, scaleFactor);
ctx.globalAlpha = 0.3;
ctx.fillStyle = "#000000";
ctx.fillRect(0, 0, 250, boardLength);
ctx.globalAlpha = 1;
if (teamScores === null) {
drawLeaderBoardWithoutTeamScores(ctx);
} else {
drawLeaderBoardWithTeamScores(ctx);
}
}
}
}
function drawLeaderBoardWithoutTeamScores(ctx) {
ctx.fillStyle = "#FFFF00";
ctx.font = "20px Ubuntu";
ctx.fillText(lastWinner, 125 - ctx.measureText(lastWinner).width / 2, 40);
ctx.fillStyle = "#FFFFFF";
leaderBoard.forEach((item, i) => {
let name = item.name?.trim() || 'Agarv';
let txt = noRanking ? name : `${i + 1}. ${name}`;
let txtWidth = ctx.measureText(txt).width;
setColorForRankedItem(ctx, item);
ctx.fillText(txt, 125 - txtWidth / 2, 70 + 24 * i);
});
}
function setColorForRankedItem(ctx, item) {
// console.log(" İZLENEN OYUNCU PID"+item.pID)
if (item.pID === pID) {
ctx.fillStyle = "#FFAAAA"; // Kendi oyuncu rengi
} else if (item.teamCode === my_team_code && my_team_code.length > 0) {
ctx.fillStyle = "#FFFF00"; // Takım rengi
console.log(`${my_team_code} takımda biri var`);
} else if (item.clan_id === my_clan_id) {
ctx.fillStyle = "#0000FF"; // Klan rengi
} else if (item.pID == spectatorId) { // İzlenen oyuncu kontrolü
ctx.fillStyle = "#ff0000"; // Pembe renk
} else {
ctx.fillStyle = "#FFFFFF"; // Varsayılan renk
}
}
function drawLeaderBoardWithTeamScores(ctx) {
const teamColorMap = {
'Kırmızı': "#FF0000",
'YeÅŸil': "#00FF00",
'Mavi': "#0000FF"
};
ctx.fillStyle = teamColorMap[lastWinner] || "#FFFFFF"; // Default color
ctx.font = "20px Ubuntu";
ctx.fillText(lastWinner, 100 - ctx.measureText(lastWinner).width / 2, 40);
let startAngle = 0;
teamScores.forEach((score, index) => {
const endAngle = startAngle + score * Math.PI * 2;
ctx.fillStyle = teamColor[index + 1];
ctx.beginPath();
ctx.moveTo(100, 140);
ctx.arc(100, 140, 80, startAngle, endAngle, false);
ctx.fill();
startAngle = endAngle;
});
}
/*eski
function drawLeaderBoard() {
lbCanvas = null;
if (null != teamScores || 0 != leaderBoard.length)
if (null != teamScores || showName) {
lbCanvas = document.createElement("canvas");
var ctx = lbCanvas.getContext("2d"),
boardLength = 60;
boardLength = null == teamScores ? boardLength + 24 * leaderBoard.length : boardLength + 180;
var scaleFactor = Math.min(0.22 * canvasHeight, Math.min(250, .3 * canvasWidth)) / 250;
lbCanvas.width = 250 * scaleFactor;
lbCanvas.height = boardLength * scaleFactor;
ctx.scale(scaleFactor, scaleFactor);
ctx.globalAlpha = .3;
ctx.fillStyle = "#000000";
ctx.fillRect(0, 0, 250, boardLength);
ctx.globalAlpha = 1;
//if ( this.lastWinner!=null ){
//}
var b;
var i;
var tmp = document.getElementById("myTeam");
if (null == teamScores) {
ctx.fillStyle = "#FFFF00";
ctx.font = "20px Ubuntu";
ctx.fillText(lastWinner, 125 - ctx.measureText(lastWinner).width / 2, 40);
ctx.fillStyle = "#FFFFFF";
for (let i = 0; i < leaderBoard.length; i++) {
let item = leaderBoard[i];
let name = 'AgarZ.com';
if (item.name != null) {
name = item.name.trim();
if (name == '') {
name = 'AgarZ.com';
}
}
let txt;
if (!noRanking) {
txt = "" + (i + 1) + ". " + name;
} else {
txt = name;
}
let txt_w = ctx.measureText(txt).width;
//ctx.fillText(txt, 125 - txt_w/ 2, 70 + 24 * i);
if (item.pID == pID) {
// ctx.font = "5px Ubuntu";
ctx.fillStyle = "#FFAAAA";
} else if (item.teamCode == my_team_code && my_team_code.length > 0) {
ctx.fillStyle = "#FFFF00";
console.log(my_team_code+" takımda biri var")
} else if (item.clan_id == my_clan_id) {
// console.log("İki klanda Eşit");
// my_clan_id = 0;
// if ( playerCells.length>0 ){
// if ( item.clan_id !== 0 ){
// my_clan_id = item.clan_id;
// console.log(my_clan_id+" KLAN İD MY");
// }
// }
ctx.fillStyle = "#0000FF";
} else {
//ctx.font = "20px Ubuntu";
ctx.fillStyle = "#FFFFFF";
}
ctx.fillText(txt, 125 - txt_w / 2, 70 + 24 * i);
//ctx.fillText(txt, 5, 70 + 24 * i);
}
} else {
switch (lastWinner) {
case 'Kırmızı':
ctx.fillStyle = "#FF0000";
break;
case 'YeÅŸil':
ctx.fillStyle = "#00FF00";
break;
case 'Mavi':
ctx.fillStyle = "#0000FF";
break;
}
ctx.font = "20px Ubuntu";
ctx.fillText(lastWinner, 100 - ctx.measureText(lastWinner).width / 2, 40);
for (b = c = 0; b < teamScores.length; ++b) {
var d = c + teamScores[b] * Math.PI * 2;
ctx.fillStyle = teamColor[b + 1];
ctx.beginPath();
ctx.moveTo(100, 140);
ctx.arc(100, 140, 80, c, d, false);
ctx.fill();
c = d
}
}
}
}*/
function Cell(uid, ux, uy, usize, ucolor, uname, uclanName) {
this.id = uid;
this.ox = this.x = ux;
this.oy = this.y = uy;
this.oSize = this.size = usize;
this.color = ucolor;
this.points = [];
this.pointsAcc = [];
this.createPoints();
this.setName(uname)
this.setClanName(uclanName)
}
function UText(usize, ucolor, ustroke, ustrokecolor, uoffset) {
if (usize) this._size = usize;
if (ucolor) this._color = ucolor;
this._stroke = !!ustroke;
if (ustrokecolor) this._strokeColor = ustrokecolor;
this._offset = uoffset || 0; // Pozisyon bilgisi
}
wHandle.onClickPlay = function() {
hasOverlay = false;
let nick = document.getElementById('nick').value;
//var nick = document.getElementById('nick').value;
//var skin = document.getElementById('txtSkin').value;
//userNickName = nick;
//userSkinName = skin;
sendUserId();
userScoreCurrent = 0;
userScoreMax = 0;
spectatorId = -1;
playerId = -1;
if (ws == null || ws.readyState == 2 || ws.readyState == 3) {
wsClose();
wsConnect();
} else {
hideOverlays();
sendUserId();
// sendUserToken();
debounce(sendPlayInit(), 1000);
}
};
function clickclickplay() {
// AJAX ile sunucudan veriyi çek
}
wHandle.setSkins = function(arg) {
showSkin = arg;
localStorage.showSkin = arg;
};
wHandle.setNames = function(arg) {
showName = arg;
localStorage.showName = arg;
};
wHandle.setDarkTheme = function(arg) {
showDarkTheme = arg;
localStorage.showDarkTheme = arg;
};
// wHandle.setFps = function(arg) {
// showFps = arg;
// localStorage.showFps = arg;
// };
wHandle.setNoColor = function(arg) {
noColor = arg;
localStorage.noColor = arg;
};
// wHandle.setShowMass = function (arg) {
// showMass = arg
//};
wHandle.setSmooth = function(arg) {
smoothRender = arg ? 2 : .9;
localStorage.smoothRender = arg ? 2 : .9;
};
wHandle.setTransparent = function(arg) {
transparentRender = arg;
localStorage.transparentRender = arg;
};
wHandle.setShowScore = function(arg) {
showScore = arg;
localStorage.showScore = arg;
};
wHandle.setOtoStart = function(arg) {
otostart = arg;
localStorage.otostart = arg;
};
wHandle.setKenar = function(arg) {
kenar = arg;
localStorage.kenar = arg;
};
wHandle.setclanNameHider = function(arg) {
clanNameHider = arg;
localStorage.clanNameHider = arg;
};
wHandle.setOtoMakro = function(arg) {
otoMakro = arg;
localStorage.otoMakro = arg;
};
wHandle.setSimpleGreen = function(arg) {
simpleGreen = arg;
localStorage.simpleGreen = arg;
};
wHandle.setTouchButtons = function(arg) {
touchButtons = arg;
localStorage.touchButtons = arg;
};
wHandle.setHideChat = function(arg) {
hideChat = arg;
localStorage.hideChat = arg;
if (arg) {
wjQuery("#chat_textbox").hide();
} else {
wjQuery("#chat_textbox").show();
}
};
wHandle.spectate = function() {
spectatorId = -1;
playerId = -1;
wHandle.isSpectating = true;
hideOverlays();
wjQuery("#adsBottom").show();
// sendUserToken();
if (ws == null || ws.readyState == 2 || ws.readyState == 3) {
//userNickName = null;
//userSkinName = null;
wsConnect();
} else {
//userNickName = null;
sendUint8(1);
}
};
wHandle.setGameMode = function(arg) {
if (arg != gameMode) {
gameMode = arg;
wsConnect();
}
};
// wHandle.setskinquality = function (arg) {
// localStorage.skinQuality = arg;
// };
wHandle.connect = wsConnect;
wHandle.sendUserToken = sendUserToken;
/*
var response = null;
wjQuery.ajax({
type: "POST",
dataType: "text",
url: "skins_metadata/skinlist",
done:function() {
//alert( "success" );
},
success: function (data) {
response = data.split('\n');
knownNameDict = [];
for (var i = 0; i < response.length; i++) {
knownNameDict.push(response[i]);
}
},
error: function(jqxhr, status, errorThrown){
var dummy = 0;
}
});
*/
var delay = 500,
oldX = -1,
oldY = -1,
Canvas = null,
z = 1,
scoreText = null,
skins = {},
wings = {},
skinsLoaded = {},
wingLoaded = {},
//knownNameDict = [],
//knownNameDict_noDisp = ["8", "nasa"],
ib = ["_canvas'blob"];
Cell.prototype = {
id: 0,
points: null,
pointsAcc: null,
name: null,
skinName: null,
hasSkinName: false,
nameCache: null,
sizeCache: null,
x: 0,
y: 0,
size: 0,
ox: 0,
oy: 0,
oSize: 0,
nx: 0,
ny: 0,
nSize: 0,
flag: 0, //what does this mean
updateTime: 0,
updateCode: 0,
drawTime: 0,
destroyed: false,
isVirus: false,
isAgitated: false,
wasSimpleDrawing: true,
destroy: function() {
var tmp;
for (tmp = 0; tmp < nodelist.length; tmp++)
if (nodelist[tmp] == this) {
nodelist.splice(tmp, 1);
break
}
delete nodes[this.id];
tmp = playerCells.indexOf(this);
if (-1 != tmp) {
ua = true;
playerCells.splice(tmp, 1);
}
tmp = nodesOnScreen.indexOf(this.id);
if (-1 != tmp) {
nodesOnScreen.splice(tmp, 1);
}
this.destroyed = true;
Cells.push(this)
},
getNameSize: function() {
return Math.max(~~(.3 * this.size), 24)
},
getClanSize: function() {
return Math.max(~~(.2 * this.size), 6)
},
setName: function(a) {
if (this.name = a) {
if (null == this.nameCache) {
this.nameCache = new UText(this.getNameSize(), "#FFFFFF", true, "#000000");
this.nameCache.setValue(this.name);
} else {
this.nameCache.setSize(this.getNameSize());
this.nameCache.setValue(this.name);
}
}
},
setClanName: function(a) {
if (this.clanName = a) {
if (null == this.clanCache) {
this.clanCache = new UText(this.getClanSize(), "#FFFFFF", true, "#000000");
this.clanCache.setValue(this.clanName);
} else {
this.clanCache.setSize(this.getClanSize());
this.clanCache.setValue(this.clanName);
}
}
},
setSkinName: function(a) {
this.skinName = a;
},
setWingName: function(a) {
this.wingName = a;
// console.log(a);
},
createPoints: function() {
for (var samplenum = this.getNumPoints(); this.points.length > samplenum;) {
var rand = ~~(Math.random() * this.points.length);
this.points.splice(rand, 1);
this.pointsAcc.splice(rand, 1)
}
if (0 == this.points.length && 0 < samplenum) {
this.points.push({
ref: this,
size: this.size,
x: this.x,
y: this.y
});
this.pointsAcc.push(Math.random() - .5);
}
while (this.points.length < samplenum) {
var rand2 = ~~(Math.random() * this.points.length),
point = this.points[rand2];
this.points.splice(rand2, 0, {
ref: this,
size: point.size,
x: point.x,
y: point.y
});
this.pointsAcc.splice(rand2, 0, this.pointsAcc[rand2])
}
},
getNumPoints: function() {
if (0 == this.id) return 16;
var a = 10;
if (20 > this.size) a = 0;
if (this.isVirus) a = 30;
var b = this.size;
if (!this.isVirus)(b *= viewZoom);
b *= z;
if (this.flag & 32)(b *= .25);
return ~~Math.max(b, a);
},
movePoints: function() {
this.createPoints();
for (var points = this.points, pointsacc = this.pointsAcc, numpoints = points.length, i = 0; i < numpoints; ++i) {
var pos1 = pointsacc[(i - 1 + numpoints) % numpoints],
pos2 = pointsacc[(i + 1) % numpoints];
pointsacc[i] += (Math.random() - .5) * (this.isAgitated ? 3 : 1);
pointsacc[i] *= .7;
10 < pointsacc[i] && (pointsacc[i] = 10); -
10 > pointsacc[i] && (pointsacc[i] = -10);
pointsacc[i] = (pos1 + pos2 + 8 * pointsacc[i]) / 10
}
for (var ref = this, isvirus = this.isVirus ? 0 : (this.id / 1E3 + timestamp / 1E4) % (2 * Math.PI), j = 0; j < numpoints; ++j) {
var f = points[j].size,
e = points[(j - 1 + numpoints) % numpoints].size,
m = points[(j + 1) % numpoints].size;
if (15 < this.size && null != qTree && 20 < this.size * viewZoom && 0 != this.id) {
var l = false,
n = points[j].x,
q = points[j].y;
qTree.retrieve2(n - 5, q - 5, 10, 10, function(a) {
if (a.ref != ref && 25 > (n - a.x) * (n - a.x) + (q - a.y) * (q - a.y)) {
l = true;
}
});
if (!l && points[j].x < leftPos || points[j].y < topPos || points[j].x > rightPos || points[j].y > bottomPos) {
l = true;
}
if (l) {
if (0 < pointsacc[j]) {
(pointsacc[j] = 0);
}
pointsacc[j] -= 1;
}
}
f += pointsacc[j];
0 > f && (f = 0);
f = this.isAgitated ? (19 * f + this.size) / 20 : (12 * f + this.size) / 13;
points[j].size = (e + m + 8 * f) / 10;
e = 2 * Math.PI / numpoints;
m = this.points[j].size;
this.isVirus && 0 == j % 2 && (m += 5);
points[j].x = this.x + Math.cos(e * j + isvirus) * m;
points[j].y = this.y + Math.sin(e * j + isvirus) * m
}
},
updatePos: function() {
if (0 == this.id) return 1;
var a;
a = (timestamp - this.updateTime) / 120;
a = 0 > a ? 0 : 1 < a ? 1 : a;
var b = 0 > a ? 0 : 1 < a ? 1 : a;
this.getNameSize();
if (this.destroyed && 1 <= b) {
var c = Cells.indexOf(this); -
1 != c && Cells.splice(c, 1)
}
this.x = a * (this.nx - this.ox) + this.ox;
this.y = a * (this.ny - this.oy) + this.oy;
this.size = b * (this.nSize - this.oSize) + this.oSize;
return b;
},
shouldRender: function() {
if (0 == this.id) {
return true
} else {
return !(this.x + this.size + 40 < nodeX - canvasWidth / 2 / viewZoom ||
this.y + this.size + 40 < nodeY - canvasHeight / 2 / viewZoom ||
this.x - this.size - 40 > nodeX + canvasWidth / 2 / viewZoom ||
this.y - this.size - 40 > nodeY + canvasHeight / 2 / viewZoom);
}
},
getScore: function() {
var r = ~~(this.nSize * this.nSize / 100);
return r;
},
drawOneCell: function(ctx) {
if (this.shouldRender()) {
var b = (0 != this.id && !this.isVirus && !this.isAgitated && smoothRender > viewZoom);
if (5 > this.getNumPoints()) b = true;
if (this.wasSimpleDrawing && !b)
for (var c = 0; c < this.points.length; c++) this.points[c].size = this.size;
this.wasSimpleDrawing = b;
ctx.save();
this.drawTime = timestamp;
c = this.updatePos();
this.destroyed && (ctx.globalAlpha *= 1 - c);
ctx.lineWidth = 10;
ctx.lineCap = "round";
ctx.lineJoin = this.isVirus ? "miter" : "round";
if (this.score < 20) {
console.log("Bu yem");
}
if (noColor) {
ctx.fillStyle = "#FFFFFF";
ctx.strokeStyle = "#AAAAAA";
} else {
ctx.fillStyle = this.color;
ctx.strokeStyle = this.color;
}
if (b || simpleGreen == true) {
ctx.beginPath();
ctx.arc(this.x, this.y, this.size, 0, 2 * Math.PI, false);
} else {
this.movePoints();
ctx.beginPath();
var d = this.getNumPoints();
ctx.moveTo(this.points[0].x, this.points[0].y);
for (c = 1; c <= d; ++c) {
var e = c % d;
ctx.lineTo(this.points[e].x, this.points[e].y)
}
}
ctx.closePath();
c = null;
if (!this.isAgitated && showSkin && ':teams' != gameMode) {
if (this.skinName != "") {
// console.log(this.skinName+" assasa");
if (!skins.hasOwnProperty(this.skinName)) {
skins[this.skinName] = new Image;
skins[this.skinName].src = SITE_NAME + "skins/" + this.skinName + '.png';
// console.log(skins[this.skinName].src = SITE_NAME+"skins/" + this.skinName + '.png');
skins[this.skinName].onload = function() {
skinsLoaded[this.src] = true;
}
}
if (0 != skins[this.skinName].width && skins[this.skinName].complete) {
c = skins[this.skinName];
}
}
if (this.wingName != "") {
// console.log(this.wingName+" wing");
if (!wings.hasOwnProperty(this.wingName)) {
wings[this.wingName] = new Image;
wings[this.wingName].src = SITE_NAME + "wing/" + this.wingName + '.png';
console.log(wings[this.wingName].src = SITE_NAME + "wing/" + this.wingName + '.png');
wings[this.wingName].onload = function() {
wingLoaded[this.src] = true;
}
}
if (0 != wings[this.wingName].width && wings[this.wingName].complete) {
c = wings[this.wingName];
}
}
}
c = (e = c) ? -1 != ib.indexOf(this.skinName) : false;
b || ctx.stroke();
ctx.fill();
if (!(null == e || c)) {
if (skinsLoaded.hasOwnProperty(e.src)) {
ctx.save();
ctx.clip();
ctx.drawImage(e, this.x - this.size, this.y - this.size, 2 * this.size, 2 * this.size);
ctx.restore();
}
if (wingLoaded.hasOwnProperty(e.src)) {
ctx.save();
// viewRange fonksiyonundan gelen orantılı zoom değerini al
var zoomValue = viewRange();
// Kanat genişliğini belirle
var wingWidth = 60;
var wingHeight = 20;
var newWidth = this.size + 1;
var newHeight = this.size + 1;
// Hücrenin solundaki kanadı çiz
ctx.drawImage(e, this.x - newWidth - this.size - 5, this.y - newHeight - this.size - 5, newWidth, 2 * (this.size + 5));
// Hücreyi çiz
ctx.beginPath();
ctx.arc(this.x, this.y, this.size, 0, Math.PI * 2, false);
ctx.strokeStyle = "#FFFFFF";
ctx.lineWidth = zoomValue;
ctx.stroke();
ctx.closePath();
// Hücrenin sağındaki kanadı çiz ve boyunu sadece değiştir, tersine çevir
ctx.save();
ctx.scale(-1, 1); // X ekseninde tersine çevirme
ctx.drawImage(e, -this.x - newWidth - this.size - 5, this.y - newHeight - this.size - 5, newWidth, 2 * (this.size + 5));
ctx.restore();
ctx.restore();
}
}
if ((noColor || 15 < this.size) && !b) {
ctx.strokeStyle = '#000000';
ctx.globalAlpha *= .1;
ctx.stroke();
}
ctx.globalAlpha = 1;
if (null != e && c) {
if (skinsLoaded.hasOwnProperty(e.src)) {
ctx.drawImage(e, this.x - 2 * this.size, this.y - 2 * this.size, 4 * this.size, 4 * this.size);
}
if (wingLoaded.hasOwnProperty(e.src)) {
ctx.drawImage(e, this.x - 2 * this.size, this.y - 2 * this.size, 4 * this.size, 4 * this.size);
}
}
c = -1 != playerCells.indexOf(this);
var ncache;
var clanCache;
//draw name
if (this.id !== 0) {
const b = ~~this.y;
const isAdmin = my_yetki === "Admin";
const isCurrentAdmin = this.yetki === "Admin";
const userId = this.userId;
if ((showName || c) && this.name && this.nameCache) {
// Admin yetkisi kontrolü
if (isAdmin && !isCurrentAdmin && !this.isVirus) {
ctx.font = `${this.getNameSize() - 100}px Ubuntu`;
ctx.fillStyle = "#00fff3";
const clanStrWidth = ctx.measureText(userId).width;
// Hücrenin altına yerleştirmek için Y koordinatını hesapla
const clanY = this.y + this.size + 20; // Hücre boyutu + 20 piksel boşluk
ctx.fillText(userId, this.x - clanStrWidth * 0.5, clanY);
}
// Admin ibaresi yazdırma
if ((isAdmin && isCurrentAdmin && !this.isVirus) || isCurrentAdmin) {
ctx.font = `${this.getNameSize() - 10}px 'Tangerine'`;
ctx.fillStyle = "#FF0000";
const adminStr = "Admin";
const adminStrWidth = ctx.measureText(adminStr).width;
const adminY = b - this.getNameSize() - (isAdmin ? 20 : 10);
ctx.fillText(adminStr, this.x - adminStrWidth * 0.5, adminY);
}
// İsim önbelleğini güncelle
ncache = this.nameCache;
ncache.setValue(this.name);
ncache.setSize(this.getNameSize());
const ratio = Math.ceil(10 * viewZoom) / 10;
ncache.setScale(ratio);
let strokeColor = "#FFFFFF";
let fillColor = "#FFFFFF";
if (nodesOnScreen.indexOf(this.id) === -1) {
if (my_clan_id > 1 && this.clan_id === my_clan_id) {
fillColor = "#0000FF"; // Klan rengi
} else if (my_team_code.length > 0 && this.teamCode === my_team_code) {
fillColor = "#FFFF00"; // Takım rengi
}
}
// ncache.setStrokeColor(strokeColor);
ncache.setColor(fillColor);
const rnchache = ncache.render();
const m = ~~(rnchache.width / ratio);
const h = ~~(rnchache.height / ratio);
ctx.drawImage(rnchache, ~~this.x - ~~(m / 2), b - ~~(h / 2), m, h);
}
if (!isCurrentAdmin && this.clanName && this.size > 100 && clanNameHider) {
let clanFillColor = "#FFFFFF";
if (nodesOnScreen.indexOf(this.id) === -1) {
if (my_clan_id > 1 && this.clan_id === my_clan_id) {
clanFillColor = "#0000FF"; // Klan rengi
} else if (my_team_code.length > 0 && this.teamCode === my_team_code) {
clanFillColor = "#FFFF00"; // Takım rengi
}
}
clanCache = this.clanCache;
const ratio = Math.ceil(10 * viewZoom) / 10;
this.clanCache.setScale(ratio);
// this.clanCache.setStrokeColor("#000000"); // Kenarlık rengi
this.clanCache.setColor(clanFillColor); // Metin rengi
// Klan adını ayarlayın (Eğer daha önce ayarlamadıysanız)
this.clanCache.setValue(this.clanName); // Klan ismini ayarlayın
// Clan adını ekrana çizdir
const clanCacheRendered = this.clanCache.render();
// Hata ayıklama: render edilen görüntü boyutlarını kontrol et
if (clanCacheRendered.width === 0 || clanCacheRendered.height === 0) {
console.warn("Klan ismi render edilmedi veya boyutları sıfır:", clanCacheRendered);
// return; // Çizim işlemini durdur
}
const clanWidth = ~~(clanCacheRendered.width / ratio);
const clanHeight = ~~(clanCacheRendered.height / ratio);
// Y koordinatını yukarı kaydırın, hücre boyutuna bağlı olarak ayarlanmış offset
const cellHeight = this.size; // Hücrenin yüksekliği
const yOffset = cellHeight * 0.1; // Klan isminin hücrenin üst kısmına olan mesafesi
const yPosition = ~~this.y - clanHeight - yOffset; // Yeni y pozisyonu
ctx.drawImage(clanCacheRendered, ~~this.x - ~~(clanWidth / 2), yPosition, clanWidth, clanHeight);
}
// Skor gösterimi
if (showScore && this.size > 35 && !this.isVirus) {
ctx.fillStyle = (nodesOnScreen.indexOf(this.id) === -1 && my_clan_id > 1 && this.clan_id === my_clan_id) ? "#0000FF" :
(nodesOnScreen.indexOf(this.id) === -1 && my_team_code.length > 0 && this.teamCode === my_team_code) ? "#FFFF00" : "#FFFFFF";
ctx.font = `${this.getNameSize()}px Ubuntu`;
const str = this.getScore().toString();
const strWidth = ctx.measureText(str).width;
// Skor y koordinatını hücre boyutuna göre ayarlıyoruz
const cellHeight = this.size; // Hücrenin yüksekliğini alıyoruz
const scoreYOffset = cellHeight * 0.4; // Skoru hücrenin ortasına 20 piksel ekleyerek yerleştiriyoruz
// Skoru çiziyoruz
ctx.fillText(numberWithDotted(str), this.x - strWidth * 0.5, this.y + scoreYOffset);
}
}
ctx.restore();
}
}
};
UText.prototype = {
_value: "",
_color: "#000000",
_stroke: false,
_strokeColor: "#000000",
_size: 16,
_canvas: null,
_ctx: null,
_dirty: false,
_scale: 1,
setSize: function(a) {
if (this._size != a) {
this._size = a;
this._dirty = true;
}
},
setScale: function(a) {
if (this._scale != a) {
this._scale = a;
this._dirty = true;
}
},
setColor: function(a) {
if (this._color != a) {
this._color = a;
this._dirty = true;
}
},
setStrokeColor: function(a) {
if (this._strokeColor != a) {
this._strokeColor = a;
this._dirty = true;
}
},
setValue: function(a) {
if (a != this._value) {
this._value = a;
this._dirty = true;
}
},
render: function() {
if (null == this._canvas) {
this._canvas = document.createElement("canvas");
this._ctx = this._canvas.getContext("2d");
}
if (this._dirty) {
this._dirty = false;
var canvas = this._canvas,
ctx = this._ctx,
value = this._value,
scale = this._scale,
fontsize = this._size,
font = fontsize + 'px Ubuntu';
ctx.font = font;
var h = ~~(.2 * fontsize);
canvas.width = (ctx.measureText(value).width + 6) * scale;
canvas.height = (fontsize + h) * scale;
ctx.font = font;
ctx.scale(scale, scale);
ctx.globalAlpha = 1;
ctx.lineWidth = 3;
ctx.strokeStyle = this._strokeColor;
ctx.fillStyle = this._color;
this._stroke && ctx.strokeText(value, 3, fontsize - h / 2);
ctx.fillText(value, 3, fontsize - h / 2)
}
return this._canvas
},
getWidth: function() {
return (ctx.measureText(this._value).width +
6);
}
};
Date.now || (Date.now = function() {
return (new Date).getTime()
});
var Quad = {
init: function(args) {
function Node(x, y, w, h, depth) {
this.x = x;
this.y = y;
this.w = w;
this.h = h;
this.depth = depth;
this.items = [];
this.nodes = []
}
var c = args.maxChildren || 2,
d = args.maxDepth || 4;
Node.prototype = {
x: 0,
y: 0,
w: 0,
h: 0,
depth: 0,
items: null,
nodes: null,
exists: function(selector) {
for (var i = 0; i < this.items.length; ++i) {
var item = this.items[i];
if (item.x >= selector.x && item.y >= selector.y && item.x < selector.x + selector.w && item.y < selector.y + selector.h) return true
}
if (0 != this.nodes.length) {
var self = this;
return this.findOverlappingNodes(selector, function(dir) {
return self.nodes[dir].exists(selector)
})
}
return false;
},
retrieve: function(item, callback) {
for (var i = 0; i < this.items.length; ++i) callback(this.items[i]);
if (0 != this.nodes.length) {
var self = this;
this.findOverlappingNodes(item, function(dir) {
self.nodes[dir].retrieve(item, callback)
})
}
},
insert: function(a) {
if (0 != this.nodes.length) {
this.nodes[this.findInsertNode(a)].insert(a);
} else {
if (this.items.length >= c && this.depth < d) {
this.devide();
this.nodes[this.findInsertNode(a)].insert(a);
} else {
this.items.push(a);
}
}
},
findInsertNode: function(a) {
return a.x < this.x + this.w / 2 ? a.y < this.y + this.h / 2 ? 0 : 2 : a.y < this.y + this.h / 2 ? 1 : 3
},
findOverlappingNodes: function(a, b) {
return a.x < this.x + this.w / 2 && (a.y < this.y + this.h / 2 && b(0) || a.y >= this.y + this.h / 2 && b(2)) || a.x >= this.x + this.w / 2 && (a.y < this.y + this.h / 2 && b(1) || a.y >= this.y + this.h / 2 && b(3)) ? true : false
},
devide: function() {
var a = this.depth + 1,
c = this.w / 2,
d = this.h / 2;
this.nodes.push(new Node(this.x, this.y, c, d, a));
this.nodes.push(new Node(this.x + c, this.y, c, d, a));
this.nodes.push(new Node(this.x, this.y + d, c, d, a));
this.nodes.push(new Node(this.x + c, this.y + d, c, d, a));
a = this.items;
this.items = [];
for (c = 0; c < a.length; c++) this.insert(a[c])
},
clear: function() {
for (var a = 0; a < this.nodes.length; a++) this.nodes[a].clear();
this.items.length = 0;
this.nodes.length = 0
}
};
var internalSelector = {
x: 0,
y: 0,
w: 0,
h: 0
};
return {
root: new Node(args.minX, args.minY, args.maxX - args.minX, args.maxY - args.minY, 0),
insert: function(a) {
this.root.insert(a)
},
retrieve: function(a, b) {
this.root.retrieve(a, b)
},
retrieve2: function(a, b, c, d, callback) {
internalSelector.x = a;
internalSelector.y = b;
internalSelector.w = c;
internalSelector.h = d;
this.root.retrieve(internalSelector, callback)
},
exists: function(a) {
return this.root.exists(a)
},
clear: function() {
this.root.clear()
}
}
}
};
wHandle.onload = window_onLoad;
})(window, window.jQuery);