Jump to content

tipforeveryone

Members
  • Content Count

    363
  • Joined

  • Last visited

Posts posted by tipforeveryone


  1. 9 minutes ago, Josh said:

    There is nothing I see there that would cause any slowdown in C++ or even in Lua, with 20 enemies.

    Hmm.. I found out the problem is not Time functions stuff, it is Point() and AllignToAxis() which I used to make character model turn to player position. are they expensive ?


  2. Situation: I have 20 enemy characters in a map. 

    Goal: Everytime I fire a weapon, some of enemy who are in range from my position can hear and reaction after a small period of time (ex: 2 seconds - 2000ms)

    Current solution:

    • Each fire shot calls a function Gun_Sound(), this function will scan all enemy character and if in range, call character's function Sound_Reaction()
    for (auto it = enemyList.begin(); it != enemyList.end(); it++){
      if ((*it)->GetDistance(myPosition) < range){
        (*it)->Sound_Reaction();
        (*it)->reactionActive = true;
        (*it)->timeMark = Time::GetCurrent();
      }
    }
    • To simulate "reaction" feature of character, I use this popular method
    //This function is put in UpdateWorld() of each Character Actor Class
    void Character::Sound_Reaction(){
      if (reactionActive){
        if (Time::GetCurrent() - timeMark > reactionDuration){ //reactionDuration can be 2000 for example
          reactionActive = false; //stop and finish reaction process
          //Do some code
        }
      }
    }

    Problem: iterating through characterList each shot is ok, but each time I fire weapon, that Sound_Reaction() with Time calculation stuff drops my FPS dramaticaly. As my expectation, I don't think it can make FPS worse like this.

    Questions:

    1. Is there any better solution to scan enemy in range ? I wonder if I have more enemy (50?), must I iterate through all of them each time I shoot to collect in-range one?
    2. Is there any better solution for character reaction ? depend on time like I need

  3. I use ifstream to read a file which I used to save some configuration data

    ifstream weaponData("Data/Weapons.dat");
    	while (weaponData >> configVariable1 >> configVariable2 > ...){
        	//Some code
    	}

    I included *.dat files in to publish process and I got them in data.zip succesfully.

    But it seems published game can not read those files. But if I create a same folder structure outside zipped package, my game can read it normally

    How can I use ifstream to read files in zipped package ?


  4. I have this code

    std::vector<Texture*> spriteSequences;
    for (int i = 1; i <= 20; i++)
    {
    	Texture* texture = nullptr;
    	texture = Texture::Load(folderPath + "/" + String(i) + ".tex");
    	spriteSequences.push_back(texture);
    }

    in Destructor of my class

    MyClass::~MyClass()
    {
      delete[] spriteSequences; //this is not working
    }

    How can I delete a vector of Pointer ?


  5. I created my project in cpp from scratch, and here is the code I used in main.cpp

    #include "Leadwerks.h"
    #include "GameControl.h"
    using namespace Leadwerks;
    
    int main()
    {	
    	iVec2 gfxmode = System::GetGraphicsMode(System::CountGraphicsModes() - 1);
    	gfxmode.x = Math::Min(700, gfxmode.x);
    	gfxmode.y = Math::Round(gfxmode.x * 9 / 16);
    
    	Window* window = Window::Create("CSCDVMP cpp", 600, 600, gfxmode.x, gfxmode.y, Window::Titlebar);
    	Context* context = Context::Create(window, 0);
    	World* world = World::Create();
    	
    	Pivot* gameControl = Pivot::Create();
    	GameControl* actor = new GameControl(); //this actor has PostRender() which I used to draw image
    	gameControl->SetActor(actor);
    
    	while (true)
    	{
    		if (window->Closed() || window->KeyDown(Key::Escape)) return false;
    		Time::Update();
    		world->Update();
    		world->Render();
    		context->Sync();
    	}
    	return 0;
    }

    In PostRender() function of my actor

    Context::GetCurrent()->DrawImage(
      myimage,
      Window::GetCurrent()->GetWidth() - myimage->GetWidth(),
      0,
      myimage->GetWidth(),
      myimage->GetHeight()
    );

    as my expectation, myimage will be displayed on the top right corner of screen, but this look like this instead

    image.png.ef84ba5ba3dc510af677481bdb770cfe.png

    window size seems to be larger than actual game display. It is ok if I use Window::FullScreen in Window::Create()


  6. I put some Pivots in Editor around my map and attach a script to each of them, here is the script

    function Script:Start()
      self.entity:SetKeyValue("type","spawnPosition")
    end

    In spawn.php

    //#include <iostream> was on top
    //#include <list> was on top
    
    std::list<Entity> spawnPosition;
    
    for (int x = 0; x < world->CountEntities(); x++)
    {
      Entity* entity = world->GetEntity(x);
      if (entity->GetKeyValue("type") == "spawnPosition")
      {
        spawnPosition.push_back(entity);
      }
    }

    and I got this error

    Severity    Code    Description    Project    File    Line    Suppression State
    Error    C2664    'void std::list<int,std::allocator<_Ty>>::push_back(const _Ty &)': cannot convert argument 1 from 'Leadwerks::Entity *' to '_Ty &&'    CSCDVMP    d:\google drive\w3ateam\game development\cscdvmp\projects\windows\playerclass.cpp    160    
     

    what is the right way?

    • Sad 1

  7. On 5/7/2019 at 1:54 PM, Lethal Raptor Games said:

    Isn't it supposed to be self.entity?  You are creating a new variable called myEntity and setting it to nil, no where is it being assigned the entity the script belongs too.

    He put "Sol" entity to the input, this is really weird. What is that Sol object ? a pivot ?

    • Like 1

  8. I have more simple one, only for detecting mouse scroll up/down, not for calculating HOW much scroll

    in Main.lua, add this at the bottom of main while loop (right above "end")

    image.png.493a001fabaa6eac5116159ed245541b.png

    lastMouseZ = window:GetMousePosition().z

    and add this as a Global function

    MouseScrollDirection = function()
      if window:GetMousePosition().z < lastMouseZ then return 1 --scolled up
      elseif window:GetMousePosition().z > lastMouseZ then return 2 --scrolled down
      elseif window:GetMousePosition().z == lastMouseZ then return 0 end --no scroll
    end

    Use this function in any Script:UpdateWorld() function to detect mouse scroll

    function Script:UpdateWorld()
      if MouseScrollDirection == 1 then
        --do something with scroll up
        --example: camera:Move(0,0,1)
      end
      if MouseScrollDirection == 2 then
        --do something with scroll down
        --example: camera:Move(0,0,-1)
      end
    end

     

    • Like 1
×
×
  • Create New...