1. Past hour

I'm down
3. ## Introduction

About the project: Lockdown is a first person narrative walking simulator set on a space station orbiting an unknown planet with the aim of terraforming. You are a maintenance engineer on the space station and find yourself waking up in the medical wing only to discover that the entire crew is gone and has seemingly left you behind. A little about me: This is a project of many "firsts" for me: First project where I challenge myself to work in Unreal Engine. First project where I challenge myself to actually write C++ and not code the game entirely in blueprints (Despite the lack of C++ resources). First slightly ambitious project where as my past projects have mostly been idle clicker/endless runner mobile games. First time working in a team for a longer period of time and actually committing to an idea and work on it (Programmer + Artist + Animator). First time starting a devlog about a project I am working on and staying true to it (YouTube as well as here)! The developer logs here will supplement the devlogs on my YouTube: TP3. If you see something you like or if you have any questions or suggestions please feel free to jump in at any time and let me know! I am absolutely excited! See ya!😀
4. Today

Bump
6. ## #include <math.h>

Maybe you are now using a newer c++, which uses #include <cmath> ? (.h extension is obsolete, standard includes don't have it, and the C libs now have a "c" prefix). You may want to read cppreference.com for details of the newer c++ -es.
7. ## Pixel art looks bad when it's rendered in my engine

Ok, more progress. I added one extra transparent pixel at the top and bottom of the grass tile. This solved the issue. looks like OpenGL was sampling the pixel from the top to bottom? if that makes any sense. I don't know if this is a good solution. Does anyone know why this happens? Any thoughts?  more updates. If I set my window client rendering area resolution to 1280, 720 (the window size is actually 1296, 759 with borders) everything is rendered perfectly. If I make the client rendering area to 1920, 1080 (the window size is actually 1936, 1119 with borders) everything looks messed up. ugh... this is frustrating... It's 12:32 am... it's late. I'm going to bed. I will continue this tomorrow. 1280, 720 image 1920, 1080 image
8. ## Pixel art looks bad when it's rendered in my engine

ok, here is some progress. By moving the sprite 0.5f units down the issue is kind of fixed? but not really? notice how the top green pixel is now at the bottom. left sprite is the original sprite. Right sprite is the one the engine is rendering. I'm reading about pixel perfect rendering and how in OpenGL (0, 0) is the center of a pixel not the top left of the pixel. So I have to add 0.5 to something? I don't know for sure... I'm still researching this. Any thoughts are much appreciated.

10. ## 13 RONIN - DevLog #9 - A new milestone

DevLog #9 - Next milestone - Easter! Hello friends! Next milestone in the development of 13 Ronin will be another public developer build. It will feature: Get ready text Game over text Time limit and counter Time-based score Gameplay: Instant action on button press, no need to follow through Minimum attack distance, no damage when the opponent is too close More varied movement scheme for the computer player Moves and attacks: Crouching turn Crouching cut Damage and death: Crouching hurt animation, forward and backward Crouching death animation, forward and backward More frames in the current death animation Death animation, forward Pool of blood under dead body Blood particles Different blood splashes depending on hit Happy coding! /jan.
11. ## Depths of Orpheus - After the Prototype

The dungeon crawler challenge was fun, and I was happy with what I was able to get done in the time frame. There was a lot I designed for the game but cut back to a minimum viable product in order to get the project done in time. Now I want to go in and add all that stuff in, and make a few changes based on playing the prototype. Since submitting the game, I've gone in and added a few things already. The enemies now drop some damaged loot, most of the level generation bugs have been worked out, the items show their quality and damage level so the player can choose whether to pick it up or keep what they got, and I adjusted the amount of items and mobs that spawn on the level. I have a huge list of things to get done for the game, and I'm going to work through them one at a time. I'm also doing another project to develop my game dev skills so this won't be worked on as much as I did during the challenge. I'm not entirely happy with the health system and there are some bugs with that still around. So I'm going to go back into the design and change a good chunk of that. I don't think I've given the health system a fair shake yet and I really think it's a good idea. The UI needs a lot of work, but I'm going to wait until the game is more complete/designed before I start working on that. One thing I want, is to be able to play the game with just a controller and not have to use the mouse. I'm thinking about also dropping the mouse interactions as well, or at least only popping it up in certain conditions. I think the game has a lot of potential, so over the next little bit, I'll be finishing the game.
12. ## Specs for Calculator. Jasmine, JS5

Thank you for your likes. I glad that my instructions are useful for somebody. But I will continue even nobody likes my instructions.
13. ## Alternative names for fantasy classes

It sounds like you already have a working list for what you need. 95% of classes for fantasy games are fighter/mage/thief, and the only real extension to the list is Dungeons & Dragons classes. With a better view of what you want, I've pulled up some more names for you. Knight - Sure, the word isn't obscure, but it's rarely used as a class name Shaman Man-At-Arms - Going by historical definition, can be used for cavalry or "weapon flexibility" Sniper Mystic Druid - Yes, it exists in D&D, but history doesn't have a lot of names for spellcasters Necromancer Berserker
14. ## Multiplayer networking for modded open source game?

Yes! This is why RTS-es generally default to "explored map / fog of war." Although even the fog of war can be pierced by an appropriate network sniffer. Not during competitive events, though 🙂 A bunch of other cheats become impossible, though, because any attempt to deviate from the rules locally will lead to instant de-sync.

16. ## Pixel art looks bad when it's rendered in my engine

Apologies for the bad image. Both tiles have different zoom level which I messed up in paint. Then I saved the image in jpg format then png which created these artifacts. My apologies. Here is a better image and I will also include a screenshot of my window and original tile. The projection matrix uses the correct client area size as opposed to the window size.
17. ## Tag-Team Challenge

I think it should be permitted but not required. Collaboration comes with it's own set of challenges, and not everyone will be able to do it.

19. ## Pixel art looks bad when it's rendered in my engine

First thing I noticed is that the left image is taller than the right image. This probably means that there's an error in your projection matrix. Wild guess, but are you running in a window, and using the full dimensions of that window (as opposed to the client area of the window) to set up your projection matrix? The second thing I noticed is that neither half of the image is clean pixel art. The image itself appears to be a png, but I'm seeing what can only be described as jpeg artefacts in the image. Was it like that when you uploaded it? When you ran the screen capture? In the source image?
20. ## {Rev-Share} C# Unity Engineer and 2D Sprite and Concept Artist

Project Name: Condors Vs. Ocelots Team Size: 15ish Genre:Strategy RPG Engine: Unity Roles Available: Currently in need of 2 2D sprite artists, 2 2D concept artists, and then finally 2 programmers. If you feel as if you can offer the team something more that isn’t listed, we are always open to making an exception, just send your resume/portfolio to us! Project Length: Currently planning on release Q1 2020. Compensation: Rev-share Project Description: Condors and Ocelots have been at war for generations. Battles have left some settlements in ruins. Others teem with refugees. Even away from the fighting, towns and villages suffer from having their fighting-age citizens lured away or conscripted by one faction or the other. Banditry is also rife -- since the Condors and Ocelots focus on the front lines, and largely neglect the parts of their respective dominions which aren't militarily important or located near their bases. The mysterious faction, Goatverlords, comes in and antagonizes both claiming rule of the land. They must work together and against one another to win the ultimate struggle. Project Status: Pre-design is completely done and we are starting on development of our builds. Send emails to careers@titanomachystudios.com Our store page can be found here, https://play.google.com/store/apps/developer?id=Titanomachy+Studios Our website here, http://titanomachystudios.com/#/
21. ## OpenGL Pixel art looks bad when it's rendered in my engine

Hi everyone, When I render a sprite in my engine which is using OpenGL 4.5, the pixel art looks different from what it is supposed to. Here is an image of how the art should look like vs how it looks like in my engine. The image on left is how the grass tile should look like. The image on the right is how my engine renders it. You can see the difference on the edge of the tile. The line is not quite straight. I'm using an orthographic matrix and the image position is at the origin (0, 0) which in my engine is in the middle of the screen. Anyone know what is causing this and how to fix it? Cheers!
22. ## File formats info, Wotsit archive

Never heard of it before. Seems to be down since August 2015, so this doesn't really seem to be a new issue. In any case, I'd really recommend web.archive.org for things like this: https://web.archive.org/web/20150730114233/http://www.wotsit.org/ Also, the kaitai.io format gallery is neat: http://formats.kaitai.io/
23. ## Tag-Team Challenge

Just throwing an idea out there, as I currently don't have the time to participate in challenges, but what do you all think of members partnering up and co-operating together to participate in a challenge? Maybe a challenge that is for teams of two?
24. ## ScreenShotSaturday

Keeping up with the twitter hashtag of screen shots on Saturday!
25. ## File formats info, Wotsit archive

Here was a topic about wotsit.org being down. https://www.gamedev.net/forums/topic/677585-wotsitorg/ It was a bad surprise for me when i saw the website down. I did some search and found a "mirror". If anybody needs it then its here: https://hwiegman.home.xs4all.nl/file-formats.html https://hwiegman.home.xs4all.nl/ Im not in any way affiliated with that website. Just wanted to give updated info about it.
26. ## Game music composer looking for projects

I am a composer with 3 years of experience and I mainly do orchestra music. Recently I have been collaborating with Septopus doing the game 'Slingbot Boarding'. If anyone who is interested to collaborate a project with me feel free to message me. The links below are my composition examples so feel free to check it out. Spotify: Soundcloud:
27. ## Eight Entry - February 23, 2019

Hi! This is the eight entry of my development blog for my project 'Tracked Mind'. I was planning on releasing a new video to show you all what the game looks like right now, but I discovered a bug when the Player interacts with some items. So the video will have to wait until I have fixed the bug , I decided to upload a few new screenshots instead. One of the screenshots shows an early version of an abandoned house that I’m currently working on. In the next blog post I’m planning on uploading another screenshot of the house to show you the progress. Items affected by physics are now making noises when moved or hit by something, they all make different sounds depending on what material they are made of What's new?: - Water reacts to the Player and creates ripples. - Items that are affected by physics will now make sounds when moved or hit by something. Known issues: - A bug stops the Player from interacting with some items. Take care! /Mikael Henriksson
28. ## Alternative names for fantasy classes

If you're just trying to find a simple source of inspiration, you could also try searching the definitions and looking through the list of synonyms. For example, when I look up the definition of "mercenary" I get the following synonyms: or the definition of "barbarian" gives me these: Obviously not all relevant or useful, but there are some potentially useable names there.
29. ## float or double for my vertices / normals?

Unless it isn't normalized 😉 If you want something that truly cannot represent something that isn't a rotation, use a scaled axis (i.e., axis angle but you store the angle in the length of the vector) But I agree, if you are doing something a potentially unlimited number of times, definitely think about how to actually solve the issue. For example in things like interactions, try reformulating your operation from a bunch of tiny deltas to "how to go from my initial state to the current state using just the initial and current inputs". Of course, in the case of a transform tree, things are limited by you tree depth, and if you need higher precision, use higher precision.

31. ## Free art assets

I figured other developers out there might find some of this useful so I wanted to share it with the community. As noted in the header, this thread is open to user suggestions on free content, and I've put quite a few items up for download on a site I manage. They are open source with no strings attached. http://fatboxsoftware.com/resources.html
32. ## Using static variables/methods in engine, good or bad?

Simplest example: you create a Listener in a different thread and get a race on your listener list. I would probably separate Listeners and "Listenables". Listeners could be constructed by passing in a reference to a Listenable (which is internally stored as a pointer). Automatically registering/unregistering could still be done in the constructor/destructor in that case. Or go for a "message bus" setup, as described in the wikipedia link All8Up posted. Casting a dervied pointer to a base pointer will get you the same result as evaluating the this pointer within the base class by definition. push_back default constructs an entry and then sets the value to what you pass in. emplace_back constructs your new value in place. For a pointer or plain int/float, it doesn't really matter, but there's no reason not to do it and as it does matter for more complex objects (and for non-default constructible objects it doesn't even work otherwise) so it's just a good habit.
33. ## #include <math.h>

Hi I've copied over to the new computer the vs files but unfortunately without dependencies. So while downloading those I get Errors like #include <math.h> could not be opened. Why and how to fix in my c++ vs community Project? Thanks
34. ## Showreel Feedback

Hello there, I'm new here so hopefully I'm posting this in the right place! My name's Matt and I'm a composer, currently studying my final year of a BA (Hons) degree in Creative Music Technology, who's ultimately wanting to break into the video game industry. One of the assignments for the course requires me to contact industry professionals to try and obtain feedback on things like my web presence, showreel etc., and then create an action plan based on that feedback to try and improve my employability. I was just wondering if this would be the appropriate place to try and get some feedback from some fellow composers? And also, would anyone have any tips on reaching "potential clients" as it were, essentially audio directors etc.? I realise that games companies are likely to be inundated with cold emails from composers, so any pointers on how to establish some contact courteously would be appreciated. Thank you, and it's good to meet you all!
35. ## float or double for my vertices / normals?

When considering the use of double precision floating point, the important question to ask is this: does this solve the precision problem or does it merely hide it? For example, if you have a rotation matrix and you keep multiplying it with other rotation matrices, then it will gradually cease to be a good approximation of a rotation matrix. If you use double precision instead of single precision, the same thing will happen, just at a slower rate. You're not solving the problem, you're just delaying when it becomes visible. On the other hand, if you regularly renormalise your rotation matrices, then your rotation matrices will stay as nearly perfect rotation matrices, even if you stick to single precision. Same thing if you use quaternions instead of matrices: a quaternion may contain a slightly incorrect rotation, but it will never represent something that isn't a rotation. There are cases where using double precision is an appropriate solution to a floating point precision problem, but it should not be the first tool you reach for in your toolbox.
36. ## Mathematically ideal field of view

The mathematically ideal answer is: I CAN SEE EVERYTHING!!! But more seriously: I get motion sickness from narrow FOV. I have to intentionally use a field of view angle which looks unrealistic so that my brain doesn't try to pretend that it's reality. Games which don't allow for adjustable FOV infuriate me.
37. ## Mathematically ideal field of view

And then there's also virtual reality, where straying from "physical" FOV might be a Bad Idea.
38. ## Multiplayer networking for modded open source game?

Another problem would be map hacks and similar. If all hidden information is on the client, it can be revealed much easier.
39. ## Using static variables/methods in engine, good or bad?

Well to be honest I haven't really thought of threading anything at this point, but yes, that is fair point. The thing I'm skeptical of this as well, that's why I asked, but it just seems such a straightforward way of doing the job that it's really tempting to use, are there any alternatives that don't rely on global state that would also work?
40. ## Using static variables/methods in engine, good or bad?

What if you actually want two groups of listeners that get called in different contexts? How are you going to handle the case where you're constructing and calling listeners on multiple threads (eg. we enter vector's push_back on both threads at the same time)? What happens if a listener is in the middle of doing something unrelated on another thread when _Listener_UpdateAll is called? Is Listener responsible for unregistering itself, and if so, how are you going to ensure that classes implementing its interface actually do that? This isn't the worst possible use of global state, but I'm with All8Up in that we should generally be skeptical of global state. I would also say that having to call Update manually is a feature not a bug. In general you will find it easier to read, understand, and debug code where the control flow and data dependencies are explicit.
41. ## Using static variables/methods in engine, good or bad?

Can you give an example of a possible way an error could effect the global state with the code I have shown? I'm just not picturing it. Also how can I eliminate the coupling altogether (and increase cohesion) of the model I've provided? Thanks, that's actually a much better way to do this. I've changed my code to reflect this. The reason I was doing it this way was because I thought that I needed to save the derived class's pointer (by casting it to a base pointer first) to make the correct virtual call. But I tried it and this works too (and now I don't have to manually invoke the base constructor on every derive, which is great). Can you explain why this works though? Also can you tell me why you're using emplace_back instead of push_back, from what I looked up its functionality is identical.
42. ## Gamedev api?

On that particular item - latest topics on the front page - if you select the blue drop down that defaults to "Activity" and select "Forums", you'll see the latest topics. Same as going to the Forums tab on desktop. I know it's an extra step, but it will get the view you want for new posts/forum activity. The "reboot" I referenced is a complete review of these types of things. I'm hoping to have more to share on this in the coming months, depending on progress.
43. ## Gamedev api?

You mean particular functionality? Nothing out of the ordinary, something akin to reddit's api. Allow posting on user's behalf, allow deep queries, profile management. All the basics, but of course, the more functionality the better.
44. ## Gamedev api?

@khawk Going to back only having the latest post on a topic on the main page, none of this 10 repeats on the same thread would be fantastic! Makes scrolling through to see new posts horrible on my phone. Honestly I flat out refuse to look at the site on my phone anymore unless it's to view replies to threads or PMs. Otherwise I will only view the site on my desktop.
45. ## Tech challenge - how to avoid ball mishits? (Unity)

No way! I'm a fan, I actually own AO Tennis. If they're willing to answer fan mail from a hobbyist developer, I'm wondering if I could ask them a bit about their engine and animation system. But this might also be a conflict of their interests.. My burning question is will they make a sequel or continue building on the existing game? I'm guessing it's the former. Here's my WIP so far -- made 5 animations in a diamond shape (1 on each point + 1 center), and drew a circular hitbox since the racket face is large enough to round out the diamond's edges. Anything outside of that hitbox will require a different hitting anim, while anything within this hitbox counts as a safe clean hit and would look right. However this only works for the X/Y axis for balls where the player is stationary. For X/Z, I'm planning lots of different footwork patterns to account for z distance to the ball like approach shots and retreating shots. So far, so good! Really fun implementing the ideas we discussed.

48. ## Gamedev api?

Yes, there are plans for this that are part of a broader reboot. An official mobile app has also been looked at, but temporarily shelved for other priorities. Along those lines, if GameDev.net offered APIs, what would be of interest?
49. ## A few TypeScript files on Sandbox

There is a few TypeScript files in our example. We want to place these scripts on Sandbox. This is the result on the Sandbox: click. Open the debug console in your browser to see the result: "Ctrl+Shift+J" in Chrome. You will see in the debug console this messages: Create these files on Sandbox: https://plnkr.co/edit/ Program.ts import { Rectangle } from "./Rectangle"; export class Program { public static Main(): void { // Create a rectangle let rectangle = new Rectangle(); // Draw the rectangle rectangle.Draw(); } } Program.Main(); Rectangle.ts export class Rectangle { public x: number; public y: number; public constructor(x: number = 0, y: number = 0) { /* ... */ console.log("Rectangle was created"); } public Draw(): void { /* ... */ console.log("Rectangle was drawn"); } } We need to compile these files to AMD. For this, create the "tsconfig.json" file on the Sandbox: tsconfig.json { "compilerOptions": { "module": "amd", "outDir": ".", "sourceMap": true }, "include": [ "*.ts" ], "exclude": [ "" ] } Create the RequereConfig.ts file on the Sandbox: RequireConfig.ts requirejs.config({ baseUrl: "." }); requirejs(["Program"], (Program) => { }); Add "require.min.js" in the "index.html" file: index.html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>A few TypeScript files on sandbox</title> <script data-main="RequireConfig" src="https://cdnjs.cloudflare.com/ajax/libs/require.js/2.3.6/require.min.js"></script> </head> <body> <h3>See the console output. Press "Ctrl+Shiprt+J" in the Chrome browser.</h3> </body> </html> This is the result on the Sandbox: click. Open the debug console in your browser to see the result: "Ctrl+Shift+J" in Chrome. You will see in the debug console this messages: P.S. If you need to work locally you need to run these commands: npm init -y npm i -D @types/requirejs P.S.S. Read this book to learn more about AMD and RequireJS: Mastering TypeScript - 2nd Edition - Nathan Rozentals
50. Yesterday
51. ## Win Animation

In my last post, I presented the Autocomplete feature that I implemented. This feature lets you right-click anywhere on the board, and all face-up top-most cards will attempt to put themselves in one of the four Foundation piles above the board. I also mentioned a handful of bug fixes that were done. This next and final feature that I will demonstrate here is the Win Animation feature that occurs when you win the game or push the Alt+Shift+2 key combination. The Win Animation is an animation that is played when you win the game. That is when all the cards are properly situated on each of the four Foundation piles above the board. The animation starts at the left-most pile, ending at the rightmost pile for each group of cards (Kings first, then Queen, Jack, 10, etc). The path that the card follows is similar to a sine/cosine wave. Each card has a wave randomly generated that fits within a specified period. These choices are limited to a set number of choices based on my observations of the original game, and there are quite a few randomly generated choices that can occur. I originally started prototyping this functionality using vanilla trigonometry, however, I found an implementation online that I felt was much simpler to implement, and that had much better readability for those not so fluent in the way of mathematical formulas. The implementation that I retrofitted into my game is the one from Mr. Doob, you can find the link to his code here. This is what the win animation looks like in my game (The animation is slow because of the recording software that I use, it is about twice as fast as this in RL) There are a few parts to the code to make this work, and I will explain the major players of this process in snippets below. For me to implement this animation I first created a class called WinAnimationHelper to manage the animation process. This class has a static method called processCards that gets called when someone wants to process all the cards on the Foundation piles (called when the game winning condition has been met). /** * Process all the cards held by the foundation views */ public static void processCards() { // Get the list of foundation piles List<FoundationPileView> foundationsList = AbstractFactory.getFactory(ViewFactory.class).getAll(FoundationPileView.class); // Reverse the list so that we start with the left-most pile. Collections.reverse(foundationsList); // Initialize this helper class initialize(); // Populate the queue of items to be processed _foundations.addAll(foundationsList); } Of interest is the initialize() method that I call above. This is a private static method that creates a timer that processes a field called _foundations at a rate of 80 times per second. After I perform a call to add the available foundations to the queue this timer will start to process them in a first come first serve fashion. For each foundation pile that it processes, it will grab the top-most card and create a WinAnimationHelper object, passing in the card that it received. Here is what the constructor of this class looks like. /** * The change in x over time */ private double _deltaX = Math.floor(Math.random() * 6 - 3) * 2; /* * The change in y over time */ private double _deltaY = -Math.random() * 16; /** * Constructs a new instance of this class type * * @param cardView The card view to animate */ private WinAnimationHelper(CardView cardView) { _cardView = cardView; Point position = cardView.getParentIView().getContainerClass().getLocation(); _x = position.getX(); _y = position.getY(); if(_deltaX == 0) { _deltaX = 1; } } The above code will first initialize the deltas for this card. For the rate of change on the X-Axis, the domain of available values are from [-6, 4]. For the rate of change on the Y-Axis, the range of available values are from (-16.0, 0]. I also handle an edge case where if the change in X is 0, I set it to 1 so that there is at least some movement along the X-Axis. After the object is constructed, my timer that created the object calls the method update() for each tick until the update can no longer occur because the card is out of bounds of the canvas dimensions. Here is what the method looks like. /** * Performs an update by performing both a next step point calculation and a draw routine * * @return TRUE if the operation was successful, false otherwise */ private boolean update() { Point point = calculateNextStep(); if(point == null) { return false; } draw(point); return true; } The above code is very straight forward, calculate the next location of the card, and then draw to that point. Here is the calculateNextStep() method. /** * Calculates the next position that the currently set card will be at * * @return The position associated with the next step where the card would be at */ private Point calculateNextStep() { // Take the change in X and the change in Y and apply them respectively _x += _deltaX; _y += _deltaY; // If you are outside the left or right canvas limits then the card should not // longer be positioned anywhere relevant so do not return any position if(_x < -CardView.CARD_WIDTH || _x > _canvasWidth) { return null; } // If the position is outside canvas height (with respect to the bottom of the card) if(_y > _canvasHeight - CardView.CARD_HEIGHT) { // Normalize the position of the card by placing it on the theoretical bottom of the canvas _y = _canvasHeight - CardView.CARD_HEIGHT; // Take the change in y inverse it, this along will cause the card to bounce upwards // Take only a small percentage of the delta so that it bounces less _deltaY = -_deltaY * 0.85; } _deltaY += 0.98; return new Point((int)_x, (int)_y); } The above code takes the currently computed deltas and adds them to the current x and y positions that were recorded by the card. If the x location is outside the bounds of the canvas then there is no more computation to be performed, this is our exit case. If this is not the case then I check to see if the y position is outside the lower bounds of the canvas. If it is, I position the card at the absolute bottom of the canvas and then I apply an inverse linear force to the current deltaY. This will cause the card to move upwards, however, only upwards by a certain percentage. This is an ever decreasing number that will simulate a bounce and that will eventually flatline itself with the y-axis if this statement is executed many times. Finally, I update the deltaY with a constant to ensure that the change in y counteracts the bounce effect. Once this is computed I perform a draw. Here is what the draw call looks like. /** * Draws the currently set card view to the specified position * * @param point The position to draw to */ private void draw(Point point) { CardView cardView = CardView.createLightWeightCard(_cardView); cardView.render(); ViewFactory viewFactory = AbstractFactory.getFactory(ViewFactory.class); GameView gameView = viewFactory.get(GameView.class); gameView.add(cardView, gameView.getComponentZOrder(viewFactory.get(StatusBarView.class))); cardView.setBounds(new Rectangle(point.x, point.y, _cardView.getWidth(), _cardView.getHeight())); } This was tough because I really wanted to just change the position of a single card and reuse the same draw buffer for performing the draw call just like in the original game. Doing this however was not possible because the layout manager that I am using is a Swing manager called GridBagLayout, and it was showing many artifacts that were making this functionality look horrible. So instead, for each point that I calculate I create a lightweight representation of the specified card view which is in layman terms a JPanel with an image. I take this card and I update it to the position that I calculated previously. I also make sure that it is added to the GameView and that it is positioned at the proper z-position. The finishing touches for this feature were to make sure that clicking anywhere during the animation or pressing on any key stops the animation and asks you if you want to play again, this is in line with the original game. So that is how I implemented the win animation. I also fixed a few more bugs, that I will outline below 1. performing an undo doesn't undo the score, it just subtracts 2 https://github.com/danielricci/solitaire/issues/164 2. Performing an automove no longer updates the score https://github.com/danielricci/solitaire/issues/155 3. Cannot perform an undo after doing an Autocomplete https://github.com/danielricci/solitaire/issues/153 The next thing on my list is to normalize the UI and I have a couple of bug fixes left to do. You can always follow my progress by following the game located at https://github.com/danielricci/solitaire, and if you have any questions I will do my best to answer them. Take care, until my next blog post.

• ### For Beginners

Public Group  ·  1 member

• ### GameDev Challenges

Open Group  ·  86 members

• ### Unreal Engine Users

Open Group  ·  4 members

• ### Optimization Strategy

Open Group  ·  1 member

• ### Publishing and Monetization

Open Group  ·  1 member

• 0
By Brain,

1. 1
2. 2
3. 3
4. 4
Rutin
15
5. 5

• ### Member Statistics

• Total Members
254110
• Most Online
6110