C++ inline Assembler hack back in 2008

Digging deep in my work from past years I stumbled upon interesting Assembler workaround I made then for C++. I was looking for a solution that could make possible to wrap a class method into Function class object. These days with C++11 it's just a matter of using std::bind and std::function but I think it's pretty interesting to see what Assembler could be behind such "simple" task as encapsulating pointer to method.

→ Continue reading

Caching Partial View with View Composer in Laravel

Laravel 4 has got pretty nice Cache mechanism. Unfortunately, it's nicety brings not too much functionality. It lacks a way to cache whole pages or partials.I have found nice plugin called Flatten which works on top of Laravel Cache and is able to do the job. What I desired was to cache partial view and also cache it's data being created by View Composer.

→ Continue reading

Working on workflow for Unity and git

Unity3D seems to be a great software for rapid prototype development. It certainly is but when properly used. You're alone with your prototype? It's OK but I was the other case. When it comes to collaborate there's a belief that nothing will change during the process of development. Well, the reality is that the teamwork does change a lot. If you dare to work with team using Unity, then you may find my experiences useful to you.

→ Continue reading

Iterative version of Ramer-Douglas-Peucker line-simplification algorithm

In one of our games we needed to beautify user mouse or touch input. Actually it isn't simple task since there can be found many criteria due to point reduce. I have tried several solutions like discovering big angle change between segments (built of last given input points), big distance discovering, Catmul-Rom curve approximation and even joining all of those methods.

Later on I have found Ramer-Douglas-Peucker algorithm which helped to reduce unneeded points in a more visually proper way. In the end I've been reducing points by small distance and little angle between segments to put less points into the algorithm. Since it had to be done in realtime that wasn't enough of optimizations. Next optimization was to make the iterative version of Douglas-Peucker algorithm.

→ Continue reading

Memory leaks in Adobe AIR Mobile / AS3 project

As many Adobe Flash / AIR / AS3 projects we have been using Event Dispatcher. This concept seemed to be too uncontrollable and lacking of many wanted information. Doubts about garbage collector made us to recreate the idea to take more of control and information about event listeners.

Keywords: Garbage Collector Which Sucks, Event Dispatcher, Event Bus, Event Listener, Object Pool, Disposable Objects

→ Continue reading

Quick implementation of Network for existing Game

There are 2 common choices of architecture for game network implementation:

  1. client-server
  2. peer-to-peer

What I did was some kind of hybrid of those two. I used Remote Procedure Calls (RPCs). In this post I will describe this technique giving some basic examples showing the role of server and actually giving it some tools to do it's role as a server.

→ Continue reading

Time update issues with Keyframe-based animation

Some time ago I joined to some project developed since 3 months before by a 3-4 person team. After next 4 months I made a refactor request to modify whole engine and game to make game frame update based on the time, rather than device power. Yeah, there was a constant constraint set - maximum 30 Frames Per Second.

Many of world-existing mobile devices couldn't achieve those constant 30 FPS-es. On the other side some devices could show 60 without a problem but couldn't because of constraint.  It seemed crucial to me to change that. I have seen a game in previous company where 60 FPS were desired and some devices didn't make 30-40. Those games felt totally too slow.

I was developing a whole animation system then but I'd like to describe one element of it all - keyframe-based animation which was a huge part, actually most crucial. I tried to look for solutions, even tried to look into Spine (which is a great software, I recommend it!) libgdx "runtime" which is open-sourced. Unfortunately, our needs were too wide.

→ Continue reading

Unity – is this point within a box?

I am currently using Unity for two weeks and I have started to implement logic and graphical tweaks into mechanics. It happened that I needed a little math to correct some calculation failures based on user mouse or touch input. A simple check was needed - is a given 3D point contained within a box?

I was pretty disappointed that Unity does not have such functions already made. And even more disappointed I couldn't find ready solution for Unity-specific library code. Actually many folks use Physics.Raycast() instead which is ugly. The sad fact is that many creators do not have any idea what they are doing by using Raycast.

Below you can see the code for such point-box check. If you need it, figure it out yourself how it works.

Adobe AIR trick: Faster file loading on development machine

I had pretty weak company computer in my recent job and also pretty old rubbish Windows installation. Because of that, duration of loading our Adobe AIR game was about 14 seconds. Colleagues had better times, like 11 seconds. I was curious if I could make it faster.

Every change in code made whole application recompile, restart and load again. I disliked it more and more, then a simple idea came to my mind:

if you don't want to waste time on loading every time, then load it once!

Actually, why not. Easier said than done, right? Load whole data into RAM in another application and then send it through sockets to the application.

So I wrote simple application in C# which reads all files (graphics, sounds, etc.). I have also added new option of loading data to the game - through sockets. Result - came down from 14 seconds to 7 seconds! I could have done it earlier.

WPF/Silverlight Design Data without XAML

Here's a class for our sample data. That's where the data should go into.

In App.xml define your namespace:

and then:

The last step - instantiate sample data as DesignContext. You can do it in your Window, Page or whatever. I did it in MainPage.xaml in my Windows Phone 7 application:

Our sample data is bound to whole page. Use it like every other binding.

CoffeeScript to JavaScript compilation in Sublime Text 2/3

Ever wanted to write code in CoffeeScript? It surely is great but you wonder why is this not automated or smaller. Actually there are two options:

  1. include CoffeeScript so it will compile to JavaScript when page is loaded
  2. include pure JavaScript - generated from CoffeScript code.

First option is very easy but may vary on performance. Second is better in performance bad worse in usage. I'll teach you how to automate that process so it will be both fast on page load and easy too.

→ Continue reading

Interface with basic implementation in C#

Today we have simple question:

How to avoid abstract classes by giving base implementation?

The story

Once in a time I was building animation system which was planned to be used in IGWOCTISI project. It happened that I wanted to created some predefined tweens (animated translations) like ScaleTo, MoveTo, RotateBy and so on.

In the horizon appeared a requirement which was pretty straightforward:

The fact was that my type T not always was able to be some Transformable object.

→ Continue reading

Better Memento

Today I asked myself - how to use Memento design pattern to store object state in a more safe and effective way? Of course by automating some things using some base implementation. Read about why I needed better Memento and how did I achieved nice combination of Memento and Command design patterns. Full code is given.

→ Continue reading

Why is Ruby so entertaining? Mixins.

Ruby

Ruby [0] is a simple, yet powerful language, thanks to which developers are enabled to create or programmatically sketch many things in a fast manner. It's good for prototyping GUI (Shoes [1]), web development (Rails [2], Merb [3]) or even for network administrator's scripting (for massive or scheduled actions).

The question today is - why are there so many people interested in that language? I think that one of strong features are mixins.
→ Continue reading