From 7f63584f7cb4f2b70cbf395f5cabd2d6cd748784 Mon Sep 17 00:00:00 2001 From: Sara Date: Fri, 13 Jun 2025 15:12:22 +0200 Subject: [PATCH] the rest of the fucking owl --- .../index/actor_body.cpp.3DBD3D1A5C1819D9.idx | Bin 1424 -> 2328 bytes .../index/actor_body.h.E6B5DA66D5128F55.idx | Bin 2888 -> 3248 bytes ...tor_state_machine.cpp.AEBD1F5B3A3BA6BD.idx | Bin 0 -> 2756 bytes ...actor_state_machine.h.8F19423C17C722EB.idx | Bin 0 -> 9628 bytes .../index/equipment.cpp.0DAD3B9F041D4E8F.idx | Bin 7180 -> 8056 bytes .../index/equipment.h.87F30A43991E43C4.idx | Bin 13676 -> 13604 bytes justfile | 2 +- modules/tabtargeting/actor_body.cpp | 41 +++++++- modules/tabtargeting/actor_body.h | 12 ++- modules/tabtargeting/actor_state_machine.cpp | 84 ++++++++++++++++ modules/tabtargeting/actor_state_machine.h | 59 ++++++++++- modules/tabtargeting/equipment.cpp | 18 +++- modules/tabtargeting/equipment.h | 1 - modules/tabtargeting/register_types.cpp | 5 + project/buttons.gd | 7 ++ project/buttons.gd.uid | 1 + project/equip_items/chestplate.tres | 3 + project/equip_items/weapon1.tres | 9 ++ project/project.godot | 3 +- project/scene.tscn | 95 ++++++++++++++++++ 20 files changed, 331 insertions(+), 9 deletions(-) create mode 100644 .cache/clangd/index/actor_state_machine.cpp.AEBD1F5B3A3BA6BD.idx create mode 100644 .cache/clangd/index/actor_state_machine.h.8F19423C17C722EB.idx create mode 100644 modules/tabtargeting/actor_state_machine.cpp create mode 100644 project/buttons.gd create mode 100644 project/buttons.gd.uid create mode 100644 project/equip_items/chestplate.tres create mode 100644 project/equip_items/weapon1.tres create mode 100644 project/scene.tscn diff --git a/.cache/clangd/index/actor_body.cpp.3DBD3D1A5C1819D9.idx b/.cache/clangd/index/actor_body.cpp.3DBD3D1A5C1819D9.idx index 5b29a397d1eae4d724a4215a03a8e9ea0a09d13c..1cce0b75f613e67e4fb6e7fee512f0e630e09817 100644 GIT binary patch literal 2328 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 literal 0 HcmV?d00001 diff --git a/.cache/clangd/index/actor_state_machine.h.8F19423C17C722EB.idx b/.cache/clangd/index/actor_state_machine.h.8F19423C17C722EB.idx new file mode 100644 index 0000000000000000000000000000000000000000..2e1d9b6334be304b8f90b88474edf534baf88e40 GIT binary patch literal 9628 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 Srqgy`6HB>_*EHbe@%{sXr{@{~ literal 0 HcmV?d00001 diff --git a/.cache/clangd/index/equipment.cpp.0DAD3B9F041D4E8F.idx b/.cache/clangd/index/equipment.cpp.0DAD3B9F041D4E8F.idx index e323f642ee79f707ba3ec49121de65dff7ac8b25..40114d0d2b631475a2878652522430476803b0ca 100644 GIT binary patch literal 8056 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 Y^ws(r{S5td{WN{KzCvF%f*8s9Kcy|lYXATM literal 7180 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 diff --git a/.cache/clangd/index/equipment.h.87F30A43991E43C4.idx b/.cache/clangd/index/equipment.h.87F30A43991E43C4.idx index 3202309daa2f7275b9113ed98595269ebcfe9685..fb8f9b51a77f01f0b0a4a43b55293f4f93b12850 100644 GIT binary patch literal 13604 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 literal 13676 zcmb_?2UJwY_y6v5cWIB^Wm)Rd?kcHbexJ&@{%1h!_PGyP_tsB(Vc( zVk7n%1EPs&?7dfvqEXaXq9*8X-p>0h>we$K`JeNbbDZP8_h#naJD+>+XYNd|m@Zwi zLL`!?teCOGvPY-OBoc|1{L39ZYVahfL^6~-7`tpo?<4V#0@W|7N6K#&X6P)M+<4G9 zXHL5@-7>TRyW5t$8GkqQ&(xw%Q_sf-tnn{ydobu`*YWoGm#b4NW6wW-xy-|@jk>t& z0ps~3*#_@wHNyv3~6 zwc3NDeY}>evfBCVmVdIQ&6;<9^Ol^tv}JkV!-ua%{_NXwm8Wgt?5NF0)0~!^9;(sJ z8P&9`e0iz+xb&Qkn?sV*XRSz8d98U=HlxY%9R+g+`Z!1LeAVWU*UE!US{&YSyUpN% zcOx{VdD1h#vJc9Rm4s$ZSz6cEw`IY@kSTYY{$4S0z_%>3`lA0~_2cgMUYu5jM{jMv z^+bzH(-Jdo{5v=1!KT>!GI{I0m&$J6DekzdqS?N2Yf9!?f3n@LaPv5>CacH2Mawtzr&5ia0cnRWhwq5-y9) zQtKPM=BoC}uCExYR5M{#5>FqEj|bOS(O8Suu`S0Tj?8#gu2510sRlZ&UT-1H$kV8$Vvas7M+#)M&DoNK>Dxs z=~!_x=oY7Dylf?&acrE93zvr*=HH#yqq4AninoT*T1z}b)FG~1fOUW~hA$m*Y*(=E zdUGYyktmmLoo=gd@OtCXL(A6hEDn%M2-3Mu@=i*9(;&U$`Hc29e;*4W!#9$6Ca?)k zThVfe0V>sG`}+tA*Ou_XN+6b?4}rlG&(Ni&D*16-ojObeoYk<`9O>c*w9X$JW{ zD+)eudA1Yzz=xRE%hszg=V9hy2LXo-Ih?omnN^IMX-@j**yng~DQt>8Uf)trt(`OS zS-hHQOI{CC4|C>{70GJ6KD*cDW|z~UJ=KgidHtpRm+oADw!dNU^*xfj?fd=NTfr!Z z^yX&f8hz6s{oAd<*(b{{_9NO8;Vd zSS!XJ>3DX_r)!mr6X|U!x76wz^q%BvcOx`^=>}q28igdB)=q0MZPvv=Swu{Say8SG z$nI|A?#{W%-E7g@-evXMiT9$)m5d`XO(vUZqi^tfNBrgYmyZN*BA_Co4Nwno<@#9n zF$}KDRsFjA!h=m}rVSa~U*qq=aSG0`ZjpPpUoVOnyjjhJlT{B_hdXgC6)ja5e3Fyx zS5w!e?ol%Kwh}H<9;wzhc)fq@w`miLc4vLf`#AvN;}kvvbG=ftHdQVnyfi`tdlxO(uIn(-$YhyUYP zmNi70^fBXqmp1i1t!Di2+DdL^2;=9S-sUR1{eDi(G$D9Rwn}#5y2-m4=9bRREL&Oq z@-kTxl`wc;yS@giRn@e8*Jpa*6*Gn<)A}j=RQjd?FNuzG&-Gq?=cbZzBhJ*!teK6z zfnm1CN}Z3lEPtbBLWrkFTSvQa?G)_{aIB4r=&~?(*FR)-Vi+4I8#m6y&c!f$QECcWwe}=)XDsE-o@@dK0SMC zIe)3Y`I?gt+r0LE+U?}4l}Sat7fTrp7bXoehbL<3uT?E99m~qr4$j~9NEdopD%0ru zLVY??FPlkI>OH&erColqUmo=LspLIcE=C$-uC>4P*Q%?PjzgO4KeyCBwGo+x7X@jE z3g*!(J@(7!OQ*mZq?UTNfR7Rv9Ny=sJs=b9yIc3}>cvgpOnpD`%+hTO<#O^-f;7P# zpQm!g?f* z(H1?R2J^Ar_sUf{)}?k?{gc@1ORc0IE(^F1nT{tuQ1kpt`}*bQ%2+A$f%c$6QYSqH zg1(oY_4u`St({8LR#W#l?kV}*zC--weowy`7^)GqI@h!CVd{!pTaYO$OG=`st4LTb z#v(?U>$oH^W=W@WESGGT?2OFMaw+l@OV9+COVy@2!P8l;zr4RCNC3+XupQut%)xSL z@-$1(6PC-6XILUDuw14*(-MJ@<+9{imar5=71g83<612<)7fqO+H&j5emQpJBObL- zi!RB|sw?Tv6CbPwF(lUH2_bC%=GRftcarAYi}sD&y1FQ#Y~T6kOMm&USKmB7yzqWL`Yd*j9&UUC94c8$EFqWx$rEjWB=5-X~iMLVK>i;wq}9Z@Ug|WrycIhdoJOV>i$5@ReiU z_=RqA>hD+*>Pe@M^}F=^d14*)20O?6^{&bL?onHew29i_qS(8HI;LBxbyC*+#E`}D zvpfgvTjDM%3d|R*kUzXO@u<5n=Y#6`%F3K6Z~osy7M*j-?!hDT!=jtnshW3*9d*WC zh!Kb=^S%hGE>z`t2r)ujvyxt=cinz#;>j={SVgA)g)Z1O5Ond|1;k;qp1mh0+TL$M zENUFrMg+vw40g)&5;XykgRKS;j*s}7#g0(}Uq)m)={FpR;WwjNJgcs|?@cB!#?$>D zXC-)tz4R9JU0vE?)~JYk7bY+9T)TND=VP+KdF<&+<8(jy5OItLp-YMxU`i8J@)iZ| zn!IFjGr@#N22^H*N^FY=R{1>L|2%LyWOGWHMZ7FVwC49IZ1d~g4foc5#VJ_{06 z3W0n@yhOf5{<4baEs;I{8k&2@e}>eYlxg z6d?dkDmwX_J%i^5X}d>ZmrBge$F`>7@1i%{%{@x@s))Y5+T9=a-A;LH(UBg%iRx~C zyrwG_lBi)EC1Ds7?Mm$Sf8Vk=xGi~XZ2#4>$CcKf+SRrZ^8vk)>A`$$etxdayA|(c z`UyTMxOqSJ{Har6Rrfd7yhvmyE6J;$ zIi2NNYFoO4XtP`^c`G#-9?ONuL)6&#AvF`}jn}pP=TF+s_~CAZ;Hq#l*xKZ43p?%l z2a6J;gs;H`s$CBHHJ$ddlc=#3QByY8-mS@j(M^U#QYN8`uN1&JQ7Isg`3eDy;qTaO z(*4&fqe(P0UNLH31pGhW=yux`Y>5{9a;_|>@k*(~Tk1{lfg}4HkK1u;U$mS?QaG1P zzlcYVxVNa6-p;3shyX=rLAsae?Fj1lcK98SGi{$m6BF>^5&`nVSODTel;Z0e&^7!1 zt5({&H8G-aI1#kXENtkYl#=5k2R-`zOe`^p!qAxyvibF zH1!{huuYZu$EFU$;u&g?xRDp}>nI@Q*QP)hsDAS@x2ssS1! zLMcs?0lO@hE=`vq%@BGi&5#+J+fpLE;f)gnHsNex_oupGz@4lx4IM!ts<#*b@h^9p( z8&nX5z=K_olfI6K5QaJ;K|fzV#N#cRb1UEPN=p&qQQLCc72f-+KBw+y*h1^gQ*V)d z;r@j;OK3a-o1^h)@~zbm&%ARTi?Cs0QLjCblbKy5DT0L908@n(s>^q`IV5CWEx*#k ztK!!b(%0C@;irVj@a4@0v?f?2XkvES7x({R;KtyjN&h%=?LQMH070b_fUN@rq5%)g z0QFJ}3tA^N@a zz{nl^`?iJy;3-)yz8VW^4L&SNb)Y9jj`*$w#uh~@R*!=1&M-Ewc%l5Ki*0{j`q0xk z>pyLq*>3W$2P?g@1m}pUu^6%Z!0Zd%<1GzW)3pZJ^){qS9k`h6*?_4sbLgJgkpnS71?1{s^L@q;X*yiXqU zwS8<^z!OXaM6I8E%@_I+z_52FUmFt?_!t2QU-E}KDEX7ee5oIj?4Ed`e$J%$F@ieS z4;c8^hY^XIxzcQ5f*yxA3pr@q}C&$32P-__S}% zi#cKY4o@J+4si%^#A<1|blY?-D1esB&}7(x0%*BRn@kNTfR@WrXW4)PM4#N>Pm_6T zqM$G`DtHDl4}a8w(EGA_sIO)1v?Aea6cRc|WG!p8_jr-0cCg_Wr6W@A*Djk(J~Cb( zY9}N_xCz;G@CPXkF+R*9Ots}uhs%{wTP_fKWtXHgqF3^MRt@wjU7l_QJ7DW78c=|L zDgpSd?TMk^yEg4SRa6%^0rD2Xnz2X0MivX90=r3yVU!yH8RA>~IThA@Y3lZOX5J}t zP4sQH;8^d@*T0x6L|O5&f#4QGu=&u~l)gaqrvtnCwu>yBD{6Waad2A3#|m;(hFCHF zrMqQL@-JVJzW<9ZY|L_MJWGQJl|$eiuL*$w$V0DLRnqa7v$5Z-|0Y9MyYeGt^FHh9r|QU-1jhqcCCc$< zxB&9F8%NhIf7WxOV1A#iw!>3y&iIFO@mj?)F|=BUzus+*km zRBm(p&EnO>jlw1lhi-Hh97)kxaEw4_L1O8mE?hV;^3X;>DNvD8?w9$cZ)-P-GG(w} zI<7eF4M^Si{>2ohazTACSt{7+$a%}c*Rl8M04s%PO$9?tqUs|_;zXPnnLi0fKtOsX z3&z7+LnRJn;>t)A=lO1o-cnAOox<><9C8Qp7WtJ>!d$~hlDtU zC;IS*@6ZQz67rZobVsBcRM%!}L6`E)0+^9VsWGt{p!z1LT|0BGkS)HGOsovmmL_SwJZ0EMO3H7BC1p z3zFK_)72xZ3x@0#6c#TAUYtC9@aXX+yFZeLHPOA+{hir#k1$-v;#VWs3%4FpBcno3 z5sO$z5sSkqy568dh|VU>W(UEYXKu1Et%g;R3?B#;y6@nqL4WzoDC_;5X zexn1RC_;4s`#%sqvu5^-Zz~y=>*dtT6+mRU1Z{%j-rdu4X4bpa6)T>19j@q9CEyP= zD2l%~(;nSw-={kVPamjF7)-;qol8KYFxFckJ7i+^_bu;AOzIn zs1KmtLd4;3%^=zRIXf^*dCmQ}U^yU#MsgW z_e)L)^5QX-7l^ZJT^anYrs9MEBk^52g^@U-DU7gB#L=E8kipR?4naV$uQOR!90-vR zXuJqG#xz-1+)5&5=Wipy?2>Cwe`};2cUDS)hwB{H?o%RGnBO}qD24>LE<7-py)ZjvfiKw^=MP%ZyKq1n@7fjIQne+WuJChtQ2&;ud zODYrg@nEbbeX;u_0vJ;%urw3PYOhtdy_HmO(Ilgysz=1-uVlfIkh~O@^eUEN%iwR} zuR)$7*9z@J-4SM4F3cv(89P6gi?)k)gZAVKi#o;$XI0U+$E3}8k$PRu>T%q#r{=R> z!!KT`hF?4!8h-Jy0Kc@q{Uuv7!R?0NWdJkvGDK_YWdJkvGK6Oe6Mz|)%}5sEZ<--K zb$k-u;=*X_TQZh&&^d5;OjNLUa>Jbjmh*G+YYgMDoWIuJ1x1vSzy*B|*LmF%761f& zPu!cb9vOaj1XLosQv@KpQ&b|mQ&b|mQ&b|mgZ+w^#VdPA+obklynqzsAkwh2 z=px`u^S>5hcx<=np{mll{|sE#*Ve^uTh{T3Nhm_8oIExT^0Sp~D!r?{UJ7gT|GTS0 z958_&E{l?Y$6pdf^uiIH=xQM8V^vIsJUV#$s^p^MZ%sn$y6(Yi8x8UP$Hd`Vz6o*~ zY}*%)5q9QG_xojlZqPr1LB-FBa9Trz=dZ9L2*FgM!h^5D`HAqxyNj%}+kL{5Jl_dY zf_LE@nasrBhDAuj^$nApgR?*)fUzG?0D;Mpo3umIeis_editor_hint()) { + return; + } + switch(what) { + case NOTIFICATION_READY: + this->equipment = Object::cast_to(this->get_node(NodePath("Equipment"))); + break; + } +} + +void ActorBody::_attack() { + if(this->attack_requested != nullptr) { + this->attack_requested->receive_damage(this->equipment->apply(this->equipment->get_weapon()->create_base_damage_event(this), this)); + this->attack_requested = nullptr; + } +} + +bool ActorBody::is_attack_requested() { + return this->attack_requested != nullptr; } void ActorBody::receive_damage(DamageEvent event) { - this->health -= event.compound_damage; + this->health -= this->equipment->apply(event, this).compound_damage; print_line(vformat("Damage dealth (%d to %s, %d remaining", event.compound_damage, this->get_name(), this->health)); + if(this->health < 0) { + this->queue_free(); + } +} + +void ActorBody::request_attack(ActorBody *target) { + this->attack_requested = target; +} + +void ActorBody::set_health(int health) { + this->health = health; +} + +int ActorBody::get_health() const { + return this->health; } diff --git a/modules/tabtargeting/actor_body.h b/modules/tabtargeting/actor_body.h index c1fa26ee..df9b1d02 100644 --- a/modules/tabtargeting/actor_body.h +++ b/modules/tabtargeting/actor_body.h @@ -8,13 +8,19 @@ class ActorBody; class ActorBody : public CharacterBody3D { GDCLASS(ActorBody, CharacterBody3D); static void _bind_methods(); + void _notification(int what); public: + void _attack(); + bool is_attack_requested(); void receive_damage(DamageEvent event); - void send_damage(int amount, ActorBody *target); + void request_attack(ActorBody *target); + void set_health(int health); + int get_health() const; private: - int health{10}; + int health{50}; int max_health{10}; + ActorBody *attack_requested{nullptr}; - class Equipment *equipment{nullptr}; + Equipment *equipment{nullptr}; }; #endif // !ACTOR_BODY_H diff --git a/modules/tabtargeting/actor_state_machine.cpp b/modules/tabtargeting/actor_state_machine.cpp new file mode 100644 index 00000000..8309411b --- /dev/null +++ b/modules/tabtargeting/actor_state_machine.cpp @@ -0,0 +1,84 @@ +#include "actor_state_machine.h" +#include "core/config/engine.h" +#include "tabtargeting/actor_body.h" + +void ActorState::_bind_methods() { +} + +void ActorStateMachine::_bind_methods() { +} + +void ActorStateMachine::_notification(int what) { + if(Engine::get_singleton()->is_editor_hint()) { + return; + } + switch(what) { + case NOTIFICATION_READY: + this->ready(); + break; + case NOTIFICATION_PROCESS: + this->process(this->get_process_delta_time()); + break; + default: break; + } +} + +void ActorStateMachine::ready() { + this->set_process(true); + this->body = Object::cast_to(this->get_parent()); + this->add_state(); + this->add_state(); + this->current_state->state_entered(); +} + +void ActorStateMachine::process(double delta) { + this->current_state->process(delta); + this->try_next_state(); +} + +void ActorStateMachine::try_next_state() { + StringName name{this->current_state->next_state()}; + if(name != this->current_state->get_class()) { + this->switch_state(this->states[name]); + } +} + +void ActorStateMachine::switch_state(ActorState *state) { + this->current_state->state_exited(); + this->current_state = state; + this->current_state->state_entered(); +} + +void IdleState::_bind_methods() {} + +void IdleState::state_exited() { + print_line("state idle exited"); + if(this->body->is_attack_requested()) { + this->body->_attack(); + } +} + +StringName IdleState::next_state() const { + if(this->body->is_attack_requested()) { + return ActingState::get_class_static(); + } + return this->get_class_name(); +} + +void ActingState::_bind_methods() {} + +void ActingState::state_entered() { + print_line("state acting exited"); + this->timer = this->seconds_to_wait; +} + +void ActingState::process(double delta) { + this->timer -= delta; +} + +StringName ActingState::next_state() const { + if(this->timer <= 0) { + return IdleState::get_class_static(); + } + return this->get_class(); +} diff --git a/modules/tabtargeting/actor_state_machine.h b/modules/tabtargeting/actor_state_machine.h index 0f71f381..b35a88e5 100644 --- a/modules/tabtargeting/actor_state_machine.h +++ b/modules/tabtargeting/actor_state_machine.h @@ -1,13 +1,70 @@ #ifndef ACTOR_STATE_MACHINE_H #define ACTOR_STATE_MACHINE_H +#include "core/string/string_name.h" #include "scene/main/node.h" +#include "core/object/ref_counted.h" +class ActorBody; + +class ActorState : public RefCounted { + GDCLASS(ActorState, Object); + static void _bind_methods(); +public: + virtual void state_entered() {} + virtual void process(double delta) {} + virtual StringName next_state() const { + return this->get_class(); + } + virtual void state_exited() {} +protected: + ActorBody *body{nullptr}; + friend class ActorStateMachine; +}; class ActorStateMachine : public Node { GDCLASS(ActorStateMachine, Node); static void _bind_methods(); -public: + void _notification(int what); + void ready(); + void process(double delta); + template + void add_state(); + void try_next_state(); + void switch_state(ActorState *state); private: + ActorBody *body{nullptr}; + ActorState *current_state{}; + HashMap states{}; +}; + +template +void ActorStateMachine::add_state() { + ActorState *state{memnew(TState)}; + state->body = this->body; + this->states.insert(TState::get_class_static(), state); + if(current_state == nullptr) { + this->current_state = state; + } +} + +class IdleState : public ActorState { + GDCLASS(IdleState, ActorState); + static void _bind_methods(); +public: + virtual void state_exited() override; + virtual StringName next_state() const override; +}; + +class ActingState : public ActorState { + GDCLASS(ActingState, ActorState); + static void _bind_methods(); +public: + virtual void state_entered() override; + virtual void process(double delta) override; + virtual StringName next_state() const override; +private: + double const seconds_to_wait{1.0}; + double timer{0.0}; }; #endif // !ACTOR_STATE_MACHINE_H diff --git a/modules/tabtargeting/equipment.cpp b/modules/tabtargeting/equipment.cpp index 18a3de83..e480263a 100644 --- a/modules/tabtargeting/equipment.cpp +++ b/modules/tabtargeting/equipment.cpp @@ -8,6 +8,14 @@ DamageEvent::DamageEvent(int damage, ActorBody *source) , source{source} {} +int DamageEvent::get_initial_damage() const { + return this->initial_damage; +} + +ActorBody *DamageEvent::get_source() const { + return this->source; +} + void DamageStats::_bind_methods() { BIND_PROPERTY(Variant::INT, damage_add); BIND_PROPERTY(Variant::INT, damage_mul); @@ -101,7 +109,15 @@ void Equipment::_bind_methods() { } DamageEvent Equipment::apply(DamageEvent event, ActorBody *target) { - + if(this->weapon.is_valid()) + event = this->weapon->apply(event, target); + if(this->helmet.is_valid()) + event = this->helmet->apply(event, target); + if(this->chest.is_valid()) + event = this->chest->apply(event, target); + if(this->legs.is_valid()) + event = this->legs->apply(event, target); + return event; } void Equipment::set_weapon(Ref weapon) { diff --git a/modules/tabtargeting/equipment.h b/modules/tabtargeting/equipment.h index 2b540f8e..d293e847 100644 --- a/modules/tabtargeting/equipment.h +++ b/modules/tabtargeting/equipment.h @@ -2,7 +2,6 @@ #define EQUIPMENT_H #include "core/io/resource.h" -#include "core/templates/vector.h" #include "scene/main/node.h" class ActorBody; diff --git a/modules/tabtargeting/register_types.cpp b/modules/tabtargeting/register_types.cpp index ab2fc76d..b6917bc5 100644 --- a/modules/tabtargeting/register_types.cpp +++ b/modules/tabtargeting/register_types.cpp @@ -1,6 +1,7 @@ #include "register_types.h" #include "core/object/class_db.h" +#include "tabtargeting/actor_state_machine.h" #include "tabtargeting/equipment.h" #include "tabtargeting/actor_body.h" @@ -9,6 +10,10 @@ void initialize_tabtargeting_module(ModuleInitializationLevel p_level) { return; } ClassDB::register_class(); + ClassDB::register_class(); + ClassDB::register_class(); + ClassDB::register_class(); + ClassDB::register_class(); ClassDB::register_class(); ClassDB::register_class(); ClassDB::register_class(); diff --git a/project/buttons.gd b/project/buttons.gd new file mode 100644 index 00000000..e2c5f68a --- /dev/null +++ b/project/buttons.gd @@ -0,0 +1,7 @@ +extends CanvasLayer + +func _on_button1_down() -> void: + $"../Actor1".request_attack($"../Actor2") + +func _on_button2_down() -> void: + $"../Actor2".request_attack($"../Actor1") diff --git a/project/buttons.gd.uid b/project/buttons.gd.uid new file mode 100644 index 00000000..588817e8 --- /dev/null +++ b/project/buttons.gd.uid @@ -0,0 +1 @@ +uid://cikkvrxl0xfut diff --git a/project/equip_items/chestplate.tres b/project/equip_items/chestplate.tres new file mode 100644 index 00000000..52e2680e --- /dev/null +++ b/project/equip_items/chestplate.tres @@ -0,0 +1,3 @@ +[gd_resource type="Armor" format=3 uid="uid://ciqakeu7a82fw"] + +[resource] diff --git a/project/equip_items/weapon1.tres b/project/equip_items/weapon1.tres new file mode 100644 index 00000000..ffa85f56 --- /dev/null +++ b/project/equip_items/weapon1.tres @@ -0,0 +1,9 @@ +[gd_resource type="Weapon" load_steps=2 format=3 uid="uid://rkcmcib35uj7"] + +[sub_resource type="DamageStats" id="DamageStats_jtxwa"] +damage_add = 1 +damage_mul = 2.0 + +[resource] +stats = SubResource("DamageStats_jtxwa") +base_damage = 5 diff --git a/project/project.godot b/project/project.godot index a51099b5..178c7ba9 100644 --- a/project/project.godot +++ b/project/project.godot @@ -11,5 +11,6 @@ config_version=5 [application] config/name="tabtargeting" -config/features=PackedStringArray("4.4", "Forward Plus") +run/main_scene="uid://b7klcvxm3e578" +config/features=PackedStringArray("4.5", "Forward Plus") config/icon="res://icon.svg" diff --git a/project/scene.tscn b/project/scene.tscn new file mode 100644 index 00000000..acbce9af --- /dev/null +++ b/project/scene.tscn @@ -0,0 +1,95 @@ +[gd_scene load_steps=9 format=3 uid="uid://b7klcvxm3e578"] + +[ext_resource type="Weapon" uid="uid://rkcmcib35uj7" path="res://equip_items/weapon1.tres" id="1_nxogm"] +[ext_resource type="Script" uid="uid://cikkvrxl0xfut" path="res://buttons.gd" id="1_ulcgi"] + +[sub_resource type="ProceduralSkyMaterial" id="ProceduralSkyMaterial_nxogm"] +sky_horizon_color = Color(0.662243, 0.671743, 0.686743, 1) +ground_horizon_color = Color(0.662243, 0.671743, 0.686743, 1) + +[sub_resource type="Sky" id="Sky_3253y"] +sky_material = SubResource("ProceduralSkyMaterial_nxogm") + +[sub_resource type="Environment" id="Environment_u3cyc"] +background_mode = 2 +sky = SubResource("Sky_3253y") +tonemap_mode = 2 +glow_enabled = true + +[sub_resource type="SphereShape3D" id="SphereShape3D_drvgu"] + +[sub_resource type="CylinderMesh" id="CylinderMesh_drvgu"] + +[sub_resource type="BoxMesh" id="BoxMesh_nxogm"] +size = Vector3(-5, -5, -5) + +[node name="Scene" type="Node3D"] + +[node name="WorldEnvironment" type="WorldEnvironment" parent="."] +environment = SubResource("Environment_u3cyc") + +[node name="DirectionalLight3D" type="DirectionalLight3D" parent="."] +transform = Transform3D(0.433659, -0.651449, 0.622538, 0, 0.690882, 0.722967, -0.901077, -0.313521, 0.299607, 0, 0, 0) +shadow_enabled = true + +[node name="Actor1" type="ActorBody" parent="."] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1.59845) + +[node name="CollisionShape3D" type="CollisionShape3D" parent="Actor1"] +shape = SubResource("SphereShape3D_drvgu") + +[node name="MeshInstance3D" type="MeshInstance3D" parent="Actor1"] +mesh = SubResource("CylinderMesh_drvgu") + +[node name="Equipment" type="Equipment" parent="Actor1"] +weapon = ExtResource("1_nxogm") + +[node name="ActorStateMachine" type="ActorStateMachine" parent="Actor1"] + +[node name="Actor2" type="ActorBody" parent="."] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, -1.66257) + +[node name="CollisionShape3D" type="CollisionShape3D" parent="Actor2"] +shape = SubResource("SphereShape3D_drvgu") + +[node name="MeshInstance3D" type="MeshInstance3D" parent="Actor2"] +mesh = SubResource("CylinderMesh_drvgu") + +[node name="Equipment" type="Equipment" parent="Actor2"] +weapon = ExtResource("1_nxogm") + +[node name="ActorStateMachine" type="ActorStateMachine" parent="Actor2"] + +[node name="Camera3D" type="Camera3D" parent="."] +transform = Transform3D(0.251056, -0.361214, 0.898051, 0, 0.927765, 0.373166, -0.967973, -0.0936855, 0.232921, 1.89697, 0.912457, 1.11904) + +[node name="CanvasLayer" type="CanvasLayer" parent="."] +script = ExtResource("1_ulcgi") + +[node name="Button" type="Button" parent="CanvasLayer"] +anchors_preset = 2 +anchor_top = 1.0 +anchor_bottom = 1.0 +offset_top = -113.0 +offset_right = 327.0 +grow_vertical = 0 +text = "Attack (Actor 1)" + +[node name="Button2" type="Button" parent="CanvasLayer"] +anchors_preset = 3 +anchor_left = 1.0 +anchor_top = 1.0 +anchor_right = 1.0 +anchor_bottom = 1.0 +offset_left = -327.0 +offset_top = -113.0 +grow_horizontal = 0 +grow_vertical = 0 +text = "Attack (Actor 2)" + +[node name="MeshInstance3D" type="MeshInstance3D" parent="."] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.57152, 0) +mesh = SubResource("BoxMesh_nxogm") + +[connection signal="button_down" from="CanvasLayer/Button" to="CanvasLayer" method="_on_button1_down"] +[connection signal="button_down" from="CanvasLayer/Button2" to="CanvasLayer" method="_on_button2_down"]