Tamta Asatiani
Tamta Asatiani
  • 11
  • 40 726
I made a Game Engine for C++
I made a game development library called "tahmlib" for C++
tahmlib: github.com/tamtaasatiani/tahmlib
pong++: github.com/tamtaasatiani/pong-plusplus
___________________________________________
MY SOCIALS
github: github.com/tamtaasatiani/TicTacToe
google play games: play.google.com/store/apps/developer?id=Tamta+Asatiani
patreon: www.patreon.com/TamtaAsatiani
ko-fi: ko-fi.com/tamtaasatiani
twitter: x.com/tamta_asatiani
zhlédnutí: 18 552

Video

Timer Class for the Unity Engine
zhlédnutí 483Před měsícem
I made a timer class for Unity and you all can use it. CODEMONKEY'S ORIGINAL CODE: unitycodemonkey.com/utils.php MY UNITY TIMER CLASS: github.com/tamtaasatiani/Timer.cs MY SOCIALS github: github.com/tamtaasatiani/TicTacToe google play games: play.google.com/store/apps/developer?id=Tamta Asatiani patreon: www.patreon.com/TamtaAsatiani ko-fi: ko-fi.com/tamtaasatiani twitter: x.com/tamta_asatiani
don't do gamedev youtube
zhlédnutí 27KPřed 2 měsíci
Talking about why if you want to do gamedev, you shouldn't do gamedev youttube, as well as the future of this channel. ARTICLE ABOUT THE RUSSIAN LAW: www.bbc.com/news/world-europe-68822483 MY TIC-TAC-TOE MADE IN C : github.com/tamtaasatiani/TicTacToe MY SOCIALS github: github.com/tamtaasatiani/TicTacToe google play games: play.google.com/store/apps/developer?id=Tamta Asatiani patreon: www.patre...
HOW TO STRUCTURE YOUR VIDEO GAME CODE
zhlédnutí 1,3KPřed 2 měsíci
In this video I'm going to explain how to structure your video game code and not get tangled in it. TIMESTAMPS 0:00 intro 1:21 demo 3:11 game design/prototypes 15:27 source code 56:00 outro PLAY ATOMI: play.google.com/store/apps/details?id=org.godotengine.atomi SOURCE CODE AVAILABLE ON MY PATREON: patreon.com/TamtaAsatiani?Link MY SOCIALS github: github.com/tamtaasatiani/TicTacToe google play g...
Harvard's CS50 - Introduction to Game Development - Final Project Showcase
zhlédnutí 1,1KPřed 4 měsíci
A showcase for the final project I made for Harvard's course "Introduction to Game Development".
WE MADE A GAME WITH NO COMMUNICATION (collab with wannibe manisha)
zhlédnutí 1,4KPřed rokem
@WannibeManisha and i made a game with no communication WATCH MANISHA'S VIDEO!: czcams.com/video/6m0xzrh7ku4/video.html play the game here: gamejolt.com/games/snowballed/686259 my tumblr: spacenoomad.tumblr.com/ my gamejolt: gamejolt.com/@thespacenomad/games my google play games: play.google.com/store/apps/developer?id=space nomad my twitter: space_noomad
GAMEDEV GIRLS TALKING ABOUT GAME DESIGN (with Wannibe Manisha and Tamara Makes Games)
zhlédnutí 1,9KPřed rokem
Talking about how we got introduced to games and why we decided to pursue it as a career, what we like in games now and why and how it affects the games we make. YOU CAN FIND THESE AWESOME LADIES HERE: TAMARA MAKES GAMES CZcams (GameDev): czcams.com/users/TamaraMakesGames Discord Server: discord.gg/dCJBpe2meg WANNIBE MANISHA CZcams: czcams.com/users/WannibeManisha Twitter: manisha_w...
WHAT'S INSIDE A SCORPION GAMING MOUSE?
zhlédnutí 442Před 3 lety
i disassemble my old scorpion gaming mouse. TIMESTAMPS 0:00 - intro 0:22 - disassembly starts here 7:37 - a good view of the motherboard 8:16 - outro my twitter: space_noomad​ play.google.com/store/apps/developer?id=space nomad my gamejolt: gamejolt.com/@thespacenomad

Komentáře

  • @jaancarlo1237
    @jaancarlo1237 Před 2 hodinami

    I like you so much, you are so talented

  • @IceGoldDev
    @IceGoldDev Před 2 hodinami

    Neat!

  • @SvenHeidemann-uo2yl
    @SvenHeidemann-uo2yl Před 3 hodinami

    Congrats on your progress! I am interested in LLL aswell, but so far my only experience is asm on Gameboy color hardware,which is as low level as it gets (apart from maybe compilers) modern hardware is a Intimidating to me. So much uncertainties. I am toying around with godot atm, but a c++raylib project sounds super interesting to me. A project like yours seems like an insane undertaking. Respect.

  • @sokmontrey
    @sokmontrey Před 3 hodinami

    sick!!!

  • @TheLummen.
    @TheLummen. Před 3 hodinami

    Congratulations lady ! You sold your soul to C++ ! Was it worth it ?

  • @kronkner_8192
    @kronkner_8192 Před 4 hodinami

    oi what's ur age? I mean you hold a lot of knowledge for a teen(if you are one)

  • @elallende
    @elallende Před 4 hodinami

    Love this kind of content even if I barely understand the coding part, kudos !

  • @disinlungkamei2869
    @disinlungkamei2869 Před 5 hodinami

    Wow beauty with brain

  • @jonatasjcgrendering8436
    @jonatasjcgrendering8436 Před 5 hodinami

    C++ Girl🤟

  • @sanyi9667
    @sanyi9667 Před 5 hodinami

    oh yes let's reinvent the wheel.

  • @bsnl11
    @bsnl11 Před 5 hodinami

    ooo ROBIN from 'How I Met Your Mother' made a game engine lib!!!

  • @zeez7777
    @zeez7777 Před 7 hodinami

    Pretty cool but im not a fan of the misleading title, you didn't make a game engine, you wrote a small wrapper around SDL Which is still cool but that giant claim is just not truthful. And unless im missing something here your Tahm deconstructor isnt properly freeing resources, you might wanna check that out.

  • @fifa2k22
    @fifa2k22 Před 7 hodinami

    i just opened youtube and i saw this and im also building one. But hey im building just for fun ; ). kudos to you for completing the project !

  • @pallytf2
    @pallytf2 Před 8 hodinami

    :) thank you

  • @sjoerdev
    @sjoerdev Před 8 hodinami

    16 minutes just to show you made pong

  • @davidvarshanidze
    @davidvarshanidze Před 8 hodinami

    ქართველი Jonathan Blow

  • @memoryhunter2084
    @memoryhunter2084 Před 9 hodinami

    დიდი მადლობა იუთუბის ალგორითმს რომ ამომიგდო fellow C++ and video games enjoyer, proud of you, ეგრე გააგრძელე. World is not doomed yet

  • @PySnek
    @PySnek Před 9 hodinami

    Oh look! It's C/C++ engine number 2048503 on youtube... Let's reinvent the wheel over and over again instead of contributing to solutions that already exist since years like Bevy, Godot or Raylib.

  • @whynotcode
    @whynotcode Před 9 hodinami

    Keep going you're doing great! I've been a big fan of using LLMs to speed up learning, not sure if you are already. It's pretty useful to be able to ask ChatGPT to explain how a library or game engine works. Or even have it generate the code for you then you walk through it in the debugger to understand how it works. It's much faster than looking through the API docs and sample code for SDL, etc. I think the new era of jobs are all going to be AI-assisted. Game development is so slow and companies love that LLMs make developers 25-40% more productive. In my last couple videos I've been using Google's Filament rendering library to make a VR game in C++. Filament also uses SDL (and Assimp for asset importing) for a couple things behind the scenes. But it handles all the rendering itself. Someone mentioned below that it would be a useful next step to learn how to write the rendering code with a modern graphics API like Vulkan (or even the older OpenGL) or DirectX 12.

  • @Darkfault
    @Darkfault Před 10 hodinami

    TamtaEngine XD

  • @codyane
    @codyane Před 10 hodinami

    i m just starting to learn c++ and now i m scared

  • @osan99999
    @osan99999 Před 10 hodinami

    You're going down a really shitty path. But ı like it bro Your determination dazzled my eyesssss

  • @nizamiuzunalovi1703
    @nizamiuzunalovi1703 Před 10 hodinami

    ძაან კაი კონტენტია გააგრძელე <<<333

  • @pykir74
    @pykir74 Před 10 hodinami

    Nice project, also cool haircut

  • @ivofortes823
    @ivofortes823 Před 10 hodinami

    That'll be cool something IDE independent. In a way anyone with his/her selected platform, compiler, IDE or even simple text editors be able to run it. Anyway, congratulation!

  • @matthewperiut7508
    @matthewperiut7508 Před 11 hodinami

    While, I am happy and proud of your effort, you've made an abstraction layer. Basically, SDL already is doing exactly what you've done, you've just given it different names. I'm happy to see it simplified, and it's cool that you're flexing your understanding of OOP and header file/c++ knowledge, I definitely think if you want to learn properly for C++ development and jobs, learn (modern) OpenGL, build a 2d scene, a 3d scene, make some shaders. SDL uses OpenGL underneath, and if you wrote a game engine that interfaces with graphics through OpenGL and audio through OpenAL, then that would be awesome. If you want to take it a step further, networking is probably the hardest thing to do in c++ and a lot of people will see that as an impressive skill. Anything networking in c++ is amazing. You could build a packet system in your game engine with Game Networking Sockets, asyncio, or enet. Awesome starting point, keep up the good work! I really do recommend learning OpenGL next.

    • @whynotcode
      @whynotcode Před 9 hodinami

      I think the approach taken is a reasonable first step: understanding how a lower level C++ library like SDL interacts with the system then make some basic games in C++. A next step of course could be to try to implement the rendering code with Vulkan or OpenGL for simplicity.

  • @insu_na
    @insu_na Před 12 hodinami

    Good start! 2 pieces of advice: 1: look into learning build systems like cmake or meson. 2: force people to instantiate an object derived from your `tahm` class. that way you can use virtual functions for those 4 primary methods you used. people will tell you "BUT THE VTABLES!!!!1111" but ignore them for the time being, your library is not yet in a state where the handful of nanoseconds that level of indirection causes per call actually matter.

    • @zeez7777
      @zeez7777 Před 7 hodinami

      I like polymorphism and i love hacking around with vtables but saying the cost is only nanoseconds isnt quite right, the branch predictor gets all messed up cause of the dynamic jump to a "yet unknown" instruction address it has to wait for to get resolved. But yeah it doesn't matter either way for this project.

  • @ghostlucian12
    @ghostlucian12 Před 12 hodinami

    Instead of using functions why not wrap everything into a class and pass the main loop to that class CGame game; int main(int argc, char** argv){ try { game.Startup(argc, argv); result = game.Run(); } catch(std::exception& ex) { } game.Shutdown(); return result; } // The engine class class CEngine { public: void Startup(int argc, char** argv); void Shutdown(); int Run(); protected: virtual void OnUpdate(); virtual void OnRender(Graphics g); //... other engine events private: void Update(); void Render(); }; The user can select any events he needs class CGame : public CEngine { protected: virtual void OnUpdate() overrride; virtual void OnRender(Graphics g) overrride; // other events }; For a game loop I suggest using a timer to limit updates to 30 or 60fps,, because not all systems have the same speed, this will also help interpolate updates const double UPDATE_STEP = 1000000000.0 / 60.0; // 60 updates per second const double DISPLAY_FPS_STEP = 1000000000.0; // 1 second ... // for updates double dDeltaUpdateTime = 0; int nLastUpdateTime = 0; // for displaying fps and ups counter int nLastFPSCounterTime = 0; // for displaying fps and ups int nUpdatesPerSecond = 0; int nFramesPerSecond = 0; while(running) { uint64_t nCurrentTime = CTimer::Now(); dDeltaTime += nCurrentTime - nLastUpdateTime; nLastUpdateTime = nCurrentTime; while (m_dDeltaTime >= UPDATE_STEP) { // increment ups nUpdatesPerSecond++; // decrease delta time dDeltaTime = dDeltaTime - UPDATE_STEP; // update update(); } // show fps and ups every second nCurrentTime = CTimer::Now(); if (nCurrentTime >= nLastFPSCounterTime + DISPLAY_FPS_STEP) { nLastFPSCounterTime = nCurrentTime; // display FPS counter std::string strTitle = strTitle + " - FPS:" + std::to_string(nFramesPerSecond) + ", UPS:" + std::to_string(nUpdatesPerSecond) SDL_SetWindowTitle(window, strTitle.c_str()); // reset counters nFramesPerSecond = 0; nUpdatesPerSecond = 0; } // increment fps nFramesPerSecond++; // draw on the screen draw(); } The counters can be wrapped into a timer class for easier use timedUpdate.Update(); while (timedUpdate.CanStop(UPDATE_STEP)) { Update(); } if (fpsCounterTimmer.Stop(DISPLAY_FPS_STEP)) { // display FPS counter std::string strTitle = strTitle + " - FPS:" + std::to_string(nFramesPerSecond) + ", UPS:" + std::to_string(nUpdatesPerSecond) SDL_SetWindowTitle(window, strTitle.c_str()); // reset counters nFramesPerSecond = 0; nUpdatesPerSecond = 0; } class CTimer { public: static uint64_t Now(void); public: void Update(void); bool Stop(double ns); bool CanStop(double ns); protected: uint64_t m_nStartTime = 0; uint64_t m_nLastStopTime = 0; double m_dDeltaTime = 0; }; uint64_t CTimer::Now() { auto now = std::chrono::system_clock::now(); auto now_ns = std::chrono::time_point_cast<std::chrono::nanoseconds>(now); auto epoch = now_ns.time_since_epoch(); auto duration = std::chrono::duration_cast<std::chrono::nanoseconds>(epoch); return duration.count(); } void CTimer::Update() { uint64_t nCurrentTime = CTimer::Now(); m_dDeltaTime += nCurrentTime - m_nLastStopTime; m_nLastStopTime = nCurrentTime; } bool CTimer::Stop(double ns) { uint64_t nCurrentTime = CTimer::Now(); if (nCurrentTime >= m_nStartTime + ns) { m_nStartTime = nCurrentTime; return true; } return false; } bool CTimer::CanStop(double ns) { if (m_dDeltaTime >= ns) { m_dDeltaTime = m_dDeltaTime - ns; return true; } return false; }

  • @tanaybhomia2784
    @tanaybhomia2784 Před 12 hodinami

    People will literally build their own game engine instead of getting therapy.

  • @teetogarcia9647
    @teetogarcia9647 Před 12 hodinami

    you should check out neovim! I am building a game engine as well in C++ lol. It makes my workflow so much better.

  • @SyncMain
    @SyncMain Před 13 hodinami

    Very cool! I had a poke through the repository, I think it's a great example of something that could be useful for multiple games without the overhead of developing in larger/commercial engines, especially for smaller games, which is a hard thing for a lot of new game devs to wrap their heads around. I hope this inspires a lot of new developers, and you're clearly on your way to growing and building more. Great job!

    • @tamta_asatiani
      @tamta_asatiani Před 13 hodinami

      thank you for all the kind words! i initially thought about making the library just for me and my projects but then i thought hey, why not share it

  • @Golosarii
    @Golosarii Před 13 hodinami

    по любому русская баба

  • @iSobogobo
    @iSobogobo Před 13 hodinami

    Calling timer function in Update instead of fixed update make no sense, Complete() is being called in update instead of locally defined Boolean, better to use a coroutine or thread instead of mono behaviour methods. you should not destroy object, but considering your demo functionality it is fine. though your C++ video was great.

  • @sortof3337
    @sortof3337 Před 14 hodinami

    lisan al gaib.

  • @m-is8mm
    @m-is8mm Před 15 hodinami

    1:38 "I keep saying engine. It's more of like a library" > titles video "I made a Game Engine" I guess "I made a game library" would sound a lot less cool, hah

    • @dysfunc121
      @dysfunc121 Před 14 hodinami

      The distinction has never been clear on what is an "engine".

    • @tamta_asatiani
      @tamta_asatiani Před 13 hodinami

      i'm allowed a little bit of clickbaiting, as a treat

  • @skypuff
    @skypuff Před 15 hodinami

    Loved you in Dune. Great video ✨.

  • @izxpi
    @izxpi Před 15 hodinami

    i thought you were space nomad ..Have you found a permanent planet?

  • @franciszekzabierowski3787
    @franciszekzabierowski3787 Před 15 hodinami

    I think i know how to solve your problem with callback. Here Cherno imokemented an Entry point. Basically engine it self controls where everything starts. czcams.com/video/meARMOmTLgE/video.html One or more things: 1) i noticed that you are commiting the files which is not intented to commit like .tlog. I want suggest of using .gitignore file 2) Second big thing, you've put external libraries into lib directory. As far as i know it is not the best choice of the name. lib directory is inteded to store .lib, .dll files the Vendor dir "should" store the external libs.

  • @cookedgutteroilhotpot
    @cookedgutteroilhotpot Před 15 hodinami

    unity is pretty powerful if you know how to program well. I like the job system and since I've worked with it for like 12 years it's my go to thing to mess with

  • @bbrother92
    @bbrother92 Před 16 hodinami

    I guess film business having bad times if Timothee going for c++.

  • @thiagoalmeida5437
    @thiagoalmeida5437 Před 16 hodinami

    That’s awesome job kid! Keep it up.

  • @its_code
    @its_code Před 17 hodinami

    ❤❤❤❤❤❤❤❤😊

  • @Rafael-oq9vu
    @Rafael-oq9vu Před 19 hodinami

    you should consider transitioning to a female

  • @chantc777
    @chantc777 Před 19 hodinami

    lovely video :3

  • @GrimaldGorb
    @GrimaldGorb Před 19 hodinami

    hi tamta ❤

  • @delicious_seabass
    @delicious_seabass Před 20 hodinami

    Not to discourage you, but I don't know if I would call this a library. Feels more like a game template more than anything, which is fine. It's just, an library typically has a lot more components ready to make games. Nevertheless, keep up the good work. Suggestion: Be sure to add the Debug and Release folders to your .gitignore. You don't want/need to be pushing those folders to git.

  • @Riksia
    @Riksia Před 21 hodinou

    Dont let the gamedev industry kill the love for the games in you. Do games for fun, I'm not recomend it for a job.

  • @Chatbot121
    @Chatbot121 Před 21 hodinou

    Hi

  • @MetalGearMk3
    @MetalGearMk3 Před 21 hodinou

    Why didn't you just use UE5, its C++ ?

    • @gameroomxero9826
      @gameroomxero9826 Před 15 hodinami

      UE5 is a game engine and as she said she is doing this to land a job. Most big companies don't use game engine and have their own. So she needs to do this to understand how they work.

  • @teehee68p1
    @teehee68p1 Před 21 hodinou

    noice! look up pimpl pattern to hide the window function