Monday, August 3, 2015

Windows 10 - IE Work around

I tried out Windows 10 at the Microsoft store a few days ago and really loved it so I installed it first chance I got time over the weekend.  I do really like the interface fixes.  I've mostly liked Windows 8 and have gotten used to the split interfaces for metro (now tablet) applications and desktop.  I've gotten used to the various touch screen gestures on my Surface Pro 3 and absolutely love my surface. Probably one of the best machines I have ever owned, but that's not saying much because usually I buy two year old machines for cheap, max out the ram and put in an SSD and limp along for a few more years.  The surface was a gift, one of the best ever, but not something I would have bought for myself.

Anyway, after the Windows 10 install everything was working well except there is one site I use a lot that requires IE and an Active X control.  The windows 10 browser is called Edge (even though the icon, a big "e" looks exactly like IE) and it will not run the plugin.  I've been trying to get the plugin to work to no avail.  I though IE had been uninstalled, but just went to try and install it and sure enough it's still there.  The site I need still works in IE so all is well again and I'm really liking the new interface.

The biggest improvement I've seen in Windows 10 is a much closer integration between the (metro) tablet interface and the desktop interface.  They mostly just look like they are one interface (more desktop than metro) and it works much more smoothly.   Well worth the upgrade and a huge improvement.

If you are looking for IE on windows 10, just search for "Internet Explorer" and it's the top hit.  Sometimes the top of the menu looked like a "header" item to me and I was ignoring it.  The top part that looks like a header is actually the closest item you are looking for.


Friday, July 24, 2015

Happy Birthday IBM BlueMix




I've written a few test applications with Bluemix over the past year and really liked the environment and capability it gives to rapidly build applications. I've also tried most of the competitive environments an this one is the best. What a great environment and year it has been. You should try it.

Friday, June 5, 2015

Datacap C# Smart Parameter parsing using MetaWord

I keep having to look up how to get a smart parameter in Datacap using both C# and VBScript. Figure it's time to leave myself a breadcrumb.

Here is the sample in C#, it comes directly from the vScanSample where I always look for it.
        public bool myact_set_folder(string sPath)      // set the folder to search for files
        {
            dcSmart.SmartNav localSmartObj = null;
            try
            {
                localSmartObj = new dcSmart.SmartNav(this);
                //If the parameter is a smart parameter, look up the actual path (returns the original path if it was not a smart parameter)
                mFolderPath = localSmartObj.MetaWord(sPath);
                RRLog.Write("Image source folder set to: " + mFolderPath);
            }
            catch (Exception ex)
            {
                RRLog.Write("myact_set_folder error: " + ex.ToString()); 
                return false;
            }
            finally
            {
                localSmartObj = null;
            }

            return true;
        }


Here is the VBScript Datacap custom action version to parse the smart parameter. This comes directly from one of my own custom actions I use for doing text searching.

   'Get the smart parameter for the FinderString
    sTmp = MetaWord(FinderString)
    If (sTmp = "") Then 'Field Value
        Set oChild = CurrentObj.FindChild(Right((FinderString), Len((FinderString))-1))
        If Not(oChild Is Nothing) Then
           WriteLog("Hostname from field")
           sTmp = oChild.Text
    Set oChild = Nothing
        End If
    End If
    ValueToSearch = sTmp
    WriteLog("ValueToSearch = " & ValueToSearch)

Hope I remember that I left myself this note here

Wednesday, April 15, 2015

c# getters and setters

I keep having to lookup the c# syntax for getters and setters.  Nothing to fancy, just figure I'll leave myself a bread crumb.


    private int iCurCell;
    public int CurCell
    {
        get { return iCurCell; }
        set { this.iCurCell = value; }
    }

Tuesday, April 14, 2015

Instantiate a prefab

I keep having to look up how to instantiate a prefab.  This is an easier place for me to look for it.

Put this as a method variable

// C# 

public Transform prefabMovePath;

Once you have that method variable in your Unity script, then you will see this.
Simply drag and drop the prefab you want to the script to instantiate to the PrefabMovePath in unity.


Since I'll probably forget that too, the way you create a prefab is pretty simple, build it up in the hierarchy/scene, then drag it from the hierarchy to the project.  It will have a blue cube icon.

Use this Instantiate code to create an instance of that prefab.

private Transform curMove;
void Start() 
{
    curMove = (Transform)Instantiate(prefabMovePath, new Vector3(0, 0, 0), Quaternion.identity);
}

Then, since that prefab has a script I need access to, use this when wanting to call code in the script that prefab is attached to.

        MovePath mp = curMove.GetComponent();
        mp.rotateLeft();

Friday, February 6, 2015

Using Unity Instantiate to create child objects

I'm building a tetris like board and was using Instantiate to create a group of tiles that were a move piece and when I moved the parent object, non of them moved.  It wasn't hard to fix, simply set the parent of the instantiated object.


            Transform ttmp = (Transform)Instantiate(goal_tile, goal_tile.position, goal_tile.rotation);
            tile.transform.position = new Vector2(
                (cellToCol(i) * tile_plain.rect.width) / tile_plain.pixelsPerUnit,
                (cellToRow(i) * tile_plain.rect.width) / tile_plain.pixelsPerUnit);
            ttmp.parent = transform;


Then in the update method, I can move the entire group of tiles like this



       Transform t2 = GetComponent();
       t2.position = new Vector3(t2.position.x + 0.005f, t2.position.y, t2.position.z);



In this case I'm getting the Transform associated with myself and adding a small amount to the x position. It doesn't do much because it just moves of the screen, but the game is getting closer bit by bit.

Thursday, January 29, 2015

Unity2D script to programatcally add a sprite

I'm create a grid of tiles. The tiles are sprites and I'm laying them out programmatically. Here is the code to generate one of the tiles.

public Sprite tile_plain; // assign this in unity by dragging a sprite to it void Start() { GameObject tile = new GameObject(); tile.AddComponent(); tile.GetComponent().sprite = tile_plain; tile.transform.position = new Vector2((i * tile_plain.rect.width)/tile_plain.pixelsPerUnit, 5f); }

Wednesday, January 28, 2015

Unity2D Screen size

Still messing with Unity 2D and wanted to make a note on now to find the screen size and the upper left coordinate. This will be something I need for every game.
using UnityEngine; using System.Collections; public class ScreenSize : MonoBehaviour { void Start() { float ScreenHeight = Camera.main.orthographicSize*2; float SceenWidth = Camera.main.aspect * camHalfHeight; // Set a new vector to the top left of the scene Vector3 topLeftPosition = new Vector3(-ScreenWidth/2, ScreenHeight/2, 0) + Camera.main.transform.position; } }

Tuesday, January 27, 2015

Unity 2D Units

I'm building a tile system to display a grid of sprits in my game. I'm old school and used to just using pixels so a 32 pixel wide sprite is 32 pixels wide. so when I do this to create a strip of sprites
(a public method variable)public Sprite tile_plain; int i; for (i=0;i<25;i++) { GameObject tile = new GameObject(); tile.AddComponent(); tile.GetComponent().sprite = tile_plain; tile.transform.position = new Vector2((i * tile_plain.rect.width), 5f);

Then only one sprite element shows up on the screen and the others, while they are there are off the screen. To do this, you have to divide by the pixels per unit identified in the sprite.
(a public method variable)public Sprite tile_plain; int i; for (i=0;i<25;i++) { GameObject tile = new GameObject(); tile.AddComponent(); tile.GetComponent().sprite = tile_plain; tile.transform.position = new Vector2((i * tile_plain.rect.width)/tile_plain.pixelsPerUnit, 5f);
This was a good Stackoverflow post (Unity 4.3 - understanding positions and screen resolution, how to properly set position of object?) on the topic.

Monday, January 26, 2015

Surface Pro 3 and Visual Studio network conflict

I've recently been using a surface pro 3 for my development.  I love it as it works great on planes and when I travel.  I had been having one issue with the network on sleep, it never returned and I had to continually reset it.  I also found that sleep had been replaced by hibernate and it took 20 seconds to come back to life every time I left it alone for a few minutes.  It turned out that Visual Studio 2013 installs Hyper-V.

This was a great explanation of the problem.
http://winsupersite.com/mobile-devices/surface-pro-3-tip-hyper-v-vs-connected-standby

I don't plan on using Hyper-V so I can turn it off. Basically I just ran a command prompt as administrator and used this command.
bcdedit /set hypervisorlaunchtype off

as this blog is mostly for my own note taking purposes, I'm going to return here if I need to run it again or I need to turn it back on

Here is how I'm going to turn it back on.
bcdedit /set hypervisorlaunchtype auto

Friday, January 23, 2015

Kids name printing

I now it's not software development, but my three toddlers are learning how to write and I found this really cool name tracing site.




Thursday, January 22, 2015

Board games for programmers

If you have a group of programmers, RoboRally is a really really fund game.  You create little five card instructuctions for your robot and send him off. Invariably, people put in bugs or run into other robots and cause hilarious effects.  I've played this many times with developer teams and everyone has fun.


Wednesday, January 21, 2015

Theory of fun

I've been revisiting this book on game design and really enjoying it. It will really help you understand what makes fun games fun.


 
Also, this book does a good job of talking about violence in video games and what it actually means. I don't know if it was in the book or not, but I remember reading this and coming up with a defense of violence in video games. Not that I condone violence, I like peaceful people, but the fact is that you can only complain about game violence if you've never played this children's classic.

.

Tuesday, January 20, 2015

How to configure a Unity project to use VisualStudio

I started a new 2D project to try and see if I could port an old game I did in Java called EmPathMe (http://www.woodsgoods.com/gaw, Good luck getting it to run).

When I went to launch a script in VisualStudio it complained there wasn't a .sln file so I had to figure it out again. I'm leaving myself this post so I don't have to figure it out again.

You select Assets/Import Package/Custom Package...
 
Then you navigate to the location where the VisualStudio Tools for Unity were installed (http://unityvs.com/). I installed them in the default location C:\Program Files (x86)\Microsoft Visual Studio Tools for Unity\2013. The debug only works well with VisualStudioPro and I have no idea how I'm going to pay for the pro version once my  That's one reason I'm setting this up so I can get the touch code working well before my trial license expires

 
Choose all the package assets.

 
Now you will have the Visual Studio Tools menu and you can generate the project files so you don't see the error about not having a .sln file when launching the Unity editor.


Monday, January 19, 2015

Unity 2D Tutorials

These tutorials on the new Unity 2D features have been very helpful.

http://unity3d.com/learn/tutorials/modules/beginner/2d/2d-overview

http://unity3d.com/learn/tutorials/modules/beginner/2d/2d-overview

Thursday, January 15, 2015

Bing rewards

I've recently switched to Bing as my search engine.  I tried it because they have a rewards program and after a few months I really don't see any difference.

Try Bing rewards, it makes search just a little more fun.

Bing rewards is running a 1,000,000 reward points give away. Sign up here.

Wednesday, January 14, 2015

Unity script referencing



I wanted my keyboard input script to retrieve a value from a grid generator script so it knew how far to move one of my game objects. It took me a while to figure it out even though it's simple so I figure it's best to leave myself a bread crumb so I don't have to search so much next time.

//this is how you get a reference and value out of another script
scriptholder = GameObject.Find("EmptyScriptHolder");
GridManager script = scriptholder.GetComponent<GridManager>();
print("Grid gap =" + script.stepsize);


This shows how to get a reference to the actual script, in this case it's my EmptyObject I use to hold scripts that are not associated with actual GameObjects.  I call it EmptyScriptHolder.  I then get the reference to the GridManager script.  This is the actual type name of the script.  Within that script is a method variable called stepsize.  Overall it's very simple to get a value out of another script once you know how to do it.

This site was very helpful even though it's documentation from a few versions back.
http://docs.unity3d.com/412/Documentation/ScriptReference/index.Accessing_Other_Game_Objects.html

Tuesday, January 13, 2015

Hexagon grids

I'm not building a game that uses a hexagond grid right now, but have done it before and thinking about what it takes and found this great hexagon algorithm resource.

http://www.redblobgames.com/grids/hexagons/

Thursday, November 27, 2014

Unity touch debugging

I mentioned this in an earlier post, but thought I would go into more detail. I think this is  a great solution for testing touch input with Unity.

http://docs.unity3d.com/ScriptReference/Input.GetTouch.html

I'm using Visual Studio Pro 2013 to do this and I don't see a way to do it with Mono.  The only other way I've found is to use an actual device and connect a debugger to the device. This way I've found allows me to simply run a Visual Studio project directly on my touch device/development environment and test my touch code.

The first thing is to Build the project using File/Build and Run

 

 Select Windows Store app and then click Build or Build and Run.

 
The default location is to use the winout directory in the current Unity project. This worked well for me so I just used the default.
 
 
This creates a .sln file in that winout directory with all the necessary Visual Studio project files. Simply double click on the .sln file to launch Visual Studio Pro 2013.
 
 
 
I tested the project and one really nice thing is that the .cs files associated with behaviors in my project are actually linked back to the same files in my Unity project. So after making changes, they are already in my Unity project and I don't have to copy them back.
 
 
 
One thing to note is that this is only for script debugging. If I want to make changes to my layout or the models I've laid out in my Scene I will have to close Visual Studio, return to Unity to make the changes, then rebuild the winout project to work on my scripts again.  It's a small thing and this is still a much easier way to debug touch input than anything I've had to do before.

 

 

 

Wednesday, November 26, 2014

Surface Pro3 Print Screen Button

I usually use SnagIt to great effect and it is a primary tool for me.  I haven't installed it on my Surface yet and I was trying to figure out how to do a screen capture without it.  There isn't a Print Screen button.  The trick is pretty easy though. Press Fn-Space bar to capture the screen and Fn-Alt-Space to capture the active window.

http://answers.microsoft.com/en-us/surface/forum/surfpro-surfusingpro/print-screen/1aa98224-dacb-4770-863e-7e1fc77f9ac1

Tuesday, November 25, 2014

Blender UV Mapping

I have a love hate relationship with Blender.  Love that it's free and super powerful. Hate that I have to relearn how to do simple stuff every time I step away from it for a few months.  I will say that this time, the tenth that I've created a UV map on a mesh has been the easiest.

This site documentation really helped and even though I'm using 2.72b, and the documentation is for 2.6 it didn't seem to matter.

http://wiki.blender.org/index.php/Doc:2.6/Manual/Textures/Mapping/UV/Unwrapping

It might not seem like a lot, but this will be a good test model for the game mechanic I'm building.

 
This is the actual texture.

Friday, November 21, 2014

Surface Pro 3 and Unity for Windows Store

Recently received a Surface Pro 3 as a gift and really love it.  Was using a 5 year old Toshiba that was limping along even with the 128GB SSD. The SSD made it viable for quite a while, but it was really getting behind. Enjoying the new Surface. First loaded Unity and Visual Studio Express 2013.  It seems like I can finally develop on an airplane even if the seat in front of me is reclined and I'm next to a 300 pounded.  The laptop was just too bulky to use when someone was sitting next to me.

So far I spent a lot of time getting Unity and Visual Studio connected together using UnityVS. Not that I don't think Mono Develop isn't good enough, I do like that, but for some reason I'm drawn to Windows Store app development and need to use VS to build Unity apps for Windows Store.

It isn't well documented, but don't try to use Visual Studio Express with UnityVS.  It won't give you an error, but will only have a message that it can't find Visual Studio.   You have to install Visual Studio Pro to work with UnityVS.  I'm now running a 90 day trial and everything is working, but will have to write quick and decide if I want to upgrade my older version of Visual Studio Pro.  I spent a lot of time uninstalling and reinstalling UnityVS to get this to work. Many messages from Visual Studio that the project type wasn't recognized.  Once I installed Visual Studio Pro it still had the same message and I reinstalled UnityVS and everything worked well.

Another thing that led me in this direcetion was trying to figure out how to debug the touch screen interface in my Unity game. This seems like it will work well.  In Unity, you have to Build the solution for the Windows Store application which will create a new folder with a Visual Studio Windows Store project.  This has the C# scripts linked in it so you can debug and change those directly and debug your Windows Store application directly.  I could have done something similar and connected my Android tablet directly to Unity and ADB debugged on hardware, but this seems like a better way and I will be using that.

Tuesday, May 27, 2014

Datacap Documentation

I know this blog has been all about game development for many years, but my day job at IBM has been to create applications with Datacap so I'm going to add some Datacap posts.

It took a while to get used to Datacap and I highly recommend getting some training as the learning curve will go a lot faster.  Here are the best places to find Datacap documentation.

First, don't think this is clever.  Simply do a google search for Datacap Documentation.

The publication library is the first stop.
http://www-01.ibm.com/support/docview.wss?uid=swg27035774
Scroll down to the PDF documentation.  The best place to start for building Datacap applications is the Application Development using IBM Datacap Taskmaster.  I still spend a lot of time in that document.

The second place is the official infocenter documentation.
http://pic.dhe.ibm.com/infocenter/datacap/v8r1m0/index.jsp

The third place is the Proof Of Technology.  There is a lab book that goes with the Proof Of Technology the sales teams use.  This has great walk-throughs of the various tasks and can be very helpful to see how to do different tasks.

The fourth place is Developer Works.  There are great samples on many Datacap capabilities.
http://www.ibm.com/developerworks/data/library/techarticle/dm-ind-datacap-taskmaster/


Friday, May 24, 2013

Unity Ray debugging



Oh, this is a cool one I just noticed that again shows me the developer of Unity knows what they were doing.

function Update () {

    var ray : Ray = camera.ScreenPointToRay (Vector3(200,200,0));
    Debug.DrawRay (ray.origin, ray.direction * 10, Color.yellow);
}


How many times have I struggled to see where a ray or vector is doing in my game and written a ton of debug code (yes I did this with XNA) to draw a line where a ray was.  Unity gives me this as a simple Debug call.    Thank you thank you thank you.

Thursday, May 23, 2013

Learning Unity


Yeah, just what I need is another technology to learn. After a few years of teaching XNA (before that Torque, before that Java, before that J2ME and somewhere in there a quick detour for Second Life/LSL)  it seems like the world is shifting around me again. I did some quick Android apps last year, but still wanted another layer above me to allow me to release on multiple platforms. Unity keeps coming up in conversation and after a few quick tutorials and calls with a good friend who already climbed the learning curve I seem to be picking it up quickly. I had to drop it again for a few months as I got busy, but found some time recently to dig in again. So far pure joy. I've found a tool that was programmed by someone who understands.

A couple of really small things have made me really appreciate the person who created Unity. Meaning it's really well designed.

This guy gets it.
http://docs.unity3d.com/Documentation/ScriptReference/Mathf.Deg2Rad.html
This guy was an intern (as was most of the DirectX/XNA code base in my opinion).
http://msdn.microsoft.com/en-us/library/microsoft.xna.framework.mathhelper.toradians.aspx

This will cause some arguments, but why create a function/method (XNA),

float deg = MathHelper.ToRadians((float) 1.0);

and I don't know for sure that C# does create a stack frame or not for this call, but why even chance it.  I know it's only a few extra instructions and one extra push onto the stack (if that's what it does), but if I run that a lot it's bound to do a little extra processing that I might not want to have on a slower/older device. I grew up with limited memory and CPU so I still know that every instruction is still a percentage of your maximum throughput. The less you use, the more you can do. For short, every single instruction still counts.

When this most definitely doesn't have any extra over head. (there might be an offset instruction for the Mathf. part, but not a (possibly) full stack frame creation).

float deg = 1.0 * Mathf.DegToRad;

This and a couple of other small things, like the ability to create/change a model in Blender (free) and have it automatically be updated in my game is a huge bonus. I love Blender and have struggled to use it with every game engine and with unity it's automatic. That's huge.  I can use 3ds max fairly well, but that expensive license every year for the simple stuff I build just isn't affordable.

Anyway, loving Unity after a few weeks of working with it.  Have a fun little game mechanic coming along.