New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Sweeps and spins. #3755
Sweeps and spins. #3755
Conversation
Changelog status: ✔️ |
ae23865
to
8ed6ec1
Compare
Now you can sweep and spin different weapons. Shields stun on sweep. Energy weapons don't care about hitting something, etc.
8ed6ec1
to
6d903c5
Compare
А лазерный двойной, когда крутишь, во все стороны снаряды отражает ? |
Я в недоумении от этого вопроса. |
|
Учитывая что я это нигде не упоминул в описании ПР-а, вероятно, нет. |
code/game/objects/weapons.dm
Outdated
/obj/item/weapon | ||
name = "weapon" | ||
icon = 'icons/obj/weapons.dmi' | ||
|
||
var/__interupt_on_sweep_hit_types = list(/atom) // By default we interupt on any hit. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Нижнее подчёркивание - это подход из питона? Не вижу смысла тянуть выбивающийся из общего стиля практики.
Ещё мне не нравится то что ты добавил инстанс список каждому инстансу от вепона, при этом подавляющее большинство объектов его никогда использовать не будут. Посмотри в сторону ленивых списков и ленивой инциализации в целом. За референсом подсмотри сюда tgstation/tgstation#21245
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
По задумке это было что-то на подобие "приватных" переменных, но у нас такого не практикуют, и я их уберу.
Посмотрю на ленивые листы, да.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
У нас практикуют такое немного с переменными, но исключительно в аргументах чтобы не прибегать к src или другому наименованию. В переменных класса если уж очень хотелось как-то обозначить приватку (правда не ясно зачем все равно), то можно было специфический нейм префикс или суфикс сделать вида p_varname / private_varname.
/obj/item/weapon/proc/on_sweep_push(atom/target, turf/T, mob/user) | ||
return | ||
|
||
/obj/item/weapon/proc/on_sweep_push_success(atom/target, mob/user) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Может я чего и упускаю, но на первый взгляд on_sweep_push_success, как и on_sweep_pull_success, везде одинаковые. Где-то есть проверки на интент, но где они есть - там тоже всё идентично. У копья есть +2 строки, но остальное такое же. И то что ты везде, по факту, продублировал код - не выглядит хорошим дизайном.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Сделал переменную которая отличает копьё от остольного, убрал копипасту
|
||
var/__can_sweep = FALSE | ||
var/__can_spin = FALSE | ||
var/spin_on_middleclick = FALSE |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Не совсем ясно, почему где-то мидлклик есть, а где-то нету?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Топоры имеют дейсвтие при использовании, и поэтому на это действие нельзя "забиндиить" кручение.
Что, кстати, было описано в шапке ПР-а.
Данный ПР автоматически отмечен как застоявшийся по причине длительного отсутствия обновлений. Он будет закрыт через 7 дней, если никакой активности не будет проявлено. Если вы считаете, что ПР еще актуален, или что я (злобный робот) пристаю к вам зря - просто напишите любой комментарий. Спасибо за ваш вклад. |
ПР закрыт из-за длительного отсуствия активности. Для переоткрытия ПРа, пожалуйста, обратитесь к кому-либо из мейнтейнеров. Вы можете призвать их в комментарии слапнув |
Сделал что просили, перенёс текущий механ щита на то что есть в этом ПР-е, по сути откатил #3974 Откройте пожалуйста |
ПР в нотисах засветился, поэтому решил заглянуть. |
@volas Сделал управление мышью c: |
code/game/objects/weapons.dm
Outdated
|
||
var/list/turfs = getline(dropping_turf, target_turf) | ||
var/list/directions = list() | ||
world.log << "[turfs.len] [target.name] [dropping.name]" |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
👀
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
👀
|
||
/obj/item/weapon/attack(mob/living/M, mob/living/user, def_zone) | ||
. = ..() | ||
if(. && can_push()) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Да, вот такие тоже моменты на компоненты в идеале надо закидывать
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
А можно поподробнее?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Вместо выдачи тонны переменных куда-то внизы и проков на низкие уровни, чтобы просто потом не тайпкастить и т.д (как это делали раньше часто, а сейчас так), можно выдавать компонент объектам нужным, и расставлять сигналы на те или иные действия куда надо. За подсказками можно вот к ТГ слазать, понять на что они в принципе бывают - https://github.com/tgstation/tgstation/blob/master/code/__DEFINES/components.dm#L64
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
А и да, я не призываю это сейчас делать, но рассмотреть на будещее. И если что, у нас голый фреймворк на подскальзывание и все. Т.е вооружать нужными сигналами надо с нуля.
79edc0e
to
1e27b27
Compare
1e27b27
to
44580bf
Compare
…ssic into spin_and_slash
(в этом ПР-е поправил конфликты) |
This pull request has been mentioned on Tau Ceti Station Forum. There might be relevant details there: https://forum.taucetistation.org/t/discussion-kombo-orientirovannaya-boyovka/12387/59 |
This pull request has been mentioned on Tau Ceti Station Forum. There might be relevant details there: https://forum.taucetistation.org/t/discussion-kombo-orientirovannaya-boyovka/12387/102 |
code/game/objects/weapons.dm
Outdated
@@ -132,6 +132,7 @@ | |||
break | |||
|
|||
QDEL_IN(sweep_image, sweep_delay) | |||
sweep_image = null |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
У меня коммит тут просто высветился, поэтому заглянул.
Не совсем понятно, это ведь локальная переменная, что ее нуль дает?
…d cooldown for mouse-pull and mouse-push.
878b825
to
5e61c6a
Compare
…ssic into spin_and_slash
Швабрам бы еще. Вообще было бы замечательно, будь отдельный ПР с управлением мышкой, включенным для швабр, и отдельно уже оружие. |
У швабр механ боевого махания, все вещи которые «машутся» машутся в том числе мышкой |
var/spin_on_middleclick = FALSE | ||
var/sweep_step = 4 | ||
|
||
/obj/item/weapon/proc/can_push() |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
стена кода без существенных комментариев :/
Пояснения бы пригодились, как пример
MouseDrop: |
@@ -1,7 +1,345 @@ | |||
/obj/effect/effect/weapon_sweep |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Стоит свайп-специфичные вещи (это и определения can_* + сами проки) вынести в отдельный файл, что бы не складывать сюда в одну кучу.
И еще соглашусь по поводу компонентов, с ними всё было бы аккуратнее.
Данный ПР автоматически отмечен как застоявшийся по причине длительного отсутствия обновлений. Он будет закрыт через 7 дней, если никакой активности не будет проявлено. Если вы считаете, что ПР еще актуален, или что я (злобный робот) пристаю к вам зря - просто напишите любой комментарий. Спасибо за ваш вклад. |
ПР закрыт из-за длительного отсуствия активности. Для переоткрытия ПРа, пожалуйста, обратитесь к кому-либо из мейнтейнеров. Вы можете призвать их в комментарии слапнув |
Откройте ПР пожалуйста. Переделал всё на компоненты. |
Описание изменений
Теперь кроме как шваброй можно махать-пихать различными вещами, а так же:
Щитами можно махать, и если кто-то упрётся в твой машущийся щит своим махком, его застанит, опрокинет.
Если имея что-то, что может пихать ты ударишь по руке с щитом - ты можешь опрокинуть щитоносца.
Хоткеи такие же как у швабры, только вещи которые можно "крутить", если они имеют какое-либо взаимодействие при "использовании" крутить можно на среднее колёсико мышки.
По конкретным предметам:
Топором можно крутиться и махать, но он довольно медленный. Он упирается об щит, и стены.
Копьём можно пихать, и даже атаковать через один тайл(Или притягивать и атаковать).
Энерго-милишные оружия можно махать и крутить, и они не упираются ни об что кроме *столов, мусоро, полочек.
Двойную саблю можно крутить.
Тростью можно притягивать и отталкивать от людей, но не бить через тайл.
Если щитом пихнуть куклу об что-то, что мешает ей ходить, она упадёт
Откатывает #3974
Есть возможность эти все финты проворачивать с помощью мышки, если вы выбрали тайл рядом с вами, и начали его перетаскивать на тайл не рядом с вами - вы отпихнёте.
Если перетащили тайл не рядом с вами, на тот который рядом - притянете.
Если все "выделенные" вами тайлы будут рядом с вами - вы сделаете свайп по ним.
Если вы проведёте мышкой через себя из одной стороны в противоположную - вы начнётся крутиться.
Почему и что этот ПР улучшит
Добавит чуть больше механа нашей боёвочке.
🆑 Luduk