Ru/Swarm C++ Code Overview: Difference between revisions
< Ru
Jump to navigation
Jump to search
mNo edit summary |
No edit summary |
||
Line 7: | Line 7: | ||
== Компиляция исходного кода == | == Компиляция исходного кода == | ||
Смотрите [[Swarm SDK Create a Mod]] для инструкций по компиляции исходного кода Alien Swarm и настройке Visual Studio. | |||
== Классы Alien Swarm == | == Классы Alien Swarm == | ||
Это обзор основного числа C++ классов в Alien Swarm. Большинство файлов исходного кода Alien Swarm начинаются с "asw_". Название класса начинается на CASW_ для серверных классов и C_ASW_ для классов клиента. | |||
;CASW_Player | ;CASW_Player | ||
: | :Это класс игрока Alien Swarm. В отличие от многих игр движка Source, игрок в Alien Swarm это невидимая сущность-командующий. Она не двигается. Если игрок контролирует солдата, то вызывается метод GetMarine(), который возвращает солдата под управлением игрока. | ||
;CASW_Marine | ;CASW_Marine | ||
: | :Эта сущность и является солдатом, который бегает по уровням и убивает пришельцев. Наследуется от CAI_BaseNPC класса. Когда солдат "населен" это значит, что он находится под прямым контролем CASW_Player. Когда солдат находится под прямым контролем, его AI отключается, он становится предсказуемой сущностью и управляется вводом игрока. | ||
:: | ::Полезные методы: | ||
:::GetCommander() - | :::GetCommander() - возвращает CASW_Player который контролирует солдата. | ||
:::GetMarineResource() - | :::GetMarineResource() - возвращает ассоциированный CASW_Marine_Resource. | ||
:::GetASWWeapon( nSlot ) - | :::GetASWWeapon( nSlot ) - возвращает оружие, экипированное в указанном слоте (где слотом может являться ASW_INVENTORY_SLOT_PRIMARY, ASW_INVENTORY_SLOT_SECONDARY или ASW_INVENTORY_SLOT_EXTRA). | ||
:::GetMarineProfile() - | :::GetMarineProfile() - возвращает профиль для этого солдата. | ||
:::IsInhabited() - | :::IsInhabited() - возвращает true если солдата контролирует игрок, false если он находится по контролем AI. | ||
;CASW_Marine_Resource | ;CASW_Marine_Resource | ||
: | :Этот класс содержит некоторые сетевые данные насчет каждого солдата (похожие на ресурсы игрока в других играх движка Source). Он разный для всех солдат в игре. Ресурс солдата существует ещё перед тем, как солдат выбран в брифинге (перед тем как создана сущность asw_marine). Ресурс солдата также остается после смерти солдата и удаления его сущности. | ||
:: | ::Полезные методы: | ||
:::GetMarineEntity() - | :::GetMarineEntity() - если есть хоть один существующий солдат для этого ресурса, будет возвращен он. | ||
:::IsInhabited() - | :::IsInhabited() - возвращает true если солдат под управлением игрока, false если под контролем AI. | ||
:::GetCommander() - | :::GetCommander() - возвращает CASW_Player владеющего этим солдатом. | ||
:::GetProfile() - | :::GetProfile() - возвращает профиль для этого солдата. | ||
;CASW_Marine_Profile | ;CASW_Marine_Profile | ||
: | :Этот класс представляет собой статичные данные относительно каждого персонажа в игре. Предоставляет доступ к таким профилям как Sarge, Jaeger, Wildcat и другим. Из этого класса вы можете получить их имя, портрет, умения. | ||
;CASW_Game_Resource | ;CASW_Game_Resource | ||
: | :Содержит массив ресурсов солдат, целей и других игровых состояниях. Вы можете получить экземпляр класса через глобальную функцию ASWGameResource(). | ||
:: | ::Используйте GetMaxMarineResources() и GetMarineResource(i) чтобы пройтись по всем ресурсам солдат. Если вы хотите пройтись по солдатам, можете использовать GetMarineEntity() для каждого ресурса солдата. | ||
:: | ::Используйте ASW_MAX_OBJECTIVES и GetObjective(i) чтобы пройтись по каждой цели. | ||
;CAlienSwarm | ;CAlienSwarm | ||
: | :Игровый правила для Alien Swarm. Управляет всеми состояниями игры, выбирает солдат, снаряжение, создает солдат, завершает миссию, подключает игроков и прочее. Вы можете получить доступ к экземпляру класса через ASWGameRules(). | ||
:: | ::Полезные методы: | ||
:::GetSkillLevel() - | :::GetSkillLevel() - возвращает 1, 2, 3 или 4 (легко, нормально, сложно, безумие, соответственно) | ||
:::GetGameState() - | :::GetGameState() - возвращает текущее состояние игры. Смотрите ASW_GameState enum для возможных состояний. | ||
:::StartMission() - | :::StartMission() - вызывается когда все игроки выбрали их солдат и лидер нажал кнопку "Начать Миссию". | ||
:::MissionComplete( bool bSuccess ) - | :::MissionComplete( bool bSuccess ) - вызывается при завершении миссии. | ||
;CASW_Weapon | ;CASW_Weapon | ||
: | :Это базовый класс оружия для всех оружий в Alien Swarm. | ||
;CASW_WeaponInfo | ;CASW_WeaponInfo | ||
: | :Содержит статичные данные, ассоциированные с каждым типом оружия, прочитанную из скриптов оружия в "swarm/scripts". | ||
;CASW_Objective | ;CASW_Objective | ||
: | :Это базовый класс для каждой цели. Цели получают события из CASW_Mission_Manager и помечают себя как выполненные/невыполненные и потенциально завершают миссию. | ||
:: | ::Полезные методы: | ||
:::IsObjectiveComplete() | :::IsObjectiveComplete() | ||
:::IsObjectiveHidden() | :::IsObjectiveHidden() | ||
Line 64: | Line 64: | ||
;CASW_Alien | ;CASW_Alien | ||
: | :Это базовый класс для всех пришельцев в Alien Swarm (кроме CASW_Buzzer и CASW_Grub). | ||
;CASW_Egg | ;CASW_Egg | ||
: | :Это яйцо пришельцев, которое плодит паразитов. | ||
;CASW_Door | ;CASW_Door | ||
: | :Этот класс используется для дверей. Двери могут самостоятельно открываться, быть запаянными, получать повреждения и падать. Имеют ассоциированный CASW_Door_Area переключатель для переключения авто-открытия и известия о том, что солдат в пределах зоны сварки. | ||
;CASW_Button_Area | ;CASW_Button_Area | ||
: | :Этот переключатель представляет собой интерактивную панель-кнопку. Может быть заблокирована и игроку придется выполнить мини-игру с проводами чтобы открыть ее. | ||
;CASW_Computer_Area | ;CASW_Computer_Area | ||
: | :Похожа на CASW_Button_Area, но для компьютера, обычно используется для Цели "Скачать". Если заблокирована, начнется мини-игра "взломай тумблер". | ||
;CASW_Marine_Skills | ;CASW_Marine_Skills | ||
: | :Этот класс возвращает основанные на умении значения для каждого солдата в игре. Может быть использована улучшения наносимого урона, скорости передвижения и прочего. У каждого солдата свои умения, основанные на его профиле и количестве очков умений, которое он может иметь. Количество очков умений, которое солдат может иметь, устанавливается для игроков через CASW_Game_Resource. | ||
;CASW_Spawner | ;CASW_Spawner | ||
: | :Эта сущность используется для создания пришельцев на уровне. Устанавливается левел-дизайнером и имеет много полей ввода и вводов для контроля над частотой спавна, максимального количества пришельцев, анимацию появления для пришельца. | ||
;CASW_Campaign_Save | ;CASW_Campaign_Save | ||
: | :Играя в Alien Swarm через главное меню, игра всегда находится в режиме кампании. Это значит имеется активный объект CASW_Campaign_Save, который содержит информацию о текущей кампании в которую вы играете, какие миссии были завершены, как много попыток было у каждой миссии и какие солдаты были выбраны у игроков в прошлый раз (также количество очков умений каждого солдата, если вы играете со специальными очками умений). | ||
:: | ::Вы можете получить сохранение текущей игры через: ASWGameRules()->GetCampaignSave() | ||
;CASW_Campaign_Info | ;CASW_Campaign_Info | ||
: | :Описывает данные для кампании. Каждая кампания имеет название, текстуры и массив Campaign_Mission_t, который описывает каждую миссию и как они взаимодействуют друг с другом. | ||
:: | ::Полезные методы: | ||
:::GetNumMissions() | :::GetNumMissions() | ||
:::GetMission( i ) | :::GetMission(i) | ||
;CASW_Melee_System | ;CASW_Melee_System | ||
: | :Этот класс осуществляет работу с "предсказуемыми" рукопашными атаками (их анимация, события анимации и движение управляемое анимацией предсказуемы и синхронизированы между клиентом и сервером, как и обычное передвижение игрока). Класс CASW_Melee_Attack описывает каждую анимацию атаки, ее повреждение, зону действия и возможность комбинирования с другой атакой. | ||
== Другие интересные файлы == | == Другие интересные файлы == | ||
;asw_shareddefs.cpp/.h | ;asw_shareddefs.cpp/.h | ||
: | :Содержит различные определения, collision-группы, классификации и прочее для Alien Swarm. | ||
;clientmode_asw.cpp/.h | ;clientmode_asw.cpp/.h | ||
: | :Присутствует на клиенте и получает вызовы функций при инициализации уровня, его освобождении и обновление кадров. | ||
;asw_playeranimstate.cpp/.h | ;asw_playeranimstate.cpp/.h | ||
: | :Отвечает за анимацию солдата. Исходя из типа перемещения сущности, углов и событий анимации решается, какую анимацию проиграть. | ||
;asw_marine_gamemovement.cpp/.h | ;asw_marine_gamemovement.cpp/.h | ||
: | :Отвечает за команды перемещения и передвижение солдата. | ||
;asw_input.cpp, asw_in_main.cpp, asw_in_mouse.cpp | ;asw_input.cpp, asw_in_main.cpp, asw_in_mouse.cpp | ||
: | :Эти файлы читают ввод с клавиатуры/мыши и превращают его в CUserCmd которая управляет солдатом, прицелом и стрельбой. Они также отвечают за вертикальное автоприцеливание на стороне клиента и представление позиции мыши в мировую координату. | ||
== Подробнее == | == Подробнее == | ||
* | * Присоединяйтесь к hlcoders: [http://list.valvesoftware.com/mailman/listinfo/hlcoders mailing list] и [irc://irc.gamesurge.net/hlcoders IRC channel] | ||
* | * По вопросам относительно специфики кода Alien Swarm, вы можете обратиться сюда: [mailto:jonathan@valvesoftware.com?subject=Alien%20Swarm%20code jonathan@valvesoftware.com]. | ||
[[Category:Alien Swarm]] | [[Category:Alien Swarm]] | ||
[[Category:Programming]] | [[Category:Programming]] |
Revision as of 11:59, 30 January 2014
Компиляция исходного кода
Смотрите Swarm SDK Create a Mod для инструкций по компиляции исходного кода Alien Swarm и настройке Visual Studio.
Классы 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, Jaeger, 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_Area, но для компьютера, обычно используется для Цели "Скачать". Если заблокирована, начнется мини-игра "взломай тумблер".
- 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, вы можете обратиться сюда: jonathan@valvesoftware.com.