Browse Source

Added Vec2.Within and maybe found a bug

I'm not sure why, but our main.go doesn't save the change to our
User.Loc ... Translate works, but not Assign? Huh?
Apollo 10 tháng trước cách đây
mục cha
commit
67b165ee67
2 tập tin đã thay đổi với 44 bổ sung8 xóa
  1. 17 2
      main.go
  2. 27 6
      vec2.go

+ 17 - 2
main.go

@@ -1,12 +1,15 @@
 package main
 
-import "fmt"
+import (
+	"fmt"
+	"path"
+)
 
 func main() {
 	// The UserDB would be run on the server
 	// But since most/100% of this is examples, we'll setup one up
 	db := &UserDB{}
-	err := db.Open("test_users.db3")
+	err := db.Open(path.Join("test_data", "test_users.db3"))
 	if err != nil {
 		fmt.Println("Err:", err)
 		return
@@ -38,4 +41,16 @@ func main() {
 	} else {
 		fmt.Printf("Yay, %s has logged in\r\n", dummy.Name)
 	}
+	fmt.Printf("%s is at %s\r\n", dummy.Name, dummy.Loc.String())
+	r := dummy.Loc.Assign(0, 0)
+	if r == nil {
+		fmt.Println("Assign returns nil?")
+	} else {
+		fmt.Printf("Now %s\r\n", r.String())
+	}
+	err = db.SaveUser(dummy)
+	if err != nil {
+		fmt.Println("Err:", err)
+		return
+	}
 }

+ 27 - 6
vec2.go

@@ -164,9 +164,20 @@ func SortVec2(v1, v2 *Vec2) (*Vec2, *Vec2) {
 	return v1, v2
 }
 
+func (v *Vec2) Within(v1, v2 *Vec2) bool {
+	if v == nil || v1 == nil || v2 == nil {
+		return false
+	}
+	if v1.EqualTo(v2) && !v.EqualTo(v1) {
+		return false
+	}
+	v1, v2 = SortVec2(v1, v2)
+	return v.GreaterThan(v1) && v.LessThan(v2)
+}
+
 func (v *Vec2) Distance(axis ...int64) int64 {
 	if v == nil {
-		return 0
+		return -1
 	}
 	if len(axis) == 0 {
 		return v.X + v.Y
@@ -194,11 +205,8 @@ func (v *Vec2) Distance(axis ...int64) int64 {
 }
 
 func (v *Vec2) DistanceTo(o *Vec2) int64 {
-	if v == nil {
-		return 0
-	}
-	if o == nil {
-		return v.Distance()
+	if v == nil || o == nil {
+		return -1
 	}
 	x := v.X - o.X
 	y := v.Y - o.Y
@@ -224,6 +232,19 @@ func (v *Vec2) Abs() *Vec2 {
 	return v
 }
 
+func (v *Vec2) NegAbs() *Vec2 {
+	if v == nil {
+		return nil
+	}
+	if v.X > 0 {
+		v.X = -v.X
+	}
+	if v.Y > 0 {
+		v.Y = -v.Y
+	}
+	return v
+}
+
 func (v *Vec2) Negate() *Vec2 {
 	if v == nil {
 		return nil