Wiremod Expression 2. Èçó÷àåì îñíîâû

Wiremod Expression 2. Èçó÷àåì îñíîâû


×òî òàêîå Expression 2



Expression 2 - ýòî ÿçûê ïðîãðàììèðîâàíèÿ, ïîñòàâëÿåìûé ñ àääîíîì Wiremod, êîòîðûé ïîçâîëÿåò ìàíèïóëèðîâàòü îáúåêòàìè, ñîçäàâàòü ãîëîãðàììû, ïðîâîäèòü ìàòåìàòè÷åñêèå âû÷èñëåíèÿ è òîìó ïîäîáíîå. Êàê è êàæäûé ÿçûê ïðîãðàììèðîâàíèÿ, îí èìååò ñâîè ôóíêöèè, êîíñòðóêöèè è ïðàâèëà.  êîìïèëÿòîðå ÿçûêà ïðèñóòñòâóåò E2Helper, âàø âåðíûé ïîìîùíèê, ïîçâîëÿþùèé âàì íàéòè íåîáõîäèìóþ âàì ôóíêöèþ è óçíàòü, ÷òî ýòà ôóíêöèÿ äåëàåò, âîçâðàùàåò è êàêèå àðãóìåíòû ïðèíèìàåò. Ïðàâäà, îí íà àíãëèéñêîì ÿçûêå, òàê ÷òî ó íåêîòîðûõ ìîãóò âîçíèêíóòü òðóäíîñòè.





Îêíî êîìïèëÿòîðà



Äëÿ íà÷àëà ðàññìîòðèì íàøå îêíî êîìïèëÿòîðà. ×òîáû îòêðûòü åãî, íåîáõîäèìî îòêðûòü Q-ìåíþ, ñïðàâà ñâåðõó âûáðàòü âêëàäêó Wiremod (êîíå÷íî æå, íàäî ñêà÷àòü Wiremod, íî ðàç âû ÷èòàåòå ýòî ðóêîâîäñòâî, ÿ ïîëàãàþ, ÷òî îí ó âàñ óæå óñòàíîâëåí), äàëåå íàéòè ïàïêó "Chips, Gates", íàæàòü Expression 2 (äàëåå Expression 2 ÿ áóäó ïèñàòü êàê E2) è ïîòîì ñëåâà â îòêðûâøåìñÿ îêíå íàæàòü "New Expression".Èòàê, ïåðåä íàìè ïîÿâèëîñü âîò òàêîå îêíî:Wiremod Expression 2. Èçó÷àåì îñíîâûÑëåâà ìû âèäèì äðåâîâèäíóþ ñòðóêòóðó ïàïîê è ôàéëîâ ñ E2 ÷èïàìè. Òóò âû ìîæåòå âûáðàòü ôàéë, êîòîðûé õîòèòå îòðåäàêòèðîâàòü. Ñàìè ýòè ôàéëû íà êîìïüþòåðå õðàíÿòñÿ â ïàïêå SteamSteamAppscommonGarrysModgarrysmoddataexpression2. Íåáîëüøîé ñîâåò: ñîðòèðîâàòü E2 ôàéëû ëó÷øå èìåííî ÷åðåç ïðîâîäíèê Windows, ïîòîìó ÷òî ÷åðåç âñòðîåííûé ïðîâîäíèê E2 ýòî äåëàåòñÿ ãîðàçäî ìåäëåííåå.Åñëè âû ñîçäàëè ÷èï, íî ñëåâà îí íå ïîÿâèëñÿ, íàæìèòå âíèçó ñëåâà êíîïêó Update. Ýòî îáíîâèò ìåíþ, è âû óâèäèòå âàø íåäîñòàþùèé ÷èï. ñàìîì âåðõó ýòîãî ìåíþ åñòü ñòðîêà ïîèñêà, ñ ïîìîùüþ êîòîðîé ìîæíî íàéòè ÷èïû â âàøåé êîëëåêöèè.Ñâåðõó ðàñïîëîæåíî 5 êíîïîê (ïî ïîðÿäêó): Ñêðûòü/îòêðûòü ëåâîå ìåíþ ñ ôàéëàìè, ñîõðàíèòü òåêóùèé ôàéë, ñîçäàòü íîâûé ôàéë, óäàëèòü òåêóùèé ôàéë, îáíîâèòü ôàéë. Äóìàþ, ÷òî êîììåíòàðèè èçëèøíè.Ñïðàâà ñâåðõó òàêæå ðàñïîëîæåíî 4 êíîïêè: Sound Browser - òóò âû ìîæåòå íàéòè âñå çâóêè èç èãð Source, êîòîðûå ìîãóò áûòü èñïîëüçîâàíû ïðè ñîçäàíèè ÷èïà, E2Helper - ñáîðíèê âñåõ ôóíêöèé E2 c èõ îïèñàíèåì íà àíãëèéñêîì, Save as - ñîõðàíèòü ôàéë ïîä íîâûì èìåíåì, Save & Exit - ñîõðàíèòü ôàéë è âûéòè.×óòü íèæå ðàñïîëîæåíî ïîëå, ãäå ïîêàçûâàþòñÿ âñå îòêðûòûå íà äàííûé ìîìåíò E2 ÷èïû. ñàìîì íèçó åñòü ñòðîêà, ãäå ó ìåíÿ íàïèñàíî "Validation successful". Ïðè íàæàòèè íà ýòó ñòðîêó êîìïèëÿòîð ïðîâåðÿåò âàø êîä íà íàëè÷èå îøèáîê è â çàâèñèìîñòè îò òîãî, åñòü ëè îíè èëè íåò, ìåíÿåò ñâîé öâåò íà êðàñíûé èëè çåëåíûé, à òàêæå ïîêàçûâàåò ìåñòî, ãäå îáíàðóæåíà îøèáêà.Âàæíî: îáíàðóæèâàåòñÿ òîëüêî ïåðâàÿ âñòðå÷åííàÿ îøèáêà, òàê êàê êîìïèëÿòîð îäíîïðîõîäíîé. Òàêæå ìîæåò âûäàâàòüñÿ îøèáêà â òåõ ìåñòàõ, ãäå íà ñàìîì äåëå èõ íåò, òàê ÷òî ïåðèîäè÷åñêè âàì ïðèäåòñÿ ïðîñìàòðèâàòü âåñü êîä çàíîâî, ïîðîé ïî íåñêîëüêî ðàç.Îñíîâíàÿ çîíà êîìïèëÿòîðà - ìåñòî, ãäå âû áóäåòå ïèñàòü ñâîé êîä. Èìåííî òîìó, ÷òî òóäà íóæíî ïèñàòü, è áóäåò ïîñâÿùåíà îñòàâøàÿñÿ ÷àñòü ðóêîâîäñòâà.





Äèðåêòèâû



Ñîçäàäèì íîâûé ÷èï. Ïåðåä íàìè ïîÿâëÿþòñÿ 5 ñòðîê, íà÷èíàþùèõñÿ ñ @ (îíè íàçûâàþòñÿ äèðåêòèâàìè), è êîììåíòàðèè (çàêëþ÷åíû ìåæäó #[...]#):Wiremod Expression 2. Èçó÷àåì îñíîâûÊîììåíòàðèè ìîæåòå ñìåëî óäàëÿòü. Òóò ðàçðàáîò÷èêè ïèøóò ïîñëåäíèå îáíîâëåíèÿ ÿçûêà.Ðàññìîòðèì òåïåðü ïåðâûå ïÿòü ñòðîê:@name - èìÿ íàøåãî ÷èïà. Ïî óìîë÷àíèþ ïðè ñîõðàíåíèè ÷èï áóäåò áðàòü èìÿ, óêàçàííîå â ýòîé ñòðîêå, èíà÷å áóäåò èìÿ "generic".@inputs - ñïèñîê ïåðåìåííûõ, êîòîðûå áóäóò ïîäàâàòüñÿ íà âõîä íàøåãî ÷èïà. Èõ íåëüçÿ ìåíÿòü íåïîñðåäñòâåííî âíóòðè ÷èïà, à ìîæíî òîëüêî ñ÷èòûâàòü èõ òåêóùèå çíà÷åíèÿ.@outputs - ïðîòèâîïîëîæíîñòü @inputs. Îáúÿâëÿåò ïåðåìåííûå, êîòîðûå áóäóò ïîäàâàòüñÿ íà âûõîä ÷èïà. Èñïîëüçóåòñÿ â òåõ ñëó÷àÿõ, êîãäà âû õîòèòå ïåðåäàòü çíà÷åíèå èç ÷èïà íà äðóãîé ýëåìåíò èç Wiremod'a, íàïðèìåð, Screen èëè äðóãîé ÷èï. Òàêæå ñþäà ìîæíî çàíåñòè ïåðåìåííûå, çà çíà÷åíèÿìè êîòîðûõ âû õîòèòå ñëåäèòü ÷åðåç èíñòðóìåíò Debugger.@persist - ïåðåìåííûå, èñïîëüçóåìûå âíóòðè âàøåãî ÷èïà. Çíà÷åíèÿ ýòèõ ïåðåìåííûõ íåëüçÿ âûâåñòè îáû÷íûì ïóòåì, êàê, íàïðèìåð, âû áû ñäåëàëè ñ âûõîäíûìè ïåðåìåííûìè.@trigger - ñþäà ìû ïèøåì ñîáûòèÿ, ïðè êîòîðûõ áóäåò ñðàáàòûâàòü íàø ÷èï, íàïðèìåð, ìîæíî íàñòðîèòü ñðàáàòûâàíèå ÷èïà íà èçìåíåíèå îïðåäåëåííûõ âõîäíûõ ïåðåìåííûõ èëè âîîáùå âñåõ âõîäíûõ ïåðåìåííûõ.Òàêæå ïðèñóòñòâóåò íå óêàçàííàÿ çäåñü äèðåêòèâà @model. Îíà îïðåäåëÿåò ìîäåëü íàøåãî ÷èïà. Âìåñòî ñòàíäàðòíîé ìîäåëè ÷èïà ìîæíî èñïîëüçîâàòü, íàïðèìåð, áî÷êó, ÷åðåï, äà ÷òî óãîäíî! ïîñëåäíåì îáíîâëåíèè, êàê âèäíî íà ñêðèíøîòå, äîáàâëåíà äèðåêòèâà @autoupdate. Åñëè îíà ïðèñóòñòâóåò â ÷èïå, òî ïðè ñîçäàíèè èëè äóáëèðîâàíèè ÷èïà îí áóäåò èñêàòü ïîñëåäíþþ âåðñèþ ýòîãî ÷èïà è çàïóñêàòü åå.





Îïåðàòîðû



Ñèíòàêñèñ Ïðèìåð Îïèñàíèå
# #This is a comment Ýòî îäíîñòðî÷íûé êîììåíòàðèé. Âñå, ÷òî íàõîäèòñÿ âíóòðè íåãî, íå áóäåò îáðàáàòûâàòüñÿ êîìïèëÿòîðîì.
#[Comment]# Ýòî ìíîãîñòðî÷íûé êîììåíòàðèé. Ðàáîòàåò àíàëîãè÷íî ïðåäûäóùåìó çà èñêëþ÷åíèåì òîãî, ÷òî â íåãî ìîæíî çàêëþ÷èòü êàê ìíîæåñòâî ñòðîê, òàê è ÷àñòü îäíîé ñòðîêè.
if () {} if(A){B=C} Âûïîëíÿåò äåéñòâèÿ â ôèãóðíûõ ñêîáêàõ, åñëè ðåçóëüòàò âûïîëíåíèÿ ôóíêöèè A - èñòèíà
else {} else{A=B} Ýòîé êîíñòðóêöèè äîëæíà ïðåäøåñòâîâàòü if(){} èëè elseif(){}. Âûïîëíÿåò äåéñòâèÿ â ôèãóðíûõ ñêîáêàõ, åñëè íå áûëî âûïîëíåíî óñëîâèå ïðåäûäóùåé êîíñòðóêöèè
elseif () {} elseif (A) {B=C} Ñìåñü ïðåäûäóùèõ äâóõ êîíñòðóêöèé. Ýòîé êîíñòðóêöèè òàêæå äîëæíà ïðåäøåñòâîâàòü if(){} èëè elseif(){}. Âûïîëíÿåò äåéñòâèÿ â ôèãóðíûõ ñêîáêàõ, åñëè íå áûëî âûïîëíåíî óñëîâèå ïðåäûäóùåé êîíñòðóêöèè è åñëè áûëî âûïîëíåíî óñëîâèå â êðóãëûõ ñêîáêàõ
( ? : ) D = A ? B : C Åñëè A - èñòèíà, òî D=B, èíà÷å D=C
& if (A & B) {C = 1} Âûäàåò çíà÷åíèå èñòèíà, åñëè áûëè âûïîëíåíû îáà óñëîâèÿ, ñâÿçàííûõ îïåðàòîðîì &, èíà÷å âûäàåò çíà÷åíèå ëîæü
| if (A | B) {C = 1} Âûäàåò çíà÷åíèå èñòèíà, åñëè âûïîëíåíî õîòÿ áû îäíî èç óñëîâèé, ñâÿçàííûõ îïåðàòîðîì |, èíà÷à âûäàåò çíà÷åíèå ëîæü
== if (A == B) {C = 1} Îïåðàòîð ðàâåíñòâà (íå ïóòàéòå ñ îïåðàòîðîì ïðèñâàèâàíèÿ). Âûäàåò çíà÷åíèå èñòèíà, åñëè çíà÷åíèÿ ïî îáå ñòîðîíû îò îïåðàòîðà ðàâíû
>= if (A >= B) {C = 1} Âûäàåò çíà÷åíèå èñòèíà, åñëè çíà÷åíèå ñëåâà áîëüøå èëè ðàâíî çíà÷åíèþ ñïðàâà
<= if (A <= B) {C = 1} Âûäàåò çíà÷åíèå èñòèíà, åñëè çíà÷åíèå ñëåâà ìåíüøå èëè ðàâíî çíà÷åíèþ ñïðàâà
> if (A > B) {C = 1} Âûäàåò çíà÷åíèå èñòèíà, åñëè çíà÷åíèå ñëåâà áîëüøå çíà÷åíèÿ ñïðàâà
< if (A < B) {C = 1} Âûäàåò çíà÷åíèå èñòèíà, åñëè çíà÷åíèå ñëåâà ìåíüøå çíà÷åíèÿ ñïðàâà
!= if (A != B) {C = 1} Âûäàåò çíà÷åíèå èñòèíà, åñëè çíà÷åíèå ñëåâà íå ðàâíî çíà÷åíèþ ñïðàâà
! if (!A) {B = 1} Íåîáõîäèìî íàëè÷èå óñëîâèÿ. Èíâåðòèðóåò ðåçóëüòàò âûïîëíåíèÿ óñëîâèÿ
++ if (!A) {B++} Èíêðåìåíò. Ïðèáàâëÿåò 1 ê ïåðåìåííîé. Ýêâèâàëåíòíàÿ êîíñòðóêöèÿ B=B+1. Ïðîòèâîïîëîæíàÿ êîíñòðóêöèÿ --. Âû÷èòàåò 1 èç ïåðåìåííîé
~ if (~Button & Button) {DO stuff} Âûäàåò 1, åñëè òåêóùåå ñðàáàòûâàíèå áûëî âûçâàíî èçìåíåíèåì çíà÷åíèÿ ïåðåìåííîé
$ Opitch = Pitch + $Pitch * 3 Âûäàåò ðàçíîñòü çíà÷åíèé ïåðåìåííîé ìåæäó òåêóùèì è ïðåäûäóùèì ñðàáàòûâàíèåì ÷èïà.
-> ->Input or ->Output Åñëè èñïîëüçóåòñÿ ñ âõîäíîé ïåðåìåííîé, òî âûäàåò 1, åñëè ýòîò âõîä ñîåäèíåí ñ ÷åì-íèáóäü, åñëè èñïîëüçóåòñÿ ñ âûõîäíîé ïåðåìåííîé, òî ïîêàçûâàåò êîëè÷åñòâî âõîäîâ, ê êîòîðûì ïîäêëþ÷åí äàííûé âûõîä
#ifdef #ifdef entity:setAlpha(number) Ïðîâåðÿåò, äîñòóïíà ëè êîìàíäà íà ñåðâåðå
#else #else Åñëè ôóíêöèþ íåâîçìîæíî âûçâàòü íà ñåðâåðå, òî âûïîëíÿåòñÿ êîä ïîñëå #else
#endif #endif Çàêðûâàåò áëîê #ifdef





Öèêëû



Ñèíòàêñèñ Ïðèìåð Îïèñàíèå
while () {} while (A) {B++} Äåéñòâèÿ, îïèñàííûå â ôèãóðíûõ ñêîáêàõ áóäóò ïîâòîðÿòüñÿ äî òåõ ïîð, ïîêà âûïîëíÿåòñÿ óñëîâèå â êðóãëûõ ñêîáêàõ
for () {} for (I = A, B[, C]) {} Äåéñòâèÿ â ôèãóðíûõ ñêîáêàõ áóäóò âûïîëíÿòüñÿ äî òåõ ïîð, ïîêà I, êîòîðàÿ èçíà÷àëüíî èìååò çíà÷åíèå À, íå áóäåò ðàâíî B, ïðè÷åì ïðè êàæäîì âûïîëíåíèè I áóäåò óâåëè÷èâàòüñÿ èëè óìåíüøàòüñÿ íà çíà÷åíèå C. Åñëè C íåò, òî ïåðåìåííàÿ I óâåëè÷èâàåòñÿ íà 1 ïðè êàæäîé èòåðàöèè
foreach () {} foreach(K,V:type=Table) {} Ïðîõîäèò ïî âñåì ýëåìåíòàì òèïà type â ìàññèâå/òàáëèöå Table. Ê - ýòî èíäåêñ ïåðåìåííîé â Table, à V - ýòî íåïîñðåäñòâåííî ñàì ýëåìåíò. Àíàëîãè÷íî for(){} áóäåò âûïîëíÿòü äåéñòâèÿ âíóòðè ôèãóðíûõ ñêîáîê, ïîêà íå ïðîéäåò ïî âñåì ýëåìåíòàì Table. Åñëè âî âðåìÿ ïðîõîæäåíèÿ äàííîãî öèêëà áûëè ñîçäàíû íîâûå ïåðåìåííûå â Table, öèêë èõ ïðîèãíîðèðóåò
continue if (A) {continue} Ìîæåò áûòü èñïîëüçîâàíà òîëüêî âíóòðè öèêëà. Ïðè íàëè÷èè òàêîé êîíñòðóêöèè, öèêë ìãíîâåííî ïåðåéäåò íà ñëåäóþùóþ èòåðàöèþ, èãíîðèðóÿ ïîñëåäóþùèå ôóíêöèè
break if (A) {break} Ìîæåò áûòü èñïîëüçîâàíà òîëüêî âíóòðè öèêëà. Ïðè íàëè÷èè òàêîé êîíñòðóêöèè öèêë ìãíîâåííî çàâåðøèòñÿ, è íà÷íåòñÿ âûïîëíåíèå ïîñëåäóþùèõ îïåðàöèé





Òèïû äàííûõ è ïåðåìåííûå



Âñå ïåðåìåííûå äîëæíû íà÷èíàòüñÿ ñ áîëüøîé áóêâû. Íàïðèìåð:
@persist variable
ðàáîòàòü íå áóäåò, à
@persist Variable
áóäåò.Êîíñòàíò êàê îòäåëüíûé òèï â ÿçûêå íå ñóùåñòâóåò. Åñëè õîòèòå èñïîëüçîâàòü êîíñòàíòó, ïðîñòî íå èçìåíÿéòå åå â õîäå âûïîëíåíèÿ êîäà. ÿçûêå ïðèñóòñòâóåò 13 òèïîâ äàííûõ, íåêîòîðûå èç êîòîðûõ ïîäðàçäåëÿþòñÿ åùå íà íåñêîëüêî ïîäòèïîâ:
  • ×èñëî (Number)
  • Âåêòîð (Vector). Èìååò äâóìåðíûé, òðåõìåðíûé è ÷åòûðåõìåðíûé ïîäòèïû.
  • Óãîë (Angle)
  • Ñòðîêà (String)
  • Ñóùíîñòü (Entity)
  • Ìàññèâ (Array)
  • Òàáëèöà (Table)
  • Ðýéíäæåð - èçìåðèòåëü ðàññòîÿíèÿ (Ranger Data)
  • Êîñòü (Bone)
  • Ìàòðèöà (Matrix). Èìååò ïîäòèïû 2õ2, 3õ3, 4õ4.
  • Âàéðëèíê - ñëîæíàÿ ïðîâîäíàÿ ñâÿçü (Wirelink)
  • Êîìïëåêñíîå ÷èñëî (Complex Number)
  • Êâàòåðíèîí (Quaternion)
Wiremod Expression 2. Èçó÷àåì îñíîâûÏåðåìåííûå, êîòîðûå íå ÿâëÿþòñÿ ÷èñëîì, äîëæíû áûòü îáúÿâëåíû ñ íàçâàíèåì ýòîãî òèïà ïîñëå äâîåòî÷èÿ, êàê óêàçàíî íà ñêðèíøîòå.Åñëè ó âàñ íåñêîëüêî ïåðåìåííûõ îäíîãî òèïà, òî ìîæíî èõ îáúåäèíèòü îïåðàòîðîì [...], íàïðèìåð, òàê:
[Vector1 Vector2 Vector3]:vector
Ýòî ïîçâîëèòü âàì ñýêîíîìèòü ìåñòî è âðåìÿ.Òàêæå åñòü îñîáûé òèï äàííûõ: variable. Ïåðåìåííàÿ ýòîãî òèïà ìîæåò ïðèíèìàòü çíà÷åíèÿ ëþáîãî òèïà, òî åñòü, íàïðèìåð, ñåé÷àñ îíà ÷èñëî, à ÷åðåç äâå ìèíóòû îíà óæå âåêòîð.





Çàêëþ÷åíèå



Áóäó ðàä âàøèì êîììåíòàðèÿì. Åñëè ïîÿâèëèñü âîïðîñû, ñìåëî çàäàâàéòå èõ çäåñü èëè ïèøèòå â ëè÷êó.Ïèøèòå òàêæå, ÷òî õîòåëè áû åùå óâèäåòü â ýòîì ðóêîâîäñòâå (èëè â ïîñëåäóþùèõ). Óêàçûâàéòå íà ìîè îøèáêè è íåäî÷åòû, åñëè îíè ïðèñóòñòâóþò.Óäà÷íîãî èçó÷åíèÿ Expression 2 :)



˜˜˜˜˜˜˜ dle 10.6˜˜˜˜˜˜ ˜˜˜˜˜˜˜˜˜