• Announcements

    • khawk

      Download the Game Design and Indie Game Marketing Freebook   07/19/17

      GameDev.net and CRC Press have teamed up to bring a free ebook of content curated from top titles published by CRC Press. The freebook, Practices of Game Design & Indie Game Marketing, includes chapters from The Art of Game Design: A Book of Lenses, A Practical Guide to Indie Game Marketing, and An Architectural Approach to Level Design. The GameDev.net FreeBook is relevant to game designers, developers, and those interested in learning more about the challenges in game development. We know game development can be a tough discipline and business, so we picked several chapters from CRC Press titles that we thought would be of interest to you, the GameDev.net audience, in your journey to design, develop, and market your next game. The free ebook is available through CRC Press by clicking here. The Curated Books The Art of Game Design: A Book of Lenses, Second Edition, by Jesse Schell Presents 100+ sets of questions, or different lenses, for viewing a game’s design, encompassing diverse fields such as psychology, architecture, music, film, software engineering, theme park design, mathematics, anthropology, and more. Written by one of the world's top game designers, this book describes the deepest and most fundamental principles of game design, demonstrating how tactics used in board, card, and athletic games also work in video games. It provides practical instruction on creating world-class games that will be played again and again. View it here. A Practical Guide to Indie Game Marketing, by Joel Dreskin Marketing is an essential but too frequently overlooked or minimized component of the release plan for indie games. A Practical Guide to Indie Game Marketing provides you with the tools needed to build visibility and sell your indie games. With special focus on those developers with small budgets and limited staff and resources, this book is packed with tangible recommendations and techniques that you can put to use immediately. As a seasoned professional of the indie game arena, author Joel Dreskin gives you insight into practical, real-world experiences of marketing numerous successful games and also provides stories of the failures. View it here. An Architectural Approach to Level Design This is one of the first books to integrate architectural and spatial design theory with the field of level design. The book presents architectural techniques and theories for level designers to use in their own work. It connects architecture and level design in different ways that address the practical elements of how designers construct space and the experiential elements of how and why humans interact with this space. Throughout the text, readers learn skills for spatial layout, evoking emotion through gamespaces, and creating better levels through architectural theory. View it here. Learn more and download the ebook by clicking here. Did you know? GameDev.net and CRC Press also recently teamed up to bring GDNet+ Members up to a 20% discount on all CRC Press books. Learn more about this and other benefits here.

FrozenSnake

Members
  • Content count

    34
  • Joined

  • Last visited

Community Reputation

222 Neutral

About FrozenSnake

  • Rank
    Member

Personal Information

  • Location
    Sweden
  1. 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. 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. 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. 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. 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. 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.   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. 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. 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. 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. 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. 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. 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. Thanks for all the suggestions!
  15. 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