241 lines
6.5 KiB
Python
241 lines
6.5 KiB
Python
import pygame
|
|
import os
|
|
import lib.constants as constants
|
|
from lib.gameregistry import GameRegistry
|
|
from lib.block import Block
|
|
from lib.inventory import Inventory
|
|
dy_blocks={}
|
|
|
|
def make_block(klass_name,name,clear=False,drops=False):
|
|
def blk_init():
|
|
pass
|
|
def init(self,x,y,screen):
|
|
Block.__init__(self,x,y,screen)
|
|
self.setTextureName(name)
|
|
self.clear=clear
|
|
self.drops=drops
|
|
self.unlocalisedName=name
|
|
attr_table={
|
|
"unlocalisedName":name,
|
|
"__init__":init,
|
|
"init":blk_init,
|
|
}
|
|
klass=type(klass_name,(Block,),attr_table)
|
|
GameRegistry.registerBlock(klass,name)
|
|
Block.registerTexture(name)
|
|
glob=globals()
|
|
glob[klass_name]=klass
|
|
global dy_blocks
|
|
dy_blocks[klass_name]=name
|
|
return klass
|
|
|
|
make_block("BlockStone","stone")
|
|
make_block("BlockTree","tree",False,("wood",8))
|
|
make_block("BlockGrass","grass",True)
|
|
make_block("BlockWood","wood")
|
|
make_block("BlockCoal","coal_ore")
|
|
GameRegistry.registerFuel("coal_ore",8)
|
|
make_block("BlockIron","iron_ore")
|
|
make_block("ItemIronIngot","iron_ingot",False)
|
|
#make_block("ItemCoal","coal",False)
|
|
# class BlockDoor(Block):
|
|
# unlocalisedName="door"
|
|
# openDoor=pygame.image.load(os.path.join("tiles","door_open.png"))
|
|
#
|
|
# @classmethod
|
|
# def init(cls):
|
|
# GameRegistry.registerBlock(cls,cls.unlocalisedName)
|
|
# Block.registerTexture(cls.unlocalisedName)
|
|
#
|
|
# def __init__(self,x,y,screen):
|
|
# Block.__init__(self,x,y,screen)
|
|
# self.setTextureName(BlockDoor.unlocalisedName)
|
|
# self.unlocalisedName=BlockDoor.unlocalisedName
|
|
#
|
|
# def interact(self,inv):
|
|
# self.clear=not self.clear
|
|
# pygame.mixer.Sound("door.ogg").play().set_volume(0.2)
|
|
#
|
|
# def getTexture(self):
|
|
# if self.clear:
|
|
# return BlockDoor.openDoor
|
|
# else:
|
|
# return False
|
|
#
|
|
# def interactData(self):
|
|
# return {"clear":self.clear}
|
|
#
|
|
# def loadData(self,data):
|
|
# self.clear=data["clear"]
|
|
#
|
|
# class BlockWorkbench(Block):
|
|
# unlocalisedName="workbench"
|
|
#
|
|
# @classmethod
|
|
# def init(cls):
|
|
# GameRegistry.registerBlock(cls,cls.unlocalisedName)
|
|
# Block.registerTexture(cls.unlocalisedName)
|
|
#
|
|
# def __init__(self,x,y,screen):
|
|
# Block.__init__(self,x,y,screen)
|
|
# self.setTextureName(BlockWorkbench.unlocalisedName)
|
|
# self.unlocalisedName=BlockWorkbench.unlocalisedName
|
|
# self.inv=Inventory()
|
|
#
|
|
# def interact(self,inv):
|
|
# selected=inv.selected
|
|
# if selected!="":
|
|
# inv.remove(selected)
|
|
# self.inv.addTile(selected,1)
|
|
# else:
|
|
# if self.inv.inv in GameRegistry.recipes.values():
|
|
# out=""
|
|
# for outp,reqs in GameRegistry.recipes.items():
|
|
# if self.inv.inv==reqs:
|
|
# out=outp
|
|
# break
|
|
# inv.addTile(out,1)
|
|
# self.inv.clear()
|
|
#
|
|
# def interactData(self):
|
|
# return {"inv":self.inv}
|
|
#
|
|
# def loadData(self,data):
|
|
# self.inv=data["inv"]
|
|
#
|
|
# class BlockFurnace(Block):
|
|
# unlocalisedName="furnace"
|
|
# frames=[]
|
|
#
|
|
# @classmethod
|
|
# def init(cls):
|
|
# GameRegistry.registerBlock(cls,cls.unlocalisedName)
|
|
# Block.registerTexture(cls.unlocalisedName)
|
|
# for i in range(3):
|
|
# path=os.path.join("animation",cls.unlocalisedName,"{}.png".format(i))
|
|
# img=pygame.image.load(path)
|
|
# cls.frames.append(img)
|
|
#
|
|
# def __init__(self,x,y,screen):
|
|
# Block.__init__(self,x,y,screen)
|
|
# self.setTextureName(BlockFurnace.unlocalisedName)
|
|
# self.unlocalisedName=BlockFurnace.unlocalisedName
|
|
# self.frameno=0
|
|
# self.forward=True
|
|
# self.burn=False
|
|
# self.count=0
|
|
# self.inp=""
|
|
# self.inp_amount=0
|
|
# self.outp=""
|
|
# self.outp_amount=0
|
|
# self.fuel=""
|
|
# self.fuel_amount=0
|
|
# self.fuel_num=0
|
|
# self.originator=True
|
|
#
|
|
# def interact(self,inv):
|
|
# sel=inv.selected
|
|
# if sel!="":
|
|
# if sel in GameRegistry.fuels.keys():
|
|
# if self.fuel!="" and sel!=self.fuel:
|
|
# return
|
|
# self.fuel=sel
|
|
# self.fuel_num=GameRegistry.fuels[sel]
|
|
# self.fuel_amount+=1
|
|
# if self.inp!="":
|
|
# if self.burn==False:
|
|
# self.fuel_amount-=1
|
|
# self.burn=True
|
|
# else:
|
|
# if self.inp!="" and sel!=self.inp:
|
|
# return
|
|
# if not sel in GameRegistry.smelting.keys():
|
|
# return
|
|
# self.inp_amount+=1
|
|
# self.inp=sel
|
|
# if self.burn==False and self.fuel!="":
|
|
# self.fuel_amount-=1
|
|
# self.burn=True
|
|
# inv.remove(sel)
|
|
# else:
|
|
# if self.outp!="":
|
|
# inv.addTile(self.outp,self.outp_amount)
|
|
# self.outp=""
|
|
# self.outp_amount=0
|
|
# self.originator=True
|
|
#
|
|
# def getTexture(self):
|
|
# if self.burn:
|
|
# self.count+=1
|
|
# if self.count==10:
|
|
# self.update()
|
|
# self.count=0
|
|
# img=BlockFurnace.frames[self.frameno]
|
|
# if self.forward:
|
|
# self.frameno+=1
|
|
# if self.frameno>2:
|
|
# self.frameno=1
|
|
# self.forward=False
|
|
# else:
|
|
# self.frameno-=1
|
|
# if self.frameno<0:
|
|
# self.frameno=1
|
|
# self.forward=True
|
|
# return img
|
|
# else:
|
|
# return False
|
|
# self.mp_upd=True
|
|
#
|
|
# def update(self):
|
|
# self.fuel_num-=1
|
|
# if self.inp=="":
|
|
# self.burn=False
|
|
# return
|
|
# if self.fuel_num<=0:
|
|
# if self.fuel_amount<=0:
|
|
# self.burn=False
|
|
# self.fuel=""
|
|
# return
|
|
# else:
|
|
# self.fuel_amount-=1
|
|
# self.fuel_num=GameRegistry.fuels[self.fuel]
|
|
# if self.inp!="":
|
|
# if self.inp in GameRegistry.smelting:
|
|
# self.inp_amount-=1
|
|
# self.outp=GameRegistry.smelting[self.inp]
|
|
# self.outp_amount+=1
|
|
# if self.inp_amount<=0:
|
|
# self.inp=""
|
|
# if self.originator:
|
|
# self.mp_upd=True
|
|
#
|
|
# def loadData(self,data):
|
|
# self.frameno=data["frameno"]
|
|
# self.forward=data["forward"]
|
|
# self.burn=data["burn"]
|
|
# self.count=data["count"]
|
|
# self.inp=data["inp"]
|
|
# self.inp_amount=data["inp_amount"]
|
|
# self.outp=data["outp"]
|
|
# self.outp_amount=data["outp_amount"]
|
|
# self.fuel=data["fuel"]
|
|
# self.fuel_amount=data["fuel_amount"]
|
|
# self.fuel_num=data["fuel_num"]
|
|
# self.originator=False
|
|
#
|
|
# def interactData(self):
|
|
# self.mp_upd=False
|
|
# return {
|
|
# "frameno":self.frameno,
|
|
# "forward":self.forward,
|
|
# "burn":self.burn,
|
|
# "count":self.count,
|
|
# "inp":self.inp,
|
|
# "inp_amount":self.inp_amount,
|
|
# "outp":self.outp,
|
|
# "outp_amount":self.outp_amount,
|
|
# "fuel":self.fuel,
|
|
# "fuel_amount":self.fuel_amount,
|
|
# "fuel_num":self.fuel_num
|
|
# }
|