Обзор кода Alien Swarm
< Ru
![Note.png](/w/images/thumb/c/cc/Note.png/10px-Note.png)
Классы Alien Swarm
Это обзор основного числа C++ классов в Alien Swarm. Большинство файлов исходного кода Alien Swarm начинаются с asw_
. Название класса начинается на CASW_
для серверных классов и C_ASW_
для классов клиента.
CASW_Player
- Это класс игрока Alien Swarm. В отличие от многих игр движка Source, игрок в Alien Swarm это невидимая сущность-командующий. Она не двигается. Если игрок контролирует солдата, то вызывается метод
GetMarine()
, который возвращает солдата под управлением игрока. CASW_Marine
- Эта сущность и является солдатом, который бегает по уровням и убивает пришельцев. Наследуется от
CAI_BaseNPC
класса. Когда солдат "населен" это значит, что он находится под прямым контролемCASW_Player
. Когда солдат находится под прямым контролем, его AI отключается, он становится предсказуемой сущностью и управляется вводом игрока.- Полезные методы:
GetCommander()
- возвращаетCASW_Player
который контролирует солдата.GetMarineResource()
- возвращает ассоциированныйCASW_Marine_Resource
.GetASWWeapon( nSlot )
- возвращает оружие, экипированное в указанном слоте (где слотом может являтьсяASW_INVENTORY_SLOT_PRIMARY
,ASW_INVENTORY_SLOT_SECONDARY
илиASW_INVENTORY_SLOT_EXTRA
).GetMarineProfile()
- возвращает профиль для этого солдата.IsInhabited()
- возвращает true если солдата контролирует игрок, false если он находится по контролем AI.
- Полезные методы:
CASW_Marine_Resource
- Этот класс содержит некоторые сетевые данные насчет каждого солдата (похожие на ресурсы игрока в других играх движка Source). Он разный для всех солдат в игре. Ресурс солдата существует ещё перед тем, как солдат выбран в брифинге (перед тем как создана сущность
asw_marine
). Ресурс солдата также остается после смерти солдата и удаления его сущности.- Полезные методы:
GetMarineEntity()
- если есть хоть один существующий солдат для этого ресурса, будет возвращен он.IsInhabited()
- возвращает true если солдат под управлением игрока, false если под контролем AI.GetCommander()
- возвращаетCASW_Player
владеющего этим солдатом.GetProfile()
- возвращает профиль для этого солдата.
- Полезные методы:
CASW_Marine_Profile
- Этот класс представляет собой статичные данные относительно каждого персонажа в игре. Предоставляет доступ к таким профилям как Sarge, Jæger, Wildcat и другим. Из этого класса вы можете получить их имя, портрет, умения.
CASW_Game_Resource
- Содержит массив ресурсов солдат, целей и других игровых состояниях. Вы можете получить экземпляр класса через глобальную функцию
ASWGameResource()
.- Используйте
GetMaxMarineResources()
иGetMarineResource(i)
чтобы пройтись по всем ресурсам солдат. Если вы хотите пройтись по солдатам, можете использоватьGetMarineEntity()
для каждого ресурса солдата. - Используйте
ASW_MAX_OBJECTIVES
иGetObjective(i)
чтобы пройтись по каждой цели.
- Используйте
CAlienSwarm
- Игровый правила для Alien Swarm. Управляет всеми состояниями игры, выбирает солдат, снаряжение, создает солдат, завершает миссию, подключает игроков и прочее. Вы можете получить доступ к экземпляру класса через
ASWGameRules()
.- Полезные методы:
GetSkillLevel()
- возвращает 1, 2, 3 или 4 (легко, нормально, сложно, безумие, соответственно)GetGameState()
- возвращает текущее состояние игры. СмотритеASW_GameState
enum для возможных состояний.StartMission()
- вызывается когда все игроки выбрали их солдат и лидер нажал кнопку "Начать Миссию".MissionComplete( bool bSuccess )
- вызывается при завершении миссии.
- Полезные методы:
CASW_Weapon
- Это базовый класс оружия для всех оружий в Alien Swarm.
CASW_WeaponInfo
- Содержит статичные данные, ассоциированные с каждым типом оружия, прочитанную из скриптов оружия в
swarm/scripts
. CASW_Objective
- Это базовый класс для каждой цели. Цели получают события из
CASW_Mission_Manager
и помечают себя как выполненные/невыполненные и потенциально завершают миссию.- Полезные методы:
IsObjectiveComplete()
IsObjectiveHidden()
GetObjectiveProgress()
- Полезные методы:
CASW_Alien
- Это базовый класс для всех пришельцев в Alien Swarm (кроме
CASW_Buzzer
иCASW_Grub
). CASW_Egg
- Это яйцо пришельцев, которое плодит паразитов.
CASW_Door
- Этот класс используется для дверей. Двери могут самостоятельно открываться, быть запаянными, получать повреждения и падать. Имеют ассоциированный
CASW_Door_Area
переключатель для переключения авто-открытия и известия о том, что солдат в пределах зоны сварки. CASW_Button_Area
- Этот переключатель представляет собой интерактивную панель-кнопку. Может быть заблокирована и игроку придется выполнить мини-игру с проводами чтобы открыть ее.
CASW_Computer_Area
- Похожа на
CASW_Button_Are
, но для компьютера, обычно используется для Цели "Скачать". Если заблокирована, начнется мини-игра "взломай тумблер". CASW_Marine_Skills
- Этот класс возвращает основанные на умении значения для каждого солдата в игре. Может быть использована улучшения наносимого урона, скорости передвижения и прочего. У каждого солдата свои умения, основанные на его профиле и количестве очков умений, которое он может иметь. Количество очков умений, которое солдат может иметь, устанавливается для игроков через
CASW_Game_Resource
. CASW_Spawner
- Эта сущность используется для создания пришельцев на уровне. Устанавливается левел-дизайнером и имеет много полей ввода и вводов для контроля над частотой спавна, максимального количества пришельцев, анимацию появления для пришельца.
CASW_Campaign_Save
- Играя в Alien Swarm через главное меню, игра всегда находится в режиме кампании. Это значит имеется активный объект
CASW_Campaign_Save
, который содержит информацию о текущей кампании в которую вы играете, какие миссии были завершены, как много попыток было у каждой миссии и какие солдаты были выбраны у игроков в прошлый раз (также количество очков умений каждого солдата, если вы играете со специальными очками умений).- Вы можете получить сохранение текущей игры через:
ASWGameRules()->GetCampaignSave()
.
- Вы можете получить сохранение текущей игры через:
CASW_Campaign_Info
- Описывает данные для кампании. Каждая кампания имеет название, текстуры и массив
Campaign_Mission_t
, который описывает каждую миссию и как они взаимодействуют друг с другом.- Полезные методы:
GetNumMissions()
GetMission(i)
- Полезные методы:
CASW_Melee_System
- Этот класс осуществляет работу с "предсказуемыми" рукопашными атаками (их анимация, события анимации и движение управляемое анимацией предсказуемы и синхронизированы между клиентом и сервером, как и обычное передвижение игрока). Класс
CASW_Melee_Attack
описывает каждую анимацию атаки, ее повреждение, зону действия и возможность комбинирования с другой атакой.
Другие интересные файлы
asw_shareddefs.cpp/.h
- Содержит различные определения, collision-группы, классификации и прочее для Alien Swarm.
clientmode_asw.cpp/.h
- Присутствует на клиенте и получает вызовы функций при инициализации уровня, его освобождении и обновление кадров.
asw_playeranimstate.cpp/.h
- Отвечает за анимацию солдата. Исходя из типа перемещения сущности, углов и событий анимации решается, какую анимацию проиграть.
asw_marine_gamemovement.cpp/.h
- Отвечает за команды перемещения и передвижение солдата.
asw_input.cpp
,asw_in_main.cpp
,asw_in_mouse.cpp
- Эти файлы читают ввод с клавиатуры/мыши и превращают его в
CUserCmd
которая управляет солдатом, прицелом и стрельбой. Они также отвечают за вертикальное автоприцеливание на стороне клиента и представление позиции мыши в мировую координату.
Подробнее
- Присоединяйтесь к hlcoders: mailing list и IRC channel
- По вопросам относительно специфики кода Alien Swarm, вы можете обратиться сюда: [email protected].