Skip to content

Commit

Permalink
Merge branch 'master' of github.com:LogicalDash/LiSE
Browse files Browse the repository at this point in the history
  • Loading branch information
clayote committed Aug 27, 2015
2 parents 4ae3026 + 1b162a4 commit 4ae6666
Show file tree
Hide file tree
Showing 12 changed files with 136 additions and 77 deletions.
1 change: 1 addition & 0 deletions ELiDE/app.py
Original file line number Diff line number Diff line change
Expand Up @@ -196,6 +196,7 @@ def tog(*args):
store=self.engine.trigger,
toggle=toggler('funcs')
)
funcs.bind(data=rules.rulesview._trigger_update_builders)

self.select_character(
self.engine.character[
Expand Down
7 changes: 0 additions & 7 deletions ELiDE/board/pawn.py
Original file line number Diff line number Diff line change
Expand Up @@ -174,13 +174,6 @@ def on_touch_up(self, touch):
del self._unlistened
for spot in self.board.spot.values():
if self.collide_widget(spot) and spot.name != self.loc_name:
Logger.debug(
"pawn: {} will go from {} to {}".format(
self.name,
self.loc_name,
spot.name
)
)
new_spot = spot
break
else:
Expand Down
33 changes: 23 additions & 10 deletions ELiDE/board/spot.py
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,24 @@ def __init__(self, **kwargs):
del kwargs['place']
super().__init__(**kwargs)
self.bind(pos=self._trigger_upd_pawns_here)
self.bind(
size=self._trigger_upd_collider,
pos=self._trigger_upd_collider
)

def _upd_collider(self, *args):
rx = self.width / 2
ry = self.height / 2
if (
not hasattr(self.collider, 'pos') or
self.collider.pos != self.center or
self.collider.rx != rx or
self.collider.ry != ry
):
self.collider = CollideEllipse(
x=self.center_x, y=self.center_y, rx=rx, ry=ry
)
_trigger_upd_collider = trigger(_upd_collider)

def _get_pospawn_partial(self, pawn):
if pawn not in self._pospawn_partials:
Expand Down Expand Up @@ -95,8 +113,8 @@ def _upd_pos(self, *args):
Clock.schedule_once(self._upd_pos, 0)
return
self.pos = (
self.remote.get('_x', self.default_pos[0]) * self.board.width,
self.remote.get('_y', self.default_pos[1]) * self.board.height
int(self.remote.get('_x', self.default_pos[0]) * self.board.width),
int(self.remote.get('_y', self.default_pos[1]) * self.board.height)
)

def listen_pos(self, *args):
Expand Down Expand Up @@ -195,10 +213,7 @@ def _upd_pawns_here(self, *args):

def collide_point(self, x, y):
"""Check my collider."""
if not self.collider:
self.collider = CollideEllipse(
x=self.x, y=self.y, rx=self.width/2, ry=self.height/2
)
self._upd_collider()
return (x, y) in self.collider

def on_touch_move(self, touch):
Expand All @@ -211,14 +226,12 @@ def on_touch_move(self, touch):

def on_touch_up(self, touch):
"""Unset ``touchpos``"""
if not self.hit:
return False
if self._touchpos:
self.center = self._touchpos
self._touchpos = []
self._trigger_push_pos()
(x, y) = self.center
self.collider = CollideEllipse(
x=x, y=y, rx=self.width/2, ry=self.height/2
)
self.collided = False
self.hit = False

Expand Down
5 changes: 4 additions & 1 deletion ELiDE/funcsed.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,16 @@
from kivy.properties import (
NumericProperty,
ObjectProperty,
StringProperty
StringProperty,
ListProperty
)
from kivy.uix.screenmanager import Screen

class FuncsEdScreen(Screen):
funcs_ed = ObjectProperty()
table = StringProperty()
store = ObjectProperty()
data = ListProperty()
font_name = StringProperty('Roboto-Regular')
font_size = NumericProperty(12)
toggle = ObjectProperty()
Expand Down Expand Up @@ -64,6 +66,7 @@ def setport(self, active):
<FuncsEdScreen>:
name: 'funcs'
funcs_ed: funcs_ed
data: funcs_ed.data if funcs_ed else []
BoxLayout:
orientation: 'vertical'
BoxLayout:
Expand Down
77 changes: 43 additions & 34 deletions ELiDE/rulesview.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,11 @@
dbg = Logger.debug



def getname(o):
return o if isinstance(o, str) else o.__name__


class RuleButton(ListItemButton):
rule = ObjectProperty()

Expand Down Expand Up @@ -54,7 +59,7 @@ def __init__(self, **kwargs):
def on_adapter(self, *args):
self.adapter.bind(
on_selection_change=lambda inst:
self.set_rule(self.adapter.selection[0].rule)
self.set_rule(self.adapter.selection[0].rule if self.adapter.selection else None)
)

def on_rulebook(self, *args):
Expand All @@ -73,7 +78,7 @@ def set_rule(self, rule):
class RulesView(FloatLayout):
engine = ObjectProperty()
rulebook = ObjectProperty()
rule = ObjectProperty()
rule = ObjectProperty(allownone=True)

def _get_headline_text(self):
# This shows the entity whose rules you're editing if you
Expand Down Expand Up @@ -251,22 +256,9 @@ def finalize(self, *args):
size_hint=(None, None)
)
)
self.bind(rule=self._trigger_update_builders)

def on_rule(self, *args):
def getname(o):
return o if isinstance(o, str) else o.__name__

if self.rule is None:
dbg('RulesView: no rule')
return
for attrn in '_trigger_builder', '_prereq_builder', '_action_builder':
if not hasattr(self, attrn):
dbg('RulesView: no {}'.format(attrn))
Clock.schedule_once(self.on_rule, 0)
return
self._trigger_builder.clear_widgets()
self._prereq_builder.clear_widgets()
self._action_builder.clear_widgets()
def update_triggers(self, *args):
unused_triggers = [
Card(
ud={
Expand All @@ -285,20 +277,19 @@ def getname(o):
Card(
ud={
'type': 'trigger',
'funcname': getname(trigger),
'funcname': getname(trig),
},
headline_text=getname(trigger),
headline_text=getname(trig),
show_art=False,
midline_text='Trigger',
text=self.engine.trigger.plain(getname(trigger)),
text=self.engine.trigger.plain(getname(trig)),
)
for trigger in self.rule.triggers
for trig in self.rule.triggers
]
self._trigger_builder.unbind(decks=self._trigger_upd_unused_triggers)
self._trigger_builder.unbind(decks=self._trigger_upd_rule_triggers)
self._trigger_builder.decks = [used_triggers, unused_triggers]
self._trigger_builder.bind(decks=self._trigger_upd_rule_triggers)
self._trigger_builder.bind(decks=self._trigger_upd_unused_triggers)
_trigger_update_triggers = trigger(update_triggers)

def update_prereqs(self, *args):
unused_prereqs = [
Card(
ud={
Expand Down Expand Up @@ -326,11 +317,10 @@ def getname(o):
)
for prereq in self.rule.prereqs
]
self._prereq_builder.unbind(decks=self._trigger_upd_unused_prereqs)
self._prereq_builder.unbind(decks=self._trigger_upd_rule_prereqs)
self._prereq_builder.decks = [used_prereqs, unused_prereqs]
self._prereq_builder.bind(decks=self._trigger_upd_rule_prereqs)
self._prereq_builder.bind(decks=self._trigger_upd_unused_prereqs)
_trigger_update_prereqs = trigger(update_prereqs)

def update_actions(self, *args):
unused_actions = [
Card(
ud={
Expand Down Expand Up @@ -358,11 +348,27 @@ def getname(o):
)
for action in self.rule.actions
]
self._action_builder.unbind(decks=self._trigger_upd_rule_actions)
self._action_builder.unbind(decks=self._trigger_upd_unused_actions)
self._action_builder.decks = [used_actions, unused_actions]
self._action_builder.bind(decks=self._trigger_upd_rule_actions)
self._action_builder.bind(decks=self._trigger_upd_unused_actions)
_trigger_update_actions = trigger(update_actions)

def update_builders(self, *args):
for attrn in '_trigger_builder', '_prereq_builder', '_action_builder':
if not hasattr(self, attrn):
dbg('RulesView: no {}'.format(attrn))
Clock.schedule_once(self.on_rule, 0)
return
self._trigger_builder.clear_widgets()
self._prereq_builder.clear_widgets()
self._action_builder.clear_widgets()
if self.rule is None:
dbg('RulesView: no rule')
return
if hasattr(self, '_list'):
self._list.adapter.data = list(self._list.rulebook)
self.update_triggers()
self.update_prereqs()
self.update_actions()
_trigger_update_builders = trigger(update_builders)

def upd_rule_actions(self, *args):
actions = [
Expand Down Expand Up @@ -469,7 +475,10 @@ def new_rule(self, *args):
if self.new_rule_name in self.engine.rule:
# TODO: feedback to say you already have such a rule
return
self.rulebook.append(self.engine.rule.new_empty(self.new_rule_name))
new_rule = self.engine.rule.new_empty(self.new_rule_name)
assert(new_rule is not None)
self.rulebook.append(new_rule)
self.ids.rulesview.rule = new_rule
self.ids.rulename.text = ''


Expand Down
15 changes: 9 additions & 6 deletions ELiDE/screen.py
Original file line number Diff line number Diff line change
Expand Up @@ -262,7 +262,6 @@ def _get_selected_remote(self):
no entity is selected.
"""
Logger.debug('ELiDELayout: getting remote...')
if self.selection is None:
return self.character.stat
elif hasattr(self.selection, 'remote'):
Expand Down Expand Up @@ -310,11 +309,10 @@ def on_touch_down(self, touch):
spots = list(self.board.spots_at(*touch.pos))
if spots:
self.selection_candidates = spots
if self.selection in self.selection_candidates:
self.selection_candidates.remove(self.selection)
if self.portaladdbut.state == 'down':
self.origspot = self.selection_candidates.pop(0)
self.protodest = Dummy(
name="protodest",
pos=touch.pos,
size=(0, 0)
)
Expand Down Expand Up @@ -351,13 +349,18 @@ def on_touch_move(self, touch):
"""
touch.push()
touch.apply_transform_2d(self.ids.boardview.to_local)
if self.selection:
if self.selection in self.selection_candidates:
self.selection_candidates.remove(self.selection)
if self.selection and not self.selection_candidates:
self.keep_selection = True
self.selection.dispatch('on_touch_move', touch)
if self.selection_candidates:
elif self.selection_candidates:
for cand in self.selection_candidates:
if cand.collide_point(*touch.pos):
cand.hit = True
if hasattr(self.selection, 'selected'):
self.selection.selected = False
self.selection = cand
cand.hit = cand.selected = True
touch.grab(cand)
cand.dispatch('on_touch_move', touch)
touch.pop()
Expand Down
Loading

0 comments on commit 4ae6666

Please sign in to comment.