Jump to content
• Advertisement

# FrozenSnake

Member

34

222 Neutral

• Rank
Member
1. ## Operator overloading +=, -=, *=

I have made these two, guess I need a MyVector version of the second one public static MyVector operator*(MyVector a, MyVector b) { return (new MyVector(a.mX * b.mX, a.mY * b.mY, a.mZ * b.mZ)); } public static float operator*(MyVector a, float b) { return (a.mX * b + a.mY * b + a.mZ * b); } // Edit public static MyVector operator *(MyVector a, float b)        { return (new MyVector(a.mX * b, a.mY * b, a.mZ * b)); } // Edit     *Edit* now that Calc works too. Hopefully all the operators will work from now on If you see anything I do that should be done a different way feel free to point it out.
2. ## Operator overloading +=, -=, *=

I do stuff like this in the C++ version: void Body::AddForce(const MyVector& x) { mForce += x; } void Body::SetVelocity(const sf::Vector2f& vec) { mPrevPos = mPos - vec * mFrames; } void Body::Update() { if (mID == 0) mForce.SetZ(0); if (mCanMove) { mForce.SetZ(0); mBodyShape.setPosition(mPos); MyVector tempPos1(mPos); MyVector tempPos2(mPrevPos); MyVector calc = (tempPos1 * 2.0f - tempPos2 + mForce * mInvertedMass * (mFrames * mFrames)); mPrevPos = mPos; mPos.x = calc.GetX(); mPos.y = calc.GetY(); } mWindow.draw(mBodyShape); DrawTrace(); ClearForce(); } At the moment I can't get this code MyVector calc = (tempPos1 * 2.0f - tempPos2 + mForce * mInvertedMass * (mFrames * mFrames)); To work in the C# version the "tempPos1 * 2.0f - tempPos2" part gives me This will probably complain about something else in this line if I fix the first problem. But this is quite confusing.   The operator overloading code looks like this: public static MyVector operator-(MyVector a, MyVector b) { a.mX -= b.mX; a.mY -= b.mY; a.mZ -= b.mZ; return a; } public static float operator -(MyVector a, float b) { return (a.mX - b + a.mY - b + a.mZ - b); } I am doing a solar system simulation and it works like a charm in C++ and I am trying to translate it to C# and mainly the operators are acting up :/   *EDIT* Currently rewriting the operators to this format: public static MyVector operator x(MyVector a, MyVector b) { return (new MyVector(a.mX x b.mX, a.mY x b.mY, a.mZ x b.mZ)); }
3. ## Operator overloading +=, -=, *=

No, your example will: - Create a new vector (likely with mX=0,mY=0,mZ=0). - Add vec to the new vector. - Won't return a value, so all the work it's doing will be lost. In C#, all overloaded operators have to be static and have to return a value (they never modify a "this" object like you might do in C++).   I have done this now         public static MyVector operator+(MyVector a, MyVector b)         {             a.mX += b.mX;             a.mY += b.mY;             a.mZ += b.mZ;             return a;         } Hopefully that works better :)
4. ## Operator overloading +=, -=, *=

This makes me a bit confused:  public static void operator+(MyVector vec)         {             MyVector mv = new MyVector();             mv.mX += vec.mX;             mv.mY += vec.mY;             mv.mZ += vec.mZ;         } Will it keep the value from mForce in this example. So I actually add 'x' to w/e value mForce already have or will the "new MyVector()" mess things up? mForce = mForce + x; *EDIT BELOW* Thanks for clarifying! Will my example above work as it should or should I alter that as well?
5. ## Operator overloading +=, -=, *=

I'll take a look and see if I can figure it out.   That is because C# silently converts the code: x += y; into the code: x = x + y; Part of that is to help avoid the beginner's c++ bug of forgetting to implement all the corresponding operators, or the more nuanced bug of having slightly different behavior between the two operators. You just implement your addition operator, subtraction operator, and the rest. The +=, -=, *=, /=, %=, &=, |=, ^=, and other "op plus assign" operators will use your overloaded operation.   So I should do something like the code below to get the same behavior? I haven't been poking around in C# before so a lot of this is new to me. public static MyVector operator +(MyVector vec) { MyVector mv = new MyVector(); return (new MyVector(mv.mX + vec.mX, mv.mY + vec.mY, mv.mZ + vec.mZ)); } // This doesn't work, Type 'SFMLapp.MyVector' already defines a member called 'op_UnaryPlus' with the same parameter types public static void operator+(MyVector vec) // += in the c++ code { MyVector mv = new MyVector(); mv.mX += vec.mX; mv.mY += vec.mY; mv.mZ += vec.mZ; }
6. ## Operator overloading +=, -=, *=

I read on the MSDN that overloading += doesn't work so I should use + instead. But my problem is I already have it overloaded. I am trying to convert some of my c++ code to c# to make the same program in C#.   Here is my C++ code MyVector operator+(const MyVector& vec) { return MyVector(mX + vec.mX, mY + vec.mY, mZ + vec.mZ); }   void operator += (const MyVector& vec) { mX += vec.mX; mY += vec.mY; mZ += vec.mZ; }   MyVector operator-(const MyVector& vec) { return MyVector(mX - vec.mX, mY - vec.mY, mZ - vec.mZ); }   MyVector operator-() {   return MyVector(-mX, -mY, -mY); }   void operator -=(const MyVector& vec) { mX -= vec.mX; mY -= vec.mY; mZ -= vec.mZ; }   float operator*(const MyVector& vec) { return (mX * vec.mX + mY * vec.mY + mZ * vec.mZ); }   MyVector operator*(const float& f) { return MyVector(mX * f, mY * f, mZ * f); }   void operator*=(const float& f) { mX *= f; mY *= f; mZ *= f; } As you can see I do different stuff on the + and += for example. Is there any good way to get this to work in C#?
7. ## Hierarchical finite state machine

You are doing this as an assignment, right? Your class has no text about it?   The text we have about the hierarchical is:   After this he talks about a global state, which according to him didn't meet the criteria because all states are substates to the global one. So I decided to place Two other states inside AgentIsTierd but I do not know is I did the thing he asks for or something else entirely.   So we have 4 lines of text, but it doesn't really show anything that is helpful for me to understand how to implement this. This is why I looked elsewhere to find some more information but I am still unsure about if it meet the criteria, and I would prefer to get some more information about HFSM and how it can be implemented.
8. ## Hierarchical finite state machine

Thanks for the reply ApochPiQ, do you know any good articles I can read to some more understanding? The article I checked out was this. I had a hard time finding any text about this topic.
9. ## Hierarchical finite state machine

Hello! I am currently working on a FSM for a project at my university. But I have problem with figuring out if I meet the criteria for this program. I need to have a state that have sub-states (Hierarchical states). This code is about an AI I know, but the topic itself I feel is more related to general programming.   For example Combat leads to Shooting OR TakingCover. And no other state except for Combat should be able to reach these two states directly they need to go through Combat. This is how I have interpreted Hierarchical Finite State Machine anyway, so I would really like to have some feedback on this. It is not the most pretty piece of code out there so I apologize in advance. I also made a bitbucket repository if someone feel they need to dig deeper to help me, I do not wanna bloat this post with all the code. This is the code I think is the most important one and I only included the rest for people that feel they wanna study the code more.   TLDR; Is the code below hierarchical or have I misinterpreted something?   Here is my PonyStates.h file #include "State.h" class Pony; class AgentIsHungry : public State { public: static AgentIsHungry* Instance (); virtual void EnterState (Pony* p); virtual void ExitState (Pony* p); virtual void ExecuteState (Pony* p); private: // Copy construtor and assignment. AgentIsHungry() {} AgentIsHungry (const AgentIsHungry&); AgentIsHungry& operator= (const AgentIsHungry&); }; class AgentIsWorking : public State { public: static AgentIsWorking* Instance(); virtual void EnterState(Pony* p); virtual void ExitState(Pony* p); virtual void ExecuteState(Pony* p); private: AgentIsWorking() { } // Copy construtor and assignment. AgentIsWorking(const AgentIsWorking&); AgentIsWorking& operator= (const AgentIsWorking&); }; class AgentIsTierd : public State { public: static AgentIsTierd* Instance (); virtual void EnterState (Pony* p); virtual void ExitState (Pony* p); virtual void ExecuteState(Pony* p); AgentIsTierd() { } private: // Copy construtor and assignment. AgentIsTierd(const AgentIsTierd&); AgentIsTierd& operator= (const AgentIsTierd&); }; ////////////////////////////////////////////////////////////////////////////////////////////////////////// class AgentIsHavingANightmare : public AgentIsTierd { public: static AgentIsHavingANightmare* Instance(); virtual void EnterState(Pony* p); virtual void ExitState(Pony* p); virtual void ExecuteState(Pony* p); private: // Copy construtor and assignment. AgentIsHavingANightmare() {} AgentIsHavingANightmare(const AgentIsHavingANightmare&); AgentIsHavingANightmare& operator= (const AgentIsHavingANightmare&); }; class AgentIsHavingADream : public AgentIsTierd { public: static AgentIsHavingADream* Instance(); virtual void EnterState(Pony* p); virtual void ExitState(Pony* p); virtual void ExecuteState(Pony* p); private: // Copy construtor and assignment. AgentIsHavingADream() {} AgentIsHavingADream(const AgentIsHavingADream&); AgentIsHavingADream& operator= (const AgentIsHavingADream&); }; ////////////////////////////////////////////////////////////////////////////////////////////////////////// Here is my PonyStates.cpp file //////////////////////////////// ///////// AgentIsTierd ///////// //////////////////////////////// AgentIsTierd* AgentIsTierd::Instance() { static AgentIsTierd instance; return &instance; } void AgentIsTierd::EnterState(Pony* p) { if (p->WhereAmI() != Bedroom) { std::cout << GetName(p->GetID()) << " is walking to the bedroom; it is time to sleep.\n"; p->ChangeRoom(Bedroom); } } void AgentIsTierd::ExitState(Pony* p) { std::cout << GetName(p->GetID()) << " is now leaving the bedroom.\n"; } void AgentIsTierd::ExecuteState(Pony *p) { if (p->IsTierd()) { std::cout << GetName(p->GetID()) << " wishes to sleep. " << GetName(p->GetID()) << " lay down in bed to sleep! Zzz...\n"; if ((rand() % 100) % 2) p->ChangeState(AgentIsHavingADream::Instance()); else p->ChangeState(AgentIsHavingANightmare::Instance()); } else { std::cout << GetName(p->GetID()) << " wakes up refreshed! Time to go to work!\n"; p->ChangeState(AgentIsWorking::Instance()); } } ////////////////////////////////////////////////////////////////////////////////////////////////////////// // Good dream AgentIsHavingADream* AgentIsHavingADream::Instance() { static AgentIsHavingADream instance; return &instance; } void AgentIsHavingADream::EnterState(Pony* p) { // Already in bedrom. } void AgentIsHavingADream::ExitState(Pony* p) { std::cout << "\t" << GetName(p->GetID()) << " had a nice dream and is feeling refreshed.\n"; //p->ChangeState(AgentIsHungry::Instance()); } void AgentIsHavingADream::ExecuteState(Pony* p) { p->Sleep(); p->ChangeState(AgentIsHungry::Instance()); } // Nightmare AgentIsHavingANightmare* AgentIsHavingANightmare::Instance() { static AgentIsHavingANightmare instance; return &instance; } void AgentIsHavingANightmare::EnterState(Pony* p) { // Already in bedrom. } void AgentIsHavingANightmare::ExitState(Pony* p) { std::cout << "\t" << GetName(p->GetID()) << " had a nightmare and didn't sleep very well.\n"; } void AgentIsHavingANightmare::ExecuteState(Pony* p) { p->BadSleep(); p->ChangeState(AgentIsHungry::Instance()); }
10. ## Pros and Cons with Specular and Diffuse lighting

Thanks for the really nice reply!    The report is for a course called "Advanced Computer Graphics" at my university. The teacher is very "flummig" (it translate to dopey), he doesn't give a straight answer when someone asks a question about the report, but the text say: "Talk about the pros and cons with specular lighting Talk about the pros and cons with diffuse lighting".
11. ## Pros and Cons with Specular and Diffuse lighting

Thanks for the reply! One of the requirement on the report is to write pros/cons about specular and diffuse separate, I find it really hard :/ I'll try and write something and hope it works!
12. ## Pros and Cons with Specular and Diffuse lighting

First, I hope I post in the right forum for this question!   I am working on a shader in RenderMonkey and the shader is complete, so now I am writing a small report on the shader. My problem here is that I can't find any sources to read about pros and cons about "Specular light" and "Diffuse light". I have googled but I mainly find sources that is about what specular/diffuse light is, and these sources do not talk about the pros of each light model.   I have also checked in my course books to for some clues but I cannot find any. Do anyone here have any suggestion about where I can read about the pros and cons of these to light models?    Best regards!
13. ## Problem with shader in RenderMonkey

I hope this is in the correct forum, since I am programming the shader I decided to put the topic in here.    I have been working on a shader in RenderMonkey on my desktop computer, and when I transferred the rfx-file to my laptop to continue the work in school I get two error messages that I do not get at home.     This is the Fragment program // Ljus 1 uniform vec3 uLight1Position; uniform float uLight1DiffIntent, Light1SpecIntent; float uLight1RimIntent; // Ljus 2 uniform vec3 uLight2Position; uniform float uLight2DiffIntent, uLight2SpecIntent, uLight2RimIntent; varying vec3 uLight1Color, uDiffuseColor, vColor, vNormal, vLightDir, vEyeVec; varying float uLight1Intent, luminosity1, luminosity2, uLight1RimLight, uOpacity; varying vec2 vTexCoord; uniform sampler2D baseMap; void main(void) { vec3 N = normalize(vNormal); vec3 L = normalize(vLightDir); vec3 E = normalize(vEyeVec); vec3 H = normalize(-L + E); // Lambert Diffuse Lighting. float diffuse = clamp(dot(N, -L), 0.0, 1.0); // Blinn Specular float specular = pow(max(dot(N, H), 0.0), 120.0); //float diffuse = dot(N, -L); // Rim Lighting. float rimLight = smoothstep(0.5, 0.05, dot(N,E));// * (uLight1RimIntent + uLight2RimIntent); specular += rimLight; // Diffuse Attenuation specular *= diffuse; vec3 base = texture2D( baseMap, vTexCoord ).xyz; // Lägg till kantljus till den diffusa komponenten. //vec4 finalColor = vec4(diffuse + rimLight, rimLight, rimLight, uLight1Intent) / (length(uLight1Position) * 0.02); vec3 vColor = mix(uDiffuseColor.xyz, base, uOpacity);// diffuse + finalColor; vec4 finalColor = vec4(base * diffuse, 2.0); gl_FragColor = vec4(vColor * finalColor + rimLight, 0.5); //gl_FragColor = finalColor; } The Vertex Program uniform vec3 uLight1Position; uniform vec3 uLight2Position; uniform vec3 uEyePosition; varying vec3 vColor; varying vec3 vLightDir; varying vec3 vNormal; varying vec3 vEyeVec, uOpacity, uDiffuseColor; varying float uLight1Intent, luminosity1, luminosity2; varying vec2 vTexCoord; void main( void ) { vec3 N = normalize(vNormal); vec3 L = normalize(vLightDir); vec4 vertex = gl_ModelViewProjectionMatrix * gl_Vertex; gl_Position = vertex; uLight1Intent = distance(gl_Position.xyz, uLight1Position.xyz); //uLight1RimIntent = distance(gl_Position.xyz, uLight1Position.xyz); luminosity1 = smoothstep(120, 0, uLight1Intent); vLightDir = -vec3(gl_ModelViewMatrix * vec4(uLight1Position, 0.0)); vNormal = gl_NormalMatrix * gl_Normal; vEyeVec = -vec3(gl_ModelViewMatrix * gl_Vertex); vTexCoord = vec2(gl_MultiTexCoord0); //float diffuse = dot(N, -L) * luminosity1; //vColor=vec3(diffuse,0.5,0.3); } I use the exact same rfx file (the exact same code) on the two different computers, I tried it in school as well and the same problem is there as well. We just started to work with hardware shaders so I dont know how rendermonkey work and why this is happening. It only work at home, all the files are the same on the different systems. Anyone that has any idea what I can try to get this to work?
14. ## Who to follow on Twitter?

Thanks for all the suggestions!
15. ## Who to follow on Twitter?

I do not know where this post should be posted to be under the correct category so I decided to place it here and hope for the best! I am a student at the university of Skövde in Sweden and I wish to follow some people on twitter that is relevant to my future line of work (game development). The type of people I want to follow are well known programmers, designers, artists, etc, so if anyone can help me find some of these people it would be great! I hope you guys understand what I am asking for, my English is not the best one out here! Best regards, Kim
• Advertisement
×

## Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

GameDev.net is your game development community. Create an account for your GameDev Portfolio and participate in the largest developer community in the games industry.

Sign me up!