Ru/Swarm C++ Code Overview: Difference between revisions

From Valve Developer Community
< Ru
Jump to navigation Jump to search
mNo edit summary
No edit summary
Line 7: Line 7:
== Компиляция исходного кода ==
== Компиляция исходного кода ==


See [[Swarm SDK Create a Mod]] for instructions on compiling the Alien Swarm source code and setting up Visual Studio.  
Смотрите [[Swarm SDK Create a Mod]] для инструкций по компиляции исходного кода Alien Swarm и настройке Visual Studio.  


== Классы Alien Swarm ==
== Классы Alien Swarm ==


Here is an overview of the major C++ classes in Alien Swarm. Most of the Alien Swarm .cpp/.h files begin with "asw_". The class names begin with CASW_ for server classes and C_ASW_ for networked client classes.  
Это обзор основного числа C++ классов в Alien Swarm. Большинство файлов исходного кода Alien Swarm начинаются с "asw_". Название класса начинается на CASW_ для серверных классов и C_ASW_ для классов клиента.  


;CASW_Player  
;CASW_Player  
:This is the Alien Swarm player class. Unlike most Source engine games, the player in Alien Swarm is an invisible commander entity. It does not move. If the player is currently controlling a marine, then calling the GetMarine() method on the player will return it.
:Это класс игрока Alien Swarm. В отличие от многих игр движка Source, игрок в Alien Swarm это невидимая сущность-командующий. Она не двигается. Если игрок контролирует солдата, то вызывается метод GetMarine(), который возвращает солдата под управлением игрока.


;CASW_Marine  
;CASW_Marine  
:This entity is the actual marine you see running around the levels and shooting aliens. It is derived from the CAI_BaseNPC class. When a marine is inhabited it means he is being directly controlled by a CASW_Player. When a marine is under direct control, his AI is disabled, he becomes a predicted entity and the player's input will drive the marine around.  
:Эта сущность и является солдатом, который бегает по уровням и убивает пришельцев. Наследуется от CAI_BaseNPC класса. Когда солдат "населен" это значит, что он находится под прямым контролем CASW_Player. Когда солдат находится под прямым контролем, его AI отключается, он становится предсказуемой сущностью и управляется вводом игрока.  
::Useful methods:  
::Полезные методы:  
:::GetCommander() - returns the CASW_Player who owns this marine.  
:::GetCommander() - возвращает CASW_Player который контролирует солдата.  
:::GetMarineResource() - returns the associated CASW_Marine_Resource.  
:::GetMarineResource() - возвращает ассоциированный CASW_Marine_Resource.  
:::GetASWWeapon( nSlot ) - returns the weapon equipped in that slot (where the inventory slot is either ASW_INVENTORY_SLOT_PRIMARY, ASW_INVENTORY_SLOT_SECONDARY or ASW_INVENTORY_SLOT_EXTRA).  
:::GetASWWeapon( nSlot ) - возвращает оружие, экипированное в указанном слоте (где слотом может являться ASW_INVENTORY_SLOT_PRIMARY, ASW_INVENTORY_SLOT_SECONDARY или ASW_INVENTORY_SLOT_EXTRA).  
:::GetMarineProfile() - returns the profile for this marine.
:::GetMarineProfile() - возвращает профиль для этого солдата.
:::IsInhabited() - returns true if a player is controlling the marine, false if it's under AI control.  
:::IsInhabited() - возвращает true если солдата контролирует игрок, false если он находится по контролем AI.  


;CASW_Marine_Resource  
;CASW_Marine_Resource  
:This class holds some networked data about each marine (similar to a player resource in other Source engine games). There is one of these for every selected marine in the game. The marine resource exists as soon as the marine is selected in the briefing (before the asw_marine entity is created). The marine resource also stays around after the marine is killed and the marine entity is deleted.  
:Этот класс содержит некоторые сетевые данные насчет каждого солдата (похожие на ресурсы игрока в других играх движка Source). Он разный для всех солдат в игре. Ресурс солдата существует ещё перед тем, как солдат выбран в брифинге (перед тем как создана сущность asw_marine). Ресурс солдата также остается после смерти солдата и удаления его сущности.  


::Useful methods:  
::Полезные методы:  
:::GetMarineEntity() - if there is a live spawned marine entity for this resource, this will return it.  
:::GetMarineEntity() - если есть хоть один существующий солдат для этого ресурса, будет возвращен он.  
:::IsInhabited() - returns true if a player is controlling the marine, false if it's under AI control.  
:::IsInhabited() - возвращает true если солдат под управлением игрока, false если под контролем AI.  
:::GetCommander() - returns the CASW_Player who owns this marine.  
:::GetCommander() - возвращает CASW_Player владеющего этим солдатом.  
:::GetProfile() - returns the profile for this marine.
:::GetProfile() - возвращает профиль для этого солдата.


;CASW_Marine_Profile  
;CASW_Marine_Profile  
:This represents the static data associated with each of the characters in the game. There is a profile for Sarge, Jaeger, Wildcat, etc. From this class you can access their name, portrait images and skill set.
:Этот класс представляет собой статичные данные относительно каждого персонажа в игре. Предоставляет доступ к таким профилям как Sarge, Jaeger, Wildcat и другим. Из этого класса вы можете получить их имя, портрет, умения.


;CASW_Game_Resource  
;CASW_Game_Resource  
:This holds an array of marine resources, objectives and other networked game state. You can get to this object with the global accessor ASWGameResource().  
:Содержит массив ресурсов солдат, целей и других игровых состояниях. Вы можете получить экземпляр класса через глобальную функцию ASWGameResource().  
::Use GetMaxMarineResources() and GetMarineResource( i ) to iterate over all the marine resources. if you want to iterate over all the marines, you can call GetMarineEntity() on each marine resource.  
::Используйте GetMaxMarineResources() и GetMarineResource(i) чтобы пройтись по всем ресурсам солдат. Если вы хотите пройтись по солдатам, можете использовать GetMarineEntity() для каждого ресурса солдата.  
::Use ASW_MAX_OBJECTIVES and GetObjective( i ) to iterate over each objective.
::Используйте ASW_MAX_OBJECTIVES и GetObjective(i) чтобы пройтись по каждой цели.


;CAlienSwarm  
;CAlienSwarm  
:This is the gamerules object for Alien Swarm. It controls overall game state, selecting marines, selecting equipment, spawning marines, completing the mission, players connecting, etc. You can get to this object with the global accessor ASWGameRules().  
:Игровый правила для Alien Swarm. Управляет всеми состояниями игры, выбирает солдат, снаряжение, создает солдат, завершает миссию, подключает игроков и прочее. Вы можете получить доступ к экземпляру класса через ASWGameRules().  
::Useful methods:  
::Полезные методы:  
:::GetSkillLevel() - returns 1, 2, 3 or 4 (for easy, normal, hard, insane)  
:::GetSkillLevel() - возвращает 1, 2, 3 или 4 (легко, нормально, сложно, безумие, соответственно)  
:::GetGameState() - returns the current game state. See the ASW_GameState enum for possible states.  
:::GetGameState() - возвращает текущее состояние игры. Смотрите ASW_GameState enum для возможных состояний.  
:::StartMission() - this gets called when all players have selected their marines and the leader presses the Start Mission button.  
:::StartMission() - вызывается когда все игроки выбрали их солдат и лидер нажал кнопку "Начать Миссию".  
:::MissionComplete( bool bSuccess ) - this gets called when the mission ends.
:::MissionComplete( bool bSuccess ) - вызывается при завершении миссии.


;CASW_Weapon  
;CASW_Weapon  
:This is the base weapon class for all Alien Swarm weapons.
:Это базовый класс оружия для всех оружий в Alien Swarm.


;CASW_WeaponInfo  
;CASW_WeaponInfo  
:This holds the static data associated with each weapon type, read from the weapon script files in swarm/scripts.
:Содержит статичные данные, ассоциированные с каждым типом оружия, прочитанную из скриптов оружия в "swarm/scripts".


;CASW_Objective  
;CASW_Objective  
:This is the base class for each objective. Objectives receive events from the CASW_Mission_Manager and will mark themselves as complete/incomplete and potentially complete the mission.  
:Это базовый класс для каждой цели. Цели получают события из CASW_Mission_Manager и помечают себя как выполненные/невыполненные и потенциально завершают миссию.  
::Useful methods:  
::Полезные методы:  
:::IsObjectiveComplete()  
:::IsObjectiveComplete()  
:::IsObjectiveHidden()  
:::IsObjectiveHidden()  
Line 64: Line 64:


;CASW_Alien  
;CASW_Alien  
:This is the base class for most aliens in Alien Swarm (all except the CASW_Buzzer and CASW_Grub).
:Это базовый класс для всех пришельцев в Alien Swarm (кроме CASW_Buzzer и CASW_Grub).


;CASW_Egg  
;CASW_Egg  
:The alien egg that hatches parasites.
:Это яйцо пришельцев, которое плодит паразитов.


;CASW_Door  
;CASW_Door  
:The class used for doors. Doors can auto-open, be welded shut, get damaged and fall down. Has an associated CASW_Door_Area trigger for triggering auto-open and knowing when the marine is within weld range.
:Этот класс используется для дверей. Двери могут самостоятельно открываться, быть запаянными, получать повреждения и падать. Имеют ассоциированный CASW_Door_Area переключатель для переключения авто-открытия и известия о том, что солдат в пределах зоны сварки.


;CASW_Button_Area  
;CASW_Button_Area  
:This trigger volume represents an interactive button panel. It can be locked and the player will have to complete a wire puzzle to open it.
:Этот переключатель представляет собой интерактивную панель-кнопку. Может быть заблокирована и игроку придется выполнить мини-игру с проводами чтобы открыть ее.


;CASW_Computer_Area  
;CASW_Computer_Area  
:Similar to a button area, but for an interactive computer, typically used for a download objective. If locked, it will spawn a tumbler hack minigame.
:Похожа на CASW_Button_Area, но для компьютера, обычно используется для Цели "Скачать". Если заблокирована, начнется мини-игра "взломай тумблер".


;CASW_Marine_Skills  
;CASW_Marine_Skills  
:This class will return skill based values for each marine in the game. It can be used to find damage bonuses, move speed bonuses, etc. for each marine, based on their profile and the number of skill points each marine has. The number of skill points each marine has is networked to all players via the CASW_Game_Resource.
:Этот класс возвращает основанные на умении значения для каждого солдата в игре. Может быть использована улучшения наносимого урона, скорости передвижения и прочего. У каждого солдата свои умения, основанные на его профиле и количестве очков умений, которое он может иметь. Количество очков умений, которое солдат может иметь, устанавливается для игроков через CASW_Game_Resource.


;CASW_Spawner  
;CASW_Spawner  
:This entity is used to spawn aliens in the level. It is placed by the level designer and has many keyfields and inputs for controlling spawn rate, max aliens spawned, unburrow animations for the alien.
:Эта сущность используется для создания пришельцев на уровне. Устанавливается левел-дизайнером и имеет много полей ввода и вводов для контроля над частотой спавна, максимального количества пришельцев, анимацию появления для пришельца.


;CASW_Campaign_Save  
;CASW_Campaign_Save  
:When playing Alien Swarm through the main menu, the game is always in campaign mode. This means there is an active CASW_Campaign_Save object, which holds information on the current campaign you are playing, which missions are complete, how many retries you've had on each mission and which marines each player selected previously (and the skill points of each marine, if you're playing with custom skill points turned on).  
:Играя в Alien Swarm через главное меню, игра всегда находится в режиме кампании. Это значит имеется активный объект CASW_Campaign_Save, который содержит информацию о текущей кампании в которую вы играете, какие миссии были завершены, как много попыток было у каждой миссии и какие солдаты были выбраны у игроков в прошлый раз (также количество очков умений каждого солдата, если вы играете со специальными очками умений).  
::You can get the current campaign save by doing: ASWGameRules()-&gt;GetCampaignSave()
::Вы можете получить сохранение текущей игры через: ASWGameRules()-&gt;GetCampaignSave()


;CASW_Campaign_Info  
;CASW_Campaign_Info  
:This describes the static data for a campaign. Each campaign has a name, textures and an array of Campaign_Mission_t's, which describe each mission and how they link together.  
:Описывает данные для кампании. Каждая кампания имеет название, текстуры и массив Campaign_Mission_t, который описывает каждую миссию и как они взаимодействуют друг с другом.  
::Useful methods:  
::Полезные методы:  
:::GetNumMissions()  
:::GetNumMissions()  
:::GetMission( i )
:::GetMission(i)


;CASW_Melee_System  
;CASW_Melee_System  
:This class handles predicted melee attacks (the animation, anim events and animation driven movement are predicted and synchronized between client and server, the same way normal player movement is). The CASW_Melee_Attack class describes each attack's animation, damage, area of effect and if it combos from another attack.
:Этот класс осуществляет работу с "предсказуемыми" рукопашными атаками (их анимация, события анимации и движение управляемое анимацией предсказуемы и синхронизированы между клиентом и сервером, как и обычное передвижение игрока). Класс CASW_Melee_Attack описывает каждую анимацию атаки, ее повреждение, зону действия и возможность комбинирования с другой атакой.


== Другие интересные файлы ==
== Другие интересные файлы ==


;asw_shareddefs.cpp/.h  
;asw_shareddefs.cpp/.h  
:This lists various Alien Swarm defines, collision groups, classifies, etc.
:Содержит различные определения, collision-группы, классификации и прочее для Alien Swarm.


;clientmode_asw.cpp/.h  
;clientmode_asw.cpp/.h  
:Exists on the client and receives function calls on level init, shutdown and per frame.
:Присутствует на клиенте и получает вызовы функций при инициализации уровня, его освобождении и обновление кадров.


;asw_playeranimstate.cpp/.h  
;asw_playeranimstate.cpp/.h  
:This is responsible for animating the marines. It looks at the entity's movement, angles and anim events to decide which animations to play.
:Отвечает за анимацию солдата. Исходя из типа перемещения сущности, углов и событий анимации решается, какую анимацию проиграть.


;asw_marine_gamemovement.cpp/.h  
;asw_marine_gamemovement.cpp/.h  
:This processes movement commands and drives the marine around.
:Отвечает за команды перемещения и передвижение солдата.


;asw_input.cpp, asw_in_main.cpp, asw_in_mouse.cpp  
;asw_input.cpp, asw_in_main.cpp, asw_in_mouse.cpp  
:These files read keyboard/mouse input and turn it into the CUserCmd that will drive the marine around, aim the cursor and shoot. They also handle clientside vertical autoaim and turning the mouse position into a world location.
:Эти файлы читают ввод с клавиатуры/мыши и превращают его в CUserCmd которая управляет солдатом, прицелом и стрельбой. Они также отвечают за вертикальное автоприцеливание на стороне клиента и представление позиции мыши в мировую координату.


== Подробнее ==
== Подробнее ==


* Be sure to join the hlcoders [http://list.valvesoftware.com/mailman/listinfo/hlcoders mailing list] and [irc://irc.gamesurge.net/hlcoders IRC channel]
* Присоединяйтесь к hlcoders: [http://list.valvesoftware.com/mailman/listinfo/hlcoders mailing list] и [irc://irc.gamesurge.net/hlcoders IRC channel]
* For questions regarding Alien Swarm code specifically, you can email [mailto:jonathan@valvesoftware.com?subject=Alien%20Swarm%20code jonathan@valvesoftware.com].
* По вопросам относительно специфики кода 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

Template:Otherlang2

Template:Totranslate:ru

Компиляция исходного кода

Смотрите 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 которая управляет солдатом, прицелом и стрельбой. Они также отвечают за вертикальное автоприцеливание на стороне клиента и представление позиции мыши в мировую координату.

Подробнее