/
Vagabond132
/
TerrariaCourse
Обзор
Документация
Войти
/
Vagabond132
/
TerrariaCourse
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
Windows
Model/GameComponents/Entities/PlayerModel.cs
278 строк
9 KB
Vagabond132
Merge branch 'master' into Windows
14 янв 2025, 22:14
14 янв 2025, 22:14
4e7d05f
Код
Авторство
О чём код?
using System; using System.Collections.Generic; using System.Linq; using System.Numerics; using System.Text; using System.Threading.Tasks; namespace Model.GameComponents.Entities { /// <summary> /// Модель игрока, представляющая его физические и игровые характеристики. /// </summary> public class PlayerModel : Entity { /// <summary> /// Текущая позиция игрока на карте. /// </summary> private Vector2 _pos; /// <summary> /// Направление движения игрока (вправо или влево). /// </summary> private Direction _direction; /// <summary> /// Делегат, вызываемый при изменении состояния игрока. /// </summary> public delegate void dOnPlayerChange(); /// <summary> /// Событие, уведомляющее об изменении состояния игрока. /// </summary> public event dOnPlayerChange OnPlayerChange; /// <summary> /// Урон, наносимый игроком. /// </summary> private int _damage; /// <summary> /// Имя игрока. /// </summary> private string _name; /// <summary> /// Индикатор, жив ли игрок. /// </summary> private int _isAlive; /// <summary> /// Размер игрока в блоках. /// </summary> private int _size; /// <summary> /// Позиция игрока до последнего тика. /// </summary> private Vector2 _beforeTicPosition; /// <summary> /// Скорость передвижения игрока. /// </summary> private float _speed; /// <summary> /// Общее количество здоровья игрока. /// </summary> private int _HP; /// <summary> /// Текущее количество здоровья игрока. /// </summary> private int _currHP; /// <summary> /// Расстояние, на которое игрок может перемещаться в блоках. /// </summary> private int _blockDistance = 4; /// <summary> /// Ширина игрока в пикселях. /// </summary> private int _playerWidth; /// <summary> /// Скорость прыжка игрока в блоках за миллисекунду. /// </summary> private float _jumpSpeed = 0.01f; /// <summary> /// Скорость гравитации, применяемой к игроку. /// </summary> private float _gravitySpeed = 0.02f; /// <summary> /// Текущая вертикальная скорость игрока. /// </summary> private float _verticalVelocity = 0; /// <summary> /// Очки игрока. /// </summary> private int _score = 0; /// <summary> /// Индикатор, находится ли игрок в прыжке. /// </summary> private bool _isJumping = false; /// <summary> /// Индикатор, стоит ли игрок на земле. /// </summary> private bool _onGround = false; /// <summary> /// Максимальная высота прыжка игрока. /// </summary> private float _jumpHeight = 10; /// <summary> /// Текущая высота прыжка игрока. /// </summary> private float _jumpProgress = 0; /// <summary> /// Высота игрока в пикселях. /// </summary> private int playerHeight; /// <summary> /// Текущая позиция игрока на карте. /// </summary> public Vector2 Pos { get => _pos; set => _pos = value; } /// <summary> /// Размер игрока в блоках. /// </summary> public int Size { get => _size; set => _size = value; } /// <summary> /// Скорость передвижения игрока. /// </summary> public float Speed { get => _speed; set => _speed = value; } /// <summary> /// Ширина игрока в пикселях. /// </summary> public int PlayerWidth { get => _playerWidth; set => _playerWidth = value; } /// <summary> /// Высота игрока в пикселях. /// </summary> public int PlayerHeight { get => playerHeight; set => playerHeight = value; } /// <summary> /// Максимальная высота прыжка игрока. /// </summary> public float JumpHeight { get => _jumpHeight; set => _jumpHeight = value; } /// <summary> /// Текущая высота прыжка игрока. /// </summary> public float JumpProgress { get => _jumpProgress; set => _jumpProgress = value; } /// <summary> /// Скорость прыжка игрока в блоках за миллисекунду. /// </summary> public float JumpSpeed { get => _jumpSpeed; set => _jumpSpeed = value; } /// <summary> /// Скорость гравитации, применяемой к игроку. /// </summary> public float GravitySpeed { get => _gravitySpeed; set => _gravitySpeed = value; } /// <summary> /// Текущая вертикальная скорость игрока. /// </summary> public float VerticalVelocity { get => _verticalVelocity; set => _verticalVelocity = value; } /// <summary> /// Индикатор, находится ли игрок в прыжке. /// </summary> public bool IsJumping { get => _isJumping; set => _isJumping = value; } /// <summary> /// Направление движения игрока (вправо или влево). /// </summary> public Direction Direction { get => _direction; set => _direction = value; } /// <summary> /// Индикатор, стоит ли игрок на земле. /// </summary> public bool OnGround { get => _onGround; set => _onGround = value; } /// <summary> /// Текущие очки игрока. /// </summary> public int Score { get => _score; set => _score = value; } /// <summary> /// Имя игрока. /// </summary> public string Name { get => _name; set => _name = value; } /// <summary> /// Урон, наносимый игроком. /// </summary> public int Damage { get => _damage; set => _damage = value; } /// <summary> /// Конструктор для создания модели игрока. /// </summary> /// <param name="parName">Имя игрока.</param> /// <param name="parXPos">Начальная позиция игрока.</param> /// <param name="parSize">Размер игрока.</param> /// <param name="parSpeed">Скорость игрока.</param> /// <param name="parModelWidth">Ширина игрока.</param> /// <param name="parModelHeight">Высота игрока.</param> public PlayerModel(string parName, Vector2 parXPos, int parSize, float parSpeed, int parModelWidth, int parModelHeight) { this._pos = parXPos; this.Name = parName; this._size = parSize; this._speed = parSpeed / 40; this.PlayerHeight = parModelHeight; this._playerWidth = parModelWidth; } /// <summary> /// Увеличивает координату Y игрока на заданное значение. /// </summary> /// <param name="parY">Значение для увеличения координаты Y.</param> public void IncreaseYPos(float parY) { this._pos.Y += parY; } /// <summary> /// Уменьшает координату Y игрока на заданное значение. /// </summary> /// <param name="parY">Значение для уменьшения координаты Y.</param> public void DecreaseYPos(float parY) { this._pos.Y -= parY; } /// <summary> /// Уменьшает координату X игрока на заданное значение. /// </summary> /// <param name="parX">Значение для уменьшения координаты X.</param> public void DecreaseXPos(float parX) { this._pos.X -= parX; } /// <summary> /// Увеличивает координату X игрока на заданное значение. /// </summary> /// <param name="parX">Значение для увеличения координаты X.</param> public void IncreaseXPos(float parX) { this._pos.X += parX; } /// <summary> /// Устанавливает новую позицию игрока. /// </summary> /// <param name="parX">Координата X.</param> /// <param name="parY">Координата Y.</param> public void SetPosition(float parX, float parY) { this._pos.X = parX; this._pos.Y = parY; } } }