Entity *ScreenSprite::Clone(bool deepClone, bool ignoreEditorOnly) { ScreenSprite *newSprite = new ScreenSprite(getTexture()->getResourcePath(), spriteWidth, spriteHeight); for(int i=0; i < animations.size(); i++) { newSprite->addAnimation(animations[i]->name, animations[i]->frames, animations[i]->speed); } if(currentAnimation) { newSprite->playAnimation(currentAnimation->name, currentFrame, playingOnce); } applyClone(newSprite, deepClone, ignoreEditorOnly); return newSprite; }
HelloPolycodeApp::HelloPolycodeApp(PolycodeView *view) : EventHandler() { #ifdef __APPLE__ core = new CocoaCore(view, 640,480,false,false,0,0,90); #else core = new SDLCore(view, 640,480,false,false,0,0,90); #endif CoreServices::getInstance()->getResourceManager()->addArchive("Resources/default.pak"); CoreServices::getInstance()->getResourceManager()->addDirResource("default", false); CoreServices::getInstance()->getRenderer()->setTextureFilteringMode(Renderer::TEX_FILTERING_NEAREST); Screen *screen = new Screen(); ScreenSprite *sprite = new ScreenSprite("Resources/sprite_sheet.png", 93, 78); sprite->setPosition(350,150); sprite->setScale(7,7); screen->addChild(sprite); sprite->addAnimation("ExampleAnimation", "0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,29,29,29,29,29,29,29,29,29", 0.03); sprite->playAnimation("ExampleAnimation", 0, false); }
ScreenEntity *ScreenEntityInstance::loadObjectEntryIntoEntity(ObjectEntry *entry) { ScreenEntity *entity = NULL; ObjectEntry *entityType = (*entry)["type"]; if(entityType) { if(entityType->stringVal == "ScreenImage") { ObjectEntry *screenImageEntry = (*entry)["ScreenImage"]; String imagePath = (*screenImageEntry)["filePath"]->stringVal; ScreenImage *image = new ScreenImage(imagePath); ObjectEntry *screenShapeEntry = (*entry)["ScreenShape"]; applyScreenShape(screenShapeEntry, image); entity = image; } if(entityType->stringVal == "ScreenParticleEmitter") { ObjectEntry *emitterEntry = (*entry)["ScreenParticleEmitter"]; ScreenParticleEmitter *placingEmitter = new ScreenParticleEmitter((*emitterEntry)["texturePath"]->stringVal, Particle::BILLBOARD_PARTICLE, ParticleEmitter::CONTINUOUS_EMITTER, (*emitterEntry)["lifespan"]->NumberVal, (*emitterEntry)["particleCount"]->NumberVal, Vector3((*emitterEntry)["dirX"]->NumberVal, (*emitterEntry)["dirY"]->NumberVal, 0.0), Vector3((*emitterEntry)["gravX"]->NumberVal, (*emitterEntry)["gravY"]->NumberVal, 0.0), Vector3((*emitterEntry)["deviationX"]->NumberVal, (*emitterEntry)["deviationY"]->NumberVal, 0.0), Vector3((*emitterEntry)["radiusX"]->NumberVal, (*emitterEntry)["radiusY"]->NumberVal, 0.0)); placingEmitter->brightnessDeviation = (*emitterEntry)["brightnessDeviation"]->NumberVal; placingEmitter->particleSize = (*emitterEntry)["particleSize"]->NumberVal; placingEmitter->perlinModSize = (*emitterEntry)["perlinModSize"]->NumberVal; placingEmitter->perlinEnabled = (*emitterEntry)["perlinEnabled"]->boolVal; placingEmitter->particleSpeedMod = (*emitterEntry)["particleSpeedMod"]->NumberVal; placingEmitter->rotationSpeed = (*emitterEntry)["rotationSpeed"]->NumberVal; placingEmitter->rotationFollowsPath = (*emitterEntry)["rotationFollowsPath"]->boolVal; placingEmitter->useScaleCurves = (*emitterEntry)["useScaleCurves"]->boolVal; placingEmitter->useColorCurves = (*emitterEntry)["useColorCurves"]->boolVal; placingEmitter->setParticleBlendingMode((*emitterEntry)["particleBlendMode"]->intVal); placingEmitter->setWidth(placingEmitter->emitterRadius.x); placingEmitter->setHeight(placingEmitter->emitterRadius.y); parseObjectIntoCurve((*emitterEntry)["scaleCurve"], &placingEmitter->scaleCurve); parseObjectIntoCurve((*emitterEntry)["colorCurveR"], &placingEmitter->colorCurveR); parseObjectIntoCurve((*emitterEntry)["colorCurveG"], &placingEmitter->colorCurveG); parseObjectIntoCurve((*emitterEntry)["colorCurveB"], &placingEmitter->colorCurveB); parseObjectIntoCurve((*emitterEntry)["colorCurveA"], &placingEmitter->colorCurveA); entity = placingEmitter; } if(entityType->stringVal == "ScreenSprite") { ObjectEntry *screenSpriteEntry = (*entry)["ScreenSprite"]; String filePath = (*screenSpriteEntry)["filePath"]->stringVal; ScreenSprite *sprite = new ScreenSprite(filePath); String animName = (*screenSpriteEntry)["anim"]->stringVal; sprite->playAnimation(animName, -1, false); ObjectEntry *screenShapeEntry = (*entry)["ScreenShape"]; applyScreenShape(screenShapeEntry, sprite); entity = sprite; } if(entityType->stringVal == "ScreenEntityInstance") { ObjectEntry *screenInstanceEntry = (*entry)["ScreenEntityInstance"]; String filePath = (*screenInstanceEntry)["filePath"]->stringVal; ScreenEntityInstance *instance = new ScreenEntityInstance(filePath); entity = instance; } if(entityType->stringVal == "ScreenShape") { ObjectEntry *screenShapeEntry = (*entry)["ScreenShape"]; ScreenShape *shape = new ScreenShape(0, 1, 1); applyScreenShape(screenShapeEntry, shape); entity = shape; } if(entityType->stringVal == "ScreenSound") { ObjectEntry *screenSoundEntry = (*entry)["ScreenSound"]; String filePath = (*screenSoundEntry)["filePath"]->stringVal; Number refDistance = (*screenSoundEntry)["refDistance"]->NumberVal; Number maxDistance = (*screenSoundEntry)["maxDistance"]->NumberVal; Number volume = (*screenSoundEntry)["volume"]->NumberVal; Number pitch = (*screenSoundEntry)["pitch"]->NumberVal; ScreenSound *sound = new ScreenSound(filePath, refDistance, maxDistance); sound->getSound()->setVolume(volume); sound->getSound()->setPitch(pitch); sound->setWidth(50); sound->setHeight(50); entity = sound; } if(entityType->stringVal == "ScreenLabel") { ObjectEntry *screenLabelEntry = (*entry)["ScreenLabel"]; String text = (*screenLabelEntry)["text"]->stringVal; String font = (*screenLabelEntry)["font"]->stringVal; int size = (*screenLabelEntry)["size"]->intVal; int aaMode = (*screenLabelEntry)["aaMode"]->intVal; ScreenLabel *label = new ScreenLabel(text, size, font, aaMode); label->positionAtBaseline = false; ObjectEntry *screenShapeEntry = (*entry)["ScreenShape"]; applyScreenShape(screenShapeEntry, label); entity = label; } } if(!entity) { entity = new ScreenEntity(); } entity->ownsChildren = true; entity->setPositionMode(ScreenEntity::POSITION_CENTER); entity->color.r = (*entry)["colorR"]->NumberVal; entity->color.g = (*entry)["colorG"]->NumberVal; entity->color.b = (*entry)["colorB"]->NumberVal; entity->color.a = (*entry)["colorA"]->NumberVal; entity->blendingMode = (*entry)["blendMode"]->intVal; entity->scale.x = (*entry)["scaleX"]->NumberVal; entity->scale.y = (*entry)["scaleY"]->NumberVal; entity->position.x = (*entry)["posX"]->NumberVal; entity->position.y = (*entry)["posY"]->NumberVal; entity->setRotation((*entry)["rotation"]->NumberVal); entity->id = (*entry)["id"]->stringVal; String tagString = (*entry)["tags"]->stringVal; if(tagString != "") { std::vector<String> tags = tagString.split(","); for(int i=0; i < tags.size(); i++) { entity->addTag(tags[i]); } } ObjectEntry *props = (*entry)["props"]; if(props) { for(int i=0; i < props->length; i++) { ObjectEntry *prop = ((*props))[i]; if(prop) { entity->setEntityProp((*prop)["name"]->stringVal, (*prop)["value"]->stringVal); } } } ObjectEntry *children = (*entry)["children"]; if(children) { for(int i=0; i < children->length; i++) { ObjectEntry *childEntry = ((*children))[i]; ScreenEntity *childEntity = loadObjectEntryIntoEntity(childEntry); entity->addChild(childEntity); } } return entity; }