Skip to content

Refactoring Code#38

Open
NemesisWar wants to merge 7 commits into
HolyMonkey:masterfrom
NemesisWar:refactoring
Open

Refactoring Code#38
NemesisWar wants to merge 7 commits into
HolyMonkey:masterfrom
NemesisWar:refactoring

Conversation

@NemesisWar
Copy link
Copy Markdown

Styled the code for standards. Changed script names. Changed the content of the scripts.

Styled the code for standards. Changed script names. Changed the content of the scripts.
Add RequireComponents in scripts
Comment thread Assets/Group1/Scripts/PlayerMove.cs Outdated

private void OnMove(Vector2 move)
{
transform.position += new Vector3(move.x*_speed, move.y*_speed, 0) * Time.deltaTime;
Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Вынеси умножение на _speed из консруктора

Comment thread Assets/Group1/Scripts/Enemy.cs Outdated
[RequireComponent(typeof(BoxCollider2D))]
public class Enemy : MonoBehaviour
{
public UnityAction<Enemy> DeadEnemy;
Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

event

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Comment thread Assets/Group1/Scripts/Enemy.cs Outdated
public class Enemy : MonoBehaviour
{
public UnityAction<Enemy> DeadEnemy;
[SerializeField] private int _radiusNewPosition;
Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

_radius
и может всё-таки float?

Comment thread Assets/Group1/Scripts/Enemy.cs Outdated
public UnityAction<Enemy> DeadEnemy;
[SerializeField] private int _radiusNewPosition;
[SerializeField] private float _speed;
private Vector2 _targetPosition;
Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

_target

Comment thread Assets/Group1/Scripts/Enemy.cs Outdated
}
}

private void SetNewTransformPosition()
Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Set неудачный глагол. Почитай про CQRS и что означает Set в этой терминологии

Comment thread Assets/Group1/Scripts/EnemySpawner.cs Outdated
{
public UnityAction StopGame;
[SerializeField] private Enemy _enemy;
[SerializeField] private int _enemyCount;
Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

_enemies

Comment thread Assets/Group1/Scripts/EnemySpawner.cs Outdated
public UnityAction StopGame;
[SerializeField] private Enemy _enemy;
[SerializeField] private int _enemyCount;
[SerializeField] private float _spawmRaius;
Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

повнимательней

Comment thread Assets/Group1/Scripts/EnemySpawner.cs Outdated

public class EnemySpawner : MonoBehaviour
{
public UnityAction StopGame;
Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Как спавнер может знать остановить игру или нет? Это не его ответственность. Т.е название во-первых неправильное со смысловой точки зрения а во-вторых вне нашего стиля

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Спаунер должен только спаунить? А отслеживать смерти должен другой объект?

Comment thread Assets/Group1/Scripts/EnemySpawner.cs Outdated
Comment on lines +18 to +20
var enemy = Instantiate(_enemy, enemyPosition, Quaternion.identity,transform);
enemy.GetComponent<Enemy>().DeadEnemy += OnEnemyDie;
}
Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Comment thread Assets/Group1/Scripts/EnemySpawner.cs Outdated
Comment on lines +32 to +35
if (_enemyCount == 0)
{
StopGame?.Invoke();
}
Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Почему это тут?

Changes as recommended
Change some scripts.
Enemy now is abstact class.
Comment thread Assets/Group1/Scripts/Booster.cs Outdated
Comment on lines +7 to +8
[SerializeField] private float _time;
protected override void TakeDamage(PlayerMove playerMove)
Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Отдели пустой строкой

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Готово.

Comment thread Assets/Group1/Scripts/Booster.cs Outdated
Comment on lines +7 to +8
[SerializeField] private float _time;
protected override void TakeDamage(PlayerMove playerMove)
Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Приём тут TakeDamage?

Copy link
Copy Markdown
Author

@NemesisWar NemesisWar May 8, 2021

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Приём тут TakeDamage?

Согласен. Некорректное название. Удалил.

Comment thread Assets/Group1/Scripts/Booster.cs Outdated
using System.Collections.Generic;
using UnityEngine;

public class Booster : Enemy
Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Booster это не враг

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Booster это не враг

Разделил их на 2 отдельного класса. Для того что бы не было дубля кода - вынес схему движения и поиск точки движения в отдельный скрипт.

Comment thread Assets/Group1/Scripts/Booster.cs Outdated
[SerializeField] private float _time;
protected override void TakeDamage(PlayerMove playerMove)
{
playerMove.BoostSpeed(_time);
Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Заебись нанёс урон

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Заебись нанёс урон

Удалил.

Comment thread Assets/Group1/Scripts/DefaultEnemy.cs Outdated

public class DefaultEnemy : Enemy
{
protected override void TakeDamage(PlayerMove playerMove) { }
Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

А это зачем?

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

А это зачем?

Убрал. Этот метод наследовался от родительного класса. Поэтому нужно его было реализовать.

Comment thread Assets/Group1/Scripts/Enemy.cs Outdated
[SerializeField] private float _radius;
[SerializeField] private float _speed;
private Vector2 _target;
public event UnityAction<Enemy> Dieing;
Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

https://www.softschools.com/difference/dieing_vs_dying/236/

Понял, если я не имею в виду машину которая служит для резки бумаги, то используем Dying.

Comment thread Assets/Group1/Scripts/EnemySpawner.cs Outdated
Comment on lines +8 to +11
[SerializeField] private List<Enemy> _enemies;
[SerializeField] private int _enemiesCount;
[SerializeField] private float _spawnRaius;
public UnityAction AllEnemiesDied;
Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Событие от полей следует отделить пустой строкой

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Готово.

Comment thread Assets/Group1/Scripts/EnemySpawner.cs Outdated
Comment on lines +13 to +21
private void Start()
{
for (int i = 0; i < _enemiesCount; i++)
{
Vector2 enemyPosition = Random.insideUnitCircle * _spawnRaius;
var enemy = Instantiate(_enemies[Random.Range(0,_enemies.Count)], enemyPosition, Quaternion.identity,transform);
enemy.Dieing += OnEnemyDie;
}
}
Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Не надо спавнер выдумывать, его небыло изначально

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Не надо спавнер выдумывать, его небыло изначально

Удалил. Хотел немного привнести свое так сказать)

Comment thread Assets/Group1/Scripts/Booster.cs Outdated
{
if (collision.TryGetComponent(out PlayerMove playerMove))
{
playerMove.BoostSpeed(_time);
Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Просто Boost

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Просто Boost

Скорректировал

Comment thread Assets/Group1/Scripts/EnemyMover.cs Outdated
}
}

private void ChangeTarget()
Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Change слишком общий глагол и может создать путаницу: меняется наша цель или мы вносим изменение в объект цели?

Можно прибегнуть к лайф-хаку: "Как скажем при разговоре так и напишем". При обсуждение этого функционала с заказчиком или внутри команды, как бы ты сказал что делает противник?

Например: "Противник выбирает следующую цель" и тогда мы получим метод PickTarget
Например: "Противник ищет следующую цель" и тогда мы получим метод FindTarget

Если ты говоришь "Противник меняет цель" то это ок в разговорной речи но прямой перенос в название будет не ок.

Стоит ли раскрывать детали?

Например: NextRandomTarget, PickRandomTarget

Учитывая приватность метода детали раскрыть можно, но учти что уточняя метод в название мы ограничиваем его.

ChangeTarget настолько общий, что там может происходить что угодно. Это очень абстрактный метод, Change буквально значит любое изменение связанное с целями. Если бы метод назывался просто Change означало, что поменяться может всё что угодно. И это можно и нужно делать в определённых ситуациях, но не здесь.

Например PickRandomTarget сразу берёт несколько обязательств на себя:

  • Он поменяет состояние объекта (глагол Pick)
  • Он утилитарный и его основная задача это стратегия выбора (Random)
  • Это всё произойдёт с сущностью "цель" (Target)

Я бы был удивлён если бы этот метод делал например включение эффектов или какие-нибудь другие вещи.

Это такое бюджетное ООП. В каком-то идеальном мире это было бы так:

class EnemyMovement {
     Targets _targets;
     SurfaceAgent _agent; 
     
     Update()
     {
           if(_agent.MoveTo(_targets.Current))
              _targets.Next();
     }
 }

Если убрать объекты то получится типа такого:
Next() или NextTarget() #

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Change слишком общий глагол и может создать путаницу: меняется наша цель или мы вносим изменение в объект цели?

Можно прибегнуть к лайф-хаку: "Как скажем при разговоре так и напишем". При обсуждение этого функционала с заказчиком или внутри команды, как бы ты сказал что делает противник?

Например: "Противник выбирает следующую цель" и тогда мы получим метод PickTarget
Например: "Противник ищет следующую цель" и тогда мы получим метод FindTarget

Если ты говоришь "Противник меняет цель" то это ок в разговорной речи но прямой перенос в название будет не ок.

Стоит ли раскрывать детали?

Например: NextRandomTarget, PickRandomTarget

Учитывая приватность метода детали раскрыть можно, но учти что уточняя метод в название мы ограничиваем его.

ChangeTarget настолько общий, что там может происходить что угодно. Это очень абстрактный метод, Change буквально значит любое изменение связанное с целями. Если бы метод назывался просто Change означало, что поменяться может всё что угодно. И это можно и нужно делать в определённых ситуациях, но не здесь.

Например PickRandomTarget сразу берёт несколько обязательств на себя:

  • Он поменяет состояние объекта (глагол Pick)
  • Он утилитарный и его основная задача это стратегия выбора (Random)
  • Это всё произойдёт с сущностью "цель" (Target)

Я бы был удивлён если бы этот метод делал например включение эффектов или какие-нибудь другие вещи.

Это такое бюджетное ООП. В каком-то идеальном мире это было бы так:

class EnemyMovement {
     Targets _targets;
     SurfaceAgent _agent; 
     
     Update()
     {
           if(_agent.MoveTo(_targets.Current))
              _targets.Next();
     }
 }

Если убрать объекты то получится типа такого:
Next() или NextTarget() #

Change слишком общий глагол и может создать путаницу: меняется наша цель или мы вносим изменение в объект цели?

Можно прибегнуть к лайф-хаку: "Как скажем при разговоре так и напишем". При обсуждение этого функционала с заказчиком или внутри команды, как бы ты сказал что делает противник?

Например: "Противник выбирает следующую цель" и тогда мы получим метод PickTarget
Например: "Противник ищет следующую цель" и тогда мы получим метод FindTarget

Если ты говоришь "Противник меняет цель" то это ок в разговорной речи но прямой перенос в название будет не ок.

Стоит ли раскрывать детали?

Например: NextRandomTarget, PickRandomTarget

Учитывая приватность метода детали раскрыть можно, но учти что уточняя метод в название мы ограничиваем его.

ChangeTarget настолько общий, что там может происходить что угодно. Это очень абстрактный метод, Change буквально значит любое изменение связанное с целями. Если бы метод назывался просто Change означало, что поменяться может всё что угодно. И это можно и нужно делать в определённых ситуациях, но не здесь.

Например PickRandomTarget сразу берёт несколько обязательств на себя:

  • Он поменяет состояние объекта (глагол Pick)
  • Он утилитарный и его основная задача это стратегия выбора (Random)
  • Это всё произойдёт с сущностью "цель" (Target)

Я бы был удивлён если бы этот метод делал например включение эффектов или какие-нибудь другие вещи.

Это такое бюджетное ООП. В каком-то идеальном мире это было бы так:

class EnemyMovement {
     Targets _targets;
     SurfaceAgent _agent; 
     
     Update()
     {
           if(_agent.MoveTo(_targets.Current))
              _targets.Next();
     }
 }

Если убрать объекты то получится типа такого:
Next() или NextTarget() #

Спасибо. На основании вышеизложенного решил переименовать метод на ChooseRandomDestinationPoint()

Comment thread Assets/Group1/Scripts/GameFinish.cs Outdated
AddEnemiesInWatchList();
}

private void AddEnemiesInWatchList()
Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Можно это назвать не наблюдаемым списком а "Живыми Противниками"

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Можно это назвать не наблюдаемым списком а "Живыми Противниками"

Изменил название на AddAliveEnemies

Comment on lines +36 to +39
if (_enemies.Count == 0)
{
AllEnemiesDied();
}
Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Это конечно же не в методе отписки должно быть

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Это конечно же не в методе отписки должно быть

Перенес в отдельный метод CheckAliveEnemies

}
}

private void AllEnemiesDied()
Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Это не название метода

AddAliveEnemies();
}

private void AddAliveEnemies()
Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Add логично намекает, что данные должны прийти в параметр.
Здесь скорей как раз-таки FindEnemies

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants