remove hardcoded size and move point code to pixie

This commit is contained in:
Torsten Ruger 2015-07-14 19:59:21 +03:00
parent d47d8a9e2a
commit e51d6cb3fa
3 changed files with 33 additions and 43 deletions

View File

@ -11,15 +11,17 @@ class MainView
def initialize def initialize
@container = PIXI::Container.new @container = PIXI::Container.new
height = `window.innerHeight` height = `window.innerHeight` - 150
width = `window.innerWidth` width = `window.innerWidth` - 200
renderer = PIXI::WebGLRenderer.new( width - 100 , height - 100, {"backgroundColor" => 0xFFFFFF}) max = PIXI::Point.new width , height
puts "max #{max.x}, #{max.y}"
renderer = PIXI::WebGLRenderer.new( max.x , max.y , {"backgroundColor" => 0xFFFFFF})
body = Native(`window.document.body`) body = Native(`window.document.body`)
# bit of a hack as it assumes index's structure # bit of a hack as it assumes index's structure
html_con = body.firstElementChild html_con = body.firstElementChild
html_con.insertBefore renderer.view , html_con.lastElementChild html_con.insertBefore renderer.view , html_con.lastElementChild
registers = RegisterView.new(height - 150) registers = RegisterView.new(max)
@container.add_child registers @container.add_child registers
ParseTask.parse(1).then do |result| ParseTask.parse(1).then do |result|
@ -29,7 +31,7 @@ class MainView
end.fail do |error| end.fail do |error|
raise "Error: #{error}" raise "Error: #{error}"
end end
space = SpaceView.new space = SpaceView.new(max)
@container.add_child space @container.add_child space
animate = Proc.new do animate = Proc.new do

View File

@ -3,13 +3,13 @@ class RegisterView < PIXI::Container
@@register_names = (0..8).collect {|i| "r#{i}"} @@register_names = (0..8).collect {|i| "r#{i}"}
def initialize at_y def initialize max
super() super()
@registers = {} @registers = {}
x = 0 x = 0
@@register_names.each do |name| @@register_names.each do |name|
reg = PIXI::Text.new( name ) reg = PIXI::Text.new( name )
reg.position = PIXI::Point.new x , at_y reg.position = PIXI::Point.new x , max.x - 100
x += reg.width + 20 x += reg.width + 20
@registers[name] = reg @registers[name] = reg
self.add_child reg self.add_child reg

View File

@ -1,31 +1,12 @@
require "math"
PIXI::Point.class_eval do
alias_native :y=
def add point
self.x += point.x
self.x = 0 if self.x < 0
self.x = 1100 if self.x > 1100
self.y += point.y
self.y = 0 if self.y < 0
self.y = 550 if self.y > 550
end
def scale_by num
min = 0.001
num = min if num <= min
self.x = self.x / num
self.y = self.y / num
end
end
class SpaceView < PIXI::Graphics class SpaceView < PIXI::Graphics
include Sof::Util include Sof::Util
def initialize def initialize max
super() super()
@max = max
@max.x -= 50
@max.y -= 20
space = Virtual.machine.space space = Virtual.machine.space
# just a way to get the space into a list. objects is an id => occurence mapping. # just a way to get the space into a list. objects is an id => occurence mapping.
# occurence.object is the object # occurence.object is the object
@ -37,7 +18,11 @@ class SpaceView < PIXI::Graphics
@objects.each do |i , o| @objects.each do |i , o|
ob = o.object ob = o.object
next unless ob
next if basic?(ob) next if basic?(ob)
next if ob.class.name.include? "Binary"
next if ob.class.name.include? "Array"
puts "object #{ob.class.name}"
view = ObjectView.new ob view = ObjectView.new ob
@view_objects[i] = view @view_objects[i] = view
@ -65,19 +50,19 @@ class SpaceView < PIXI::Graphics
end end
end end
def force from , to def force from , to , offset = 0
dir_x = from.x - to.x dir_x = from.x - to.x
dir_x2 = (dir_x - 30 ) * (dir_x - 30 ) dir_x2 = (dir_x - offset ) * (dir_x - offset )
dir_y = from.y - to.y dir_y = from.y - to.y
dir_y2 =( dir_y - 30) * (dir_y - 30) dir_y2 =( dir_y - offset) * (dir_y - offset)
if( dir_x2 < 0.1 and dir_y2 < 0.1 ) if( dir_x2 < 0.1 and dir_y2 < 0.1 )
puts "Were close" puts "Were close"
dir_x = rand(10) dir_x = rand(3)
dir_y = rand(10) dir_y = rand(3)
end end
f = dir_x * dir_x + dir_y * dir_y f = dir_x * dir_x + dir_y * dir_y
f = f / 200
f = 0.01 if f < 0.01 f = 0.01 if f < 0.01
f = f / 500
#puts "force #{f}" #puts "force #{f}"
PIXI::Point.new( dir_x / f , dir_y / f) PIXI::Point.new( dir_x / f , dir_y / f)
end end
@ -88,13 +73,17 @@ class SpaceView < PIXI::Graphics
next if n == :id next if n == :id
next unless v.is_a? ObjectView next unless v.is_a? ObjectView
next unless v.is_parfait next unless v.is_parfait
view.position.add force( view.position , v.position ) view.position.add_and_bounce force( view.position , v.position , 20 ).scale_by(-1.5) , @max
end end
offset = 0.0 @view_objects.each do |ii , vv |
view.position.add force( view.position , PIXI::Point.new(view.position.x , -offset) ) next if i == ii
view.position.add force( view.position , PIXI::Point.new(-offset , view.position.y) ) view.position.add_and_bounce force( view.position , vv.position ) , @max
view.position.add force( view.position , PIXI::Point.new(view.position.x , 550 + offset) ) end
view.position.add force( view.position , PIXI::Point.new(1000 + offset , view.position.y) ) offset = 100
view.position.add_and_bounce force( view.position , view.position.at_x(-offset) ) , @max
view.position.add_and_bounce force( view.position , view.position.at_y(-offset) ) , @max
view.position.add_and_bounce force( view.position , view.position.at_y(@max.y + offset) ) , @max
view.position.add_and_bounce force( view.position , view.position.at_x(@max.x + offset) ) , @max
end end
end end
@ -140,7 +129,6 @@ class SpaceView < PIXI::Graphics
return true if ob.class.name == "String" return true if ob.class.name == "String"
return true if ob.class.name == "Numeric" return true if ob.class.name == "Numeric"
return true if ob.class.name == "Class" return true if ob.class.name == "Class"
puts "object #{ob.class.name}"
false false
end end
# and hash keys/values # and hash keys/values