Hi there, my name is Atanas Laskov.
I'm interested in web technologies and game dev.
Currently, I am working on a city editor web-app. You can see some preliminary wireframes
in the sketchbook. I'm also an artist and digital illustrator.
In this game you explore a beautiful town threatened by a dangerous storm.
I did the UI design and icon design in Adobe Illustrator, the character animation in Adobe Animate.
The project gave me the opportunity to do visual effects animation for wind, rain and sparkles in Unity Engine.
Some of the Unity Engine prefabs for the UI also are my work.
Project Blob is a side-scrolling point & click adventure, I animated the girl and her blob pet.
My work experience includes C++, JavaScript and Java programming.
I studied Computer Systems and Technologies at TU-Sofia and after that I went on to study Artificial Intelligence at the University of Edinburgh.
Further, I studied Computer Arts at Abertay University.
The following section gives an overview of the class hierarchy implemented in the game.
It describes briefly the responsibilities of each class.
Helper Classes
[-] contract
class laClassFactory
Register and instantiate objects by class name.
class laNamedClass
This is the base class for all objects created by laClassFactory.
class laFileParser
Parsing XML-like files into objects.
class laLoadableObj
Base class for all objects loaded by laFileParser.
class laPropertyList: public laLoadableObj
Loads and maintains a list of properties.
class laTypedObject: public laLoadableObj
Loads and maintains an object of the specified class type.
class laProgressiveTask
Children of laProgressiveTask have the capability to record the progress of a task and its sub-tasks.
class laError
Error handling class containing a text description.
Level Structure
[+] expand
class laElement: public laPropertyList
This class loads and maintains a list of animated 3D models and effects composed at different positions. The data file can request a children of laElement to be used. This way it is possible to implement custom rendering.
class laTile: public laLoadableObj
This class represents a single element in the level grid. A tile can contain several laElement objects.
class laTileset: public laProgressiveTask
This class stores a tileset loaded form file. The tileset is used to describe all types of elements which can be instantiated in the level. Tileset elements include the terrain elements, creature objects, collectables, potions, and so on.
class laLevel:
public laProgressiveTask, public laClassFactory
This class represents the entire level. For performance reasoned the level is subdivided into a series of segments; Segments are organized as list of laSegment objects. These segments are twisted in 3D for better visual effect.
class laSegment: public laLoadableObj
This class represents a single segment of the level. Representing the level as a sequence of segments makes it easy to render and animate only those that are visible at any time.
class laLitterBox: public laLoadableObj
Populations of objects, randomly placed.
class laSky: public laLoadableObj
Texture effect for simulating the sky.
Geometry
[+] expand
class laPoint2: public laLoadableObj
class laPoint3: public laLoadableObj
Represents 2D and 3D vectors. Implements dot products, cross products and other vector operations.
class laLine2
class laLine3
Represents 2D and 3D line segments. Implements finding intersection points and other line-segment operations.
class laPlane3
Represents a 3D plane. Implements intersections with laLine2 and other plane operations.
class laRect2
class laRect3
Represents bounding boxes and rectangles.
Renderer
[+] expand
class laRenderer
Abstract renderer interface
class laRenderer_OpenGL: public laRenderer
OpenGL implementation of the laRenderer abstract interface.
class laModel
Abstract interface for 3D models.
class laFace
Single face of a 3D model.
class laStaticModel: public laModel
Implements a static (non-animated) model.
class laAnimatedModel: public laModel
Implements an animated model.
class laModelHook
Allows the attachment of 3D objects to laModel. At every time t it gives the position and vector rotation of the hook.
class laTexture
Represents a texture.
class laColor
Represents a RGB colour.
class laFont
Represents a font.
class laFontManager
Resource manager for all fonts.
Collision Detection
[+] expand
class laCollider
This class implement a collision detection algorithm.
class laCollisionTests: public laStage
This is a set of tests for debugging the collision detection algorithm.
class laCollisionDomain
This class stores collision detection data.
class laCollisionScenario
This class contains all the information necessary for collision detection and stores the result of the collision detection.
class laPivot: public laPoint3
This class represents the position and rotation of dynamic objects; It is also a the representation of the object during simulation of physics.
class laPhForce
Simulation of physical force applied to an object.
class laTimer
This class helps in calculating timing (dt, frames per second).
class laTimeTrig
Time-triggered events.
Effects
[+] expand
class fxParticleSystem: public laLoadableObj
Animated particle effect for smoke, fire and other.
class fxMessages
Animated text message floating in 3D.
class fxAnimatedText
Animated block of text.
class fxShutter
Fades in, fades out the semi-transparent shutter. This is used in the GUI library.
Architecture
[+] expand
class laSystemIntegrator
Integrates all sub-systems of the engine. This class is singleton and it throws an error if the client attempts to create more than one instance of it.
class laEnvironment
Abstract interface for the OS environment.
class laEnvironment_win32: public laEnvironment.
Windows implementation
class laThread
Abstract thread containing the virtual method run()=0; Objects of this type can be passed to laEnvironment for parallel execution.
class laGame
The laGame class manages several laStage objects. Only one stage can be active at any given time. Stages can be added and removed dynamically.
class laStage
The stage represents a different phase of the game. For example the main menu can be a stage. The introductory screen can be another one, the game itself a third one.
class stageGame: public laStage
class stageMenu: public laStage
class stageLoad: public laStage
class stageEdit: public laStage
class stageModelViewer: public laStage
class laSettings: public laPropertyList
Game engine settings
class laInputManager
class laMultiKey
AI
[+] expand
class aiAgent: public laLoadableObj, public laClassFactory
This class provides the percepts and controller which can be used to implement AI agents. Any element of the level can have attached AI. Agents perceive information about the environment (for example the distance to the player; this information is supplied by other parts of the engine). The agent is a finite-state machine. New states can be added and removed dynamically but only one can be active at any time.
class aiPercepts: public std::map<unsigned, aiPerceptData>
The set of percepts available to the agent.
class aiAgentState: public laNamedClass, public laLoadableObj
Base class for agent states.
class aiMobState_Prowl: public aiAgentState
class aiMobState_Flyer: public aiAgentState
class aiMobState_LavaJumper: public aiAgentState
class aiState_Autoplay: public aiAgentState
Objects and Creatures
[+] expand
class laObject:
public laLoadableObj, public laNamedClass
This is the base class for all objects placed in a level.
class laStateObject: public laObject
Stableful level object (e.g. stand, walk, and attack states). This class creates transition animations between the animations of the different states.
class laCollectable: public laObject
The player can collect this type of object (e.g. coins and other treasure).
class laMovingCreature: public laStateObject
Base class for all mobile object and creatures.
class laFightingCreature: public laMovingCreature
This type of creature can engage in battle.
class laMonster: public laFightingCreature
Fighting creature controlled by the AI.
class laPlayer: public laFightingCreature
Fighting creature controlled by the player.
class laGateway: public laCollectable
Collecting this item causes transition to the next level.