Skip to content

Commit

Permalink
Недописаны дроны и контролируемые снаряды, а так в целом всё норм, ТУ…
Browse files Browse the repository at this point in the history
…РЕЛЬ НУЖНО ПРОВЕРЯТЬ НА РАССТОЯНИЕ (ЧТО БЫ ЧЕРЕЗ ОПРЕДЕЛЕННОЕ КОЛИЧЕСТВО МЕТРОВ ОТКЛЮЧАЛО ОТ ТУРЕЛЛИ)
  • Loading branch information
Korol_Charodey committed Dec 25, 2024
1 parent 57e41f7 commit 4399ba9
Show file tree
Hide file tree
Showing 8 changed files with 46 additions and 40 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,12 @@ public sealed partial class TurretControllableComponent : Component
public string ControlReturnAction = "ControlReturnAction";
[DataField("ControlReturnActionEntity")]
public EntityUid? ControlReturnActEntity;

[DataField("Range")]
public float Range = 50f;

[DataField("isDrone")]
public bool IsDrone = false;
}

/*
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
using System.Numerics;
using Content.Shared.Actions;
using Content.Shared.ADT.SS40k.Turrets;
using Content.Shared.Bed.Sleep;
using Content.Shared.Examine;
using Content.Shared.Mind;
using Content.Shared.Mind.Components;
using Content.Shared.Mobs.Systems;
Expand All @@ -13,13 +15,14 @@ public sealed class TurretControllableSystem : EntitySystem
[Dependency] private readonly SharedActionsSystem _actionsSystem = default!;
[Dependency] private readonly SharedMindSystem _mindSystem = default!;
[Dependency] private readonly MobStateSystem _mobStateSystem = default!;
[Dependency] private readonly SharedTransformSystem _transformSystem = default!;
public override void Initialize()
{
base.Initialize();
SubscribeLocalEvent<TurretControllableComponent, ComponentStartup>(OnStartup);
SubscribeLocalEvent<TurretControllableComponent, ComponentShutdown>(OnShutdown);
SubscribeLocalEvent<TurretControllableComponent, ControlReturnActionEvent>(OnReturn);
SubscribeLocalEvent<TurretControllableComponent, GettingControlledEvent>(OnGettingControlled);
SubscribeLocalEvent<TurretControllableComponent, ComponentStartup>(OnStartup);//заливаем акшон для возврата(можно добавить и другие)
SubscribeLocalEvent<TurretControllableComponent, ComponentShutdown>(OnShutdown);//чистим\возвращаем
SubscribeLocalEvent<TurretControllableComponent, ControlReturnActionEvent>(OnReturn);//акшон возврата
SubscribeLocalEvent<TurretControllableComponent, GettingControlledEvent>(OnGettingControlled);//сохраняем
}

public void OnGettingControlled(EntityUid uid, TurretControllableComponent component, GettingControlledEvent args)
Expand All @@ -41,7 +44,6 @@ public void Return(EntityUid uid, TurretControllableComponent component)
TryReturnToBody(uid, component);
}
component.User = null;
//suda mojno dopisat raise event, but nahuya?
if (component.Controller is not null)
{
RaiseLocalEvent((EntityUid)component.Controller, new ReturnToBodyTurretEvent(uid));
Expand All @@ -57,7 +59,7 @@ public void OnShutdown(EntityUid uid, TurretControllableComponent component, Com
{
Return(uid, component);

_actionsSystem.RemoveAction(component.ControlReturnActEntity);//maybe nahui? hotya pohui
_actionsSystem.RemoveAction(component.ControlReturnActEntity);
}

public bool TryReturnToBody(EntityUid uid, TurretControllableComponent component)
Expand All @@ -73,12 +75,15 @@ public bool TryReturnToBody(EntityUid uid, TurretControllableComponent component
public override void Update(float frameTime)
{
base.Update(frameTime);
//todo: проверка пользователя(тела игрока на состояние) и поднятие ивента в случае отруба(по ивенту возвращаем в тело(точно ли стоит делать ивентом, а не тупо вернуть в тело?))
var entityes = EntityQueryEnumerator<TurretControllableComponent>();
while (entityes.MoveNext(out var uid, out var comp))
if (comp.User is not null && (!_mobStateSystem.IsAlive((EntityUid)comp.User) ||
{
if (comp.User is not null && comp.Controller is not null && (!_mobStateSystem.IsAlive((EntityUid)comp.User) ||
TryComp<SleepingComponent>((EntityUid)comp.User, out var _) ||
TryComp<ForcedSleepingComponent>((EntityUid)comp.User, out var _))) Return(uid, comp);
TryComp<ForcedSleepingComponent>((EntityUid)comp.User, out var _))) Return(uid, comp); //тут мейби можно убрать проверку на ещё один компонент(нужно тестить)
//

}
}

// public bool IsControlling(EntityUid uid, TurretControllableComponent comp)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ public sealed partial class TurretControllerComponent : Component
public EntityUid? CurrentUser;

[ViewVariables]
public EntityUid? CurrentTurret; // ??? maybe uberu nahui (potom optimiziruye, skoreye vsego legche save component turret v controllere(maybe more than 1 turret so i will make some changes after, IDK))
public EntityUid? CurrentTurret;
}

/*
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,11 +17,11 @@ public override void Initialize()
{
base.Initialize();

SubscribeLocalEvent<TurretControllerComponent, InteractHandEvent>(AfterInteract);
SubscribeLocalEvent<TurretControllerComponent, ComponentShutdown>(OnShutdown);
SubscribeLocalEvent<TurretControllerComponent, LinkAttemptEvent>(OnLinkAttempt);
SubscribeLocalEvent<TurretControllerComponent, NewLinkEvent>(OnNewLink);
SubscribeLocalEvent<TurretControllerComponent, ReturnToBodyTurretEvent>(OnReturn);
SubscribeLocalEvent<TurretControllerComponent, InteractHandEvent>(AfterInteract);//закидываем в турель при использовании
SubscribeLocalEvent<TurretControllerComponent, ComponentShutdown>(OnShutdown);//чистим
SubscribeLocalEvent<TurretControllerComponent, LinkAttemptEvent>(OnLinkAttempt);//отменяем соединения
SubscribeLocalEvent<TurretControllerComponent, NewLinkEvent>(OnNewLink); //заливаем турель в компонент контроллера(потенциал в будущем сделать массив турелей с одной консолью)
SubscribeLocalEvent<TurretControllerComponent, ReturnToBodyTurretEvent>(OnReturn);//чистим
}

public void OnReturn(EntityUid uid, TurretControllerComponent component, ReturnToBodyTurretEvent args)
Expand All @@ -44,8 +44,8 @@ public void AfterInteract(EntityUid uid, TurretControllerComponent component, In
var target = linkSource.LinkedPorts.First().Key;
component.CurrentUser = args.User;
component.CurrentTurret = target;
RaiseLocalEvent(target, new GettingControlledEvent(args.User, uid)); // я не ебу почему ты не работаешь, козлина, хотя по всей логике должна, ивент просто не доходит до соседней системы - бред? ДА БРЕД
_mindSystem.ControlMob(args.User, target); //Визарды пидорасы, я ебал ваши ивенты в жопу, уроды блять, пидорасы, ебаный нахуй блять
RaiseLocalEvent(target, new GettingControlledEvent(args.User, uid));
_mindSystem.ControlMob(args.User, target);
}
}

Expand Down
6 changes: 3 additions & 3 deletions Content.Shared/ADT/SS40k/Turrets/TurretEvents.cs
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
using Content.Shared.Actions;

namespace Content.Shared.ADT.SS40k.Turrets;
public sealed partial class ControlReturnActionEvent : InstantActionEvent
public sealed partial class ControlReturnActionEvent : InstantActionEvent // для акшона
{
}

public sealed class ReturnToBodyTurretEvent : EntityEventArgs
public sealed class ReturnToBodyTurretEvent : EntityEventArgs//поднимаем на возвращении
{
public EntityUid TurretController;

Expand All @@ -15,7 +15,7 @@ public ReturnToBodyTurretEvent(EntityUid turretcontroller)
}
}

public sealed class GettingControlledEvent : EntityEventArgs
public sealed class GettingControlledEvent : EntityEventArgs //поднимаем для турели которая начинает контролироваться
{
public EntityUid User;
public EntityUid Controller;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,3 +7,6 @@ ent-ADTComputerShuttleSalvage = консоль управления утилиз
ent-ADTComputerSecShuttle = консоль управления шаттлом службы безопасности
.desc = Используется для пилотирования шаттлом службы безопасности.
ent-TurretControllerConsole = консоль управления турелью
.desc = Используется для контроля турелей
Original file line number Diff line number Diff line change
Expand Up @@ -938,12 +938,12 @@
- Cloning

#SS40k
- type: sourcePort
- type: sourcePort #прототип порта, который отправляет данные
id: TurretControllerSender
name: signal-port-name-tur-sender
description: signal-port-description-tur-sender

- type: entity
- type: entity #прототип консоли для управления турелями (скопировал с базовой консоли, не имеет платы из которой собирается, пока что чисто выдаётся)
parent: BaseComputer
id: TurretControllerConsole
name: turret-controller-console
Expand Down Expand Up @@ -972,9 +972,9 @@
energy: 1.6
color: "#1f8c28"
- type: DeviceLinkSource
range: 10
range: 10 #не сильно важная хуйня, растояние на котором можно залинкать, турели как допишу - будут сами отлинкиваться по причине потери связи из за растояния, будь то отломанная турель летящая на куске корабля, или дрон)
ports:
- TurretControllerSender
- TurretControllerSender #собственно наш порт
- type: TurretController
# - type: ActivatableUI
# key: enum.CloningConsoleUiKey.Key
Expand Down
24 changes: 8 additions & 16 deletions Resources/Prototypes/Entities/Structures/Shuttles/cannons.yml
Original file line number Diff line number Diff line change
Expand Up @@ -373,33 +373,25 @@

#SS40k Turrets with components for control

- type: entity
id: ShuttleGunKineticControllable
parent: ShuttleGunKinetic
suffix: CONTROLLABLE, DO NOT MAP
components:
- type: TurretControllable
- type: DeviceLinkSink
ports:
- On

- type: entity
id: ShuttleGunFriendshipControllable
parent: ShuttleGunFriendship
suffix: CONTROLLABLE, DO NOT MAP
components:
- type: TurretControllable
- type: TurretControllable #компонент контролируемой турели
- type: DeviceLinkSink
ports:
- On
- type: MouseRotator
- On #можно переписать нахуй прототип турели, но главное что бы в прототипе был порт для линка(даже если он ничего не делает, вот например ВКЛ - сойдёт)
- type: MouseRotator #настраивать по вкусу
angleTolerance: 5
rotationSpeed: 180
simple4DirMode: false
simple4DirMode: false #выключить что бы турель красиво вертелась(а не резко поворачивалась в одну из 4 сторон)
- type: NoRotateOnInteract
- type: NoRotateOnMove
- type: CombatMode
toggleMouseRotator: false
toggleMouseRotator: false #нужно выключить, что бы у нас компонент ротатора не пропадал нахуй при переключении режимов

#Turret returning action

- type: entity
id: ControlReturnAction
Expand All @@ -408,7 +400,7 @@
- type: InstantAction
priority: -100
icon:
sprite: Objects/Tools/crowbar.rsi
sprite: Objects/Tools/crowbar.rsi #заменить спрайт с монтировки на что то сносное
state: icon
event: !type:ControlReturnActionEvent {}
useDelay: 1

0 comments on commit 4399ba9

Please sign in to comment.