From 64207baa4563db90fa80ed23f3b8f41f96f0260d Mon Sep 17 00:00:00 2001
From: RealBadAngel <mk@realbadangel.pl>
Date: Thu, 09 May 2013 16:02:02 +0200
Subject: [PATCH] Add HV battery box

---
 technic/cnc.lua |  128 +++++++++++++++++++++++-------------------
 1 files changed, 70 insertions(+), 58 deletions(-)

diff --git a/technic/cnc.lua b/technic/cnc.lua
index 71b78b0..4976502 100644
--- a/technic/cnc.lua
+++ b/technic/cnc.lua
@@ -1,5 +1,11 @@
 -- Technic CNC v1.0 by kpo
 -- Based on the NonCubic Blocks MOD v1.4 by yves_de_beck
+
+-- Idea:
+--   Somehw have a tabbed/paged panel if the number of shapes should expand
+--   beyond what is available in the panel today.
+--   I could imagine some form of API allowing modders to come with their own node
+--   box definitions and easily stuff it in the this machine for production.
 local shape = {}
 local onesize_products = {
    slope                    = 2,
@@ -89,61 +95,9 @@
 
 local size     = 1;
 
-minetest.register_node("technic:cnc", {
-	description = "CNC Milling Machine",
-        tiles       = {"technic_cnc_top.png", "technic_cnc_bottom.png", "technic_cnc_side.png",
-		       "technic_cnc_side.png", "technic_cnc_side.png", "technic_cnc_front.png"},
-        drawtype    = "nodebox",
-        paramtype   = "light",
-        paramtype2  = "facedir",
-        node_box    = {
-	   type  = "fixed",
-	   fixed = {
-	      {-0.5, -0.5, -0.5, 0.5, 0.5, 0.5},
-	      
-	   },
-        },
-        selection_box = {
-	   type = "fixed",
-	   fixed = {-0.5, -0.5, -0.5, 0.5, 0.5, 0.5},
-        },
-        groups = {cracky=2},
-	legacy_facedir_simple = true,
-	technic_power_machine=1,
-	internal_EU_buffer=0;
-	internal_EU_buffer_size=5000;
-	cnc_time = 0;
-	src_time = 0; -- fixme
-	
-	on_construct = function(pos)
-			  local meta = minetest.env:get_meta(pos)
-			  meta:set_string("infotext", "CNC machine")
-			  meta:set_float("technic_power_machine", 1)
-			  meta:set_float("internal_EU_buffer", 0)
-			  meta:set_float("internal_EU_buffer_size", 5000)
-			  meta:set_string("formspec", cnc_formspec..cnc_power_formspec)
-			  meta:set_float("cnc_time", 0)
-
-			  local inv = meta:get_inventory()
-			  inv:set_size("src", 1)
-			  inv:set_size("dst", 4)
-
-			  meta:set_string("formspec", cnc_formspec)
-			  meta:set_string("infotext", "CNC Milling Machine")
-		       end,
-	
-	can_dig = function(pos,player)
-		     local meta = minetest.env:get_meta(pos);
-		     local inv = meta:get_inventory()
-		     if not inv:is_empty("src") or not inv:is_empty("dst") then
-			minetest.chat_send_player(player:get_player_name(), "CNC machine cannot be removed because it is not empty");
-			return false
-		     end
-		     return true
-		  end,
-
-
-	on_receive_fields = function(pos, formname, fields, sender)
+-- The form handler is declared here because we need it in both the inactive and active modes
+-- in order to be able to change programs wile it is running.
+local form_handler = function(pos, formname, fields, sender)
 			       -- REGISTER MILLING PROGRAMS AND OUTPUTS:
 			       ------------------------------------------
 			       -- Program for half/full size
@@ -178,22 +132,78 @@
 
 				  if onesize_products[k] ~= nil or (twosize_products[k] ~= nil and size==2) then
 				     meta:set_string("cnc_product",  inputname .. "_technic_cnc_" .. k)
+				     print(inputname .. "_technic_cnc_" .. k)
 				     break
 				  end
 
 				  if twosize_products[k] ~= nil and size==1 then
 				     meta:set_string("cnc_product",  inputname .. "_technic_cnc_" .. k .. "_double")
+				     print(inputname .. "_technic_cnc_" .. k .. "_double")
 				     break
 				  end
 			       end
 			       return
-			    end, -- callback function
+			    end -- callback function
+
+-- The actual block inactive state
+minetest.register_node("technic:cnc", {
+	description = "CNC Milling Machine",
+        tiles       = {"technic_cnc_top.png", "technic_cnc_bottom.png", "technic_cnc_side.png",
+		       "technic_cnc_side.png", "technic_cnc_side.png", "technic_cnc_front.png"},
+        drawtype    = "nodebox",
+        paramtype   = "light",
+        paramtype2  = "facedir",
+        node_box    = {
+	   type  = "fixed",
+	   fixed = {
+	      {-0.5, -0.5, -0.5, 0.5, 0.5, 0.5},
+	      
+	   },
+        },
+        selection_box = {
+	   type = "fixed",
+	   fixed = {-0.5, -0.5, -0.5, 0.5, 0.5, 0.5},
+        },
+        groups = {cracky=2},
+	legacy_facedir_simple = true,
+	technic_power_machine=1,
+	internal_EU_buffer=0;
+	internal_EU_buffer_size=5000;
+	cnc_time = 0;
+	src_time = 0; -- fixme
+	
+	on_construct = function(pos)
+			  local meta = minetest.env:get_meta(pos)
+			  meta:set_string("infotext", "CNC Machine Inactive")
+			  meta:set_float("technic_power_machine", 1)
+			  meta:set_float("internal_EU_buffer", 0)
+			  meta:set_float("internal_EU_buffer_size", 5000)
+			  meta:set_string("formspec", cnc_formspec..cnc_power_formspec)
+			  meta:set_float("cnc_time", 0)
+
+			  local inv = meta:get_inventory()
+			  inv:set_size("src", 1)
+			  inv:set_size("dst", 4)
+		       end,
+	
+	can_dig = function(pos,player)
+		     local meta = minetest.env:get_meta(pos);
+		     local inv = meta:get_inventory()
+		     if not inv:is_empty("src") or not inv:is_empty("dst") then
+			minetest.chat_send_player(player:get_player_name(), "CNC machine cannot be removed because it is not empty");
+			return false
+		     end
+		     return true
+		  end,
+
+	on_receive_fields = form_handler,
      })
 
+-- Active state block
 minetest.register_node("technic:cnc_active", {
 	description = "CNC Machine",
-        tiles       = {"technic_cnc_top.png", "technic_cnc_bottom.png", "technic_cnc_side.png",
-		       "technic_cnc_side.png", "technic_cnc_side.png", "technic_cnc_front_active.png"},
+        tiles       = {"technic_cnc_top_active.png", "technic_cnc_bottom.png", "technic_cnc_side.png",
+		       "technic_cnc_side.png",       "technic_cnc_side.png",   "technic_cnc_front_active.png"},
 	paramtype2 = "facedir",
 	groups = {cracky=2,not_in_creative_inventory=1},
 	legacy_facedir_simple = true,
@@ -206,8 +216,10 @@
 		     end
 		     return true
 		  end,
+	on_receive_fields = form_handler,
 })
 
+-- Action code performing the transformation
 minetest.register_abm(
    {
       nodenames = {"technic:cnc","technic:cnc_active"},

--
Gitblit v1.8.0