Graphuary, день 18
Шум в голове
Сегодня ради пущей красоты воспользовалась ещё белым поверх, но зато маркера два, а не три, всё (почти) честно :)
Сегодня ради пущей красоты воспользовалась ещё белым поверх, но зато маркера два, а не три, всё (почти) честно :)
Я собирался в понедельник итоги подвести, но работа меня съела и я забыл...
Если кто-то пропустил, загляните вот сюда.
В целом, количество голосов сейчас равно 22, что близко к числу постоянно активных пользователей, так что кворум можно считать набранным, но подожду до завтрашнего утра, вдруг кто-то не проголосовал ещё, а хотел.
Бойцов всё меньше:
Ну и моё переосмысление арта, который я видел в интернете лет 10 назад...
Ответ на пост Ответ на пост: А что? Так можно было?
Дорогой, уважаемый ебать его в рот доктор @Pepels рассказал практически типичную ситуацию про становление личности. От юного и неопытного наивного мальчика до взрослого состоявшегося мужчины, у которого есть свое мнение и право послать нахуй в любой подходящий момент.
Эту ситуацию можно разобрать по кирпичикам и разложить по полочкам.
Как мы знаем, опыта мы набираемся с годами, когда приходит мудрость и прочее. И, как правило, все начинается с первой, скажем так, фазы. Я хороший, и меня все любят. Это так называемая мной эпоха альтруистического долбоебизма.
В этот жизненный период мы искренне верим, что добро это бумеранг, что если я отложу свои дела, свои планы, свой сраный блядский плановый передёрг и побегу решать проблему какого-то ебанутого человека, то вселенная, ну хорошо, не вселенная, то этот человек запишет это мне в карму и когда-нибудь это мне воздастся.
Но все мы знаем, что воздастся максимум это хуем по лбу, и не более того, а являемся мы в этот период бесплатным приложением, или как вай фай в вкусные очки - все знают что он есть, может быть даже где-то пароль на видном месте, но никому в голову не придет заплатить за вай фай или сказать спасибо (кому блять...), он просто есть, просто должен работать и решать чужие проблемы.
И тут уже включается знаменитая на весь мир пословица "Кто везет, на том и едут" (Кэп, из раннего). Это в наше время даже не метафора, это прямо какой-то аксиома, закон. Есть одна лошадь, которая всегда согласна тащить телегу, даже с квадратными колесами. Ну нахуя трогать другую? Сейчас это сдохнет, тогда возьмем другую. Правильно? Правильно. Идеально.
Но эти заебы все время накапливаются, потому что ебашишь-ебашишь, а ебашеного не видно. Это голове где-то там откладывается. Тут как раз-таки приходит второй период жизни, понимание и осознание, что что-то пошло не так. Ну, назовем это накопление говна в вентиляторе.
Приходит время, и мы замечаем, что наши дела стоят.
Наши дела.
Планы какие-то начинают рушиться. Жизнь проходит мимо, потому что ты постоянно решаешь чужие проблемы.
Да схуяли.
А те, кому ты помогаешь, даже не замечают этого. Они уже стали, как за здрасте, ходить, обращаться к тебе, и для них твоя помощь становится не каким-то там подвигом, это обыденность, это уже стало почти твоей обязанностью. Ты же всегда помогаешь, ты же всегда добрый, ты же не отказываешь.
И внутри начинает копиться вот это вот хуйня, мерзкое, липкое чувство, что тебя используют как гандон. Но ты пока что не можешь ничего сказать, потому что сам согласился. Но я же сам сказал "да" в первый раз, во второй, в сотый, в тысячный раз. Я сам создал к себе такое отношение. Поэтому вроде как теперь уже и неудобно отказать, что ли, непонятно.
И тут к нам потихонечку подходит другой этап. Причем настойчиво нас стучит по плечу и говорит "Вась, очнись".
И назовем мы эту фазу идите нахуй, пидоры ебаные. Ну, эмансипация через матюки.
Окей.
Вот наступает момент истины, когда очередной хороший товарищ просит сделать что-то, что для него очень важно, а для тебя очередная ебля, которая отодвинет твои дела еще на неделю, и внутри начинает что-то щелкать.
Не сразу, конечно, сначала такой тихий шепот: а может пошел он нахуй?
а потом чуть громче
Потом приходит понимание, чтотого человека люто ненавидим. И вообще он пидор какой-то. Вообще охуел просить тут что-то. Блядь, иди сам делай хуйло.
И тут начинается фаза вежливых отказов.
Сначала вежливо, потом не очень. Потом через хуй. И самое удивительное, что мир не разрушился, все заебись. Те, кто привык на тебе ездить, сначала охуевают, а потом обижаются. А потом начинают искать другую лошадь. Потому что они, блядь, не привыкли ебашить сами. Они могут только кого-то запрячь. И находят они эту другую лошадь. Она есть. Она все время была там в стойле. Отъедалась, блядь. Оказывается, они вполне могут решать свои проблемы сами или найти другого лоха. Просто в тот момент времени было удобнее пользоваться тобой.
Вот и подошли мы с вами к зрелости, которую назовем деньги, плюшки или иди нахуй. Все, никакой морали. Мы выходим на новый уровень.
Наконец-то до нас дошло, что наше время, наши силы и наш ресурс в современном мире это товар. Мы готовы помогать.
Так, блять, легко.
В душе-то мы все равно добрые остались.
Но теперь доброта имеет свою цену.
Хочешь, чтоб я отложил свои дела и решил твою проблему? Отлично. Вот цена. Значит, давай. Пузырь конины, другой магарыч какой-то, либо баблом. В деньгах, в услуге, в выходном, в ящике коньяка.
Не хочешь платить? Пошел нахуй, решай сам. Ищи лошадь, которая работает бесплатно.
И что самое забавное происходит? Те, кто действительно нас ценит, нас и наше время, с радостью платят, потому что они понимают ценность. А те, кто привык ездить бесплатно, отваливаются сами. Это охуительный фильтр, который сам собой возник. Пришел к нам с нашей зрелостью. Это просто заебись.
И в сухом остатке мы имеем, что фраза "Кто везет, на том и едут" -это не приговор. Это всего лишь маркер неопытности. Если на тебе едут, значит ты либо сам позволил, либо не умеешь говорить "нет", либо боишься показаться плохим.
Но на самом-то деле всем на тебя похуй. Хороший ты, плохой, вообще похуй.
Хуёвый я,да, да и в рот вас ебать. Пока мне платят деньги, мне вообще похуй, что вы там обо мне думаете. Тем более на работе.
Хуй его знает. Может, конечно, у кого-то работа это как семья, благополучная или неблагополучная. Но в принципе это работа, и хожу работу я в первую очередь за деньгами. А потом идите все нахуй.
И правильный подход ко всему этому, это осознанный выбор. Иногда мы можем везти, потому что нам не сложно. Или потому что человек какой-то нам дорогой или приятный. Но это должен быть наш выбор, а не автоматическая реакция на любой запрос. А когда мы устали, то нам надо иметь смелость послать нахуй. Громко, с матом, с чувством собственного достоинства. Потому что если мы не будем уважать свое время и свои силы, их не будет уважать никто.
В одном из тц в центре города пару лет назад открыли такую тему - фудмолл. Большой зал, где куча разных кафешек. Некий новый уровень фудкорта - можешь заказать сразу в нескольких, взять пикающую табличку и сесть за столик. Ну или на качельки, которые там тоже есть))
@kimpokom говорила, шо покажу. Вот))
Мимо пробегали со скоростью, поэтому без подробностей, но там больше 15 точек - ресторанов/кафешек/пекарен/баров. Есть как простенькие фастфудные, так и более хардовое типа ресторанчика с морепродуктами. Помню, видела, что у них там был хот-дог с щуплой осьминожки :D
И в целом есть из чего выбрать: бургеры, хинкали, роллы, пиццы, устрицы, фрукты в шоколаде, кофе, пиво, десерты...китайское, корейское, греческое, итальянское. Любой там найдёт что-то, мне кажется) Игровая комната для детей тоже имеется, плюс у них вечно какие-то фестивальчики, акции проводятся. Короче всё для привлечения внимания)
В прошлой серии вы видели: стены более непротицаемы.
В этой серии мы научим наш так шмалять белыми квадратами по сторонам! И будем убеждать себя, что это снаряды.
В первую очередь мы, получается, должны создать сущность снаряда. Оборачиваем это безобразие в класс:
export class Bullet {
constructor(x, y, direction, owner, power = 0) {
this.x = x;
this.y = y;
this.direction = direction;
this.speed = Speed.BULLET;
this.power = power;
this.owner = owner;
// Состояние
this.active = true;
}
}
Сущность пули помнит, кто её владелец, знает свою скорость и мощность. Мощность нам понадобится на следующих этапах. Например, стандартная пуля может только «брить» кирпичи, более мощная сможет уничтожать уже и бетонные/стальные блоки. В каких-то версиях пиратских танков была возможность даже сбривать кусты.
Далее у пули есть служебные методы, которые нужны для просчитывания коллизий, отрисовки положения в пространстве и т.д.
update(gameMap) {
if (!this.active) return;
// Вычисляем смещение
let dx = 0;
let dy = 0;
switch (this.direction) {
case Direction.UP:
dy = -this.speed;
break;
case Direction.DOWN:
dy = this.speed;
break;
case Direction.LEFT:
dx = -this.speed;
break;
case Direction.RIGHT:
dx = this.speed;
break;
}
// Новая позиция
const newX = this.x + dx;
const newY = this.y + dy;
// Проверка границ карты
if (newX < 0 || newX + BULLET_SIZE > LOGICAL_FIELD_SIZE ||
newY < 0 || newY + BULLET_SIZE > LOGICAL_FIELD_SIZE) {
this.destroy();
return;
}
// Проверка коллизий с тайлами
if (gameMap && this.checkTileCollision(newX, newY, gameMap)) {
return; // Пуля уничтожена в checkTileCollision
}
this.x = newX;
this.y = newY;
}
checkTileCollision(newX, newY, gameMap) {
const tiles = getTilesUnderEntity(newX, newY, BULLET_SIZE, BULLET_SIZE);
for (const {tx, ty} of tiles) {
const tileId = gameMap.getTile(tx, ty);
const tileDef = TILE_DEFS[tileId];
if (!tileDef) continue;
// Пуля блокируется этим тайлом?
if (tileDef.blocksBullet) {
this.destroy();
// TODO: Разрушение тайла (на следующем этапе)
return true;
}
}
return false;
}
destroy() {
if (!this.active) return;
this.active = false;
if (this.owner) {
this.owner.activeBullets = Math.max(0, this.owner.activeBullets - 1);
}
// TODO: Создание эффекта взрыва (Не скоро, ещё этапа через три)
}
render() {
if (!this.active) return;
const ctx = foregroundCtx;
// Конвертация логических координат в физические
const px = GAME_FIELD_X + this.x * GAME_SCALE;
const py = GAME_FIELD_Y + this.y * GAME_SCALE;
const size = BULLET_SIZE * GAME_SCALE;
// Рисуем пулю как белый квадрат
ctx.fillStyle = Colors.BULLET;
ctx.fillRect(px, py, size, size);
}
getBounds() {
return {
x: this.x,
y: this.y,
width: BULLET_SIZE,
height: BULLET_SIZE
};
}
В самом танке обновляем метод стрельбы. Раньше там не было нифига, теперь вот:
shoot() {
if (this.activeBullets >= this.bulletCount) {
return null;
}
//return null; - так было
// так стало:
// Вычисляем позицию пули (центр передней части танка)
let bulletX, bulletY;
const centerOffset = (TANK_SIZE - BULLET_SIZE) / 2;
switch (this.direction) {
case Direction.UP:
bulletX = this.x + centerOffset;
bulletY = this.y - BULLET_SIZE;
break;
case Direction.DOWN:
bulletX = this.x + centerOffset;
bulletY = this.y + TANK_SIZE;
break;
case Direction.LEFT:
bulletX = this.x - BULLET_SIZE;
bulletY = this.y + centerOffset;
break;
case Direction.RIGHT:
bulletX = this.x + TANK_SIZE;
bulletY = this.y + centerOffset;
break;
}
// Создаём пулю
const bullet = new Bullet(bulletX, bulletY, this.direction, this, this.bulletLevel);
this.activeBullets++;
return bullet;
}
Изменилась обработка пользовательского ввода
function processInput(player, gameMap = null, bullets = []) {
if (!player || player.destroyed) return;
// Обрабатываем клавиатуру
processKeyboardInput(player, gameMap, bullets);
// Обрабатываем геймпад
processGamepadInput(player, gameMap, bullets);
}
И вот тут я прям серьёзно задумался: «А не хуйню ли я делаю?». Как будто передавать карту и массив снарядов в обработку инпутов – гавно идея...
К следующему посту поправлю.
А пока вот так:
if (keys['Space'] || keys['Enter']) {
if (player.canShoot()) {
const bullet = player.shoot();
if (bullet) {
bullets.push(bullet);
}
}
}
В основном методе update теперь вызываем и апдейт всех пуль
for (const bullet of bullets) {
bullet.update(gameMap);
}
И в основном рендере их рисуем
// Рендер пуль
for (const bullet of bullets) {
bullet.render();
}
Если есть идеи по улучшению кода, рад буду почитать
План на следующий этап
Всем хороших книг!
... и укусит за бочок!
В тему)) Но для этого надо эти скрины не только хранить, но и помнить о содержании
Кому как, но в основном народ сильно пугается, до паники прям. Лучше пусть не будет такого опыта ))