www.digitalmars.com         C & C++   DMDScript  

digitalmars.D - Laugh Test

reply Ruby The Roobster <michaeleverestc79 gmail.com> writes:
So I'm making some sort of library(it's not online yet).
In that Library there is a class called dextend.gameengine.shape. 
  In this class, I've made part of an update function(that the 
user of the library calls to update the status of the flag). Now, 
this update function has to check a lot of things(flags, certain 
variables, checks that are in these checks,etc.)  Here is the 
function so far(It probably has errors and bugs but I'll fix 
those when I actually finish the function):

void Update(shape* check_if_hit = null)
{
if(flags & Flags.Gravity)
{
if(check_if_hit is null)
     throw new Exception("If Flags.Gravity is true, then 
check_if_hit must point to a shape.");
if(this.move_speed) {
double[3] sorted_point = 
sortLowtoHigh!double([next_move.x,next_move.y,next_move.z]);
for(int i = 0;i < this.points.length;i++) {
     if(sorted_point[2] == this.next_move.x)
     {
         this.points[i].x += this.move_speed;
         this.next_move.x -= this.move_speed;
         this.points[i].y += this.move_speed(this.next_move.y / 
this.next_move.x);
         this.next_move.y -= this.move_speed(this.next_move.y / 
this.next_move.x);
         this.points[i].z += this.move_speed(this.next_move.z / 
this.next_move.x);
         this.next_move.z -= this.move_speed(this.next_move.z / 
this.next_move.x);
     }
     else if(sorted_point[2] == this.next_move.y)
     {
         this.points[i].x += this.move_speed(this.next_move.x / 
this.next_move.y);
         this.next_move.x -= this.move_speed(this.next_move.x / 
this.next_move.y);
         this.points[i].y += this.move_speed;
         this.next_move.y -= this.move_speed;
         this.points[i].z += this.move_speed(this.next_move.z / 
this.next_move.y);
         this.next_move.z -= this.move_speed(this.next_move.z / 
this.next_move.y);
     }
     else if(sorted_point[2] == this.next_move.z)
     {
         this.points[i].x += this.move_speed(this.next_move.x / 
this.next_move.z);
         this.next_move.x -= this.move_speed(this.next_move.x / 
this.next_move.z);
         this.points[i].y += this.move_speed(this.next_move.y / 
this.next_move.z);
         this.next_move.y -= this.move_speed(this.next_move.y / 
this.next_move.z);
         this.points[i].z += this.move_speed;
         this.next_move.z -= this.move_speed;
     }
}
if(this.next_move.x <= 0 || this.next_move.y <= 0 || 
this.next_move.z <= 0) {
     for(int i = 0;i < this.points.length;i++)
     {
         this.points[i].x += this.next_move.x;
         this.points[i].y += this.next_move.y;
         this.points[i].z += this.next_move.z;
     }
this.move_speed = 0;
}
}
}
}

There. Does that look confusing or what?
Sep 24 2020
next sibling parent =?UTF-8?Q?Ali_=c3=87ehreli?= <acehreli yahoo.com> writes:
On 9/24/20 12:15 PM, Ruby The Roobster wrote:
 So I'm making some sort of library(it's not online yet).
[...]
 There. Does that look confusing or what?
Just a friendly reminder that we have a "Learn" newsgroup[1] as well. I think some of your posts including this one would be more suitable there because many of us on that newsgroup are eagerly looking forward to posts like these. :) Ali [1] The forum interface: https://forum.dlang.org/group/learn
Sep 24 2020
prev sibling parent reply mipri <mipri minimaltype.com> writes:
On Thursday, 24 September 2020 at 19:15:00 UTC, Ruby The Roobster 
wrote:
 So I'm making some sort of library(it's not online yet).
 In that Library there is a class called 
 dextend.gameengine.shape.
  In this class, I've made part of an update function(that the 
 user of the library calls to update the status of the flag). 
 Now, this update function has to check a lot of things(flags, 
 certain variables, checks that are in these checks,etc.)  Here 
 is the function so far(It probably has errors and bugs but I'll 
 fix those when I actually finish the function):
...
 There. Does that look confusing or what?
There are parts of that I don't understand at all, like the sorted_point logic, and this.next_move, so that limits what I can suggest. But you might prefer writing this with an eye on https://dlang.org/spec/arrays.html#array-operations https://dlang.org/phobos/std_exception.html#enforce ex: struct Mobile { int[3] pos, delta; void step() { import std.exception : enforce; pos[] += delta[]; enforce(pos[] < [666, 666, 666], "example position violation"); } } unittest { import std.stdio : writeln; auto m1 = Mobile([0, 0, 0], [5, 0, -1]); m1.step; m1.step; m1.step; writeln(m1); } unittest { import std.exception : assertThrown; auto m1 = Mobile([0, 0, 0], [1000, 1000, 1000]); m1.step.assertThrown; // position violation }
Sep 24 2020
next sibling parent Ruby The Roobster <michaeleverestc79 gmail.com> writes:
On Thursday, 24 September 2020 at 19:54:40 UTC, mipri wrote:
 There are parts of that I don't understand at all, like the
 sorted_point logic, and this.next_move, so that limits what I
 can suggest.
To add a little context, this.next_move has to do with where the shape is moving: struct position{ double x; double y; double z; } class shape { //Bunch of member functions protected: position next_move; } sorted_point after the sortLowtoHigh!double() call is the member values of next_move sorted from lowest(sorted_point[0]) to highest(sorted_point[2])
Sep 24 2020
prev sibling next sibling parent Ruby The Roobster <michaeleverestc79 gmail.com> writes:
On Thursday, 24 September 2020 at 19:54:40 UTC, mipri wrote:
 There are parts of that I don't understand at all, like the
 sorted_point logic, and this.next_move, so that limits what I
 can suggest.

 But you might prefer writing this with an eye on

 https://dlang.org/spec/arrays.html#array-operations
 https://dlang.org/phobos/std_exception.html#enforce

 ex:

 struct Mobile {
     int[3] pos, delta;

     void step() {
         import std.exception : enforce;

         pos[] += delta[];
         enforce(pos[] < [666, 666, 666], "example position 
 violation");
     }
 }

 unittest {
     import std.stdio : writeln;

     auto m1 = Mobile([0, 0, 0], [5, 0, -1]);
     m1.step;
     m1.step;
     m1.step;
     writeln(m1);
 }

 unittest {
     import std.exception : assertThrown;

     auto m1 = Mobile([0, 0, 0], [1000, 1000, 1000]);
     m1.step.assertThrown; // position violation
 }
Even if I did something similar to what you suggested, the code would still be confusing, just because of how many checks have to be done in this function. I can't really improve the way the checks look. Also, implementing that would be a huge pain because I use position(the struct) like this(not with a lot of checks but the .x = .x,.y = .y,etc. thing) in basically any function involving position of the shape.
Sep 24 2020
prev sibling parent reply Ruby The Roobster <michaeleverestc79 gmail.com> writes:
On Thursday, 24 September 2020 at 19:54:40 UTC, mipri wrote:
[..]
What I can do is look for all for loops using shape.points(points is an array of positions) with something like: this.points[].member op someposition.member
Sep 24 2020
parent Ruby The Roobster <michaeleverestc79 gmail.com> writes:
On Thursday, 24 September 2020 at 20:56:46 UTC, Ruby The Roobster 
wrote:
 On Thursday, 24 September 2020 at 19:54:40 UTC, mipri wrote:
[..]
What I can do is look for all for loops using shape.points(points is an array of positions) with something like:
I meant 'replace with something like', not 'with something like'
Sep 24 2020