BitBuilder

A web based freehand tool for Bitfighter.

by Jordan Stevenson

HTML

<h1>BitBuilder</h1>


<h2>A Bitfighter Freehand Tool</h2>

<div id="pannel">
    <div id="canWrapper">
        <canvas id="myCanvas" width="500px" height="500px"></canvas>
    </div>
    <div id='interface'>
        <br/>
        <p id="mousepos">Mouse Position: 0.000, 0.000</p>
        <p>Hold down 'x' to move only in the the x direction. Hold down 'z' to move only in the y direction</p>
        <hr/>Workarea Size:
        <select id="scale" name="scale">
            <option value="1">1</option>
            <option value="2">2</option>
            <option value="3">3</option>
            <option value="4">4</option>
            <option value="5">5</option>
        </select>
        <br/>Object Type:
        <select id="obj" name="obj">
            <option value="wall">Line</option>
            <option value="health">Point</option>
            <option value="zone">Fill</option>
        </select>
        <hr/>
        <p>
            <button id="save">Save</button>
            <button id="clear">Clear</button>
        </p>
        <div id="wall" class="gui">
            <p>
                <button id="undo">Undo</button>
                <br/>Draw Style:
                <button id="style">Points</button>
                <br/><span id="help1">Left click to add a point in a wall.</span>

            </p>
            <p>Wall Width:
                <select id="size" name="size">
                    <option value="50">50</option>
                    <option value="40">40</option>
                    <option value="30">30</option>
                    <option value="20">20</option>
                    <option value="10">10</option>
                    <option value="0">0 (LineItem)</option>
                </select>
            </p>
        </div>
        <div id="health" class="gui" style="display:none;">
            <p>Object:
                <select id="pointType">
                    <option value="RepairItem">RepairItem</option>
                    <option...

CSS

body {
          margin: 0px;
          padding: 0px;
          background-color: #000;
      }
      h1, h2 {
          display: block;
          text-align:center;
          margin: 10px;
          color: white;
      }
      canvas {
          width:500px;
          background-color: #999;
      }
      #pannel {
          margin-top: 10px;
          margin-bottom: 10px;
          background-color: #777;
      }
      #canWrapper {
          float: left;
          margin: 10px;
      }
      #output {
          margin: 10px;
          border: 1px solid black;
          background-color: white;
      }
      #clear {
          clear: both;
      }

JavaScript

//BitBuilder!
var bitBuilder = bitBuilder || {};
bitBuilder.x = 0;
bitBuilder.y = 0;
bitBuilder.points = [];
bitBuilder.walls = [];
bitBuilder.lockx = false;
bitBuilder.locky = false;
bitBuilder.size = 50;
bitBuilder.image = new Image();
bitBuilder.freeDraw = false;
bitBuilder.selectedItem = 'wall';
bitBuilder.repairItem = 'http://i.imgur.com/OZaWaBm.png';
bitBuilder.energyItem = 'http://i.imgur.com/ttEWG7K.png';
var canvas = document.getElementById('myCanvas');
var context = canvas.getContext('2d');


//-------------------------------------------------------------------------------------
//event handlers

$(document).on('keydown', function (e) {
    if (e.which === 90) { // 'z' pressed
        bitBuilder.lockx = true;
    } else if (e.which === 88) { // 'x' pressed
        bitBuilder.locky = true;
    }
});

$(document).on('keyup', function (e) {
    if (e.which === 90) { // 'z' pressed
        bitBuilder.lockx = false;
    } else if (e.which === 88) { // 'x' pressed
        bitBuilder.locky = false;
    }
});

$('#save').click(function () {
    save();
    bitBuilder.points.length = 0;
});

$('#clear').click(function () {
    bitBuilder.points.length = 0;
    drawLines();
});

$('#undo').click(function () {
    if (bitBuilder.points.length > 0) {
        bitBuilder.points.length -= 1;

        bitBuilder.x = bitBuilder.points[bitBuilder.points.length - 1].x;
        bitBuilder.y = bitBuilder.points[bitBuilder.points.length - 1].y;

        drawLines();
    }
});

$('#style').click(function () {
    if (bitBuilder.freeDraw) {
        bitBuilder.freeDraw = false;
        $('#style').html('Points');
        $('#help1').html('Left click to add a point in a wall.');
    } else {
        bitBuilder.freeDraw = true;
        $('#style').html('Freehand');
        $('#help1').html('Left click to start a wall then click again to end.');
    }

    bitBuilder.points.length = 0;
    drawLines();
});

$('#scale').on('change', function (e) {
    bitBuilder.scale =...