Register a SA Forums Account here!
JOINING THE SA FORUMS WILL REMOVE THIS BIG AD, THE ANNOYING UNDERLINED ADS, AND STUPID INTERSTITIAL ADS!!!

You can: log in, read the tech support FAQ, or request your lost password. This dumb message (and those ads) will appear on every screen until you register! Get rid of this crap by registering your own SA Forums Account and joining roughly 150,000 Goons, for the one-time price of $9.95! We charge money because it costs us money per month for bills, and since we don't believe in showing ads to our users, we try to make the money back through forum registrations.
 
  • Post
  • Reply
drgnvale
Apr 30, 2004

A sword is not cutlery!

Ranzear posted:

Godot? It doesn't have ... wait they added that in 3.0.

It's missing ... wait no, 3.0 has that, again.

Etc.

Godot got way better just a month ago. Can't fault anyone for not keeping tabs. It now looks like UE4 but is more flexible and extensible than Unity. It's just a matter of learning one thing versus another, like if you learned Cryengine these days.

I got started with Godot very recently with the 3.0 beta. I haven't used unity in years, and never did much of anything with it, so I was just wondering what made unity worse since it seems like everyone and their uncle are using it.

ZombieApostate posted:

I think he meant that Unity has some features that aren't very good by default, but have better solutions on their marketplace written by other people which aren't generally free.

Thanks, that makes sense.

Adbot
ADBOT LOVES YOU

OneEightHundred
Feb 28, 2008

Soon, we will be unstoppable!
Unity had the first usable mass-market engine with a decent tool set, so it had the whole market to itself for a while and built up an ecosystem of community, assets, infrastructure, talent, etc. which remains one of its biggest advantages.

UE4 is trying to enter the same market from the opposite direction, it doesn't have as much of that ecosystem, but it's growing rapidly, it has the advantage of Epic using their own engine, and it's funded by a pretty well-established AAA licensee base, including enough money from PUBG royalties to fund a Scrooge McDuck style money pool.

Godot doesn't really have either of that but it does have a really nice workflow and could become very good if it gets some major backing or enough community interest. I'm probably biased, but I used to groan about Scaleform being necessary at all when UI is basically a scene management problem, which games should be good at. Turns out most game tech isn't good at it at all, which is why it needs UI frameworks. Godot is good at it, so it doesn't have a UI system. Overall, it feels less like an engine + editor than it feels like a DCC tool for making games, which is much closer to how I've long felt that an engine should work and it seems like a much more natural solution to the problem. Whether that's enough to overcome Unity's market share or UE4's PUBG/FNBR money printer, I dunno, but it's promising, and it's super easy to get stuff done in it.

xgalaxy
Jan 27, 2004
i write code
Ugh Scaleform. I came onto a project where the studio clearly didn't know how to use it properly and had vector graphics with a poo poo ton of control points each for even the smallest of things and they were baffled why this was a huge performance problem.

I haven't had the opportunity to mess with Unreal's new UI stuff. It looks like it is a tiered system. Slate at the low level and UMG at the higher level. It looks like Slate is even used for all of the Unreal Editor UI but UMG is only used for the in-game stuff.

xgalaxy fucked around with this message at 06:34 on Apr 7, 2018

TheresaJayne
Jul 1, 2011
Me i am using LibGDX and finding it a really nice system,

BabelFish
Jul 20, 2013

Fallen Rib

xgalaxy posted:

Ugh Scaleform. I came onto a project where the studio clearly didn't know how to use it properly and had vector graphics with a poo poo ton of control points each for even the smallest of things and they were baffled why this was a huge performance problem.

I haven't had the opportunity to mess with Unreal's new UI stuff. It looks like it is a tiered system. Slate at the low level and UMG at the higher level. It looks like Slate is even used for all of the Unreal Editor UI but UMG is only used for the in-game stuff.

Heh, in relation to this, think REALLY hard before using bindings in UMG. They look really handy, but they're actually functions called every frame, which given the VM overhead inherent in blueprint functions leads to a ton of performance problems. It's something every team tries, once.

UMG has a couple major things I'd like to see them add (masking volumes and some form of cascading style sheet) but I would still suggest that anyone doing UI in UE4 default to using UMG unless you are doing something crazy with the engine. It's well integrated into the workflow, and is powerful enough to do what you want.

Falcorum
Oct 21, 2010
The nicest thing about Scaleform is how if you disable the UI in games using it, odds are you'll improve frame timings by 3-4ms. :eng99:

Scaleform's VM and GC are really attrocious (and to be fair, so are the abominations our UI programmers come up with sometimes).

The Fool
Oct 16, 2003


To be fair, UI programming is a loving nightmare.

Suspicious Dish
Sep 24, 2011

2020 is the year of linux on the desktop, bro
Fun Shoe
we just require our ui artists to make plane meshes in maya and they animate them using the same timeline animation tools as the rest of our game.

surprised more games don't do this.

Mata
Dec 23, 2003

Suspicious Dish posted:

we just require our ui artists to make plane meshes in maya and they animate them using the same timeline animation tools as the rest of our game.

surprised more games don't do this.

Seems like there would still be some tricky parts remaining, like relayouting dirty areas when bound data changes, letting the user interact with the game via gui while keeping the architecture clean, the whole mess of handling a million different display modes in a bunch of languages, etc

Suspicious Dish
Sep 24, 2011

2020 is the year of linux on the desktop, bro
Fun Shoe
"dirty areas"? what are those? this is a video game, we redraw the entire scene every frame.

dupersaurus
Aug 1, 2012

Futurism was an art movement where dudes were all 'CARS ARE COOL AND THE PAST IS FOR CHUMPS. LET'S DRAW SOME CARS.'
Scaleform was the worst but every other UI system is the worster

Just give me a chrome engine and let me use react :jeb:

UraniumAnchor
May 21, 2006

Not a walrus.

Suspicious Dish posted:

"dirty areas"? what are those? this is a video game, we redraw the entire scene every frame.

Billboarding your UI, maybe?

BabelFish
Jul 20, 2013

Fallen Rib

dupersaurus posted:

Scaleform was the worst but every other UI system is the worster

Just give me a chrome engine and let me use react :jeb:

There's a few of those around for UE4 (I've personally looked at https://coherent-labs.com/ the most.) One problem we ran into was they were running the webkit (I think it was webkit?) renderer in a separate process. Fine on PC, distinctly less fine on any sort of closed system like a console.

Elentor
Dec 14, 2004

by Jeffrey of YOSPOS

The Fool posted:

To be fair, UI programming is a loving nightmare.

Yes, thank you.

xgalaxy
Jan 27, 2004
i write code

Suspicious Dish posted:

we just require our ui artists to make plane meshes in maya and they animate them using the same timeline animation tools as the rest of our game.

surprised more games don't do this.

I'd like to hear more about this actually.
Are they laying out "planes" of meshes for every UI element or is it on a less granular level.. like per dialog or per screen? And then I'm assuming you just use that for your UI render target surface.

xgalaxy fucked around with this message at 01:02 on Apr 11, 2018

Cheston
Jul 17, 2012

(he's got a good thing going)

dupersaurus posted:

Scaleform was the worst but every other UI system is the worster

Just give me a chrome engine and let me use react :jeb:

https://github.com/ncsoft/React-UMG

I'm still learning vanilla UMG though, so I can't speak to how useful or good it is.

dupersaurus
Aug 1, 2012

Futurism was an art movement where dudes were all 'CARS ARE COOL AND THE PAST IS FOR CHUMPS. LET'S DRAW SOME CARS.'

BabelFish posted:

There's a few of those around for UE4 (I've personally looked at https://coherent-labs.com/ the most.) One problem we ran into was they were running the webkit (I think it was webkit?) renderer in a separate process. Fine on PC, distinctly less fine on any sort of closed system like a console.

Cheston posted:

https://github.com/ncsoft/React-UMG

I'm still learning vanilla UMG though, so I can't speak to how useful or good it is.

Nice, if only I was still in the industry...

Brownie
Jul 21, 2007
The Croatian Sensation

dupersaurus posted:

Nice, if only I was still in the industry...

As someone wanting to do game dev but currently in web dev... this is cool as heck

Suspicious Dish
Sep 24, 2011

2020 is the year of linux on the desktop, bro
Fun Shoe

xgalaxy posted:

I'd like to hear more about this actually.
Are they laying out "planes" of meshes for every UI element or is it on a less granular level.. like per dialog or per screen? And then I'm assuming you just use that for your UI render target surface.

depends on how the artists set it up -- usually it's one mesh per "movable element". the only other thing we have is a special kind of object that renders text at runtime. we also have a material / shader system and we built nine slicing in that. so they can just scale meshes like they would other game objects and it works fine.

OneEightHundred
Feb 28, 2008

Soon, we will be unstoppable!

Suspicious Dish posted:

we just require our ui artists to make plane meshes in maya and they animate them using the same timeline animation tools as the rest of our game.

surprised more games don't do this.
Godot's animation system lets you key arbitrary object attributes on a timeline, so it just straight-up gives you the typical DCC tool workflow.

That's basically what's so good about it, it just lets you manipulate the scene with the same degree of ease as DCC tools do, at which point the 2D object management stuff just becomes usable as a UI system for free.

roomforthetuna
Mar 22, 2005

I don't need to know anything about virii! My CUSTOM PROGRAM keeps me protected! It's not like they'll try to come in through the Internet or something!

OneEightHundred posted:

Godot's animation system lets you key arbitrary object attributes on a timeline, so it just straight-up gives you the typical DCC tool workflow.
Arbitrary object attributes and function calls. It's really good and easy to use.

Dirty
Apr 8, 2003

Ceci n'est pas un fabricant de pates
Serialization.

This is probably a dumb question, but here we go. I'm trying to write functions to save and load my game state, and I get the concept of serializing objects. What I don't get is how to handle references properly.

For example, I there are Fleets in my game. These contain:
code:
List<ShipItem> ships
StarSystem location
Those are references to other objects. They can be serialized too, but I don't want the Fleet object to end up spidering out and containing a copy of everything it references when I serialize it, since these objects will be referenced elsewhere and I don't want to save multiple copies of them. But I still need those references intact when I reload the data. The fleet needs to know what location it's at, but a separate Starmap object already contains all those StarSystem objects, so I don't need another copy of it in the Fleet object.

Nice tools like JSON.net seem great at taking an object and serializing it, and I can see that I can tell it not to serialize something, so I can avoid a simple object containing every object it references. But what I'm not sure about is the best way to rebuild that connection when I deserialize. If I didn't serialize those referenced objects, that reference won't survive the serializing process. It seems like I should be replacing the reference with some kind of unique Id at the point of serialization, like a string or something, and when I unserialize, turn that string back into the original object reference. Is that a reasonable approach or have I got this all wrong?

Mata
Dec 23, 2003

Dirty posted:

It seems like I should be replacing the reference with some kind of unique Id at the point of serialization, like a string or something, and when I unserialize, turn that string back into the original object reference. Is that a reasonable approach or have I got this all wrong?

That's a reasonable approach I think. To some extent you can also restructure your data, like in your example if your serialized StarSystem contained a list of Fleets instead of Fleets containing a StarSystem, you could avoid duplicate references (then in a post-serialization step, set the references on the fleets how you want them during run-time).
I use protobuf.net to serialize my datastructures, and it allows you to pass a decorator "AsReference=true" which makes protobuf.net internally keep track of this thing and sets up the right shared references on deserialization. It scares me a little though, and I prefer structuring my data so that every instance is referenced exactly once.

Mata fucked around with this message at 10:25 on Apr 12, 2018

leper khan
Dec 28, 2010
Honest to god thinks Half Life 2 is a bad game. But at least he likes Monster Hunter.

Dirty posted:

Serialization.

This is probably a dumb question, but here we go. I'm trying to write functions to save and load my game state, and I get the concept of serializing objects. What I don't get is how to handle references properly.

For example, I there are Fleets in my game. These contain:
code:
List<ShipItem> ships
StarSystem location
Those are references to other objects. They can be serialized too, but I don't want the Fleet object to end up spidering out and containing a copy of everything it references when I serialize it, since these objects will be referenced elsewhere and I don't want to save multiple copies of them. But I still need those references intact when I reload the data. The fleet needs to know what location it's at, but a separate Starmap object already contains all those StarSystem objects, so I don't need another copy of it in the Fleet object.

Nice tools like JSON.net seem great at taking an object and serializing it, and I can see that I can tell it not to serialize something, so I can avoid a simple object containing every object it references. But what I'm not sure about is the best way to rebuild that connection when I deserialize. If I didn't serialize those referenced objects, that reference won't survive the serializing process. It seems like I should be replacing the reference with some kind of unique Id at the point of serialization, like a string or something, and when I unserialize, turn that string back into the original object reference. Is that a reasonable approach or have I got this all wrong?

if only .net had a built in structure for unique identifiers that would perform and behave better than strings

Polio Vax Scene
Apr 5, 2009



No need to be snarky, theirs is a valid question on how to properly save and load their list.
You'll want to have your List<ShipItem> not be serialized and instead have a List<Guid> that properly stores or loads the ShipItems when saved or loaded.

Dirty
Apr 8, 2003

Ceci n'est pas un fabricant de pates

Mata posted:

That's a reasonable approach I think. To some extent you can also restructure your data, like in your example if your serialized StarSystem contained a list of Fleets instead of Fleets containing a StarSystem, you could avoid duplicate references (then in a post-serialization step, set the references on the fleets how you want them during run-time).
Great point. When I read this I realized how rear end-backwards my data structure is, and how much work that's made for me. But it's been fairly simple to reorganise, and I've been able to ditch a few silly helper functions. I can't fix everything that way, but it's definitely helping me analyse the problem better.

Thank you, this is useful. But if only people wouldn't answer questions with snippy "if only"s. Kinda makes me not want to ask any.

Polio Vax Scene posted:

No need to be snarky, theirs is a valid question on how to properly save and load their list.
You'll want to have your List<ShipItem> not be serialized and instead have a List<Guid> that properly stores or loads the ShipItems when saved or loaded.
Got it, thank you. My main thinking now is around how/when to swap out List<ShipItem> for List<Guid>, but maybe JSON.net has something there for me.

OneEightHundred
Feb 28, 2008

Soon, we will be unstoppable!
This isn't an easy problem and depends on the language. Two ways to deal with this are handles and 2-pass loading. With handles, you don't store references to things directly, but rather store references to a proxy that points to the actual object. Doing that can help with some other things too, like deleting objects, since you can just invalidate the proxy instead of having to track down all of the dead references or use events. When deserializing, you can just deserialize the handles and make an ID-to-object table and then make the proxies all point to any live objects after everything's loaded. The downside to using handles is that they're more prone to annoying mistakes if an uninitialized handle and a handle referencing a dead object are distinguishable, so it's probably best to use a struct "ProxyReference<T>" wrapper or something so the compiler will at least warn you if you try to compare it to null.

If you want to keep actual references, then you can use 2-pass: Create all of the objects and build the ID-to-object table, then deserialize the object properties. (There's a way to do that in one pass too by queuing up unknown objects in the same order that they were serialized, but it's more complicated and not very useful).

The next important piece of all of this is making sure you have some way to distinguish between references to static game data and what references mutable game state, and to do that, you need some uniform way of referencing game data (resource IDs, etc.), so plan for that in advance.

OneEightHundred fucked around with this message at 18:23 on Apr 12, 2018

empathe
Nov 9, 2003

>:|
Is there a tutorial, book, series that teaches making a roguelike in any language?

Staggy
Mar 20, 2008

Said little bitch, you can't fuck with me if you wanted to
These expensive
These is red bottoms
These is bloody shoes


Although it's not a straightforward set of tutorials, take a look at the development articles here. It seems to have a decent mix of high-level design articles and deeper dives on specific topics like time unit management.

I also had this article saved, which goes into a few things to do with turn-based update loops.

empathe
Nov 9, 2003

>:|

Staggy posted:

Although it's not a straightforward set of tutorials, take a look at the development articles here. It seems to have a decent mix of high-level design articles and deeper dives on specific topics like time unit management.

I also had this article saved, which goes into a few things to do with turn-based update loops.

Thanks! I'll take a look at these!

xgalaxy
Jan 27, 2004
i write code

Staggy posted:

I also had this article saved, which goes into a few things to do with turn-based update loops.

That guy's stuff is awesome. He works on designing the Dart language at Google. He wrote the Game Programming Patterns book. He is writing a new book about compilers and designing an interpreted language. He also wrote his own hobby language called Wren. And finally, he likes to toy around with Roguelikes.

I haven't read it, but I'm sure whatever he writes about Roguelikes is insightful.

Dirty
Apr 8, 2003

Ceci n'est pas un fabricant de pates

OneEightHundred posted:

This isn't an easy problem and depends on the language. Two ways to deal with this are handles and 2-pass loading. With handles, you don't store references to things directly, but rather store references to a proxy that points to the actual object. Doing that can help with some other things too, like deleting objects, since you can just invalidate the proxy instead of having to track down all of the dead references or use events. When deserializing, you can just deserialize the handles and make an ID-to-object table and then make the proxies all point to any live objects after everything's loaded. The downside to using handles is that they're more prone to annoying mistakes if an uninitialized handle and a handle referencing a dead object are distinguishable, so it's probably best to use a struct "ProxyReference<T>" wrapper or something so the compiler will at least warn you if you try to compare it to null.

If you want to keep actual references, then you can use 2-pass: Create all of the objects and build the ID-to-object table, then deserialize the object properties. (There's a way to do that in one pass too by queuing up unknown objects in the same order that they were serialized, but it's more complicated and not very useful).

The next important piece of all of this is making sure you have some way to distinguish between references to static game data and what references mutable game state, and to do that, you need some uniform way of referencing game data (resource IDs, etc.), so plan for that in advance.

Thank you, I'll have a think about those approaches. I'm glad to say that I already have a consistent and solid system for static game data, so it's easy to boil those down to reference ids in the game state.

Portland Sucks
Dec 21, 2004
༼ つ ◕_◕ ༽つ
I don't know much about game/graphics development, but I've got a use case at work that I think might call for Unity and just want to verify that it may be a good option before wasting too much time chasing down a hole for nothing.

I work for a manufacturing company and our team is in charge of putting out tools, HMIs, and visualization platforms for our operators and laborers that work in a plant. I'm restricted to using C# for development purposes (less I become the only one capable of maintaining it) and have been put in charge of our next product. It needs to be a touch screen, interactive HMI that's going to be mounted in some heavy equipment. Everything we've built so far has been in WinForms or WPF but the specifications and requirements for these interfaces continue to increase in complexity every time we put out a new tool so I'm thinking that maybe a game engine might be better suited for what we're doing? Something that's more than a menu driven desktop application but not quite a full on game. I'm thinking Unity just because of the C# requirement, but I don't know the first thing about graphics development outside of desktop apps so if that's overkill I'm open to other options. Basically I'm just looking for something to develop highly graphical custom 2D interfaces.

leper khan
Dec 28, 2010
Honest to god thinks Half Life 2 is a bad game. But at least he likes Monster Hunter.

Portland Sucks posted:

I don't know much about game/graphics development, but I've got a use case at work that I think might call for Unity and just want to verify that it may be a good option before wasting too much time chasing down a hole for nothing.

I work for a manufacturing company and our team is in charge of putting out tools, HMIs, and visualization platforms for our operators and laborers that work in a plant. I'm restricted to using C# for development purposes (less I become the only one capable of maintaining it) and have been put in charge of our next product. It needs to be a touch screen, interactive HMI that's going to be mounted in some heavy equipment. Everything we've built so far has been in WinForms or WPF but the specifications and requirements for these interfaces continue to increase in complexity every time we put out a new tool so I'm thinking that maybe a game engine might be better suited for what we're doing? Something that's more than a menu driven desktop application but not quite a full on game. I'm thinking Unity just because of the C# requirement, but I don't know the first thing about graphics development outside of desktop apps so if that's overkill I'm open to other options. Basically I'm just looking for something to develop highly graphical custom 2D interfaces.

Unity will work for this use case, assuming your runtime is at least as powerful as a consumer netbook/tablet.

Do a google for unity canvas ui for some tutorials. Its some approximation of drag/drop.

beauty queen breakdown
Dec 21, 2010

partially cromulent posting.
"2021's worst kept secret"


Seconding the notes above on Godot 3.0, but adding a question --

Coming from an enterprise perspective, I've found Godot doesn't die to version control with `git`, but there's still a lot of point-click-&c in the interface. As an impatient person, this drives me crazy but I'm trying to stick with it on the basis of cross-platform dev on the quick.

I really want to use something like libGDX where I can develop a game on the JVM, but I've found virtually no tooling support for builds / getting started -- the docs are a mishmash of what they were doing a few years ago with maven and doing now with gradle...

Am I the only person with this kind of thought process? Am I terrible? I have to presume so.


( edit : I'm only interested in 2D development in this context )

nolen
Apr 4, 2004

butts.
I'm trying to build a Quarth clone for funsies and am kinda stuck on the logic that determines when a set of combined shapes equals a rectangle.

For those of you not familiar:






Has anyone built something similar and would have some insight?

Bucnasti
Aug 14, 2012

I'll Fetch My Sarcasm Robes

Portland Sucks posted:

I don't know much about game/graphics development, but I've got a use case at work that I think might call for Unity and just want to verify that it may be a good option before wasting too much time chasing down a hole for nothing.

I work for a manufacturing company and our team is in charge of putting out tools, HMIs, and visualization platforms for our operators and laborers that work in a plant. I'm restricted to using C# for development purposes (less I become the only one capable of maintaining it) and have been put in charge of our next product. It needs to be a touch screen, interactive HMI that's going to be mounted in some heavy equipment. Everything we've built so far has been in WinForms or WPF but the specifications and requirements for these interfaces continue to increase in complexity every time we put out a new tool so I'm thinking that maybe a game engine might be better suited for what we're doing? Something that's more than a menu driven desktop application but not quite a full on game. I'm thinking Unity just because of the C# requirement, but I don't know the first thing about graphics development outside of desktop apps so if that's overkill I'm open to other options. Basically I'm just looking for something to develop highly graphical custom 2D interfaces.

I know a guy who worked on automotive entertainment systems and they used Unity for their UI, so it's not a stretch.

Suspicious Dish
Sep 24, 2011

2020 is the year of linux on the desktop, bro
Fun Shoe

nolen posted:

I'm trying to build a Quarth clone for funsies and am kinda stuck on the logic that determines when a set of combined shapes equals a rectangle.

For those of you not familiar:






Has anyone built something similar and would have some insight?

Assuming you have collided with a square on the board: Flood fill around the square to find a "bounding box", and then do a separate loop over the bounding box, making sure that each box is filled in.

LLSix
Jan 20, 2010

The real power behind countless overlords

nolen posted:

I'm trying to build a Quarth clone for funsies and am kinda stuck on the logic that determines when a set of combined shapes equals a rectangle.

For those of you not familiar:






Has anyone built something similar and would have some insight?

I've not done this before but I'll take a stab at it.

Uggh, detecting both independent rectangles and combined rectangles makes this a lot harder. You probably want to check for combined rectangles first to avoid ticking off the players. To get those kinds of graphics, I'm going to assume that each cell tracks if it is filled in, and some mechanism for indicating which shape it is part of; pointer, integer flag; something.

This algorithm relies on the fact that rectangle's width is consistent across its height.

1) Check for combined rectangles.
a. the active row and column match the ones for the cell that just got filled in.
b. find the width of the rectangle by checking to see if the cells to the right and left on the active row have been filled in until you find the first blank spot. This is now your reference width.
C. Check up and down the active column to see if they have the same width until you find the first blank spot up and down or you find a row with different width than your reference width.
O(maximum column * width of active row)
D. Verify the rectangle doesn't have any bits sticking off that belong to the included shapes. (Yuck, fortunately, you only have to check for bits sticking off the top and bottom since we've already checked the sides.)
E. Remove any shapes with sticking off bits as per D and check to see if you still have a rectangle.
e1. If you do have a rectangle now, great, you're done.
e2. if not, go back to D and repeat until you have no included shapes. (fortunately this set will never be large in modern computer terms)

It's also a pretty small space, you could just brute force it and build possible rectangles for every square similar to match 3 game hint algorithms.

Adbot
ADBOT LOVES YOU

Xerophyte
Mar 17, 2008

This space intentionally left blank

nolen posted:

I'm trying to build a Quarth clone for funsies and am kinda stuck on the logic that determines when a set of combined shapes equals a rectangle.


As mentioned, you can basically do a flood fill within the set of squares that are part of some shape to find the set of combined shapes. To pseudocode badly:

1. Add the square you just added to the board to a set.
2. Add all unvisited neighboring squares of the square you added to a queue.
3. Visit the next square in your queue
-- If the next square is part of some shape, add it to your set and its unvisited neighbors to your queue
-- If the next square is not part of some shape, just mark as visited.
4. If you've got more squares in your queue, back to 3.
5. Once your queue is empty your set will contain all squares in the combined set of shapes that your new square is a part of. Test if this set is equal to its bounding box (you really only need to test that the number of squares in the set == number of squares in the BB == BB's width*height).

  • 1
  • 2
  • 3
  • 4
  • 5
  • Post
  • Reply