78 lines
2.5 KiB
Python
78 lines
2.5 KiB
Python
import pyperclip
|
|
|
|
from draftsman.blueprintable import Blueprint, BlueprintBook
|
|
from draftsman.constants import Direction
|
|
from draftsman.entity import ConstantCombinator
|
|
|
|
# from draftsman.data import items
|
|
import draftsman.data.signals
|
|
from PIL import Image
|
|
|
|
blueprint = Blueprint()
|
|
blueprint.label = "bad apple"
|
|
blueprint.description = "bad apple."
|
|
blueprint.version = (1, 0) # 1.0
|
|
|
|
frame = Image.open("frame.png")
|
|
threshold = 40
|
|
signals = list(draftsman.data.signals.raw)[3:] # skip the three special signals
|
|
|
|
|
|
pixels = frame.load()
|
|
|
|
# Create the combinator for the single frame
|
|
frame_combinator = ConstantCombinator()
|
|
frame_combinator.tile_position = (-1, 0)
|
|
for x in range(frame.width):
|
|
column_mask = 0
|
|
for y in range(frame.height):
|
|
if pixels[x, y][0] > threshold:
|
|
column_mask |= 1 << y
|
|
frame_combinator.set_signal(index=x, signal=signals[x], count=column_mask)
|
|
blueprint.entities.append(frame_combinator)
|
|
|
|
pyperclip.copy(blueprint.to_string())
|
|
|
|
# Code for creating the column filters below.
|
|
|
|
# for x in range(frame.width):
|
|
# blueprint.entities.append( # this is our y-combinator :^)
|
|
# "arithmetic-combinator",
|
|
# id=f"filter-{x}",
|
|
# tile_position=[x, 2],
|
|
# direction=Direction.NORTH,
|
|
# control_behavior={
|
|
# "arithmetic_conditions": {
|
|
# "first_signal": signals[x],
|
|
# "operation": "AND",
|
|
# "second_signal": {"type": "virtual", "name": "signal-each"},
|
|
# "output_signal": {"type": "virtual", "name": "signal-each"},
|
|
# }
|
|
# },
|
|
# )
|
|
|
|
|
|
# arithmetic_conditions = {
|
|
# "first_signal": {"type": "fluid", "name": "steam"},
|
|
# "second_signal": {"type": "virtual", "name": "signal-each"},
|
|
# "operation": "AND",
|
|
# "output_signal": {"type": "virtual", "name": "signal-each"},
|
|
# "first_signal_networks": {"red": True, "green": False},
|
|
# "second_signal_networks": {"red": False, "green": True},
|
|
# }
|
|
|
|
# from draftsman.utils import JSON_to_string
|
|
|
|
# # directly hack in these conditions because this is a new feature and we don't care about the validation bullshit
|
|
# d = blueprint.to_dict()
|
|
# for entity in d["blueprint"]["entities"]:
|
|
# entity["control_behavior"]["arithmetic_conditions"][
|
|
# "first_signal_networks"
|
|
# ] = {"red": True, "green": False}
|
|
# entity["control_behavior"]["arithmetic_conditions"][
|
|
# "second_signal_networks"
|
|
# ] = {"red": False, "green": True}
|
|
|
|
# s = JSON_to_string(d)
|
|
# pyperclip.copy(str(s))
|